pax_global_header00006660000000000000000000000064147656473540014537gustar00rootroot0000000000000052 comment=62f600c98ec6a25fd3d264774c6fc811ec3c46e4 pygccxml-3.0.2/000077500000000000000000000000001476564735400133675ustar00rootroot00000000000000pygccxml-3.0.2/.binder/000077500000000000000000000000001476564735400147105ustar00rootroot00000000000000pygccxml-3.0.2/.binder/.dockerignore000066400000000000000000000000121476564735400173550ustar00rootroot00000000000000README.md pygccxml-3.0.2/.binder/Dockerfile000066400000000000000000000041201476564735400166770ustar00rootroot00000000000000# -*- mode: dockerfile -*- # vi: set ft=dockerfile : # TODO(eric.cousineau): Figure out how to make JupyterLab work with this setup: # https://github.com/binder-examples/jupyterlab # TODO(eric.cousineau): See if it's easier to use a conda-based workflow, or a # simpler Docker base image, to use Eigen headers, rather than doing a custom # Docker image: # https://mybinder.readthedocs.io/en/latest/using/config_files.html FROM ubuntu:24.04 ARG NB_USER=jovyan ARG NB_UID=1000 ARG NB_GID=100 EXPOSE 7000/tcp EXPOSE 8888/tcp RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y --no-install-recommends \ -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew \ -o Dpkg::Use-Pty=0 \ locales \ python3-pip \ python3-setuptools \ && rm -rf /var/lib/apt/lists/* \ && locale-gen en_US.UTF-8 # Install common C++ libraries for experimenting. These are not necessary to # use pygccxml itself. RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y --no-install-recommends \ -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew \ -o Dpkg::Use-Pty=0 \ libeigen3-dev \ libstdc++-7-dev \ && rm -rf /var/lib/apt/lists/* RUN useradd -d "/home/$NB_USER" -G $NB_GID -mU -s /bin/bash "$NB_USER" ENV HOME="/home/$NB_USER" \ LANG=en_US.UTF-8 \ LANGUAGE=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ SHELL=/bin/bash \ USER="$NB_USER" \ PATH="/home/$NB_USER/.local/bin:/usr/local/bin:/usr/bin:/bin" # Upgrade pip to use newer indices for castxml. # WARNING: Never upgrade a distribution `pip` on a host system using sudo! # We are only doing this for a transient Docker image. For a host system, use a # virtualenv to upgrade pip. RUN pip3 --no-cache-dir install -U pip WORKDIR $HOME RUN mkdir pygccxml COPY ["/", "pygccxml/"] RUN chown -R $NB_UID:$NB_GID \ "$HOME/pygccxml" USER "$NB_USER" RUN pip3 --no-cache-dir install castxml RUN pip3 --no-cache-dir install -e ./pygccxml[examples] CMD ["jupyter", "notebook", "--ip", "0.0.0.0", "pygccxml/docs/examples/notebook/example.ipynb"] pygccxml-3.0.2/.binder/README.md000066400000000000000000000025001476564735400161640ustar00rootroot00000000000000# Docker Image for Binder *Note that due to Binder conventions, this directory MUST always be in the root of the repository and named either `binder` or `.binder`. This image is NOT intended for use by most developers or users.* These instructions are for running the image locally. For Binder itself, you should only need to visit the link from the root-level README. To create a Docker image and run a Docker container similar to those used by [Binder](https://mybinder.org) for local debugging purposes, execute the following `build` and `run` commands from the top level of this Git repository: ```bash docker build -f .binder/Dockerfile -t binder . docker run --rm -it --name mybinder -p 8888:8888 binder ``` For the URLs printed, only open the `127.0.0.1:8888` URL (including the login token) in a web browser on your host system. To stop the running container, simply exit it from the terminal with Ctrl+C. *Note*: If you want to test the Docker image with the current source tree (without copying, so you can modify source files), insert the arguments `-v "${PWD}:/home/jovyan/pygccxml"` to `docker run`, before the image name (`binder`), to mount it directly. This will *not* act on any changes to `./setup.py`. pygccxml-3.0.2/.coveragerc000066400000000000000000000013371476564735400155140ustar00rootroot00000000000000[run] source = pygccxml,docs/examples,unittests # unittest/misc contains some tests that are just there for debugging # purposes and which do not need to be covered. omit = unittests/misc,unittests/demangled_tester.py parallel = True [report] # Regexes for lines to exclude from consideration exclude_lines = # Have to re-enable the standard pragma pragma: no cover # Don't complain about missing debug-only code: def __repr__ if self\.debug # Don't complain if tests don't hit defensive assertion code: raise AssertionError raise NotImplementedError # Don't complain if non-runnable code isn't run: if 0: if __name__ == .__main__.: # Unittests runner unittest.TextTestRunner\( pygccxml-3.0.2/.dockerignore000077700000000000000000000000001476564735400200262.gitignoreustar00rootroot00000000000000pygccxml-3.0.2/.gitattributes000066400000000000000000000000261476564735400162600ustar00rootroot00000000000000README.rst merge=ours pygccxml-3.0.2/.github/000077500000000000000000000000001476564735400147275ustar00rootroot00000000000000pygccxml-3.0.2/.github/workflows/000077500000000000000000000000001476564735400167645ustar00rootroot00000000000000pygccxml-3.0.2/.github/workflows/tests.yml000066400000000000000000000254071476564735400206610ustar00rootroot00000000000000on: push: branches: - master - develop tags: - "*" pull_request: jobs: tests: name: ${{ matrix.os }} ${{ matrix.compiler }}${{ matrix.clang-version }} ${{ matrix.cppstd }} Python ${{ matrix.python-version }} Epic ${{ matrix.castxml-epic }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: # UBUNTU 22.04 - CASTXML EPIC 0 - os: ubuntu-22.04 arch: x86_64 compiler: clang++ clang-version: 13 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-22.04 arch: x86_64 compiler: clang++ clang-version: 14 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-22.04 arch: x86_64 compiler: clang++ clang-version: 15 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-22.04 arch: x86_64 compiler: clang++ clang-version: 15 python-version: "3.13" castxml-epic: 1 cppstd: "-std=c++98" # UBUNTU 24.04 - CASTXML EPIC 0 - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.9" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.10" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.11" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.12" castxml-epic: 0 cppstd: "-std=c++98" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++98" # UBUNTU 24.04 - CASTXML EPIC 0 - c++XX - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++11" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++14" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++17" # UBUNTU 24.04 - CASTXML EPIC 1 - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 1 cppstd: "-std=c++98" - os: ubuntu-24.04 arch: x86_64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 1 cppstd: "-std=c++11" # UBUNTU ARM - os: ubuntu-22.04-arm arch: aarch64 compiler: clang++ clang-version: 15 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++17" - os: ubuntu-24.04-arm arch: aarch64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 0 cppstd: "-std=c++17" # UBUNTU 24.04 - CASTXML EPIC 1 - os: ubuntu-24.04-arm arch: aarch64 compiler: clang++ clang-version: 16 python-version: "3.13" castxml-epic: 1 cppstd: "-std=c++11" # MACOS - os: macos-13 compiler: clang++ python-version: "3.13" castxml-epic: 0 - os: macos-15 compiler: clang++ python-version: "3.13" castxml-epic: 0 steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Display Python version run: python -c "import sys; print(sys.version)" - name: Install Python lib and test libs run: | pip install '.[test]' - name: Run pycodestyle run: pycodestyle . --exclude=docs - name: Write xml_generator.cfg if: contains(matrix.os, 'ubuntu') run: | echo "[xml_generator]" > tests/xml_generator.cfg echo "compiler_path=/usr/bin/${{ matrix.compiler }}-${{ matrix.clang-version }}" >> tests/xml_generator.cfg echo "ccflags=${{ matrix.cppstd }}" >> tests/xml_generator.cfg # ─── Setup CastXML for Linux x86_64 ────────────────────────────── - name: Setup CastXML for Linux x86_64 (Ubuntu 24.04) if: matrix.os == 'ubuntu-24.04' && matrix.arch == 'x86_64' run: | wget -q -O ~/castxml-ubuntu-24.04-x86_64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-ubuntu-24.04-x86_64.tar.gz tar -xzf ~/castxml-ubuntu-24.04-x86_64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml - name: Setup CastXML for Linux x86_64 (Ubuntu 22.04) if: matrix.os == 'ubuntu-22.04' && matrix.arch == 'x86_64' run: | wget -q -O ~/castxml-ubuntu-22.04-x86_64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-ubuntu-22.04-x86_64.tar.gz tar -xzf ~/castxml-ubuntu-22.04-x86_64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml # ─── Setup CastXML for Linux aarch64 ────────────────────────────── - name: Setup CastXML for Linux aarch64 (Ubuntu 24.04) if: matrix.os == 'ubuntu-24.04-arm' && matrix.arch == 'aarch64' run: | wget -q -O ~/castxml-ubuntu-24.04-arm-aarch64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-ubuntu-24.04-arm-aarch64.tar.gz tar -xzf ~/castxml-ubuntu-24.04-arm-aarch64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml - name: Setup CastXML for Linux aarch64 (Ubuntu 22.04) if: matrix.os == 'ubuntu-22.04-arm' && matrix.arch == 'aarch64' run: | wget -q -O ~/castxml-ubuntu-22.04-arm-aarch64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-ubuntu-22.04-arm-aarch64.tar.gz tar -xzf ~/castxml-ubuntu-22.04-arm-aarch64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml # ─── Setup CastXML for MacOS ────────────────────────────── - name: Setup CastXML for macOS (arm64) if: matrix.os == 'macos-15' run: | wget -q -O ~/castxml-macos-15-arm64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-macos-15-arm64.tar.gz tar -xzf ~/castxml-macos-15-arm64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml - name: Setup CastXML for macOS (x86_64) if: matrix.os == 'macos-13' run: | wget -q -O ~/castxml-macos-13-x86_64.tar.gz https://github.com/CastXML/CastXMLSuperbuild/releases/download/v0.6.11.post2/castxml-macos-13-x86_64.tar.gz tar -xzf ~/castxml-macos-13-x86_64.tar.gz -C ~/ chmod +x ~/castxml/bin/castxml - name: Run tests run: | export PATH=~/castxml/bin:$PATH pytest tests build: name: Build distribution 📦 if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install pypa/build run: >- python3 -m pip install build --user - name: Build a binary wheel and a source tarball run: python3 -m build - name: Store the distribution packages uses: actions/upload-artifact@v4 with: name: python-package-distributions path: dist/ publish-to-pypi: name: >- Publish Python 🐍 distribution 📦 to PyPI if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - build runs-on: ubuntu-latest environment: name: pypi url: https://pypi.org/p/ # Replace with your PyPI project name permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 github-release: name: >- Sign the Python 🐍 distribution 📦 with Sigstore and upload them to GitHub Release if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - publish-to-pypi runs-on: ubuntu-latest permissions: contents: write # IMPORTANT: mandatory for making GitHub Releases id-token: write # IMPORTANT: mandatory for sigstore steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Sign the dists with Sigstore uses: sigstore/gh-action-sigstore-python@v3.0.0 with: inputs: >- ./dist/*.tar.gz ./dist/*.whl - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release create "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --notes "" - name: Upload artifact signatures to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} # Upload to GitHub Release using the `gh` CLI. # `dist/` contains the built packages, and the # sigstore-produced signatures and certificates. run: >- gh release upload "$GITHUB_REF_NAME" dist/** --repo "$GITHUB_REPOSITORY" pygccxml-3.0.2/.gitignore000066400000000000000000000005521476564735400153610ustar00rootroot00000000000000*.pyc *.pyo *~ docs/_build tests/temp tests/data/pygccxml.cache tests/data/directory_cache_test tests/data/ogre.1.7.xml unittests/temp unittests/data/pygccxml.cache unittests/data/directory_cache_test unittests/data/ogre.1.7.xml .idea dist build pygccxml.egg-info *.prof .coverage* docs/examples/caching/example.hpp.xml test_cost.log docs/apidocs htmlcov /venv/ pygccxml-3.0.2/CHANGELOG.md000066400000000000000000001216331476564735400152060ustar00rootroot00000000000000Changes ======= Version 3.0.2 ------------- 1. Fix automatic wheel upload (did not work in 3.0.1) 2. Fix syntax errors in readme Version 3.0.1 ------------- This release was never uploaded to pypi due to an issue with the readme syntac. Use 3.0.2 instead. 1. Build and sign wheels using Github Actions CI, see https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ This is a way better way to distribute our wheels as it prevents supply chain attacks. Version 3.0.0 ------------- 1. Drop support for `Python 3.7` and `Python 3.8` 2. Add official support for `Python 3.12`, `Python 3.13` 3. Add official support for `arm` processors 4. Make many tests more robust for more combinations of processors / c++ standards 5. Update CI with newer `castxml` versions 5. Removed the `__va_list` declaration on `arm` from the declaration tree 6. Fix issues with spaces in c++ templates (containers traits) I have seen different scenarios regarding spaces in templates. On some platforms there might be spaces, on some others not. This "might" be a breaking change if you used to compare declarations manually, but from a pygccxml point of view all comparisons / search functions are still working as before. Anyway this is a 3.0.0 major version so at least you have been warned. Version 2.6.1 ------------- 1. Fix test_remove_template_defaults when tested on macos 13 2. Fix some test compilation with c++14/17 Version 2.6.0 ------------- 1. Drop utils.is_str function 2. Massive unit test refactoring: migrated all the tests to pytest. 3. Make sure has_mutable, has_static, has_extern functions always return a boolean 4. Fix a bug in unordered_set_traits and unordered_multiset_traits 5. Fix a bug in build_decl_string with elaborated type specifiers 6. Fix a bug where the declared widht of arrays args where lost (by using the original type xml tag) Version 2.5.0 ------------- 1. Add support for new cxx versions in cxx_standard class 2. Deprecate utils.is_str 3. pyproject.toml improvements Version 2.4.0 ------------- 1. Drop support for `Python 3.6` 2. Add official support for `Python 3.9`, `Python 3.10`, `Python 3.11` 3. Replace `setup.py` by `pyproject.toml` Version 2.3.0 ------------- 1. Drop support for `Python 3.5` 2. Make type equivalence check for string and ostream more robust (`is_std_string`, `is_std_wstring`, `is_std_ostream`, `is_std_wostream`) 3. Skip GCC's __va_list fields on AArch644 4. Add search_path arg to `find_xml_generator 5. Publish pygccxml as source distribution too Version 2.2.1 ------------- 1. Fix issue introduced by 2.2.0 where cflags are not passed to config objects properly. Version 2.2.0 ------------- 1. Add `ccflags` config parameter. Castxml removes any definitions of its pre-defined macros (e.g. -fopenmp). The `ccflags` option allows users to override this behavior. 2. Add an example jupyter notebook for binder 3. Add declaration object for deprecation message 4. Update release documentation Version 2.1.0 ------------- 1. `create_temp_file_name`: remove deprecated `dir` argument 2. Warn if "include directories" do not exist. 3. Use "overrides" information from CastXML 4. Add comment parsing from CastXML Version 2.0.1 ------------- 1. Minor description and doc updates for release uploads Version 2.0.0 ------------- 1. Drop support for ```GCC-XML```. * Drop all the demangled name attributes * Drop declarations.class_t.USE_DEMANGLED_AS_NAME 2. Drop support for ```Python 2.6```, ```Python 2.7```, ```Python 3.2```, ```Python 3.3```, ```Python 3.4```. 3. Add support for ```Python 3.5```, ```Python 3.6```, ```Python 3.7```, ```Python 3.8```. 4. Deprecated all the `i_depend_on_them` methods from the `declaration_t` class hierarchy. Instead of using `decl.i_depend_on_them()`, please use the `declarations.get_dependencies_from_decl(decl)` function from the `declarations` module, which returns the same result. 5. Add support for `-std=c++17` and `-std=c++2a` flags 6. Add `g++` and `gcc` to better support gnu compilers on windows Version 1.9.1 ------------- 1. Fix bug in the ```find_noncopyable_vars``` method which wrongly returned member variables of pointer type (#84) 2. Fix bug in the ```smart_pointer_traits.value_type``` and ```auto_pointer_traits.value_type``` methods which didn't find the expected ```value_type``` declaration (#85) 3. Fix bug in the ```smart_pointer_traits.is_smart_pointer``` and ```auto_pointer_traits.is_smart_pointer``` methods which didn't properly work (#85) Version 1.9.0 ------------- 1. [New features] * Full Python 3.6 support * Full pypy and pypy3 support * Better windows support * Small performance improvements * Added ```is_struct``` function to declarations package. It returns true if a declaration is a struct. * Added support for the castxml epic version format 1. This is a new format which is partially not backward compatible with the legacy format. To use this new format, use the ```castxml_epic_version``` flag and set it to 1. This new format will allow to support new c++ features that were not recognized by ```gccxml``` and previous versions of ```castxml```. * Added support for elaborated type specifiers. A new ```elaborated_t``` type was added, with the related ```is_elaborated``` and ```remove_elaborated``` function. This is only available when setting the ```castxml_epic_version``` flag to 1 . 2. [Windows] * Add Appveyor Windows build (castxml, VS 2013, python 3.5) and merge coverage results with Travis. * Attributes defined as ```__thiscall__``` are now ignored (tested with VS 2013). The ```__thiscall__``` in some attributes will be removed too. If you still want to have access to these attributes, you can use the ```config.flags = ["f2"]``` option. 3. [Deprecations] * Deprecated ```decl``` attribute from ```dependency_info_t```. Use the ```declaration``` attribute instead. * Deprecated the ```nss```, ```free_fun``` and ```free_funs``` methods from the ```namespace_t``` class. Use the ```namespaces```, ```free_function``` and ```free_functions``` methods instead. * Deprecated the ```mem_fun```, ```mem_funs```, ```mem_oper```, ```mem_opers```, ```enum``` and ```enums``` methods from the ```scopedef_t``` class. Use the ```member_function```, ```member_functions```, ```member_operator```, ```member_operators```, ```enumeration``` and ```enumerations``` methods instead. * Deprecated the ```mdecl_wrapper_t.to_list()```. You can implement your own version of it if you really need it. * Deprecated the ```declaration_not_found_t``` and ```multiple_declarations_found_t``` attributes from the ```scopedef_t``` class. These exceptions are available through the ```pygccxml.declarations``` package. * Deprecated the ```decorated_name``` attribute from ```declaration_t```. This was used by the binary parser, which have been removed in this version. As these attributes still could be used somewhere (but always returned None anyway), they need to go through a deprecation cycle first. 4. [Removals] * Removed ```utils.xml_generator``` and ```utils.xml_output_version``` attributes. These two variables should not have made it into the public API. There is no deprecation cycle for these because of the complexity of keeping these module attributes around. Version 1.8.6 ------------- 1. Fix _HAS_TR1=0 definition for msvc9 (#72) 2. Fix possible infinite recursion in ```find_noncopyable_vars()``` (#71) Version 1.8.5 ------------- 1. Fix multiple calls to ``` __hash__()``` (#70) 2. ```Static``` and ```extern``` qualifiers are now no more treated as equivalents in the type_qualifiers class (for ```CastXML```). The old behaviour is kept for ```GCC-XML``` (```static == extern```). 3. Fix for ```declarations.is_noncopyable``` when used on a ```pointer_t```. Version 1.8.4 ------------- 1. Include paths read from configuration files on windows are now normed and passed between quotation marks. This makes ```pygccxml``` more robust when used on Windows (with paths containing whitespaces). 2. Closed cache file handle, which would not be closed in case of an exception (warning thrown by Python 2.7.13) 3. Always call wait() on subprocesses before closing stdout/stderr streams. Detected by Python 3.6. Fixes the following warning: ResourceWarning: subprocess xxxxx is still running 4. Fix deprecation warnings thrown by ```ConfigParser``` when using pygccxml with python 2.7.13. Fix the usage of ```pygccxml``` with python 3.6. 5. Updated travis setup to python 3.6 for OS X. Version 1.8.3 ------------- 1. Single-source the version number to prevent version numbers mismatches. Release 1.8.2 contained a wrong version number in its download url on pypi. Version 1.8.2 ------------- 1. ```xml_generator_configuration_t``` will no more try to find castxml or gccxml. You can use ```utils.find_xml_generator``` to help you finding the path to the xml generator, or set it manually. It is now mandatory to pass a valid ```xml_generator``` and ```xml_generator_path``` to the configuration (#65). Version 1.8.1 ------------- 1. Added ```is_struct``` function to declarations package. It returns true if a declaration is a struct. 2. Removed * from decl_string when type is a function pointer (#61) 3. Update travis.yml for newer OS X images. Update CastXML binaries for Travis. 4. Fix regression in directory_cache, which was crashing due an unset variable. Add support for python3 in directory_cache. Version 1.8.0 ------------- 1. ```CastXML``` is now the default XML generator (instead of ```GCCXML```) ```find_xml_generator``` will now look for ```CastXML``` first too. 2. Do not allow to use the GCCXML provided by newer gccxml debian packages. It is a wrapper around CastXML which can confuse pygccxml. You should use the castxml package and the CastXML binary instead. If you really want to use gccxml, the gccxml.real binary from the gccxml debian package can still be used. 3. Fix parsing of ```boost/locale.hpp``` code. Templated class instantiations with specializations are now better supported, specifically when containing parentheses: ```myClass(const std::string &, const std::string &)> obj;``` 4. When using the ```remove_pointer``` function on a function pointer, the ```remove_pointer``` function now correctly returns a ```calldef_type_t```. 5. ```declarations.is_string```, ```declarations.is_std_wstring```, ```declarations.is_std_ostream``` and ```declarations.is_std_wostream``` now correctly work when a the type is also a reference. Example: ```declarations.is_string``` returned false for ```typedef std::string& x3;```; it will return true now. 6. General code style overhaul (with the help of quantifiedcode.com) 7. Added a bunch of new examples and documentation update and cleanup 8. [Removals] Remove ```compiler``` attribute in declarations.py and ```gccxml_path``` from config.py These were deprecated in pygccxml v1.7.0, and definitively removed for v1.8.0 9. [Deprecations] * The ```binary_parsers``` module was deprecated. It seems that this module is not used by other third-party projects, at least a quick search on GitHub did not give any interesting usage. Also, this code is not tested, and there seem to be some undefined variables, so it is highly probable that this module is not working anyway. I do not want to put much efforts in maintaining this module, but concentrate on improving pygccxml's core features. If somebody wants to revive this module it can still be done in a separate project. Thus, the 3 following functions are now deprecated and will be removed in pygccxml 1.9.0: ```merge_information```, ```undecorate_blob``` and ```format_decl```. The ```undname_creator_t``` class is also deprecated for the same reason. * A bunch of attributes and methods were deprecated. They will throw a warning when used with pygccxml 1.8.0, and will be removed in version 1.9.0. * In ```class_declaration_t``` and ```class_t```: - decl.container_traits attribute => declarations.find_container_traits(decl) * In ```class_t``` - decl.find_noncopyable_vars() method => declarations.find_noncopyable_vars(decl) - decl.find_copy_constructor() method => declarations.find_copy_constructor(decl) - decl.has_vtable argument => declarations.has_vtable(decl) * In ```constructor_t``` - ctor.is_copy_constructor attribute => declarations.is_copy_constructor(ctor) - ctor.is_trivial_constructor attribute => declarations.is_trivial_constructor(ctor) * Deprecate the ```ns()``` method. The ```namespace()``` method can be used instead. * Deprecate ```etree_scanner_t``` and ```etree_saxifier_t``` classes. The most efficient xml scanner class is the ```ietree_scanner_t``` class, which is the one used since many years now. * The ```[gccxml]``` section used in the configuration file is now deprecated. Please use ```[xml_generator]``` instead. * ```native_compiler``` and ```enum``` classes from the ```utils``` module. These were not used in ```pygccxml```, and can easily be implemented in your own project if you need and equivalent Version 1.7.6 ------------- 1. Fix problem with argument without names when building declaration string (#55) Version 1.7.5 ------------- 1. Improve error message when no castxml or gccxml is found. 2. Fix compilation of tests with c++11. 3. Fix patching of enums in default arguments for C++03. 4. Version numbers are still tagged with the v prefix (1.7.4 was correctly tagged), as this is recommended by GitHub. The version number in the __init__.py and setup.py files are without v prefix, because this is what pip requires. Thanks to the following people for their contribution to this release: Ashish Sadanandan Version 1.7.4 ------------- 1. CV-qualified arrays were not being handled correctly by type traits manipulations functions. For instance, 'int const[N]' would not be detected as 'const'. Similar problems existed for volatile qualified arrays too. See #35 for more details. A newer version of CastXML is recommended (xml output version >= 1.138) 2. Close subprocess stdout stream once value has been read. Fixes some warnings under python3. 3. Since this release, pyggcxml's version numbers do not contain the ``v`` prefix anymore. This was breaking distribution on PyPI (pypi.python.org). 4. The documentation is now at http://pygccxml.readthedocs.io/ Thanks to the following people for their contribution to this release: Ashish Sadanandan Version 1.7.3 ------------- 1. Addition of an is_union() method in the type_traits module. 2. type_traits.smart_pointer_traits will now classify std::shared_ptr as a smart pointer (only boost::shared_ptr was recognized before) 3. Fix a regression in undname_creator_t.format_argtypes 4. C++xx flags are now correctly passed to CastXML. Allowed flags are: "-std=c++98", "-std=c++03", "-std=c++11", "-std=c++14", "-std=c++1z" Thanks to Mark Moll for the fix. 5. Add better support for "typedef (class|struct) {} foo;" syntax when using CastXML. GCCXML did not recognize the typedef. Fetching these declarations can now be done with: .typedef("foo") or .class_("foo"). 6. Add support for the future llvm 3.9. As in release v1.7.1, new structs and typedefs are now exposed by llvm, which broke pyplusplus. In this case these are ```__NSConstantString_tag``` and ```__NSConstantString```. The two declarations are now hidden from the declarations tree, but can still be generated by using the ```config.flags = ["f1"]``` option. 7. Multiple fixes to adapt default arguments in functions for py++. Using the latest version of CastXML is recommended. This makes sure default arguments for function parameters are correctly defined, so that py++ can process them. 8. Fix for exception when using castxml + gcc5 + std=c++11 and maps. 9. Removed unittest2 dependency for testing with python 2.6 10. Testing: test with std::tr1 unordered containers for gcc >= 4.4.7 and castxml 11. Cosmetic fix for generator name printed to stdout when launching unit tests 12. Fix simple typo in example.py comment Thanks to the following people for their contribution to this release: Mark Moll, Ashish Sadanandan, Mark Oates Version 1.7.2 ------------- 1. Fix exception in is_copy_constructor when the constructor's argument was a typedef. is_copy_constructor will now return False instead of failing. See issue #27. 2. Fix bug with utils.xml_generator being unset when reading cached file. This could for example happen when reading a cached file from a second python interpreter (e.g. in a subprocess or by calling pygccxml multiple times from a script). See issue #27. 3. SafeConfigParser is throwing a deprecation warning in python 3.2 and newer. Use ConfigParser instead. Thanks to Mark Moll for the patch. 4. Add support for cflags property in config files. Thanks to Mark Moll for the patch. Version 1.7.1 ------------- 1. Remove the __va_list_tag declaration from the tree when parsing with CastXML The __va_list_tag declarations are internal declarations, which are often not needed. They are for example polluting the declarations tree when running pyplusplus. This is optional but on by default. To still load the __va_list_tag declarations in the tree, a config flag can be set like this: ``config.flags = ["f1"]``, or by passing the ``flags=["f1"]`` argument the config setup. 2. Some code cleanup 3. Build new package for pypi. The ``1.7.0`` upload has gone wrong ... Version 1.7.0 ------------- 1. Added support for CastXML (https://github.com/CastXML/CastXML) GCCXML is deprecated and does no more work with modern compilers. CastXML should be used instead. ``pygccxml 1.7.0`` is still compatible with GCCXML and no changes are needed for people working with GCCXML. 2. [CastXML] A new function was introduced to help find which XML generator you are using. If the generator (GCCXML or CastXML) is in your path, it will be detected. .. code-block:: python generator_path, generator_name = pygccxml.utils.find_xml_generator() 3. [CastXML] When using the configuration, you will need to tell pygccxml which xml generator you are using. .. code-block:: python xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name, ) ``gccxml_configuration_t`` is an alias of ``xml_generator_configuration_t``. ``load_gccxml_configuration`` is an alias of ``load_xml_generator_configuration``. Both can still be used but will be deprecated. 4. [CastXML] The compiler path can be passed to castxml. This is done by using the ``compiler_path`` attribute in the configuration. Note that this may be important because the resulting xml file is slightly different depending on the compiler. 5. [CastXML] Added support for some fields which have no location. These fields are: ``gp_offset``, ``fp_offset``, ``overflow_arg_area``, ``reg_save_area`` 6. [CastXML] Mangled names are only available for functions and variables with CastXML. Getting the mangled attribute on a ``declaration`` will fail. 7. [CastXML] Demangled names are not available. Getting a demangled name will fail. 8. [CastXML] Add new container traits: ``unordered maps``, ``unordered sets``, ``multimaps``, ``multisets`` 9. [CastXML] Annotations: Instead of using the ``__attribute((gccxml("string")))`` c++ syntax (see version 0.9.5), the ``__attribute__ ((annotate ("out")))`` can now be used to annotate code with CastXML. 10. [CastXML] Disabled relinking of: .. code-block:: python rebind, void *> > This made the ``find_container_traits_tester`` unit tests fail with ``CastXML``. This class defintion is present in the clang AST tree, but I don't know why it is usefull. Please tell me if you need it so we can re-enable that featur in pygccxml. 11. [Misc] Deprecated the ``compiler`` attribute and replaced it with a global ``utils.xml_generator`` variable. The ``compiler`` attribute was misleading; it was sometimes confused with the name and version of the xml generator. This change also fixes some internal problems with the algorithms cache. 12. [Misc] ``declarations.has_trivial_copy`` was defintevely removed. Please use ``declarations.has_copy_constructor``. This was deprecated since version 0.9.5. 13. [Misc] Remove ``gccxml`` logger from logger class (was deprecated). Please use ``cxx_parser`` instead. 14. [Misc] Removed ``gccxml_runtime_error_t`` class. This was only used internally. Please use a normal ``RuntimeError`` instead. 15. [Misc] Documentation was moved to readthedocs.org https://readthedocs.org/projects/pygccxml/ 16. [Misc] Add quantifiedcode check https://www.quantifiedcode.com/app/project/117af14ef32a455fb7b3762e21083fb3 17. [Misc] Add option to keep xml files after errors, which is useful for debugging purposes. 18. [Misc] Fix new pep8 warnings, clean up and simplify some code and comments 19. [Misc] The compiler version debugging message is now hidden (closes #12) 20. [Misc] Print less line separations in ``decl_printer``; this makes the output more compact. 21. [Tests] Add new test for the ``contains_parent_dir`` function. 22. [Tests] Add test for non copyable class with const class 23. [Tests] Add test case for non copyable class due to const array 24. [Doc] Small documentation update, moved people list to credits page, added new examples. 25. [Misc] Add Travis unit tests for Python 3.5 Version 1.6.2 ------------- 1. Use setuptools instead of distutils for the packaging 2. Change rights of declarations_cache.py and templates_tester.py from -rwxr-xr-x+ to -rw-r--r--+, so that all the files have the same execution rights. Version 1.6.1 ------------- 1. Fix a regression introduced by previous changes. Syntax errors were introduced in the part were you can check if a class is copyable or not (see #13). These have been fixed now. Version 1.6 ----------- 1. Moved the repository from mercurial to git 2. Changed the documentation from epydoc to sphinx doc 3. Setup the documentation as gh-page and add script to update the documentation Just call "make gh-pages" on the root folder to create a commit with the new documentation, which you may then push to the github repository. The url for the documentation is now http://gccxml.github.io/pygccxml/ 4. Add Travis unit tests for Python 2.6, 2.7, 3.2, 3.3 and 3.4 The tests are run after each commit (see .travis.yml file in root folder) https://travis-ci.org/gccxml/pygccxml 5. Add automatic code coverage. The code coverage is run during each travis run and the results are uploaded to https://coveralls.io/r/gccxml/pygccxml 6. Fix copy_constructor unit test 7. Deprecate parser.config_t (replaced by parser.gccxml_configuration_t) 8. Fix for string comparison with future unicode literals When using from __future__ import unicode_literals in python 2.7, the call to the namespace() method would fail due to the isinstance/str check. A is_str() function was added to the utils module, allowing for a python 2 and python 3 compatible string check. A unit test for this case was added. 9. All the code is now pep8 compliant and is tested for this in an unit test 10. Most of unused imports and variables were removed using the pyflakes tool 11. Use new style python decorators (@property) everywhere 12. Add new unit test for the example.py file 13. Update the licence headers to reflect the change in maintainers Version 1.5.2 ------------- 1. Make python 3.x compatible. Still works with python 2.6 and python 2.7. 2. Add .dylib parser for Darwin 3. Fix some unit tests 4. workaround for problem with boost >=1.54 5. Simpler way of checksumming files in a python 2 and 3 compatible way 6. Prevent warnings to be treated as fatal errors in py++ 7. "has_inline" property was added to ``declarations.calldef_t`` class. 8. Thanks to Aron Xu, for pointing out that it is better to use "os.name", instead of "sys.platform" for platform specific logic. 9. "__int128_t" and "__uint128_t" types were introduced. Many thanks to Gustavo Carneiro for providing the patch. Version 1.5.1 ------------- 1. adding problematic use case, contributed by Zbigniew Mandziejewicz 2. Adding "explicit" attribute to constructor_t class 3. "List symbols" (`nm`) utility invocation was improved and now handles right relative paths and paths with spaces. Many thanks to Alejandro Dubrovsky for providing the patch. 4. Fix for "get dependencies" functionality 5. Allow the process to continue, even in case the binary parser can not find the relevant declaration 6. Fix bug related to merging free functions 7. Improve decl_printer - sort declarations before printing 8. Added new tests and ported tests to x86_64 architecture Version 1.5.0 ------------- 1. Fix small bug in matcher - don't match namespaces by their location 2. Documentation update and cleanup. (using sphinx-doc now). 3. Fixing small bug on Windows, related to parsing configuration file 4. Update setup.py 5. fix 2779781 bug( pygccxml reverses array dimensions ) Note about version numbers before 1.5.0 --------------------------------------- When the project moved from svn to git, versions were tagged from 1.0.0 on. Note that there was no 1.2, 1.3 nor 1.4 version (this is maybe due to the many forks and the slow down of the maintenance effort). Version 1.1.0 ------------- 1. bsc and mspdb packages were deprecated 2. Adding new functionality and improving initial environment handling 3. Adding ability to dump exported classes 4. Added more tests 5. Add handling for "C" functions 6. Fix bug "pygccxml parses const volatile variable args as just const" 7. Rename bparser to binary_parsers 8. Adding .so file parser 9. Replace md5 with hashlib module (removes deprecation warnings) Version 1.0 ----------- 1. Support for ellipsis was added. Warning: this feature introduce backward compatibility problem! Description: .. code-block:: c++ void do_smth( int, ... ) Before this change, pygccxml would report that the function ``do_smth`` has only one argument. After this change, pygccxml will report that the function has two arguments. The second argument type will be ``declarations.ellipsis_t``. All classes, which describe callables, have new property ``has_ellipsis``. It the value of the property is ``True``, than the function has ellipsis in its definition. 2. New experimental back-end, based on ``.pdb`` (progam database file), was added. 3. New high-level API wrapper for ``.bsc`` (browse source code file) was added. 4. The recomended GCC_XML version to use with this release is CVS revision 123. This revision introduces small, but very important feature. GCC_XML started to dump artificial declarations (constructor, destructor, operator=). ``pygccxml.declarations.type_traits`` functions were updated to use the new information. 5. ``declarations.decl_printer_t`` class dumps almost all available information about a declaration. 6. ``declarations.is_same_function`` was fixed and now it treats "covariant returns" right. 7. Search algorithm was improved for template instantiated classes. From now, a spaces within the class name doesn't matter. 8. pygccxml unit tests functionality was improved. Many thanks to Gustavo Carneiro. Version 0.9.5 ------------- 1. Class ``free_operator_t`` is now able to provide references to the class declarations instances it works on. 2. Support for `GCC-XML attributes`_ was added. Many thanks to Miguel Lobo for the implementation. .. _`GCC-XML attributes`: http://www.gccxml.org/HTML/Running.html 3. A bug in parsing a function exception specification was fixed. Many thanks to Jeremy Sanders. 4. Support for a type/class "align", "offset" and "size" was added. Many thanks to Ben Schleimer for the implementation. 5. Support for GCC-XML 0.9 was added. 6. Support for ``__restrict__`` was added. 7. ``declarations.has_trivial_copy`` was renamed to ``declarations.has_copy_constructor``. The old name is still available, but will be removed soon. 8. ``declarations.priority_queue`` was renamed to ``declarations.priority_queue_traits``. 9. ``declarations.find_container_traits`` function was added. 10. Support for "partial name" was added. "Partial name" is the class name, without template default arguments. The functionality was added to std containers classes. 11. ``declarations.class_t`` and ``declarations.class_declaration_t`` has new property - ``container_traits``. This property describes std container element class. 12. All logging is now done to ``stderr`` instead of ``stdout``. Version 0.9.0 ------------- 1. Performance was improved. pygccxml is now 30-50% faster. The improvement was achieved by using `cElementTree`_ package, ``iterparse`` functionality, instead of standard XML SAX API. If `cElementTree`_ package is not available, the built-in XML SAX package is used. .. _`cElementTree` : http://effbot.org/zone/celementtree.htm 2. ``is_base_and_derived`` function was changed. The second argument could be a tuple, which contains classes. The function returns ``True`` if at least one class derives from the base one. .. line separator 3. Class ``calldef_t`` has property - ``does_throw``. It describes whether the function throws any exception or not. .. line separator 4. Bug fixes: small bug was fixed in functionality that corrects GCC-XML reported function default arguments. Reference to "enum" declaration extracted properly. Many thanks to Martin Preisler for reporting the bug. .. line separator 5. New type traits have been added: * ``is_std_ostream`` * ``is_std_wostream`` .. line separator 6. C++ does not define implicit conversion between an integral type and ``void*``. ``declarations.is_convertible`` type traits was fixed. .. line separator 7. ``declarations.is_noncopyable`` type traits implementation was slightly changed. Now it checks explicitly that class has: * default constructor * copy constructor * ``operator=`` * destructor If all listed functions exist, than the algorithm returns ``False``, otherwise it will continue to execute previous logic. .. line separator 8. ``declarations.class_declaration_t`` has new property - ``aliases``. This is a list of all aliases to the class declaration. .. line separator 9. The message of the exception, which is raised from ``declarations.mdecl_wrapper_t`` class was improved and now clearly explains what the problem is. .. line separator Version 0.8.5 ------------- 1. Added new functionality: "I depend on them". Every declaration can report types and declarations it depends on. 2. ``signed char`` and ``char`` are two different types. This bug was fixed and now pygccxml treats them right. Many thanks to Gaetan Lehmann for reporting the bug. 3. Declarations, read from GCC-XML generated file, could be saved in cache. 4. New type traits have been added: * ``is_bool`` 5. Small improvement to algorithm, which extracts ``value_type`` ( ``mapped_type`` ) from "std" containers. 6. Few aliases to long method name were introduced: ================================= ========================== Name Alias ================================= ========================== ``scopedef_t.variable`` ``scopedef_t.var`` ``scopedef_t.variables`` ``scopedef_t.vars`` ``scopedef_t.member_function`` ``scopedef_t.mem_fun`` ``scopedef_t.member_functions`` ``scopedef_t.mem_funs`` ``scopedef_t.free_function`` ``scopedef_t.free_fun`` ``scopedef_t.free_functions`` ``scopedef_t.free_funs`` ================================= ========================== 7. Fixing bug related to array size and cache. Version 0.8.2 ------------- 1. Few small bug fix and unit tests have been introduced on 64 Bit platforms. Many thanks to Gottfried Ganssauge! He also help me to discover and fix some important bug in ``type_traits.__remove_alias`` function, by introducing small example that reproduced the error. 2. Huge speed improvement has been achieved (x10). Allen Bierbaum suggested to save and reuse results of different pygccxml algorithms: * ``declarations.remove_alias`` * ``declarations.full_name`` * ``declarations.access_type`` * ``declarations.demangled_name`` * ``declarations.declaration_path`` 3. Interface changes: * ``declarations.class_t``: + ``set_members`` method was removed + ``adopt_declaration`` method was introduced, instead of ``set_members`` * ``declarations.array_t`` class "set" accessor for size property was added. * ``declarations.namespace_t.adopt_declaration`` method was added. * ``declarations.variable_t.access_type`` property was added. 4. New type traits have been added: * ``is_same_function`` 5. Few bug were fixed. 6. Documentation was improved. Version 0.8.1 ------------- 1. pygccxml has been ported to MacOS X. Many thanks to Darren Garnier! 2. New type traits have been added: * ``enum_traits`` * ``class_traits`` * ``class_declaration_traits`` * ``is_std_string`` * ``is_std_wstring`` * ``remove_declarated`` * ``has_public_less`` * ``has_public_equal`` * ``has_public_binary_operator`` * ``smart_pointer_traits`` * ``list_traits`` * ``deque_traits`` * ``queue_traits`` * ``priority_queue`` * ``vector_traits`` * ``stack_traits`` * ``map_traits`` * ``multimap_traits`` * ``hash_map_traits`` * ``hash_multimap_traits`` * ``set_traits`` * ``hash_set_traits`` * ``multiset_traits`` * ``hash_multiset_traits`` 3. ``enumeration_t`` class interface was changed. Enumeration values are kept in a list, instead of a dictionary. ``get_name2value_dict`` will build for you dictionary, where key is an enumeration name, and value is an enumeration value. This has been done in order to provide stable order of enumeration values. 4. Now you can pass operator symbol, as a name to query functions: .. code-block:: python cls = global_namespace.class_( 'my_class' ) op = cls.operator( '<' ) #instead of op = cls.operator( symbol='<' ) 5. pygccxml improved a lot functionality related to providing feedback to user: * every package has its own logger * only important user messages are written to ``stdout`` * user messages are clear 6. Support to Java native types has been added. 7. It is possible to pass an arbitrary string as a parameter to GCC_XML. 8. Native java types has been added to fundamental types. 9. Cache classes implementation was improved. 10. Few bug were fixed. 11. Documentation was improved. 12. ``mdecl_wrapper_t.decls`` property was renamed to ``declarations``. The reason is that the current name ( ``decls`` ) conflicts with the method of the same name in the decl interface from ``declarations.scopedef_t`` class. So for example: .. code-block:: python classes = ns.decls("class") classes.decls("method") This will fail because it finds the attribute decls which is not a callable. Version 0.8 ----------- 1. pygccxml now has power "select" interface. Read more about this cool feature in tutorials. 2. Improved support for template instantiations. pygccxml now take into account demangled name of declarations. Please refer to documentation for more explanantion. 3. ``dummy_type_t`` - new type in types hierarchy. This is a very useful class for code generation projects. 4. New function - ``get_global_namespace``. As you can guess, it will find and return reference to global namespace. 5. New functionality in ``type_traits`` - ``has_public_assign``. This function will return True, if class has public assign operator. 6. ``declarations.class_t`` has new property - ``aliases``. This is a list of all class aliases. 7. Bug fixes. 8. Documentation has been updated/written/improved. Version 0.7.1 ------------- **Attention - this going to be last version that is tested with Python 2.3** 1. New fundamental types has been added * complex float * complex double * complex long double 2. **Attention - non backward compatible change** ``declarations.filtering.user_defined`` and ``declarations.filtering.by_location`` implementation has been changed. In previous version of those functions, ``decls`` list has been changed in place. This was wrong behavior. Now, those functions will return new list, which contains all desired declarations. 3. Few new type traits has been added * *type_traits.has_destructor* * *type_traits.has_public_destructor* * *type_traits.has_public_constructor* * *type_traits.is_noncopyable* 4. ``decl_printer_t`` class and ``print_declarations`` function have been added. Now you can print in a nice way your declaration tree or part of it. Thanks to Allen Bierbaum! 5. New class ``declarations.decl_factory_t`` has been added. This is a default factory for all declarations. From now all relevant parser classes takes as input instance of this class or ``Null``. In case of ``Null`` instance of ``declarations.decl_factory_t`` will be created. Using this class you can easily extend functionality provided by built-in declarations. 6. Sometimes, there is a need to find a declaration that match some criteria. The was such functionality in pygccxml, but it was too limited. This release fix the situation. pygccxml adds a set of classes that will help you to deal with this problem. 7. New cache - ``parser.directory_cache_t`` has been implemented. ``parser.directory_cache_t`` uses individual files stored in a dedicated cache directory to store the cached contents. Thanks to Matthias Baas! 8. ``parser.file_cache_t`` has been improved a lot. Thanks to Allen Bierbaum! 9. New file configuration is available: "cached source file". ``parser.project_reader_t`` class will check for existence of GCC_XML generated file. If it does not exist it will create one. If it do exist, then the parser will use that file. 10. Few helper functions has been added in order to make construction of configuration file to be as easy as possible: * ``parser.create_text_fc`` - creates file configuration, that contains text * ``parser.create_source_fc`` - creates file configuration, that contains reference to regular source file * ``parser.create_gccxml_fc`` - creates file configuration, that contains reference to GCC_XML generated file * ``parser.create_cached_source_fc`` - creates file configuration, that contains reference to 2 files: GCC_XML generated file and regular source file 11. Small bug fixes. 12. Documentation. Allen Bierbaum and Matthias Baas contributed so much in this area. Almost every public function/class has now documentation string. 13. Logging functionality has been added. pygccxml creates new logger "pygccxml". Now it is possible to see what pygccxml is doing right now. 14. I am sure I forgot something. Version 0.6.9 ------------- 1. New functions: * *type_traits.is_void_pointer* * *type_traits.array_size* * *type_traits.array_item_type* 2. Class *declarations.variable_t* has new property - *bit_fields* 3. Now it is possible to specify "undefined" directives using *parser.config_t* class. 4. *patch* functionality has been introduced. GCC_XML generates wrong default values for function arguments. *patch* functionality tries to fix this. 5. Small bug fixes Version 0.6.8 ------------- 1. Small bug has been fixed. Version 0.6.7 ------------- 1. New functions: * *type_traits.remove_pointer* * *type_traits.base_type* * *type_traits.is_convertible* 2. A lot of small bug fixes. 3. Few English mistakes have been fixed. .. attention:: There are 2 none backward compatible changes: * class with name **compaund_t** has been renamed to **compound_t** * word **pathes** has been replaced with **paths** 4. There are new properties on * *declarations.declaration_t.top_parent* * *declarations.class_t.recursive_bases* returns all base classes of the class * *declarations.class_t.recursive_derived* returns all derived classes of the class * *member_calldef_t.access_type* 5. New type has been introduced: *unknown_t*. There are use cases when GCC_XML does not returns function return type. 6. New implementation of *make_flatten* algorithm using generators. By default old implementation will be used. 7. *parser.file_configuration_t* interface has been changed. Now it is able to keep: source file, text or GCC_XML generated file. If you are doing something with code that is not changing you'd better use GCC_XML generated file as content of the *parser.file_configuration_t*. Save your time. 8. There are some cases when GCC_XML reports *"restricted"*. In this case pygccxml replaces *"restricted"* with *"volatile"*. pygccxml-3.0.2/LICENSE.rst000066400000000000000000000024721476564735400152100ustar00rootroot00000000000000Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pygccxml-3.0.2/Makefile000066400000000000000000000151751476564735400150400ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = docs/_build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) docs # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) docs .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pygccxml.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pygccxml.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/pygccxml" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pygccxml" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." pygccxml-3.0.2/NOTICE000066400000000000000000000005551476564735400143000ustar00rootroot00000000000000pygccxml Copyright Insight Software Consortium This software is distributed under the Boost Software License - Version 1.0. See LICENSE file for details. ----------------------------------------------------------------------- Historical Note: pygccxml was initially developed by Roman Yakovenko. It is maintained by the Insight Software Consortium since 2014. pygccxml-3.0.2/README.rst000066400000000000000000000050671476564735400150660ustar00rootroot00000000000000pygccxml ======== .. image:: https://readthedocs.org/projects/pygccxml/badge/?version=develop :target: http://pygccxml.readthedocs.io/en/develop/?badge=develop :alt: Documentation status pygccxml is a specialized XML reader that reads the output from CastXML. It provides a simple framework to navigate C++ declarations, using Python classes. Using pygccxml you can: * Parse C++ source code * Create a code generator * Generate UML diagrams * Build code analyzers * ... Installation ------------ Install instructions can be found `here `__. Compatibility ------------- pygccxml is compatible with Python 3.9, 3.10, 3.11, 3.12, 3.13 and pypy3. Documentation and examples -------------------------- The documentation can be found `here `__, examples can be found `here `__. You can also run an example JupyterLab Notebook using Binder, or view it using ``nbviewer``: .. Developers: See `.binder/README.md` for more information. .. image:: https://mybinder.org/badge_logo.svg :target: https://mybinder.org/v2/gh/EricCousineau-TRI/pygccxml/feature-py-notebook-example?urlpath=tree/pygccxml/docs/examples/notebook/ :alt: Binder .. image:: https://img.shields.io/badge/view%20on-nbviewer-brightgreen.svg :target: https://nbviewer.jupyter.org/github/EricCousineau-TRI/pygccxml/tree/feature-py-notebook-example/docs/examples/notebook/ :alt: nbviewer If you want to know more about the API provided by pygccxml, read the `query interface `__ document or the `API documentation `__. A `FAQ `__ is also available and may answer some of your questions. License ------- `Boost Software License `__ Contact us ---------- For issues with pygccxml you can open an issue `here `__. For issues with CastXML you can open an issue `here `__. You can contact us through the `CastXML mailing list `__. Branches -------- The stable version can be found on the master branch. The develop branch contains the latest improvements but can be unstable. Pull Requests should be done on the develop branch. Testing ------- Running the test suite is done with: .. code-block:: pytest tests pygccxml-3.0.2/docs/000077500000000000000000000000001476564735400143175ustar00rootroot00000000000000pygccxml-3.0.2/docs/conf.py000066400000000000000000000223641476564735400156250ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # pygccxml documentation build configuration file, created by # sphinx-quickstart on Sat May 17 17:37:31 2014. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os import sphinx_rtd_theme import subprocess import importlib.metadata # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('.') + "/../src") from release_utils import utils # nopep8 # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.napoleon' ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'pygccxml' copyright = u'2014-2017, Insight Software Consortium' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = importlib.metadata.version("pygccxml") # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = False # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". #html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'pygccxmldoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'pygccxml.tex', u'pygccxml Documentation', u'Insight Software Consortium', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'pygccxml', u'pygccxml Documentation', [u'Insight Software Consortium'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'pygccxml', u'pygccxml Documentation', u'Insight Software Consortium', 'pygccxml', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False # Override autodoc defaults autodoc_default_flags = [ "members", "undoc-members", "show-inheritance", "inherited-members"] # Automate building apidoc when building with readthedocs # https://github.com/rtfd/readthedocs.org/issues/1139 def run_apidoc(_): modules = ['pygccxml'] for module in modules: cur_dir = os.path.abspath(os.path.dirname(__file__)) output_path = os.path.join(cur_dir, 'apidocs') cmd_path = 'sphinx-apidoc' if hasattr(sys, 'real_prefix'): # Check to see if we are in a virtualenv # If we are, assemble the path manually cmd_path = os.path.abspath( os.path.join(sys.prefix, 'bin', 'sphinx-apidoc')) subprocess.check_call( [cmd_path, '-o', output_path, os.path.abspath(cur_dir + "/../" + module), '--separate', '--force', '--module-first', '--doc-project=API']) def setup(app): app.connect('builder-inited', run_apidoc) pygccxml-3.0.2/docs/declarations_uml.png000066400000000000000000017066771476564735400204020ustar00rootroot00000000000000PNG  IHDR {@*sRGBgAMA a cHRMz&u0`:pQ<IDATx^_|}&\tētq#d%rđQz䴭DEhiqZ'iu"H 誉DitB@ns'Cn 0<|yV{wU}6u~YYU[ǯ!@ @ @ @ @ @ |{? @ @ @ @ @ @H{Wb'@ @ @ @ @ @T  @ @ @ @ @ @)R駨@ @ @ @ @ @T@*]* @ @ @ @ @NJ?' @ @ @ @ @ @@*]* @ @ @ @ @NJ?g @ @ @ @ @ @@*]* @ @ @ @ @NJ?g @ @ @ @ @ @?~- @ @ @ @ @ @'oR_'@ @ @ @ @ @O; @ @ @ @ @ @ҥ  @ @ @ @ @ @t.3 fD @ @ @ @ @ HK @ @ @ @ @ @R @ @ @ @ @ @ҥ  @ @ @ @ @ @tH?}?on @ @ @ @ @ p)d'ڿ!@ @ @ @ @ @ xH\*NS @ @ @ @ @ @ħ2 @ @ @ @ @\@*O'@ @ @ @ @ @ħ2 @ @ @ @ @\@*O'@ @ @ @ @ @ħ2 @ @ @ @ @\@*O'@ @ @ @ @ @,?' r  @ @ @ @ @ pAJ?sd t  @ @ @ @ @$pN{_{hF @ @ @ @ @{E{@ @ @ @ @ @ HJߛL @ @ @ @ @.W@*V*d* @ @ @ @ @ pR>R&S @ @ @ @ @JJ7  @ @ @ @ @\TTT @ @ @ @ @ @r}lM @ @ @ @ @+ ~c+~o2 @ @ @ @ @\{[{@ @ @ @ @ @ HJߛL @ @ @ @ @.W@*V*d* @ @ @ @ @ pR>R&S @ @ @ @ @8T~ɟL(Kx03 @ @ @ @ @$pN{/I;MKȱy~@ @ @ @ @ @Jч%N*%c#@ @ @ @ @ _u$~iG| @ @ @ @ @$ ~J?T @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% h?m]}{6xo_RS @ @ @ @ @E H?a_[s)t^{[<ԗ'wݽ iSF*4U @ @ @ @ @\TJolk T]!@ @ @ @ @ pJO.Sog?KP;)~0gOdϴٓb?яrol)Ѝ-xvn3fOfO~L2ޛ_JϞ̷sXG)3v2gTu0A @ @ @ @ @wTz]yl4zFg9»菲N⼫'kv'Fg%tln L<i'uH DɳH&yջZko{B IOo}[ O#iO:JL @ @ @ @ @/pQ&Әu2]<7&[_dkn{Jߜ4]d.gޘf$Z]=SkM͔Obi62ް` @ @ @ @ @"p 'Zu߉ncM~ÔJi*%:Jϐz~Tz3Oד=;M*{ tLޮ)?S @ @ @ @ @ \T*=ADs̒ބ{ PO;Yzi`=0wʯ m i3?]g.Ӎ~~/OGldkR gIm]|J|x@fU#` @ @ @ @ @"piĩn?@bџ)_N|ȯMdSB6zW~lt M'{s6ٓ7&,d;w(3n^\:CJ $~2 @ @ @ @ @.^RUû??я/?ҟV @ @ @ @ @KSYGPzH*]J˄9Y@*d:  @ @ @ @ @\E/Hcd @ @ @ @ @^T+@./ @ @ @ @ @{ HLTs @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j_"~Ք @ @ @ @ @_@*fjT @ @ @ @ @H; NJ?N5 @ @ @ @ @% ~YF*b @ @ @ @ @J慏L* #@ @ @ @ @ j)gg??񚟗!c#jNS @ @ @ @ @ b)b  @ @ @ @ @W+ ~  @ @ @ @ @ R鏀  @ @ @ @ @\Tz'@ @ @ @ @ @#H?& @ @ @ @ @ pRW{M @ @ @ @ @  @ @ @ @ @ @ Y*?8Cך8 @ @ @ @l3KCg(??T#@ @ @ @ @W+ ~NC&@ H_ @ @ @ @ @ HaӐ  pRIa @ @ @ @ pRg4dT^j8 @ @ @ @\TF; g( ~&H @ @ @ @W+ ~NC&@ H_ @ @ @ @ @ HaӐ  pRIa @ @ @ @ pמJw{NC&@ H_ @ @ @ @ @ \H*=O_˟7x譁{/%󓒩*/bO* ~&H @ @ @ @W+p ~'?ɻd+S;NJ&xt8s6N]@*j/5L @ @ @ @.^SY,5@yDžScDҳ$+HxD􋿤0A @ @ @ @ZOgO7&/' wS2N.Yj={/+gb߹k\OVɞnlkp|]dWso§L;}'FjlbZH6#ڱɞlV?U3?PxF0q @ @ @ @xO'o7vP,>ˢ'wM2Q俓ޞvs͠7=uSlM4Tkk7޺Z:%ϛ_y{LM-#o~+R@*/)L @ @ @ @VR m])n| O;iY;|$zvrx Nּ.uaBa0Ovz/Ͻ m7/ޔyW4O+nRMY=1ΞʞVLv4+gJό-u䩛)U{﬏vf^cP RIa @ @ @ @ pJemt2- ~&N @ @ @ @/ ~,>YãfGGJK $@ @ @ @ @J%xկ~5,Ghj# ~&N @ @ @ @/ ~=P3%@s H_%  @ @ @ @ @ H?gFS0q @ @ @ @xI)S@*/)L @ @ @ @V@*93&p{wZG~`~[Nw89-|;ٷvA>0^fSRW{a @ @ @ @ pWJ?O~ӟF#=_W?я7x#;'2S7;Ul*/k;7DWM/~2}54qv鱃M)AHNɴd;LkٟF:U d5;~ϐ9騊ygmszVm7NƓ©;U'׳bd2ޕ2ս=(3#u3{|EVL;)SFzH_aߜ 'jkw?^'*J_%  @ @ @ @ @ \Q*=| djpͽw& ;ۭwv7#Ѥ71}vvsMhR]2G:u MZ͉Nk>ίLk渱# dL$b>qp x<4n?ܵ1 s\idE]G~sy(b!-wI%KO,)#229G]z?2RW{a @ @ @ @ pWJߤ&NvҮĸ77Q馁=]#maM/I宁48c]\|pB-09f;5J;iYO˛庻 l_ klϺ-޵;}z~zhr tn?B0Tu ;mmTCNo mlG_]ӻ)zf} t|jhqu븜܎T_R  @ @ @ @\7X'X5'^`^-imR#Ck3-ܺs^^筵Yz[=Þlyk;4:k,`bu_`_Aۤo:i-n4|ڑCu}*}ݺ*Io>]*eHI%'纄)ְ{ʤfٟEfuBW:Ͽ.ֵOoF;%ӧpro @79Pi&s;)5alRٟ="3*aτה鉴cb}NǏWcCsrWJK '@ @ @ @ @Tf77kr7͜\N4;wl]7&omHY<#ӛmXj 7t{,x~]왵'zkEdok6!',aTa #M*?h^*L| ai;{6}VO7I9Z={˽O{dOAutco)l?}5ާX?ڱYVi\52Դg|!%lzIJ_%  @ @ @ @ @ \Q*}ݯ=IЛֳ %7y7҆o&l ,.Ƽ~75ہMrwbFdgGgC؍nwwA`K k" nz\eުKOpfո`Kνkz4uAyS}zA:Yf敦֔_ϷuvOo<^gelK_ @ @ @ @ @ \W*}Mv&<-.~Y5r&J,ԝN (o: >u[kH7a0>{Zt2wS՛~uD0^瞰ML ڄ{-݃fufuQb Ok*soJ7_k)^]xֻz~!\q֏RA̺9s7'R5W0!~&H @ @ @ @W+pE5<ޯlfQ nO:vv#a7Nw,_W^IxIN}Xɾ7V nwY~lyᆴ=uj70J Uzwc9kTYSΫ곡3a׳bF;#oL2޽kT~ݬ#q#Lqbӳݦ{WOo\֤M|bs WgԣS?]>R>ØGܺy%I?㑝k"?*yx947]~0q @ @ @ @x+J'6jt#&7.kd&zidgYخoJu]{*M2U^xZ~:ձe=6}5;.@L`547%)Do7 t=ϯi6;3϶܃9S^7|ssJ.^?V'ּHg;RgL>=]#tzv35sviu:-49F/xھdy_/=Sw!6>'OtܘlGw`iaDit=nypE)<`jg4~x94S*/)L @ @ @ @VR454>a<͸b`9Te H_ @ @ @ @ @ HQ]@> D~aof.a~v~RIa @ @ @ @ pRO|'8M`D3}i^j9=%CͳGN7FT|RW{a @ @ @ @ pR/?i􋿤0A @ @ @ @ZKz^T^j8 @ @ @ @\TOr!.A@*/)L @ @ @ @V*Rw/!y{sR=f&{#upk/0^T^j8 @ @ @ @\ҿ/~ӟ~W㗿MI9}}$OxYK0}C4#|74~`@HWջ7*F~^EI{􋿤0A @ @ @ @ZO'J{9fIiNxF>`'DIZ~f}  $]]]qю'y H_ @ @ @ @ @ \~*.Jv,h<=Kw?bZI?R~>B>Hq9.]3I3]̳H_%  @ @ @ @ @ \x*}Mf'/~1)yIWO:y_S>ޕnJT243N˹*MHϞCMSR׃O;I7Iwٸi+B5}46©LMNj'L:f7!EϡY`'QW ]t1mߔI]Vne=>=in)ߕ{UgFk/i;Aͣc~ a[,j, ~&N @ @ @ @/pp'APrM*ݖop[G7ɽDr6FڭNޔ9i`66xـd`MFg\g.ZSueƚN4?(llnIowl}kghL,ֹL=ﴙ|\ah0s]Sx=1VnX9=pHŴd 9~}RIa @ @ @ @ pJpbxy_sr]N{nTzZ)9Ͷ^')߄~kzx)t.8>Tò;ˊgw(cXvHHg-vG~8a:97;YηusoKwsZ޵Wص^ߜDA s0i3kbz\lүR  @ @ @ @ @.<.,=kf.ވp t;kA9vY<枧| jʯqu9&^Ze"Dk#I7pk ֝ks'm!O*IxƳ{ jJK '@ @ @ @ @J9M#!@% H_%  @ @ @ @ @ H_r rүR  @ @ @ @ @_NbH pRIa @ @ @ @ pR/:;Ϋ{j::^N9X+sxSUNYRD|fJ_ @ @ @ @ @ \B*_G?MF_'?{S_eޫ+?_(UrcM_o$:ـ;\^*j/5L @ @ @ @.^R& (>:`D'5_Ə;O7'OSY! .y*w)CVcvԿTznsܚJRٕ U~IT_R  @ @ @ @\%ғAOFvVVN59eM3JbI|&nsoO3%Ԅ'%o˴Ո3iFrB omvvQtFi9fS&w6t="7R\_7UNr)gO36kzm*]wXõ1ܛ2t*~QK;` w}R=]pԝN]lщLם줷7k;cu.Swc3afT9kS[S=KgGd28-3* Ff3jxٟ)R~R_ϫl%xǽgE陰՞0{r3gi'5d,:N0q @ @ @ @xKH'FjÝN殤?׈<كJd1Ng7h @]M6Og"OQM tB@ƹv{˩ZI 'Δ'=Iu=c&[FWo/JԐk-p|t& Ѧf都LvL;o& 3.:jeYO9֙fx`灰9u&tON'Ǩ9@Cy Ht*dYz䮵$<^'c6̨I;̮v^)FBO9aij>5'άÞp=omiYgݝRIa @ @ @ @ pgJOp3YYf|'ٍu=:ʭS6ս.1')^&i憹 M2GRwZQ+xVC䟣֖K2j֍>s ZkvGXnwNڵ ~*6 VW}3ͤJ4~xc׿8f'vJoc5(|_'?2Oӏc5=+sMH禍6H?8鴑y.2>36 fxu/  @ @ @ @ @j1<nI.`לLĞL$Wtgixz|1:8Ǫ5 Q>vF@'bϬ='MkDZ?{polXtgl dF7@JK '@ @ @ @ @Tz"p7}PoWh Lq]K["?zI??p@{M >Asx';V9y:'"9ؑT_R  @ @ @8Mck~ @w=^R'5vu2]8왅? ;] fuƸΔL2fgMtgOUS, #dL V;4 >{m}pv.0bGfNkIw37ƚF&ћ6/4 ;+iTǶAJvޜimD9F=s496Uiܳ(-Yoi޻vw yuO gOƞFxC63tpzLxz39+osWO Ɯg&b@_ϫgzH`zڜ5g:ax8aw Y.sӉgO=}\=f ҟ@ @ @ @^o{n @G_ˇ^o٧қ߱ec.Mܧ9g髭ݡȯLa bFixhJzΐܕJZ;~򯣝COnt5p?:ǧ @ @ @xtqL PEaT,&:9&;|v"ՑF':'=MfOO'ú8&N=s;lCt7e>LsnM?#.b&3Y-Pw{қ>< &;~idb~ɐ@Y4 5~`fZIgs"zM=+f3M#㾮ݒYw)?`(VjҬh]~w-9XqUc`2Zh;]yFWdv?p?cχL͗x/5$@ @ @ @ Hb @{ѻceN7Yw]ٷXfpm>xnغ Df'|ϓLu&:MFvRC'>^Wtw$kzL^_'tt<|0ѻsv͢]U}[&4ߦ{3Zdzsg^y[ڜ`z:m']ſtC3MʼS,x?#qZэYjd˾G|M>8봜cp3]g6:١>gTkui3Q[{StNYM3u:+ʸ9pF8ro>o>kя+EbեO{ @ @ @xtYL wսLțo|q5W+`{g+ gɎ'9AvMnBLIUbnxt ǍzoZn92<׍͚̀܍i1o=]AP'_o35R_G^W+ilBipLg IOFy=NPaҮOE?S'l< {F[oIכ^z3O}t: &w zϩ;_?2gd!oSmv4CuٶNgp7Q.~_4~eӞxE @ @ @.^@*j×&"ֲO}"|3]Y<;6B[KZ0oʷ29^Tғ*k Q̚YxiEGxnfYf[ քśem\SɶWEݴc];.U@*]*#W|ۚwsw8v!m>gwbXʎl<y{OÛ}C6ez* @ @ @ paR闚4W)̓"t͔a H?s*_Cr_4f}e-$O~_+1~77x#/~a&~4|UNӟtI3#ӟ*Ӎx~{XsLѾӠ~'Iߟ{hԏXsT"`: @ @ @ @aT@3%zTz"Y|}JTz2CNuVzi0͞} w %RM&>s@oTCsBq]@z929s]?32HSS,[ևt'>i~N:H}P\OO~wTc= @ @ @0M@P[{3sS2-.@T3ҏ]ei넹o:Y{-y< k*]߹k7.|d %|/M|b>;ITߚb_=lMt'hՠo(7QulO >65t=¦TNf vu1uz3 nw]Z{3(1FvYSapjݴ}v u?]T\ɹ>xSr~e׉o΢J!@ @ @ @& qFM @Y H?[*Ic'֙_Ls]yC "IRM&ǙֺxKJ I*7:CͯmF~Y POVuR\6}M/FK;PGx ׶MƝ{H9ʽMfcm=ŚOp=k\O:Bz|ONyǿSn ׼ ΢$~a 诋 Me&^ύ>g๷S͐f++O!C='[ <?=̽I>Ui,Fi/!@ @ @ @% ~J'@GJTM2i'4S6(ٙnNrkYOr⧳bt8ESlG:Z#Ō'_+oR|]}->פTu nM]yfN LL0I2浝n2ij9yxX ]w' Я-lNí7q#η62C;MY|`s12^̯OGG^alKÛ97d^eI_3̵$?N|f%J!@ @ @ @&W~F\/#_T~C*P&l:Yɤ~]7H\K.ZwO3LL5m2+ֻp&Sf.ZܬjWvO_kRvIٵt4IfO-Cݬ=J3]]Zkv65qע^#ȓLps"f. tZk 2G1=ak/c4yG$?^*F6։Ϣ͑J? &@ @ @ @O-e @+}cS?Tzh SNطפuo*9 d+/0,b+#٬v`KP[5n{.HΤp͞NjW6HL)m{Y7.vZN(BzTL8lM6]gOimx_WǦSqIo=Qcלm/5AnVf}nN|\fuۍ)GvԚ7<f`7Mqu9 /4|Og?5!ŦTM3;>N*HϟY?RO?r @ @ @ @s)g_,į|+~O}^-w?Z4a(@+ }~|UUٟq~tH@Z)jU Te3qAJ?KTTT I>0'̃$TzN=Gt0l~QȽ^̓W*'j @ @ @ @)Hzn/qLK?*)ISNSai}rich Xʿ()MMhާMt ħ:9v"3șJ{0TIL$_r l$ޝI?QUM3ѣ{ޗ xR=V @ @ @\@R_Ɨ>KW>+wx2?3?}SoW߼Wݟ_J^ܫkHv#Q@*'yM OO= '=w=iK.8( ~  @ @ @8M oo$wo~w~.U&˥v*'{SwzrG*9&5 lPxY$&zOKJk|kRg;-'>˫wO4FK5~}7'{~Mi!H_H/+KRKfixϬ3.>i?}bQ,9=]^H H[- @ @ @ pIo_C  @qgK'@sЍVgӳk'*h_i'S?yg$*?;x˄&vߍ7v:-jis3"pOEL3LL|ڙǗh x  @ @ @ @iR2 @RϙJO:䡓nN$'>M{jm5=s7= 7{x=us]U=? ݙ>X u1c[:S}JN:;uPwk <ӞxE @ @ @.^T}?s?Ϥ[Bnw;?|ݛ]۹uOH՝]}vT2I`F?C׳v|ik}[7 ބ|y1\3"@`/5$@ @ @ @ ~G>K:/[o[ǐ`nw'>K˷3ZÿՕ'@gJTĩ1 ol} L7#> Mκ iZKt{bM'Ư٘ ?fvadkX33&JIwE7!3˟Ӯ'V>V㐎&v?̢"G@*'j @ @ @ @XSĸ>ν)o}%ՓeOfTo|-s[Hhᴖb|{S>6S&S^R}3̒ͦ"i{&J8 @RϜJdsA$JINXkޮ5Q>VO{ [L2ٙX$ˏwfg66Md_%L!]þo*=Z3t8 ~AU'@ H_r*N*U7EJ?퉷Z @ @ @ @?zwMfOp0N>;'RaoRcB'ӣ6Rg( ~ɩ̆^TſF` @ @ @ @45N>/Mio)¯ܺ|oO7Rͮe&5tV~ةޛ#Oܵ=ݥ|CN!{:))$x RR>ީGTiO"@ @ @ @/pS*}rY9#yܛSrrݘHڜ=&53 _1wMg{w_ff{tImf@'HKY6p  /5$@ @ @ @ $ů}5?$ 9HU @%HKx  pfR=V @ @ @\MkL76"G[o>EiZ~k^TTeC ^@*_#0A @ @ @ pR,# ҥ_}S83ӞxE @ @ @.^@*էH/S@*]*̲KW/ ~  @ @ @8MT'>֣Mk?z6fM=}<_WH[>~{k;պu0  @ HKx  pfR=V @ @ @\JKoL?cEMM=Dѭ '<-9>oziS; DRRg 5\z  @ @ @ @ik*}]if Δ;ҟ(YީGTiO"@ @ @ @/еқįDOڻKobec]:}TzSk|j]zGazoz>71O*}gq3N]@*]*̲KW/ ~  @ @ @8M`MyFɓr&f֓oX|oSh%f+xf.:f3ӌ= Ax^tW#L@*'j @ @ @ @XSk0伻yoW"?xK4<ޕHTiMul.LϩoJo#t}F=i=RMM?2MOW@*]*̲KW/ ~  @ @ @8M $9g~OOuZNOx?MCjW@*]*;H3J?퉷Z @ @ @ @J??ron_Kśʤz|H G̿oOxo>ozR R.~X&H @ @ @ @H*}޽cݛ}|` 'f  @yҥү"d  @ @ @ @ hJ?oXP @IҥKC @ @ @ @*ROvEُLϾ}}w_zMʭO_ @ҥKC @ @ @ @*5~SD_wY^Øy%>ԂTl&@% HK_E @ @ @ @ @TwW"O@<)lY|@i;J}]<˟ߴF>ϬU,mם;¤ZGEֿ`zLSLNor)3{~ITs!@jҥKC @ @ @ @*_AىVOJK7xb_/sٟZ&OӛΞMJgcJϯaF0zڙ*({.XZk]=:@G?Ͱ8$ .~U&K @ @ @ @GZX7ݍFɳƳ3 a vkoSYyͿ]:}R1x>>A6>O~JyPf3l˷O/)j.\TT]`i @ @ @ @W%Tzkz'7xSdy߉wM$ zo􌹍4=W4qTTU], @ @ @ @M`MϢ(x$_ѻ7->1ϯ]+Jߧg=4TzdD&'28fdu<ȺyLa~F=J?( @h?h} ?ws_*hkj7 @ @ @ @xk*}$&&%ûDD[a,._sfϛϭ&ԝx3nG {nk3lZ}u˱Kv @ H;؞H @ @ @ @ T77{!_e'o_Ox{IEݍQ@*]*ݕ! @ @ @ @"T|#w wx2W߫d-p)Lc&@ HKr- @ @ @ @$noqL ~H|G @ @ @ @ .I~J$]*u$ @ @ @ @TT~ G)|ʹƗ8 no_vkMs.'@Gȟ}cgz`k|^M @ @ @ @(pS*Ͼ|Q~i'l]ʷ<>i*-ߚ8O[|?޺!@ ~`$"@ @ @ @ @sXS&8w~NG깫eTϯk ܕ5v]ibmmvߤg):M~TfR{15]@*]*\猛 @ @ @ @+pS*@v ?s0ؗ,{O̢ pnH;4dM5~nmYu5onBl;TIX|3lݯ=N*==֛)#~$x RR{Uw @ @ @ @@R~?^{n4pvM ޴\z]/&^S鍭W~eSwM]cTt>ÞLҽ1 H i2aG*%dLwJJ?9&@ @ @ @ @ _+.[@Vuӧdk*OL >u6FٳSn&IO{gR:ukr]*IP%  ҥҟL @ @ @ @8WY=ͪ]} ֛Yj.54(DJ_s-;?|gG*%dLwJJ?9&@ @ @ @ @ Y|O/_>OrJ?(A @Lޑ}/|{?~!˰  @ @ @ @ @J{ }ύ\TC @ @ @ @үmf#wM*=-z UTzm3ڕ7̀7oMznH?uTx,tS!@ @ @ @ @R_'TwVF m5˞))ߒ7D6ҍuOJz]%N5tIHDҳgQ6;iTZed7_縙r*kc‹m0{+-ۤS5hxcmRIvtY+H*} @yAϢ]}3; 4;X+! Qu  *ҥ] @ @ @ @ @)S\ww$7S}&o{ۤ3ioJoTۺV,>94՝= Ļ @ JJ?ZJ @ @ @ @XSkX\ޤM#M ofy^mv􉼷L wEglD{֌Jo)~Av; ï) /-d#`WvX+P # .ʐ @ @ @ @N)wnIZ'ۑsה_Skw)m66?2m$Y.:8Ѭ>lݵ) 2#xigFfg3$@. .~ʵ: @ @ @ @ T|#wG~is]*ntVOS?s?wo!^^%ÿ+^UUo/XSe;ri}ku-=:L6t ~T]r @HK2$@ @ @ @ @S` dO.| \S)9gi]k*=-̽y{IM|Tz[8J]m$g#MM[SCԉ48{_MT/TT)R @ @ @ @ @TzBYAJJ?ZJ @ @ @ @i􃹽,F ?{q5<]ˏ>T  @RR  @ @ @ @ @{OH^TT)R @ @ @ @ @TOI!ttW @ @ @ @ pMO|o}|+7 ه`OR ޥ}}wI;Mݛv2[U. .~ʵ: @ @ @ @ 7͇ѻf'>o3k=x+y.x2  @8EkOfzz͈o _KvuY+M}Jo2CRpySٙHzfJ_R=R~  JJ?ZJ @ @xC*%< @NXS]w<$yF&қud&QOksk;#OZwLwaBS .3IߴG*2^ 2 .@@*]*) @ @ RFE %# @ @ST<=ꤥN;w g%[ h v7>0›ҧt݄wm6]Ľ'yS*t:bO+iuV[Fi<+wOZY. @ HKz=\R菮O  @"Syv])9mkѻywrnQ HGq @ @J'O,2n&kze  @RRR?C~sn\ͿB @/Dҳ|׬"vk){2f:R-ţJ!( @ @J??ron_KWV&{!y҉O? &!@ HKp)  _Ϳ/7JଟBM py/'N< ['[ofgg "Y}RB~wܕ|+臨bo*u=~ooZx'5R4# @\@R~w|rѻwʊU)M\YGJ;RE\sd @T5_D5 S  @.Oғ)OF<?zyx='eoL*S8ۻs7ѳFk1I_ek / T=6͈ @#pTKxn  @:R`T\)ݘ0zZΞY}h?+Jǐ  @ @7x߫|߷ß=e[ǐDmhN\YGJzI>xTKl(oy] ;M]dgVKfAGGiG#' SS @e Tz/Po<]<ϏgfR]FN3ygcϽ\Зk w Ykp?]||ۗ/Z8C/^_h3qȼ,зٰ܊̺\zori5uj};F?Q^(L8HT\&PL:|M6ky";nС>f A֤(8&biO*}6@qN ]|E{ly*LSϋ彟S԰ @&O??MٗJy撏g=7so>wn~mmwvOk)>Y[x9Rw{(E @/Q ?uQm*&}<>>{Z&7;[Synb-Fu-e2ԝusW*k]#/ALƻgFaid&8D,&y}c]ܛ o#: R pg)JYD# Wgyvݏ7=}4b޼x?~N_hSSyBǰOIF?Dk0GvY??fJ0??ԧ>?^gR/iB8ky,JǬ @ @V}#kou}u T'޷t~v8oSksu'w˼e<}*}E;D,kuT_Hg]+mx[}}O#J}tJU uD*L^T_5N*}"Ϡ7'zz|rZ7Fc*y- kGVCJj}{q  @r~ٟ+B~~'CwRwy ~3#@ @h*]ھ:lY\-_+Tz)ާor=~$$sTzVgeE^YO9ͱXWO) @ g)J*# @kJ?q.|FiՁueY+Ζg\}SkM1u)vTz_CZiL*wtA+=NkB\ms'@ٟOO5d?_%~څKes|3 @T`MϒJϞID :n$}pULTn͈OI8Vz wVS-R,].}fxw_[1w=66۵Y{;ٓzGѾWE$p֑tv @9ҟ0ϜgYFOזY<6hϞ~\ͩS}aԬ龮v}p)M/<So @{ _kmG=??|߼ T= @ @ XSgY~ReJvFJ&s]m~ٳ5ofk|3;$֖:IwFơwH,w>hèfjk#s 6 ~ ,g)JAWWBW( ,Wokyw67)>@F?>Z>2Vi kVumk F ynuH]3i ;gǿS+[m @K?MOO]7|~sp+;k ^O!@ @KH*yzn[[_{ϗrY @ uD*%_n\T˹ˇȻxLMGuls[.-<@^?g4! ~77Ms\_(,7O~?v9/DpF  @^@R_Ɨ>?ӛ//ܥK+3?3O4+'j< @R:R" P@*\ 6_f>>RO)6e @ $69??}ӊ/ſ~_#ng-2+UdJn @ @R%_+eͦO>??Ik|߼e/M@*+/tZ&@ @R_ C%p֑KT3/8纀/8(  @J?>Y4=K%ۥ\QKѻ'_rUjL}9NaOTE*`5K @ ܔJ 𝼪[o U쭃ck3¼Po}߷6xhoWuD*L@@*ݕ%8g  @KJ?oٟ%.o}^Shٸo ˟Ű bJxRNA @.^T}?]^%K g6>OyJ/G{iڼޒxo̽L[8%k(Fg)Jk6$@-Tmn\;گ?OGxR~pTzћ>'5ޝwL'+_-h{kʹkjMV768Փ=tawaoyd3e޵xJ JL" @W+נ2y`$:B_O}y}JSyߛ-peȰg ݟwȒhmNl,9%Sl}5fNmT_Q{k}{W{e @O?k?_w#@~~o[  @& ~ۑZT WÓP{y4o1v['G{ݟb Jn+mfOͯ]Ƭ̼)of0ݓ+Ovǟ;~ ;;;uu} nȰ;n]ַgqrR'өH @ ܔJ y`qo^z'}~}k SVՌy')sF?ߗ5lVL@s%[+ݟ[jK_N k/gUa  @VEaJ+H'@@J7>|땇\Y? R~Jy3>mŦk"Ϟy uOhR鳌ּ۷f!:nyM侟=>;xȰS߾;vϰXl_zT˰wG*'7(~2 @\@R~?Ϧs3nOg,k |ńgGRjM]_dhɾ@|7#/)Zwx}ȫ 1\_rR}FyE#%O) W{ e @`8J?.(9vs8 @]@*MkOz%͞1$綖YYe7y{uM=5޽ɝyky-|Cqΰ++>:֊wTޠT @ @y=kk*k TW*gsM{R"CkOχ.RkRѶ.77c;I}]~"v1 @% u!r~3`xq7o?P>}S|S{vP_(s8// @' .N޷N=]h`WOl}J4ww:;coΗSߴV:ȴﹾ-䙠TޠT @ @m&7ko^[?5>?V6YyY;弾8dُP.Imʜ{I.p֑3`(5giQ[}[ U*փe S+l2 @y H?q[S_?ܯ~nʼo͞mM3oso ͰT߼JOV>2~nh4"@ @TSuIj)ċi @u H??JT?4NnP*d:  @Z܋}W>k }esoVzyx;[D۟0L8HT^˙8ғ{7)oq]źHyi;x{S&> y_1̷z { /~T \Y?x= nG?R H 6ϩ>GhܠTt* @ pJCD$۽7{r]/_~v6OW'jy:J ;Z @uD*jL^@S齪XTz+\v$FStq/COl w.Rȕ_ZԻJz3k7#b)ċi @u H?Jg(R8AT$@ @jJ{߾gfA"p֑3qxk*=+O{JO;\$y?fO*Ly̛Jo)Zr٘Gϯ]-ۛƳgrj.֞WHϞD{rS  @J/~22GhܠTt* @ pRY @:R"~r&N/B`M%IWx'G[bv|wbiRjI^<1ٟt>w.znb2z{l}%;3{:_i S  @J/~,6ÖJ JL" @W+pS*}޿[?Elƿ6]:zD2:2NG88 .]lz|M! ?|qE:R"~r&N/BT]-~ "z pR~J~_?o_CW[@1Do==6zO JKZ@ uD*ʯLY@*+-\Y?x濛'@H;NJ?MOS @+H*FS gc֜)>f=}# ͉nl94ՅmY?{VΘו[&{nzVok?@:RͮIOTzG@m(f7Q<|Z3f ov]TM+]ɳBel=?s=÷7Od?UCӕ7s l ̃hG_3Ix"H_՜ @ )'c0dxպ#g4 @~gIJ?MOS @+8Vzk<1ك u7iMn8;~vΛF?v0l)Д&pj-5§31Nf7Û)ϔhrs7- eν-MWjt]vͮ뛖֙n46u"{nJ`9QOϧ2v5CR NZB% uD*L^MgR~0' *^<%]h˥ S @kJ3KĦ҉R'©F @ O'xr7Eig3INa}# Ox~רMkˬ{2һzm~f*f+I˨ߴ4x5꼯5q]ɮ`k=~P#.){~"S¬&[Szve=2p0W,p֑+3uxk*=WWq6Pͳ~b{Tiiy[{\kջֺ_v|:m3ț>[/tGq) i @ H_pObSDT#@ @T\kp]}htL9 6H#9nP]׼z7￯5sliϑ7;{.~Ї~P#]94]~oSD6SC9O6Fy(e19BWɟMxi鳔h?y"1ϾϮ77y> 'f\5B@\T'_*$6NJ?N5 @XTdxo)fݷYa+ʾ5M.7MY\| 4p3ȆZ*ݿi6oid66;f%4{G:f=F 69jkM#ybyf7MLߩ5CZSw]oMAOd3@<7TF>Z9};0G+p֑+3uxMZ?On<ώ4v^4OuwMVw!4Ig|^y:~V{ UuQMH?e^Y?x; vk?NTIl*( ~"j @\@R_?KW>+wxc5oc{ g~g^%~_?-sNum~N{Zi<19 32;o$N#%RW|5g ~VW7wW5ϼ+gr ͗s%(}Z썉Ͽt1#qF2vJ?+cY?x; vk?NTIl*( ~"j @\@Rțhw?~RxGiwo';>hf;c^T% 竑s{R_'w|\1g)J9S'@ pTzћ ѓ雡NH;Z]|ͦϵёoZn#yڴ}ny“HT~ v pR~4T:Q@*D8 @bҿ޷/A"@w8HT_͙:5 if5GWx$> }TIFi6M;J3^ɯ۬1d?zwͬoI;1f#HT8/o! @. ~gIJ?MOS @+J?;N#%RW|5g 6^I;oMj;.1;?|,F>i9FokR%{KSw3M*}HSCY;z9-xg4 @ү 8iR'tTp @ p7ҳ>,7%Nր7;7,!mm ܱ#iďr`8f pg)J9S'@ pS*/̝5S @kJ3KĦ҉R'©F @ |c^=Ĵ0 M =6} O.augU[KEnO#}yu$  @:R"~WsN/@Sd_^8  tg4 @ү 8i tRxPM @'XSk;|+s{I]o{6_!ϛs ݞ=,L~$ޯ%7KڧY|Mr __Um6_3~z _>ߵ6zg{&MT :{CY\YGJҟI @#үj Y?w R~qOJҗ~e)ҟBU @\TzKo넧=M7W^mN:eJo6pSzk:|͔gI`gvY<復${u&G͚O! }~o @VS\i8ج @J?RNR*0p  @3{*=`qK;Ynκ曷 S2̊M+e' 7˞txtxgm`:;~&޾n5F(p֑k @ H?5Y?æCT9gTTUn%@ @QTĸkugO]zކۿiuJ&=+gxI<{&r7z3U{3ܻ֝xʞ'D3ɩU+ ٞ$׹4f'rpjRg& p.g)J" @y~>??|Ecy,=MTz!ϯ' ui;ܱXg"9 LV'yf\Q>)% @3J?<×JkU*Zy @ p@R__skɿO p\#%R_ Ig6oSLyq,fg~=]|-d9u{i(<|KWο9ɯ-3߉ty:Sl7Mr__2nk3\{Ra_{lVVsȻL32m3;;~ںxNSr91rnXfsWBǶ? s&r=GaiOn Ig=޺UwngzyzOLS @?:Tr_ H; @ p_Jor1ovFn*q7-[ÅW7ˢ 7<o={vgOnFy 5 9UZ*;=fol| {e/}q0 X|T`L$IgOBg#XC:madϖɵϩuwW`>Ft bcO`LXi!)ĩ#@<ÏFyM T5q-RN @WRYGJ{ <^_8u(M'ϚfD'lwi8Sf Oo.&>K*-iyzI07igd5fΞzJsOwajk/G.C|#I{}gi:Q){0޴tigDZ 8XSSϺ~'~ q zbJ~L*}iwl'uk-]'5bWWמ|>. 6MKS8CjIsW)>NTcէp 6 }tj2=kV|y?T[_FO _yٵyIeڟ8Vu C!\OuOS=|O}O!O @ x:P/~&-l:&@ @lTfe<[o}.oΛݓg=t}9M̾*qݞ=漇x$E:.(N;wy%;;ϣo8Y?@~eR~J_7q @Nh* B׉罹L|w4f~ |%վgɭ7{;y}z)vɛ Tbgf*5s?CtN`v纲[;h h3V_;fzZ({2GO2}^ :R"~򵐊x~o?1xJk~hק.g4@xRWy؟mRFc @V ?t2^uyDuQLvi%yܔJOIƷxGҧ}*}}kcxS*o7_}dgQx& ?7chzH\1 \g)J?k1'@/Zn.IuS#.Kxơ_^Q؜9Ci걎}Op=kTG*@pSGg" pR}iRJ_7m @ еۚr^SxVz4].=Y/u-LH*}._IoJRA_"H?]{ 8kH?jHU<O2ALv5<>)'P-ĒN vxXG`Nj @=Y_W5ƫ,O=1h "+gr, TGj+:@`UOPç'[?2>&RVz!u(&kKA+?/8Fb^@@g?V,7[(VfC @ J5_sg|.^ƌZ,=/Ή'q;w_}'9b~_eT`"# 0 ?\J{u!++JEf1eG^ \N, 鷏̥d0/cڦl~VDH^^xkƷ9n]lQhoV 6Zn4Wſul+%)M\z"` `u͒[| @vP̏nW]uV<C @'}𙻧;}4ۛE/%,ǨĄ P ¨2 Ji[麘.#Yg\ fRK{BOWV2ftCftࡰZ鮹uJШjkX+]@\1+JLۛhr3**l_y&tjW1Ӷ;Tj.sע/\7/#ğhJr͛[{i @vX``;%/y~$ C'PR>*,Bik{eqm 8c᭗6g.VzstOhߺfqچci[η}qo +=StCv{3̀iJh^}2y9Y))skS+}J+߽z+KcGsY!@@ḱ(Xy''/ꩧ'NSJ @ P.+}g/w,;cav_ 0@J Vzm`@Bi [aZ/_[c[V{XqܕJWzƒZ^=I`P^=ֆ_+]UrVoV{ifcetU]g{w>'b^@@g?V,طVjtmJƁB @AJϦbg[MuCs=߿rEUۺcx4m5Û@vU+%X#@`)_JOPJ#ܰ7خV2Jnv^)ktB6tKZ%kg}뾽T4UIUkCEѵt6Fӂ#GW#>VL͉̀4YywW|w={cu)E[yd @ep;\ƢbE/-Pkt[a|[@[!@KK&Zz# ⤋ /b`.Nq|xNBg܌9mN!= p$U+%XKܢnv`~C$G\iVxۊ൴s{X7orӊ/VýxycE[E(Ft\%Lt;.:>$(u'ABV"[QhZ:xyZɬJAg VGQ=iWd@շ+8@j'p=8Kg%X @Xׄ @`9}SN-> )m0-B bX;Z:'=1{%+{tSҞXWt\[3}kl1&c3OƼOƙ6B~ 蔛50 pmx=4WBeP,ǽt!QYzQH )gŌaQ+kM0L T`." y0 ?h\)T^U}qW)V.]֕GG+1>P$A*"P-Dѳ @E5<:`J׿_pZ.ȹw* ,=Z^.JӶޜncK_Vʮn* JWXbkϕKUvkVvMz eZS 4JOY yprmgN`憐d^V ~@%fݔ}ռO6amNj,@J Vz"@p/Zrtߣf_UnY}󿂗ۢVu~҅fSr Y` @` nP|Y$ ͎;v= ! H`KѕHtVNq-MzO2^[/u4lRtElrPsiGok$YW2 ߽Ӹ"GOj(&J8YAԵ3(Q`#?7*źY$ji"jIQ& } T`Wz%F!@iX gW/tO 6+,{`GJĽ?} 袃lia%5<>)'P- ν4 p;\{RY$ Yz b/`/G l,7D"Lc؟=znkңj|Ow^xύﱹ~P(1";Wç@U+%XE@`Lýh~gKy2GQRIbgr[1YշEς @cp;<"a`ovaoixt @`F^=k'Od!1_Wo}[AsH4ןh 28Wβw_}ݑ#W[uyd U+%X^Qm@/`~ ҳҒ)Y]]ڣ?Z/RG毾RϪ$e\{@w{qmhwz(^Nlc[֭aD{%kU.V(-G{ð׆6W2;Gmb)}koČ:}%[ZI6`3&b^@@g,V,}Bҗ aiҗ#6E`MEJ'fh@BT`." y0 ?J-XcmXtdʥ?7G^y^J 𶭕7%i%Bh{%oһa3[t־-)歹m>i{]!*pJuN3h(EU@׊ALٛR~ł{ZV+ (z$ @C16g +}+}]O{`3< @3hRtg U+%X^Qm@/`~}=djkrVzxiW`VS+=Lnʬt iJW^/]60[TJl>j.4`/>UBK @õ,EJP(Vz:,Vz@rC)4zths8slz1J['5 VJҋ\<{R[m˴kp+=-Xoma=Zu8^==]G8GW@gZ銣?u⽡[KJO?!r({҇yT} Q,H0@ 0cm>,VfVfJgx@f$0 ьJ Tjk1\3N3 3Jcb+f{|jS, JĨ6 0 qZV_xp,Z{t1%18uS9yVJly,==S[:n+uaPF,eG6`H{S).ݚ=c Ms UCm`ҫ쮾,>=XÏRV} s/M @vރ +}^BXK4XK@"0 Ѧ"R+=Vqמƍ9>7sOb[=3iI{;c37Murjd3oΤz{>=k3\{Ҷ+\S @`VJҋ\<{R3+} e(tZVj/H*KWBve"HsM+ݚuxoUO^C.N\zİ{JEb^@@g,V,}Bҗ aiҗ#6E`MEJ^rIx:wd{90/6ov8]ĴDSƶWK:(7ξ[)H,fKѥq3\^͕tESm\ini3 T`." y0 ?Z}=v+[cyɥ{ΝA6Hs~[Ķ-4 g]6!]|9ة4(z$ @C16g +}+}]O{`3< @3hRtzJ?uJgB)eiK[aک4`s0_/ZaugM+BlgVz&V7Xt)j >d1@'PR^Ն W0V:W{X&@ P;nkY?>K_/P%uX MhSilCXjM^Xr\ڟ͋ɪew0dsfk۷9K!LFj++1 @Lï`b7o8^R/]'fd޷ G[t{uݖFiVw6g;)Aշ+8@j'p=x?^+ꫛ+xl+}Df!> v  V:# N 4vjU3r=NLk:g~#`6!h᩷:HMOXݑY,Y=C?5gUhcۧdU&4KK[ TAj+.* @+XqK}zӏl:%$ط՚70vvَii|x3b^@@]ozjχ?a<^}ҏvᑱAToX`P@ `3 +ovmu~TgM1+CqZY^mQpye)@VJҫ 0 ZҋqdY,r!)jZIhEk<7uy+M鷉l|TMŕ=:dHp ˴ן)K{+W5?dZy]oY_4H` LS- ν4 p;\{=ܩShzA#O>3!J?^yҫ>*$XGKX@XC(fvZ©ӧv1¯~CHWd)iz lrJ_3UCj+}k**@`<dz[LJϾ~r:.Dk/+Jr-.gJtG~kpoFK1FS/-`SwFQ{D'|q5˵reytWn/-nHszͱv9H+mf7Y>uEDzVni;`KKV-bΠT vx}?>IDATwџnx'+} UJ_E7҈ % @`X"ld?Kԣ> T`v-E'4 g`+]\dΖmu| 뙥:͙2.:no4jk:Lqۑ!Qp]TgO/?>Z=VƝ+=v=ZẄ MMRhUϣbiV;mxwHW{w)LP-gN*@f !p̙su|>sHCU+G"~$  !>if'iMj@Z)J @Oix c{T3>5mo[wY=]"],2]4Ӫi7tI?ۃg%/ -:+%>K`cJO+}_Zo!s" l}Z.%]bzk=>ƤJCmyWэ40@ @؇V>H;-Xrs+еY:Q@{Z)JZ!NiaVzNeV+]Daս*nu,'[8wX+=5JW[t};wY)j.U,&K[*)g߳6 C[ϜT p;H;x?OiO"Iz8HUB, JE @.n{ND?{^gɱG?Vz}H J/ϔ "R+=Ԟ#/ʎihOkYn^L{FLgS;X͙Iv'-Etj UrX5*JK?W /|tz6I+shHkڴR @!PR>eC8\BJ(nV}7]շg1C8[FC[ 8e3;>xGa{tcdW?FY\>o!q lÛ/+]nw}wu1FJ lX!-(O+}ZF+}43bރҏA "ټzJh2=vk&ljoZWv˖BK+hOOkzB[ N++C@`~ @ @v,~ V+1:Vhtd\1w.M J_~QCijOG& @RXX\BpT@ @eWm?G+#fJvJ/{t>WL+}ŝK @`җGP'{z@A pXX\BpT@ @ek#fGJ/{t>WL+}ŝK @`җGP*ҿ_7ޭ㯿1G(>*H 颟ӎ "! y0 ?ҥ=?JN@B=]U)zy=׶Z\?Ĕýޫ=: Ƭk"j^ +}4:2V;A `/VzEc 铇yN܉IE#|N@k?ߍf';nI־_Jzz\m;rcƹ?nQ; wJwMv6\fAi4`X~a>{ja+=*H5It:{=%Zj7X%ݹ/#v) &> J`$baoHJK TO]+Y:s.d&SctMvk]ٮ=  `ijOb[{Wj+qmi[nۿ`yDV%ֵ ۴-VzV@+="d(R+=zW=gቂ .4py Vh V:V+(RB(Ii4狅 mJK TO]XiN/ ՟|ՆBszƷcgSY&Bn6 eGFJ,'. dXKvZrWwgVn#ql{u?yحu?JқңceoHzʮ:`П H|yO7`W4 C $%" y0 ?ҥboHJ/}6% @"pήJ}K1m+r֟sYIT +1:Vhtd\1w.M J_~QCH7J'mkagVi'Kwz\ /$aSeWlҕWY;-(*뚻 i{Z^^]y;mlL7cѿR {AVCj @`9ұҹ8 0^TtdlVz) @nvvV <'kV3'ǍWh˙RGhXёqWܹ4 O+}}D {|@O/ngJ=o3iV j6*n-Wv60dWMKGuN-y?0^1ED(4 $! y0 ?ҥek)={x]zWU3TݮW+ٔx le;{VM5K:E+@"ZJ+&tF @`FX3§V߭w>x') #> J`$beٕ.K{W\q 1K_߾&X[n*O,,vxȪ`Xw) p;\ W`{\^ +}4:2V;A `/J'[۳vNj>z1k4tY֥|ІGJ@"! y0 ?ҥhk7@>2e`'ۈZ%CJ8,V`ٱKM@p;\4^ +}4:2V;A `/V@V:V:!4WL+}ŝK @`җG+}MO'h  H++C@`~KmZR-@K ~vJ#O:{⒌% +r!F͕˕ޥ}Wһ+[qdYĕ r;~CiVH^7E7P_;#2w 7[$ jnU5qwG&7Y2QU~tqnˍӋ놻tn(%YcVz) @nvoV)3 |Oˎ >YVO+}]L!@`җ;-\~'}@o_yyk_˯=ݧ}}~QU?w^=Me#q؝X; OP6rI @`5ұҹD 0^J^fpqXuxsvZMNmŶە1]\s,fI#hf+x,#ͺ+umWX?Ѯtؙv5UortIxU5րwNDBvXMP=y=a)fm#r_UC]ݪ=:EJfޕOò=Vz) @nv/u?:^+ pk/!DA+}4V께B `/w[H!"B.+ݢ*)=vi7e[dy9W*+c,l  `cs@`Lýt]kwSmUS=U*LS)9hk;D%"{L,Y(T嶷 4hQіTV-0ѽ+?]-R_jx (Y)r͌ZCGqqjd|jG+Z[$^?]~MJJ/}6% @"pح+mܦ!X#eW4L+}ɽC݂@jM3_nZ[Ƴ^>zoJ=zGʮ?SUG[,(rXBzj(k[VzP%檧=jWWќUv#)׿TSfiiM[\mQ섦 1GU!%" y0 ?ҥ6t Zo*gks%W岯V[q,{UX-[Gtuԏh q,K!{uڎUgEv} kgW3]JȺеÖW@a5"cTBOB#k-bx}nֹ *glUcE(W-ҏ֬mHIF[쬻]-RCFJ/}6% @"pήJ$+~XeѰG# `si ,Vt% x-7ZR%=Kک,tk#_ʥ6ײ6\ V1]pz{teR'J8VzXC]Y$r( ח) juttU)[]Eٝ(HL8 ptt.!Ciy.iK&n$W)&lO,{k6ȵżm[U=v]º\&8,,+2DC.%u,a7omDX]u)~OEfJigust4k?>jY&iwd 1X<5gQ[ڦ1 vlg/JtxW7bp}yaFGJ_q4@X>56 l9plU=|xn-[CWz3m푸뱃+4uأv{B]Vz|z߫{X<ҳj> ܕ =mtwhX{D `csq@`Lýte¥ BڪtfTǟz3Y3As=&1vYҼ]u ӜC42iƝګ Ae?6|Hv5,F{#gJ/}6% @"pN'~eSsUraFGJ_q4@X>5}36-#Kx++cx, a7X٢ainS@+=]6dOH҆Vn">*=hΏGnn2zgVz4)Qg@`Qұҹ8 0^J ][@`9{r˩a-5J/}6% @"pNX~SZLe>tOsJU' uv;;`SOafkMn];DM/1{?,48dt%e{R2U44[RRF?{n f^m  ! y0 ?ҥfVWBK#^lJ<@6DᲝm+=VJczP~sLzX<Ҥf'_53\pALR*x쩕nO=ӯξ;ұaFGJ_q4@X>5|UO&~}>?q*.-S~=7xuPp1<_;~f!~1@@u_W~go_ķw!+E!,ѕJ_+L} 0 ѧM2B nˎ[V8M+]+]鱺yζms.AںWp+=l\Y֊`=:FGJ+&Υi |X#j(zzu e/휦2'N8RYWꓯ?9o|_WG_[yKO&7ysVA8v)@?"`OcS F+} g`@@.q./\ƹ7f}es|?uM6*"JqX=~v|EWZYX++1:Vhtd\1w.M J_~QCijr^x(1+tgdư}:H )ȄPO++C@`~KJ_+L} 0 gSA !JOKm[(\"^ŵǫ;Ɖ=g;L#GSqҔv#xn_‘j^ +}4:2V;A `/#ݪ /tt.!Ciy.+}R 4XϦă @`C.]VJ/ݫpiwtGhXёqWܹ4 O+}}D +o<_ß߹γ ~R  -JJ<{Rҗ SLC+ٔx le;v+]K{Evf+1:Vhtd\1w.M J_~Qt=mO:zʒ%?Cx!zG?ѝi'(mx Ptt.!Ciy.+}R 4XϦă @`C.ٵ[U"LVIGhXёqWܹ4 O+}}D 3+}W=vkA;SYCJTX]ߙl$ Ptt.!Ciy.+}i04KM@p;\뚐-Vz٣ct4ȸbX+\@'>5W#מo7iBjmӴj),qׯn;Dv|WP^P.һVϛ[O Vkk ^=J9ɬmDJblD[3@ tt.!Ciy.+}R 4XϦă @`C.CO|3,et|g<~XeѰG# `si ,VJ[Rc%r~ 9ؖ֬RC_2WnZ?h[溲)A9sw|Q5j0:+r?QAj`b2C=+= QmkS @bkߑQ\WJoYA!`#ڱ@ұҹ8 0^TJ/}6% @"pbgcu=O'8k>㻛=EVFEgLV+1:Vhtd\1w.M J_~QC[O<{:7l{tmBݾAVOpR7郎4\'~:,iY2wYᗻn$u;>NYVO+}]L!@`җ;-JJm,"Ɲײx=eq퍈=g Hy!ҳ8S禕J0D6b>Z b7d\^=}Xc<"& &XX\"Bp/]*V\ai`> vxxg/[ bڣƼxǓ1886VEĚdkP2+\,=GAQɽ eJJg?{ĉ+~dž"R >YVO+}]L!@`җ;-Vzktt=ףxj?"Bhjp"EO{d'XqW &tt.!Ciy.+}R 4XϦă @`C6Ξ={̙ͼ5hܮ&s#DfLb'l"SV,yRr)Ĝ{Ң|,gӂbݯZ ZLI2ַ~> +}7rVA `/ Vzz-c;*ME~t`O-!ڲn=EmE ~EcY5t}b!߻ui"+z}tK[Ua6+M;_q'XI>rb$! y0 ?ҥb/>Vz) @nwvjw}Nz']k{Kˋ.|@U+ 2]J=z`Z!{*7k`ؐ^V3?3\rEw=V#htJȸbX+\@'>" +?{L&_>+97MÃ>폼vx,=H @`;ұҹ8 0^Ti `J`> x~~~6<noN Culxbw V:2+p+= =s͂[{J?׽u??8VԠ~ĉAHmg쟽m4VBE+}YAm:Jckfyo=qDY*Zן7^ߑ^m}B H++ F@J{Rҗ SLC+ٔx l>}6OsMPا?.z>#Vz|#?,K7 {=r4N(>WJדt'Пk+?:۟3+]ue5 JE%4 ^EVW_׿y`s %/yK_2A__Uz_~۫k"  ,V{}'}b`CVI++C@J{Rҧ1)K#^lJ<@O3gykCj>.@kܹs=t.GϽGm[bu+rIDe.4RF%* [gVwyJ?ڑ%k믿%b:#گ޲O::Z*O=!@ ~\}+ky@=!@ұWG!J_hP-@H wu]'Vд5|ٳk=~~HX\>?$T :^>j}GWA' %CJƅ^7xA x]|:J7`!T@_]@s]wX {fOu tYOzɑ.@rQsK1ygqoevV6B++E@J;B"c]zb NnankoԱ7J?Ui3^R_s*d0$yy+_/~UG\ %yjkl3K^򒗿Zr HLOtmݿwkluMկ~ΐǾ!> }PgU+}:֔t.+]Ot>䦸4ٗu5A\'CQv>PEJmuU >ɿ˯|$ JJ? ~H9@>"/YZ p_k-4a_H#٦VAE Vzj3ƣzP}-ښ~;~͵L(b*A9B5oɝ= F=Y);DT0ȝ87=n Qh#0JO:e+}#RBH `cO|Fq   $ @:V矿;sc~ +}5su[DV;ϟ? GXue侦8b N|9% julӿXi]Ui.Z ȇdzYvzK6^{F/j[$ru&PΫڰirJ\*끯?/|Fd^ڐVL;XSnEbFYJuW=XyDC `c@` 9`oA2!@ηi{W'1>+}4G:}@L/Dz9}AM nmz+}݃5?$Z/ݦ{llKձ p+)|K i}^oX^ٝƂ{ZD"lOm[v?8fZ1W5|+Kucugz'V(`Z?0ܣ\XkV:Vj.h P+0 @)K|S瞻nfmX+}5sjH]{~g6+}4:%Vht])t3_Nr@`8/VjZ׿VnYΡG7o[J boQ%άt)>+Hkkz?9^VzGiGT.<] Pӟ3+==Kj.+}MOh  01t\@2LWaT 09S& yp}:u*[3q'Q8jqM+ݽ3?3\rEmc?FJ+#5őNSpz)_N_PgJ__MX[+vwJ9 7Jc>GXܫ+Mx#~㯿a9>S\aV {ycv(+V:Vj.h P+0 @)K|e|8s]wu֌ ך̖2ௐ5}C&+ue׊c?co}[?kc("X#gᾦ8b N|9% julӿXi]jvx*Cָk~)tGZiEx>wd\n ]\z:Tf_xQJ пilчKIk+Zh73UpVvq͵G@Æ}sOZk#> ̗S"&X76=e^{䭂}h"s{k /mzx}J>9 t\@2LWaT 09S& eJbے6w6yeO}g'1I @+& <TFi:B 1uʄ v,_[>h[~YyX! cNtJ='{aۭSmVz4 ~yX=ZZeaH)8=H// MMOb{uXC@++}5x4uՅ A{c @%pY.:p_z;_(Vzfe{YqqnW;Up+]w\/ʸ4 ZM ULF\dZeãa0}MqrJ&٦=WӺ.+}Êt!7*JN&z[{MrI@`kұWsGC 0 _YQ]@7N p\Z#˓zޞ5饾cU03+jxj^N4~ZH;UU&~Ge\_1Yh69\tuyuvXz)ѰgEྦ8b N|9% julӿXi]j8I= Cv\!&D)cʯ;q5 K IL@t\@2LWaT 09S& ehNd+Hhd [v:v3o6 eGFJ? 5őNSpz)_N_PgJ__MR+={iߖ;>|+L;7rFSA'\("_Rý?63*)f&*K*tq4+h!{jR4 |ϑlV:Vj.h P+0 @)K|[Pb׫gV$kDhݣ8r&4ݫ٘gݹ$XWܢ!vGhXue侦8b N|9% julӿXi]n׆ncy&ZN,^}ܚN8#{W;J>O<ч6]{,y뷞$hC"Xʸ(v6KVӆzsC\3WY։(aG*MVz!^vEvqMJ?i! JJ_ *#4|eFu!@sޘ:eBq p;\ow4yiպqqAU %]/i4 J/{t>]WFk#> ̗S"&X76=J\0-=J M-[{½=BV=Ftz5q˵'M,yZ 7<*:7eJ,g64~@GsTnV(V:Vj.h P+0 @)K|[JSmGhXue侦8b N|9% julӿXi]Z巘[mik%l2mԙ4V >]L= *J"+m[YɻJ{q_+]G+tzT؅6+@JJ_ *#4|eFu!@sޘ:eBq p;\rt~Ȋwb`D,@,⎕^ +}4G:}@L/Dz9}AM nmz+}݃5%C~Y X;[+=t9e%=RR;<+HɼPzj+^ifZ-mRY+1U'g}xuQylV:Vj.h P+0 @)K|bkS9oUNZq=z׊mGhXue侦8b N|9% julӿXi]jvۊzt ZrݩZΫ=g&٭K[wAڣc<І|l7\1ߩ.nQ< >uDӏk[J"*&i ]o6+%@" <TFi:B 1uʄ v,J ∅t@6$Aܭc!LFqJ/{P +pYk#> ̗S"&X76=uY 5u'NNZ0 k]孞Y,Ǟ4`VX wAm0ճƗHn>huUӖ6fMY'6$ XXX髹!@eè. @`sPL@8.nM}%ʔѫgy"V^Pzwi+eZn<ħZh^E4W)KzzrḪx:9h˭EjS)[AO)reɲw+\X-0%=Xeãa0}MqrJ&٦=W:Yw?|5_3kޒq;dܙg}݉'rHAJ׼jg\OqZ#\7)'~n' 4XX髹!@eè. @`sPL@8.nnOX@qYiv#[3ߺ'ڵD^ S\.X+=Jt@!vJo;k]z.=MQ@Z邓}ushf{GJ?aH|K/\J\<%upe-+h18yn^zSC2L_uEdC }#򑝑$W$Tc_W&}R@%K;TIi*JC%1-oJ )p;\t.1}ʸX[. 㲴'UvCXWԛFݜ{t%<Nq 6BMOGco(X VO++:JiZ{zC&$1!l p;\tjxn7t^M\vws@ݹJת k]eqKq))Zj+Ajj wʸ:(B*MN 7s͋, (+Aqx4f)tʀϟ+e/{-2e锵xK-lX[8V.+]úAK7;-({8ģ5H- |磏 {vL | zg_{ެVX^aUf/h$ |XX+ @ۨ4 @`Z4@e)V̘l9UŅ1ѫ=ٌKl#ɶ{bxMy椬uvK9W9no,lM-+V Ыfhmܦ!X#gᾦ8)~Szի^e+]?Z45;<ٻ @`#8t4VFڛZGMh~>S]vܒ7c]M7WkZx =J4~m=ҧEo*3.׾ I@`ұk@7 @`B¦(@eAb|dqU=v3aFוH' o. %_~P4;<ٻ @`#8t4VFڛZGӽԷL$nП%ֲpNtoCZh=VϷvXPVu,VpEa᧕L Fu͌JןaGAJwmOGHn~?r7@=X= Xtگ? P+k9 @Ƅ) &"pYЭV?VP{G1w3d 4iz;ֹ둚^ +}4G:YӧOgJ ?ONV ]@ mz:+}#GAlIKKCn=IІf=OtW%[߷f]ۉtПza{GyWѮ]yG܅Z4wԶx֩DJڟ*Td ߮WcYH Q #e'VĨ^j;j V)miƞUFM7Ȯ:`/15G++:JiZ{zC&$1!l p;\4V&^ +}4G:Mօ-/;NOt.6=foanzt%;¥J{p[o:U_>}T Of=Vz&kgH@bMt56tvS*{ҧDr`c~]G!Z 0 _kQo@7&MQ 0n˂>JqF" bXX_Q@VLs 0! aS LDᲠS+]C{VӄL^bu[]E{Y4[b*:ͥYLF?㻧2Ʀ(4s 4]=13lVzCѰҋS徦8jA/<_}xK-lX[8V.+=xy:ޛ_w={q}"}ZhڊfxZ"HW.7*jZX=j ɞTMDeyEj*#擟3lgMCG@EұWpiG * 0 _eQi@7Mi 0nRN}⫝̸ h8)XB,Ōμ~+Њϱ`҄d)QTe_xu-JFs=ǔWs{Lj^*5őN𩧞!_z=ܔ T!٦7rLYw?|w5;q/[HJU!!^uj%4|=G!@ޘ6EAD. VZhm \*4.K>5JW[+upg^>%<$X|q"ML+/KkQ/r*hpOQ\B>jTs\hsORZmܦ!X#gᾦ8҉jqt-.5y͗K T!٦7r̮ {+d~JTʼnueuūJ@@JJC`֞ `oL @`"}ZV>o⤒zL7d߁KG{mǫə7!HѰҋ徦8҉>\rkv)n D [ ٦ҷp(H@X,t\@JLWmTB3Wok7ٳk HplZ2{ӵқVz"4 ]D{rʸu^Vz@g1|sVzhXVdcwj-W/k8M?uOɤ,~,' r@`bSw%,OLu\qX㸑kbX鋕# LL++}0 _0 P H@N7/[ok2cR4 B=Zү䈅eT?-)m]g kpQ.;JOֿ_J\?Uz֯mi[1PRLkjM(ҵPJ8+:,6daӀs#h#`֟"+]'[;o߀I+uc?+u*+n]Vnlf=qyKy}#sI eXC8tt !CiyS* @ҋ? J؂ j`J=4kb>0{,.ZFxҌuMVu(Z;wi"`iӹdJҌWLhJIM+]G(7 mA>p;VzquY|垁CAV;^H@B`OP^hUH7\z 6q1%Nc~Aں *U6ZZf `cWqF%!`~J @S&nj @`.CX.{\$Fs܌^ +}4XSI(kzJ/~V$ j!'X EY JOoeKі o\v Q[j+Pvmģ}^Dz4둂>^*ewLն҄q?.M\ߥrqo^㦿$D@H `crF=!`~m=J{ @*SU p* @`.=VgRw +~M))ϬJϴ,mJ/{t>Vg?J\c?+XTZ"tIzɐg[ 폻7V,k+J*(ƹ-qo^iGup,Vi:R->>\5kk/ᾀ:@XX\QO@`m_[@s*^Bև6t[[\)ÿ)rU p* @`.=ӯ~ŠVz٣ct4җy*Gndls"n3<[lHuV;^H@B'%_uOX EY Y4{ Q rϹXdPV6l;츾/ތuSc$[<دT.ۮRz]z> |D'~8@JJzBk#4z@@USf}Bw\C1vRDOOW5, Evl`x XeѰGJ_)%*#E^i= >υ^8q)+_JBG@Ϣ}뭷{~G^gE%[t 4ʢp>rRϕw.ں9׶"+^ ҸV]9hT\oҏq!& 5ego~,7o8]#{/VtTe9ևJg<"*!@j :6}W'_|j+zO7oV%q).Ԟ߷Vz%NJJB"4@@m3f21ȯk\y߫{ÏY{586/ܿ#z);(R:x>&z/:1kr p;ܾVon;%/e/{UW]U&Q V.B{+fo?Ƭ ̓6t@zzoE;tF%ϸEm2M<*W;Y X T^'vV/+Ǥ~򇑬:[@zo^zs[LSoOJ`w Uڱ]r<;>!wb?dk_|qҰK&Y4ጩ?C_]\8l4H{ϟڷ 4Z]Bұҗr}F= `~k=N{!@`Qď c?5c[:P=ӌ^GӘz{]VOl_2&pJWΜ9sܹڂ>j +}}ΌOB}"<ǭMc}i#pbR#0Izi->\7ib֊KKagEB'qשXq>S{95AJڂ>j J?J?kuF^k[bql@+j%xU`ȍv ҏq#&V1Uh>Am.{7KJGV·XU7*z̛/{e+J9q+~Wjy5oyk^3ٸ'_|ֿƝy"C@XX+ @ۨ4 @Y+k5<?6@ҴVRbe7?6t/,$]wZ~t_n-cv@q>`'>C _>x0~X,G$fP7waſ46h'zaX6J~%aVWusԩ>XZyu^@;^@%2N9u>G})=_/o{eGxGGi[ VG[ YO<ĈkڝYt{z%}70{vT֋!w+U~;F@V:Vj.h P+0 @"ptYOl1bUݶOֿ,4'lB ]TO8NZx=uo{vGif[A*J_!Bk G{џӧO{c`0SXVtӧ;\0S2o!uoشҳ[TJ錾[ TWX=^})Ʋ`Z5XLV0oҋ Z42}hiAY'ތvǤ_{xZOѢ>Qj+|֏Uz.*2Y@V:V i; 0'O yZܬVW7@1C9m3gHL|>OP SDJ/>ҏ}''O~^Sj;NogRa'W Nϭ{u+/%H}ږ=4v&86qW;^H@B jt=qΏ7xK7X=}my3};No7y2wggϞ?~Q݄2]d;'/@ [J;{+=B}adՆ (L/;  lft-n? ^ݸȵi#p;|<Njqo'|xE;2V ?%^|<`x5{vW )Pu}yJ勇7cX0Vz"!P c}ҫ6UW+xaZT~+MDVzCiXs\NOP]xosXq~7nhPҗ  lVz6B%4jA@ 1rٔ*"c0# EvxݰO%n'}w]wrX{##מ+{:*9oҋ Z jQW򕡤džzyk^sC+}'"@ !^#A CiyS* @V?29t @nK tSN zJ"񪄕~*ҧA) v+Y꟠J蒋.%=ԯj](s饗>c @ P/zC @4߹/|^S5Kا @vR=z!~F9rX T+x'Vd?{vm 0o_rg9җua)[袋vxty8\?>A lV6VC+!4J:f@@Ν;7^>>kA꿓VND&J}Z\)mNohug4(w{+\=Wv:|5Z]S!M4{um^|Qc{N = P V+={\'} +{yi :{O>ZZzzB @ҏA&"4D) P׽ܹsY7jZC}!@9nkX I+}'}Tjk.MKO7}&GzO=|{XmXwdG$;pFS d#+JQm5wQLW&SճaK{*\,⸒j~GEyV+}s!Z4t ez[#zo;K4wx3 $ʥ=X E @ 0PS /ϔ U;Sy*H# @`kA꿓VND&JWReI֦PigܭVWIyrJUcЋ&>_^Ҽ<+Psa#@^m^|Qc{N = P wx[a,F7A+Y۟^CYNCVv}*JJe(RO@ `O '4|yD O/_֦~|+o%- MvJNX;훠:+=R܆=qig]V;tUhXVJЪ7%] 7*NUJo XHB@oy Mxr z7~7&gy[;,;߰ )%Cb2Ҩ' @r`//  0 722@6@ɓO>dWCe_|??4VKڻ+; `DoYlݻcX֬et^9Wd[_( B[;UCv¦ K4ԫi`cc{ = P/YZ\g~aݧA~{eS+YgjoX\2݇JwQs@ `Er! 4| k^mzeݴE+; `DoJtyoɥ׋u'aָĆ,= sE|M*?m+V-ܑU1-U F$sLeA0uҟPaUR*Wq_)ֶlj'k{N = P Y\SXT|V|G~sv;K][LSuCް,uWح;' @& >d p,L,q!@u[.{ng~E/zd$ ,JΊJ/qZ驇'7.&>.7nUo.W6>|4Bdm9vJ6R\^W٩ړh޴ҕXyl,i{z6ew5+IBdV>~ۓ*N;Kfwa/׻{7,gyJ_H @!&&4@X5]t5o~+^/y$kSr^8yZ/V%_CjXHB`.+={һF|e]U;w,J׿}C=!@V@+}H `~}O!@ J p;\A'V+; `DoV &9@-'{SX/|+Jx @`я(74 }h p]K{$Ѿ '(hXHB+}ƞַӟ4V@ @`74Xӗ p4XGCK`@ó/T0Vz!Y.}>*}x?ퟻ3_B}/m {Oux^A@@`!g)X @"0 = #J?TBB.+`X:=~Zo`)w\hg{F귶[3~u~ѝulF2' B ! +׿s¿udũ+N_[?ڭJ_rP7@ JXVl[i @8V @ %B;fp"aҋ\VT_C.)9y54S~q4xH,kreT,hT یD^*4-K7VW,*`(c͜ Q&G}"ҋ4,s瞚K.y+_yWLXS=BhV+}ɽC @* `[i Loi' @X#+ , JJ/sZֻm-b7}&^8kk^/rWbHsןPbg[y2V#qʥ6mJJZS J w4 ?cQV4-+=VIo#sI=w5U jijl:V27Vz! N>-^n3ҝ2jMor;VgϔVzjr7Jozn RH`zʋJ@z@M_|ٳg쥗^ "Jg$E_ @`}^֪}̫K:Wݼz쏦JݴJmDwbz ܢZU-{a{T~jHb@v'O[݊ϟ:uko `o^ X߻^O|kN4@yL×gJD@`Ki !,j^zv4X;jViBalһcRC|UEݒzڄ4 Պ^(],G wJw̐Uhox Vzc6 8[E|@`9~7u{?Uzꩧ/H+ `X)Rر^o @?tF @; `DD@uYVY4ڇM]J/_Zp{qұ0-UOڈeF<`P36bp{ʮI4b.U xy{7G&sT,ڨ o7GlFZd)5Q-{qtߍu#Yso7zyg9gy_N  plRտWY)??饗hCe `bBѽ:Vz2A%4fCJΊ P nk驮z΢a>l?VzJOeKKjS;6mi[Fnm~]ef;eRzf,skyYweTnq^Qmiʁ p;<㔄~D]❱+GJbmޞފndë?>be id䙆.[ U1 ʸW.* ϥZ==%͆U≱ҋ4l%\kk=kö́ `bBұWpQG 0 _qQu@Tҧ"M9 0nc}ҏÕ "^3Vo X' B[ p 7>}=-s]Kom `bBұWpQG 0 _qQu@Tҧ"M9 0nc}ҏÕ "^3oV-4  j?pp4@G"p={vg~^zd$@ u qw?#]Wev-RϞWnvf&g_2 fwė}~8n=o 0σķ 1 `@NX;#pu]Ux5 +aSWҋWEVz#?e}clъֿW I TG77RG_um JOJhɻJ?Pyr/"ehRf_qZ) ]KHNPTJm~̝U2 7ЇLtVAQ(~_AeA,xh*:Hz,(.we"F{{f} TmKJ]=Qu:Z8ՊeZJ,d2+=]]$T܃^B`~&AM+}O!õ,jVzæc/H xԩ'|2JԌ>)+@YVS@`zX3D%0J)ЦlaSXnoVz9//3qٍ!ZMW^O#X 8UoSmWʹm L'qM; lqвM5ʦʲOcf[YR[=S[dž=רa46ZUpvci3=bOkiCU\ۈ1<Ҍ=}oryDYMAi<LB^{ҮOgWY)"/^һy\i'Oٟdu ?{ 0=S"azM%gSkF-VW|M+=cAhFf\%nkNg@hK˶P+ǭTX~ثgmfcT/jvZ-uofc#Ak+Vc,MӬaWg#ӪIJh5ӁlDפ^X +8 ' jBVS@`zX3D%cgb&gZdrsf*W\m4,0.G!ڏڸJw4%Z;[V'Ubح~xf"wS3][aV-晑fideQ33}Uq Źkl 7Pe/V=Vzһ,i@;1bxtEduleVSq:2Ȍr1Fq fyxLjDפ'GG $͛˘uZ.yrh4;y'iqjQvrc@K]_.ъ(Z{Xe/ˈlYCiJK/TsZy_-+5%/Zˏ r?5 PW˿q *.UI=墚BKv> LAGb00V@P$+B+4Vzq.ܹs=o&n]/Vz:@` ҷ˴qt6/cby6&hR趐->h%nTиȥzҤ?ګ֟mтu*F4.і5P^[Zj_1ǡlZVm2Zԓ -%>)i,ZL}LTMҼU Q45 RJ t:mJãӜ{FxƕVuej~%J /bPre\}ZGT>/m- >iqYޭvGOW]nu\ x(rMCD:J, >E'ˢv1yp}k|c,*Zud6&#yԸ[c9Y6?:}Ud:xc?V:Vh \L/oX[oU_T ?d|__~/k[oO{|~~~G~/xl׼5^.b4U+k8ɓ'y..mp 5\->usj]s`obHw޹7M3 j'%J=H!P ZzzB@Z;2ջaOvY [?ZSZn89\ʎ{WF{̭i3ZN$am䞎n :6m'XG;A ־px#'Lt<v{] uw\}mKzN>IסٞN^g){ұҹb 0Rekr_pzԩSU,}ZQ3ŰxƊ썊M-5SEftkq*7*6ὅwrE'*V̷\"5{+m1ɟh'|rGK.6Rp.C `FGF,_WuIE,0}+fg}~2+}(j.+}D8?3lY)XE^rE^|ȰxƊ썊 Vz:}Z\썊6EE%r;Y4oX3r4ƀi{ղ׿,^c/Ug.QEb@`4X.;V.]pYt>#{URp]ĭ Z?leuAa\_cc/j@#4|c Ǐ^b긘4j6:B*7*6Xr2UdoTts,&wuJE'V̷\"5{+m_M@-җt5͡!{e/\$FJXZV pٳZrMTcoc! C|@y {b:}++}!gT76S8~HM4j6"{a>z@.'c-XEFEgZz9kpWTtҘ~\aO|%^S+(J_MWh(#A+}4@`Qk p tE]Q@`CPg/;"/ޯE/G|ht3VdoT4lҋUdoTt?.**Ϊ1xJK佦xWtQ .QF@#  0Vhd`0VC++}QiT7 h*`NKҋ6XQѰJ/>PX+VQ٦ޟDn: +}z[._ѕF& VjrDCD,X#"@ұuFe `~Cb H+TŬQ˰UQѰJ= W"{M-e5vS*:iL?ҧgy)]iojb+G4K >Y (X*d JJ_E6Di u)Xҋ#UZzt7UtҨe،썊 Vbmj/ ]RIcq>=-{MޯJxW+}5]9!\F@`EX~[n+8#~o~s\ڗ̾qlQkɮRy!)[hHxGnS2H1 F1e>",*(RŔL4w~EC/WǣϾ++}QiT7 h*`NKkы+#a3] ubmj鏋Jv*:iL?ްҧgy)]iojb+G4K >Y (K~K_at8~Vz:: f4+7*6Xkq*7*:pWgUtҘ~aO|%^S+(J_MWh(#A+}4@`Qh"N#UH"I!{ds$X?{>y2Wkc ѐ,k ˔ziٱұuFe `~Cb H+TŬQ˰UQѰJ= W"{M-e5vS*:iL?ҧgy)]iojb+G4K >Y (]VTXEXpXid!+-b DGY']8 %ƟJ柝kZ9*JW2TnAE Gs=.0O"F w5YnO؍FW*+ֿ'th歡CítL[w6xGBTE:`E>}8\>4Kk=E TTLOG=Fu]nFe_1J=yuGZ5z%R&'vxiYMPik}ݚYˊ8]TqפFy=ұuFe `~Cb HM4j6"{a>z@.'c-XEFEgZz9kpWTtҘ~\aO|%^S+(J_MWh(#A+}4@`QV>ZV"@mWֶ6l4,(i҉mjml%ө8JiSѶR:GAp^+EdiKABE^ev8~l9VVc9J.]S}LkgYJyIoZmӔ%ڥmH[cUovkZJTUzuU;ڢEҮƶiUkT0v8!v !cw+uPW@4:%GQ w}\< \-Skoǝh΃+Rǯddkֳd3t2>osJN=Q<:T1>ôC]758:{#ɘ4f]O 鉴yQF ; (:lJX(GD@>ӯPMO*[4*l4Sx'T%WϰxƊ썊 Vz:}Z\썊6EE%r;Y4oX3r4}5Wӕ#%hdFJ,X"=~(/0I|;rpms(#:J7 ْwy y0wmzg(VZ36PMQlU:r 3dBS95MhBc ͽB{;;H6_WrY[{9>Sz:H'FTIQd7(ifUJq<.{)=qրKZy65hj ,M8:Zf3 G):ġgfרnu"e 06z:'f ?P.ݧe)Un<W&;ӌ^Vٽ r~tE]Q@`CPg/;"/J/>PGd،FW`-XEFEgZz㢢ꬊNӏ7oDk~EW۾X e4@#`F,@J絺؆ i5]p:CL{iK ju84 ԁbJ ԍ ViJ#7^:heڊb& +}k6]ϴS$@Wc鲮A՚%S5KE4?}("TJ  <6O ukFxQ)$#9+`k| g;(kBJ%;zt~ =|"m=迩e]'|I?U|:=f.J>1O_XX鋺H20 ^@S1wVzq ~ bVtҨe،ިh`X+VQ٦_p;)4WX3r4}5Wӕ#%hdFJ,XJ%;A},@%TZJ9R]N0tkClJ}L3Զ{:+4c/$#+}Wc0[Sϝ hT]}mGV~z4ODsvV^~R}:H,ln~vehdZһ6eߟG+}gve+>4!CBuĨn~ħ󌆺Uc]iCʊ hHv?FM|tE]Q@`CPg/;+8RE/GwSE'Z辨ިh`X+VQ٦_p;)4WX3r4}5Wӕ#%hdFJ,XֵS7 IQjc3}K(0 `Z鎦隻]Jbꀆ!>jBnSӕ}wZ*KED iOLw̝V*ӬjVzF-^c5GC [_6j],NI[Įuh<uқGkx>|o 4OzCoOU ͱ 0MߴUL< wnk#EN|*)>Zۢb_uzlC&EiXX鋺H20 ^@S1wBE^rE_^\Q gިh`ިlSKO\TT"]UIc>=-{MޯJxW+}5]9!\Fyk0=_ӟt B5Pk9ϟ?_Yn6t/k Qbر*A6lTp^Ql 2oA.c2֡ySYL k9Q5-Ն*NlP^N#GJleSH]lo%Y_:lLӷvN+3û]j}>hRϦNvZUXkcIrJo$Y8ZgR2=(׆q]vuq"g<Eҟvk%́V^<&FHveGG|-MF*d^^?Q۞agDq]c&)[܇yF- 냨 Nn!^Vqߥy yʆ}zh܉>A#4<bJiW%WX gިh`ިlSKO\TT"X#+VhdM2VtQ ѐkF, z_ϫ^W'z݋*y_~'4D58 O>}wpl%д-}NXل!z=cޖ(^KK}dh ʨ4J-mX!,ڜ,ڞWXդGhAl$"ۏՎݒeV? hP 534{߳`|O[$RJYZUF ?zsT z>YݢG^{HJn$jGhs oetQ`WZkevo\i|:~*̀MHvv'@1տ1GYI;*vC]a#ҏ-j1q`HnULzƌsT wi#=3CVY8\OV\7m!qt<`z " y0 ?)Xҋ#U@cPF-f\G(WEFE+}\NZ\썊6rքN1JK佦xWtQ .QF@#KEp{'ӏM-WpesĵZVrߐqm{{-~ef`lakMZ^VԿ/ODmJ?[wJm-J)B_b| 4Κ 9Rvֳ`g8(R+Gemo ~(5[4dv?<κk=ό렝=2 sVJtoR( *z`A`NJ/Tky8^QN }Q3 V̨6~>ZS@nzi$V̷\"5{+m_M@t分p2Y*"ۓ?A~U4lj轆+۞#JKV䪈޹V}-g/\|-%)K 'F˾aұҧID@/;"/ޯxE?z3lF+g ųg^٦/Gk 0V>YFf4]iojb+G4"SpD-ܞརXѰʶl{y}e}4Fm9$lWޣ|zh鐘ćJٺhx=%tևԖ4MZyA`b:hXNO}XXPU@`U*z`*[m `Kky8^Q gwE+@> 3jřWtњr;>bf4+z]ѰJ/>PȌZqmj}wfEHoDk~EW۾X e4TD` '#7xc3!1GTY*3:`k/}KM.[;"Y%U[ć~}1J٧I3~G*qKO1\Q.tDžJJ?Ƶ=1!&\)b*IW%W<G|ht3V􌻢a^|N+:hM͊X3r4}5Wӕ#%hdnOjyΰ9Zl+zʶg.Jh/]"~a; ʉlU9Ut*sh:Unwx}E5Fݽ*IJ5јO ,Dש@URWJpY=82||N?f46ҁ=>eџrӵS"V:V1 @`7-=-{MޯJxW+}5]9!\Fl cʶl{^Vq^'eZVf;!FmSɬ]5*6Ya. ~Ik!9,\E+ԇ2lCQE)Gq^cTGN}aPR+YJJ?Ƶ=1!&\)b*IW%W<G|ht3V􌻢a^|N+:hM͊X3r4}5Wӕ#%hdnOjyΰ9Zl+zʶgZZW? yY}ZYAOV3EU)Sjh;DʨW҆+5D[KT.H QJ=ʨVʫ7k&[Mֿnh~vVWĴj;Ҹrc_닻S+oz) udlr.*)omk :GY/{$U2jZN[d74EP l,P: "lrC=^ДQjۇ~[Uh]Y ˇkzѹ>Z=?] iV@Ac'JqJ=͑?xGlX+=\ )7<8ᯢֺ :e#G]ʬ1ԕ״{YNR١1 ghK[˧h!!; :H1gXXǸ'& k7RLES8銼zϰxƊqW4lҋ2VyEgZzx) ]Y4+}z[._ѕF& VjrDCD,I-6 P˕mE5\ Ԧn3=CdS#04 N;h#djN &ܵ_f .Yaw:|݇ ;{i:d'\?jkӲ9փ`=ҳk5i4c*mtc\n[xε)")XtE^rE_zg،FW=-{MޯJxW+}5]9!\Fl cʶl{jJϤ3i23\SfYRwv0>-[L\9VʨcWrG^-)撚3][5"rE4ŭS3aJOd֟%hiF+Ɔٟ*F!ص2d(M|hmZiX?#\*;$C7]T_~pX_ oW8hxĦ#t'hwU#C5=tzFu|@F5S.>3J>PJKYuKɧۭmL鲴釈2DԌocj&JJ?Ƶ=1!&\)b*IW%W<G|ht3V􌻢a^|N+:hM͊X3r4}5Wӕ#%hdnOjyΰ9Zl+zʶgfVNEIGXM.e7UŦJ*]Փ)0vB>NEVwJlN+=+"fF^9ovf&Q͎k}p[j]dC+pQ[l} b4?#;N|$9X]h!VoңCx~UXΨݪ>cXȎ-d&9 ҕ,eq#Ϯ8xɭT4sV:V1 @`7-p*N+rH6to+A*^;fӽNҽz}SWjG=KZd}_?a=Jz(uc@+]Q]Jo@WG wY(=}QtTƮR"AjhH'12C) u[ۘ5pܭ>FP"~1Vf6V:V1 @`7-}1Y͸*nFt5ꈌ+rĉɢH+Q#H*ﯻ^?yO^xᅓ~+{.+,OསJCnS>^BY_li{ǯVd \=nOFOPG׳ Zl+zʶC#mfKa+cF˭8Lܦ8PT*1VF3r?>IQ+QC;*}Uԗclͦh ]r20қa+jD iFh ڷ Ԑ޹Vژ.ܮٲ&dJYͣ]>:Qd:{?  dVr[+CyÞs!VºMm1|D't 6NGN} 'mrQҲ:4q7*;˵ZJv5i[t aJWc3KJJB"PUqjc` ktِ#x˙wN]WNWܙkϼG JSgNvm>+:Yq*'^=΄xNETU$~]84FmFu`qV?eUe.PQ0W{'(~@cѽ? YDa4c5qqw>x縓ƑFOXoDkW8Օ"Wg'ӧO(~0 X)88nOFOPG׳ Zl+zʶCiK5Au~X6S/q+2B GJQLή5 2K2*fW%*9ֱutO5ٖK*E;T!](AHR/Z o+j,OԶrQVu8t1L.mZ*d7;NULvC"/)^J W5jDźIOWwML<5fW2&te!ji)na8SaݟL, Hܬ@WG%z0Ol6mMW?w'.m4tsq4He{y{uM:bU8ũqDf:>c6Pªb`P罬nى,~ jkeř!`&0nMWw1^%UVEƬT*[֊_&DHY1'}Bш,VM޴P~ԏb6#Wӏm}iz+][:Yz'V4V|gugvX425;z+k&:Lp\Gӊ l-+hre[{͢ޣ6tr1-eOu>4M\%LNC@T]#VcE۱:6D:ہ*'韊кd{jJ8Ejax[;ꔿ{DնSMȚ)fD8jih3*k:"eJN+NTwm4b$zjgWK-p*~tD:hw3"NV].SJO%7o^>AkwI1>?Iv?:t}\]:gi'j]#<~ԧY紃̟ )NW15d$Gt/@`$Xl!ٖD+}2xMbwXXǠ:.g0ǍcJ/N+}S % P0V=R#%l+ZܝozwNI`+}E[Vz!WѰ+(%`Gbbh,)Pһl7}!K)z4ձ$8JvYӟmJ_xJ/XӟR(qnG` ,aҧLR .E` oXFKĩh`EGo݁Ghdi%JIϖWbhR7=T墽~^9L2+]3=S~O6#LiGd:68iUU7OJ jt+٧!Pp+ÿ5 'iJZ V̷\b-NE}4S{MEHU$0Q>eR֢l-+hreZG,Ghdi% Ru_IvFy~ts b:[gi6A|K jW" F(y88BO.-H1oUұgP@V8CR^F?w^Q=c[Rd$emjicjP9.EJ/2zt9_yy棟ǝ`ͤ/lJ+]2>R$K/M|gF+>Rgт颬B-ӟ**"V!guer01xJK佦xOQ{Mq\uZ12G , ZlҋYb,J++}1  V8p?f*Vz[Ѻ疭t)1,ekۋڎe)E2gQÏn+]HMmןzRVni4aN3҇4k-su һޡ55Jj"nGHn-1#Wo@a=ߺyH#hGQk}44>X.^+ݔR YGqvnבOxQ7Z0]>U4oKqn]BJg LJ+}%֝߶}kYmD.kQo S=qkVo]i'Vozɻ҆EH=YvqlV:Eܬjm'6b0{OT/҇@Vl9DxG3aε߽5jFPF MiXʚ)ӟm&}G~apG0pw#ǩGE:ꜸAqCi+0G^n~CXR+=wfGtxg Eu`(+}%V4o=|iLz&<¡DwbcFaO|%TG_iT^SQ?R) L`Oٿ([xJ/>*6\bJY$= V:V,c @+10)!:ei=R@Ho;%c篹>fug[ ReH϶pj~y5\m2z[UH{9C8Ke+d)#YRh6%]|iZV:UN#?3ҝvr73ӟm&}GJglkqҋ#џQ?#ף<*6\bJ_[I @`_XX\Q( t҇M/c^5ky!avxZE=qV\Yn\HA{BFmKCXz{X)3Y_У5k%Trܒ&K3J=> u~^7J?r3+g8Yf{?Vz<`[;Ǜa҇˵̧oSV4?JC_k%IqY-Bybr&!{J{ޯf/$.Z[Vza_Ѱ+(%`<3R}i!D'm<^#9?Ep5G?d?o.m]SYb8dE8xK_:V<]A?_G3cZ&f+ٳg'5s1UZW i%>BJg LJ+},cR=jrz1i&X:zn}_(^o>b`ghre^|J׻%'RVg?agOikK8V?=ܙw Bkn3Y`K*,wDoي!@q}UoVW\1Hʬ %l>ҕ@!zeƁ^GyDF[@a#7jˈz2 V:V,c @+10)!V</nLhz2G#qϢ*rkjY+^ `ti|WV?FkVe+U5̗ lA= ~kZpN@n%ٳVzj5C:hͤ/l+]>b|b$+MetqV3䐽|>WoxO=Ԉ10zF_0rw͂zU񢬗!1G4@E'MtNz&N]8҇\>iil}^vUWM_.%n5}+k&:Lp\Gӊ l-+hre[{͢ޣ6t.#?+]dw ǩ-Gx%)9j{罭GD"YJ&z/+=YZ gF6ށVBٷ=}5X6pCGN?b ~HqiKckY%h+e\o,V:VUd 0@E,FlK">P璷aӖWLtf^V /?WށuJ6'z׍X5Y-qQ2 vNYBvъi/4%'%.BUcg@ۗ+ޔ{lmh#զ%C@ќcXGy@U@{HeZ#ײJ8*Zr.< V^T++}1  Z錁I `wrzOtXYŰSO/XW7k[䖍l3; Jk$(CSOG|d+ky5_)Ý_:1:c}HvUc`(P|'Jh~~9HOӏ7oDkWMuJ_ȡ#l-+}J/? VT\Jܩ_P+ko1]@ugdto5m{Sz^JζB=z=?{Gj3Н?|(}/zig w~T2%vAY=3RTWUߴ-ƹ89:ztխACTY.=`X`۽DJեDK)ǽ8ssDKuv(?UdCwW{.0dԶ^Ajwmx,emNmqi.+]Gfh#Gϊh=u)f/Z; ,iyK}]G,ک? 3F+dbz}wQfb J*Q)-8hbgOlT7Q:CVQaj=uztn%UJٻnE}- toJJ?a! \ J/z "_J~;#+Ҭt-՟CuJ?^3d2燸eX;l;Qҽ _-Έ(ҧX;t,@EXHX-+x/OV^S6A`+}#V +84R\J'Q?rO2M㿭;Sҭ_)-Rg2إV2S.tm;%Pm!ӇǶh;1]\g헁,7\ţhy;,ew9<{_DܺhN 'FUPaZS#?y&u.H.4P~gOG̰'a2AI$mvi`eml1mG[ەWNh1~<*]+T+Sati݆.SYmѶeͪbCt*Eۘ)v8D*DmyLUnrO^k^'Z=[" У"Q2NSدnmMz !-E++}1  Z錁I `7h^9VzqJ?^ټӟm&}G~a v£msvee0?m/"+}eI+}'"${MA5FE5ip?jzU~:zVLL` oXUEæ+ۊk]|lJ'TRѺ iϻ+oZO.7]7@\J.2q~KawY^=rWָ}}JNn#Q WvR^?B 3[~>>&ۼ47ti;vťpb@i">Ѫ6{'}ZYY%#A*.EZ Zң~ |k*v(iAJ7:[O hX]XX^VH=B-VhKc9DVzJ/X+woXe!Ѱךw`ZьZ-ӟ**a+j{M^J 5X9b-e`Y*6\bҭɛ!fJ_n Z+gS7Zt& -aVz暧um+׵텽_>Jw4 ʮfzxaFh]jNGߩu6 p|HJҮVvoW6ZVOoKeNt:6-=]J)~Zj VIH8i&ҽX{qN+'oZM+JzAt^Nx9wY+}ɪ++}1  Z錁I `W8'u>Sz;1țniQ7eXS/k͔GJ_xJ/XӟR(q/{zv߇)$Ʊ"dl.BDmHRSϢ_U7&1Vj0ƒ Ey2"Ao1 'DY3 DІ|ϟ>^{~~9{?>g@Wo]*(ٝvQS{ \@Ic-C*thڌvMGWwxJ{AH7f,2Žei g9*Ź#HRl1iv<۟ү?^"ԱYYYJ*}u4hI*_=MkDMϵɯd4<;5=MftXKlz*=] v[^דX~l_R?R3~wq#e-i:7JriRj7ҳRDS<&XIO{0%tF=KJ?{tzAt;?Vٝ+mKR#_ J"~H*?TyŁ5hd4u]O)+b5Gs8oE77[;WtEm`K#N4́J@j5.@5յ+n%1zY[y?'՞5rqw~{8[YctpW̯}g3??ܳƨ?bn=zErJP,%X7ckϪ#Ns=,L ,C^k!Zyj]*=^,^Z뵗C|e%;˃#^O/m|)i>JoTlϭƫGo7bł}KS7;6uŏ;+s*=Mӹo|+bfE]wn^|X쾺W (W2zW44t?rJ4͍+J7?rk~@5յ+nRTzqI[F_{ף.Z˷ճ4~c /||cٚxkXAm/iwGXańsTz5_237]7qgs] S}p+Ks3Q11S%OE</Lձe G!0yI4S^pbNsK`=\x-ԝm6y6-@s\6.b`$a&ӖgN m-/(<Tԗ3|xR*=KP`t1G9fOeylƾxy4М Ӣ2w{E2E? t<|g#dzT)uųM|eKgkc\s}ڑ){iL]3%eiq?g$ hRޏ6=;,͢1L@*]*ΏUv'@JZPB`Ioo]fw?>C9>R@GFڹXM^wr:vJ{|;5G' 5QjtP*諮@HƗ~cYc_ocŢ_׳OiK{Qi*=h ^>񒈍>D(<m܏oF3?Hymg0zKr~imv*sݙuمҪج4$gii˧2%{y6*gggSq(3hyQTL'cRfɗIRr+k/W{Zxl}2gc=xWYN;~W_<#NNf)$HY)?ix> ,UsRG_ueHWb+?ZRga7]tg-$3@To4GL,^F] d*}]ө HKX)\+j]H bWvb_Iw'VTvcM嚶3F{j+j{BۗCҜ?}JGヲxὦ *@W͕Jw}u!^}үd+~IuS_Mw:s#@`iMуR飏1/.~* @`@slv! )a\ىFe&ޝZR6Rۙ6[w@WԌf b.H7?rk~Ok; \TzW]goRG>ϼ7^o|K^_;vvRWxkXXT+o[SqWb> {7ݥu*}E17o? +Gc=1V-Ymb|8?k)t,tNe0, )h,PRI)P*z면$05itxؿ R͏\ꃨ_5W:(yUY[FT_y=Ayߺ1SW+1>O:sjmi' `TXF%@HKL<-\O>ݳFlc mB*};1ѦўZ"+V}47z;_}tjJ 5' 5QjtP*諮@[SLswq'~[Y;}>˨o^ \1˟U{D{ve1ο|s^y)1 ot|Hŏ2sj6+כJ'HNI ie 叹o>ߠ>X&tΦ4vIWVJoqJMRG @NtI6bۧ{6?ݙml!qVHog8:t01SKdŪR/{g~7AR;āས`ὦ *@W͕Jw}uqk*=>,ן0tģx$~䖕y'1z<1rfYMAο|'U!<"$fi{<V!IlTz$ENJ61f hM1Vx:g/TH8Ja;F@*]*g-e @izMد~ 4OwfocR6/mgY꣹߿@wPTq.x>X?ix> ,UsRG_ueHg67=ϐnp3;K_y'Ĺzts+¾)KoK H-@ոX!qS rvR_٘_(sxu8mr9K7[݄)uJJoYKxZ﹞n-+ )߱}gӝR?jTvcM c=DVhn*rwF/p(A kVOk; \TzW]go+R%\mf|g>TzfcHZφwJe˪%6]$w.E2]҃%AN'Uhz䔋 {9i{D@Rae75RR6Rۙ6["+ҎJ\ѯ> t:|5J`ꃨ_5W:(yUY[ƊTz#X;Goă]Jπoĩc('LCاq#ғ7S2wp~J"ǎJ?;NJ3?Mͮ<[D@.T_McGKI&L# pTTF>i{D@Rae75RR6Rۙ6["+ҎJ\ѯ> t:|5J`ꃨ_5W:(yUY[ƊTz.)]U6 yRx͛n3>gJO?sWC^|o +^?>W϶v~*q/~E)#TgK!1f*"jЇ?tS+t;#v'@HK7Хp\{.qdIAd}JNzOR{M]O]X}E %Lc;]Jo~T4TDvAΣ2VsYOc"3\=3/ JNegy&Y~n5b9fnTtjM'XT1aʜaNON ?ꙻM*V*}7aJ!@;ҥ[|R&{d H wl@tgT6Z!hvhO->J\ѯ> t:|5J`ꃨ_5W:(yUY[ƺT!GH7g.vZ:x}cx%[K/lvցK8Ja;F@*]*g-e @izMد~ 4OwfocR6/mgY꣹߿@wPTq.x>X?ix> ,UsRG_ueܚJmg;{k! I_]*:p[݄)uJJoYKxZ﹞n-+ )߱}gӝR?jTvcTvȊR/{g~7AR;āས`ὦ *@W͕Jw}uqk*VTg9[PKWWJoqJ3hw؍TTzZ$@tl_I=h6J8Q+ҷ3m:_%bGsS3GNF @]^S}^S}YJ;: ːJ>RWHW}=}Vςo@(P*}7aJ!@;ҥ[|R&{d H wl@tgT6Z!h#i%q;n*r]`6: Tz#车ὦ *@W͕Jw}u!^}үd+~IuS_Mw(~g t;?Vٝ+keC I] N 4+{}7*Jp tJδYݒWV׸fw0`wA*k^v|zv=}{{{~};9 g}u~J¿gϞ=[hIowk#`3~#wI?o|rǷο|{~bǞѵ?͊OJw?W;s݄)uJJc  RV6n0@wJN~B @Gƶ3F{j+KLIDATj{BۗCҜ?}JG&B?ů}qǷ/W_ٻE~_5յv&dl%s^z~E&O吺fim 6*j݇~5zG;#v'@HK@eG%\w5΃ H >w5ѿwJtURObTzIѰWifko b.H7?rk"շtW`ӑ_k[{K1$<{Y^8;hӓ .\v1Tn”:Bw HK$F o--]kTFJ*};1F*};fuK\Q[Mwiǁ߿@;Q*}8PH?$KZR^㗚*^EqҤwwzAs`ߡdɺ0ڝv# .  }2z H Z].G*}S#%h#i%b:ʎ]Q3L+t:AG{TҫR;8hHؿ R;x;= lw?XH&L# pTTzObj$@T9[@Rhv-R) @GL-qEm5ݥf~>F @]^S+Ϟ{ss~(*n/^b?Z]NEսU,S*}Jů}Η_y9ʉ)QT?M*}}';D]J9ZOK*  @`7RR?{.󠧀`O5oR{75RR6Rۙ6[?+85?ʤN;]Jo~JGOS#W)D#>{g#Y_)@x9EǗX)'858VyĈDQwsfewwzAԅ+?~8ZJMRG @NtHts`o-7oZ[75RR6Rۙ6[jK;tEW}7AR;āJ*=2A7g?2qϸ_맏L{<w2gx<,ijٞhFnU̱4 OE{r߳\=ۓ[fQـlixkRS[cj7J:LF?b|*]Ny6S,=-0J}F k*BS״1K˧~~󤴳f{e"n]f-a8{-2/"׾ӓ .H'K%~g tH =yS@RhFw=R) @GL-[Qv芚eR]i b.H7?rksuHl7q'gˍ>2K[F xf˝F)?Jc̚#y' 2%5f$4,Wv?]=ҨMpK6٪RuVL2$VwphJϗF2̝wbDWP\}<_5ұU3>h2FN$ϥٸmV^VYiH<ϖô#YxY:rژRo'y(GRo9 y*/Hd Wp ;c!0 @RR?R@oI[o۵Hojҷ3mҷ3mVtv芚ѯ> ow0u{MT4>^R%,Ќ@>r)\KOEY.\%_[F6 )iu֤4u#{e0ˌ;,R/5C*=gc3Kr%^%zs>A&mg-cyIN,G~6/ /2ljXJˍsqҤx$s8?v{KqRuK R;x;= Tz90zd]RwFNJJILs=${joFkt#Jp tJδYݒYMeǁQ&Օv: Tz#i*=EV0>R+҅|?Mg n}-sdz\#C*>M`D?)ٛkWz)a7 &}R-ҧˮ3ڞZ!M/G+J^-d5v{9}wS@*]*}ݧ){ @^WH ޢmQ75RR6Rۙ6[jK;tEW:ow0u{MTz\#Ƨg{dЧqY|y*=Ki<+u4Z[ ѧ=*4J;T^ӓGɫ@O}ZZ%;#v'@HK$F|_̃=V@5KJHIog8:Hogڬn+j.85_}tjJ ԅ5MSwI3:{z*={FKJ5v̵K-SUKP֧ GU>zI]-TYcN8+S*}i>09 ^w?b?J/ϱcHL_{;Js\l*=6o3w⑲}5('0z˫|dڪD/ѩܦ|JO8+ݟ,NIpzY-Q=V@CfR*JMRG @NtH =yS@RhFw=R) @GL-qEm5ݥf~7AR;āV*QrNcgTk֩Xg:ґҎe~W䃳\7=)%#\NƸ!YBDK^Yl!akl6lfL?-,ggږ{erH#g{:-A*}}';D]"cߡ ;#v'@HK$F|_̃=V@5KJHIog8:Hogڬn+j.85_}tjJ ԅ5MG4rGݮ'S/k0__}t!¬>Fnz_jjTz)wSi™nڽWړ\p[V[ҒGQ*}}';D]"cߡ ݄)uJJILs=${joFkt#Jp tJδYWV]q+jF/p(A kJ`(lmY:#l\gpV*}8 3nz]iO~/%60~e/`u@O~,0ڝv# .  }2z H Z].G*}S#%h#i%@WԌ~_;Q*}8P<<~Sgz_jS^wwzAԅ+?~8ZJMRG @NtH =yS@RhFw=R) @GL-qEm5ݥf~7AR;āF*]`[R/5U*eOId Wp ;c!~g tH =yS@RhFw=R) @GL-qEm5ݥf~7AR;āF*}U^㗚*Wb.Hd Wp ;c!0 @RR?{.//Gto>9Z=6O'![s_E7ߊxM3[pzў?mKJ2(Jo?8WO2K#wc켤q!@~eXЇ?LWoϱ__Ԙ6}^H~?|?On6\QJ_Rc.H٤7J2o77 @?S=rQG] ؍sf(ꤠT{Guw?m}k ׇ/T#Һ]?nՇӁvJ>X?7U~q=|_;Q*}8P 4XJk:|?Zk*N]E)N@o\'$^T @75C6/[':xY9յI_z/c=]=?[o8I@T)zjp7AR;āfT׼WG9^W|enegE9=ـL'SB*:  @M Hoj84 =m^O@* fҷvylE{&~U,~9^H2ҫTRSϷ:ow0u{@* \:|~oWW^~2tM]1}UoA wh_,;+Twf>VRIHlJ@*}Sá1Mn}I곟ro\b+/=y֫Rͬ{J ۭch7FLJ_/Mx<]WKE]QJ*Jr|J~Jg!!"?-!KG+-n:v6o}:tъ5V /p(A k,M%PQ`z^3vR)ĹTM'zoUԝNO|>@RIHlJ@*}Sá1Mn}I_ 5̢" u[/$H7]+a#+Qż Z.([W,*r tEM*ҫX*sővkeVI0eq)ǀ^:r~c_isO*=ޭntǭuAk\O`E{@T9S{MOmu؎&>$P\_Uhzm|B/ʖG.-wbXKu#cd!cNOۙԳ,$8[iյΛn_}^%NÓ} d[}|ҫ*ؔTCc pseJpy\ y'$q5%sq $nY<;ru f4g5E[K!Aޏ7-<1c%6x%pYw!.@ƫ /(n @&~U"~SL+zʎtF'o֊Xx0t*f#Pϡ/Pv2g;oͺTzsRog-2b/=J(6O);ےd&~U'~Y;N_8WR-ʼ?*Jπ~%} z)omiX@Oe(%]q{S׽N7M (JeN5G p@w2#nd,^_ڔpfʧ).Q~' |/Ji*4'ʚ qUytW:?mNI;[%oA' ^T @75C6/['Tz^n+5Ct*9YJcK1ty}.r9rLO/r%y0D1~y2g`FiZ`:#b|$?Nw,,ҳ;q0*X]芚TW^x3W,rT/"~Uȿ s}~i:c:[וy*}~k, 9Hk1zAVy4D>KSI;nYqĩJ,~lnnv)_ Tz6iVt;ϛ[ 8=ig-d[}ҫ*ؔTCc pse/]Jof߻z*}10 O75^R%YLOJ/Y;%헫g/ 9Tzwgk^nƺDॗ@WԤ/L󸔞IW,rٶE^txk,WEy%Ɲ+3i:C*q2;(_/jqnĖ{qԴk⤣b*^.7kSK|$ngs^ ) zJ*KEK|438+-9J?2V?cPKI-IlS'"^T @75C6/['Tz^&U2s|zU#*KԺ!~:wTzY9gH\9;Jr%׸sv Q9b.tE6q˯CLkK%?ʳUߔJh`F0Ow wF&~Ud*=&I639A/ ]Tz[ו( ?X?93W fGKebslx*\~]$@@Q 06;YywI!ͣAOzZ^zr:1R飌>fnr^sI}GX}^s};'llTzuR @Jph n{ۼl}vR[ ~:wTtHu Υ/G#>\'YTk;N+ua,*n5_L 2x,?m8r(ۗ;ӪٟfrJ&~Ud*=zd,C͊eȢ˝0+SZ*1|]GHol?/|ȠyY[Oy;>Of:m(o|^ރV׸uoj8FiT(#vz8[jLMr*QV:?mNI;[%oA' ^T @75C6/['0V*=䪜vv*YJus% gv6byۭen溳.ΚwO< f;ͩhRe+jR^OŒkH4n^ELY~b?dq6?1R-ʬ޸{[=h{^cH2Rh}^U` 5 ?l;kno' mQJN@ @`SR!@m~u+Z^JofQ\*♝-?o8,}_gQ=z/`Obَei']@WԤ/L/ [L*1|]Io4 GAk\O]:^N754F*}G;c9i >u~ھӓvJނOGA*:  @M Hoj84 =m^O`Tz+Rͬ{?*mI_zwN?[R-;2o;:zyz!SJRU~q=嫹SN;A}{f#}Lkg#}kJ{].6/Wtlf V״J]#d}ɶXIW'U  )M  @6 ܓJ^oϽt_ݱH/~n |?Z]=z(~I[*</xT]x߻O ٯk_Z|}dIW׸WzzWRj?UJ\ǽR~L_v QlBN[D!L JƉnՓ57MC0Ɲ76ǯ OW5 @J?5;p~'9H7VzMǾoƕ\=+^\p]`TTXx@;~;7#o%O{`ϩب.Í`]Twk^}2KG$:q'ovd#켟 Uo|ĝx0c~i4]v-si uvY=vZgьzOW1g>že F>5Z*ųY]45,̦f>7d%[+K&r_}p(C V'r~a @ @Tzs5 @(@.yAlIwV̓/ձ N$wWL=WVمv$3[tx5ݑwJ?j$L F:Α`wdggD2SUs?~tFK:ճΦgV%BshygusΘxY<2{<;U3OS8]<)9LK/H;ڨw~%pKP7J_neK @%J!@F\Yr;E2l4Tv%WԆ}k8 H `8 Tz#ȣG&IHxGN=s`4*D}+GӵgqZԭҪ\=iiG2糺ң̬%Tz&K~}TR >&i*=IJow~vtwRIH\@*@ [eo%6b5kkj*k{RZ. H `v8 Tz#ȣG&#g<2uD3W#q'Ϝz|G导?gEEb{jx6,UYu§x0/:Rz ׏- J~/}KCpLwh_RIҫ*8T' 0chKmjTҷ7&I \p:AG{͑G_ߏ,p%)iHrw#6]G2}pG;,A^be_6GfEEƺ;wLRxig>RZwN:Px63_ϊ";^j?U*,q?nii@lpV5=~ E\X*j̇-3jW[[x{zעZō|k6:~sY4&/ݙYK=~O[u^lhVJjnЪ-^s}_?mQ^21bEɯ^;Fs:Uw67!q*+k<*BqOT3(-O\WzQ  _@*  PMej Z i@@*DX!Ȋڅ+;Nw0 5z9L %[#YȿF2n:e3ҝ̋eȀF{q<QGHu;&CTzW  @+Rp~rZ&j ڤT&e|idG`4IFL{`wA*k^swU`ǩO,;u6[Nߏ%HW%*" nz @``.t\{Fk\h#VF' 1E 0HHಀf b.H7?rkweiOO?gww5iKM@*h#Je] ;#!j@WJ L L$w0`wA*k^swU୷ފ#p7ͽ"կ~!q&#BGX @J?2p~?c9BOGVm4d m`Jl4?/ )txؿ R͏\# @ @8Ta^ ؃{q %3V[j*qKR[a">Pi(s;Nw0 5z9; @ @ Hvu= QrUJܒTFcH3TJ b.H7?rk%3V[j*qKR[a">Pi(s;Nw0 5z9; @ @ Hvu= QrUJܒTFcH3TJ b.H7?rk%3V[j*qKR[a">Pi(s;Nw0 5z9; @ @ Hvu= QrUJܒTFcH3TJ b.H7?rk%3V[j*qKR[a">Pi(s;Nw0 5z9; @ @ Hvu= QrUJܒTFcH3TJ b.H7?rkߞ++og~1O⭷Ї?4{_a~?*FYwajʟW~};u'>{~bՍ?W;Ď}{_{Nu@ lag?/̍]p:BueJ~7AM  @ @ G@*Z De&} җgo~M~ma\Y[,SE5ъc/ڋC1m>x`WTot6;O?ʭ V]Fd;ow0uA*}T @ @j HגT 2kW)"f7Jv'R\n #I*NjMӦHid?'p(A R  @ @ PK@*r ^Jٝ#gw[Tzċ[LeJwGuM× d/~i&;AR;ā >`i* @ @kI*p赫|Hv7_yo Dig*.=UK匒ݑJo1kl1Q;?^| ~ոUGxԛَCjO/x'8'p(A R  @ @ PK@*r ^ʇdw{s짪n"'Ai"*T_y']J}cydwNX,<1+bCUG&LJK/^yzy~te_~`i* @ @kI*p赫'Senjrif1.;Tn-aYefs trwVEtҗ2{RTlgy>m>6V{}6? Ļ?m_O13)r./ӏ=K~~ϖ?{+1NfFvGd9ow0uA*}T @ @j HגT 2kWyOvgJ(dF"gJ/mo|d8wm".Oehl Ye쎧Ȓ+ʴ_,炑y%:=gQ;7ҧ9Pf2RLG^{sr|*6le|Kd73O̊,*&۴`hh.bJ}J?y&9OjMK߾]b8kɖar<;Z x9 xь86JIϦ,Lf}%Òh,룟}-\9f9fg[X:r%{/\+ \9XMVǥD28;pplvTzt)$̐_{CƟ1t&o}m1O/5UHξӃC0ˁzTz986;}G8=&g;~f<mtjJ KS  @ @% ^KR9x@]=ٝ+ Xn62)r+i%)H_R sEy%S%>OE0nt)\3[.Xdt:2 6Z:[ K٬A*QB*tZ^JHwκ+ylPw~K'o[/6/OWkLnJMή6=ݘnu:[$rfȺi=S鹾Z>TTVgÜ~:RٯA*}ݜg/v_C:.v @ @ Xw 6v'uY16&G"7Rܕ2*fqdʧUq+"}YB6t ߳SVjgv导rMʝ$Q k YB3uvh2/Ǵ5a*/KYʸyyp5( )GiWWGf^l6)߀*K,st1 JQ`5Q(ʩuYj6dSˑ3'Ƭ񗾴Qc]~ԺV[J/MӦKd=w UN?f1o<=P_*$J}A mɑ|O;Q*}8P,M%@ @ @Tz-I @.?vdw"Sq'/NJ87r븓%-i;[B e2#ӓU SfcJKUg8=+Y֙m3Jv禵3Sx*%SYyKBg}^olfٽ򅁒)q,! i ^(Uai9 g):{;n*'CYO}:+;LylV&^S_x GʎWD1YfKrdz^/eBĭ1[R~A#q~_}'ʷLwiE2g}QŴgKwls⦷ڳoWj_8S~R`{>q%?D-/gr-ciJʧ`i* @ @kI*p赫ݙ%fyvYc{֫wQ;St{ NoGx#<+RORGͥkM\/{3ei2;.ijxqTt\YD:NY8pr%Cvw;6_ /lċ7~?M0u^Gd9ow0uA*}T @ @j HגT 2kW9. 7^dw:c#ĸ9Yvg{>+s]]*QjsZSl/fxqTG%?m_']xTz[2K|m:J4F @]Jh4 @ @ZR$C UF.9&whjR^O'>t(z&vBYq_ÿ9?=+!7niD*ϿQn5J_zi8AF# @ @8Ta^ ؃{E}8;}._<܁TGʿ(7 @`"o?@ת_{5쬀acT 4J_MgG @ @Jw촜s$ @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @~ J_fRkG @ @R @exs @(t~7TrV$@ @ @`7RJ!@.q @p:|)@*}} H @ @ Hi:\7 @ @N8wY*~C%,J_neK @ @v# (2G]  @ pxÇkרgTZ9 @ @ 0Tp @ @ 8>e \@*}-  @ @؍TnRG8Gu}&@ @/[BoJwگڻ_wcW @ @ & >؀i.R @Jf*=|K_:Tu{\_?\_h$@ @ @RC pt'@ @bqHG?o|H^@*}= /s=׾kKҿd~6$@ @ @`lO 8T' @E^#)X+=}9;??O}~.Wao¿/?'w5ڎ@d~-SJ;nV x!PQ7FL @ @R魅OR qM @@=?X䓢,oĜGN //]歹U~:`4iO}C  @ @ H!Xe94 @ HoudFmWaQgvؤT&EH7aU( @ @`L1M   @ @Tzu҃tX*J J면- Hoyt @ Y@*3 PSeS @~ n"hq:,^wFRT[g  @ @ ,2N @Vҷ:2TA lR@*}âQMқ* @ 0T@h  @ P]@*: lq:,~I HTږҷ<:F @, \u)2|) @?J7 8J;FJ#ppOCu_*Pí @ @Rfhq~`M'@ @`R[QtX*}٠6) aѨ&RMXJ @S@*}qj@ex @. ^8J?}uz*mR[m#@ @tJ :hqfE @HuZK#8T'/~Y @ @ut3 ?0 @ Ųjq:,>lnJhT& %@ @) >i5~ 2Ru=e- @ @: HwWj _}"@ @M-N뎑\@*PݗJ?p, @ @຀TBZ\C  @تTVGfv8nJw? ;{TUM @ؚTFD{ p@7ToS @,J_d-N7 _*m'^ R1H0HH @% KZ=h 2|f* @ H}aq`E؀@IwWj @ @ҷ6"CZ\z @ @`T2'[-hq:,ذ&h(Ri;J@@*}AD @ @@/^!@@4S @]@*3v[K7+j(O*3( @|U @ @&  2 ۔ @җ9j@a Ć5@CǗJIWTR & @ @z HV ߠ$@ @RGtX*aX6 P8DyRU@⫚ @ 5 @oަ @X& VKZK [o=Y_OgiZK/J$M$@ @J%4hqA3I @ҏ>jpTz/?ԧ?_wz8R;s?{{/msٍ?3ԇ绿[wy/?CO'\uJ  @ @[JڈhnhqmJ @eR˜lTpTzx#]2đc'~`8}EįǗ3}i.Fߴ|`MU?m1*VѢF[̥ǗJIWTR & @ @z HV ߠ$@ @RGts*=%&Q˥:oڒnm"0}%n^j +϶hvO샥@ ކ(q;RW5 @ @`kR[!@ -.PM  @ L@*} 8JkX Hxe9gi8i9:rSeVlI:xӆ,$*2'$E{rْlm۟wRO 0_Q.mشwّY6_<82:Y_ Lj6CЕß5źK/J$M$@ @J%4hqA3I @ҏ>jpTzRϒ:4\%Y޲w3\ݧ9L {.^֨.ՕVM7]ʜ-=~ڰl^ fHMg2g6/YlJʸw!t՘>xiZNmʘ]>=QTzgp=P@*&@ @lM@*}k#=Ae) @ H/sRRfʼmKTzt Gx$z y&ggQYxs鿒.g8sˇ|ipT[oŖfx$Rc_VSe߳ϖTzTWwJ<*;OEutdwQ>H7ٞ˖ǏY״aS0)+O .lâUҲ ӹOTz$j2YQTao5\Ӝ35/J$M$@ @J%4hqA3I @ҏ>jpTzF6F>x%n.:^b͹uFxˊ̅ǝik.G% =ˎg8k[pyYæM.>ȩs&;^oNwJeڔgO'IxVc6aJ8]Q>'tLήߚGk(O*3( @|U @ @&  2 ۔ @җ9j@>ui+c;K4I%<}.6#$|TǗ_*m'^ R1H0HH @% KZ=h 2|f* @ H}sՉ c,e=]{x.3V% wNvq;RW5 @ @`kR[!@ -.PM  @ L@*} 8x*yr[V.u62ꊥ5u{E|?W;cuI.=TN*bJ`4 @ K@*z @eT$ @GJ? O?<ѫF}z<{TUM @ؚTFD{ p@7ToS @,J_d-NGk?K/J$M$@ @J%4hqA3I @ҏ>jTL3} >=QTzgp=P@*&@ @lM@*}k#=Ae) @ H/sRR-׿؅-)6g6_BٍaaSWlRi;J@@*}AD @ @@/^!@@4S @]@*3v[LG/~+ {6"ףÑ'TVs0\_gfكѻw,cDңolхǀ./m[>=QTzgp=P@*&@ @lM@*}k#=Ae) @ H/sR=S؍oiyquM(s]b|ו~q*|DO?m/EEIg}iхFu.vvR 3T @ @^R齤C-.7h"  @8Tg@8Jof#p|6 9ۢds-\]٤x4=dl%eƝ>Cƥx<4%Gb%рi :*lp' slR˔v\/%ei٪x*Z;vjA5)q6ggETC_vWt@KhR#ÑC|i╹.d:rvR 3T @ @^R齤C-.7h"  @8Tg@8JPuD{kG\;U;呸_"t_饴(9sϑfsٿ* 6;s g |ǃex*˹A3J>}$ 9 gqiy#YOe sDz }to&ѳOώd*=k/K!*S2"Mʔt(ΊgKE?c52;Iӌ{VS"c/[/T,=NIwWj @ @ҷ6"CZ\z @ @`T2'[-hq:3AHO܎o#Λi京;i~ˢg3dpY;W&e9D-3]ӈs"B٣)#%\ j4=OelXʧAيݳ~l%d3C3 yeiBg%]i6P53s,/D;kgӴto8L$-=TN*bJ`4 @ K@*z @eT$ @GJ? Rsw3\ŪK,+vdKl{΀uI"xg"x]2x0v.Ɋ2<&V.Ii;.ퟭYOecr~j{ٷ<2.͒~i[@&ѧ͋rUWC.cHpieM4tUD/sċfK7xq;RW5 @ @`kR[!@ -.PM  @ L@*} 8JF-+G7`w/˓Gd33= 2Xvfs4<͎sF:"RN =SeMU.us ѣi`=.)R,d9ܽ<ƾ/-<42%r(0V}Lx}fmM* 2gg4\>miOXFs?Y]ZI+Tܹdѳo;3  @ @ H7dLIex @. ^8JϜn2K}z3T,~mNY<%].X#y? -̲xG9,w2ޝ ~Td3 2N<)msB<eXyZH܏ i䌳q?VӾ@L_Ϫ㑲x65ZU%:?%c\=n%}qIgtV_Nݿ>Ǧ٪<|451{7x9IJOwZBJ  H?_ @ @ HomD7 C6%@ @2eNZ*tO*u%K[{iN=g? ?MkM[ۭǗJIWTR & @ @z HV ߠ$@ @RGtX*}]88. Ǣeu+Ӆէ˟תb\t-wyIj(O*3( @|U @ @&  2 ۔ @җ9j@a%mbY/G=^WH~Ұhd*\=ݏьݷܻum[z|Tz%H > i" @ @Tz/i @@ H @. ~P-N%}E`ǡ'ʓJ  H?_ @ @ HomD7 C6%@ @2eNZ*tX*}lvX'Ri;J@@*}AD @ @@/^!@@4S @]@*3v[KKڋ(CO'\uJ  @ @[JڈhnhqmJ @eR˜lTR׿>J\V;୷j ,=TN*bJ`4 @ K@*z @eT$ @GJ? ;HG  _w>%ezi|/?Yo-6;}z<{TUM @ؚTFD{ p@7ToS @,J_d-NwJ?ԧ2IwGK=,Y)~o^v6\)[jr6%Ri;J@@*}AD @ @@/^!@@4S @]@*3v[ >MGDJ 8oሤǢs 2׿.% *P8DyRU@⫚ @ 5 @oަ @X& VKZL:\;x|cH-ӱw܉g[~+߱w܉gcx07;/bQ4&rQKXs(6WRϊ~<ճc<OQT?]= ⩲.l(-;XꊍKPD;M,3I>2;2hZ ,=TN*bJ`4 @ K@*z @eT$ @GJ? Rlޙ&3F*:ԙ[wɚO lw"Sn4yI|nĝLҰi޷#]ax6D;g/-,A3IfG´9)CKV*}gǡ'ʓJ  H?_ @ @ HomD7 C6%@ @2eNZ*t[*=2ӳEǧi:ѹFx)Ku/EcO/X|3)\/ i" @ @Tz/i @@ H @. ~P-NOC#tti:sꙷbӈ4>McXzgQpxjGuqJwn6]=eK!eGc3nN/nYZJ˃ug_Hx0coA=)P8DyRU@⫚ @ 5 @oަ @X& VKZL[oe/q\=ʟ&,$~lP٣̚GkN-K=d KXwGXz|Tz%H > i" @ @Tz/i @@ H @. ~P-N3璓Pu<\;t\;S`wY;TsLe/g:ǧlCǖe($c`?fH>+tN%g]R§١TV|-BQoT aa-KtFbks}z<{TUM @ؚTFD{ p@7ToS @,J_d-NL gBڽdjnM`vR 3T @ @^R齤C-.7h"  @8Tg@8%^V7Z]{bv+8CO'\uJ  @ @[JڈhnhqmJ @eR˜lT?c I?xۯv.f;ǗJIWTR & @ @z HV ߠ$@ @RGtxTz ^q;RW5 @ @`kR[!@ -.PM  @ L@*} 8J}(Y.Ri;J@@*}AD @ @@/^!@@4S @]@*3v[K<}z<{TUM @ؚTFD{ p@7ToS @,J_d-NwJ ,=TN*bJ`4 @ K@*z @eT$ @GJ? ÍR?c؀@IwWj @ @ҷ6"CZ\z @ @`T2'[-hq:(K#@`_RO& n~ @ @t ?0 @ Ųjq:,>lnJhT& %@ @) >i5~ 2Ru=e- @ @: HwWj _}"@ @M-N뎑\@*PݗJ?p, @ @຀TBZ\C  @تTVGfv8Ju6h7M HorX4TzV @ @Jsܴ?hq- @ HW'=x-N>t@]J۲TGG @ @;5Z\>e @ @R&B]RuHi?FBqNoJU @ @ Hxpu 5=$@ @TzwWtX*}Fy~{Jog HomD @ @⫚ oO @t@ac- |c'>!tқ*|SR!@ @%9UaǍ 8^lqи>lRզ6/ !@ @ @@?~j"@@uWԪwA) :2ů}1g?um|tG @d}tX*}s s4-'TA^t|Q @ @tӀ 60ֶ.4ʛdu QTZG) (q}\ZK?n<\Gw߮SܾJiqи.$7 @ @" n2 @``WvwJ,xD_֫Ԏ\G>g^z>wxrקT?QZlYz/diϽ(T}sܽ앏dK/lTZG) q}\ZK?n<\GWWcXUJu!} & n~ @ @t 60ֶTzD#ů}1I;/+GH="Mh|$6Ƚ";>8a+/Se(-*-Qx*)k* g0=c%Y{Ioxu @`RTSoJW-ׅ5暀TA @ PM ,XnR%zQPx濧􌕟Mg"<*g`=3x4>|x6q'ټ=ݤҷ}<: O}ztX*q H{wyB;*A:Tm-N7R@*}ap[Kox5;sϝMg٥@u[ts8Rk=%@ @<) $  ]WԶk1xˤr?`h>R@*}ap[Kox5׿w]`菾k@u^t8Rk=%@ @<) $  ]WԶk1xvJW(~=[Gx6uKŖZYcܦT=mrlۤ?`h>R@*}ap[Kox5 OL?s?Gm*q]X* iO[</OfH>O}SEx<=-샳uTwZ`<喑kKYQv I>b | @`0lmq:,aλr"c?cwxMZ4 KJ?X) @ @I'l@ ][6z*=q+˟g;ꑁ~镗J=bq导Gl=gsSV7K z>x uK&($,yhRIJh @`TQGnnq:,֮E_]ȏo}Qu?#ͯU*3@  @ @tӁ 60ֶ>t*="yf9t1/kGv|bc9|W-N7j#s?suW)-ׅ5暀TA @ PM ,XnЩG;rعz4J3-7y>\yl l< ,mmXl<~yR>hاT>qjq:To{ rCHK_u=V@*j'@ @lJ@*}Sá1MgC#yHgW^:M2Oc($o%K+IuƯϦ\+-"..iC @Tz5J@>RoO';I Y>dzJ9zTcN @ؔTCc p@+j֋MGt{y܏zY7=qwf3^cp6>/|&}+|_MSH/~iڐ& ^RA?hq:,ۓTc:7{03[ + @ 0T@ O!#briO?Zq9G#wlːGB=gs㌆Ǿq'o\+=/ŖҗgLTC^*%@J?R郞hR뎊Zl-| @ @@R  @`.2< J3w^.WX<k̙YG2x6llː#[<^崖f6{6 3UJ. ~ P-NGo͖J\ @RջtX*}Jޣt:ʛDuB7gߦQJ_wT]fffka @ @Jh4s)?D@* "6]TC^*%@J?R;8) kE$4v? 5+ ]w\T:7{03[ + @ 0T@ O!R~2W)8T'@8JW^|yş}YY+=ǃW>rzĻ~ɔG|H65Bӵ#!,'eүȝg<*wJ*}چLg=KcSx07~aڥe׹٫ZX @ @,M%@\exO/~/Ս@l12UJV@*Cߨ-NG8MWjsr\x2_/9ƙA}s'S%.~e|e׹٫ZX @ @,M%@\ex7^_ w#A &[LLu @J?7xa'#-x镗򈞗U#>!.O/+G=WOz3DW^zY+Ds(!TzމK=Gixɵc1BfeJ;6sWk3  @ @ H4XJ@"p)^.oy;/Ss\˺ncl<+[^[٫uWg͸c Qz,IclsTC^*%@J?R鷞Ylg g<2G▙8g)X}Tzf3枅g=KQ{ӕS/ΔKQuGEunj-`fV> @ @` KS  0hqCX-ny \;q6 mwn%x6Wky)=Ϯ(uܱ׳%1[tlCt*n%K ͭRy\@*z[Kzfa{e׹٫ZX @ @,M%@\ex#P^Px&U1J/;frz*=-F>16؜Y̻G9/_N|0ͦR鱲{v6}ApUdz*YKR9 @ @H`u v\=Tz&#kG|'[$3})AeRz*=J_xiKS8TzrǺXF}Yoqи~JېM @ @" n2 @``WvoMJy ׿z.:^.$6Sq 86[3)~- r,KLSβVz)/J@ @>9Ua'6#pT4~%o;Okqи~J[{ HW @ @`RM#@S="ϯҧw/%_֫#Ýwb[ɚGr˒>1˙2sD>cy$>[shCga6[- j7 @;zF>R'ğn,{~/ԊTi-/b|2T @ @R-TINu񪹔JXq,-GB,<%G=;RιJlI?& -FknJ?1F  @?jA}zwػ~F`?WW_|nv!T@*)  @ @c H5^ZKNexJ)m#.MՕJ?eR ppOoq:TO'W,ؑ@r>uG}wc~_qjk/@@*}  @ @ZR$CNʡS^{Yk) ~^ @m Hok;Rj`TR) @ @ ~AE+~-ܳS{.~H?z pHC{N8JowB}dVx|9njTIM Jil5M cRlq?|n%S<tX0wޝSZ4A*1R㎝ @ @ HW'U  ֯oR*=.rJrc>=mqy$ϽN,g%6ݣc`W^Z~=ˆ-߫nْK6&XFJ?Fw  @&71 ;jDݧ˩ey/Iމӷ㑸q'b?#4[)jGclĝҌH1ېŎFN4T:7{03[ + @ 0T@ O!TzY1.ׇv]^@<|<ďX]&2GH+"י-ǧKeH2uӧ ˍhUiKўlҊT߂TcTqllIl)/FJ\ @RջtxO8sK/ cƾqWο<(O6s rv'GKG!Gӟs9*mo$n4J3 H;*sWk3  @ @ H4XJ@"0Mk%^.f tu">Pϖui  y f*6 %._|fI[#hȰB)͞cRNT݉*i!c<[JVսҤ2W)8T'@8S*wLT9`<>]<7(yhجܮDyMS4^(8SoG9TN![A*}QQwZ O @H@*}TZ\wRyfOSӳ*N<ú)>MzIJ[ H;*sWk3  @ @ H4XJ@"mzrq\l9JlwnWs3WЕlaZ饐ر=+KR+F̣aO^՞&`y6lڣOd@!_;]ȅϳtG2I\C}aSL*!/s @ H|T~]gekVzU)R|fR/ƖT+7CQrp~1xZҳX\u3/;" (^'@ @ $ >`i*-.S~µݒ/ x#0sY*t͹reJ(3>3>>ߙ/ +?^ %>O ϶TC^*%@- ߻ûLOcǦ<׋'zP8v)*;=O[+}@?MJ[~}ywvR~#EQ 1N -X+!/ @Jw`ݧҗ=pXyb&6UWJ_w̔]fffka @ @Jh4s)?D`J^=$y>;u\r?공ҧ녗?d<WJ\QlYn&6r={ef|y<gcx6B_ʖ'Bv*ɤ(m={YLLu @J?7xagmM8/;©YSƍ.(^'@ @ $ >`i*-.S~Tz.@~z-H,,w#'}q/?F;v"cJŧ vgxfг,$=zڼe܉)WϢl9ku/TC^*%@J?R[>Ѷ H;*sWk3  @ @ H4XJ@"p% K3]}U@*!/s @ H|T~a[,lO`T:7{03[ + @ 0T@ O!R+qq:nmIUJ. ~ P-Nҟ<8`_ϖT/|&nKRii@4)y<YlhI'Tz=C?= ;Q3C%(^'@ @ $ >`i*-.S~Tz$"CJ]qqn0ď(#sϖ@l_;Q /ǎv.)von%UpUJ. ~ P-NwJ]??|s~,R`t.*uk면Zff-I @ @v A+2q5i*}\^t/ }w }^kb||d輤sY-%~&]7{v叧/ZTC_*'@J?7v=+OW4*π1O .N 46wiMݯR`t~S:KgY#잧%^yb9tEc-},?=[ң}-v]2CЂHp[Yg.FWU<e<-s7qY*r#{Yy7,k};'2<;ٻbKJhT:7{03[ + @ 0T@ O!J/kŕ+峼xx w^^xDKN=e͹i4^pz:,pPi 4Rȸg NSemؠ7r5}fH?eR ppOoq:|Tz~|8?L3dz} fZr)!mʉR~TwocnhRl~Yz1zOf=toK;*sWk3  @ @ H4XJ@"0MOז[J2L0͠G.<kQlMY.;dwcOS`.ȗ)A%zGK=O wK?eR ppOoq:|T4t~̳ȯOXɸ[e׹٫ZX @ @,M%@\exҧ׀c{tgZ= Uɧgg@VLǝX/e٪\+E32LOSwG@*!/s @ H|T~ݧ㻾e{N(o ?&VkCB*}QQwZ O @H@*}TZ\K!%mdY|.Ry\@*z[>s]N@*}QQwZ O @H@*}TZ\ᮠ`UJ. ~ P-N҇>e׹٫ZX @ @,M%@\ex_*o:CV*!/s @ H|T~ݧ?򱏼+}^˱c+ug!fK입=P@*}QQwZ O @H@*}TZ\xm[O H?eR ppOoq:T>r_J/am-sW^%ң%qg g7*mR%]uR뎍Zl-| @ @@R  @`.2<;@7r*%@+ ~ءo;KNJq wމp18&eez>R9/GQΰxOʑoң%Ϝz6 䌧G#3^_9DSN x6M[+}]^R뎍Zl-| @ @@R  @`.2wnY*=±WDs vOSxY*ɕ38mfгY*="gS鹤z6#w;JWI(D*}1\wZ O @H@*}TZ\L @RI^`]3M m#e}\7=H,kG$$3؝y|.%<0dPӜzdsl@-f||ba*tEZKe׹٫ZX @ @,M%@\ex @. ^8e*}x3.D @ @` KS  0hq2 @ HW'=x-NwJo/V,RᲿZl-| @ @@R  @`.2NJ|I;sWk3  @ @ H4XJ@  @ P]@*: lq:,<}7_{$.^'@ @ $ >`i*-.S&@ @@u/TfmT@*}1\wZ O @H@*}TZ\L @RI^`C_֫K 7;[TS%ܹMlݧRᲿZl-| @ @@R  @`.2`i*-.S&@ @@u/.SGN-Rg+jVQ+H;sWk3  @ @ H4XJ@  @ P]@*: lq:Ts{n#Z/Ry$7+dZcZ鑀gJx$ͦYiv ?V@*}1\wZ O @H@*}TZ\L @RI^`= wޙF?D<llaO]^˗R ~!SQZ)KGDGJ*ͳ+R>M֮f..^'@ @ $ >`i*-.S&@ @@u/Rzxw2#Q2"g˚e^nR~7RLsJ/e# @ @` KS  0hq\r(OK&)ZC۲i=OrDNBl>$Qff"+DX0ʅ2 F `_P@pHp4Ao.h]`f<p`,U]VUrj?z֪z @ @`vX#x9UZ cXR%;ٹ~#_Z:qeLߩ%vK*6Վ GtIzH4_UXUTLKCCiƹԚVk88nM0C @ J_d* & @ @`vX#x9[R#%=[dZO:bFX > @ @XMBhq @f'>;ҍ7c;SvcJ֤;#{bB-cFX > @ @XMBhq @f'>;ҍ7c;^͸ $e~׷x@Wyǂ;/OZ+s.@ @* ^$2@`r܆.MF@ d# FαJ/]&Z 7n<7|SfrJ? v:= `S@ @ P&2煨  "6)@ @XТ~o|m]|yթ_~v_xsYsW h7iWhAюuh/Nawqlj'B3P @ @k&#v@`f y @JςuÍλVb{_?<󌞯W?y2')~+jĭqSu|Dթz9{CW^(?@Xti_}^;wD~(CQ @ TL+eh@ _?/F@ VWaeF?sdnH_|ꩧVʮaK8t=;oKi W-UyK+9*5=;*ݾO=x6VzØ_6Hyz+}/L ҿo~Jzz-S"2x>bqֈyqܨ@ @$^2(@`+f d @8cPOme|zSp_vԩSλtiO?nzOp]ݑ2_F@ @"~. C(VzYA4 @@tFc[)VqmX?y͕JΏm#>_[,8W_vm 1n:s挴/KF$mN9%!@ @@ҫbL+el @VzEYPҝS>}Ayr-vofWך  23¥i@ @ 6Xk1 Jg9@ @ ixUZ ڷoIp=T+ zI-K.mKw_ifZ>rVw2xב44-#а}7q{wk,2 2˜ @ @G!~t @`Xp@ @ 3̀i~[ cZvZ:oܸ1\oG\= @ @V8i җMo @HX#QmAҕz#<0<%e/xƯ+UNfen`" @ @J+}()A(VzBH @@V:|5)`$FX > @ @XMBhJgM@ @ ixXs Ǵ]oqqVn܄i @ V&P!4 `& @ UJ_4mz;r`e&L @ @`EW4Y @I+5@ V*iAd+n=ts6m0K1~U/D/ ܺyXjYՎSM=Qw +%]j݉DQq0Vd*V-8nM0C @ J_d* &t @ X高Yҳ5q? rTsy*_Jw-UNO# +]WNC#MtGZg]ͶCB^XO>dQFߢ`+@ @ Y VL+}œG @-ZǺY+]I#ay+=C ްC5VJWJu'Jw 6#WziEN6o曏 @ @XMBhJfM`gw_q2/\#k_h+K V&kbb;CuJwǍZ 2s}@ @ "X+,B $^͚؈~+z|z$-_xx)--Uѯ]y/=p5 j.  "X+͆^>hg?y[ȃ7<ȹ*RxqWZqܨ+37aڇ @ @+""T@MXլtus?CG\G~qFs=N}J?u\BK [h ʫ'*{хЯ*}ɥ.)~韕=ҫt0@`h6jVz| {ףos'0Ga|шk>J;r`e&L @ @`EW4Y @I+5Qn \J o8w[㩃Jwuia~'}<vq?]V]@AqueqVc`Ws`  J_dm6*touҮ":鳾z?.u;jYG*[ӯp [Eخ-#a;=yԫz_#*vpOmD;GT.r`FX > @ @XMBhJfMTf޿Da3 ;tk*óNRJo4Ո¡?mc5^ͥ@VD+}EPҵ4mQֲчu_!s(nz^tO,qx;d<P 5#=C8vOj G ;J)GtM_bFX > @ @XMBhJfMTf[8P9ZG[4g]v7 + 8ȝV#M{F^ͥ@VD+}EPk%^k#N=?Qφ(HE|edr{zzڲ k3뭼w.O.&mͽ(nO;UE)_ϕ;#eB1qWZqܨ+37aڇ @ @+""T@MXլt`v;ڗ[Nq~o^uP 4vH\'5 BJxj֚iz>ΕnBٴ違^ͥ@VD+}EPkc;w~yTYܴJjF_Q_|KU:s @+6b:zt~8IU 6R1 Z6ÆOJMJwǍZ 2s}@ @ "X+,B $^͚Joߜw;Б=ߺߩRю^TLUHYM^r]j.  "X+͆+=ոnӍ#M.=vdȕݜmín1=GTH_#+='Wztď>eۋ>J;r`e&L @ @`EW4Y @I+5+}jK+K V&kVi[ ۲\m;7 2+Uqq 흾]Vz;Vڻ8HjGT3NDR"O;K:تwt"=vwƿJ8naFX > @ @XMBhJfM`J@ @+"l[ڶHw p=de+]#;s7HvfS\ϥǑKn? %=ʨGr#p1 uqɴ`L{h]{ƈֵU\2ZqWZqܨ+37aڇ @ @+""T@MXլ %o~Vz5@XMfC݂޵rxNDT꬧v*">J;r`e&L @ @`EW4Y @I+5έ% `Ws`  J_dm6-[r!ݒCq̒[")0bCJwǍZ 2s}@ @ "X+,B $^͚n++Φ9szzoIݞ*n9R#2nqUQ8/aw0i]twMFёwNhWͦ@\2nU/i$~M5b_=IqU`{X\: @`EW4Y uVz2J+}ܕw7j&M!@ @`h@Vz5kb o]fv=zvzrV[vSWє,v+]/鹎7ݑlPcP!$vH1( _(iXSAj :Z0ے7XnǿGmh +]IQ Qr^ͥ@VD+}EP?q'_ |/=٫͸//y7ǵ@- +}ڄ @ @XuB>X,7[֣J-U(Zp{ <-XˢeVs +G퐺t'WLJOeqWW;;)LNe,k"ݠjGuW]*+s@C+};sޑaɟGO|Y(OɟٟYb7#ȏJ>.=BM@Ђ'>KKP @ @8/V/~.+]$f'n [%nyIۏV-s ֮bJK-g7,vp*w[;GJXF4:eջ+WzyP!a~ŧ<==1$CJg  J\wuXׯ_] T@n\,rQKOO<g]8 @jeaSN=Ӏ @ @2->cVO+}Se].xOsIJ^d%zg߶m(t7.ݼJwMEy=j'VwqZe}~R=/Ny<4'qA#2+r Nu9} @ ixXCvx2廞=~K3#QOCv:8z][oUio9?3Z>_)鲁ԥ  -NVf>´ @`y3y?Lƍ @ '^ >Xլ0o[NUuc;̽)Qiq9۫4=2Qh޶ݎ3|;Vx|.]>F>ƈ\Q3X`Ws`  J_dm6T{!%ai*/B V6/֗ہ6?}vu$hwNğ^vIgǀ#юzE+=qWOcխ*Q=`6<ѹh1 꽪Uo7)=UK3Mvb8? f0<E.*w;?SZ+s@#d&̀i @+}4@Xxb[FCiVhET@JA@JߋG'P!Kνi/mwjG;OMֵ7Y=ZX[ 0呻KQO o<农Z2Æ?/ }+qFX > eԱ!Z7Ǐ!@@XAQ @x8+bJbHV+}b @%щ_հ0J rۮ$K"Wzj;<>+=PO'ݞz_`qh`e( A Qs(zps@'^! NlYҏrNȕ^ͥ@VD+}EP0VUv{`kNj6Csʕ.; ŭSnIMq#~>;job{QSjPm [!K.=`t0"W#+a ޓ+=To|I 8K]e9 9X㮴Q+7Vfn´@`ulaE/G$#§k@ 0V@P P"6%ʨt) bӒT@FJ j ChXR%KnGVlWW;2GnoTWmZ-둶vxva,mw!(TF+etd_ߡ깎x.eIĦ21FjνL?B~zT&JwmǍZ 2s}@cC +z9"n>]C   .qVF~˧4,@@MKnR @I+}$8-H cޣru)܊|}q6qܨ+37aڇ :6D˰#5 @H+} (A(geTLys_n63h+}ԙJ%@JώKCҝû/@JHm3g4 +}܅ w7j&M!,C 29~Dt @JbJ$ƻYSoKOo[`]F-߷0]=ǫPz仫M `:M@$XQyuHrnP C`FX > eԱ!Z7Ǐ!@@XAQ @x8+b%|K߹ڥ{S~z~z艳oV7y#~rZA%u\՝ίJ_iG}ؔG+}iJ%@&JʋCJK]pqVn܄i2-Ê^HGO @` (@DlKQ1VLn=|?ηbηr=$Utʷ.?q}J|G~+]%Ցn+}]a:M@$XQyuHXlvގ,mrw5;6~Qy;9bj|-!xBVL=d?|DiF7b,]U]pqVn܄i2-Ê^HGO @` (@DlKQ1JY묇8sα~UjKvyX-)/Otu~ym`t_}t?ɡxS|;Ma:M@$XQyuH +P؛D S\uDMNsȮV ]x?*-{oH(ՃJSO:գ_2R Ao'4Z <ÆݮW _)3#.S?$V8nM0CX@eX ps  $> Hw2*&[WD p,lE~~m6sz9dαnr76yW.o@ Ӄ i [>+}V0 B V^D8::$ [kt]?]󔇾->tgZ鮥`52^Km;q׍OMӯƒ=?MLx| <~ݣDבܨ#iz'ɽN 8y'b. \+}w7j&M!,C 29~Dt @JbJ$ƻYSj֬3x܆OE4c/FsMV*kJqJT&F; tfGT @`I:$c7O>~3CvXVvҤ$sjǶ74HGi;N}96^GD JOmh0l#mX)!#J_2'392HO 9Af !@ gHEojz-͉twQ_b˷^z\NY.őDG7R9rՊ{zhd@Y`~  @{ `EDC˜JO~=:v+Yͦ>5on8]ۥ8zYص#- $^{LsCqޙ+=."Wz +=h<5?26Fȕ>;r`e&L!PdžhVrD?"| @ `E1@%`]⬌J?.!0VӔJ L"> !PѰz䱏hg'Վ|n}ՐGa~v#W?/.#_<;jTW'5#LeVy;VzDo!vЃӱxOS܍鷫y.Iu('r/rQXsP @'Pdž 3ngL @`X3@ @"Xg7[x 1 (S+Oa @`/(ptuH +MM Jⶮ>7zIVSzėeY#v +(V^ªv|DM0Ãp#z5bG=AP\GbzAo'Uw/Ls<kEvXϑ63;W1rFX > eԱ!Z7Ǐ!@@XAQ @x8+bjuϘv!>4 @`OGE!aL9X}lG9z5JwUǍZ 2s}@cC +z9"n>]C   .qVFń^͝U +}iJ%@&JʋC7DqdH6sJoD_vi */B \[d1C `FX > eԱ!Z7Ǐ!@@XAQ @x8+bҕNx}7wVt=N}*sX +]Uzzu3%#zeʯVӔJ L"> !PٖCJwUǍZ 2s}@cC +z9"n>]C   .qVFŔZ}sZ{n =MްزeGn.]_(Տ+}iJ%@&JʋC˜hz4}Շb]BW @V_j@1}Di G7q\]ձ]pqVn܄i2-Ê^HGO @` (@DlKQ1uY.u+=n:uz# vurg^HXNS*A 0V$|T^@FJO2k~ěAJMkoEm'>}}Fn{F~8|`MjIiڍ^]4 L)>;r`e&L!PdžhVrD?"| @ `E1@%`]⬌V@~徽ݲaKqy=tkң}urJuR  I'"0Vk~nKuҵt26:ݫG硶G#W|u$>_q;]C   .qVFԓ+]7nMFm7ҡ ɕ2z~Jp.CŅܷi^XNS*A 0V$|T^@,VDT{=~moT-U].>T\uUFS.}!-Ktl$hW#nǻ]K>'SGp cWѣr#}]KQ_tSm׵^%~~ż3 r/r Y%(X3  Ա!*,1J1@ Vz4 @`l@/VCrܜn[NiJ@η}w?cq/[+}. @hJgIO V{!SO_ڝ#-^gN;GG`W4#Ty<ZxgiQ1p,P\.Q+7Vfn´@`ulaE/G$#§k@ 0V@P P"6%ʨR+7{vJ׍s.Ӱҝ8Mw=*|nVӔJ L"> !P1Kt|:WWo?VkFU{7k駬xN 5\II׈/U6*ꆕPw}0P+=:6c0[V8nM0CX@eX ps  $> Hw2*Jy7{--m|k\oA!ot4VӔJ L"> !PQJ]]VzweOHҲMsW;82Apc4s~\Rc)H1;=W=aLKX+}U w7j&M!,C 29~Dt @JbJ$ƻY^+}[4Q) @D+}>*/B aqmzsWS2]2i+.Ьky-OHcZu#N}ES;񹺈#HhxZLlڣ:TWzKǼ{t7cirbKD㮒_U2U(bil=0݈/O48 wrHOC&t2XjQ+7Vfn´@`ulaE/G$#§k@ 0V@P P"6%ʨҗM/&>4 @`OGE!atYV ]eol?VpJwUǍZ 2s}@cC +z9"n>]C   .qVFń[%+}iJ%@&JʋC/pW.?Ҭڹ<=2)9m󏀷+}U w7j&M!,C 29~Dt @JbJ$ƻYSDt o=}{-wkK_ ֫qM~uG\yԬl<‹XWvfcP%ņ>4 @`OGE!atYmj `FX > eԱ!Z7Ǐ!@@XAQ @x8+bJt}w|mݧߺe+qZo?CoJ(|kJUKuq7TJnw'[ŏ>4O@-'o8<}KJgO Co/\Tqq**B_eqK1V&+@17Y @|XB$ƻőZ驨m+=p{:u^sZ {-5naFv]LƝ=J;/9 `Ws` [#;C{s9. Y1nBQxKb3:$'[cPOU۶Cq rtJ@F+(̵w EE,yv0[ eIΞ=XׇvO}W_u-eLWC[X<ۅ/n V@P P86DO7Y  @|XB$ƻqL䮾wU\pa;߹Dp?jq2h|6S|w<~I2HcڥJ@F>+]e:j?%S3Q6$違 EE,yv0Y ׯ_Jr-7^~G~2+o…. |pNw 2 !*|9J @J/@'6,JOM8zm7NΜKKJn\O3=ʝ|.+=iS#M%@%=ҫt0J85{#AMM f(VJڅ"J<;fHˬeFOt?.^HoDʞ>b{uj::+ \ P,6DN 9z @J/@'6,.+]Z'L ](Jclw6Qڬlxz8izgXޖJ@Fn+](eG\ܟ\%O*oܟst(^s%%f X`oBQx%Kb3$VrKn[|mʞY$ۅ/n V@P P86DO7Y  @|XB$ƻc.fҫt0JG$wg|ᆟK:qRV%cUr蠋RB}D +}kNj(Y a^ Tﶒ#'O|s0zwVtʤ>q]. `eE1@`CT ps@'^! NlY [5eDVz55[뢧?Rqpu0yx-ԮW[UԬo_]BK9.ŋ EE,yv0X <ҢNi 0[o*뇴|.3_G%ip( @dlJb g1@ `?GD@jVb&I+KX!K%)ȧ衞[顪GSX[;koQ%I cqƍ;m(]\p2+킋Uw]hYۙkF M Q[9^T2@*&^24@~lcݼ͔ Ŧ%W@ [Ώ.\';s:#/v{W_+!TEU?9Jcܕ@ȕKD#E, c5K/)y*+{r/^~w~oߛ]5-_̗wI5+s8+JB(g؂7Y  @|XB$ƻqڵ#%W@ UZͥ\&C ri>n]~ꈞ~^KJXoXcVIxy`oQH%˟#"DXl {ゥ~wѧ>g}VaCeU/$mi32o<򤵹2"I;K q@b @ҏ!L%{*ACC>+`?RDx#DXl_.b2+{b]w|GHLov[]wUHfdxpIks`eEv 9> @ `>]CJTԇ V\Ң+zP/ewyg=g`HQPo&]7}27?rKNi<Kmԙz\̭B Q-3Y89^3<@ ^42@`xou7 lV7436^TS Xw߽s1HQ@`?$>}ᄏp#J*9J 23@%`CT,^ߋ @ҏ>@`<6Q 6XEk &kw}Xk'^pC aBk[?M`gLD 2GN`C+Ms=@ 0?" ^ 5AN+}-"xQqҿ|J?a`b6$ `E#Vka7Ef@U<5 5&c @VX,6A&AB> ^`r[>;ҹJ !>eK ca+^tE`Eg )MM7*&ɭihi6  @Juf l71  o}[c?? ??JMǺGbJ_xm]5L275 'qsd, J+֙e\&43H@tgGGpӯO޿JMǺGbJ_xm]5L275 'qsd, J+֙e\&43H@tgs|Ϳ~|}a&\GXucݣ@Xx~Wd1b/6讋&qSXn TL Qœ[и9^l2@j%^2.@`xob$ @EYoƅ\xs)C wu*=df^GeGy{ `ED@Xx Vd1b/6讋&qSXn TL Qœ[и9^l2@j%^2.@`xob$ @EY9'wʛW&jn*}+}eb9 !҇Pq a,E#Vka7Ef@U<5 5&c @VX,6A&AB> ZR^rPS34UQ#;n* ]ңJo4-R#.zޣxDRޯcs(Vz9sA$]0^+^tE`Eg )MM7*&ɭihi6  @Juf l71  .;td= J^}?\斿}Q]p/pݧT^GSmiqDG/^6#*#*c[CS:2=M{Աҹ~C+ .H YX "IV榦B`CT44n4 Z `: 6ޛf @tRdrjGr*_IxjWjZKv=T uSu;)jAQwz`++Z`e'³"+}Aw]Vt0"t3X@bl*ܚf@ P+ZgqA { !@ɕ$N*>2GZJ c wyJqz].oɳX[}D QMYX9^24@!^T2@`xoq3 l@~s2?y2QeE=v6;oLlJq'O( h =?V;s̵ks({ObtC[+}^[ڌ 2Y  ^pVfDx`C4ŎKO @`!(@Pl ‚ d а]-_|bGAұW;l "M$>$ u 7\zv#ce{!b-7W1M @ `o|0|@`x{ pJoxV +Etzw_zHޓ+]ݾjQ{ScrQ6/|i}HsP :u]m"dV&AB h\9^,2@j'^ 3>@jl^@>=V˴<\}j*3Kz*V7yXt#J/g.kV:kLa42Y y~~  @J` ]l;GJ_$M Jޥc;7D=H.X鬍B2 dI@:Qps)f T@+Idv 3r@}:Jޥc;7D=H.X鬍B2 dI@:Qps)f T@+Idv 3r@:4GKE#J/wn{0X ]Y-d"Aɒ P6DucxS!@Vz `ݹg =3t]w~7 |/=ӅH+Y!'"(o!A L :!c7ǫb@@+Dl=# ַɓ/}ɳ?3?3;]qKb~H.X鬍B2 dI@:Qps)f T@+Idv 3r@{_w0 `8+0X]Y-d"Aɒ P6DucxS!@Vz `ݹg =X|YWXE-L\}ۙ2zKG4qXۻT;brȾG E+QB&0X, @u`CT{Y\ _ǡa|3b c4ܕDCvV.+ܹ!@`-tJgmB V&K@1ՏO1 @XL"CKv瞑CVz*˟{1 ֖K#qcq9VZF}Y@(!Vo/KL2煨 J ѡ(? v: @J?!EwYA4 R+}63'qd`r^;Ÿl,U=m9Wm WqhKoDqC5F#JyVMg a¶JX雘5 w Y[u H QZᘸ9^2$@#^ݔ2 @`Kxoi+ l-o֓/\[thRUKGBOWStUT1ts e4W_ ^44Svt=F6U%\yUq6w5,_z풂=F0ng]C itH]HBmw3`>deܿA+y >H.X鬍B2 dI@:Qps)f T@+Idv 3r@[2%7;Hb*Kk,z"o;-} +=D4箘Zѣۉ4.Χ7*njg.yY0޶ mvZ{ث@hŝiҷwW;bj!aT43e]VV]vmf47XrK/CXH$ @`X`@yuVuwƴK J$ܑ|n-:ҼpuqVz.5F†wi[v{Wtgsw#VziiC\3p43?0&ZO{+ҟx;|W5wͳWs̚gA["hKrs|œG lVfB5`]w!ː O!@`R+]%ywmKwV-U qDqi]rottjpWaVtmzIDvT#ݾ_N W<|KwtvF;JP'>o$J/V/+!6$ VEtBB&0X, @u`CT_8k . aҧ\7[+}Ǝ^ڌOV:Vz!go!A L :!c7ǫb@@+Dl >+]2zjyjK֯嬇޶]F6nrW{:.a꬇ˮ*խ;ݮC>x YX\4– cǧF_$գ04{kucҷ|(mX a*`crv2 dI@:Qps)f T@+Idv `ҥ}K=D4zfF3WAkhFAMZtUtȤHLEsK2!&M32F/ȡD0#}E#CGmxS迌?pO^rH a6`crv2 dI@:Qps)f T@+Idv `ke9yCPVzPՑ3;'zJKzoYKbWp`[&ZA]ueSEj(>Z|X\Wˮv|vV YU:}I^\xlocHG׈ʿIL Z:"*}gT-+ r8HUN,JJe!Mow:CZA*mBX* @`aX ;@s`='#U.Nȃr⵭t%uߵ)eڹլF!|G{z)xuv|Jvtެ raD[Ca>"ˠ{_g_.6|\ղ/u%u~"%" sR;.uPz׸4و֍w ͽ|шYhw3)ȕ>G+sJ"m%[JJ/d2 dI@:Qps)f T@+Idv `-O߲dJ:ׯ2Bڳ^#QFME=q*k Cb2qtDe\s-e+h0-.cۗAլB~Gk|"sɢҭ t 5~_LẾJE9.^!0uD("Si]Cxٛ>3ow3V/+!6$ VEtBB&0X, @u`CTk;VzMYX0jJJfiw42;VHiQ!: v:=7%Fy@ <#  Jߠ~!c\g@`v+= i%,c += oGO=\驃MWu;v ]ZQ&}0Q g8hb&X302]yXX,aB&0X, @u`CT"۷ lՍH8\*`Uu?q3-6]4p`FCsHшKo|T -4:mI8Gi1roQرKi@`UtJJ/-d"Aɒ P6DucxS!@Vz `]dKM;w Sk'U1,/`ڦJVS5Оb(*BWaS+C2)V:?ckoJ V/+!6$ VEtBB&0X, @u`CT+C2]o +}Ǝ^ڌOV:Vz!go!A L :!c7ǫb@@+Dl +>yb ҹ[SvsY:WDźT}}&U\N^C'r,q`Wp`[&p[NޢKA O?O^rH a6`crv2 dI@:Qps)f T@+Idv `ҥ}ҕNN+)%$֝\-<8JW1Qk=wyPJ @+%҉TH~ЂW7[ZB9u!C Q9sA$=9 @J/@'6,:tg%n$46a ptQv쒹w;F<;+QqbWp` J_m*l$MMAJJ?h+--O!ʜB! gy@ `?GD@ GV i% i u !t|=ԕ^etTK]y0u=N?J- .  RX+M>hXX-|q)XSQ@93DC,@ P>!t`]Jc-\n|tVuDbzk_S![ H΃;}nu;Oiiއw}|\X\4 @`W:q  cS}`ұZ0 cKS2У. r!*g.7Y @|XB$ƻQ>Γ>֕74X\4 @`W:q  cS}`ұZ0 cKS2У. r!*g.7Y @|XB$ƻŁ~#dg;>^+6X\4 @`W:q  cS}`ұZ0 cKS2У. r!*g.7Y @|XB$ƻŁYA(J @+%҉TH~ЂW7[ZB9u!C Q9sA$=9 @J/@'6,ٛ+C VJ'nSa#alj,V:VA &_a|liy Vzԅ P6D8 O+9"B@xW8t'Tp0@VG+}uS068>p.0#ǍZJ#!9€ @J/@'6,ro6mQN .  RX+M>hXX-|q)XSQ@93DC,@ P>!t`]J?N+h0@J `t66Ʀbc`ǖ`eNG]@`CT\In< @@˟#" IwJ?Sw}gyE.\У-U?w9K?ǣ.%SS>>9vF66BC `Wp` J_m*l$MMAJJ?h+--O!ʜB! gy@ `?GD@ Gj_}.g,\f|wzDuaV7yC?Q;Kz њՂ kY3Z=m2#`Wp` J_m*l$MMAJJ?h+--O!ʜB! gy@ `?GD@ Gj[jw_i AJhSuݦ|0u$fn܏ԏW9 ՕySGQCvW.7ms`M+h0@ \|YVoo1xb_>_W72d9S?S<%s?S0G qbeǵ@-@(Vz!A9  @J/@'6,[2|ҭ'b;tTD*]^η|qiBtAgUwVzZL(`g[wuǑu\1G~W;spr( .  .7nܐ?wIYԧ>OH]Zv N8я~naԌq8Zr5vOO53{o~G>OvmzO B`̏}c2|P !^DF?nB @@˟#" IwV[wtJ[.]w*|nWSA9*NvxiȕO=jL J ^,^ߋ @ҏ>@`<6SVcڑ=}Ws[^wJFr.; ݉U=2[Oӱ~GW:vvЭs;Kzߙ~.vz`s Y(]/?Nn+]ȱ%ɵ CV,HHQ +]t=?ontOV<쳲W:®2>z?ށF c BB&0 ps@'^! Nl+X.i;un+yRRG1V .6*#G\mFti]y<.զt$jGT}ٰc/L+C@$(/*#O?=y-'|uQ@dj*'Vi*a\N>Oq !N)+z~7?t=zg+SEitkoz_^@`;x J/d"7Y! @|XB$ƻőZ AYo'/m_۩-%u68%Z-ite;sk3.j&^E!@nTH P;]l@pig1@r\4J_wz@Vq׆V9n &P[6D瑊K(Yr@VD+}EExW&z0#Yj{֔G@r`Wp`@SsVDX+Z<5vfA[ P;gwy8+s|ee,@(lqNfph TI+iePV`X8DvX\4&PT1(v2V*Bͱ.YD-Ec]9=!B)_|li (- f.(꬙>Z @UJrZ l+i{+C@p#F"NJ_YE9å5:ޡh,?3!XC(+--C`EEaCtE5ӇC  @JXUN+Bw3.{bWp`@SsVDX+Z<5vfA[ P;gwy8+s|ee,@(lqNfph TI+iePV`7yʛW^+wULiG<- 4կk^~`fP_I . uy{݊v;+}Egv֬b"r x㢱.Ϝ`e Vz>  3N uL-@ * `W9  6t~g;ǹGɐE*OTW.TK]RaKUy֢e2>TfKv1)]yP[랖mA+C@p#F"NJ_YE9å5:ޡh,?3!XC(+--C`EEaCtE5ӇC  @JXUN+Bw3Z鲱R-_K(du.+]M=ǣ|pM I@TҚ<) `Wp`@SsVDX+Z<5vfA[ P;gwy8+s|ee,@(lqNfph TI+iePV`S+=ջh\Zw55X鍼i;tX=G0#s/)zzALog]ݾs=I[/Vz <=GnEJųPslK;kV1uCqX~qgNC2PW+=[Zz†h:k @@ҫVl fVs)dӢ;빎m'7t~*vJްSݹ+Wjt[7\*7t;nP溴ȕ>M;) . uy{݊v;+}Egv֬b"r x㢱.Ϝ`e Vz>  3N uL-@ * `W9  6̴t%,-E[(Sx}ܪN+ݵ$;74NF%jƣxNZzfÌJ P7:ѭ@iWxVjpig*& @wh9.>qVJ`cKX@QoQ-0t1@Qg @Vzʠ `]LJ|\K\ykC,(^ S< z*ՠГCtgѣA . uy{݊v;+}Egv֬b"r x㢱.Ϝ`e Vz>  3N uL-@ * `W9  6tjɖmXv$>OϕڱsӯJXiԝ]]H=޶RݯӴJW5͕*^p- pX\4&PT1(v2V*Bͱ.YD-Ec]9=!B)_|li (- f.(꬙>Z @UJrZ l+Jo2n#Uҭt[1en;z5dtՕӣdWSugKjֺ~hMV]SG,ʫVz <=GnEJųPslK;kV1uCqX~qgNC2PW+=[Zz†h:k @@ҫVl fJHA`Wp`@SsVDX+Z<5vfA[ P;gwy8+s|ee,@(lqNfph TI+iePV`1ŗ$^E!@nu8Ou[n'ch"ΚULAn@r\4}!Jǖ!ޢ!Z`b:Κá@ P%*AA[!ƻJ_ɦ/ . uy{݊v;+}Egv֬b"r x㢱.Ϝ`e Vz>  3N up =9F $^2(@`+xoLJ_VL'.@  3N up?@`{/be TI+iePV c_yJ+׫]}廯(8Dv;xz*Zrx!RVL'.@  3N upҷg#3b WuZj%^2.@`xo|%jT _'o_Rq=|et;]8nDmt6-e;Ai X@JR@pigͼh  -Ec4qGbV̬x6 P2ޢ!*y[(ꬉ1!MXy E+@`x1BOt$?ͻt99e?w9^:ΊCnunȕ~>!<0`B 'n'c-c;\YyeEZӅN @kYl@Mo=ҕ\.̕.oVaNޮ%RW)+;yrew=V>j%զ<3\w>߹KK@u8OY('Pd}rlK;kX(@r\4 !Jǖ!ޢ!Z`b:ΚV:v2I+}U Z `: 27ޛ@? m#-E[8别~nF_]1JeoK1+9Ν܊y`u #N~X󝻴d!P BpNJ?|G vB-Ec ]9=!B)_|li (- f.(ꬉ`oHfJ~U@VX,6A̍&7H[W߻*[|K%4Kvrݩ9Y< 4*zvj;tT0ǻGѲ7)V|.-AY#c;\Y @!x㢱.Ϝ`e Vz>  3N upү_կ~ۦ˨!P WuZj%^2.@`xo|Lt'Or咹1+s'Orqް%Ү[[PO:wÞoJWUF?={y]ZyʂF!p8n'c>#c;\Y @!x㢱.Ϝ`e Vz>  3N upҥ~k_+Jvg>jaLҧ_iVz3˸ M(s 2 Sa[i멹./%wȏUPYYںzɱzǥ.Y1CX󝻴d!P BpNJ?|G vB-Ec ]9=!B)_|li (- f.(ꬉҕ Gꫯf2eG7,1}t;TF`O P+ZgqA P{d>?.;wi B) J~R@pig +Z#c;\Y @!x㢱.Ϝ`e Vz>  3N upV Bsi6ѭzzʞ.\tWkVɣX}v+$\)*wTkvUEax*[ `O P+ZgqA P{$VN6}aw @S44 v;+9FV !P;'wy8+s|ee,@(lqN&Ӷeu;muS[#Iq v|Sݭl_Ȓn\tPu"4vIUIA!WuZj%^2.@`xo|J_V|.-AYzz[`t5-O.R\%G#ijƕܮ4f5yu)/R)C`ҧ_iVz3˸ M(s R{ :\|yKKf&P43XNJ;M v@!x㢱.Ϝ`e Vz>  3N upVTo*od"wrt {4l?=v6C+UEJyG./5V:-@Juf en7AB @S04 1J>fM v@!x㢱.Ϝ`e Vz>  3N upVKږ8IK2Re5b•ԂE0wEҹ{m UYRjE:v93j%>N @kYl@Mg d P MB` n'cEtȱ.a!P:ޡh,?A3!XC(+--C`EEaCtE51.\>5\=sKzϯحdb+\M52o7h< r1 5JڞWGS1Zc6WuZj%^2.@`xo= @ : `hcv;+},R@pig B-Ec ]9=!B)_|li (- f.(ꬉ4{,G)މ [v( :`O P+ZgqA P{$ @ _G>w}wF(ꬉQnݵ%@`s*BJ~  P3275gl $PmCXLEȱ."X@r\4}.Ϝ`e Vz> 孷޺?? . 0@9gM:!.e Ps*BJ~  P3275gl $PmCXLEȱ."X@r\4}.Ϝ`e Vz> ~Ǵm'O|;]@`r_s}-#Jw% X[eTKw @KyZ@`ZtrlK;k%FkMwh9.;`efŻq( EatMm&׶dnĶe=knܸ:P ?3gN8?>m`J@>X[{!~X@+&p܍: @Ey*-Am@i~-VWa1vG8@r\48SQߙ@X3=9Qe(-ו=t=Ї>++e"|gN}{:}衇N,˫__}շ~;Jm/Ҍiԏ=صkԦZ??cM/.\Yv?׾5C[+'K -7 m+]Gn>[C ~z33OM̙3>z?ݸqc`xStɸ3Dzrs:/.;kbEiP=_m%0/>Sů Ж0JWhO3FK:n!Xu$Lnq1PJ´ʫAO7n'ۖ 5Y4Trr`V;ʿMInS#Q^T'!{̐}0iEgWkŞ ݬbwG<1X-jy@ʧcHCٙsZl~ޏdp#X^)lVv暑B C @`pVk#P~nrնΎ7yvwx~]㍌!P:ޡ{8$<`ew`?C`"EQ7tN+;mNBu82?I:׾FVJJt h+]o}ۙkBZ=l92 U-W{퍺v)ێxKɲT#V\e,눇#O%㝯jD#TjABv 5t45{ V\ [S AiV#| *aHGj]mS<=' 1sMiD`鴮9V\WQځ#^ߜ2"@`Cxo C @`pV$P;"zknb$Ψ%0vX7$B=yn-; z@x6EX{,Oy~\Jxc?cm+]{_}5عML}3gΜ8qB+ycy뭷r6G[rvɶx9C/Iy5 i8<`wzneZ4}DCzW[ O"kEnyGo58*l)c< >b^oHe"{ZQA2TI=FD󒂊56Ic}4zIs1 i``g, P &!@%w]4 yZ!xB@ Vᆱj۷vo]'tF :Y\4S |Ux6E㈳{DtCy偕~\Jx"OoO7D#<2qhT@&FQC=timQˋh+=6-984eamFodZ%îׅ:;ێҺqpgvlUvC ~Ѹq`>;Zt$,vR흯{e;<f¼1A9ƿpPu4=o鴪4 =,uH|D!r7X\QEXlHt"Xi]+=iib0VzK=BJ` ]%sv3r@&P47ڃH%X麍柎䑣G`s Ԁ'~mqq{VqVq;&(-O?|ұ-˥N!Κ__z'#(]+V>~LՙovuZk{XqM<򣇹odN}n׍;{ "tIJ{ 8zd|w#4l9ڍ.J?ʅN!d%/CK;HZ @`3p63] tGu/7?O^lsmE+_`o..Amqq{VqVq;&(->_tv-|ߘ8.C`^ڛ+>zЇ>O=:}o_7nܘqd[VkzfN7nC=;Wȡ ;%]HRW/kɭގę_܅[/vvvkjD!5qi]Lǥ݅w`=4z8jG*_ =6a%32==2pX .^Nxߘ`]+=HJwͤ X[eTK/ @`Yu8O27t83Na;&)9sk~I]Awhs]4;O]X]XOH(7/78T|_/K3e裏>Z82c#t̶oIx [!;uur on{#iQ%m<-i'>d~ GF _._ǽޫJϧzJGt12؏5qeyLLجWVz Vz&4 @` en9}@ P#:g1ѭtQӝ0}wCL馛~{L $3nW~_KW_^҈G#P;/Gk#§.+o|GWO('H- b#Dg+>Wt)3T)ѭ{LJ uA壧9=ܣ>X"`@`1X鋡#@(s=8i my\1(J|PR1]W'0vX t8q駟.B`!uC]>]`ewy`?$7o< p*ޓ?çOW׳>/ 7G׮?VJ+ 8!MJt3X@6enkx @X@R{b; yú;P%KU%N@x6EXӊ{,Oy~\>VA66M+}Ufׯ &\=~A4%2cT)&lL$>zN]@nXu/*'Pƻr  lpaF+]A߸[t;į6 JCGyy< x6E(+(t/V^DY `gKsJG4A+}pv\ϕ\cJzCo'TJ `xy)@2XM(ÁE̍B 0:x&(J0Ξ=ɧN"IrB`n+yۇ>!鐆RuCqE{t+s/ҳ`d~+\|^}廯,pUraNL\vMy%d9sG}QY7X+U  `gC@+Dl@# $ [8xg/\&[lw/nkf~x߻nQH6;5]NU͹5??5ݭm !-j)Vz9S[\IJʕ)nZ[|2-_:%*R}ge {\~P %J/?/_~ꩧ^͎~j# X7wZ?;ׯK=AR|Wݝ{tw|~]W_UƈҸGШ2e8j_ BZ-9bJ/O@J/g.x< *@ 0}9X/zN>5`)rI\ tᛦoMyǝwQ'!0V$|V@+S'm^ 㜟Z~+zm+m}$W=jQJw-7<q Zn+ω T.+g>\"Pse@7)'2⋒[7wZ_>t2_%n(:կ~ˋ?}=tGWTTyiu{B ݠ~=s4<N5%j5J? '^ >en3@rm=2h +}CV a[ )VΓ59]JOKJ_v_U%\/s1llGbuTJR.錖<<.)S\G\>㠞(f/[ ]7wZJ­mHzUy@n٦19@BVHjîMOr``מ=;]KY?Xr:  Pfx @̍( @ ` Vp+85Vz9ߚ+k:E$^δTHFrebSuXPn\˥;yX:.C -["WJa{.GOݫsTT}Fxj+=,CSG}tei+`6Z,z"Ye±*Lꮮ#:v$~իm zg/}ʻS҅UA##~ayݲl SO7]N$SḖnbD8;m ~vH¢t#1qEzl F~ cR.WN@DMbK{qdn0/ڹVcmFQϗA9V9! `W? @36@` ،r> >NSX]'#krX9.$%iU[^"Mʕ>"ãO:*a/2-g26kiBt=wi]?ӊ~.ݹvI5S:Nx\dq߸qc0̛m+]Zmh;c,i8U{#?tvi5bg=hG5.X?,}9uTA#$#4Ƒީn>Aw>wTppR ѣh$-9m8{" #ۘw+݁= ~҆%r|ف\G ]7]T$ ==mZm8;R;^!^:=J Ok@MkMl@M ,B`1SpGpF/DrQwsok܆q`X;oW׋]驷 `wk%,i1%`җWo9xd4*Wp+=M<[vG)ho>Xa{m'MqnG3hC$UݵϠh+ͺ)g[ݵ}} ׼UQhS/>S{={Vo/_̛m+=?mCb6V_v?ޱK@1D.1]~+-Pzw*:MB-7Mh2Q61l찇#Qzd|ީ2ҳpCPV]gVݝÌ*KQWSyS:ְSVX`smiÇ#EyG),ih`5.8.kd^'\2Uwl#~[NMwj] dzk5R$VWS*_ p(GW!`/. "P;hi m˘HN?}۞BTKSbOCO5v ./J]ٞ^ٿ%ݺsEwI#r2*;- sĕY>w>}oy']W8Ԃ 77ܩ 8=.uJ:[L\Vϟ?:dh1=?R;3.+=ş6$$tK$ T2tNߖh4KIp#wie[B~]aNeh)Jw S]tY`ѿ}`;<b5Voq-kxr9`O7nhۮ?R?3gN8! gzQysaKmK6ze[,!4a![cW j_6?GJvCq:yƎD9wF3sB`yʫ΃jc8uM&]m=6|Wq՞pӔ8cT]pR\1ew^4׀k A&ƛF4tyͶV]t-7FxJ+}Ef `ov8 P275e  ,c t XY|6$rvYcOk4N:jvɒGq5 m5>G,p\-Ni˴j߹[OKJ_v_U%\]Vz&{x.ĵMqѫA74ިZ[G UWzFmOcː^j0;8:ѧX7n;¼\7}Tw}W顇;O<) ]J}>:2oV J :b';ߟVzɸߚJ/ U?ӿD.+=%6I+y-/&Pu(~WֶAko?ۺGv>\c~/{H m+c+}ɲҧ^\wV\si3$\LtUn -_FbeoJ/Н%T^>d\HODO!` @t (sb@(2`^Wxi;Щ5z5nǍFNȕUNVtbȕq2kҿ [:~ZiO/(픜>ҿ,X/"Z+rfJD2@+JǶc7z[ݮ wiWH7oAgI(ooVwDDt>drE-Ǿ+_g}V'Μ9ϐ7nukeJKVڎӍwƕ #4Z?qi:4=^P#G/)@]YVL̍: @`˘EtdS藜JG[T+-蠿*Y^\AgXVetuINUb^:GD'WS9v~.%MJ);rwZKWt}zwkUu$Rͭ_~+}ɿwK7s\iJ_^t 2revY5tՍMq{(~$7}/ iev8v~|{gx;-vov~p'rmo+nV+ڵk/SO=% og?￟d2oc]&VzV Vz&4 @` en9}@G`Sp,[񦇞swbZK:_mF8Q]ҏ{L5Nw6vTb7 ĭJo,!]SgDXz OCJ]gAz&tu2.&;gLuC ~?R;-Jq% `/I*rhU.+Af9v~ش}bPcOFR{gHh4>}Q y@ uX͵Ѿ|TK@נ^)u|Qys+(B0B@w`h@@o  3QBE6/\\락p>ǩQBm,N>|u2.Fޒ8==`җWo9xd4*Wf>UOoe6uhlGbuT'>>[ָoܸfE}u֒+w}>}ɓ'ח_~)ueJ?L8:|VM+}G 0~@@ A+=ɁcV&һNFXX9.$%iU[^"MʕGm}QqoR)5\y~wУ'R=F!^xX&b2eү_ꫯ/;?ү:8gKE7DZҏ.B+Vq; IxO!@ )8n[6|+ {`wɱs\isIXKJD2@++}7ElGbuTkK>{! _5dZkp{p;mAN}Juz3}__zܝ*Tn85]yNGa4!AN,S[o)>+ ĉJKqheJ?L8: T@`aX ;@s(s=i  x+܆qBcWVzߚ+=ş6$$tK$ T2gSvx)VGJx wԪ5 ߹#B!k,/pκ_g=8uVk^|gyF8{죏>kqVweJ?L8 5!r@ 7܄i@Fen3!@&wuVz9+JD2@+S>fvSN SZҶm)N=.Vno V\?~syzzң-mTo7 57TR5.֮wmխ1:;Bx"NUt>x3xYJ$"wUl5γkҵ|{W?z)}_??l__weDf!> F penÂ^!@@y7>c~ޟS׾Tϟ<]D~''kbnX嬌*rhUL}3R̨v|gۄJtN.n%jVK]r]Nmٍ%Mb8k݅U@=Fu*`o[} TRvu;WxD<H$5nGz5n'kb~FtQG4hikϕ~ } gΜTNteFeJY~U?7ǫb@@+Dl=# ͒=Yh?+<lj{SIk') vɱ:}s\is1X鋡QQS|!ptΕ*7 <ި{-a7JJ,m+][[;zH\mEJ)v~pmb޺Ӣ;EzJw^c]w}W]T}O>}Ii>/o!ps \ @G!~t @`lH+ 5b :SN-Ômjȑj`-UiT^-TmX!{xg:6kawSls- 5Vz?m.I+}I}3D`e la=3-7 ƒ @"2 blWF[ֿD{|8]z5>՝n<rԭnڷ)ǓtgwF1';Wuq/eO:jm&/gJw#{,A~`cmj]ZQ@)ϕ\e++-J>JOB t `#t@RSP")oMض㛋}NM)'W*;e\X:U;mG喻Wň<xf۶o+2 BVu Iw/XNf}; wݑO8s֥}J:VzOJsޞK΂TYic_ |SGJ/%bpCMG`e&+}-[):_2#ٰҵ]|SO=u%TmV577;  J_d* &6ެ @vt'͒Fum/0r;.N+Y¬uyWOӊwRFΤMSx64\ MYo֎Aq덜X]7tuGݪqr\9NX[e[O4WHc]!b2,tПpOkG;3ѫԖg$,2ӗ- !u2oӟW]/M/C.m+ѬΗ} i+=Օ6!Y X@`/ !;MK@g}z뭽k!5# @`;wD@x @!cG"{m ͕./g}Ilf+XjЙÒoJoXvr^^[=thlU(jtm6'l9BVz Ig_* VcHsKGGZJwZu2oֳ?;~«-) ]Szf'ΔFιdi+=Օ6!Y X@`/q[׍Ҳٻ(A3d@VG+}uSFx @!ZV`:x(Rc/vI#8XkNC*#z#kUEH*y/޸AgmבTzDԗ~XF TX;۷Fic٬}Ĉ")o4\0Vz6^kVcVz[c+KZ#‹?>SѾtnj]Tm=F>+%:}s\iJ_^pPX3GVʋVe2 L!>u!#OC$6T"Âm zb&tY.#.VTH3vBT@w>D1F`*Mr)%ϧL7s1ޞ!+ޭs,Ұҽ]ݫ睞GXi]wЂob{`w5ų#HxVzWbw5NO2=Vz?m.I+}I}3D`e 7J{fm7Ƿ9 uJ_|- #ƛ@~+(Ny=Sg9F-><VzJϱHjy~X]'c@ɍY>Jhvs`/__@@'§? !>e qҋ?K`o5|n0 @@˟#" I7 Zrjk7ҍ+xjS޺C `8akk(ؽC!eL+d[#%=BΕѬ΍I/lJ/F& ~Jb2Ņi' `o3vn0 @@˟#" I7 Zޯ*<$'쪭Wlawɱs\n+!J_7;(-akr9צ>A%88فg*3#o|E3f-_4zq @(VzsD: fq@CS0M%Jqb/ +doMEpXɄ~Jb2.+]_ +T7)7;+Nf{@4)fDxD!`o3vn0 @@˟#" I7 CW^+= cl♷YgP059"Vzmb#CCX _v> eҲtv݄0w"=rlav5#t;aw+}ss@'^! NlY )xɛeRX/=uv2#M4ڸ{tb{àDX]'kr艏^~}K"d"^LJt,VDTVzde=ƭ' 눕n;^Cv9z2f]F#qn:≤=+lg{*TnI`:FQ+ +6dz?TJa9>U @Nw${N@(dA[;~S+]B#˚w.ib/\Ts1}V nux#/ZO/N4~DǚJ9~-0k׮J-X(VzWh2煨 Pڌ{߭]pؑK[NI,ok_+S؞ VSVFmCV1UTw!^sRoƶnKہE#ffy4GΕ.,71HP6dD ̕i{yrx9sA$ @V:k ^: @tpMb|}_:'=y{mxǣ*`FivnSOGV]߾e=npWXϿF;ȱJz Ҍ1ٿѦy)_'U>)P]č R=6bTiJ/ʋ^"`+ݏ;7ޘ{Ϯb\[.m]@4Mxܰco6ZGgCt;?/eA/Xӓ!VzJ*4T+Jj;zN+1XEk[[e@ `}46ޛ~@ ݕ+=qk]}4M_QYFȻ,VB,ҹx@ʕ.Aɢn}2j$kv!UURgW]9[NyiDc]r8A^MX]+j:z V6ip[޶+];{ݽUCǽחE#fCv~U-7>;uT?# ,vՖlVU F plÝ^!@!Z{>znzԙuޮ;;v5ޜmbtOzXŜu(_XfM~zHS#5Xg '#"Y% *Uys<"ܙ.ZH4z٩G6U%qU D1w@vO}iQ)NY9e<iWSh*l1· ++/VzBT(@>4lOk/ y砎zr!,bXErH @@t `#t@ 9tY#iVoGV83kWXWf )KY`q6D`d;rh3ۚD0CR)r(tO˜vrn׍#zAf=jCdj`yJ/s^ EJG͝;>C]l`35"V3~{(+S`9^t  @I+@`xx @`=Vo*KnF5X]7n-^Xs| i[+bqN%షuPkNʖS $ínw/![-9TvmB=Zb0R~;xAGՍ ^xij3zN|\}`PCLK޽;$HڜuiMs{+A]hjjLS}e˼b9/DnQJ/,.'n3D@`6 OC A`t\wg_},_hV{C|yW@㡃'^8h"JڮUWE;sv/79U7\p?i8NӞ2ӦT}٬mrb~i[^L}N_MFfFJ}=qrEf|j ۜuc%S;1RCV/_S>}DXe^y˜@Q׸q>zXErH @@t `#t@ 9ҏ~ $>GfOgȍDN[ng]eqvɰn&^M氽jӢHxApjǫ=q2wѲSG NvfmzXtĠ{6~.,Vᭌi&;o$7]7ԁoxU:}wI++/VzBT(@V>>CG!K]R}$^C.|bXErH @@t `#t@ 9`;J l@JmfYŶw\Rc*R;UUuVSXkwيJtǬG$)OMT!d·^Gs;j?؝n<"otj?LG@Ġ'x>oe<ѯt5 VSn>1!|CUSs~OnzVzW^2煨 P­!SwRQ#tr%|:Sڀ 7n 1| z(Kz#}[(˼b9/DtYR2=en:'j=r.j񑴵MQ#æ#o~]Kwo Vڀ`/# J/ʋ^"Г+M9Ǝ2ZN>HCOkyOjH~^븷:ZDC|o[.#2t?v{vҋ: @ .X @+&{œG @sDkz"۷ru7T޳oKN2/޶mVt:0Vz*j@\ML$i뿧7ye\z}vq/JtٵZNv4Սvn]F5'h6:J]g*NӁ깎Ĉbߐ%_aFR5聸UW} 2 @V\$i>t @(@jwC%aK=l's3ӝfվk)wގitՈ^#q!|H9GrN@,v{l?Mq \1\Ѧ^̓.I7'J/$&V}Ÿk}w3K;ٵk:c{{?!-Y}% VzWL2煨 P.+}ή,w}،ssE^Y\N0/g. tJgm@X16+tn~H#q=C9Vc>zXe^y˜@Qkk+rQlJt#-`u 7˙ " @]YVL'!@ cnu;yN$>a{uzkitٻZU>һ}z`[ht+}6 !Ytg ./yz#Z04"c&~ɪk ǸaN ++/VzBT(q{RJE+`9^\  @"ڀ blWڀeJȫ,H.{;Ln{yU+Ůbix!-#:--%؅]7g{Qw#ڰe!JHWu-4;th:.2U20ʍm;35l_Y?|9kLJ#x1JFiCnfL ;".R,UʟI&rPuGuǭƙa$TA l(&y0QhƺPA䑯PpwߓO?]k}g}׏Ïg>{_sT*K#b1zV!ӫ܂(F+sHߟXB<3@ @  c|: @d~巾[< N_} H),gJlۮp$"ʭk(e?wI竎W[uvǣpsjsm,͵Tّ^]8 3j'E$9w6ł >c 6;8ȋwb}Vc,J:cbȊ̹cmd[L3ΌڱC1g<R(CsWѣOmsҷ9.Dlɟ|d!6B€ @ҙvL;EHL^c%=y;G3𪆜<A!S3!{<"/0 ҷyJ }?#?%Bl772@`3= ww. @g'0Rҷy8J M8]/6#'*l772@`3= w'bK*b @ @  c|: @!xx @y{?[" pvXmҷ9.Dl3xx @@E3=y9@7b$ҷy8J X&noj8 tJgb@1>xx @Xtq><̱zFo V:246B+}cm QA a"M` @@'t& !@E??}w=V  J߈LJ+}BT.`brS9 @ I+@`#t@ pݢCN?;?ӽ {qMz3xcorX }Qn7Ƿ4@ `33 wX  E\sRKPN@$O2tsF^}կ~3NU @-[(QF > @B$ D+};w;cA$3@`2^~{avq@nH+i?x_C @p}~C`ogp3D 03&JOKq;γ> /`vq@nH+i?x_ C @ >oD@ vƂH2f&dXѱi Z|~کB!@!§i@ @$9G+};c L| 0VdtxZ߰O;O8 @%~[@*>x_;C @p}~C`ogp3D 03&JOK`Vi  @o˟!\E`Zbg@ @/u@vƂH2f&dXѱi Z|J?< ܖVm: }UK @ \"%B@#1XI&d>@L+}2:v<-QoX駝't J-Z pQj!@ K>D!@`ҷ3f "@ `OFǎ%iC #X;,B P7s @!vƂH @`.XsRKPN@$O2tsF, @BK 5( @p}ƉR 'X-dL 'c`CO!@ B( 9@ |;cA$ 0H^_ a %R' pX'h9#fIU @`!X Z@ki @m>oD)@'x_"}k?? J?ޘ#@`5X髡8ƅa@ NXL @;&C R:@||}]89=ǂG+xcJ `C :@`37 wZ]9ZݻwvJ؀ 'X{-b]_o!Q@ `/ ,G˱f@ %Xb G?5轧9Z?p|#!J?ۈ_@`FX3¤IƈnB t !@G ) pR_kв{~>hO noVp =Jh6~ A+} ʴ@`!|^,B @`'@c@}{J_| BäZ-@t 'c`CO!@ B( 9@ |;cA$ p eh%~ׯVovs݊'B Jg>@L+}2:v<-^؟v8 @'$~Aq8cIO @O!= H@)޽[XG_|W Nt0tf 'ciGC p6Xgq 5t @`>> 'uN/ AV~t0tf 'ciGC p6Xgq 5t @`>> gyG __e{,v~S`3= L&>;/O;pt SJ?pY@h}? @{&G!@$ʏnOKʛ;z8`6tXVipa @`V: {ǃG @#ᆔA8;o}[k8Gk7K1XD+}OE p m$ @ R5 {i@ v\$ 3_N4?@ [ G+xw9 @p}1!"@$'?׿@ M-ߙ=7R p"X'l:fI5 @`AX ¥j@K҄ @>ogEI@g V~XSzF+}54t,f( @&~k cL!@CBXV:N68ܺ [C;&#`Fi  >E!l6"@ pf\y; V:N6plJ?(G@`!X `K @8  %Hgu @ U\oud m`dFI_:Cz٧~վVa_[6IZ]V2\8S 3o2@ ER) u{δ@ \P  J_YVn<4ZR?7%Օ;rҏw J?ޘ#@`5X髡`0CIG @80.]Ocz@ \g絫ܺy$/WJV#WKzwѫ/bz"\Ot=yV3k_RDOףz^{ogΙJ?q+xcJIA` )?s?7fB{L'iG.@ pxXb:<  @`o>ۈ/ e `^q:5W$8JP,.lIUw2zuƎPVǝ[Ԏ~ 괹E|H _V>A J?X@XnqT G$~yM @8C 'FUγ8 @2Ϸ<:@`}XrO?¾."ZEK4a >e{'9L VᇘBG&*GA {1 ,]Hw^ɏo}uab/{ܹEX鷠N[$- 1Aұҏ8 @"~3y @[&G O+}4AL+}c-b/MBσ{) `c}? @'~! yѥo @{#Fx!,K+}eݙvA+}-jJu">nqT G$~yM @8C 'FUγ8 @2Ϸ<:@`}X黐 reXn+}iԿ|H'N++}s!@8<1LU#.} @6b @`Y[{ʘIDAT|~x@A@o 5}QMk% AXұҏ5  @$~AKyy @'Lj!I?ykzkN `/MBσ{) `c}? @'~! yѥo @{#Fx!,K3O~;@ЛBoe{Ծ.uyv ypcCd8tchz@ `pP prg) @ p}1"B@kج{oԒ7~OV/S>zŗ_ԫ*J¨|#~k1dKk^@;PxXki +}δ}|!AVbc& @L+K `cL!@CBX@҇j_+_ꗴ]Kzҫ/'GWmǎ}ɕف߷<-mv2kBbqY uyv ypcCd8['~XCJo @`mD p*rj, @ p}"<@+Vzm啯H ö̲_kzO=De5G[jsF[Tᨹp]ӮVz!G幒C83z] 21V޻9n ,sֱExELe.}]1j IJ_@BsX+@]. !pg_G~OO0t VQG~A U'|k @nK(B'!@@.3XڷDm2mu𶠬* sWOl?GrjIz";eTllmvnۉϭ#[.R6jx↲ޝi k+PmԄi1ꉚsG!T+@gqzK_>uK1Q~.fw|ȽEw|X JـbCKFV{;?'@ MX D୷޺vC @@&KKy A J:lyܲ~g۪` }Vzx]vڒ;[іrIՐX+QVzkKpk+=kj v+6 5ܺ9KFNmqaop=t zxRGrz]3V~XSz4V4n%pZ+{o+]OXt @XV:i @ @ND/WK5^X钤1k❹ҳ3{,C[G+]Ֆi^J!D5޶EswlE+]h{TsGC-VzC$QaݻGX':UH `o}G!pN+]i ~a+? qIM? @8( @ @ Vҫ/yageYqKlg[ڷV {_r~w$z8x(z)v׹b!B!d+ pJ aV ڮ¼„\0\jNma_]#]J;ҙ0tf Z߿w^V\:i @Vz;+JB @ @d+=R\d{au%QwmS],[!Rҭ26D5wZK6HʮJ#33v;(V[5j AjBrV^* tzۦi{}~rϻZi;l=[4Q t7'W=+} K(}N`dsqX#@NhV6% @`omD @ @vOJk\O~H8Ǭ*-!FGpRnX!VmUҏ7hi KlVGyVҽE/X @XVx @ @H`Jw)K8v7*Y;+/rw[ !GN 4PAFѕ=]M8K!cї { ҏw4J?ޘңiҧqc/@`,Y߿{nT`,CC ,J+}QT@ @ @g$0JW*kz;ͶK^[ @~ԣߋ ]_,9@0m+xGC)=F+}78.>ofgtmKcR @`iXK~@ @ @8iV( ҏ7hi KV=3<@Θ?q,=C @+}4@ @ @";aW ~ VƔM#>{Ac J>tcQ @`X+@ @ @ @8׾oͧ}j[/>'K٧?>?PU4z46ѣںS[wgDž`8~1G`O^XE[?l1]OXt @XV:i @ @ND [+x&%i UްW͵_FYUyKaţGK\F mQ1vwJ^ҏwJ?ޘңiҧqc/@`,Z}ӓ(@ P @ @ @-y+17k^k3۱֟~U==џQ^V^ҖgTJ" !)˸Cw*ꎔU.ҋ78}Q[Ttflz:+/VXSz4V4n5:J?g?'$^O;h @XVi  @ @NAJKmI=lYzH v$osIᲨ-WbuF&rU_WSOܜT+v}Ӈl#x{M#_4M ֗Ki  @J_ 5 A @ @YJwx84t2n%v}0]]عƵ+}NEZ#%]ᩀrJwsЫ =[YwJw߸ҏwJ?ޘңiҧqciww DVc&{A 2 @ @ @e?Ήt֬eKKȕ'x#m[![ǫut;Q8g w/F݊%Wɹ#B5Mz 9#PC+=^Vzˀ.W+x>)=F+}7F+}kj `O;f @+J_8A @ @ d+= ֯FK]:upmѫQ@ Wb\%U#.h%grÒʁœ(Žx\lq%wSO.UsΕnPc&h)d[RV}XSz4V4n5Vcl|uqVc&{A 2 @ @ @.gBڷȞ.;DxW^s֎.)Zϵ1D[í$#1cɰYS;xGm["Zj KY{ҏwJ?ޘңiҧqciPBF匑3VHU7$>^ L+}e4@ @ @'0`_1ɯP58}{vD<_YLNv ~cVƔM#>{M#~˭yt]߹s+0+}1 @XVi @ @O`Q+}4 _~qQ$Ym˻!uҏ7hik\/牤RJEK'>|ϪdƢ²?b1 Vc&{A 2 @ @ V1 zqBX;aoL4XӸ4X釹/ԳO{]s[ڢ?5tmrQƢUa#Xӎ@WNs @ @ p|X'WF~'ҏ7hikc\h/2^d1\jS*I݉ܿTod1蝳Xӎ@WNs @ @ p|Ӭt%ʞĊT+ykTҏ7hik%R֯VԴn+]z9ѥ롗^k/%=R+}a]EiL @`eX+9@ @ @8>lite1H@).nڅTҏ7hik.Tֹ֯ϿWB=na]"]>Sz?E/[U#Qҧ3  ` @ @ @.$q$N$(4t=dHGv)&COWy=TRzKJ@QI=-h/KʭnݍF^v׬G!YR+̵R1(kX;aoL4XӸ4X黾*}UuyOץet_mg-}yVc&{A 2 @ @ tyz8oi%aKF%KBFKv&Tf]s +zީVDr.Gݺr%j*\ RmTHk1J?ޱ+xcJJƍJp.8iL @`eX+9@ @ @8>[vK:"%¢ԫs(_8!|rjn k;Ԗ]cj`ƌV}XSz4V4n5V+|(~ $MiL @`eX+9@ @ @8>[V"Gi٭tg@PD%+mQ$Gg+L_װҏwJ?ޘңiҧqciOxE! Xӎ@WNs @ @ p|JW2oM![F*\ʧ'Js'Nd.|l^}ɕN=]U!7gdOqvj}jsmX&'!~cVƔM#>{M#~ ' Vc&{A 2 @ @ @ҳLV6ks;z.Y\˽݉#ٹ-sNWCs_ÉU7jq[}z,F6J?ޱ+xcJJƍJ?Ʌ݄V${A p[XO @ @ p@}VzV8'rY=;WPWF'~VƔM#>{M# ƒBȕ>^ L+}e4@ @ @'n_,(]xhKԩ$J_\*ve>ZEq}GaeX;aoL4XӸ4O pJ=ܴ{A ` @ @ @,Vҿ7_+-y(ڨ쳤f[-ԟ+4X;boL4XӸ4JU 1@`}Jvd/@V&2p @ @ XJ__EL&~cVƔM#>{M#>R!kXӎ@WNs @ @ p| Y9zQDbrGR3Ж/I;JޜV}XSz4V4n5@~IOwÿ{ħϿV8AOJǣŸ}z˕ݙd wgjW_j)FJvd/@V&2p @ @ XJ 4A=:u<}mIIKx䶤L[B̦`؇~1G`O^d+ŗ_:!OZW^JŞ۾O\R,C'F]w^ `O;f @+J_8A @ @ d+]^\z(&l-XQTT{l=J?ޱ+xcJJƍVz8NzDnoQ1{(uHyT+X_I깿u^\10ܨTު1{/ ^U1@<c4jB@`KYxQG7!>^ L+}e4@ @ @'B%C\#aזi&UJ)\.EQkQW%s+nKN5G/sF$~cVƔM#>{M#`+]c$՚kK)ZJWhF_mm׎:5{xIMkd;f}JWCqiQ[9TWQTamWUR[ṯ;zbGVHɗCZWSJ_"$maO;f @+J_8A @ @Y[OOt#J+6lXv:I]侄ul Y+QPVy\IY &G7*{TXu[Q"{“$'&VǾJ_[wC;Ï+}UDX']X?~@)`b$ @ @ 3)jxuK0vlDBJ-6o+]Od_Vz]vUca8[y"^R̪)k+nG/; % ԉ~0VtS=z?'rK?zhKV\ uLb:dX!KX\6JJ指4Wgv+=~:߶ٌw7ծJ{< @7!~4 @ @ @.ur/>gdԶPdF[Ȃ5ҝҏ"xXNoȌCC٩Mqw"fUCNN(5ZvYb@ Xki +}Χm+ʣnXxCe+]WqY*䱇UߐY-[aϾuX;OѱL?aj9",sMCWN ?J&QQ[ߥk<  @ 0 @ @ J"&$r0vl9" 4.Eq{6qJP$ -I#{s̬nXЉGoeXg)O5#aK$~1VtS=J_ԀI>-lpNsM_Z[QWqQרQdەo_QxR(i_mGoN_Jw|Sw=1hao*Z\Qsɻz\`w1uVc&{A 2 @ @ MVzMFy(dιWK0JTn9eFz;EH14R 5#ܺ]w3h"}#&oҗg|җ8)`Mg/1a-ǖ\+/v^,9QP[ ~8] VF>B @ @85MY[7!~1VtS=JcV8V&`ַ嗏"Wy;椒kTZ'c{:K%3vL+}1 @XVi @ @&9iFb#`}[=t%޹s+o+[{\m5^jD!gpcB T2]v9tN V. !@ @ @`:wҧŶ'VVG qePO| = YtF[$R{F'bo5vtQ8*t1UpJRQGoU(+]O0 ɕ~V6/* '$~8] VF>B @ @85Jtyҏw J?ޘnGsY6uz՗w+nINo^|E=Kr͕Gٮu:_$uզ˸=j݊J2R ~Rbs75ɧb|L1ey#xN=9!#czKu.2_`r;vBcc<D+}1 @XVi @ @&+ݲڎ IrT?G"Bm'oҗg|fҭ&D.ۊyxzb S?ן!{GoJ^ L+}e4@ @ @k jY,ؒs:eFNfF%?3dNBt;:z :B04 rr-}ɱ `}[=8]$N!smQ䳪J.]Fy8oUV|vVUgsɬXxSJ0=?]YYtl Mfi{^:Oyp#B,E9;T_[%~)׮Ѣ 73Ң&/ݢp  3J?(G@ @ @&p++=0 l[*m}U]-N΍zl,],E:x#[P΅NbT~+X;coL7գuziV75ɧc+ݿTY¸ ٳ1;'b9׫12O9.*96Wz1]k+Vä1F@`ёx'FC9~/-u,I+b>:MZ:ү9v`O;f @+J_8A @ @FYo/|ey36˳8n%{6RaTWác&B°$Wܹ*E{EJ/\Dvuﲓ;*n V A9RHU+rWbwGlי-t;~U/.N9xQ'X+WVS;9Wzڤ ?Y_~g_Vzt_W=s=XNXVt pXge@ @ @ڭtO??g}dV'?cF?zw653ͭ=^3@+}ђ ܄VM( |_/ @ ?}{_ A`V >l[u`ok<teߌz#Δs ++V [X: 0H@V>9 @:s>AuNaX;:l6bf$nWpq`,gS  @`3mCI`}+]mo5F})iXJJ{\ ;sU5PKT8?gWh& }X=-@`mD JB V: Vxyv>z^zo}[V!NA'}j V:jcwoV΄@ `3 V6 87{+|E z5eyOtKo95=cT@`J+}޿_>2{???.^d;Qg@h8P;!R3 >JJrָ롍ZZt=mן%h֟P?֥k_kCtFsRx_vՊQI7ң!m^ t  V. !&N@kfL9[3Q* c>s8T`esϽק{Goa /گ# ^C౐.C}l rҗcKJw-kyLq{UYϭ{Z%rowޓ_~QOQbTV=:m\^ ʋrGޒk+R(Z/}k/E'+]{K ;XXz9/@ X& 0V:!  X? JzᇭAߣ>*y??o;DO6GJr`V/LljtW ڎJ/s[鑵ݑ+"g V:g@vA+}DFJ?]6EY[\//[H6#] {F^?iq.U^,/y_KQTɦ  JA ܎Vz;{-+=?k_սFN%`==?h&L >lk9h ً^RwKJUemQ ZmvgkWX ;z}UOXF]-NJwyYkMt?" @`O.v@+5 @j</Gr{Z Ͻ!/H|6\n ._Y-t0q"7:/j pfX;hDVz\w裏ܽ{w)}{L}{zIܶG>򑾱0uv `p2 psJ/e,,\'foJ> Ȓ84ZEiWȊyRM@`5Z5>+]Mn܂x]yӐݣ/-Vo*_Fߧƍ V>)1 pbX鍃 +;;}]K*Űo˟[`P  y X+87y4-?ֻ3-B`eXK  `/j!ܘVʫ4Ӵ>+]ztJKY+s3"V?< 1iiYSt?#of{=*ggr%P[E[o~zoXVrl@țO"3ğZ繕t0Zu#Ҩl݉@ y ]J0$ Y 0/iբr-gR;-W2c;X@`5X? Jog/i޽{ <3ܰ0{ph) `_ϐ %ں A`=ZR J v 8Q) @"IPV^/ig+=~Ztn=e\UxT;K@h$ 0Q,&> _گtVTmݻwX%imjWCMCVz p0X @] ABM+` t9ʃ'UPEvzyz/?lt< @<38s.Fk@ac K3v}n*?3h 4}ݱSJ_-5C#penhM[ ʁyR&QKNb+]+-?UIN2wƦ bak}x_QT|% \{'y ]J0$ @ hQ[K{e=B f@"> ;@ 앢wygVLt=з%V:.#9ig֟yKF[Lӽ[qQF9U9$o5k7 y/,d;̘_U1S杝u̹pf8ѯlQ?R 8W} AqTr',V[Z @` `p%.C7'|+# 8IJn>(@`QX;hDVingX/oo*@ҙ 'M;m lNݝ3;7s^uZ%Vª͕kI\{[ןz]\R{\XTM[KQCD6wNm+)Vz=0:t'\wFEG< 蹛C+1.?"hkJJWT oV[Z @` `odu0 RVK'9_@wш!%is܎aN4f҄@MVg=rg8zeg+]-+btVc~ՕOKK4.]/'Wgڼ%џURe׹kϻ@}4oqy?[:m"30tw0"_޹FrIbsF @`w1L @`4,@S@ [JA ܎1V3C+[Æ`j p#bo8L$  Jgz@8& @ `Jvs n[{amE 03WNsD`J\ҝeHwZ!7Ls{絝a+=ɮ# 9 !vv]: Kz)$[^\+=X,W"x9WwQ3Wz&e\Vő=CtN V. !&?VFA @+导ۣ/nAvmVWqXqAQle̕ J2sxˊmO$4ض]V}Ь#zVqh KLMg +[\sJ{)N="zhk+(f#u:+mQRXzU/t\DAK]>< &%W+9M9@ X& 0Y @ȕ> ;@c;mZ>{ןմ8/yyR 9WzKݶ,s/I֟AYȞ˨。GY}jp:+qs!xssSg_qEZqGWZ߈Ԗ"tllEW1b,ߠ*~0^w [ @o>@`X[X @ cJ_ BX1Y>{ƪmVFW^!Wz<ؖ `oyt 8*+$vr.=չ@y܊VQ  p0XP@"~څ @8t>AcO;ʛ6h?Vz4Ԧ `ozx8(>+]i#I,3J٧?[#o[^añӾܖ~[J?AnAF+h#J V~ @`/@`GaW_ W_~=+Iε;V\$o!B4X=q@`k@+t>-{K1Ag&gvJ W-G[ ori8)4)^X}5;jL~+&<1@ r6@+]oro`>_!`og,d2dXK,P'O+}a!@XVi zj+]n\NVTs }5b< 7{cNU՝|oF_T(YrM%Ӭt2 oYfkt$D9j CB+}O8@jX+4[X鳡J{ZK`.+]7f\Q#=fJ,נt#58n Dmm䕸^F'~>= V`!4 i>Ke{(ZQޤ̋&&O5VpQq\߻&[-=ƒsbt̄+t{zCR  `XP(@ұo? ^pAQle̕ V5jr/~[rK`Ro#,X)v^3s1T @@}̋Z} ξM[|F*^}[&ڼwYܷtD#-6EK{]TO4l6tQmlD]ε@tg7}PZRoj!T#bZVz1ٵb4Yc `sb @`w1L @`4VֆsG=oO= gVǂV7jC g^4Iٯ2J BLݴl*S TL}t^Ȼ%ũ5#zy{_ &}kX=pQ@aO{#OQQi 1/>:OImTsfQ=N'Yyzә-Ʊo3z&CJs>D+yו{JL90"}RHU:$*Wۡ_C`׼PtTfWm3xbӇa2<ن-Bf!> ;@t;yZ#M97Q p@[EbAJwNOdnV.[]SwIoݦm' 76N+зoD{pB&K(^R0!{gڮBX^NJ2{\w:lƛo@x ?Os{̲8F%kJ|| @ A @ xx/x5'KB‡{GOV^QkqBmݜn9KM; PA]SjEM7lC7x^d>/þUәo# ^F$DR%EOXt+3,xT_Fc1u}sO(+.PsE=^&kk @`X |J@KJ/{~b<MJ-?\dIsm/9N_wº+lGT fATܝ-q7~y4| ý(mKۅ]DC曘}wXe> *:1zzfܗڽ7zȲUMYǨdMX79( @c `%Fy@ p1WDby(YSjmoΟ]a~ ;T@i=b1ak oDoi=/ub, r'*d^ڋ*_,V3IA>9ܣhž }y蛟~S8E;7oXm;^Oa+=B[Qy.[ޤ @`;(!1ܰן9xXkz l@X/B$M Vv?˼[Vz 1 5*bSMG'aGa18׸|I~)rSTs PS;#}O7P:s`پaXYZ VvD@t cJWM!/mxȫ]}|nט:>/[ gYRļ4 u>=χVz_`8WVzJ9Ejq涾^b%(@8c~WA î^p +}C!~vd+yHm6MYȢyrsIrz)kg=l̕+*ߎ̉ +=^r&#?ݷXTоq[Ztcɹ@RG[ YA ~8ңJomJqH @Jg@8t8tmkݏ\+N+ݫ`9?_J7 '3Wz&]FJo֬t-Ţ+2sU, }^xl/fy:EE+f`tJ|.+=g/ZHW v_J_ZQA&J?-: 1Gܰן9xXkz l@jsnQ (ko Xep/-tP. Օ)½+z.ZNʣ #\o%.=F'E/ +.X"(bڮ3B0yL= JhNX cJqH @Jg@8Ytܹs+SZ5j0֓^&*y~]Y lJX#̕cFݏPUйfEy.J"`/1fLX lֹGFI"PFIfQd+ASs,jV^P*G JWVz_Vz6:'dcjkC^@w!@EzKh6*%:Bo]xv͎!@3J?-: 1Gܰן9xXkz l-Ǻn%Dn#]z Kp$`r|[*Zmh%mWG6; Eɸ/tޫ!Vzg,eQwƼ%ye|WɨjX9  @X@#P['a{)K6깥(os+D.R.ßݨ)bjs^Xq^Fq}M;Ci>g昳O\Œ{rP<^ts׽R0c^*c5͵?O /N4麵w'Ъs`PyL3}tT؉6.'w<P fQyw޼9!~L~|'Sl>8ZՂ8U쮨]Ӗ?GUE0 cAGw7җ~>j -J?-: 1Gܰן9xXkz l@%b'0@  p:Ε?~kk뇶6̧~F^o^KۖMމz@W;5:w&ܯN/[ar[QVcwIa"mCU0*?_w@F`Lv#p nXZ<5=C+}#B `o8L$ `3 ? yア~c[ _TusokLn}\^j8F V>ha@`aW?̡J?XS@`;Ywm\y՗KUOV78&צ{^O| = ͷt'EOJvۃlG6vC?vCe ҷs&@ҙNG`#V@ J?-: 1Gܰן9x_ɟ̳ @ `_}!Lv1a?sh$y{otd+=RbK9Ee}l-lҵ%U[^ztQH+W QOƹMq~wz}'[ 5e<U ;iz u+^[;Rc-;iզz> ${{uvM04bzJboL  \$pX~/ ܌V @`wo!'p z|ܰүO?yZK;Pw8*`u@ү6J+}gx C @`~",@]aW?̡3#HI?k@` lۨ,eYODzh l][ZiֵpܮAO?[֩m`G6ÞfB^!v{_1Tob^5J]W5Cd[3'^dm=:U x+} G`b @"(@`t*j rFr/Ŋ]ƖwwU@|gNɠƢ˵G&շXbb^b=T\ܽ.P'DrMk1?:yeUfsJZ<*C˿7:@7 aӣ^tʡ/Ƴ4 =I19ԨaZ+皺2io/F0(]~X"h@aW?z̡[I?q:@` l{i"Z h[S[ř\mxgkҳ׎t~8xXinWt`}S%#^ZJWn,}VjΕn#}F"ү\X[8 @ `_DD@$P[?N{ɋS^a{6O6*A?vSf-~plUZ/:++t<QʱZjPQ~t[4GXd{*`Ԏc mb#v [hM{3>ˁwx [`yD[g㾚}a'猝ZmK,y.L;?z#&wa!8]V3O_l>*[}nN [麉+-Y.olj|FW|IKgQzhJ׾B t9ѣpV"ZWX-}R%oq"Jn+^^k[YcJ @h!B2Gk8hL%:b} 5P-={H8?_077˨;o\ݳ\Tb9W.;Knz#Z\#(rXD î^ +}C&o*3zxg9v -Vz^Z 鼶m~;k ֠7j貕$v=`b{V 8oi,p^qGxR+ V2-zxȕ8B \U rG7Ń+}#ǮQ~ҷp&@.JvI࢕ FH~TFIj?~k_olʻrBVm086:@]j-u) j]Đ9:b,|q. 7{X$6W"XOXOqj : ._PO1EFMNzu}s>sˈ&14mL >*6/[wwzQY:"ln4#Rϓ) EwP^eQj9<}-HcR9M^#p)w/dqxu}cZ7'842tF[2xGʼn.ylN~8kN_:7~,9fa},1_ l193\OSL:KQ².PIA&ń/?/M`ACg%p z;7g-߻wVҽEwA+}JKolL]@3fZ-V@EXQ. \ҕC_[^oKΫ9=9@]X+$Ywyt1j5} kXN?}UN%'UN_zs2;f)`7zQh*qa}S6b=1ʬ <,4gde[q[߉+ KJ7:"'pǞQ4ИƜpgd4fD^G[O9w߆" ^7f;㷭 b^W2"Q\ 귕w^jށ] oQNI.F'0#CD6M0ɬ#^'#akss:Y~z[OaASv(_AM2UAVlz3oTX]1j7>'!;s\Q5NX8zV=4%J+q?陪ɩ?RvN8]/tyVEaq/ l ng!G߹[sZT[j8N[>d ס:Hc%Dśk(]~X"h@?'GH=}`}kx?`t{Gn-` p07ҵ*[ѷNv5*yl+``Nw @G%~ԑ_ JOa[v"rHBuV:?oBIeU-p1m,X[-Gў#,?NyBcet+_utc+Qͱd&ʊ[.f*LN+`q@`/y{2SZwPA3s ӠohUΘL5Mp"Sp-ތunH0i sqlqňD|~gaO|"Zx}ZR" -ݾxᱳ hg/,ƴo/ע<%.6P1ܮyX_C#'Jyiy~8 c10FjD/YEcɩ5L!~BvDCkV˕IqRlٙkjԹ^(D89MV磖<م~]w}uM"q+H6E@޹J衇MJ0IJzX3{x;UQ~hiG[˪tVz?2Z)43jdyj g˸&wɘW؀ S0-<铞cG#U8a|[-G>\y2 Y;;L|>;;xE^i55M2~淤֣?1Nm13k-_PoDGYQCNHM#Ⱦ!J6NM1|mS|ץɹd r;k;V: @ a"}>Xݻ:BHJo_̡$ GX{;L:]dYj~_ѣʍ}Y3e wk/\V^FYKW`bnQ`J; cg98k/إ5^"|Xc.oa=:bi[w r5^.v}71j#R},ӬEbXvF+%/՟|:~Ou2 :N%7UbF5^:;iT ȖdL"|m9P+$ Vǐls9JG|J@H`\?׸:te$%!0/# @8t ,g)%u/E79WzRitaV!!sҝw9D"h`Xm^S$ʝ2J9M9 tuj4[dڴ`9y!z}WxJp w-Of[|ԛKoJz|FG>\sYz_G[&Fn]gA+Vr+t=Vz=;q|/A:8}c10F&E+',rxfiܙ3Qz' W 0 Ol[ԹŤJ @`w1L;re[Lyu!@oYt*hdށVuF~\pcXb8   p6Xgq BV HW^bWaQQ6i-vmꏝ'KY.ܠ0-iZ\Eё&N3ZĦY%jӋzzmJ} 0T* `1Xnŏ|`JuC]cQO i2!; Mizۣk+r{!YAibi߻J 83lňDuSF_Q5p X}w::!ȸ|l021qIIwÇBrUG:|P!V0~ ?F4'd _k_e<ǷSCf31}iawvSO]ͥ`zHMbֈg}YᑾY(B":E1'XǥQ[&~B `| /}> @ҵqQ/]ҵxXHݽa.>A+Xrz@8,-NNҋ۲l9od .Lh=ת@D6;D/'wJ,YВfQ܎*k^\F}^v/|TdccyV1w2p.]wqnzcv2.o!ˊp !i_8z1MXs3} q=ybV+9^uPf]FC)dۄs6nMpn¡>4aP6mc*?8mJ8Um </u'L=Fga(v>{L*}01ᾑ휜WG,gc~#QOPLܗ=!A~:{*-oxg)N[xo?AUOĹI+> V^F8wG@&c=|'`@%|gDD^e^ wy}Ëu}򖢒x ,Zq+nƹ*-^|}ceKFx%nV~D@8S 7ND࢕~gr+1B_y1."ܘD}j<ݵ֩j;"UzvF7mEy.;;;4hnř]9nt+ΝSHhlE0 wxBLv%=%=boغ ߿Ӏƾa>6fgZ _,^;KN+m86nK;O} kWrQ hq('\fDôl.TZ:xlMa tԹm~Cj2X'EW!@`ҷ3zw?(?'@sn9j[w7GQ[|!rm(^Bq9cp/I<[wq"& `K &>;@Y?Eۿ&5~hoU72f^Mw`o^#}#BCy/ϵTPl-M|gV=%k32T}dwXsVn]+%Kwp|tÎn:ȦNsj]Eq_bABҷ3gpVvDKVRRryR;?^{Q3Jj+]eX(aUou:KzM?mԫt.I+}c)A R- pu>kU+/6s߱ZPf/.?lGugrykD"%ɝeG/ka]2Amɕc;^+$Auo7΋V?< @Vz5Jas&5մ܂@ҵl5eTotz\O^z%E%g5\U]f=pݫO_ǣ`ԨòooO5ZoJ_|J[!~#.mB 0Vhd@`ִҷQH @ &]|8"H@VvV>@Vz>.\8)D%d}.[z/E%f{cgz~csW-N>EDaw8y@BKnL+<  @Vo!@m8Q +} WzntW V a @[oiXV- @hX飑 ]J_?@ V.>$ @+};s+}g%{ngs|;w`o}A$eG:sg W;+ 0 GKC pX7N'>g{* @? @`XsP3X_y+ Ť?ָqz D_~5r&R[Ѩsӵ_:Ny޷l(+@0ҷw<&"@:`3- @{Nҫ/ kq];`~Q福(+[4:6V&@@j8T EPoW=wGnPQ^u$7P{K^3pZƾln[mTG 6y>5q`bF 5/1vo1B[t 0{c:.tVD3v}*9l~OS G+};Cz+]jk` 0%Y\>2a7]._Vh=D{Zes%;.c=KE.U^A.#VQ\ _xyE@: `31 @mwc_*~~di%f9qQT^ɴvsmT_t+dcu0k[_} =Q/yXN¤},Pk,P&JoÅ*`:%3>6pl ƾ'A"wq2,vGXt`~}1p]\>uҳacNk  " _>#싕~OS G+};Cz+l ymb5wZyipʵ6f+o-\V`oO$ַүIt;}gթ_bu~ +1x.?Lw1]Lcl #V{~ӟXDm @+9@Dj+V皏ܾ1,ז {CE=NARrz'ǣ;aUBBz8kWm2N 7qm{BN f_{0rM~io g>8L+4Ƌ<8qi鑉_>\ZgqdoX'V>bU@3t}ڗ>D2N]kȕ>lMWJP>@XJm Lc>5W ~2I6 7Wmm`!khFmq^PSWkixug 2F5Э&F2^,fb%*^Gz--%-0_׬hO{5[ƫLi;Qն̙s sMQ]+}(/J>>闿6m=X4E @pҷ3'Y+ݙU@=巊yA_]Y.NVmk{OQy^u@ux{#p?n-u:s#:ME/_Ӹgg+WWO{ wTrCwy@V:s\ҵJN\+ߨo?7}S$>Ɖ^z)v}\wW:&X}*zd=TbWa1nFT A8Z >n;xjPLկݝ4ԵP^= J? ZW&%X IsbRU{qb( p᷒;b7)C'v E1zŻƷ6цk*Ocέ;6Q{qgә+Yx3Fy߿1z7K2/^=9Յ|܎_Ck_×>;Tiw[)Bn `og`??# ?\ 储K2x2cŌ1y%>@Vq*>DXKֱ峃|դXbͫQG,8RT|yͶ':oHҾ^aj4ܜ*5H;~6LwTfK|*e[Iҷb:r~[ ]lTNTy@BȕX pcҽ⇥:?1ucUKZT8o[8y],Hc}*¸wmKh^qSRz_ >Kfd8O`z T+ݹz2Qݳ]ļ:rfY^kGErtݷ ʼnIȋ1y<kNV9]wR̢9ST[Ȃ:;*xнBͰ;G?k@*H/{.piEÚM@jT%uC+e 㫣Z} kӇN\}}obwTY~qb]^Uw8h"b[>}>yt!"ʘ" ~h[V'4b$4nr%?;@[Zw9"H*Ӫ02;?KKԛYߌi]UuIU-ג˖UY}6 >w ^Wavc,`yi^'\? žcV;DݹA߅XL>+ohL gϐoSytXmy9Sj52@Nox[22klM^8`l9 ~BqL5d+W2tx\Ewvy2ƃv|P-RA<}wj䓋"SR%,R:} f ,,W}Sl/}c10F̰yQ4+=[޽srv^.N^\]21g\|1JŇ# `og`;Гoq{ՀmkkaoO$lkEM\U֜wpyiBV50\k/nvUK}vSxJ,8xx%Nr="F>z|-y#Ș}_zL+G\ڄ @`4.,g\-(5`w[XzZR&W5 Gnܨv9B u.9jkL^Jocy!)#F WZcw/:Ƣsbebo2:'z  glbuJksRa+]jװ !]p7:ߛbg6rEB±ם/*px1sVzgG<.^RZcŐәsRg;CrZJoC\+|2jS+~8ܸ_N56尼79[kh{Pz+](nƉbXpD ^20@ҵoŢaPkF{q# d\n:Ϊlm4/W[|덹ځxԲk+=ǩJ@Zw*7;Rn} bVz>=~S;uo=ﱈ @@'t& cXJVaU (^HRHc} XnXY{u Wz_EP~ GcVb.q5(T=^ibbTxK9!;'fy`bdҳ /)XmmUlvk3o@O<+űd{-pu7[tG^\HoXmҝ>x.0K} އkJߊɝ|ږvi~O w]ߤ!u emVWY:T;5dκc3=)&}e-}uN|'gB[:>f3[20-X4E @pҷ3X;=@Xy  0/lõ]v3~@5дWƨR^qj% EUN׫{jJ]}MrRmT2RݯR &Nžnڽs=ܺ:W.S-jbSJx]J@Dm @V:s1 Vz \Y$-Kvd!6kic ;V-oכ[hW(Tz2YLkFMcg8xpTU̐X~F*XЋ^Q<^l2e-#zqP#C`~>glKY=IfjnKzXK^3CdӉO< ıK?DfU1l7 {`_:Faǫo<!K:xc~FhN77psO}Gw"aڸGQ"XNoK|C77ᎇW:EmJ1iќO &r)T.Huzp;O&t}! 0Ƣo{W,<'\UT~I昇or#O>;x/\L=?#WzRϱ+%lz~nR\!l%c~W p8XR-_/6@~#y_ԗcBmoFB" JXJm ,D+}!T @j+,I+/~H9ZkCϥyxqyhkA\͹BY;]5Q{.rdn1īv ;#wԕA%>!jwI`jwxP2Qp(5OVz,l?g6c'zQSbc;[1u~g4(Zz#@j#6Z|)ks60fgau>sS|Ѡ>oة#:_>#Cץ0`Rsit#@a$:8:|<ɦl_)<3 vp[1|+BFc! Nܝ_QW~V //1ii;Dj:m!)cϋU) A뙽S؞*Y*Tx%u@DX Go=?;"||"WoB:UOBFbka%??7o8Y.>-Gѷc5zs/ZsgnHG6E$q̏?FvJ"ƒ Vvfr y@`ۙD@`.۴7VC80@KnF@V~S?~#?٘zOU_ڣV%Oi3f>G5.rf*4pM{>|G>fd7:K o 5 ͚--J4}pQNσoyCX7C 1ZO;@J_n]~W8mQUϨF7[Rx C ŗ_tz2W{fCKG[Y?WC?'8U\Mn2>?.3/C`Ne_k*xG @Jئ5q>@XJiEJZgmwۇܵTpz˕ A/:ݷF+}c)A R- XJr @:o!@m8Q7%^}z]5[V Xkit%@S2MhKss8#LQԐW.q80UZ l-pڿDgj֢k\NlV- @hX飑 ]JA V.>$ @+};s [ҿ+IʥR/6ʠDUڵrVTPU6\^f+= 1.k @ݪ0;ԙTQsH.zQaad:W Q jBgYߏw/WFk#}AG }1pݴ +QFO< Xu9įB+}c)A R- J B V?< @Vz5J XҧY)k-2EޘX5'2\X6,-UBW+O$rVX>+Z-*F#!N/e6VjڀnA [٨KƩJOEAK'>'O:Wow+~I%]/ݸ3P#Ѯ* +=5s`|J7x_{xԜ2@k9٭W1`TLAzd;g=^ /+G\ڄ @`4.`e8!@K+} 9`+]f'TRDUpzlzb\r|);\V},=l5p\Jʚݞ~/e9VvDKV_z蜨<$>E0 +ݿ eEmm,os~s1NJ|ף>76TW;J/NG}ϻXڥ/8y\Ƹɸi߅Mmr%TtUwtaPoqĥM@FJ (+?z;/ \ײ4E{HeWy9x{uy/vEvۨL-cO^,6qMޝ!@@']|8"H@Vv@aXݩ\e YEt'8N&b6#qR%C(mu@W9C*-I>P]mQ[gvE+۾3+Vm7U3؜+&PN?Vq<}‹VT nwŵ5'_]V- @hX飑 ]ؗ5M% X<ňɂ􁥴Yl,YR  @&G @JsIcrTkRU҅O*._U[F+\mHZӹcmYxҷ'@`^JCö,M{v ugUU>jc[ |?l/,7TTo 4clg0oq_L 7 Ƚsz8Ύ}ZPh1FJ_u7EFbJXJm ,D+}!T @t'wcT(wDrQN/Iܿ':Pq5h(KZ 'xUr6X;t1Q+9Ra{E)"QJWf84 hyiO]2@Y\>mq wr1^ԔKwO d2HPua'~𼊙A6xD V?< @Vz5J X黸2Ԋ3zk19H5մ܂@~c~F+}JF嚠Zm}[i ҙ"IV,!Q86g+=jGt㹅͉t{Fs CΖMr˸BV-[Lo\eeupz`:QG<.9}{ޙ>aFs#B/Dy!4dz6́Ej&\|s  }wM @` JΐJ3Ĵ:6t)jFܜېnH6jq.9 Xh%gdloJ#ׇy@,gH%6GVo~I'a'v1K*?3W*?N?g+w=l. L9lcw~WE¨%l6g:n1+ (Hf?T1 t}Vz,f11Jf'>~$J/So;^[λ6Dm V> @Vv_Xy  0/mZG:lxڞ|IC `{| p^ C7 GJzIOΖv.ҋ·̕"H54N>JV֗;YJcă[9eh1mQr2b:E妫XglAz>tϜzosi @>~ +X._)BVV+}3 Af$>#L !0} XnqdKt^o~J9wKJWZ鮧%ŒɼQ؃RnYb위>*u(Nz}s:s99< @7P @ҷ3;ZtTj⅜V?xqj<vۥifyUaoO$>ON x=6C `~  pRtY~8g:cm:9u-+] LdJzZYJ_(H/&\.l?{>Wlq$}Vz}b]5† @`#OqnC`ogIJ Zu7. ȣ1R5,a!imBxrVvDK\O! +=K=P @`FX3¤*@"P[9>뮏Ί7Gk5k}#Tml^Ys gRW}& YPVEΊTH̝ h%wuZHKcS}_(T"s깪Fo&zIբlTp8lgʏAQuO'n*r}c'jT! @JG B JVzB*ZGrF-yOO>ŷJF=џܫCdz)xPEs!^yKs9XrIwJyL% :3"GU3qyf_VvDK+0:NXXM  R- $}S]8ƉQw;@+}G/55;55YZ9T @`w !@Xۙҝ?cY+wbv\Rׇ!9Y1NUPӝp ;\Va;s_t켂 S! NHXy  0/l;KTw^s&%П&f\-qrq 8nKi ]3>ل @ J_,B1[?*  y@@6Nkl +=ȕ'r#\ @; OċV'ݐ,vgFwCEker"v ƻ6 [Vzq?E_$Dz* KV<~iY%f ~O/3zɡKQ8.]a+ޞZnYDP]>Jm^~8VvDKVzZ\>G+%qZtoUJ6ĿLsNL>%V_-52J}q1,_X)ΆqnstY]B#zuGT/DSOv7*~%.T߬}+#5_pQMT3!fEcz?jQ-CmՐ=g\ Q)ŅYWXDoxxyty&@XVB` J2A V?< @Vz5Je+8rԤ6ŏ~9i.%m;b^ÖYdGzEP0F,}sIjG0p"wQ\xW p }IqK_3z[|+q=vCsab8F(mg)g0]  FT.ϭ >M $d~"该G_Gq z|qxsuկ0rL }K[+fTޥst3yJJf;ʥ,7Ze0J/ oR9y+n;vt5tg sJwGTL'\)תYsOcI&"p2sQv d+8;ZF9Evo%UO4+쇓|vn4Ma`%xM ;sG[9js꩛vKhxpVܶ}fL{Yz)^9utӬj+=%ė 9-.V@vΕG'W/) Ox=-Vz A#JG[=@h&ތvEJoO7x&Bʡ]JǕ@5uñ^, OŚ)@nE+}WK0VPV'ĭ.hlpР @'>+]n܋)YNWlg HAu\EͣբXX!@ a"H@ 4ZZ{Z> [g ~|PO&Q=lȴF5jjt7ڻ%ҜVB6sZ¦  @ > ;@nA+ԻJzMXy  0/>+yu/Fs]8Kv:X=V$NHFJWw2Q,0s kS$?J,B% V?< @Vz5J X -9[VPX@J_]M-Y:PB)YnO+7Oe JJ96!@ `FvA0ޒY(v򉺽o ~%ij4gU ^.~{ @`vXpD ́lK&e0o+,~z ҷ'@`^V'>ل @ J_,B1V/(?XJt3{Mfku]/j}2)2{UE(JJ96!@ `FvA࢕ace*=Voݞѽ"UYmNqMV?0= WT=u ^UޕmlNu~h=g¾T7tEe ѢQ80ʣ?=(Z/4R 1j7Ž @w !@Xۙҵ4eXhr:HjKjZ2Wd痴ŋKuҊCڸ$WͯG>@JE 9n]'".KwnVwT4[)9EZZ4 ԅZw;!o.V:Vgj ,D+}!T @lCo<(Gd ٮX+wwT{Hs^Ҁ!,@XڄW:[VP*A(3ͩd$;Y}4Z럻yp51"y'?ϻB5w<1Y( @nN+{h F+lkNFZ`d<:#ߤ;ɅJ31sjo~>*5մ܂@uz9_և+^G7RX4;u$Ne=p({| OxsǫXX8& @`4.\̕^H<;R+ޱ6Bbg:Rz[L{m̋}e>KyG{կ^{J/tz\Lci_'Xb]:!@ w !@Xۙ}VhCX9Fa;?z,^L9oX+\cVvDK [U#{pV+I9-Qu%{b7Io)?m)ߟ|wܑ8UY]JwSR\n V|j>:oQ 捝>oϨ3莟 3, L_Q˹̧ UjJwŅ\"b*3≙(f]TI/qUߥ ++}޳ A"X pc۴ҵ}[\JOc9Vz{VFS^SX^[KJ}ԷgY` ܊V?< @Vz5Je+]Yy-Iy/*[P6: R/bg66JֹBxQ&ƻ6 [nW7t|M'VK:6~*UXNߚAoh/u*r[qs՟rp_)ĉF3ܺ=NjL\^Jwmj3F_#EaE /tN(Se}BR P-&-˓:;yꬻyURϵK*Ԗ˷P#\O9s-P @XV?< @Vz5J X*ˀ2ӳPk^(Xki[}'JC}[?4+ 5`(9cMbPl` /SXVW ?U2> ߬ԓv+]u:[qVz1 .9myi_qȷ[~[5^{XJ< {J-~  -Fy J1=q1pX+|I}XQ @Vz %@J/>듹 lTx_ׇ(-3zS/ "Pgaj+yJȓTzw[NWe#Dݜ +@ji>X]h@3U/}pX~)E<b6uyV8z  @I!@ҷ3tfy0,MP]QM$>@VӖnI$N gW|oH[|>&7 ['A4FVיr~(FwT[r=Qvݴ)"Ef&bJ٥.T{w~@1.XCF 1mbJb|ҽg7 J.Qz*z^u.߅s<_U+ߩvDW~s-t3\X> @3J&UAV˵~0w9KԬm @ @@'>x駧yJ?%"]iSO [O:Q|*~98\;{7o-)9~Y|'罜J/ΝCDH\XZ#WÎ}Wn:K̼刭&VEc3|YvF9zn>tE]2+#-2p{Gnуɼ3O< 4&WNwdXDs^$8l1"ۚ6SU1HV)y7%ұҷ"B@`3 gO~ɟ==|}Gw?ZbE:!@jҏi^A`;Rݻ~5cvJC">Jy@`/cy7G3yGVyS\ ɵ垎mjXX{9O' V'݇KeK<_~󡗖hq-77:g簕2j @`A`; /NW?s?+|L@`sz# /;vBҊkG.+ @9`coDx Jg&@8&[鍟`JAcZm_uxtAmB @+ VC_+{?y@`cg)!lV &4,A+=|I}!@'$~A)`/Y:!@ #XpE'!@`ҷ3G>'vtG&?" 0] `cu@KnF+}yv @@#}a@Xch-[v;V_.zܷJZ~K#ӟX( {J_L X_y+_tc/nGn7^hTIp5(}TC zSEߵQSۋkOZjHGLf,jvz]DS5yO$~㸌oD±񱅱ұowe@X#`Q`Oy@ %H @g&/F˶|Od,W}e)~OջZE&q^ҷ'@`^}VN:[ۭy͉ oyBk›\1ڒݯܨɠ mQ4m@@Xmv]xVzQq\R{uzG[zw8UbU=֫sTل @ J_,B1  @`cC`qZT'ҏln+N|FMVlk_cdRI=$-U"5dӉ6 oWxOzW;HX9;\Xuʸ4yZW=ESm" s`:VjڀnA [:VǷtI'lZ'89l$LU>B5a}Xvs:,jlNsP DJl}_rsWjE7sF7\ y-"W. ڧ`{0"b=FV?r3-sRHn<_/O(?-bj ~z%um3T3sߗ.?*Q* ccC G#c@ ><@ @`]|8"H@Vv5V)?d+X.,TYȳ]OQ]F/Rd}J%~IJmRuuj/Ut=s}r zb7?kb. կHi5l:\Na8xw_mY#cE룮GJ{H y d+=rYBoPSCN#>O :]F=QY>g17R1K*.r(-1^qڴg7oI_պ: -Cs!7'3'w|+[0E;h0\T脜M¾Ȑ;@q `<_ɳ  @FJ JoF)[I*W$ fIˆVr+bK=7jn)™MEFxhKjIJ CW6IJV W_VQ;ܩ(w3g̨Xki[:fSt?Vu[Bvq"\Nvm爼wɨЬ(4Վ!~裐%֎Qeb~)Ee sZn+=wVܝ fo#!wfzrf\HH(M_r!jsmsv)Eh**cptQ4^L+~smBFJ V@ vXpD ́kr6ka+P;tS޼vڍTa:t7Vz#sY/W9xQCa}9B7\qדºx>\0OUf=c|v^>`q:s|:$srQϚvﳟB?"T9~VNxn/*bbMVCx2a _dWm^յe=9cӾJ)u^^ϨEiұu"Z@8-=N+}ڇy @@;{ pXl_tEIGV!iOa٬^Za&#ḙx(g.Vф k/mW[Wy^AU:h ['uZj4d<(vy N|"To&/K o|˗73\qSIؽ>c%lIP-h<;㰺Di[P^>iGmyP[.Z' 3-;JUaHgCD,.uhݕkoqayvM(쫋 y`5Ot_?|A< JqyՈ6:Z_q'ew11xqret#@XVx`_!@ pV>0 @` 1-{3HY~LVe/_)9 ZZΕ`T(G*^ks̨3mCV$;*Xl.nZ/Q .{rfY?j% t"xX+}3C#|HԱnqK>O* 9Wx/=d乒h:qK1g1cS9qJ鷋WqEQQ#%spΎ;|Ҽ uuu' ˮgݭ CV7->6Pk#O{L 8z5|HyIg<243L_\s;2dwl+}#*5"`9)HetQM/ZX=ZjdQ9V:Vgj ,D+}!T @ҏ@/ @L+{h F+"#fc}/VzN܅q'?~ь +}w5m@ 0ţirGo0:'.Y_[o6.;zN媯epұoqΡM@hX飑 ]JoN@ \C+} 9g_sIƾ#>@J V:Vgj ,D+}!T @@ @{$~=4@h#iRX{oXkiJJ96!@ `FvA+ @ XpD ́XoS>>WJ˅_j_z}_{w/) f ؽcoO$/Ow{>\7~" VA&~s @F+< Vv*[r_|iaW%%ݾU϶ħkmk}^xU64+]&VvD@wGOON+}#H p`X\Vr73 @&~]tC+};ctIϣd2%ː |O=WQeWGMJDzԨȮrULO^;*WtTM\]}UZ;HS3Ծk.G/.ftyף6px9sqVvD@G?QGדkJ? VA&>!@ 0V?ty@팕teIlZOgDjПvp\eHv=n"W._\s[vGekE-_e!7!c[T[wG9~̷?vnJw+Q9~V*HGua,{zcΑt-ͮ^8]s?+j9v> ٟTz}Z 8{;mJH>@`7$@"R ME@@@@@H5]TCRs͔ r 7ܐVk5O``*￟TƐ!lVTf!     ٧D`Wz?-A@>я:vtQ twT6^ "@*      pf;F٦3# {SzhTJR  <@@@@@@ J1@@G?=Mht&  ڡa      pS9@@+hM8-@@CT:S@@@@@6+@*}CK@@${1}8*c[h" 2җq@@@@@83S%  S JZJWO @+4     Hsb/@@V-@*}ólH/Mm !@*,vE@@@@@H5^@@VRL d@@`W;44 @@@@@N ~ #  0c=[o ,T@=F*}L@* ^l@@@@@8,@*{   {S",Fj# [ QO      t&  k~pUImhhg>??4@ Jۈ_@@@@@v$@*}GMW@@ ^p?яnᆋ/A@t Po#~gMG@@@HHW|   T.@*   ١cʠp տߛ*JE@Gq RkbӶ m@@@@`w;t@@`_W}݁1pgvۤC=t?馛~nt @JHW:p4I~W!@*    QT@@HO%Yi9/_曋T;_^ih6  1G #]_Rk?c g│CysȞ}^yoTqQ|b-3N*}GW%   HoLh  G J?lCv[3-{C}+ -@* sҕ#gkfҷ.ǩ׭iD쩷'DTk?~ME=IJE@@@8S;  JB\r7ҵn_4@ Jޘ#ؑ@7~b[W=*e{[?ӝJW$2J`끗S k=>Jf;}bwh%聎jMikN;-=oOMRz*uTkQ\ҞOs՘fݯ?N*K   JT   0NT8uڵnL衇6G: Ho`WTvP;V=Oǝ;5׵wRE{r}u*=vv&9\Ȼx֩t66x~V~/R@@@J_ @@N ~`k|#[oޫg@JXء@t[SJz3̝;v*9^ˮ@%śǖf:zkޚJ6 o<t@@@& > #   p^R_I ~V0  L@*j*] o WȻX+[D>%֪5u[_ҵjfr*=؋%҇4vR4@@@*@*T  4ҧq~[;~V HopPG`txtUjQs˽ƹ?(?V*:kW,?¶Ѥ|ׯ3C@`W:04 "Pu*}ZˊO->_uӖ\u(H9@@@f >,"  %U_~_U4ڵk OrCCT,$@*5]uƓJ_̧@@@8FT1Z  JH/<0JW۴kQw}'qCf >,"KJ_^GV@@@@RL @@6 @*}A$>/2ZT'8! Jϖ@H%H~-@@@ @@@`DRKIH/|S 0l)]T:fUJZ@    -@*ف  H/G>+]b =W'ڒJ_:@`>RR2 0>#/]}O,_իWg?@@@h μ@@@`ĪS闾uOݵL*]ct9<ڏ_׆c<>OT|.?nD`7z믿>@    @t   n [(/zSZ1n=֧7~U|ڞu"KtRR2 0nz^S2|ϱV*@@@@RL @@6 @*}A=/jIr=xOߎ{eqe[׵k?:$J@=bX;xv=Ч*Y3Q*VQiu}x7,}},J_:@`>RR2 0QgP   t Jgv   R bt'sFܩtD?y{SWQu'ѽ9e%̽y-%# 4Si궇L%@*}k    @tf   n wǪΠ{%rM#MF*Ib"Ju]X_+ݵatrJ_Ԡ:@~R@bf*Se)q+t@@@ ^@@~J*}ITo [yNq,^ҵyĵ%(GǃTu-jpWƝT§! Jg  tK)gWj<;KsCHW|   /@*1  J_zl5xw|tνJzstq\ e*ޕJW];L:Dk-ĪC}k׮-=˩@`R3R$ @Zq{;}U<]m|c:hfH/uI@@@h δ@@@` VJW[JFfICyt(eӛt1o=^hH~-@@@ @@@`DRxI$ Nu |糥d@`v+x-|Y=PB]^ ި̺_ !8R_ @@@H3;@@؀T?s8R T'@*}>[JFfh[_}UW ]*ҕDקu0];-n8 ~R_ @@@H3;@@؀T:1%H/|S 0l)]Jwk/y@]HT*@@@@nR@@6 @*}A$ Nu |糥d@`vTk?~O {YWze{B H~-@@@4_| Qo[nh @w^q4 H/<$ȓk׮-<ɩ@`RsR& @Z餢XT  П㎫| Q??h @"ʪ}eq + |g>}ӟO OrCCT,$@*}%k/@*}+   cJq  U'!5 ҧP<|५/p;Y+]@ J_4@eDRNeG@@,@*@  0I9) XGTOJ_:@`>RR2 0qٯT  &@*4?F@u J_x@`"RA-TC=T ?3 Jzf zR"t 4S鯾^y?[b~Z<[|ƛ ޞt.c   H|h %@*(.vFj HTߊ4p!i5;(Q1Aퟋz'o\vڨOmW77ﳽW#R T'@*}>[JFfh]!Kz^yKѯ>ڿ~Jo]hH~-@@@4Rq4 KTƃ  Jrh19oY9 6c9xg$ ;(T r=xCjKW_N;6:/OUoJS. mt RCLCV/@*}CD@nTH-=M[/ߌyqYߏ|[>n~DT:1@@@`W>@4@ ~;#J_xJW[V]Y펌k^yYV X;G܉v"&U]:B zAJwi^]qh[HDLR T'@*}>[JFfp*]K~o~|?"xCS^O=>Y.}'!> @@@H  .RZL$@*}"ȡtEǵ]r 94… r9uxGs*=7{}lzk#H=3X DJ׍?t*ޕJwc&+@*   rR+  G J?@ZH/<vz:_iI/|S 0l)]|Sk]U8)J=mTzB&@*}k    J?͏@@`]5HTDCɩtT ^\1E =pR<ч( E wЃ"\Vwy ?ϛkGE_ lJzf zR"t 4SqK.N+gFPFѷUnڢ~JYX>DT:1@@@`W>@4@ ~;#J_xr*=XnǾ*ȁy%ru!:6 *xC˱GE)Amg tT5B& Nu |糥d@`vf*}gP   p8@%@*}]Ak@HO9TJ^4ѽM%k~RCLCV/@*}CD@nRܹU!@*   rR+  G J?@ZH/OT|.@*SIDAT}?`UT*@@@N ~G# HkdPaȱOi}s>VOݒH*}~ H~h  -L++ϵt^y땝ܷ͕J2  \T! Qҏbg@R TN_αo]:T3 J=G3aܭH*}@HgK E*]=JW*=jz>u/џJ>T :0n)p} ?xAOoTH^M-.@*}k    J?͏@@`]5HTDCɩc"p bJv`N2F "=tCo+;#G7:󠯹 *" Q;mOu\zvݷ'g&! ! @@J׽J zYO&JVvXzۮ bt`۷CXR\@@@ J_<@8JTQ\"o~n i8p*]PN@Tз@JЌ(`ఁJJGEzp7@jr VU(ծzd6?skbŽhJp ݑzG,A uQy*}?JRL;@ ^"*,&)n"ji{~j?7H_Tz/" @@@T:@$@*}KI_@~|,&pWk[Ql}*x 83p@[خC-lS?=;Zm:^z#ԸcYU?sl=w /,~Qb-\o1>{HsG6#@*}3CIG@`N&ǟSfeݪR7WTz>w`nv+@*}'  U Jjh,  A@t| Zy1 8f hqG r*8 )>s*O9 WiE8`UAjs[KG]p:/T:tN*}HRT,% +  !k qoKVϐTވwCn*g?ǜ  ,(@*}AlB@HNL ;ȩtEbW< 8?Tz-JەapyߧgPzD>(es >J/tٌf#HB@`/26)ГJێuo-S/^7S:Z~p_q;-QîHoC@@@`Kҷ4@H3@8] һP vtz3Z[y_sE]E@wZ=sKs]crjZfvYR駟DTJf ctןVc?;'ޑD ~>gU ٪17    J_@@`vRS R9ZrZ_G 3yGsTI~R R+J׍TFn= GQTӛc@@@H/MU  0ى@`J7 /]}>j5JΤwpQ R{iJm ?M^  lITF  t  +~?jSyH~R R+ ~"j(@*}1   Ħ*@]TT wſD`[Vzj']D/@*}cL@` _}7~1!*@*}W!  :^~e21\k_M74|oSV!D}-bgSW~Wȴ |_xwrM@S.~m;o>яXEX @,JK akN >@@8A… O=Ͽ< ߟ=%ȓ(uuD ]C@@`JskK%ʉ',# % TB䊕륿kEtoyO>5E[;~]Q7RG   JH*Ӕ@&XOV?ip"_{C`%4`PAXoO=e$uOe-B[Ne\Sڠ舞 0> ~px6bDu^".Hb$lUtp">W@Tq]8{ M7Q%@*}   jHs^h dK %"~򓟼[ַ`E~\%'t=0TZ3ޭNAoV1aSп"pT9B*}Q @]/ZwN@irs}JT7Swt'O@ Jʅ   6oEUr=mm(n2J_:@@t/۩σpN3]=PA.VJko+zkiIz1a!ҹ ;c_Wu9_+]$N#h~ =GӇZ.D1] + (W?ٕNk?jof]N=rޮSq]qTQW>T]fkm[Haw7G9ŀ\^2ӧZIJY+}ܙQ @uҫ27ҋߟzYt=ENp5^םCR\@@@`aݦ{bUލ_x00Y"g焍\(R T 4SJYE=/RV:U6m;+T:@`?ʣ+_iĿ^wo!?"B(tYr䃶XG(VU{Wާ蝾-D:$/"<cH{3zfS5>@)Pc*݋jNłNP32ڧ5 Tg,^]ҽV^Kvzo^m׳y]R\L@?>~[{geښJw9jL%j^~tEy-?7f-ԃb>Et:y\c~SM9ftܩ" σ\$T;DD/X^݇RR駜T$@* @)КJxn,&@*  ,,PW*=r .(Fr˹+TigZ#Vq5S r5#m(S"r"II=gW="R Tsׯ֯CPʕ+;W~t/㴖^3Vv=ʬ  ~_>(=QaH~"G/bH;OZ1EϪWݕJ/p@ʱyцQBW9] &JwzuNY)e\jA.@*C@@,U.@*}IΑ   0JTPi*T:to/raX)/ h'Z,w~1,U?4:Ȣ~{gNtE9EZo3?tH:;9/}٧P@Wa1_ċ m+m\=L8U~ĹS_E*]ET>i־.2Tj`] _#t݆^K9qoqz{W %]t۱ldGT],@7)ҚJGrSڣ2]zY \8PͦFzS0]PR*UMa;JI} D'@Tz' c7 ~u"  kRS龵w*p|^3ǴW%/KdIѵk{O*WhhyWR>c<JsBRwR*ݯ70 r0Sh{TzKQ{zT#~b>@`5'5ޢTzģUc֖X?\>n@l!{ǯ >C3v-=~OvPUG =W/~V[Z}"ĭ*jԖh^&<EQrΛ v tsGYina#DYͩOC@SH*  &AQL%@*W F@@`IҞAsZ=Jτ^ˏş+7J:]kza^ZaDX+}z}.RS.C*\yzO̊1.Z鎡땆L 39W^ӡ/9C?~Zޢ\|V:AD&<) ضL4ZW%z C^`lxXȠ/S5/Q}=w +Rn:[׾?;l(OdkA@@ l&?>Jn^u7Ebs=2cNG;kq/DUzR.4J_5mPTAR8Ufʊ1r^V3UQe4^UQf"ā.( 듢.VsOk>]@h}+dۭz~3/lݢr2 '^k^*iY.D%25  J_*@JO,p7J*@   &PW*=RSQ/zo@c}z}P-Eo}\|UB]E(b @ERoqˋrrUXײ |X@`{Ҙ1%7xk=B Jq؂>cA`{sW^)G@@@RgdQȲ5HWr=45Gc^IoUVL/tz\濬wEZ@tY݈|mܧ  2zΟڻj/Q9X@TT%0$_νQBjt!;sևsu+Wq9`(k˭jI*}K"  @wsr)⛉vJ  u{f)oo1_Tol>~օWy7_cu ͋v؁v#exCQxDf:)؞z^i)8v z#՞! ЈH5K]CVTn#co3'z&^E"(]c-[{`w=}?eR[@@ ~M ^UV/0w*]Bώ>u> ~Mo_0FSb.j7R46{xQOt=Y3C%@k>]@X+ VAGGԯ'((/~7#~\Sڠ[=5߼D# KekjA 2U s TzuX-#^,Y/ji ?O&R@:@Q.f&=npk\+͒W@fF?(!c6o\yD@*}r@@@`OO ( }=t/L蠹r͡(-}TMD׳v4gh\~uTz?ven?OnJb';Jg {ȯ47;nm_z8mYńM͐Af4ӣJrD˕~"H`"lW' MEa{>@p`]w 7r~>.;| 4VO6z=+F/ BgL7?*)p[|*mVQː*>6)޹a,:PInpm5f TvWz   JH/wJS?鬩t/~˧"Ehя~9|/yNW]Q륕T:~t^ 5b7@Jؿbղ^_ckQEiXaw!.X6NEs~G_<8!㵙v9vZ n\ԕl6U@zىl_#EӚ3< 8SѬy5، %A= 8O b߯gǽg}Kk׮3%)@`SN^M=We\` _#fc1 :z~W˾:ꝓ6ꅺ>E:)^/H_D QW|P4աiG>Bmd3&KC&p*c/=h_`%?F!E:׫yF-Rs~% cڣ_}Od%a-8筝 ̷B뻴q<6 u͞? A*}b@ J?@`T#ϙlߏoxv|мI}/њJ-_덓6F\.{{^+7[.yc9:w o䎽ye|տe}xVs@@@`YZ@w )Q pܩt/|/MΔ7xyX*ҿYq)sLDU=v]kYi2;ՒTp;+6 ح ZL@u WǮ֚JwOǚ.9}Qp !#R9%}!ugZ|GPE3".Sw:o 86 N|bSU^=uyBFJ! Zr*=(UpZw5^GfL*KOy}#~`*];xrOڷQQ!`*=Bll+\ou|C}GL5nT?FW-w܍wcԺݍTZ.@@ L7QwOǶ{5 wv>VTn(ttsқWҏ2ٓVWEQW1OkDO*8e.'#:/`{vYt`*N;Fv$_iJןZ{s^TT=r/G \ȑ h5ܵgtuH$Z7NjR:T!nyliVڟ%ʎ..t.@*}#L@`9^6^wJ۸S7l}k7]T,[۰(nH$E8~_)_CuSEÌ҂ȫRTv-ϟŎ%C@@`STfmxKg[cƽ3ynm%@*}'?mڮt0Y2vvƐJӕJ:5y-ǿO=!Çz/3Nk:ǽ03g>1D6p@`S+KsV/zuʈG 5ꁫ- Kԩ=~͗C=z5&n}Q^mTz~aV5ͣ}{" QL%25  J_*@zRC~#}tϩ۞XP.  tT$S܅[E\#IsB`ISU_6TsxrVI&C?Y'κ* [cuzEXlE!)L5gtԖE7jL*rl^DnRk7bp:Vuy?`vrb{yV,"J+|X@`{"=w^}>A7w(ۻ#ح=G-̗J/7Ͳ5{Ϭǧ4seJ>   P@NN,ɫgZ<6jY%8;hK^+]){+*7eͥ]o.3jHyZgύYWufX* >ǥTzŧw9] ~)F¯+C}umw\[\KD,UnELb/\~t!Գi+.0/TK߃_5ϩX]U%./l=P~YI"1wm?uZO.i|HiųD6p@`Tz݌-_zٺE'^_~5U @̔#^,s^S  K`TVYHu \@@P'r? OZq*IJw(@ޢRuEDIU`sCQgBҹ!9.¤җ3嬘CEzĹWTCH녇Iˡ}},yQsom6jXDsQ_ܰWYw_4Ƌhn:>9^)=Woj@pĀƘ›WDkb@ a9^S:xk=B Jq؂u/ѪBT.7@@V8N Az" S龑I^3"GT"DJA!غu斞w J@cP*/'S JO[JKT_9|iQj\$qr\i2.MSQ٤tՒ;gkSbF";Ñ!*1cm{[@#H*}8]@+@*}3:R=ߩPT,-0k*]&RzԿF}x^ubsQ[{^v @@ؽS,bLT?ҽdiDznzs˛[=\w`Q7|S*>o࣊/EGf< zJkcS~axmӋxqtPxQfW~\*]QH gxl*ot>F)>IpQ$ /\/X@`}C޾1zlTTFn!>r*OlW7^EBS˃yx`}lHD/@@X@NwtC[7~շhsowxuӽbkQ[H玛Tyj~77~7n??]MhȖr*=<^8앶cbtF}crDiu눘GZbzWV~%ZTo\(^ŋ+r*-Z&9Qh8CzύQ- zSE?@?Fw|GPgbtXt  [TG@r*=BshkPW% qh_FEJWS=VKs_4Ym.ً~[H3v#~YΡ   0F ҋEF(JCFUxsJo=5"EG v-.7^=к5tH999M VI~W\;6W:J?&^uJ-Wyo+tF_4µO3c4oўl`60.{M{Xvqpb!]#m[}?h^$.}5^$hn!>swsM  E'>O[x2mH儧Fъ_W4YT?q5ކj>^ʼ>!+C@@V @*}@@N;k d^ӫY™C%ڋ&Tz^.E;xAFs`c;n-C(RcOqC@@gL3"DG=s]GF?goVL/rݥ[kXC*e[E_.tW"Xɟ ~)>/=ms.Q("v   [ QO SJoƻ+Wm@'O;nޟJWK<қ-Wg;)TnIt@@1=)Rk9i+Pos[/ ZG,T:  }C@@-@*#@ ҕގ%F8gX+}x*]ҿÍY255WPٳ_W`R'  cHWtXoSI999 |3׿'>~[ ^ 3T*^  lTTFn!>r*`*ۭD׷{ȩ\<֟c#Aw>vZǔn:ήN+)v7˽G!ڢw[X+sqA  H+>tyDkuo^;TyYǮ_lVO[:*߸}R.=@@@O iJ%=קqo7ׁT{6}GlxzKҏ>39 ~?:wҥ__hJŋ_YϿ?~ |v/-@@@آ-*}Btҝ5<꯳ ,^yNG>|g-vs%wsM  E ZO*b7R+i =Mz韞TYe&#x77{J1@@@s J?P? p@k*] r/yY͔JW_ 4-l J?,P@@#Sw}ꮸOQ*]qp}j^f7jwƮ̝>>ąK7EmTu?ZߕVwǜn{uʕ;c[]7Z~[gJ@@@؜ )B= t` tY  B@x϶ݑV?̷k|{Byс#k*&t{@@oQΚZZdTu͊8"O*-;J_N#8cW2d%{_YKE߿馛vK.qe'   :Hch 0J@G| _FqB@@xtG#k?~!r׽+nxX\? s=GÝ>:J#DL%ڿYR}`g)GTcؐ__*[n[omnolt w}wܾׯٟ @@@m Jxؙ>'+/ds"  N3ȋT"zVbq}҃TʯGf*݅Y%˝GJ}Jz",k/'>iLT+p 7گZͧ-ǟ'sgO|u#   PzƊ"    J ,R^O)`D     R n7uՠ3L'@*}:KJB??ٟׯ|;8vE@@@QGq    U`TP5΋ѷwCH@83Uĕ+WzzO~C@@@XHTBT    LJMf J_t ^ݐ |ߑ~n@g   k ѡm     p&ŗ8L@`1rEM7{lӥK/܍@@@@`t    kJ?K]6!YH(~[n6ʯJ~_+?=2g@@@ 3     R]_|W&OT?Ce+ ϣSwwwԈ8TRg3 PƌW.nK_4aݥ   ZT!    9N3rV bKO:*ևSϽxB{c!.M_% %~DTNn\@yni卤y   lOTƔ!    kTZ\+/mQ-V5cvPd\X}>ѯ>cvVvYhk;D*S憩X}zԞ-I̧CT:ƁV]TgG@@83S-    #TW[z;z4krɝcv.\++z9X^݅tJp݅.]AjvWɑW$uv&N*}SR@RG`+ J@@@ @@@@@M Ys{9eַNk!s=g"bT5S{"yvٺTtե<:s L!@*} E@TR r<   Hb @@@@XT ^(O.ѝAwrݩt}[JϩzZUՒȩ{RzF.%@*}_Mo*@*}#C@@@6.@*}L@@@@؛@NdܱxDϵ>w[:zZ.];h=p\)sҵݫXZGwSwQ"rTBu[sJۅ"0PT@(vC`VRR8   ]ҙ     )Je8حXh^\Qcȋxpwp$= :0*}F<^p=>tzE-/mnq\FTtHOgII >ގ#@@@8AT x    J/VJ_ߩOXU ؽO@@@#@*<Ԋ    3 LJׂ=P5<(@*}b]Tz#H!@*}H/@@@ ^ݐ`@@@@*~0{ eZH31X5m@@@ء:]F@@@@`_ҷ|o @*<E`2RQR   J?F}@@@@@`~Xt>[o}ol ũ6R @@@"@*,T    s Vb"J\* ^J@ @@@H6b@@@@zH9,XIsBVRL  @*} @@@@v(@*}N@@@@ز@W*]1>u/.o c+#J!jc]^֥ކ6W^i^c>]TQ-_D'J?CLTd   1ҏb_@@@@X@N+qd=Sց+~ԁyg0*G8QWR$SاHJ@8S+tf   g ~v*E&  5\~} BC9hE؋v?GrW=}U[ڮݼȺZ3;>\߶Eüؽs>U kyf[ ]*MI:y J J_ـ@@@JHOت   _] B`N+]O%@[bX[vZ=R⣔]"*o }J[W]GuGljjs*]85*Qwہl}258vΪ vӵ5: bѰݢ1́kʻ |t-:ZWiWx$V"@*}%A3v.@*}#  KTF mD@@T4@0v]ҝ?Vw=ҕw;QSt#cq=L=w.¢ƼC]̽CWwᎰy먞Tz$#^Ss -V!]#>c/oҙ ATF6   PT.#H   @7u'FgV/sCR^`*=;$wNG 9GXܫ;2tU;ݓJW;# x^-TŚTzZwu{r{x Sd܋J_NX ڥ];F@@8-@N"C#@@@T)7>99^PX1e]sZG9CVYfGtJ"εG\._%"%[ƞ]E4^ATj^%=gǕGJ5J#ra*9}1S*0^9صTK<NNG J*HW1L4@@@`{ҷ7%@@@ [5z{nJϩA+_4CC7Y>ڨ-FX=}/2@w!omTz.-W+Du|g]fwלϩ8= %\t¤5% $КJwR s6 xÐTG1QZGQsԏJHt`hHl.   ZHe$h 0N D@@Rny8 q]6؋uлEcsmƱ+S s`H;=9 J*HW1L4@@@`{ҷ7%@@@ [5z{n5Y3Z\|{}X}|H +Wۇ> s7<0=U; @p +G5;(0J?NTTJfLT"  ETZFv &߼<$^vME?$R   JwQXC*]il%ψ;W}5GoRڊV멁;O^NOrʞX|A?Ȩ!ǝHo~`ҫ&   =RSz*H?|=^;CTb)@@HVޞ[` S[sԏJHt`hHl.   ZHe$h 0N`\6$~ҥXs_ラB:j~Q  k >'@*Tw$>(6/@*}CL ^0H@@@ Jޘ#ؗRʠG*];JW=qR+E! DTnJWbϣ~Q׿|ܓ@`uW7$4hw9t@@@?8EH\rEn_|Ň?z䷞ohr}|7F*ڵk>60-9n X-=PTz^5)+:p߬Z[N}hU+I @@Sn|8cWs 7_~{J;α@`7?t RU D@@؞)=B} AVh[iovn[r=c9sEcc^+]%pNkvX ޼VқU SΩ+'@@V(@*}_j/[nַuWpQTG6OTƜ#  BT*F iW;{x3Iź@ oDJ覆+ZuWV mR_zWZFv"  lLT ƥuSWF<.\e]e(IwۚJ漢T`7@@U JFߺ{_it-^Ii& FRkڴ?Rsz   RJj芤ؼ?ʬwyG5*ҟ==z[S]UJ_U    >@`V[oUo *hNF G-@*}Kj ^HN@@@ J؀؝Tجܹ譩tmT`='XiHqz[S骥jRcO  *R黻[ _'sKhN546"k QM 1    a hT|B^io-PZk@=Ё_>֥)\~0SzmhWku6vU޽dA@؏w=3 Euggb@_իQ>w%s2җq@@@ RL @n"ģ`BП:cmԷ~;yAwVZt܆('T>MpyQut嫨蔲j|   6Ruzz(HgZ@]˨o }ݿ;3Wr'?R.RT&[/C[i$@@@LTzeFs@B`mQڃ  ҹCU \xjPWf]4=( Qoy7A6Z@g7zH*X1G@@@`R0R p6?   P5Q14/[nOjuCH/ >GuPFҗGRKjS   !@*ɀ-pmNj/xP)   ^G`[>i1u-~p7v@ HOyHK~J_rH/M]   t& P7@@$@*[/Z~~~~^=/p ZX}C+]TGh@H@.җxRKjS   !@*ɀ-@@@ ^G`Cq뭷|7xU7CW83ՓJBqeJ_r\I/M]   t& P@  l]@ .l HW0HH*~'ؓJ_R@@@RL@n=   Poh=[ JfJ*}8SHZ,% @@@ d@;oVQQ ya=sfFS%;C5=r*>|Ύ&! ; ^G`ҷ>R UwCIo`g`[%6u!   ҙ  @'&x~w>+r}{ZgyfxH!c}Ձ 9)1 JtM1h;ɳ˗/Pzr{4=4/;UGphF4vj (@؃oh=[ JfJ*}8SHZ,% @@@ d@81`qcN+ܕ>*YijnQYt~vᅫ\rUQ6xcQvwhCMZ6z{˭I"}b9ܰXD#Y2gcJIh ]Q[`VM7`s~e5I1oHF*㸝nR$c:^[}BN'Kַ.͏]Z]piz  p.Ruzz.@*}#L ^Pu7Tq.J XRKjS   !@*ɀ-0a+ o;cl'z3&ղb͹v]WuH($*?6BިȲsc%\Q"9(bQB5麸Z,V%ҺLLښWSc- %oTxGP"ڱ0yLb\z]]#U Mv|w1ۻ豇Yos^@"@*[/ZHo}_5ҫJ R3K*}ImB@@@ H3@&tңTUylnؐXsW:Weҋx "\$wՑՃX=IiV=gk$٭vһLN\+=`=P$?E/b!qbec܀kIXe\V$uf7Jw^}ț ܗ8ճ|3-[DƛwcenT~Fstǝ/JoUI z1 E^%( @N ^G`ҷ>R UwCIo`g`[%6u!   ҙ  @b&I+률U\Mk_XsV{JN;GV.R'ط>Trd3`W[Jwy\o^J|tE w-w<7 ޮPt5+:FolX>Y+=Hmk.دx4`*Kԃ7  pFRuzz.@*}#L ^Pu7Tq.J XRKjS   !@*ɀ-0UF!kGz8¾楝ȁ]'[vץ=ZV.Ee>t瞧^cIh}ׇB}D^!o}O*b1o.n=r -6#z`nX]&n@4n ܞ\6Jcsuyj+ށ;I[㮯&E=%[G84|΄苚SbўbnӪf١>[@8oh=[ JfJ*}8SHZ,% @@@ d@$RSʳ7*t z)tG9ZIUwzI(f]u}X%(ԫxH"7UymUɱ>n#:;;3ɣIYk}vp#p_Ļk7a#n\TЁ+s{cU3Vψe ;!'g ^4R UwCIo`g`[%6u!   ҙ  @'xr*]Kk^%='T.OUQ\#XyS#u"铼z@* ^G`ҷ>R UwCIo`g`[%6u!   ҙ  @pzRZ:]!/-Z\+O;e@hvx6>D{nzV7N"=YyVzkM@~vwOn_[]%E '7IOԸ;%8}uVwk[3"J)Pn}dVKd WFP9Qo CQW2{ ilD@H}Eغ0FTz5CPRę@*}&bI/M]   t& Ph#_;\cĎ5;(DqYy_}u[c=@۵Һq;?"*?:up}uxHĕꁻ Jo6[jTôUKktT=SڨCYC(SfYsw_ͩ;uuV\AQtGO@GqSD˝"tեj 2!~E#zb4+x~j&BQ< { ^G`ҷ>R UwCIo`g`[%6u!   ҙ  @GyýpV6ҷ:^uݫPG8b9cA,޺v.1kg=Ŷ՝%jvjw6]rEc[ú;×;8[yP2|w¾h{z)ǨiM3sE{`,`C3!LȍSnR׈dܤJJ@@M J֋#uR[aWj703uTLŒJ_R@@@RL@n:E(P9]/@Y)^Wo*d4=,G qZZn65Xs^+^4ұf/F>U*=UvsPB+uO]"C%k{N{ba]S=!'dk*h%qϓTJ@@ J֋#uR[aWWg~g?G?яh1l μ 6u!   ҙ  @{R ǒ=tE!tUձ@{kwLнs 9ftE0`ZE#HbTTGMR@ykDfW/J&dk*Y//) ]l]TG]?'~]x?M:H35H/97H/M]   t& P顟@pW7RǦuZ]}26vA7V!F/}]]kI^E*UOV!'dZ銡\_T1kQ{Jb!(a@ yVuz]gB҅P}J?B   PJ֋#uR[avѵPZyw+끾ݴMT:KTl_?Wމ9   Jeh' .pz֧+xJ*^N[#PBJ6kvO {}~c?P;wjIs$ZWQfoTQOE9jvՎeUkW#b5zjIwQoT#*'*ZS"POEGTݕJw]0G9xm;6m54^A?zS Y+'UWT].3E@,@*; {;oZC-J\CЂn/%DISUTGVL|Jt3VJWZgMՑ?.h,6s@@@ JAظŸuH:g=Jjgot;a^z߳;Ň;C9"\tͱf/@½#1fBt(kvS$:zpwVDغUCE"ub,r$9(Qfnj mׇ; EU([YdՀЎ76hq}ې Y+#)OW}np-*X~,;IUqS]~m$Zzp 5 '>9f +S4RKeuq֐JL׍9J%Sҏc@@@ J??# l)C_@@ذSo~vyQ]BViFa;w6KLRRK! VTL׍9Hϡ:LR8 @@@\%O 4Nlkt|\rewQרzE@@`1R9r;#~Ńw3m)]J*}AT]s5Ċ19TǕI*}G!  KTF` M+zi-kԦ@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#A@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#A@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#A@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#A@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#A@@`ҧY)sDvFXqw|Mg,i?ST8kH/<U7ucRs+T87B@@8sS/ 0V#; @@ Jhgae+5iLRRK! VTL׍9Hϡ:LR8 @@@\%O 4K@@*@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"l5C@@ؘinvVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#Еyg~:2Is(@@@s J?<"4c4Z\S5GUѱmZ+}Tk?c@@8ET4@;+e+._L%gJJ_rUg fn!@*}qeJQ    ~.yEhbxyޮQcS?<_l9~lg  L"@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"\)m5>|Mm+í /U/Y}S:]kK|?^]K7SAj\[RS6mz\쬞ΪWk҅$# A@@ HOs R팰2δY~t)%Quq֐J_x+nPW&qn   p.R璧^@`fʧX+ݩn獵mc)k+) +BԵJV=.SYsEýAs?vHݏ#]uJθ|wJ[zN!  0invVQV]F;_ә6Kϔ.% 9R bEtݘCT$>΍@@@%@*\ԋL#ЌmTRΈ޵Rʎ{tΩtŝ }AO@s A՛>@|#D@@ HOs R팰2δY~t)%Quq֐J_x+nPW&qn   p.R璧^@`IRTK;Jڿ@wlg:׷;qEK+XyZ9q^4+R$@@"@*}[2GTngwѯxt͒3KI/9kTƒXQu3]7 >2Is(@@@s J?<"LJW;JoݿX\ *--йT⼈t؛ҵ=wRg`Q)  invVQV]F;_ә6Kϔ.%3?JgNfUߝ9 я~YSW]ׯ_ɋ%{uMc[;Ǵw{Ǣ7?mf  \T!&I?pG^kuk{6WPйҟCZyX='cqt7[Ж"osQa)@@f |;<@7vsT#_W/.9ĺ Eft;+}w6DžhR.ɝշq溺    J_ϝy__S <'Wg}'s)֞Ei"Kq G]w5b,F/?o->',LH]7z )?\ _7F_pFȴ|aڌo  ST:DžV!C"Z/JcogT3jf|@@@@`9. *0.Q   79G*}b?.?mF_]HO>=HON|I1ʤI1H/q3#"  XT:3[`$ !  8R">yxex1q6B''']c_}U}.xIϔJW9׍?GxkT͜. N [5w{6"   qU Pq!G=}h@@79@*Ou[F.!│r꣣yǯ%Ͻ\Wjx)ў3xT9؞EOWR=>=p)ǪSfZkkJ2;bdrv|LpTzg>z.~J4W?IϑJKu(OU9uc~^Wh_dN1It QN툮aڌo  ST:DžV!C   @҇̿_t?Jy'oHoHDeAN)?ݓGY>^<:3s50+ct\{=ji32_* )S=eu͊MO{ 9vto8hGyu$>G*]C77j5">bujr=Wz$̓c؎YW   `R@n*74@@H֫+DW0קzzpz6*xӥmxs"V[PSA1}: [zڊ.ǎݒ8P)ߪ|=vkiI=pQ{"SaK]|a]>6~]LЈC6B=1|v` aB>875uſb_9Fu󐕤W{(_\=FDŽ#wY(A{_՛1{|@b\x_>&؟J8O:o[|P`l :*]gC ѯ5C? Wn>Ʊv?bY SyUL95Z*~?f2Α>pkTqy-]c/nǗ;_ wPM\$ yY'_lGô=8@@Xu B A@@*HəT [(P:x8O9GpTTzg=p#eW  ] yS?J$J 0TP]s{C:2}ki>|x\gDZE'{'1rOc=֟_W{~zSϘ糦Қ@~Q1|>vTx/ޘgXLB=^5_z. /M:%׍?G85jqsKG-]/V[̮W1\`:?YHlɗܪ|4Ɓ   :Hs\h 0T`p;ϷVW\^kמ㨣o;MS/˗ZZ3ޱѓFy)F|a;LbUЅ1.:ݦq# Jz3~#R9H@ƈTzO !tUr*HқJifnÈAU՝qqS~AGjލTz(>uº^ԳMpHYs@Jg^N?f ]ď/=oup-vണ|L`*oWYy&zx`cG"G ]ិ'T߫"ԩ6/җLk*{b24W1[/ ߬B*feT߷OR龂針B*}Yj@@@ ^8J@KĠ|8/~=?^tIZǵT*Gw p!9"5U}U!b.a>uN)c J2?_c24|PE1U> ͫuc~Z\5@\}5jǏ,U5jEsC$״Qu 5 y=L@@@u J_*@`zֲdUpqjyz*-Ck:Okj$莵֞:pOe|:m#;a}h/p]㺽my.jD*HəTB:a_G㉴_Gcg{Jh g86D "gsKF:14GLS`I>w+Z{R<|xtgDyHb>x-^y3fQ e-ͼATƱz쐥?=D`!OWiSь0_z8sO;{u] bndIgazRjOc§p' z%bαVzAOIF`Z򔞣np3-E}T#p87,kp>^{5F>^cgiߡ՞=T913椝i^,҄уxe׼*]jȼo_7F}רq:gA EsK<&a| )g\|ͫP-Qik{8B춇i3zq    NRZ 819'LOΝ 98!!̚JnQvڗ9jO<%S髚ic@ ߮T ~H 0NTЛJ`X>^<:èG`i32y*}=p$~7ׅG-1T|v"o<|~Rs҇LT1H_l ,f+FD@@tf P@LQ9UB] * +ˮxk"zy՞? чhO}Շ ײ_:栗u)tQU >6'5<ﯵݗC#7U%.ѭu~Eu/_ku}L2s8[;}h47πj:n|_tECn=Suʼng=LPjI)Pӳި4;U̮Í2ij*ɓ|SDʓ_2UҜlqvx(6:6_K@Zh,32Ǩİe/&:Va^mٗώqVv{.K| uLpEry|vUo\\=8rrz~ϣgӞ'_mpoUb^gZ͉.Fgluu'BO[/x5O<gfOx ,@*}=7`+L+;R|+GzmbRG͐cG}O*Q̖!C*}8£ϘJ}[דJ_l9_7F} QO'E {6"  `u B LJG9@ݙQ%"YؕJ@<.vj%ͭA"ݘ g+-ڼՅݶNyS`Nwpخs/O֩5#jsu4ҏ^ޞ%U.%g V6r3+B{ r0lms><+Rmg_ qkgl1{ռZ+ű3k< >&gVJ=HON|I1ʤI1H/q3#"  Jg [03:3F^53:"^N ֬g>Eťոђ9Ǧ"T)rS}*KMOJwDyVӋcݮ Ӝ:J ..W.6kϩf.{ ZS^txE%DcR*S:P5ϩTz+z5cԌ{"ochkdH*D*W['[z}"> >9.$>(J'>Ǽ"ZW   @*9lA`@ϸT"8nѪ"yS|#&ؕUv0oI 9ϪD33 c.V 'owʳ(06A0ltW*=/=$򋸰SlO s#q#/t*cRuM6_΀oO3l}oMxkݗ|1"ֺ~óŗ?53WXգRg1|mY߅}S- @J_mox" Hu!׾?_, }__]i/.m዆^ыӊ@@@@@`IorJ)L`}J(:ط>:oTO;hXO9Kcg=pO2wO9H/ZQ^s7B\uâvjC占b[/OpU3ʮ}T{&RQw0z7 Q]fZ%E^UoDZ;S8~ ?TɝYT5J;vb1'rs^?`k _ ):+bC Z8>QE3dɓ*Ͻ橔u4k:4uygsJqʭ-:O[:UQ,&iv֩t"d|4).'ZY՞*:SO} Tk4xztZOVp5xVj3_u=})Ԟ~RCSU13ݩֳ @!@*{-n%A[?}z}م_u     T/@*! s> 1x@kol;7q$(`&g6^9zVT]7~ޠZ՗ylGҧ=)( @@@@@ J?@$fnhZQJ{fTgLkQb)=K*=+0x! J?·R鯾_}ttNz *[ے{CuIǖp#J*@@@@@ J/؋@]J+í> mTcW}D9o?ozbs!*SSE^57z*uܟ)7\JVi^켵FSW nOlq-'     Ho`Z D@@R黾sS 8ՊS;ش-^kA2;#ޢUQ6Q= *˓MF[oҋeJ=5s8N}U sc 5!     PǏ#{@@@ Rܾ!0(WګOΩby/>c7o/Z\fԜJw>?W}(sωU@r0/>/_:d`*V>iׯnz4;(O=AS.\88V58W˅3. /yOoV'քlWꫴ,P;U L+@*}wnt~jJ[;VOq%#`z>DkK7B@Ϫ=.!$rۊ.7[ "n{cQ q@ƞT/,Գ/?'2Ԡ<@@@@@8S1 0A#6s*;I{H*=*R5+WFNP.<ytң4NiُӑU0k-j"Z;dvk XC5[6|wO1uV '].n=߽sb8@`BRQJFwlw~Vm尵d(R     lLT NLLjN;pX*c'žҞ<"OZ{!?]춆l8᳷\v[@ibn2o(R](X,!ETGҕ#豇d豌 ?VB(Sz}t> Jl@@@@@ @* TL(0a&]lҫynE/bWܵ>CN6> vgdwzʅ)0]㩜V.ij>܇D ͺrǽ[-R!Q`Nl=UEyf=V= p }FS1"jFutfd@UCjcq]WڐyC} uOۮҏv;nw(=yRicyX71ܒeW cdιS+|2.`P%h2(^Js0'rϼuVu,_Fi#ɬf(H蹃q^ Oѵ~vSTz[ֺ%W]@`ZRQGmaR     lLT & tҕqTq'J"+|pڮ q nFrݻ"'GUK##SQN.l3GUÚu2D B_j^vv}TQk9-z)XmמP9zPꦇL!0*íN٪zZN D[/QIL`UAy nGu;ŁjT_:{Jq dwY';$)]}xco$hΙ&Hy\N&~AqBEB=&vn3nduNcz}RŞJwE1|y~(׈ygt YjIçw_בǪ҈ڻ17'OיصJwrkkQ׫c #HOxDQJ#&p9@@@@@ؘ (A HtҕJ#ņ#p ڼg74ySnc*qp4J?s9E6q5w"XE> 뱗TW^;S̮4&"19B[t==Յ<[NgTwZy{@ZϋP%cX|-)vֳ9g:wz&^!S鞟>:nXx2o[ܪҷ=A QLB=0zWdfK:\lADT܃^{Ԝӄ@@@@@@`QRrS 0$rT*=4m(ʩI\w'\+=&WYTz?jYǦuʼZE *+=>JW[x{rKv`*+͜셽08gMJ*_(܅SSG;OL>Jw,[r7Xc>g1oV\c|+NՂQR/PU|V<Obsk:m#  >YW_4     lLT &`6<d^ պwׁ]kOJ*3y򮅓RUJU֜ҎҝՁyGN{ b-hR^TpWd}Z{;b SnCΑz6.ƺ'ܵ}8?٢k;Gs8:[4}JUfK)KG \+=o5THA"=g5T'q R黻[      ITF"_s3\VVTaY}fՍXӜ.D(u`3-jⰎz[;fG+~N7eZƋ;~DjPSa_?E{n*=V\ \H∭K8 ,숳uKu3"ixˁzY.DKG[b4 dO$59Jϡs\}2 6UBOYkʍy> xV 0番9qc&A1 %gcS Co!=zs2i  2      t P4LeRT2r bz D:<m鬤3Jo=P:;to#Bݜ7U^@Z8VDdO8FjZu85/YݏuO5w8Hswa&_|QVjoוS_k¤TATzݷ^@@@@@@zH3A@N(^dtB]aIsCy?37bӮtVk fr;X%wNe/_,7߮hx3Ml21w]p4|~te\G8 @`c       +@* -pzRG">mHZ-TBt<ݏyj^H~Z˙ևDOKE==f7L=Ud_P^z܅䴷GurȪ; ᦍ>of]]VSQ]E4ȓzfO}^(=D1yTW-FCb7}ǪZ.G-C&s>U^?GO\SjI֋:`ȹ~긮Qҏu@`       +@* -pz&ҕt2Xbc=䥷+du窝T qLHzq"=뒝U!~@WvVGEU6vvͻ짢nި\lĩ)~;QNV}YW>6^P;.O5OESq͞GV]_A sYWόpt-~,Znu Lo=ٵkGPguslWg@^G%fgJn%̞B(וjiR[ A1ɏ̭'i>o3͋@u6[݉ ?kLK$9'[S  ^G@@@@@@^RL@n79zOq,j׌ҜacSnUbՇ+Fkۜ}r˹:$/bJ]uȭu4:=.$"k\i~ik*گq뢈Y4+ߧ](b(I2ZI&sd#cpohn$-fu.4Tu3?(O MTo &;g'[v@ J֋#      @t& PSR^9@U:3¾EHǚ.+WjY$kh#Z,.,NL砳V>bL{^ AV^?757I)LgE>5͋xG6] E*=ʹ(fEYiSjwޞiӟJo̭ ٹ́zRmӠtw`*f/h(uy{ &Ɛz@ Ruzz@@@@@@ A8=3m*]QWf[~Vu$vxk5Jgux$>u};~J*=VA!zŭQlgnE k-HCEES͙ߓJo#0}4J׳]9Jdh^QﴩIQwO*ITDsέIyr.~Sw8{v=88NS H}E@@@@@@@WT:[Hʹtǔ`I-LGJe4Xc}t!ր29Z$e[{.pN%NHHqk*}`]=TzkLمyTzW]Ef\~TVG.Jo=t5WujuNf/V^r>ԝz{dJ!k8gvǓVz-ҽ]=9wd;O   ^G@@@@@@^RL@n#5^7g{ͼN*Xmc2vWsիNxHvk+ԫTՇK+>Zi,lcgoWKUWv`u~9QE]uL盛+ U=vb"Kϩhcr"o֕+O{qCR9|ﰸkl]xls&F!ǗӘ-f"m1@:P)䠪qZ-fNn𱓹$s'ɐь^_ςhݐ`?{2N}!!@*[/Z      ҙ  @'pRQX$US`걂MS2'b:POuNf#[i(sS t-q9>1_N;nkW;|}spJoK"c6=ub6rۭ#{L!wSy)ʼ׍M~9@811I}M !k}D̓t\."b ҞɬgARi~ۆG89ɏ̞IT gh,nj׈])Σ.hA!P9j@ґɱlͳ-  J֋#      @t& P@E)  H}E@@@@@@@WT:[`ϱ  @E       +@* -PQ "  gRuzz@@@@@@ As#  Poh=       Jg u T¡  YTzݷ^@@@@@@zH3A@  T$@*[/Z      ҙ  @ph*  { ^G@@@@@@^RL@n=z;   J֋#      @t& P@E)  H}E@@@@@@@WT:[`ϱ  @E       +@* -PQ "  gRuzz@@@@@@ As#  Poh=       Jg u T¡  YTzݷ^@@@@@@zH3A@  T$@*[/Z      ҙ  @ph*  { ^G@@@@@@^RL@n=z;   J֋#      @t& P@E)  H}E@@@@@@@WT:[`ϱ  @E       +@* -PQ "  gRuzz@@@@@@ As#  Poh=       Jg u T¡  YTzݷ^@@@@@@zH3A@  T$@*[/Z      ҙ  @ph*  { ^G@@@@@@^RL@n=z;   J֋#      @t& P@E)  H}E@@@@@@@WT:[`ϱ  @E       +@* -PQ "  gRuzz{W˶5?Ќ?.:AT2, Ԡ"%De#A8mH഑pAq p-A\(A:MB ' OFY4d}ss9;9挳!@ @ @8J@ 0^~w>ϧ|}vjSrǏO>=߿^ZqKѮ; @^TTO @ @ @TB6:WJ?~|!~f۷oteu{6 @N HK @ @ @ H[ [`=/~TzOt͈WIg{d/ @, >G/ @ @ @ p( n @`nu6'~Q~Jw $>/E*Y @SHK @ @ @ H[ [`y}o޼yo߾Huy+/-?}wwǻۜ[}p~3?~9z6qǽҫϟ?Aͻ)5GL9ouIno3tqrLR$ @# HK @ @ @ H[ [`Y^ijΑ6޽'z"ԝPq*^_J7&^XɚuyS)R#BxO7'2Uƽ*9Lm$zN @ܬTTO @ @ @TB֙E*}uV- %۝CR{&x^Q,RNcl='2BQށ=JV)fCW&N J  @ @ @8J@ 0URxvg*=mx"/+}oj|Hzױ:Y^*}QdNR\Ϟ"Y @z @ @ @--pTz"՝4Ύ=R.'ώ=Usd:ωI/"^lzRUX)2X @z @ @ @--pTzvN~s{kW޸I5TXcL<;W{Ec7G駌^*#m`}~$ @nY@*}^'@ @ @ @P@*!@XǏ^V+vU Xݼʫ}zJ'>6^lg>=:7Ťn*IkObkwxȯ-Pw?(>}VW5fozV5r  @z @ @ @--$0t$E=V^']鉳'o?>}xzxwq3D-ƫq̋EoI&5Wɺ7b*fLaC甞x]'@xRsR= @ @ @Rxͱs#@ z @ @ @--R:B @5 HK @ @ @ H[ [b;߿ z~.Tc @/M@*}^'@ @ @ @P@*!@/-j @6z @ @ @-- C @RsR= @ @ @R"H @z @ @ @-- C @RsR= @ @ @Rx?~9D?~?uo߾瓍4O>'ρcdlu3m6 ~E.E;" sx\} yDcO tzEy^TTO @ @ @TByʋOy݇bsoߞk'̗ONyMb,{qz"{uc5}F*?s,G#孚BT7qs9u",wrRئf-\t>|Zk Ӿ';>7i˃(mQxzp1 z @ @ @--M PΦ9^Q1>wjVW GR1Fu*UtvˈWI?}i{"8.NzϷTü>|vcn.J  @ @ @8J@ 0E9u1x=ҳ<} p)^4dϗ_M*.IElu|FƳ^HLvJ{Qwgc_*/ ܈TTO @ @ @TBSmPf )ɲ' 쪛j]Cݻw$?y;?<;}d|+oA:O䬴Yo޼ɯ3U^&5p,5=ḏOXs$Í{ Fߛ˗Czi#3쵩ˑpvWr]L/`' EyNpy]+SK%}QV*LyyAFEMjbO.*j9vbYSI:K3^܅[Xk;/byD8uu/tpkj웱nŚټYfQyUskITeVXpͲNjvcO.`im^18.3wnDSq=g|8ٙ'O- H]O~t!P7K=1n"sJ Uy۳^*TN=x X7]W'@e HK @ @ @ H[ [Tzrr%JgEr+WJV9i %kX}.ƪgq䱓 w:%3wnG_.`F8|X??y腱Oq-P|suh_ {:?@>-?Y+`^"@e HK @ @ @ H[ [Tz1F;]W6 .~Τ P{iVsEc*=o2D0T>u?f"98.ss"YP6ʹ{1.W[PiO1~b˳Bpsܱ5f)&ͲyiθUu:Du;:}8bqXbpf{֍.~bJ([{7EI`l.7c%F>sփqq%ϤOxw/ͻlqy;lNv/MBod899k{̃y( >G/ @ @ @ p( n @`n+mJLd vyQCRi|J_"qÊ?R*=1{z{8NFs"F5^xmN EYOd/(bRgSs5xKu/t7[E7zE:ɽ^IZ?cmǯuz{"5/._5^nո9@7o,*_HX\pMqg*}oiXտ= G*EOTv9n%繷ίJ/]wNP^TTO @ @ @TBw*=5$]Rw]SLq*}=SL*>wL{mεËu."+YoL.9NUS?ά{cy7>J_/LynŸ4s񅄃KS;SpJYlּX! 7Wc1eY[נ-Rhowf Tz _΍Io!ߝOYEO]eœ;':[^8xR oo\T++@@*}^'@ @ @ @P@*!@WL/`BUFRj/tAe{]ScN15ֹzEi\[p{[_IXOmxb/7Tz?FkEcJOUsu\o㪾b7YO;as^u'ě[t;.+=sHa)ԋ)ޅ\nEmz}9=)Lo.i.ksӸZׅSk)<{](==Hg9xzoz?^ S HK @ @ @ H[ [Z)N{Qt67ot1-"97-:C썕gT/! V"εnoupO $gv-uc'1o\c//c뭦+P=lW[/8Ǡziյ3=fL1?y`=o31~/gdʑcy]o73wnN{!Թ7B?`YiyS- Կ81malX.,Z.nL'bz޻ֿټ3J.XLʯd?z @ @ @Ct s ؍xp]b Kw ֟NNܗ|lB6~/_zf=v7w)J  @ @ @8J@ 0MxLk ${ s3kdڒ3m>=-c?|>\z^!#T$!%@ZRsR= @ @ @RVDF?ܚ@ lzN{Hz]\I_ls8rMs\;ו 5g6_Zxq JTTO @ @ @TBd} @B@*}^'@ @ @ @P@*!@SoI @TTO @ @ @TB{ @B@*}^'@ @ @ @P@*!@SoI @TTO @ @ @TB;۷3ׯ_1b:EmuQq@̸H`^Y?e)͵w=\xoX6ٯ]Lz~{/+Ne HK @ @ @ H[ [߿{޾}[w~I?HܧO>~4)'M)E]__\\ӼXO0y+=oefyNUyQe5߯5ڞ)"|΂jϠyHx™e5'W101HD La&RsR= @ @ @Rx`&Ǝ &/xTߙTz,fyo_|J@yC="&^$JcoPtgV׳OmPyfmqL(vLO#/*ܻDNyncw.-xă.2 ;=En_vȉv'-#^6?i0'M5z璉{zR9L.Y[tƭcUUW޻#N1QױM4u5>1T"`]IkKSC1f辔}bV|kڙuR}$JU5կ{{_44|Ta`1xjQ)}_cVc%=PYԠc=ZTļIX-P7CC[WB:Y xY姞ccdJŜ2rV]֫ 5 x!׋Tz_9|^m9 㲩E3_uf;oދdϹoJW͛w٢_9F_/0_$X{+qU@*}^'@ @ @ @P@*!@W+fWJv/yd67E8zz%׫Y^Wr46v$4#v&oLw?+s kn5JҦyJIV=5?+hLSONIp[@d~O^7TY,Ǐ!eh1V6댒h՜km^'Ak{xDf7h 8,g̥:\Kb:Uy,7Nݼ/!dm[kFWUUI@oTUO~/zf]Wnuœn\zwdc!or{FKT/Z)Z fľzmR }͋">fGD䔚zǟΑ¨{?cq¸l[+[t*jEm}p+D]_2uɯOR?nժy.[tN.Kn*]WA@@*}^'@ @ @ @P@*!@WLό9Ԏ$Vz~ieL+D^Qufnܤxm^1K_/Jbj:ι.qP4;UOhrWBu{kfL]`LvX'{Qz+Ikvp) ~{""zͬAR}^3N_:XԠZ]pe>wZ\֫!j.eY{֫+jzc?d/_ϴEzsfЎ{m/;qxzqYTx^Z9$f\{e.J/:Mŭ7U׷d9NڛK{nK;[(s,A|*}ݛ¸J7S6E[yG@p.έݔ|*Y4λc*=VvO`-~8j}v,Ym.MjqAtv{)8[^?w+s\eu%׺kؼ50EW8kt\,ྭWˢ_4;S{i89 kTz/ s/䳜kTz݉^ncMqĽUTyUEXH渣۽yTzG%wQfJFӞc HK @ @ @ H[ [љƍ׻ᦫ͝NcM>鳣{cI߉PΎ<&++W Dܕ$3D'+}o w+8;ו݌DivKf:eVx=S'Iu[+-./X2Eίcw^/=u,{&R,x]9XG/ @ @ @ p( n @`nkf:}>ko*&՗_\dRӠb_$w:#))Ctt;q&v"XXc%SiּDXG3zk*{3[oՈg4SͺNuEtzD{Vo]@+:n$r;}7A2Ֆ5ݗ0h^™Tzƪ3ǼgpEnU7NUw_ToS̴-Ҩ+u]j^9Ws\ )/G'Y3Dy}d)ԲY\$o.כv\ϛuSCMEZ*c|QM/a]Ւ8X< 3֥_d{U=c,q}7]]?W콱R7fƪA1^[u֚?KW6gnZN.7ܨ d?Ϭ:mTTO @ @ @TBIRnu6Ѻ:X*<]aJuRv]Fe%+[qJvOLaD]׎PYMCtH_Q:\omT~|k=f㾳yeܚi o+5H jR*yjsNjat:Y}X*cCY.G Y甋ٸ+VeWjJgXD`WE-3;LZ%͋U.:S^85Vٌ󜞖9wc$}zUVͪRx]z,Z@~Paj =H\<=I^W3=HZ!= 㲩RyWxYeJ/K~\qOC9a2b-:;eُ^]/:}ƥ L{EOc( >G/ @ @ @ p( n @`n+dt5:ҝ^sRSνO9Dc-O'(yL z @ @ @--;&"7?gTzv(~KخOݡT{u;R<?z @ @ @Ct s 2@ [yfQzIz J=y;3:j暞i|;m} @ HK @ @ @ H[ [Qs3:iǏ/`\$+W5&@J  @ @ @8J@ 0E @ >G/ @ @ @ p( n @`n @J  @ @ @8J@ 0E @ >G/ @ @ @ p( n @`n|ׯ߾};3,'t3ޣ^7=t  @M HK @ @ @ H[ [Qs<>}ϟ>߼yS9SOoi?םB*y]F_wq7 @w HK @ @ @ H[ [Ct;Uf䉛ғKzKL<;AjL׈V`? @- >G/ @ @ @ p( n @`n{gb< ۽wT2H^9 @6z @ @ @--p@ϧO߫laÇb! IDATb4TzŻ,ŏ?sV@UOu^t ^ݼ>~r*WV' @/G@*}^'@ @ @ @P@*!@ټx%Jg1JW:&ޙJO FImNO{Kl۷sƪyJϻ9XMgJ[9͛75n%+_3-L?"9:^ɻs%I|Lj#z܇_Y= @(?z @ @ @Ct s <0gSCҝ^8uNsTzh[N=W;w3_?,jM+>NFLx<]suz^\ @(?z @ @ @Ct s <0g3U Ig>v$w+c{]aG+>Şwm~Q*}Tzݹ*v$}s.'z>{REkI}s^\ @(?z @ @ @Ct s <0gyrgR U+{x*}CROp<ƽyrb1{x>: @E HK @ @ @ H[ [9dMt^;ۄ)cJ;$q#9b+yH*IOmc8RgNu0a9/  @^TTO @ @ @TBIB#>NĩwN3͏Sa)cD;}ϑ$^}+L=z{h6~xiӧO޽)۷߾}n-,߿N$@ pTTO @ @ @TB0'?_G?Eg5NoVɦ_{wRs~H @R?z @ @ @Ct s GaJO_~V*;_}דTEt @Iw|̈ v";F2Oz[jTzTzӕq1ԾfW?5{) @$ >G/ @ @ @ p( n @`nEb&ITf»r"wyon^%]スT ͛?$>sg=R鏔- @TTO @ @ @TBN8aϻ?~c*= >}83lELWgJ#@xb?z @ @ @Ct s ,4mjGR'J'fڲNcmi}=ٴOW9YOJ͹7||:%?B @ HK @ @ @ H[ [`3ٓwehxNuWIfOkcJo׋A\ iypJzNI sjYz=ܧL==ǚb:ٿԔ @\W@*}^'@ @ @ @P@*!@ L[R镞C @ HK @ @ @ H[ ['o<? @z @ @ @--p̋ӧOv~>|֯0 @% >G/ @ @ @ p( n @`n @J  @ @ @8J@ 0E @ >G/ @ @ @ p( n @`n @J  @ @ @8J@ 0E @ >G/ @ @ @ p( n @`nG |ǏC/_ΏǏsY'[z>xf:WBfzӝ=/ɉQϝeh2rw=1 ~'ÝJwP)6Y΁Ҿی<-j5 @Kz @ @ @--pif*/O?uҢ>|ȋ!޾}{>~dzN?9͛7|`}ϟOS c^_]/CZ5_ӱZ9Yp^[7`zNn<OJr;Y1od+L*m|ʋW$SXL$ >G/ @ @ @ p( n @`np,ee(+!rzFdg6~x{=<^K KcgzKc<;hOy/ftz#@k HK @ @ @ H[ [Z3Ht89d; z̻99;-߽{WA̼H\fڧJ[VAJ͛Z̜;Fjk.a鞫L3tM'2ӞZ5+J5s'~wLiʼnca]7MKb:JUd}F6̮X׫S EyqYm :쁊^ʵWv5l,/ŷڿT][TMk.T$vrs3]\;މ UZwR!dp+mqCm.=PY`}=]]78KW K~!C1ӾMFRV=3?wb;0wJ}ƽj5sRnv\8VSg߆wY\j&M=0'U ;ֺMY';y}u\qw\?߇9J[iϮx#ރ:9/nՅP*}qL* >G/ @ @ @ p( n @`n$rM21LjLh2+4_L3?yQۼ=+9ws&꼺w=JY)F/#T^wHF'/u*i짧P86^IJ*aXK))9ϭr0kun;J H1ǁ+MeFUHnؽ6Xq 6LU˸]UE+\W*nվS \+y}aέ\t;y_o_(y8Ǯ;tqcbŮų{={e޼2/Ecx!RsR= @ @ @Rx! ez j,R}դ @ z @ @ @--CT@jRڻs]/ @J  @ @ @8J@ 0 ٨@ I-ǏL^ @ HK @ @ @ H[ [24"@ @!RsR= @ @ @RxH,ƹ @G/ @ @ @ p( n @`nbK @ HK @ @ @ H[ [24"@ @!RsR= @ @ @RxH,ƹ @G/ @ @ @ p( n @`nb; |A}v~П|YZ~}RIxTTO @ @ @TBqz |鉃?~̠/O?tϟ7~Ɩ 04 @z @ @ @--dW?P"OJԽ.JFܚTTO @ @ @TBI&;Vgq5h^ב`w|Rox;dw'up(o[CYTS:+|=&=T_s9kDWHo%sv,Fչ_,?~X3E;Y @( >G/ @ @ @ p( n @`njySۏ$^SL]X@ޛ S/.ߚz]+WLٍQ|1 WɟJ=٧f @( >G/ @ @ @ p( n @`nm6;+z{s:Ro%\[tϸ]w"ki>H7ǭc:;SsXeyILww/zM1+xDX͹ @+ >G/ @ @ @ p( n @`nfn6S=ǽ7SI秲/W<8zkoܽTqQ&^ۥ7J'/һqs=NokV䈚 @E@*}^'@ @ @ @P@*!@l2N>#|LdqwO?xǝkq$МܽqmWz:soҫm/<\Jv&ðgoӗx;wv @e HK @ @ @ H[ [ϟ?']ݯ+W]꼛&V::SI^$n:5^]|NL$:GQq;w?{)%xݓUjk=pqszJΧ(Ջ*z݌X_*8^-Ȣu=Ի,u1uExz?z @ @ @Ct s <}1Fgs/u4gq/\t @Iz @ @ @--0i"g,;}6,IeG9Z"[߲ @ >G/ @ @ @ p( n @`nWIt~^\֩^*Mٌ @z @ @ @-- C @RsR= @ @ @R"H @z @ @ @-- C @RsR= @ @ @R"H @z @ @ @--=߾}{e3z9ٳE{uf߿_k }tٝǏB,'jOzx}w^H^½y|6]|5p\6圿s6^7jٻG?Kps=M]úp@J  @ @ @8J@ 0ã3qh7ꛃ&`fwl^ h^%@͓(q?:D~+}0;S]pcм<=󭃞W._-,;߹NzѼN,6tQ'\⧬}ߦxx-˓!{VRLz @J  @ @ @8J@ 07q2^ߙN]fSdI&/4Tzǚ _2.u__1^|ᵮUj!d+'06ɤE p^@*}^'@ @ @ @P@*!@C0{-r :'79@Lxʞny}f32霛3Pm8uy`on{[t^5SmT.\}?ֻu-3;zmԅhڨK9TXiuiY?j ..nڋpQs;._5w%wsXqu 3hk0>%z&~֥Vt|ϴ)G/ @ @ @ p( n @`neǝ>ֺ1;fvcrpO$t 4#v=n;jLoln@; vB@/^靲G"iekOojEwd;Ⱦ6[V+eWi%Zr;S qEW=ˑhU2[~7 3,ưr_q:q[Mc&ޞ'f\x,WdQ؛zؼ܋{N*pr MZ @ERsR= @ @ @R(|c-zX_/M=ש͈pm{6?|vs[{d/zPtTzE]=;^ ҫpO;ut;wIL\WcLb{B̭w+m=4S*0^;FZܭ5j{s4ZחfZ'F.26)ĩsI.BiE]IdR{g~:IU^;^Yuz/;~BյDSۥoIW|\iĻþYܭ5͓glH?.:ػZ+mưI'H=XL½N$@c?z @ @ @Ct s <SI&$O4j,?,9o%bwE2yզW?{f{$uqJyVJ(|bq@I9m:NfQJwS[L:ׯi׷c]9Q6[y^R)}|^<}vٍVBd.#U+mڊק烯d7oj޻[9֠9躦9RZ?Q o,VXu 4r~-TzRÁa٦AFLygPӬ ~z{ܙJq,  @ZRsR= @ @ @RxxD|*=9+z&̝>+t+a厱O:&'& [g'YI~v5=xɋ77oشQNR/f]'UU:WXO_UX[DyO$bO^gy7re\ӿ̭eqUEJ^lu0u$:tzH]ӬÒUzm\]yUϵAǕ{״.\:o"c pqb}YF)3׷{sX} 7r]w% w^f$8Zz|2.zcKy=#]睔_@+TN@*}^'@ @ @ @P@*!@G/ @ @ @ p( n @`nenoj&K~d @z @ @ @--0cG @nP@*}^'@ @ @ @P@*!@71e @3 HK @ @ @ H[ [`8  @ܠTTO @ @ @TBn0c @fJ  @ @ @8J@ 0q5 @A?z @ @ @Ct s `ǔ  @( >G/ @ @ @ p( n @`n8j&@ pRsR= @ @ @R4) @Q@*}^'@ @ @ @P@*!@3qL @z @ @ @--piS&@ 0TTO @ @ @TBf㨙 @ HK @ @ @ H[ [G/ @ @ @ p( n @`nL2 @z @ @ @--0cG @nP@*}^'@ @ @ @P@*!@71e @3 HK @ @ @ H[ [`8  @ܠTTO @ @ @TBn0c @fJ  @ @ @8J@ 0q5 @A?z @ @ @Ct s `ǔ  @( >G/ @ @ @ p( n @`n8j&@ pRsR= @ @ @RK߿ݷo6|)[i?~l) @x?z @ @ @Ct s lh:=[Ç?Sk^'4q @A?z @ @ @Ct s <߿A֧۷R72e @'J  @ @ @8J@ 0:ClJ&S;ǟo% @- >G/ @ @ @ p( n @`nEp͛7~ϳ!zmӧuʥϟ?~ɋt#Շ2nsׯjȈkHI4K2; @J  @ @ @8J@ 0:s7@R9Bz"&D^JW W`}l#?~züo߾TDd  @^TTO @ @ @TB8^ۮ/7JLw= rJ핞{_}   @nP@*}^'@ @ @ @P@*!@/!+O6=wL*7I2e @[J  @ @ @8J@ 0IO</6P?JO|=?~Z8|  @nD@*}^'@ @ @ @P@*!@gR¼2k}"  $M^]Es^'~:}v#$$@?z @ @ @Ct s C<?~|MGk |O^yv(6Ǒ߽{  pɗJ^UCUi~,1ޝNDL  @^TTO @ @ @TBٝJӧOOT!\nӧWoSyl+^?KfW2A @ HK @ @ @ H[ [֢G/ @ @ @ p( n @`nyC9*'@ pSRsR= @ @ @Rx?~9D?~?uo߾瓍_wGS릻,=u;k5YY9nP;\J6{Kgqousv\S HK @ @ @ H[ [1wO?T߿׉}!/6xav97oJ1ϟ?yަ>1(rשe3 *ʧ4{!=\Na:xd4c\q롔ٝ91c,Zj)97|?/+W+ HK @ @ @ H[ [)16ݝw2WIvVԵJ}HulU\?;i咝O/az7e?c/D@*}^'@ @ @ @P@*!@L،1M[JS,Ow$n!viI=\J^K=/='M?Dµ?Ȼ_P2A^$TzH*_4ͱqG.էңHWYc+ >G/ @ @ @ p( n @`n+kTzu[ $#Kdɲ'[ r]ݻwO͋I6m%Xy]O䬴Y9:w Wy˗/5۰tUduUufn{jլ4*2ϑtqxp,iM?#jsNw^b*.>֥ YlV050T]6`5jԑ#=:XO\ ;ÝIϺF;.ɶR\~DbfXCFk6{x8NIͺpƪx?6AjԳέeCh^'çZVfUUee=~=gMy(f jyxtl}}wx܌+8>.ojYQ.?.'Eݞ}qCZֺ(tA^?cuJ/ZEk Uv?hǣ)J  @ @ @8J@ 0C9{-&Lt`*9ˎ榶8s1VE$k7 {ʜ]O;X5T4}VbΘ:[~*Xoϔ (=VT.lr) Ů"EY|鉌>=&oj^*ـ}s+D2Ҭr㥯zr.eR{m\W=vLoϊf7KYƤz{D)JG:4m/J z>s!a7z<`P\AuzAfoZ}`|MZ}MzZݬd1ױ5 5L4ۻys<,f[杞{wbp{χ\pίb/0K}LgU9k1>6VoުʵLvY<.J  @ @ @8J@ 0C<{b3ޗ[W"6鷎6Iz;K3Jc_~nQ.)n{3^1;]h>Rl3+CTzh{)r5l&{\(%SPQjɦjiI8X{뒲jՍž rh1C׫;]My4 ~]ڼ9S.9{H/nߛZ'Ø޻ljuK#ȸDsJv?}ɏwցy\{T<5 hrKڋzݼ+fL'wz=Ϯ鋕|Q_3-3z<_RIUH~;nK}y- b?z @ @ @Ct s \1sTz+麤7#,:w^2x.2wN+[1ímuʙPceNvgRոHW|_+Ϳ^iq[Y?fH4ӳ0rz+_{&GXـ5xVb{_?bke[zrAwJ?x2#> H*+oI&=XV}$tGy5J Lt\Cytqyw;; uq#מP*NC n\@*}^'@ @ @ @P@*!@WL;js6w}`*}UT1*TzuNv%^u*.&IϤғJ]қe<޹.3yQ Z9k^t^,KS鵳xMTCcJ6 4QNER1zF)ǩ'Sk=? V`3(ǩQCW1͘#HHܽϓb77Կb*WlV̝w{Tz]?z @ @ @Ct s \1sTzRt6Oﺺj/XL=.A*B]@bs,^ғipdAb̆Vkۇ+M0bw^EgR㥹G*}wPx7 G RWgRZ؋si*}+/J=1RZhSkF\7~dxx* @gWߖY|O?iӃ;^%%\!z[w?0>޼䀥W=Rw1^p{χwmAR\N~C^uKF-H_t5M?z @ @ @Ct s \+SE*rNlt2EKm_ܴLf+ژ6X+*,;n oxȝH>K9"ޕK%-(d"1z1gIEqӶ&.xk_wl^qJv|$}6sgհ9ڵv{:X맖Y{a\WZUyY-̋h(?yo,u֞ )r_߭d\fWE.G?^2sQLq.a/>ǕxF:\Jϕ]ݽAN릋a*gpZݬ$ڢYSO QF#mz[τN]}wNMj3䃛Vo T{7xe`YH9g6gq9y-ƕ\qZJ)ۡo3x!*z @ @ @--pNgɓU޴sI:ǫAV2nˋV1sXi+׵un֣'cWT#_=zLUoCꕰ_4U??yQKoLvI by˧U?R}V:IW2G:6k Vm2Уv̹rJU/q^V5vPR_%޼Yz9kZlF_Zwk d+a}}T*\앴 kaGUWK; U#ZzeiPwkXIլSs:s1LJI- n޼-Ӌ瀥ⱶ]U-܌m akQ ?.b_}1>9c9|SF4#0TTO @ @ @TBfʧ)u&iF4 _SW;F@*}^'@ @ @ @P@*!@O1ʫ^Iqy'+FS@*}{y9 Wze=_NU*!p RsR= @ @ @R9^W jO_|nNUJ&1~Krd<iIuu^|mUK`v?z @ @ @Ct s Q? @J  @ @ @8J@ 0$xL @RsR= @ @ @R=~ @7" >G/ @ @ @ p( n @`nI& @z @ @ @--0{4G @nD@*}^'@ @ @ @P@*!@71M @ HK @ @ @ H[ [`h  @܈TTO @ @ @TBn$c @fJ  @ @ @8J@ 0 @?z @ @ @Ct s H4  @. >G/ @ @ @ p( n @`n٣9'@ p#RsR= @ @ @Ri @]@*}^'@ @ @ @P@*!@GsO @Fz @ @ @--p# $@ 0TTO @ @ @TBf樟 @HK @ @ @ H[ [FG/ @ @ @ p( n @`nI& @z @ @ @--0{4G @nD@*}^'@ @ @ @P@*!@71M @ HK @ @ @ H[ [`h  @܈TTO @ @ @TBn$c @fJ  @ @ @8J@ 0 @?z @ @ @Ct s H4  @. >G/ @ @ @ p( n @`n٣9'@ p#RsR= @ @ @Ri @]@*}^'@ @ @ @P@*!@GsO @Fz @ @ @--p# $@ 0TTO @ @ @TBf樟 @HK @ @ @ H[ [FG/ @ @ @ p( n @`nI& @z @ @ @--0{4G @nD@*}^'@ @ @ @P@*!@71M @ HK @ @ @ H[ [`h  @܈TTO @ @ @TBn$c @fJ  @ @ @8J@ 0 @?z @ @ @Ct s H4  @. >G/ @ @ @ p( n @`n٣9'@ p#RsR= @ @ @Ri @]@*}^'@ @ @ @P@*!@GsO @Fz @ @ @--p# $@ 0TTO @ @ @TB @fO?C @ @ @J: @ @ @ @ @ @Rs& @ @ @ @ @H[ @ @ @ @ @ p9 @ @ @ @ @ҭ @ @ @ @ @TI @ @ @ @ @R @ @ @ @ @_@*v$@ @ @ @ @ @tk @ @ @ @ @/ ~;g @ @ @ @ @ @T5@ @ @ @ @ @J3  @ @ @ @ @ @@* @ @ @ @ @ @ HΙ @ @ @ @ @ n  @ @ @ @ @ @oL @ @ @ @ @J @ @ @ @ @ @Rs& @ @ @ @ @H[X˗/o @<7&~) @ @ @ @) "/ pNş_C3ybq @ @ @ @ HҎ/P@*L WZ@*>ɕD @ @ @ @Hh ܮT1 H?fN @ @ @ @1SWxd Oe @ @ @ @QMJ!_ ~׿?yQϻ܉Gf܂Tx @ @ @ @& Үz pT?IJٿ7o;2l-H_Ք @ @ @ @R駩4$@J1??"{';_JqHe_I$u^n˿e~T+*Jyr @ @ @ @x R*7+ 3 W*=/'zީ$s$QlIw<,ub)zV==x^_կ" _u&5;  @ @ @ @R>c* =t=Gׯf'(e @ @ @ @U[MJ3oOv2ϟ^sWB.Tx @ @ @ @' . p^@*HtR=a_~牧VwWJ'g=/I+J?Ւ @ @ @ @R筴$@JZ"2_:yedzEzsz?Sһ~1IY'.WT{+ @ @ @ @J$UW!~ ozB=W@*V0o @ @ @ @+ z'@ H?o/k͛_L@@*Q:'@ @ @ @ pR7{M .|_7, @ @ @ @ @ Hk"J_xR駟 @ @ @ @ pTX @ HԯdW @ @ @ @! :Y pR/96/P@*F0m @ @ @ @, '@c / pF O<7o @ @ @ @nQ@*9 jͿ7!@<1x5@!@ @ @ @ @H Gş_C3ybqǍs @ @ @ @ / nu @`bgI?_O73)91CduǮ~j3Eu!o?E֧ٿ_TO| @ @ @ @xR/(w HttW_b_UTk^ED=8q}d7ǕSϟ{# ~c @ @ @ @G@*>j!@ S(wL9y_/◕M4ikZn֙: _u*z^UnUiY58袆 Qgeު}m^ˣzȟU^_rJjJ$̖ @ @ @ @S H?q JObǕ)O2Ew#]sVPA䤓uJ!q^{ֵ#x2clxS^If{2*ul=v*a&U1w ]3u:wq!*g9tBivl;Tzuu֭E'T#c*`J_Gש{TzUթH%sy`zM<{{ŪoÝBO 町@gR齺:?ڷSTO| @ @ @ @xR/(w O'+Yz}&ت|3>n=F5LrkR]@BypJ#TzVN;Ok6I1%TFsnu>vo/N{JX> @ @ @ @Js BTֵu7':\{x'2~&fi\a.Bҵyu?%O^x'+==MbSҬ:}+J^;v/&2⻆q"uުtF8HW¾>>>(V鿆N(j ܷaw)/u4Mf}nK֕ u3~Uעwnj_[ @ @ @ @^T+Cm ғ}k&O`=$wx]H9x;'nF{+Ӝ{-攮]L N9~kX^=R2!u.fTEkZ X0v5NabUjKVwbqEz-X]G9{iY&~[H- @ @ @ @J*i @JO?/?`??gG?݇psGoz'(Uy|AiF{?KJJ'.  @ @ @ @TE@jgK?ϿXmv(_?;9iT??pzq[K{2_J'@ @ @ @ _QT,qXu Rw=VO @ @ @ @}g*\R/  @ @ @ @L@*]P!@Ra?gt)ۼgs?Sj >y" c;Iej'gJ$̖ @ @ @ @S H?q c*=I芆ϯҨ?ÿ׿_NҲ yww{4/ 9k \K@*ĺ$@ @ @ @ @wR&SɅW4S[H_zͽ;9q~͟'g jpklyY:)UR UrVE8宪Tz7/ҽ5fr1zMN52ۺ_+mg'~+ @ @ @ @ JGiK ͛ L']d+z,|'՝k/HիAg"mҮx"Cgq^t=:2" rbf ɸVՑzk]dҫJ63`Ž/Fi)x:Oa)*4m$!p-'@ @ @ @ @>RQs^@ғζ@O^$;IN']!$c{#eM{ŵ-SLE;^G:{/rՠR5bT ɤEq*}Qa7^ީ>%bkECR/  @ @ @ @L@*]P!@J;t O`kk>&+W;xzk}̠.ǩEn~w[92Yoe{xUJN֩ڬ==!x槝R @ @ @ @x*6A 뤥k/!cWo9^GozС;1^#GIOy"{.u/#~g*}=:J,õpmb}T#NJ n1zz@T;_1L+WJ} @ @ @ @# ~5 @$?KW U_[ @ @ @ @^T+Cm 앾fCşڶ/~ޘkx2L1z' H?fK @ @ @ @ҟJ8x&YNJ'.  @ @ @ @TE@_GP,曓 ? E"_w'Oe^t0׿ɋݟuNI^¦Au",#׾3ޝq^'~m׳Nw+l=HhޙQ@{Wlr Nux#R/  @ @ @ @L@*]P!@T"S[{OI9W:ڰ<+0[k앟?jL׶uɾN&ud[yՐcT鲫F<V|s]LWz 'Ha n$EmJ$̖ @ @ @ @S H?q Il}fS*[/Ray{SHSE7( Ob] @ @ @ @ ;t <j!@ xTˌҪH2 @ @ @ @2WvAMH*?8#'F4[ @ @ @ @_@*@GG~ p^ ύG{& @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ @TUuB @ @ @ @ @J o @ @ @ @ r_εP #!@%y8 @ @ @ @R$-y'@ @ @ @ @E Hˢ(%@E. @ @ @ @ @଀TY) 2.JjL(S @ @ @ @S HO}O߉ @"M @ @ @ @\]@*:$@ \F՘O2 @ @ @ @! ~, x"H>͌ @ @ @ @gJ6z @*4/_~^Ǐo߾]Ey4NWݻw~>})|Zsi) Ţ\\֔zg?Nfx* f.YNWfuwi1qO  @ @ @ @ pV@*vx{l}6NLBI3'|mr<)g}6zٶ|&צڝ=9-SƸvyJs:kksdxnM`Ry+}."<fNɏ}vaX avuyy7WETUykuq}Yf?>筞KEkʵ|]T):O;~ w+k^$zn;eTzU|nV2.Q>a2.e]vε]YGce>TE @ @ @ @RS_> @w 7צSZgxnbdn^$;:FI畍ߝ>!;BiRqqKŹg&N{f/UXOV#u!C}7b͝OW*eΑmNj^*8'V?W5cqFaZxBذ9n\qqt6+7?哂1`dy~BrL@=  @ @ @ @xiR/튨 a~xkKt;_۱j "صlt!];WΞ+] >ccX>ejz"בqeW}!^dYnw6kۼc ~j"u=~wb?sG @ @ @ @8! ~I`j2;UEq1LskLʹ uN ; >7n]~w`zx7̹A'^|u)B=Fͼ /S~sbvoe %N'ߌw|vao39zu>mRso/[*'~p9zEs䋭Aklq]jL }?ϔF @ @ @ @R^9u @63EwN~ Owv!toI^]jwϑ=vn^Wyqzw uй:ekLzrVSa[oy害XxtMTrLvV)>}'RjVw?RE}͠a(g7\/^6uz]T2np99Wcm2*Իc}Y7Y${nRWϛ_=<  @ @ @ @ puO*Ρ&kޝurVb?pe/^OGeXm|(*\(Y}Ry=2)cW=}k"wO3嗞gzNuzj+I}r̢V:X"K3\+'WΝkj?`qOO( @ @ @ @ pRq͒+p2֩֊.=xk[u{fc'y=_wד;CWȵ9K<7sƋ{`l_w]yps8Vm!~\w&+9]Bsm~ʾ(Z_XzfF @ @ @ @ H?  p{dR_)S'AeOBO\@wJ~e{g^  @ @ @ @Fts <02OOӧO[h_r];|_[-|۷yH<ʬ$zUny'@ @ @ @ @E Hˢ(x NEC @ @ @ @J?+^tX /Q* @ @ @ @J){x Ns @ @ @ @WJ:  %bL <` @ @ @ @܆Tm\g$@ <0Ǐ۷"zfF @ @ @ @ H?  pa?~ÇʓG' @ @ @ @ҭ-(eݻ_NU$z @ @ @ @^T,"@iEDǏ߿oO>}9E~Mί?SΪuVByfϿ&p! @ @ @ @ HҎ/S`xM*˗/u<;z^ggdBiYm:I羴Lzx| @ @ @ @ҧ|'@}^/zvRIϑx"i !@ xn @ @ @ @ @RW'!T`[;lzHi$zճKz W57.O( @ @ @ @ pRq͒+f̿yyTE @ @ @ @RS_> @wϘm543 xn @ @ @ @ @RW'!T`P xF'}B @ @ @ @Jl^g̶^ @ @ @ @x6g70"0c(Vy d,r@ ~4LL}rGF4>QKz $@ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 Ho.  @ @ @ @ @ pT3y @ @ @ @ @lJ\ @ @ @ @ @ @hg @ @ @ @ @, '@ @ @ @ @ @RG  @ @ @ @ @ Y@*}s O @ @ @ @ @ҏ. @ @ @ @ @ @`T @ @ @ @ @G H]>'@ @ @ @ @ @f0< @ @ @ @ @J?|&O @ @ @ @ @R `x @ @ @ @ @- ~tL @ @ @ @ @7 @ @ @ @ @8Z@*< @ @ @ @ @6 \% @k?  @ @ @ @UR @kDJ笕 @ @ @ @үγJ p%0 O @ @ @ @/TIDATүѳV p }\ @ @ @ @6 H_#g @JR?` @ @ @ @ H_)g @R@k @ @ @ @lJF:*  @74< @ @ @ @JRFZ  @5/r  @ @ @ @, ~tޛOǗ_?ڷ#֢74< @ @ @ @J{?H_2o?xY?o5ޯz*^? H_ @ @ @ @ Y@*K"VW<2/$ >O΅>ukV3' 0 O @ @ @ @M_z'cǏv1h60m?}ʿ+M?_0a5b׏zΜ/Oa>~4+{~,{AL/s!l}\ @ @ @ @6 H?dW8"ők z"4b>aL&ތs~n>zt X9t_~_6V\UNb/ Xd$Gbqz x4[9aEY;jz1h9DW;*K .$@-   @ @ @ @TG::~͑ύWGW9be~",F} &_ZE͖V~P.!@5/r  @ @ @ @, ~/'gg\88xq/_ye32^I:VuũXǴ3ήsӟ5PǍ|sUsC:O:OW?YGї|t$̵bx.Oc0֔ED`x'{qkcThLfa/et+<6Rq pe}\ @ @ @ @6 H0g]!}y3Q @Hoix @ @ @ @.&pTzćqt]4C}6xMovx5.:YUǯҒ}\ @ @ @ @6 HonCf4<<_tfO9~:b nET[bC NoR AU"'v7dШGbg%l3<[[&/y˲՛R@k @ @ @ @lt*=ypx"bG1|#MoV6z HGoqy^\(=x?4dWşC3D5x]+3Cud No1\]Um%,(Xb9Ɲ[LfR9tUȯT1$M1.W460U46VxUtxk몾:rg&e5r%s˝_kk N5SDE]-gtu*܍Yߚs 7=xkMtXOkͰdɅ ˚7r(Փa~mˈ޼U\ZtD.OZ-ݗx|ԭz"6Hl';,xD#[E*}L @ @ @ @ p1#ؓݎԫ##oyƋ:GgW 3qU&pmS69R19gum.Î>3,iu[F39<8[`!D\׼z˱j=]>i%< bf.3sA+D:: "lcuI\#γg&cF-N׋RI/Pu'7kJxɼrVT۶~ԁ3KAU LM?gmjˇ\a/ &påխ7 m;?L67Zo^OڢQͲ-]]ΣvQ=˃̗mz-Ď }VM߰T>Z. @ @ @ @JCa3he2pK*X!~U"3}uplg* gJaOc WVTJTWr7Îbny޲<$C.3_į{-0OMEOLV.9O> lwYtgC]^KfyP07[wyqC'U~d~h+s)-w~ <[aN9Pܶut\88Sb$n^85}˭[+Z6- 3&̲M^>|蕪p%Tojֿ&Qmuׅˇ@}OeϟnzOk2~V`}P})/ֿe-}ցwgT'@ @ @ @ @bMWC_{'3(<ίPV;l;nuǜ!~ܺ՟;n9+[+͠oμWSrXT9l'Y_X>|7p~Jp[VX}W=[ˊ,s{E_yp[C6 mc}\ @ @ @ @6 \4ԊV.CCLpN7,ff#WE 7W{R|EH: zP,iֹ5$f045%שÙ"wؼ02pJW'#yuZef/ʛ}!<=S!$͂_3=tZŐ" x=UXlgIh/z}ci^)[mԜC *PL4m e7k:\>Oi.gӡ1V}7 G)jmaIizf +/?o)X%q^w2 JLy坺"C>Țe-zɐr9~OYkWw*XVdY},wK֥vuk]k2Ҩ"WTok٦iؓO2aݞÿϪ6J @ @ @ @\LLIF/z:~W.x"o+9!^ xQSu~^7s42JXJ֋$~OG'~WzNoJ_3@_9\o[Ka QL6z٬Ѹʝ? \Q_EUpc~nyṾY-v0 ]ˍUVqjԖ־*ySgiUz:O4*ta_lղP[wk"Ĝ=|, 2T`a2^6òMddz2 \R֖Kwf XBz?TY5⋟?yG,]נk5r[FZ{h IJm-|=X*bh- @ @ @ @WLk #t>Yf9!/ZC~ dXs 7ϟYsǒJ @ @ @ @\L@*͙G`N>zyq ǩW=_)G/bC>6sR@k @ @ @ @lJ1֟5ȵD6y^yWjĞ=,9?٥R?` @ @ @ @ H_8g @ JZ%@ @ @ @ @`Tdz, pa0 O @ @ @ @/ٳt H_ @ @ @ @ Y@*8ޟ?po?}zls~e?Ϻ<_~?]?T_iO?}>yf?kw%oVwJ*}L @ @ @ @ p1_??_1o`Tz\Wd"PVޤ]ŴcoN"xV5:7DN]tEo\sMpؼv~kиG_G5R0_7nx{{41zZ\*^>_ej /r  @ @ @ @, x -[F,#V\xnfC_7"o[f+s&LJ-#gԆyɳ&ͱ*?#b]0oXg+c>`χYϷe>ڞJ @ @ @ @\Uҩ<:Δ^efCk?;/~G# Cá1DF,xqp_B6!]=x'-@9dz8LpsdH!zy9L OD/٫ph^Nέ؇IÛ{wLQ~od13Us4Ƹ1hN2.z!M%5a?F37I\ jtOs!?3Q\g9d2׵\T/RoBjoAސ/Ef0׋aC}ϰ(\ibbK{{6̱Row w]M5ɤ*,o ?lxDܹ?]3zebuxȚX#+y%Q2Z7a o;[?^ s֣`veY4py|bx4>xk`eT @ @ @ @\RҩET4p _xh`|~md33,;:lr%3{QrUdb΋yf:7Urþu𐶏=Yι[=*2Yx'<"ܲ/a3T'1|'ƚ7I²%Pgg:_ɺ(=ZL-/Oc zNȱr.nv*[Ė&] ~ZنokkcGZc|yěBəx}~rM8lk*XAt~D~gHv(ɯ;״Ypy=bI"sO>֖)­G+`\2uU|?¼ E=3JZ&@ @ @ @ @`uSd^E2ט:;øN?yhxNFs^vHGF1z`3+VLVzYeeǫJ^J+]5 yxd1.gaY5'k}ܺ)ԟc`Yľχzp=Jz ,ߝ=?2a9roJohi` @ @ @ @.)pTz36i Ex" : 2C6Nf]3)?J @ @ @ @\O@* K Z{ kȩ8_}نhEֹGS$Yc?ȗ1ST>Z1 @ @ @ @;ҿU>E݇;@A#}bQ]W޻&6-_ƔR;?] @ @ @ @ HA @}b @ @ @ @v H @_TO&@ @ @ @ @zR_Zz @}b @ @ @ @v Hޟ~m4X_9~?>_f1^3?@vKsG}@OMxh|qI'KpB)}κ3*\oPؖˡd|iGj/~zbT*}Kc @ @ @ @ p=􏓠dpnnwzF%GNM,N(9~ΔhVQYh# ;{F:õϙJoMyW(b^­-F7 /N$W1mXśywE{D**2,;zd-T>Z1 @ @ @ @;.JHso{71xGyAۜ GN^Np3*bӘad{*5?wmSaJr/#7!152"̵>;^~D}Ծ?l@RC,C#[ajO~⑙F*}Kc @ @ @ @ p=#t8d@#w Fȋwpyv6g29fڭKr ;9;+n>DQW\\)0mNJU;2}^assބw|C~g\$p,Ώ_p禮p_kDk>8ꋪye믱ܚ_9T>Z1 @ @ @ @;Jo 89w|vfgG1`#HU(&q9qxsm.f4噭̔j6 E G B2a+E9oV2~LpaxacEߙRRD?FDY9x z.$pmnE}^K8d˒ϡ@ +  qx84:9n$Jux'C7+ ]4~rJ15,nFN w ?Gk'kz4n[.w9Ƿhop/{,w +sxov}3Uan峱pV͏4Ѳu5wbv.wE?yvYk[xOw~46 @ @ @ @n*N&'.ٙ6e+ |W`.`e#PYތcƋ JF΁7ǏbLp=^&ՠµur0n~CW fY9I+O3ܗPv6G4D?ᅥ)'ߚI?VTO~3zsjc-ӟY+3զPE6@`t :VLpL/_D4*]w~b^i_Ty0䔲[w3TZAڊ6ΛwF[olqݡKZiLnom~%Լ*p/x;g~vHuP-!ݷuxVʯ 7I䝘Oθ2C,T;r =xKL*zi @ @ @ @M/ya>xtOLY6Ȝzq='ocuy]^Byq]h ˞{0̂oVkq\ V¸=D[gQϹJVԃϚIqFTyXNW3'=|j!:ɗ*phwȬvpPz&_RsP>7@MJupF Sʓ<:^WG3ztx9[Ҳmr~qK ?ót 7Iޭ;#:S0TyV-xP.M @ @ @ @.JHE_וt^^^!D.OaQz^JV0ĕ,S~L{OFG Lc噐s{yag؊g ~tNGL3ƚ]Fk:~9n~jXKU$ӷT<Z'pk-9yNVt:@? 07/O;'}vqP- 0?z~~6!$ 7ɐ׿u'֦?laϡ-tgߞ#}b @ @ @ @v \4ˆf3JtO9ّ uy31J%3&EYוg7ƊQ2g2:82n3g220̤;]3ØkuvM+%qBNbb9⹙-Ч >,D*Smrs\8fv\^ I'jymOfOsUJ; YN=l5!ǝC-3Ase zTгe8%H{)ա=\7f~;";|?7F[w}t{'CV Otέ#6S󦾳 0op/x,w *AR)~/eFRy.|ذg=JcjMRޝ;1瓏zΥ{osvnmCߗJ @ @ @ @\Oࢩt#×!{2ZRG<33Ww\R'"E9A~x&+ĜYHae&~zHC̗Ug,C/jya[ qdJ#9=Dž,Jg}{Ol 拜J3WaduiFi>#,}bۄưW=JdJLS nZgX׌A^u΁g67@n[Và'r4WjvuzU?X]UUX:g|+-S&bĜF7p|<=M}b @ @ @ @v \41:Q"w8G!wpk:ȵO?hH?H?mhY;?÷*2y:տO5w?U4.M @ @ @ @ҟs{}$tϟl&FNI'G I F^Qsn 6?O?Ko-v14$^y'}pү֊  @ @ @ @) x𡖑dO$UMQ8{/ϔq&BvkR鯟{=fuxrcHtil @ @ @ @' dM @0}b @ @ @ @v H3] @I.M @ @ @ @ҟ i@& ~ϴVL @ @ @ @N_w>=Km,"$_csJK7lm7jC8.M @ @ @ @'h㑻~﷌~ I»\?_a^5<{ *q+0znxsoC$wo;'۷|>;p=i~1#^o=>y.JgZ+&@ @ @ @ @`T$: _7ss~='[S$Yhzf*~P;w[k7iwǮ~@ÞoP2>74F[6II?y:R;?] @ @ @ @ \=1L3!21ȼ>CwSƳ}~`{{<؝*?3rhg;4v!P>ʭT7jhvw2U'aW6l6l2uv<Ϲ.grns磟X|Na 9h?|al3;)A=˛M]p#wPo=jz?^x}b @ @ @ @v \:YHLFļ8lo8fxgH_<9zm4Kz5Jyx3foJF یOϓaZ]FJ5^ǽG9l;˩ns Ək%ZFR(6~GZv;ŊW27Yg^ƈ7c6̵F~[E;WB*SdjUw{%P]h)9%2skm$zA9Jn QZLnr?=@K-wwѦ}O;;1כUѫFSDu Ê-.LpߜC Htil @ @ @ @'pTzkV3?kݞn3f :i^9̒Voͱ2]:'JO3Cg{hγ3E4s1ɕ䮰paM߷ǭwF9tlV3<3Q}ѦUyu *tO'KVC 'S_Z֒keރ>w:qU?;fbYZu2ُ}3=?oLK*6m*/2/CZBm|) >[.o zqc\|G{S%oVwr'+~b[P%RLk @ @ @ @h*,#HLƏ"}9E\{2+Wx4(^7D~svuIFELlvmL^ |'j뾜%Z{gYgUN[z6t;[ٍf9#/<4=Nz87íd]2UPYaOV:Vu^4Nyċ._;V]**|uXv|nլa9Pg{vW}Z2 i_\Nf8٠wD-6ϥ^lY_&Y>j'+cyCJ @ @ @ @\OࢩJxq)pvfG gi֕)c1uFp6[VJ;OhꝄ_pIƬ*eK!A;Df(CX_!j3I9;fy"pj<ǫVwHf𷟝]۹f2uH]x7V%rWq3jC/weYf:4=Ű{~gnrI.P+͐wND-Ynu-AڗA%Fwb~:?UbKb#sE˝P+Tl%flRLk @ @ @ @n*=ҙ#'Wgt3<;B"ś]5OMg%M3CǛqytOSF?8S_;W6uy˙Ѣ\Kha]m'led%%mz0q#W!i>_=眣.U|qCcU@/wLZ1 @ @ @ @;7F MTO&@ @ @ @ @zR) Q@*zi @ @ @ @Rϟ~OI_/#Ol~?ny^6sC({rկmF5/kJ޻AL>V:"9f| )-ž}s\RR;?] @ @ @ @ \= ~Փ\oψ >xFw19C"?ƻN#D9_0#{#m"TJcuťY.-?j[ᅬ!b=ЏCV8 m~"^oek;>7c*}Y^_SsM*ze @ @ @ @!pTzמLFFuI(mL4˂o ,U?~U~[>J!GzLoثCi*#ۣpdLóR4$z [kel=gȰUrLOd^S;9-qu0õ429<Ğ|^{pY4|n ݯ;= 7Lo֍7Ɲb ݦ@N8:I\xGh,HsY궗&m|g% kG?w?x+>}ߺ/tsn݆|.GuüײA=P~Du(XvMr&`얼o> kwbM5.go\^yOvrιnp 'WN߫])f-3=?I׮~^ӋqcJݒa"O\@*C|4  @ @ @ @.#pT2m9̃2Ӝ1LX拌eTt&}37t3I3^!CAۜCb"gGm5yuq#"Vۭ9p|3] kB|j^ZcNra^=۹rTs&hu^ěŭ)śuLKޢ}ΰ3i]ϖ. ƏJs_ ͤ.>Qyז>mBVL^^>iv+@m(ޞoѠ)n/]6ϲ5 s_;wbwW':7G O]??PzzR(k @ @ @ @|K{V0.iԞVcיЕ6 VJ2~ZVrz<6T^92yN\[Gk=\̟f:6^GϫIT>곛gɘfW<='(zJWr5he18ź%wʰ7r?t[҆o2rTizI}&!/ƏJs_f @ @ @ @t*2}+I9V61w@gb339Y<)<.c3d:yH{WuuHs!W:y.-<.yI'H^y܁40g js[X|5]6loˤxҭƕo.ˠpWN>mrdG_MfzI߿ϳrK=B;g~+@.bd7>ubܓ 9osr>W.cy|'}zu“wֻ6JGY %@ @ @ @ @C\:>D"8z3N]qkdЇeq}}}kmph@?N0bwT=g^[>(ӦW0o~Ĝ)DaS͛gsz$k9a>cc&e~>5ØL>$_o1;̶ j{y|ڵ:P|ѳϼǟ|sc~Xw'ju'K@*C|4  @ @ @ @.#pTz#YӐ4jq#Z1'P2LmI{Rr=oaÙ̔m$h!FlrfOkzCh8 >{k+V>\9]9>k]%NM5:$cC<4rT˞Ō>\a_Z4t"3߽}JQu˚Ŋߵ[7C~!/gtR "Ϥq:̳+=pa k*>mkMbCc|\,XujՓSau[O/n OyOksbPw?f'WN'\h6g9 OlxXөAAR(k @ @ @ @|5 lCg?O`/2/g˭4# o!P ^F<&ߤ7e<&yN/QB  @ @ @ @R?_#<~#g>#6e3,shs x+rl$ !Lq_7Wf @ @ @ @J<8 @O@*2e- @ @ @ @! ?}?)sx?`?_@Xo[o>[ k=@C]/2_VJ@*C|4  @ @ @ @.#pT?.oO `<-o#zda\-0b~ՓZ,fphuxE|r<8{{YL~[G!?b{KLO^@*2e- @ @ @ @!pT#o^yeֹƍ8np0cC+7<9D4{%xF1#93>8'7(hfԫ /~'i/J3M @ @ @ @\:ޓyx'^F|MG7:[jO{wq+9=3{![L03>][#\-+^wl+?$5;1>a1ve^Cjl|=u~0]Cr"@/QB  @ @ @ @MImFP8µ|}go_+˛m@h#\ax'sU#=$-gv8ahVļV(|pĻG\Ǜ1\l\;*1V4Ac>}hxk9kEm6Ʈ>з23i̗%G]EJ3M @ @ @ @\7A̅g9cǙiΰx+&ޣfw9 [gi~to${^/3 G^w^2]$OLgcՠ̚ROBg<1K*p'6Iu>zGlVԅߧFeqYTֽ{V?7L5˰6LN lS}u~G7Pܺ?-n|r:2#xO,/QB  @ @ @ @MW8ɕt$f98ld=^\igF5nYAIs3^sB{1աrV5N# RiC8ǻGMgVf θpnQJBW!9]got4vV=W',sY -grWN=-\<7U1bXep`m >.k4W_|Sﻢi67@3),Pnv@{)̻rݑ#||P @ @ @ @>ES߭8xy+ϱ@ywƔ3T f$7_xU g/g9άv·t[UD?Nzqc_Ϊ"Ofr:RPy|fkCԻtϖ})a*1⌟Ͳ~$︬Q&,V5 |'as}!SznSi{~ޜ}iUUw‰ܺB ~RcI @ @ @ @ p#}[ZיБĭho|+ng`wxDx sE7~,75\RQr5.'cix?/f&׋\lvE'=Yw?;\Yyߡ_{~?lǂ`jba$bj6,h$s{##3RyX<~n**9\#g=__8GQUDUUt9iZNC;G4#*̔8/>]r^W{0S`V2V ~ey Tie  @ @ @ @C4O$n}+P%?T7Nn?_M@*:A @ @ @ @i?p.vݻ[S_C+vR 4Q<) ~GY%@ @ @ @ @RO^@D{u۸uCv$7^ܺn5Su: j%@Rx  @ @ @ @N# ~8n @O(k @ @ @ @B@*}s͉ @A @ @ @ @F@*q:"@6 HQ@  @ @ @ @8S޽[zwW//>`yowm{>{!G_V_%Vu b緟>Yk,+gij7ěĕ:J?cN @ @ @ @ pS#?G]wLȞ);aM‗*&btEqU+O+\ nd{ {Uy j|XQ`+>$?]cW\ȸvy?{_tιڎ!t\ι_8޼n͟K>7\痚J?ͣ @ @ @ @ pS3EjGU3Fw|@=d]a|<IJ>K!yqI^Y7}|^Y۽2ƕ X+.ωί}猡nK߱<ǻu;"KpKH1S' @ @ @ @8S{wFa385W3#%^Io1_g#)ޡc=9 !spupޙ7W~f\wcxg5v3D4Le.囫>̡p5d;8>C+0}If°t/ޙE!$0ェ>ET쩟mWn]uІm竬?:skl>~z;Co}f4_nbZpϹT;a54x-)`.{}|]S1Lq/Ͼ^Gq5:nDUy;W  ⬃Ry5P @ @ @ @! ߑpl]FҮ'2F04ҥjW0ލJ2ۚ!8%ލ[EtFr|FC-ts/;%LCɾin*(8f1S2%Xo]0g'JLFsdRH8qqB̒zB]'}ͭG+rB=yԤDsL)Қ8[k;W{̨Ί#k&}URh1ի/\'sXv^cyɜzY7ʑ ;Cb4tknVy?K>y՜;aV *s6|'O5tםsq5nk189yn8|@Z\џKs>7.³kye] |CʍhGFCjɻ߳'CTӿrI|[gv[Ơ~VNO} UK7z8m 8 ~YExR>WVp)vKּjіy}$/Zb͝aq_'`QWr~s]Y_nulpqPr~eVkok9y1i K y}a&T[g/r^Z`3P#E1EJQ@  @ @ @ @8SOn|)>*[f3=Z qVθ*ͭ{¯oY sRWP\O/j \x+9 qLW89#pgc4)̞YtԓR ^iM!I|[eS+-kgyTӹ6=Y`/jx%j: J!tRNVV~钏 ˋh ;:{ߊ/ϗJ?ͣ @ @ @ @ p#io3q9ъƟኺV޷vyRh1sQ,n$c}xKVqVc#}}C(0lƼ[!ݞCαd1~'3g4eRrι}h6DLx3%|65@d{+G)j5_iX+>zk|T>,d%]5j_)ÚU:G m)]pBNtf\x*J_9jRv緪K#_Zcu nyXsgX\} d6:ssEvy_9(9WjSmw3_5uˬ;WݐM֢@7ϻP X 0꒹t_yd_cWV{<6|aQW0ԕU]Ea=[I1S' @ @ @ @8ISlHz߉R-pU]C{6rj3Y,SyЌu+};ĝ#W[g{̛fҙgp^vd:#=#nOUpOfO|7ٍ&zRG獽(MdF>pew3K^h~CÑ >)sqV -gjT\ûG4 ivoBM! V{Vw<ҳ3Zɩ̬m_e|Ly[#qVM;ðWpQouXܓ;i'n%+V3E|rY[\C7muHf,tK_(t"ҽeZub7<( @ @ @ @8i*R_ 5PӝrE`/,ꈺι+5\*g5k )^Rk 5zr:ܤMZ?`%_D[%C;ngbWa7vҹ.vQݣpE~4 J?ͣ @ @ @ @ p QgHƿ>5Ovȯ©61#Twĉx]O|ԓY_[̱?CGXf ,e|.sQvqI1S' @ @ @ @8TAsAL@*4J @ @ @ @!oS pCug?y!# łggbj=[ܻTie  @ @ @ @C7{~tu_/ EsCX5zۚkWMm A @ @ @ @F༩~oUSzǟvCzw`Ejw|6S]#gȅWj@oqʏjw@0ah3I@j# ~GY%@ @ @ @ @MGr.v+`z8_G07o2ܫ;d.4y\uY87+bg D=÷(]vEYxF'{Q8~_~ƿ7ފ#5Xyq0Zs,/7^oL33>kqJ~82W5xMw* ~L @ @ @ @ @4Ng9ΙME$#]{g91ϸsp5ԋl"RC/ŹTw*V;cٽs$}I}[^>JG+^{Ȱzj81[ϔ||4{ҫ}c)u^( ~GY%@ @ @ @ @'Mg;r|E;ۙM8+#yb[wg:~DS<*X|v;^x&ȳ9nR;g;rMFǹM+5^`{۞/h(&n81WCJIH1S' @ @ @ @8IS=ܟ;m+]=*$R׋HTg2a s?j}̰k{mCbZ62qeka|}XyxK@MD>ZwsϚ+ @u<( @ @ @ @8i*oU^kCg:BؙSxwWV;RwxfT~ 4ɘ{l76Y, ţ@sp.4-3x)E6f ]r,YU:V>T!3u @ @ @ @4슌g;"*"Ͻ#]AHKG;N#خ3NG=Q&^d:~޳vt<~"|mgFCP>g{Y#Qmdf%j蕧Zeɜ.SHWzpcԋcyTD  @.O(k @ @ @ @BऩH=jYwZ>jbNG BC` This package defines classes that describe C++ declarations and types. * :mod:`parser ` This package defines classes that parse `GCC-XML`_ or `CastXML`_ generated files. It also defines a few classes that will help you unnecessary parsing of C++ source files. * :mod:`utils ` This package defines a few functions useful for the whole project, but which are mainly used internally by pygccxml. ------------------------ ``declarations`` package ------------------------ Please take a look on the `UML diagram`_. This `UML diagram`_ describes almost all classes defined in the package and their relationship. ``declarations`` package defines two hierarchies of class: 1. types hierarchy - used to represent a C++ type 2. declarations hierarchy - used to represent a C++ declaration Types hierarchy --------------- Types hierarchy is used to represent an arbitrary type in C++. class ``type_t`` is the base class. ``type_traits`` ~~~~~~~~~~~~~~~ Are you aware of `boost::type_traits`_ library? The `boost::type_traits`_ library contains a set of very specific traits classes, each of which encapsulate a single trait from the C++ type system; for example, is a type a pointer or a reference? Or does a type have a trivial constructor, or a const-qualifier? pygccxml implements a lot of functionality from the library: * a lot of algorithms were implemented + ``is_same`` + ``is_enum`` + ``is_void`` + ``is_const`` + ``is_array`` + ``is_pointer`` + ``is_volatile`` + ``is_integral`` + ``is_reference`` + ``is_arithmetic`` + ``is_convertible`` + ``is_fundamental`` + ``is_floating_point`` + ``is_base_and_derived`` + ``is_unary_operator`` + ``is_binary_operator`` + ``remove_cv`` + ``remove_const`` + ``remove_alias`` + ``remove_pointer`` + ``remove_volatile`` + ``remove_reference`` + ``has_trivial_copy`` + ``has_trivial_constructor`` + ``has_any_non_copyconstructor`` For a full list of implemented algorithms, please consult API documentation. * a lot of unit tests has been written base on unit tests from the `boost::type_traits`_ library. If you are going to build code generator, you will find ``type_traits`` very handy. Declarations hierarchy ---------------------- A declaration hierarchy is used to represent an arbitrary C++ declaration. Basically, most of the classes defined in this package are just "set of properties". ``declaration_t`` is the base class of the declaration hierarchy. Every declaration has ``parent`` property. This property keeps a reference to the scope declaration instance, in which this declaration is defined. The ``scopedef_t`` class derives from ``declaration_t``. This class is used to say - "I may have other declarations inside". The "composite" design pattern is used here. ``class_t`` and ``namespace_t`` declaration classes derive from the ``scopedef_t`` class. ------------------ ``parser`` package ------------------ Please take a look on `parser package UML diagram`_ . Classes defined in this package, implement parsing and linking functionality. There are few kind of classes defined by the package: * classes, that implements parsing algorithms of `GCC-XML`_ generated XML file * parser configuration classes * cache - classes, those one will help you to eliminate unnecessary parsing * patchers - classes, which fix `GCC-XML`_ generated declarations. ( Yes, sometimes GCC-XML generates wrong description of C++ declaration. ) Parser classes -------------- ``source_reader_t`` - the only class that have a detailed knowledge about `GCC-XML`_. It has only one responsibility: it calls `GCC-XML`_ with a source file specified by user and creates declarations tree. The implementation of this class is split to 2 classes: 1. ``scanner_t`` - this class scans the "XML" file, generated by `GCC-XML`_ and creates pygccxml declarations and types classes. After the xml file has been processed declarations and type class instances keeps references to each other using `GCC-XML`_ generated ids. 2. ``linker_t`` - this class contains logic for replacing `GCC-XML`_ generated ids with references to declarations or type class instances. Both those classes are implementation details and should not be used by user. Performance note: ``scanner_t`` class uses Python ``xml.sax`` package in order to parse XML. As a result, ``scanner_t`` class is able to parse even big XML files pretty quick. ``project_reader_t`` - think about this class as a linker. In most cases you work with few source files. GCC-XML does not supports this mode of work. So, pygccxml implements all functionality needed to parse few source files at once. ``project_reader_t`` implements 2 different algorithms, that solves the problem: 1. ``project_reader_t`` creates temporal source file, which includes all the source files. 2. ``project_reader_t`` parse separately every source file, using ``source_reader_t`` class and then joins the resulting declarations tree into single declarations tree. Both approaches have different trades-off. The first approach does not allow you to reuse information from already parsed source files. While the second one allows you to setup cache. Parser configuration classes ---------------------------- ``gccxml_configuration_t`` - a class, that accumulates all the settings needed to invoke `GCC-XML`_: ``file_configuration_t`` - a class, that contains some data and description how to treat the data. ``file_configuration_t`` can contain reference to the the following types of data: (1) path to C++ source file (2) path to `GCC-XML`_ generated XML file (3) path to C++ source file and path to `GCC-XML`_ generated XML file In this case, if XML file does not exists, it will be created. Next time you will ask to parse the source file, the XML file will be used instead. Small tip: you can setup your makefile to delete XML files every time, the relevant source file has changed. (4) Python string, that contains valid C++ code There are few functions that will help you to construct ``file_configuration_t`` object: * ``def create_source_fc( header )`` ``header`` contains path to C++ source file * ``def create_gccxml_fc( xml_file )`` ``xml_file`` contains path to `GCC-XML`_ generated XML file * ``def create_cached_source_fc( header, cached_source_file )`` - ``header`` contains path to C++ source file - ``xml_file`` contains path to `GCC-XML`_ generated XML file * ``def create_text_fc( text )`` ``text`` - Python string, that contains valid C++ code Cache classes ------------- There are few cache classes, which implements different cache strategies. 1. ``file_configuration_t`` class, that keeps path to C++ source file and path to `GCC-XML`_ generated XML file. 2. ``file_cache_t`` class, will save all declarations from all files within single binary file. 3. ``directory_cache_t`` class will store one index file called "index.dat" which is always read by the cache when the cache object is created. Each header file will have its corresponding \*.cache file that stores the declarations found in the header file. The index file is used to determine whether a \*.cache file is still valid or not (by checking if one of the dependent files (i.e. the header file itself and all included files) have been modified since the last run). In some cases, ``directory_cache_t`` class gives much better performance, than ``file_cache_t``. Many thanks to Matthias Baas for its implementation. **Warning**: when pygccxml writes information to files, using cache classes, it does not write any version information. It means, that when you upgrade pygccxml you have to delete all your cache files. Otherwise you will get very strange errors. For example: missing attribute. Patchers -------- Well, `GCC-XML`_ has few bugs, which could not be fixed from it. For example .. code-block:: c++ namespace ns1{ namespace ns2{ enum fruit{ apple, orange }; } } .. code-block:: c++ void fix_enum( ns1::ns2::fruit arg=ns1::ns2::apple ); `GCC-XML`_ will report the default value of ``arg`` as ``apple``. Obviously this in an error. pygccxml knows how to fix this bug. This is not the only bug, which could be fixed, there are few of them. pygccxml introduces few classes, which knows how to deal with specific bug. More over, those bugs are fixed, only if I am 101% sure, that this is the right thing to do. ----------------- ``utils`` package ----------------- Use internally by pygccxml. Some methods/classes may be still usefull: loggers, find_xml_generator ------- Summary ------- That's all. I hope I was clear, at least I tried. Any way, pygccxml is an open source project. You always can take a look on the source code. If you need more information please read API documentation. .. _`SourceForge`: http://sourceforge.net/index.php .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org .. _`CastXML`: https://github.com/CastXML/CastXML .. _`UML diagram` : declarations_uml.png .. _`parser package UML diagram` : parser_uml.png .. _`ReleaseForge` : http://releaseforge.sourceforge.net .. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html pygccxml-3.0.2/docs/documentation.rst000066400000000000000000000012031476564735400177160ustar00rootroot00000000000000Building the documentation ========================== Building the documentation locally ---------------------------------- You can build the documentation yourself. In order for this to work you need sphinx doc (http://sphinx-doc.org) and the readthedocs theme: .. code-block:: shell pip install .[docs] Then just run the following command in the root folder: .. code-block:: shell make html This will build the documentation locally in the ``docs/_build/html`` folder. For each commit on the master and develop branches, the documentation is automatically built and can be found here: https://readthedocs.org/projects/pygccxml/ pygccxml-3.0.2/docs/examples.rst000066400000000000000000000014421476564735400166700ustar00rootroot00000000000000======== Examples ======== Setting up pygccxml and parsing c/c++ code ------------------------------------------ .. toctree:: :maxdepth: 1 examples/parsing/example.rst examples/parsing-string/example.rst First examples -------------- .. toctree:: :maxdepth: 1 examples/variables/example.rst examples/searching1/example.rst examples/searching/example.rst examples/equality/example.rst examples/functions/example.rst examples/nested-types/example.rst examples/artificial/example.rst examples/compound/example.rst examples/templates/example.rst Advanced examples ----------------- .. toctree:: :maxdepth: 1 examples/elaborated/example.rst examples/function-pointer/example.rst examples/caching/example.rst examples/print-example/example.rst pygccxml-3.0.2/docs/examples/000077500000000000000000000000001476564735400161355ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/artificial/000077500000000000000000000000001476564735400202445ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/artificial/example.hpp000066400000000000000000000004531476564735400224120ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ class Test { public: Test(); // This is the constructor }; } pygccxml-3.0.2/docs/examples/artificial/example.py000066400000000000000000000026671476564735400222640ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns = global_namespace.namespace("ns") # We have just one declaration in ns, which is our Test class: classTest = ns.declarations[0] print(classTest.name, type(classTest)) # > 'Test', ns::Test::Test() [constructor], False # > ns::Test::Test(ns::Test const & arg0) [constructor], True pygccxml-3.0.2/docs/examples/artificial/example.rst000066400000000000000000000020011476564735400224220ustar00rootroot00000000000000======================================== Explicit and implicit class declarations ======================================== Even if a class has no explicit constructor, ``pygccxml`` will provide a constructor declaration. This is due to ``CastXML`` and ``GCC-XML`` generating implicit constructors (for example copy constructors) in their XML output. The same thing holds for assignment operators and destructors. To be able to discriminate between the different types of declarations, the ``decl.is_artificial`` attribute can be used. Let’s consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- In this example, the constructor is explicitly defined. The declaration tree will contain two constructors. The first one is the one we defined explicitly, and is not marked as artificial. The second one is the copy constructor, which was implicitly added, and is marked as artificial. .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/caching/000077500000000000000000000000001476564735400175315ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/caching/example.hpp000066400000000000000000000003461476564735400217000ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ int a = 1; } pygccxml-3.0.2/docs/examples/caching/example.py000066400000000000000000000024261476564735400215420ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename file_config = parser.file_configuration_t( data=filename, content_type=parser.CONTENT_TYPE.CACHED_SOURCE_FILE) project_reader = parser.project_reader_t(xml_generator_config) decls = project_reader.read_files( [file_config], compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) global_namespace = declarations.get_global_namespace(decls) value = global_namespace.namespace("ns") print("My name is: " + value.name) pygccxml-3.0.2/docs/examples/caching/example.rst000066400000000000000000000015501476564735400217170ustar00rootroot00000000000000======= Caching ======= This example shows how to use caching. This can be useful for big projects where you don't want the c++ to be parsed again and again. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- To enable caching, you can use the following code: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- The first time you run this example, the c++ file will be read and a xml file will be generated: INFO Creating xml file "example.hpp.xml" from source file "example.hpp" ... INFO Parsing xml file "example.hpp.xml" ... My name is: ns The second time you run the example the xml file will not be regenerated: INFO Parsing xml file "example.hpp.xml" ... My name is: ns Of course the performance gain will be small for this example, but can be intersting for bigger projects. pygccxml-3.0.2/docs/examples/compound/000077500000000000000000000000001476564735400177615ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/compound/example.hpp000066400000000000000000000005021476564735400221220ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt int const c1 = 0; const int c2 = 0; volatile const int cv1 = 0; const volatile int cv2 = 0; const int * const cptr1 = 0; pygccxml-3.0.2/docs/examples/compound/example.py000066400000000000000000000062711476564735400217740ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) c1 = global_namespace.variable("c1") print(str(c1), type(c1)) # > 'c1 [variable]', print(str(c1.decl_type), type(c1.decl_type)) # > 'int const', base = declarations.remove_const(c1.decl_type) print(str(base), type(base)) # > 'int', c2 = global_namespace.variable("c2") print(str(c2.decl_type), type(c2.decl_type)) # > 'int const', # Even if the declaration was defined as 'const int', pygccxml will always # output the const qualifier (and some other qualifiers) on the right hand # side (by convention). cv1 = global_namespace.variable("cv1") print(str(cv1.decl_type), type(cv1.decl_type)) # > 'int const volatile', # Remove one level: base = declarations.remove_volatile(cv1.decl_type) print(str(base), type(base)) # > 'int const', # Remove the second level: base = declarations.remove_const(base) print(str(base), type(base)) # > 'int', # We can also directly do this in one step: base = declarations.remove_cv(cv1.decl_type) print(str(base), type(base)) # > 'int', # As for consts, the const and volatile are on the right hand side # (by convention), and always in the same order cv2 = global_namespace.variable("cv2") print(str(cv2.decl_type), type(cv2.decl_type)) # > 'int const volatile', # And a last example with a pointer_t: cptr1 = global_namespace.variable("cptr1") print(str(cptr1.decl_type), type(cptr1.decl_type)) # > 'int const * const', ) base = declarations.remove_const(cptr1.decl_type) print(str(base), type(base)) # > 'int const *', base = declarations.remove_pointer(base) print(str(base), type(base)) # > 'int const', ) base = declarations.remove_const(base) print(str(base), type(base)) # > 'int', ) pygccxml-3.0.2/docs/examples/compound/example.rst000066400000000000000000000013141476564735400221450ustar00rootroot00000000000000============== Compound types ============== A type is a compound_t type (in pygccxml) if it is one of the following: *volatile_t*, *restrict_t*, *const_t*, *pointer_t*, *reference_t*, *elaborated_t*, *array_t* or *member_variable_type_t*. The exact c++ definition of compound types embraces more types, but for different reasons (mostly legacy), the definition in pygccxml is slightly different. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show what to expect from compound types, how they are chained, and how their order is defined in pygccxml. .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/elaborated/000077500000000000000000000000001476564735400202375ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/elaborated/example.hpp000066400000000000000000000004141476564735400224020ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt class A {}; A a1; class A a2; void function(A arg1, class A arg2); pygccxml-3.0.2/docs/examples/elaborated/example.py000066400000000000000000000035061476564735400222500ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name, castxml_epic_version=1) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) a1 = global_namespace.variable("a1") print(str(a1.decl_type), type(a1.decl_type)) # > 'A', print(declarations.is_elaborated(a1.decl_type)) # > False a2 = global_namespace.variable("a2") print(str(a2.decl_type), type(a2.decl_type)) # > 'class ::A', print(declarations.is_elaborated(a2.decl_type)) # > True base = declarations.remove_elaborated(a2.decl_type) print(str(base), type(base)) # > 'A', # The same can be done with function arguments: fun = global_namespace.free_function("function") print(type(fun.arguments[0].decl_type), type(fun.arguments[1].decl_type)) # > , # pygccxml-3.0.2/docs/examples/elaborated/example.rst000066400000000000000000000016111476564735400224230ustar00rootroot00000000000000========================== Elaborated type specifiers ========================== Elaborated type specifiers are one of these four possibilities: *class*, *struct*, *union* or *enum*. In C++ they can often be skipped (but may be useful; see `this interesting topic`_ for example). In C code they are mandatory. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show how the elaborated type specifiers are treated in pygccxml. Please note that this feature is only available since recent versions of *CastXML* (Mar 1, 2017), and a special flag needs to be passed to pygccxml to make this work (castxml_epic_version=1). .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- .. _`this interesting topic`: http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions/1675446#1675446pygccxml-3.0.2/docs/examples/equality/000077500000000000000000000000001476564735400177725ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/equality/example.hpp000066400000000000000000000004721476564735400221410ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ void func1(int a) { int b = a; } void func2(int a) { int b = a; } } pygccxml-3.0.2/docs/examples/equality/example.py000066400000000000000000000032011476564735400217730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find the location of the xml generator (castxml or gccxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename # Parse the c++ file decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns_namespace = global_namespace.namespace("ns") # Search for the function called func1 criteria = declarations.calldef_matcher(name="func1") func1a = declarations.matcher.get_single(criteria, ns_namespace) # Search for the function called func2 criteria = declarations.calldef_matcher(name="func2") func2a = declarations.matcher.get_single(criteria, ns_namespace) # You can also write a loop on the declaration tree func1b = None for decl in ns_namespace.declarations: if decl.name == "func1": func1b = decl # The declarations can be compared (prints (True, False)) print(func1a == func1b, func1a == func2a) pygccxml-3.0.2/docs/examples/equality/example.rst000066400000000000000000000007201476564735400221560ustar00rootroot00000000000000========================== Comparing two declarations ========================== This example shows how two declarations can be compared. Let's consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show you how to search for two functions, using different ways. Both declarations are then compared. .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/function-pointer/000077500000000000000000000000001476564735400214405ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/function-pointer/example.hpp000066400000000000000000000004011476564735400235770ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Distributed under the Boost Software License, Version 1.0. // Copyright 2004-2009 Roman Yakovenko. // See http://www.boost.org/LICENSE_1_0.txt // A function pointer void (*myFuncPointer)(int, double); pygccxml-3.0.2/docs/examples/function-pointer/example.py000066400000000000000000000036021476564735400234460ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) function_ptr = global_namespace.variables()[0] # Print the name of the function pointer print(function_ptr.name) # > myFuncPointer # Print the type of the declaration print(function_ptr.decl_type) # > void (*)( int,double ) # Print the real type of the declaration (it's just a pointer) print(type(function_ptr.decl_type)) # > # Check if this is a function pointer print(declarations.is_calldef_pointer(function_ptr.decl_type)) # > True # Remove the pointer part, to access the function's type f_type = declarations.remove_pointer(function_ptr.decl_type) # Print the type print(type(f_type)) # > # Print the return type and the arguments of the function print(f_type.return_type) # > void # Print the return type and the arguments print(str(f_type.arguments_types[0]), str(f_type.arguments_types[1])) # > int, double pygccxml-3.0.2/docs/examples/function-pointer/example.rst000066400000000000000000000005711476564735400236300ustar00rootroot00000000000000================= Function pointers ================= This example shows how to work with function pointers. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code allows you to extract information about the function pointer: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/functions/000077500000000000000000000000001476564735400201455ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/functions/example.hpp000066400000000000000000000005201476564735400223060ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include using namespace std; namespace ns{ int myFunction(int a, const std::string& x1) { return a + 1; } } pygccxml-3.0.2/docs/examples/functions/example.py000066400000000000000000000026031476564735400221530ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns = global_namespace.namespace("ns") # Use the free_functions method to find our function func = ns.free_function(name="myFunction") # There are two arguments: print(len(func.arguments)) # We can loop over them and print some information: for arg in func.arguments: print( arg.name, str(arg.decl_type), declarations.is_std_string(arg.decl_type), declarations.is_reference(arg.decl_type)) pygccxml-3.0.2/docs/examples/functions/example.rst000066400000000000000000000006551476564735400223400ustar00rootroot00000000000000======================= Functions and arguments ======================= This example shows how to work with function arguments Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code can be used to find the different arguments of a function and do some basic operations on them: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/nested-types/000077500000000000000000000000001476564735400205615ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/nested-types/example.hpp000066400000000000000000000004131476564735400227230ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ const int a = 0; const volatile int *b = 0; } pygccxml-3.0.2/docs/examples/nested-types/example.py000066400000000000000000000043441476564735400225730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns = global_namespace.namespace("ns") a = ns.variables()[0] print("My name is: " + a.name) # > My name is: a print("My type is: " + str(a.decl_type)) # > My type is: int const # If we print real python type: print("My type is : " + str(type(a.decl_type))) # > My type is: # Types are nested in pygccxml. This means that you will get information # about the first type only. You can access the "base" type by removing # the const part: print("My base type is: " + str(type(declarations.remove_const(a.decl_type)))) # > My base type is: # You use the is_const function to check for a type: print("Is 'a' a const ?: " + str(declarations.is_const(a.decl_type))) # > Is 'a' a const ?: True # A more complex example with variable b: b = ns.variables()[1] print("My type is: " + str(type(b.decl_type))) # > My type is: print("My type is: " + str(type( declarations.remove_const( declarations.remove_volatile( declarations.remove_pointer(b.decl_type)))))) # > My type is: # The declarations module contains much more methods allowing you to # navigate the nested types list. pygccxml-3.0.2/docs/examples/nested-types/example.rst000066400000000000000000000005401476564735400227450ustar00rootroot00000000000000============ Nested types ============ This example shows how to work with types. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code allows you to extract information about the types of variables: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/notebook/000077500000000000000000000000001476564735400177555ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/notebook/example.ipynb000066400000000000000000000064371476564735400224650ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example pygccxml notebook on Binder\n", "\n", "Running this notebook on Binder allows you to execute the code online:", "\n", " \n", "\n", "\n", "Please note that provisioning may take about 1-2 minutes.\n", "\n", "\n", "The following example shows an example usage of `pygccxml` on Ubuntu\n", "Bionic, from within a Docker container, for a simple toy C++ API that\n", "uses both `std::vector` and `Eigen::Matrix<>`. The code is defined inline." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from pygccxml import declarations\n", "from pygccxml import utils\n", "from pygccxml import parser" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Find out the c++ parser. This should resolve to the castxml\n", "# version installed in Docker.\n", "generator_path, generator_name = utils.find_xml_generator()\n", "\n", "# Configure the xml generator\n", "config = parser.xml_generator_configuration_t(\n", " xml_generator_path=generator_path,\n", " xml_generator=generator_name,\n", " include_paths=[\"/usr/include/eigen3\"],\n", " compiler_path=generator_path,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "code = r\"\"\"\n", "#include \n", "\n", "#include \n", "\n", "namespace ns {\n", "\n", "template \n", "class ExampleClass {\n", "public:\n", " std::vector make_std_vector() const;\n", " Eigen::Matrix make_matrix3();\n", "};\n", "\n", "// Analyze concrete instantiations of the given class.\n", "extern template class ExampleClass;\n", "extern template class ExampleClass;\n", "\n", "} // namespace ns\n", "\"\"\"\n", "\n", "(global_ns,) = parser.parse_string(code, config)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "ns = global_ns.namespace(\"ns\")\n", "declarations.print_declarations([ns])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Retrieve an instantiation and show template parameters.\n", "cls, = ns.classes('ExampleClass')\n", "declarations.templates.split(cls.name)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 } pygccxml-3.0.2/docs/examples/parsing-string/000077500000000000000000000000001476564735400211045ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/parsing-string/example.py000066400000000000000000000015751476564735400231210ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import warnings warnings.simplefilter("error", Warning) # Find the location of the xml generator (castxml or gccxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # Write a string containing some c++ code code = """ class MyClass { int a; }; """ # Parse the code decls = parser.parse_string(code, xml_generator_config) # Get access to the global namespace global_ns = declarations.get_global_namespace(decls) pygccxml-3.0.2/docs/examples/parsing-string/example.rst000066400000000000000000000011501476564735400232660ustar00rootroot00000000000000================================ Parsing a string containing code ================================ This example shows how to setup pygccxml to parse a string containing c++ code, and how to access the declaration tree. Often, pygccxml is used to parse files containing code, but there may be reasons to parse a string (for example for debugging purposes). The following code will show you how to create a configuration for the xml generator (an external tool, either castxml or gccxml), and how to parse the string containing the c++ code: .. literalinclude:: example.py :language: python :lines: 6,7,8,12- pygccxml-3.0.2/docs/examples/parsing/000077500000000000000000000000001476564735400176005ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/parsing/example.hpp000066400000000000000000000003461476564735400217470ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ int a = 1; } pygccxml-3.0.2/docs/examples/parsing/example.py000066400000000000000000000021771476564735400216140ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find the location of the xml generator (castxml or gccxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename # Parse the c++ file decls = parser.parse([filename], xml_generator_config) # Get access to the global namespace global_namespace = declarations.get_global_namespace(decls) # Get access to the 'ns' namespace ns = global_namespace.namespace("ns") pygccxml-3.0.2/docs/examples/parsing/example.rst000066400000000000000000000010121476564735400217570ustar00rootroot00000000000000================== Parsing a c++ file ================== This example shows how to setup pygccxml to parse a c++ file, and how to access the declaration tree. Let's consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show you how to create a configuration for the xml generator (an external tool, either castxml or gccxml), and how to parse the c++ file: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/print-example/000077500000000000000000000000001476564735400207225ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/print-example/example.hpp000066400000000000000000000016251476564735400230720ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef example_hpp_12_10_2006 #define example_hpp_12_10_2006 namespace unittests{ struct test_results{ enum status{ ok, fail, error }; void update( const char* test_name, status result ); }; struct test_case{ test_case( const char* test_case_name ); virtual void set_up(){} virtual void tear_down(){} virtual void run() = 0; private: const char* m_name; }; class test_container; struct test_suite : public test_case{ test_suite( const char* name, const test_container& tests ); void run(); const test_results& get_results() const { return m_results; } private: test_container* m_tests; test_results m_results; }; } #endif//example_hpp_12_10_2006 pygccxml-3.0.2/docs/examples/print-example/example.hpp.rst000066400000000000000000000001611476564735400236730ustar00rootroot00000000000000=============== C++ header file =============== .. literalinclude:: example.hpp :language: c++ :lines: 5- pygccxml-3.0.2/docs/examples/print-example/example.hpp.xml000066400000000000000000000230371476564735400236720ustar00rootroot00000000000000 pygccxml-3.0.2/docs/examples/print-example/example.hpp.xml.rst000066400000000000000000000001761476564735400245000ustar00rootroot00000000000000====================== GCC-XML generated file ====================== .. literalinclude:: ./example.hpp.xml :language: xml pygccxml-3.0.2/docs/examples/print-example/example.py000066400000000000000000000044201476564735400227270ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import sys # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Add pygccxml package to Python path sys.path.append(os.path.join(this_module_dir_path, '..', '..')) from pygccxml import parser # nopep8 from pygccxml import declarations # nopep8 from pygccxml import utils # nopep8 # Find out the xml generator (gccxml or castxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name, compiler="gcc") # Parsing source file decls = parser.parse([this_module_dir_path + '/example.hpp'], config) global_ns = declarations.get_global_namespace(decls) # Get object that describes unittests namespace unittests = global_ns.namespace('unittests') print('"unittests" declarations: \n') declarations.print_declarations(unittests) # Print all base and derived class names for class_ in unittests.classes(): print('class "%s" hierarchy information:' % class_.name) print('\tbase classes : ', repr([ base.related_class.name for base in class_.bases])) print('\tderived classes: ', repr([ derive.related_class.name for derive in class_.derived])) print('\n') # Pygccxml has very powerfull query api: # Select multiple declarations run_functions = unittests.member_functions('run') print('the namespace contains %d "run" member functions' % len(run_functions)) print('they are: ') for f in run_functions: print('\t' + declarations.full_name(f)) # Select single declaration - all next statements will return same object # vector< unittests::test_case* > # You can select the class using "full" name test_container_1 = global_ns.class_('::unittests::test_suite') # You can define your own "match" criteria test_container_2 = global_ns.class_(lambda decl: 'suite' in decl.name) is_same_object = test_container_1 is test_container_2 print( "Does all test_container_* refer to the same object? " + str(is_same_object)) pygccxml-3.0.2/docs/examples/print-example/example.py.rst000066400000000000000000000002211476564735400235310ustar00rootroot00000000000000========================= Python API usage example ========================= .. literalinclude:: example.py :language: python :lines: 5- pygccxml-3.0.2/docs/examples/print-example/example.rst000066400000000000000000000005511476564735400231100ustar00rootroot00000000000000====================== Print all declarations ====================== This example prints all declarations found in :doc:`example.hpp ` file. For every class, it prints it's base and derived classes. The example consists from few files: .. toctree:: :maxdepth: 1 example.hpp.rst example.hpp.xml.rst example.py.rst output.txt.rst pygccxml-3.0.2/docs/examples/print-example/output.txt000066400000000000000000000315331476564735400230300ustar00rootroot00000000000000>e:\Python26\pythonw.exe -u "example.py" D:\dev\language-binding\sources\pygccxml_dev\docs\example\..\..\pygccxml\parser\declarations_cache.py:8: DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5 INFO Parsing source file "example.hpp" ... INFO gccxml cmd: ""D:\dev\language-binding\sources\gccxml_bin\v09\win32\bin\gccxml.exe" -I"." "example.hpp" -fxml="e:\docume~1\romany\locals~1\temp\tmpewcrem.xml" --gccxml-compiler msvc71" INFO GCCXML version - 0.9( 1.127 ) "unittests" declarations: namespace_t: 'unittests' artificial: 'False' demangled: unittests mangled: _Z9unittests class_t: 'test_suite' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:35 artificial: '1' demangled: unittests::test_suite mangled: N9unittests10test_suiteE class type: 'struct' size: 16 align: 4 base classes: class: '::unittests::test_case' access type: 'public' virtual inheritance: 'False' public: destructor_t: '~test_suite' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:35 artificial: '1' demangled: unittests::test_suite::~test_suite() mangled: _ZN9unittest member_operator_t: 'operator=' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:35 artificial: '1' demangled: unittests::test_suite::operator=(unittests::test_suite const&) mangled: _ZN9unittests10test_suiteaSERKS0_ is extern: False return type: ::unittests::test_suite & arguments type: ::unittests::test_suite const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False constructor_t: 'test_suite' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:35 artificial: '1' demangled: unittests::test_suite::test_suite(unittests::test_suite const&) mangled: _ZN9unittest is extern: False return type: None arguments type: ::unittests::test_suite const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: True constructor_t: 'test_suite' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:37 artificial: 'False' demangled: unittests::test_suite::test_suite(char const*, unittests::test_container const&) mangled: _ZN9unittest is extern: 1 return type: None arguments type: char const * name, ::unittests::test_container const & tests calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: False member_function_t: 'run' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:39 artificial: 'False' demangled: unittests::test_suite::run() mangled: _ZN9unittests10test_suite3runEv is extern: 1 return type: void arguments type: calling convention: __thiscall__ virtual: virtual is const: False is static: False member_function_t: 'get_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:41 artificial: 'False' demangled: unittests::test_suite::get_results() const mangled: _ZNK9unittests10test_suite11get_resultsEv is extern: False return type: ::unittests::test_results const & arguments type: calling convention: __thiscall__ virtual: not virtual is const: 1 is static: False protected: private: variable_t: 'm_tests' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:45 artificial: 'False' type: ::unittests::test_container * value: None size: 4 align: 4 offset: 8 variable_t: 'm_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:46 artificial: 'False' type: ::unittests::test_results value: None size: 1 align: 1 offset: 12 class_declaration_t: 'test_container' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:33 artificial: '1' demangled: unittests::test_container mangled: N9unittests14test_containerE class_t: 'test_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:12 artificial: '1' demangled: unittests::test_results mangled: N9unittests12test_resultsE class type: 'struct' size: 1 align: 1 public: enumeration_t: 'status' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:14 artificial: '1' values: ok : 0 fail : 1 error : 2 destructor_t: '~test_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:12 artificial: '1' demangled: unittests::test_results::~test_results() mangled: _ZN9unittest member_operator_t: 'operator=' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:12 artificial: '1' demangled: unittests::test_results::operator=(unittests::test_results const&) mangled: _ZN9unittests12test_resultsaSERKS0_ is extern: False return type: ::unittests::test_results & arguments type: ::unittests::test_results const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False constructor_t: 'test_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:12 artificial: '1' demangled: unittests::test_results::test_results(unittests::test_results const&) mangled: _ZN9unittest is extern: False return type: None arguments type: ::unittests::test_results const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: True constructor_t: 'test_results' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:12 artificial: '1' demangled: unittests::test_results::test_results() mangled: _ZN9unittest is extern: False return type: None arguments type: calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: False member_function_t: 'update' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:16 artificial: 'False' demangled: unittests::test_results::update(char const*, unittests::test_results::status) mangled: _ZN9unittests12test_results6updateEPKcNS0_6statusE is extern: 1 return type: void arguments type: char const * test_name, ::unittests::test_results::status result calling convention: __thiscall__ virtual: not virtual is const: False is static: False protected: private: class_t: 'test_case' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:19 artificial: '1' demangled: unittests::test_case mangled: N9unittests9test_caseE class type: 'struct' size: 8 align: 4 derived classes: class: '::unittests::test_suite' access type: 'public' virtual inheritance: 'False' public: destructor_t: '~test_case' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:19 artificial: '1' demangled: unittests::test_case::~test_case() mangled: _ZN9unittest member_operator_t: 'operator=' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:19 artificial: '1' demangled: unittests::test_case::operator=(unittests::test_case const&) mangled: _ZN9unittests9test_caseaSERKS0_ is extern: False return type: ::unittests::test_case & arguments type: ::unittests::test_case const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False constructor_t: 'test_case' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:19 artificial: '1' demangled: unittests::test_case::test_case(unittests::test_case const&) mangled: _ZN9unittest is extern: False return type: None arguments type: ::unittests::test_case const & arg0 calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: True constructor_t: 'test_case' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:21 artificial: 'False' demangled: unittests::test_case::test_case(char const*) mangled: _ZN9unittest is extern: 1 return type: None arguments type: char const * test_case_name calling convention: __thiscall__ virtual: not virtual is const: False is static: False copy constructor: False member_function_t: 'set_up' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:23 artificial: 'False' demangled: unittests::test_case::set_up() mangled: _ZN9unittests9test_case6set_upEv is extern: False return type: void arguments type: calling convention: __thiscall__ virtual: virtual is const: False is static: False member_function_t: 'tear_down' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:25 artificial: 'False' demangled: unittests::test_case::tear_down() mangled: _ZN9unittests9test_case9tear_downEv is extern: False return type: void arguments type: calling convention: __thiscall__ virtual: virtual is const: False is static: False member_function_t: 'run' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:27 artificial: 'False' demangled: unittests::test_case::run() mangled: _ZN9unittests9test_case3runEv is extern: 1 return type: void arguments type: calling convention: __thiscall__ virtual: pure virtual is const: False is static: False protected: private: variable_t: 'm_name' location: [D:\dev\language-binding\sources\pygccxml_dev\docs\example\example.hpp]:30 artificial: 'False' type: char const * value: None size: 4 align: 4 offset: 4 class "test_suite" hierarchy information: base classes : ['test_case'] derived classes: [] class "test_results" hierarchy information: base classes : [] derived classes: [] class "test_case" hierarchy information: base classes : [] derived classes: ['test_suite'] the namespace contains 2 "run" member functions they are: ::unittests::test_suite::run ::unittests::test_case::run Does all test_container_* refer to the same object? True >Exit code: 0 pygccxml-3.0.2/docs/examples/print-example/output.txt.rst000066400000000000000000000001121476564735400236240ustar00rootroot00000000000000====== Output ====== .. literalinclude:: ./output.txt :language: text pygccxml-3.0.2/docs/examples/searching/000077500000000000000000000000001476564735400201005ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/searching/example.hpp000066400000000000000000000007651476564735400222540ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ int a = 1; int b = 2; double c = 3.0; int func1(int a) { int b = a + 2; return b; } double func2(double a) { double b = a + 2.0; return b; } double func3(double a) { double b = a + 3.0; return b; } } pygccxml-3.0.2/docs/examples/searching/example.py000066400000000000000000000051111476564735400221030ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find the location of the xml generator (castxml or gccxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename # Parse the c++ file decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns_namespace = global_namespace.namespace("ns") int_type = declarations.cpptypes.int_t() double_type = declarations.cpptypes.double_t() # Search for the function by name criteria = declarations.calldef_matcher(name="func1") func1 = declarations.matcher.get_single(criteria, ns_namespace) # Search for functions which return an int criteria = declarations.calldef_matcher(return_type="int") func2 = declarations.matcher.get_single(criteria, ns_namespace) # Search for functions which return an int, using the cpptypes class criteria = declarations.calldef_matcher(return_type=int_type) func3 = declarations.matcher.get_single(criteria, ns_namespace) print(func1) print(func2) print(func3) # This prints: # int ns::func1(int a) [free function] # int ns::func1(int a) [free function] # int ns::func1(int a) [free function] # Search for functions which return a double. Two functions will be found criteria = declarations.calldef_matcher(return_type=double_type) func4 = declarations.matcher.find(criteria, ns_namespace) print(len(func4)) print(func4[0]) print(func4[1]) # This prints: # 2 # double ns::func2(double a) [free function] # double ns::func3(double a) [free function] # Finally, look for variables by name and by type criteria = declarations.variable_matcher(name="a") var_a1 = declarations.matcher.find(criteria, ns_namespace) criteria = declarations.variable_matcher(decl_type=int_type) var_a2 = declarations.matcher.find(criteria, ns_namespace) print(var_a1[0]) print(var_a2[0]) print(var_a2[1]) # This prints: # ns::a [variable] # ns::a [variable] # ns::b [variable] pygccxml-3.0.2/docs/examples/searching/example.rst000066400000000000000000000007611476564735400222710ustar00rootroot00000000000000============================================ Searching for a declaration (using matchers) ============================================ This example shows how to search for a specific declaration using different criteria. Let's consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show you how to search for functions and variables .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/searching1/000077500000000000000000000000001476564735400201615ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/searching1/example.hpp000066400000000000000000000005331476564735400223260ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ int a = 1; int b = 2; double c = 3.0; double func2(double a) { double b = a + 2.0; return b; } } pygccxml-3.0.2/docs/examples/searching1/example.py000066400000000000000000000032301476564735400221640ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find the location of the xml generator (castxml or gccxml) generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename # Parse the c++ file decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns_namespace = global_namespace.namespace("ns") int_type = declarations.cpptypes.int_t() double_type = declarations.cpptypes.double_t() for decl in ns_namespace.declarations: print(decl) # This prints all the declarations in the namespace declaration tree: # ns::a [variable] # ns::b [variable] # ns::c [variable] # double ns::func2(double a) [free function] # Let's search for specific declarations for decl in ns_namespace.declarations: if decl.name == "b": print(decl) if isinstance(decl, declarations.free_function_t): print(decl) # This prints: # ns::b [variable] # double ns::func2(double a) [free function] pygccxml-3.0.2/docs/examples/searching1/example.rst000066400000000000000000000007751476564735400223570ustar00rootroot00000000000000========================================== Searching for a declaration (using a loop) ========================================== This example shows how to search for a specific declaration using a loop on the declarations tree. Let's consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code will show you how to loop on the tree and find a declaration .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/templates/000077500000000000000000000000001476564735400201335ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/templates/example.hpp000066400000000000000000000005321476564735400222770ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns { struct B { struct D { bool d; }; }; struct D {}; template struct T {}; T function(); } pygccxml-3.0.2/docs/examples/templates/example.py000066400000000000000000000033641476564735400221460ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns = global_namespace.namespace("ns") class_t_decl = [] for d in ns.declarations: if isinstance(d, declarations.class_declaration_t): class_declaration_t = d if isinstance(d, declarations.class_t): class_t_decl.append(d) if isinstance(d, declarations.free_function_t): free_function_t_decl = d print(class_t_decl[0]) # > ns::B [struct] print(class_t_decl[1]) # > ns::D [struct] print(class_declaration_t) # > ns::T [class declaration] print(free_function_t_decl) # > ns::T ns::function() [free function] print(declarations.templates.is_instantiation(class_declaration_t.name)) # > True name, parameter_list = declarations.templates.split(class_declaration_t.name) print(name, parameter_list) # > 'T', ['ns::B::D', 'bool'] pygccxml-3.0.2/docs/examples/templates/example.rst000066400000000000000000000007101476564735400223160ustar00rootroot00000000000000============= C++ Templates ============= pygccxml has minimal support for c++ templates, but there is some information that can be extracted from templated declarations. Let's consider the following c++ file (example.hpp): .. literalinclude:: example.hpp :language: c++ :lines: 5- This example show how to extract template parameters from the template declaration. .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/examples/variables/000077500000000000000000000000001476564735400201055ustar00rootroot00000000000000pygccxml-3.0.2/docs/examples/variables/example.hpp000066400000000000000000000004111476564735400222450ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace ns{ int a = 1; int b = 2; double c = 3.0; } pygccxml-3.0.2/docs/examples/variables/example.py000066400000000000000000000035501476564735400221150ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import utils from pygccxml import declarations from pygccxml import parser import os import sys import warnings warnings.simplefilter("error", Warning) # Find out the file location within the sources tree this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) # Find out the c++ parser generator_path, generator_name = utils.find_xml_generator() # Configure the xml generator xml_generator_config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=generator_name) # The c++ file we want to parse filename = "example.hpp" filename = this_module_dir_path + "/" + filename decls = parser.parse([filename], xml_generator_config) global_namespace = declarations.get_global_namespace(decls) ns = global_namespace.namespace("ns") # The variables() method will return a list of variables. # We know that the c variable is the third one in the list: c = ns.variables()[2] print("My name is: " + c.name) print("My type is: " + str(c.decl_type)) print("My value is: " + c.value) # Of course you can also loop over the list and look for the right name for var in ns.variables(): if var.name == "c": print("My name is: " + var.name) print("My type is: " + str(var.decl_type)) print("My value is: " + var.value) # One way to get a variable is to use the variable() method and # a lambda function. This is the most flexible way as you can implement # your own lambda function to filter out variables following your # specific criteria. c = ns.variable(lambda v: v.name == "c") print("My name is: " + c.name) print("My type is: " + str(c.decl_type)) print("My value is: " + c.value) pygccxml-3.0.2/docs/examples/variables/example.rst000066400000000000000000000006371476564735400223000ustar00rootroot00000000000000========= Variables ========= This example shows how to find variables and find information about them. Let's consider the following c++ file: .. literalinclude:: example.hpp :language: c++ :lines: 5- The following code can be use to find the variable named "c" using different strategies, and to print information about it: .. literalinclude:: example.py :language: python :lines: 6,7,8,17-27,29- pygccxml-3.0.2/docs/faq.rst000066400000000000000000000114051476564735400156210ustar00rootroot00000000000000FAQ === GCCXML vs CastXML ----------------- ``GCCXML`` has been superseded by ``CastXML``. It is highly recommended to use ``CastXML``. ``GCCXML`` support will be removed from ``Pygccxml`` in version 2.0. C++ and C code support ---------------------- ``Pygccxml`` supports ``C++98``, as ``CastXML`` and ``GCCXML`` only output declarations from the ``C++98`` subset. Of course, newer versions of C++ can be parsed (the tests currently all pass with ``C++11`` and ``C++14``), but not all new features from these language definitions can be used. ``C`` code support has been reported to work. As ``C`` is similar to ``C++``, this makes sense. Some discrepancies may be present. Still, parsing ``C`` code is not officially supported by ``pygccxml``, as it falls out of scope of this project. Of course, if some volunteer wants to work on this, submissions would be accepted. Function and method bodies -------------------------- ``Pygccxml`` does not allow to fetch declarations defined in function or method bodies. For example the following ``a`` variable will not appear in the declarations tree: | int f() { | int a = 3; | return a; | } Neither ``GCCXML`` or ``CastXML`` currently support this feature. ``CastXML`` could probably be extended for this later, as ``pygccxml``. Performance ----------- pygccxml is being regularly optimised for performance, but it still may be slow in certain cases. Before all, it is highly recommended to benchmark your application if performance is important to you. There are multiple tools out there for benchmarking python applications. We currently are using the following two command lines / tools: | python -m cProfile -o profile_data.pyprof script_to_profile.py | pyprof2calltree -i profile_data.pyprof -k Of course optimising pygccxml alone will not help in all cases. The bottlenecks can also be in the code calling pygccxml, to make sure to benchmark the whole process. Any help on the performance side is also welcome. Some things you may try (in order of priority): 1) You might want to consider making the declaration tree as small as possible and only store those declarations that somehow have an influence on the bindings. Ideally, this is done as early as possible and luckily castxml and gccxml provide an option that allows you to reduce the number of declarations that need to be parsed. You can specify one or more declarations using the ``-fxml-start`` (gccxml) or ``-castxml-start`` (castxml) options when running the xml generator. For example, if you specify the name of a particular class, only this class and all its members will get written. Ideally, your project should already use a dedicated namespace, which you can then use as a starting point. All declarations stemming from system headers will be ignored (except for those declarations that are actually used within your library). In the pygccxml package you can set the value for these flags by using the ``start_with_declarations`` attribute of the ``pygccxml.parser.config_t`` object that you are passing to the parser. 2) You can pass the following flag to the *read_files* method: compilation_mode=pygccxml.parser.COMPILATION_MODE.ALL_AT_ONCE 3) If you want to cache the declarations tree, there is a caching mechanism provided by pygccxml. You will find an example of this mechanism in the examples section. Flags ----- castxml_epic_version -------------------- The ```castxml_epic_version``` can be set to 1 to benefit from new castxml and pygccxml features. To be able to use this, you will need the latest castxml version. Currently this adds the support for elaborated type specifiers. \_\_va_list_tag and other hidden declarations (f1) -------------------------------------------------- !!! This flag has been removed from pygccxml > 2.6 We will now always remove these declarations When parsing with CastXML, the XML tree can contain declarations named ``__va_list_tag``. If the compiler is llvm 3.9, ``__NSConstantString_tag`` and ``__NSConstantString`` declarations may also be present. These declarations are internal declarations, coming from the std c++ library headers you include, and are often not needed. They are for example polluting the declarations tree when running pyplusplus. By default, pygccxml will ignore these declarations. To still read these declarations from the xml file, a config flag can be set (``config.flags = ["f1"]``), or a flag can be passed as argument the config setup (``flags=["f1"]``). \_\_thiscall\_\_ in attributes (f2) ----------------------------------- Attributes defined as ```__thiscall__``` are now ignored (tested with VS 2013). The ```__thiscall__``` in some attributes will be removed too. If you still want to have access to these attributes, you can use the ``config.flags = ["f2"]`` option. pygccxml-3.0.2/docs/history.rst000066400000000000000000000026051476564735400165550ustar00rootroot00000000000000History and Credits =================== History ------- The original author and maintainer for pygccxml was Roman Yakovenko (2004-2011). Holger Frydrych forked the project to work on python 3 support. Finally, Mark Moll forked the project a second time to carry on the work of porting the code to python 3 (keeping it compatible with python 2). In Mai 2014, Michka Popoff and the Insight Software Consortium revived pygccxml by setting up a git repositery on GitHub, hosted along with gccxml. The full changelog can be found in the CHANGELOG.md file. Contributors ------------ Thanks to all the people that have contributed patches, bug reports and suggestions, or supported this project. * Roman Yakovenko (original author) * Michka Popoff (actual maintainer) A special thanks to the Insight Software Consortium for their help and collaboration, especially: * Brad King * Matt Mccormick Contributors can be found on github's contributors page: https://github.com/gccxml/pygccxml/graphs/contributors Here is the original list of contributors from before the GitHub migration. * Roman Yakovenko's wife - Yulia * Mark Moll * Holger Frydrych * John Pallister * Matthias Baas * Allen Bierbaum * Georgiy Dernovoy * Darren Garnier * Gottfried Ganssauge * Gaetan Lehmann * Martin Preisler * Miguel Lobo * Jeremy Sanders * Ben Schleimer * Gustavo Carneiro * Christopher Bruns * Alejandro Dubrovsky * Aron Xu pygccxml-3.0.2/docs/index.rst000066400000000000000000000042241476564735400161620ustar00rootroot00000000000000pygccxml ======== pygccxml is a specialized XML reader that reads the output from CastXML. It provides a simple framework to navigate C++ declarations, using Python classes. Using pygccxml you can: * Parse C++ source code * Create a code generator * Generate UML diagrams * Build code analyzers * ... Installation ------------ Installation instructions can be found here: :doc:`Installation ` Compatibility ------------- pygccxml is compatible with Python 2.7, 3.4, 3.5, pypy and pypy3. Documentation and examples -------------------------- The :doc:`examples ` are a good way to learn how to use pygccxml. If you want to know more about the API provided by pygccxml, read the :doc:`query interface ` document or the :doc:`API documentation `. A `FAQ `_ is also available and may answer some of your questions. License ------- `Boost Software License `__ Contact us ---------- You can contact us through the `CastXML mailing list `__. For issues with pygccxml you can open an issue `here `__. Branches -------- The stable version can be found on the master branch. The develop branch contains the latest improvements but can be unstable. Pull Requests should be done on the develop branch. Test environment ---------------- You can find the Mac and Linux builds `here `__. The Windows builds are located `here `__. Running the test suite is done with: .. code-block:: python python3 -m unittests.test_all Code coverage is also available. It is automatically updated after each commit and can be found `here `__. Documentation contents ---------------------- .. toctree:: :maxdepth: 1 install examples faq apidocs/modules documentation query_interface design users links releasing history upgrade_issues Indices and tables ------------------ * :ref:`genindex` * :ref:`modindex` * :ref:`search` pygccxml-3.0.2/docs/install.rst000066400000000000000000000036051476564735400165230ustar00rootroot00000000000000Download & Install ================== Prerequisite: CastXML --------------------- `CastXML`_ needs to be installed on your system. 1) If you are on linux or mac, your package manager may already provide a "castxml" package. 2) You can download pre-compiled binaries for `Linux`_, for `OS X`_ and for `Windows`_. 3) You can compile CastXML from source, either with the `SuperBuild`_, or by following the `full install instructions`_ . Installation of pygccxml ------------------------ You can use pip to install pygccxml: .. code-block:: shell pip install pygccxml To install from source, you can use the usual procedure: .. code-block:: shell pip install . For development %%%%%%%%%%%%%%% You should use a ``virtualenv`` when possible. Example recipe: .. code-block:: shell cd pygccxml # git root python -m virtualenv ./venv source ./venv/bin/activate pip install --editable .[test] GCC-XML (Legacy) ---------------- These instructions are only here for historical reasons. `GCC-XML`_ was the tool used to generate the xml files before CastXML existed. **From version v1.8.0 on, pygccxml uses CastXML by default. The support for GCC-XML was finally dropped in pygccxml v2.0.0.** There are few different ways to install GCC-XML on your system: 1) Most Linux system provide the "gccxml" package through their package manager. 2) See the `instructions`_ to install GCC-XML from source. .. _`instructions`: http://gccxml.org/HTML/Install.html .. _`GCC-XML`: http://www.gccxml.org .. _`CastXML`: https://github.com/CastXML/CastXML .. _`Linux`: https://github.com/CastXML/CastXMLSuperbuild/releases/latest .. _`OS X`: https://github.com/CastXML/CastXMLSuperbuild/releases/latest .. _`Windows`: https://github.com/CastXML/CastXMLSuperbuild/releases/latest .. _`SuperBuild`: https://github.com/thewtex/CastXMLSuperbuild .. _`full install instructions`: https://github.com/CastXML/CastXML#build pygccxml-3.0.2/docs/links.rst000066400000000000000000000010431476564735400161670ustar00rootroot00000000000000============== C++ Reflection ============== ----- Links ----- * `CppReflect`_ - extracts reflection information from executables, which were build with debug information. It works with executables that has COFF or ELF format. * `XTI An Extended Type Information Library`_ - Bjarne Stroustrup talk about adding reflection information to C++ program. .. _`CppReflect` : http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html .. _`XTI An Extended Type Information Library` : http://lcgapp.cern.ch/project/architecture/XTI_accu.pdf pygccxml-3.0.2/docs/make.bat000066400000000000000000000144771476564735400157410ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pygccxml.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pygccxml.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end pygccxml-3.0.2/docs/parser_uml.png000066400000000000000000004314711476564735400172100ustar00rootroot00000000000000PNG  IHDRm:QsRGBgAMA a cHRMz&u0`:pQ<IDATx^_<ٙ l,HiF.[K{<[Zz@mK TBF 1a4/h\MXFKbQ!)huazoTTAHOI/=s"3G|ԣ  @ @8{O__ @ @ p5煖۠,d@ @@J #@ @ p{h7h7 @ @`n;6Wh @ @A @ @%vݱٚ·? @ ܞ  @ @.*C @ @*^C @ \ @ @n @ @"h72 @ @*8 @ @E @ @Jx1@ @."vs>*C @ @*^C @ \ @ @n @ @"h72 @ @*8 @ @E @ @Jx1@ @."'wyޏ!2 @ @L`OoDd @ @@f62*@ @ lrh7Q @ nfC  @ ,%v3ldT @ @`)nf# @ @K &v3 @ @XJf69Ȩ@ @Rh7ɡFF@ @@Mf62*@ @ lrh7Q @ nfC  @ ,%v3ldT @ @`)=i7_~>_{oģ @ @Iy~u ~P#2iQ @ v|^SL@cv2SA @:h7Ln @ @`9([0 @ @7 vsȏc+ @ @؀B @ x:}: @ Aznݬ @ b!@ @Cf-h7L@ @ c6vJ @ @`cn66 qf?c @ ch7;vs_@ @!vs^h73" @ @#väXHf!8A @@C  @ ph77M<+@ @ ~AX) @ ͎ᆴܗ?C @Ad&L@ @0)@Yj @ 9nZ'?7|s={wvs4 @ @#vs1>vs @ @j7g~w~G/z|7/}c~zW%PII[Pi1:yK}W]{Jv#6vUzUOWͻ*ңZ~IZ$@ @!p\&∵i+kRH$|X=Q'OXV3^uUOiZG>h7:c9P]eG%բҁ Y JZ~f-؁ @  +)΋'S KlYiL[%tbY|j7[*c7roY`po,I?N˯u=ݬE; @ ͻ&k7qwx!Eu<ӵ5ҏ"xmTXّntRnz BT @ L!p\&[X1,#Ng^-eӯrsVv-LyT8K{8OG"- NϩZϔi1 J @ \Hڍw!eq]I7~iQƋ~4.mzs\WxRK6~8&g'ͅ !@ @"phK7 ` $1Tv['BT @ L!vǔ(3:<)A! @ @DMn2p$d_z3-w"LLA @N8vÜͅ@ @Bf % @aZ@ @n@ Wz@ @#vُ;h7+< @ @uu@ @8 DY)!@ @&Bh7 Q  @ 0Z-n @ @l1Ǖ^A @ll@~ O!@ @`nvS!fi /|u_cUz  pDh7sݬ ~B/#F@Aw h7# Bf/#KZ>O|w>77VU[kzo| S ݬͽ_կN\է b}. ^*SŦ_L=D ݠ\Kxwbמ3OtbSU[kJo}[\b2#vNݬ>m0k7?z晳ڍʨtج+1% $_|RU(] 2gkcžW]K>y*ԷvSn+O,L]H_o}erFǪbW_^/~LńzN>ArƗ:ڍ.\JϾ\:nėW:cLKz<IŊMYx3/>THag?|N7i-UQE W|95gԻ Vrqy_2 ~>xL "|8@'W]3);zWTE$T*96SbinV6| k7IYɵuá^h71- `nnn#MDBb)"6o&']\|GoYсʻ98wݨ!4uթQvc2.D$vD!b0))7~baEwNN*Sc`Ψ;"N9n*J3VQէ Ms]G?`~ML溞u<ƴ@A9\M^׹U_#+1% $BE;ZlbvnV:ݜpFQ>'A`v3^+1% <^ݬuv:R B`/n2R @`nn\4m<տLݬ>m06\~wӒ^@F8"տnVGA^F ?! țh7# Bf/#Kv_0 `~ӿ=vy7k_#6ݍ?"|km;An|nIfoog?gyBx0?s?kky{k ?p/|N> c7i$vÚ)LAG$k|~3 pwn~޽8\ 6C7(^}eT෾eթ@ nMvC-@(B_؄F\K@O~b0P|#X_I~w>N7EI@h7F/u@C)Ɨ;6!h7S弼W$<s.,gVMP8k| 6Z"vܒ5ܱ @Hjz2%Kލj)SFOxѓn|fbꍒn^3˓)R8k| :mAK_؄Fݜntc`&$@2ʔ/ZjyYbfVލKv2 N@0a:)h7- \w~&JbS;7RnVĚڍNKS@s \k?i 0 5ܱ @9DyR fn$Iy@n5h7K/믎?/#/b +S@ǸW+OT+Ɨ;6!h7SeL\-h=β̻LiVͻeG[@pwɓ'{ɏoۗ"#)`魷ޚhy/)0>}To ^czd6O)^SL)3U/.ѤX|9J~2w$p/wlB`#nj7s#ܗ*?>#1Hv9A;9!#@YF뜱(HQ@&Uij??*zVQzĈMCM&l?q]Uq-iY^وllN- lP9{^\Zu\ͅ_6X\i(l2x@.S?Fgr͞*؍ -!m݅5ܱ @vzFO;>`xh7>(PQ 85yv$ DF.ҁ#"GM;\1t),LeǛ5xUAt+wS*&B#Au:xoFg*Ljz_*&2"ͅ\Ϲ3Um>YZj^ ͵/;|7߰)r&6Bfvs(!K_ëk7}0Dze8lLxSҌV88l 'lbAfЬm:_ozPl*3T4|uxPO]z}H$}ҊHun͠$dSY;o\?%z\65ܱ @A:DE%J2(9ZL!pwh7^KiV3p˛Y8j7 HR(m;Ʉ>nxXQI+AgLy],@9^Qx㽼uN:{ Ns~LɵV9UԚ\jǍ,8j7~՛DL_h%wS\ڍ6э$L哄=hM[*;wpxTh7n [xœK9ADOzY˔#+v$Cn*HaˊRKS],73NaBͥd,BK|6e-M8K͸Wd. G`ǻk7̞5gS͵_'CLj>U0UfWu]ji_ WLM3U𬠚kw_{5;Nj^]RK/$ :ףV/vFUtpInYW]~ge~]uJ*#ziAJ4;ɻk7B]c% L$62}z_u">(i˖]tԧUιHgͱ*/wlB`#n\ah7n^ I*D*Sxĩ|{KܒL5ZgmzCwz#\sdT`-܇?Nf5A#cW9X4TM^&z^un`}#>iUrMp" I2Nj7:FM?\RԪ>5NԈXs +/jS-4C9iWVշ!iO~˔Ki j .|Ɨ;6!h7h7Y؏*~ \knK?% 7= qTNWUIp*.`ReA/DX EԜ MovupWC^|3^NѻIixvfbLKuOk^:y,Զ<ijGOH˦?e3*V)L9|Ň_rɓ'/z3g?-ש#eR/9P陹Wy9\ZN?5 3fnSs-s/wlB`#nn~Rexŧ^K[Pm->NJOwM/{Ow:[~bƟFɠ߽ȸMOlh: ϴY.c2x΢͞55 #wC~X5&5ƿkzDOL0:H[_ 9:  C.uY`t7EqE٬ _[U`w07 %T f[eu'nvVu="c Ȧ<:0scwsƥ,r[O7k7ǁ\oAgO]sF](V)ŸBo=)bEi;rvOOM?.3NǓYi1%=̈=m>jM|H:nnhYi§N8\Aő\OuCC'U6Ry?ْρCL*X{ujV GekapZr&6BfvsJ9Y)fNlQ{Tmpc$]ɪDzq3Yh 4̪;X8A%sC)gQWSi\|(' Rg{=X޻m6ꩫ6}j_N\k_3߬*}Pn`\&,L.)汑-5\oW~^1wF/ns=C81Yڍl&c % c7¹[}^xuNfctF#yX*B\&}̹qc7>NGz)5ʚ&N꣣d\i>D4ZI$?zP|k:-X?r<~%?-UT/+1~*S5^vㇼagx򡒚7vBƗ;6!h7S&JH`LQ*0έIKLԗ[?VSy+];JQr?܆Ĭ*z4_9oOPUܠ̊Pf4T)9Ae5q%5?[a@" LbvS|ן}N՟&\tZMojYCiq\%6GrɄP^G6Qi21U v32v{:evOSAQ&fԡnTRĞjti7W2y') k|,&ktȴ<4$JиvSWiZovcϫUȭ^cH} j7v'j5fSVFfŠvT/DS5ܱ @Y$v'e')ҁci}]o6u To%Y"V 6yK2}FO7T 5^jw s1%eg0*fYp`=ޟ&bҙ|Zfm4%ӫڍρkhMHi>N=C*vfF"CY1ZH7Vs;^g$lRL9SMX҄w5^ g՞n5h7J*B57װS9,:ߤz\L/^ Ļb/Z٬O)vtuu>8H4^=t#k* z7sWܴ{oJV|&1[yh*Hzhx4b#:Ώ]ّX=ifٟ;nh]At!{ZhWo?U@L+c짌abAکwnz`euJfp"Zx$ Lp>qz'._"Pz=rEa3W_$@+2 Snlf~qM7/\8g?-=蒩jžd//^xc:cq١Y\ٍy/wlB`#nk7 k7WJ֨O:t,EqOJ0k*i/U,̲Yf^`%|{׫;˚2)`4L UG_λɜqP2҈u!7:\Ta{Ln) Ug F?b)ʢL k7 (>Ȉz5w;vSQ'& Ymy-o!6ԩ^y ݈1EW꯳ok!^Q)o^,W74 y7FY'$ l۹ &F5r.%x`V5n8I\m.k|c!v3Ui"(n|f 1E_aPaTK&:NvL854ڍ_:W]U'7-k_{W'3Ɣ~Ȳu?ysk̻1|KV2&ԛ 9 ]SvNŒ:I:/g >';#Ϊ4ϐ^qg=]"-JL_:bz}ǛY4:#n9VM٫H'U뺿^2Hx.&]k@3R_ngAqZ|ᒟ\W!9Lp|=Xtn^.5ܱ @YXpBSfk:oﲡJt`V[vd˛Ki7Wp4UkrCA ;PzxvGB{E8Wp1׊W{} G4~VOis\l&[S9/aP I剄Q :Q4hF|V/j\Şm/^ُomשf#n5~,  Tq\M +YV+lfQ#jo3f57|ϹobS+6{)x(p@ꪷݗ2ᬷVrZ#tn5vsn͖G pUr&6BfnqIBkF6+zS"b# hT;,*x^k^ʙ%vsa"8&@bx<r&6BffVDa@w'vsqf֎37=֝}z-.cvNAUx?g6gȬ.l0F7 p{r&6Bw{$- \kv^ୈس>{փuZݛnf cΩ^hcWם.X1ߵj3Bhvs/ Ɨ;6!h77niZ%l:=иhr{ԚVsr˷RyjiIeJ|[t/QsY1۬y ysZsSn5%&ͮn{AQ*kRIt%R4Re$~ZIuk{:5s9;!;Nojɟڹ6=(rp**:*Y]%fVU܊|;g7go2}fA]8^$uMPAxZly[Q-C>2K#9##^Y617ԏz0ИwsPp3'Z/'ۣ3sF$n\knIkG_nL]Q*6+LʅZE7=B^V~R׺]-/q~܇=ŎJe#ziM}k-ɭMY?[کnGaI4d r|wKX:/XW\ Г>M\B_؄Fݜnz?F k*)35H`/@R&0SGFW?=wgLi#,cbQ'uB{W,=1QR"8 bFeb䭾i7]̳QXFn|V[wgjIhffXkd`ߏ ]?F?(xdV{H:^ZsX:{Ek| 7M]'U+Z:k7kE?_v(t1p4 K)To%|q5=[?8c5,?rkMxeͩ(M?;5YRDA;5&R4:a,L&UW]YIX6nL_؄Fݜnbh}։klև*VMũ,8KE$ڍ ;^ql"N()ouֽLmgh75wh7UvuڍY3p=^@XFEjSA1 4#>EǨѼ܌n*YZs f#_`tnsPWTQUɯdNX8ttNh^&&,gSy7~daJzAJhEHo%3>4 S27w2A)pi mM_)Uܬ as)YiEn2>@`6 MYgiۛwHލC}}\(r*WTM-{D/Pgu00nYn9ۚ89ghvS^qh71r' O+s:MFԣf|j7uV;gntSݳi;@ZߣNԍ`,p:LͻIK!YpɣIň ]R#m2\!3=I&>4+`rY'GF3k|R[x񔎓=^q F0rܨ { 3(D:5@ %d\Zw`;I:׋یF\t? V'O tR xr&6BfvDDޛw({9v6ݵr[H'jNpuq^z?qiQg4NmԲE%]=u9Wr0tU-KN:PInXynk$RsXMX7IX6F:pŽ^qjwpu[-na" ^:ˌMߣik^ẂƎ7{7Lx^ ˂&GvH.(hP"p/wlB`#nj7xc0xX%}Ź뎄vݴ4$n=ڷTţ*%MF'*f  ;U Wt|ϔ4}B#UX])7}JiPLf NL: :'g`0fIkjl0<%Id9kNKuo\kx,Eqs=؂vӠ.>_n2(t!p/wlB`#nk7׎L? ŝŐn['m{ś-Uՠ#MnMZYԣ t;Mdep[Eo=ʣ\kgxT8[8@`Mi7Jr]D6SƗ;6!h7nY_h7g0m^g11ֹo*eސh#M{Tíaۼ Ϭ|3qf0溺h7~0K{dԔД]lJ~ҕ dZ %CƗ;6!h7n Hn5xCSO`SӦk|c!vsF~AO܀{K4D~_6U0nl<aCa~QnfZmݦ-Z.ߋ@!llaw!: )h79._O9vN.i K`#pcn?w};C~_|C {/ߋjѽ;M \t%S&vcx}oz @ @ ݜgD \?/T_U8 @ ^F ?6[j3 @ n& @oͿްn_kWh @ 3h7;0}$ړX5[*vrG/} @ n@ !_|Nz7ܟs봄@ @-oo/x'>OK;(C @En.Ge,#}?;UV-kZ @ n`<&<_f=c@ @XJ 19~WUjɣ?slS @C '56C @nVGA,$v @ <4^:+h7. @ p#h77M38K," @ @8 :]( nA @+qh7L@ @ 0+ h7[  @ %h7[ |96c? @ 0L톙@H @ -@h˱ {= @ ah7 lVF? @ l͖F_MO!@  @af@`+n2@ @`Kn4rlh7z@ @` 3[!v@ @["vc@9{@ @n ~@ @-ͱǟC @&v̀Vle$ @li4n= @0fBf+# @DfK/&vs @ 03 h7[  @ %h7[ |96c? @ 0L톙@H @ -@h˱ {= @ ah7̌~؀#c @@f pg~WUyܛǽ_E]w2i @O0~HUYB? @ @[ vQh7w A @n;9   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ qԛ>0 @aJ@ @!v'h7wCO[%vՑ/@ G3   @ h7yvs74Uh7[ @ ݜ_>K3?g>o~0SbC??ܻ;g) @ ܇yp~ӿ׿ѣvṀ9?̔C@J._¯?33_>jܯ~p3씅 @C>ܗe|w>~C/zaZQ[_ձ.ݜK^_z:}[oynO|j@ @>ns߈v<޷ݼOʹO<3m:3xӠv)fmQu(,e3B*$LpCt_fħ @CՎ6nK?ٶ#7Alay7nh~:/SVgnV7~Zw&dU+%ImV?kx.k}9%( fħ @C'8ڬ-<Ȼ9?痸v3k-ۥ%e}ε9- fħ @C+2^{MU>ϫk*,O4+^zȟ^xabC7 C @sn=e:)*Rt|6سyĹ6z$ڍI\d^JveG:$8<ȸȠV:꡿#\142n'U`tKQxQZ :u UҞDoYqvtDi4w2b/tsG#eAY@ @nnfk7+t" [dk,^T㔜'$3E]InCgLޭ\#V$&"[j[Vg|ɝѱr:_%#iHma娌>%I]0XK3Zp#*mduIKgOuIy$}7 C @s,n#8@kjFǍnԐJTU(2U!B\ =Q"?EzGm(Uz%Buw?MXq!Xy7#:K$9fP [>XY;%0˂ @,nKhpTybPqgD&HΐMavzg,n,+ͥv6~9*h7MGK4F14h/nTX]SLlA;nC@C @h7 sMvܖڍwcа &/JzKa]\2M5_8');ۦ#v4e\qs>R`rR$0˂ @,n,@ D:,Cx}Psm/j<R(;nVW]mnܖە5|I)ޮ蓵uK$c(,t[K I,gkK<^TLMGKl[ظUl Ƭ2^j";Sf#s\8}0 @ 0Bơ{F9%7J&KDm;'c)3!|i/:/ #݊#զ7 d^dI0ZܨNJJ2 Ŧ#q;Ucw._Ҋ(i'i[Ԗ>ֈnoinv^w:SreښrQC>4nh-4s+goͽMתeigro @@(ѭJ9ѢOPj)*yI?)n]>MaB'݈gt G#}<5vuy/nlAʔ[4[]5tV=دs##&/I5*O|!ȵ^ SoIzIj~dGgrsO|YP @M %VL|!_ާ832U"9[dA{t4L'c0BQή^}i#S Mm4n7>PI;?5~X˦Eٔɉ(C @h7I!Ϲ+S^ױ$U'᩠ZRȠ55cߡ+61 WXQ;lMo)PR@DrKHssp2D%KƤ~+vA)iB8'Gr!YXIG-Uu|SI* 9.xyHGVH:ޘ5^%#|:=2g2ECx+uSue ^GyV뭸ڌ{gLg8z Tq]ڲ3AqܨKC~:f>Җ''GAZ4(9} @nS9UDQ_B,Ǎޙ"+?W+~zfQ-Yλ5vঽԤH Ye?m?Jщjz#d\ДӪS({׎$O-‡|]|ѱ08v}oT@9=I}O2dٕYFAGn]4sG ً׋nkd5zd9.[b^f,g=جQҌ]0ZheHuyhD!4|ok>i5dK 8ݥdDy(mw0EhXV-Nֹv/^| @Lh7K'b8KX5D.i"@LV5GvP~j"LA$-(amFz~QFn M ^#>T)9MVHx)}CappzF{Iid;QUy ҵ6#^HW]I.C983M.I{N:Scm, .*ncap׉τF5:PqڔL5z'%} @,n=*v _ Av_QqJH&Px>$6Na(nbetFe2bԍct +uI#[x2h7r#$Ό,F4;]PL@X,5ğAUe\GXgǵ՝I`/k\?ǵmٮIO8{2R yIZsz}+eO_V @ @YXzЫ5C6! j7aڍ#lҴݸAfmD&F˄i&54 F2ힽ)飜ltvSj_b=ih Xk4y7W65&3H >#{vǵսbL5ss7W: Qn #owN#>oY5{r>@ =@YH}Hȗ J%UY6O1so[c0wnGްJQv+;Yq^& R)x>u&~}PLisP"Ye#6K\bJ2^u2{Hd.avGpgnͪpe G |T瀗Y[Ut-=53i$@IZTGd]=8&^Bfp㒱0(#3L>P5ǢI\k+y#܉3 էjFc ~.).{pHnXf[瘏e @80ڍž\4*C&EPޮ؁'Iyсq4G$cդcamyO>fgx U!%I u.`BA|*@NcYAǨ:jFWJt+uJ9)#dfꬨ[*LxDlSu9تP]wֈ>ӌK176OULf+zn7(i[}g+_ٿ63^`3}t @{"v\}q'ŌBbMu^vAWgduJq\7#$u4\k=}Y+ @LM]11F!ޱEykm NRwkq-Z]<Ćfʫ{n34&6B}t @{"vs\f##n@"/+| @ ݠ+l]@G!@ 'h7h7wi=}Y+ @L^a#Bw&p>@ =@v M{],h SȵEnw{m _!@ p`h7n$r>DGIҌd/zy%{s C @`On(: jʭ% j7n甇){W@ lF ZLgh ^Xg҂^[zHԐ`U:pyA;Dz]Uw퀭yUlMoOi"w~ɦf.M{aA|Sڥo~[vNDj7h, @yM2D$UXnz ztDJk]5_E`O_V @ @X;:H1"C'7W>/1h5Zb2l!7ұf;RjޕM9fG%kvq6*v&gnTOvv-N턼sj3 e) C8w] @n.QkӈG^;,@{!/+| @ ZQN7Iawwj36K}t @{"vskfQAG#/+| @ ݠ-\8w] @ݠB%/+| @ ݠ4j: @D8(=}Y+ @LQ+݆G!@ 'h7h7A _!@ p`h7h7Z6 p>@ =@A!J`O_V @ @A9hJ!u@  , pP{W@  AV C @`Onn`!ӗB @nnm@}t @{"vvC  @&vvsШnC @X@e @80Ft8w] @ݠB%/+| @ ݠ4j: @Dfvo<}^xWt?/_5K/]R%+2{VW=!sAr[*[Ɦ%?E.=}Y+ @Lfv0+_Jy7놈5>&Tlgm IJ*oU|/d;3@W7nh^Ouj]V2e sYh*N^{WU%)\^}t @{"v3[Q+MnݨڍBbyP<^=ea1U\2@7tjNnfM?ΆCJ>evO_V @ @_PMWMyJg(zSKgjASFM]KH6'#(tP>/q,ci%2c^*zlwkGtFh#c[jͩ~!LlFu`4{5e>Vڳ؊IӜP{!#gG3bB:`3-@$Y?Cf8sMGոn8w3}Vw *]He8R^J>8[Gmr0;I=a0_\k 7s>@ =@XHލ'Fї f8R*@l]B2Xʎ;ך`KaNJqʫw 8-RD8A͉UquZqErsjOީMFu׭8- dݜeȴf> ~hF|>zYRs9F'wmvuz@3!Ogkq?=]> d&:O.FpJ I6^ջDJf5!lFê՟\86_\սˏe @80^&S<}R+a:,3mƍ5޳r*R ˫ch8 k-W>NpGm3iNErұn}La (e{|x3U}f:Z`>UGBy7*U?IbG~pziT)YmYj|}WS@ALA=RMjb [_,GW3/|y>@ =@Y_piB<9`>Ԝ\# TgbŚ)&)̢f-sC4tfr$Bes LLi$T*'^Y*苰CIRhL*̠fш}38prXՙ[5n>|3wbgvsB/+| @ ݬxPBX.P$H[}ǜ.}Js4v9v3 z H_ s3]^ad)lg,X4<9s3@n*!q!`bK%&%vIBnVd"5z<8oaqQzyV@FA=R}God?  ^\ru@ lԖ^@/Tpg^)S5"ĥpꊃUG5@U1)zd*jccgU5#YR[Sw g H4TeD^#w ,uh}u r`A73-ONVvcnZr62bPu?=T @Ofp5cŝfvi`LA4gzL;Uf"9\^\:ca5>2ɛ^}t @{"v3OY7IkTJg9" ӗB @n">4zw)ey^3(08w] @\]!z M{W@  6JN}t @{"vvs mӗB @nnT pu @%ڍoxͰWt&m{֔",g\L"&ĵVR@ux-9S95%n) {qll1YO5Xk,+^0_ @&vDrQCwV8VLe;RIt{6j|'}:T+m*=gЙYmhu/&Ys,lrʂY"ǦLa^(sI^r){v@G!@ 'h7z%Hv3hgvH)O:RN,p%IrYw!Ŧ̖S6dxպ=\LıY$/OaJ=}Y+ @LfvEFuR߼E%,k6eJk<cH[nd\wvV٤xs+^dYθط,u^޾ F¶N1w[YY&Py^-ϒg8fpMEt\ LY3QL -ʸ#forXRojzMȚ=D[d^kwMHlzK㨷t`ΚGgbYoEq,YL3(ϖh.`F-r0ŭ U;~!&rdza6#nQFħY@48ֶ"^IbPtGɳS"e=+.5/ʧ^ NڑiLS/ @ @A \T's.,:ň<}V5j@qTS7TA.]KۯQuwY<3'NV^ķ=:FL㤥 }Cƣ9h995cj7-lXOkH* yv'SucU^&VI=R3GޥJIm\~:r3_>݂ @@Y_LEIh_d 2 ,a4[t͚qv-ǃnBU/ ڷR]mbcqܱ^+OY J3`\- q03B`t^ H&UàM3Gdpн*zLj7=ɾGjh.5GnPpSTy/4@ %vv,,qwhA& /3+j7Y%ߔ; .T7qGƵ*"ۯhRiwTrGcߩ^T{Itn–8@d\0^aIOkzT?[T,s)9nԺ {>ۍdyC3g\\8J:]3I%^KuT/p$yY\.fTR4~WfpI{jڣ<5݂ @8.M6AC\6!?p:F*mnz0B'7;ĥtm5ڍ|^8 /3AgF6k!tG/3ILV jFGܳ"pF`xlp݊1#T݋2ILT{d9%Iw?P~'ȴovq9 @vEfvcDZ>&>vU!>KL,8x^zqUT)jV}vXHŪnfTӜխ"U7QUQDF11TvW:zYq D3z>^4W;"Oӌi3jv|v9o+ @q nCH_3" p!y @D%ȹߴ($0vm @8.G 0q9 @vEffGq@Q g!@ p\h7h7@`&~s@  hշB @nh?ԗ^z閁oEݲӧNƪV|Ġ MAn%:q'¥Ibht[=N6۷Sܦ} C @`Wn(~,ucnt'Qۧ[c#zYUHy[Tzf7ܮw_S-tDcꬡ[;܃:5ggD;6]}[, @KڍB>WJٲ܍qg5Leh7i6XX-bv3TaG!@ +h7e4(EHxF_WRkaY%n-_t45™6MvRUe Օ&zxvݢL4nBo:֭dt[%K[jUP)iv[=L~qG}[AgDThAڬQ2~]6Gw=@f(.r]c4/eL3"}fWT0u Y@ Ȣ^tX: .EGe)l@' *MtJ`A[\D}K[HEjrbm6ڍȾm]I'N+Y6,퓌tJ]ͺl3{hv>x,vn웕㒵z68a2VHٸu٩]ՕuΊlFD5k'-8W= @n)wnB4ug*U c0Js^b9@%j"q/q[{-X*yIpxo5SG\QͥѪVԺ\% lˌ bV4"$moqZVb }Jʦq*]l|h^qETB[t{FdV-KmWV8 @ @Htɠj z^3X%`{#*J}6{* <RՍXSGlHUa"MlHl&NAK3j:P>ȋ颂UnIV{tJ$3a-w_} @"v3O3Ua9D8( L5gnZɩ)otEY֔/;Rܖ(O2VkLtGj9?eD$*kԢյbȸj&# 8f5Sb BK(c1x"Xeшv32OMYշ,aַ]}[, @Kfvh$CH QgZXq1o1ɓ11Gb(Ϧ0c#{Ly6ͪySvncAyBFZYF^`=zmZ n\>Md'⬦dT'5m%#ɊuR5Fc|Zm ]*Zdar<[>Qop|*C5Z 굏ׂۨ3W"pܯ>z@ ]@8v8 JtpRZ;n,|qލ׀ J}1܄va ;p:R=w@k]VkHOT6ulʮ=إI;YCc3QI[~Af ̰nCڣSUe|*6y/N`WV8 @ @ݬn9V"KZt.1K]@C @`WnyRd-^i"gGs@rY@ =C/,@XL_} @"vv8" oY@  ;O8W= @ݠ,p @%vv!G!@ +h7h7>*B&o+ @q ݠ;{@`1~s@  ⸏ g!@ p\h7h7>XL_} @"vv8" oY@  ;O8W= @ݠ,p @%vv!G!@ +h7h7>*B&o+ @q ݠ;{@`1~s@  ⸏ g!@ p\h7g~#8W= @jp @ @9؀]@ @vEfWÅ @ B @ +h7. @ @`n6t @ ]@p, @ @#vs @ ͮ g!@ @8 8݅ @ @`Wnv5\8 @ @l. @ @"vY@ @F`Nw!@ @] B @ p0h7p @ @jp @ @9؀]@ @vEfWÅ @ B @ +h7. @ @`n6t @ ]@p, @ @#vs @ ͮ g!@ @8 8݅ @ @`Wnv5\8 @ @l. @ @"vY@ @F`Nw!@ @] B @ p0h7p @ @jp @ @9؀]@ @vEfWÅ @ B @ +h7. @ @`n6t @ ]@p, @ @#vs @ ͮ g!@ @8 8݅ @ @`Wnv5\8 @ @l. @ @"vY@ @F`Nw!@ @] B @ p0h7p @ @jp @ @9؀]@ @vEfWÅ @ B @ +h7. @ @`n6t @ ]@p, @ @#vs @ ͮ g!@ @8 8݅ @ @`Wnv5\8 @ @l. @ @"vY@ @F`Nw!@ @] B @ p0h7p @ @jp @ @9؀]@ @vEfWÅ @ B @ +h7. @ @`n6t @ ]@p, @ @#vs @ ͮ g!@ @8 8݅ @ @`WnƆK%} [~9g>- mA @Jn~_W_*O@!\CpЬt}CoM&pis)J[ @"vsFy/:ty<h7LC @'vvCfv@1Ĕf@ _h7h7;o 8'fs`K76) @'vvstϼ`X~㹏=~7 bH\HAW|<Lo}[OT/W2{=;q,76=@ @AA9(Up@]8ߦv#+j7Ғ&5D?sO< @8[w)"|/ꌞ$uRo~W28t}Ӣ/rFg*'?axޞڍMI!*OXsF _u*٥3*zI\F) bܴ{J'qL/}t^Dz&Fm]_vԢ`Txj#z:AwN=wuIӄqvxl @KJCPϿu^_irKUdw9w?ՂZQ+lN,n 8x&[j¢cxnkg$x{yX%=WǞ#ڍ߲"#KkV!URHL2"5Asw@/{T7.;9\L?O< @8h7Nlq4>NJC\K6M@jY:Hݸn-;^cޯvᜬ%Wu<5ߔUBgc:pJW݈8u»#e,hZ3ݰф[4pZ ˮA=@ nnDI#Id8/P8LLɳHnb,q>+f j7^W՜,ڥ˵l3wsvc?8hPE Uf6 @H>ڍc?úI2qj>7ʩ'=+1ݜE[n,&JЬ;8 E*^ޟq֘%,qAMnl-JhE҄R'ͻV٧3S:FW:kvcbv2 Ƶ;v-rM|x7] @ Q`l1sELG}ލ6gdzzep֟)M2}X6u 8wcUѹ`Q,X1LUvK*i!v3 doY$3>_e4agwPILǬ>6lM}se5,oW$JvaZoWqVv%if-vne怿!2 @mݠZR@&p |vwڻO|m  @ ݠݠ@`nTiܾ9o @ ph7h7;#qvs`mmi @nk_GW/:O@n;?+?~ |#It @GGyB%pcF {ox@#p?p @/~ K7h75L!@'v!4|6>b.gVl ,x![tO?itY9pɝ'rŲSZR>\˵ …vCH ܆! @n(Z~3?y#όGnT|c-laYݑZGϯUٟhlcgz~驞H/V.g?xvhhpԲkӚvfg?5أi7om)\ϙjcz}ʟ9o{֒cz8H{vOYЌkkl0] lT&PyVI)~TiBe.,hbzuV4Y*Sٜ%M鄛JYww_~饗>}O:KTg[3kgyWzW%?ϟu/+򂊋xLS+_;(bgi/\g4O5,_l+BHfviiWeU*A;X=k# `+ Vt?]fe=rb|cY/jꪼl[v* &hwU(QOz9c%h7B?4Wݤ~hON6ʈ{,2%Ԝ4WPxz.Nh4F15y[LLjF-N^%ӿuwF?E |Rg6QTEsCYm_84ڍ ,cZZ1 5eCT_֬2(mV[h75L!@'vs^jp]>;S`ZU&Ck=U@uuF1m ꤞYvcFhqO,-PZbPC|{^vgG{GQ)2ɦ9s UҋeYvGx?7f@=rͤmHku}xJ\~vs_t }h7MtVve87eb#e,ݤ]2^ɽQ._퇧h7=nXS0쁇wTލ F7(9f0mVLphfvye\1M<5MC(?%Mֶt8nVfTyƁeAcM>[H0 76n!!SQ*ab$ԅKVO9b֘|>}rY}Nzez8)*)5DbX~<4/<(R7y%aj&"#c9pvdcU^Y=eϞ{] 0SwᬊudV9gK]ٌKxC@ Ln֬ ^&x^O1h'w% oʚ$,˻GV3EG߼vAq)a96ƎBYF}qRL}L592#C8m8fF2v#O<wPɈG(v/ﵛUӚTAAw0k<12N o3q Mwv~7ڍy\ʅYdT &lbU4t\^'?ƽI{Q,& (HvHE8xrp4T _uV@IhPU9ć)#;KYe>k܍({j6*:%ᮉf/e@@4AX'Y$֭:Dw/CvaA{7lh:Tm)/n׭]ubZpFXFOnﯗ>G%t7 \jzsSCDْ:lX&'$a_B!/:{:FW,.qJ%nN^@T" S) !0\4h75L!@'vЬuG㩿EwF|nX>^USwF0P&ܲ\oP5.#s+>Ly)1'e l+BHfv[8'V,݅uRsR/i Hg0ۺIB\b6 :NQܐ(F4^餒VVn]v@0aVqNHj۩9߀Wbj7͸4MǬŦ/]%`S5{ Դ28j<3#h7GX@9a @>MKQ>N*ERQr3zJ [y5:%![ʈ%p}tJ\˖UEej$"؎ڪeS%㒅tԝG2{9Mbj7/OZTVs=sߦS˫;x$CQH q4w_ڽ0n·|RInV  @ h7˵͆ɲqjLVDʼn*n}D&QLOɍ@˗ ~B @@Yݜ@6vj)6Xd^Xl]TY9|&bybh7c @ ̓t'v/ @V'vsF) ܑ @Bflx_/Nz/ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 @ @X͚4@ @%v.OA @ 5 ݬI[ @ @`]h7 y?? p<S>@ Xnk<  ~CЛ?z' p4R @X͚4<!v `nl@ "y  @`mh7k h7/oz,ܑ? @ <%@Bh7wwݴE?Ⲋ&An.: @ vs ؄Mf.\Z<Ţ.I}|= @A <-@h7[?O ?h7ga{x=3R=$x#ET请@B_WZT~zgmڕK.=ثx1;= ,̤ 0\bN?G>KT͟?' p4C\򋋺th7YQo~.n>-XmA@`n$'7xl|套^:[PONk /.Dk9+5ѽ&(]5RepCuߦ5:E<F: |K_w{_`g^ẘo?O)Ls{s9=/45/=Us_*}TLD~b(Oݺn2VjM+뫯UlJ2ki7 2<q*ϟ-6JE3SRCn! D:\%$y5ѫ8dجY1m Aozf-vÏP@6nnÙV XW2)ybBVŖT~Qoͪ5[9#%E9%Ş3jNKE#t&esT5) ]GOMe:۩zeMz+j7'dz[j78(AznBCQFРv384h7MLO!Vn5ױ%T!QhXNJ88SFqH>t(3:3St&ڍ]QBdoId=`FjDqiwSY&/OBq҂}n.3&*.4~|w'&yYsɳej馝sLf(Sr-;̜ tzIxl.Iv(åeHrG˨VpN)9b*$yVi%!gdgd/=®\#D4m%Euu&bwU/65YS\茍ȤDLjY ө04ڣ̩!kƠzrFSEDzU4fuA_Du㱋yK$.EC[5;H h9]Kn=pR8S 67e:aq[:IqJH*֒YB|26S|Oy a;引s_B$A]>E{k}79Ϩ?6_Vk9m3lsewvdb_Ie5$^JqBM]nl7H;X'ڄߊcêqԻNyMDJpu+ArZ:YӨ;hѤn"U$;2n44iR7q5NQ1z6t32y;G.vx }@5 0J%>S5oFPPwvMTi&r]jYw)H9i=sz3ɧk7LV4 IAr'y2OWN>SڗSUK,:gyCԮvUa95Q4lƨnl>T+i{K۔峳fFq앓MJ#UŁ>FoY)&*UlIɸvSףEaT7zMk|HUt =UkSnT`0oK"HSfSwMUE/knxލ7GTz KeZ;y9/\n7gi_Ҵ*WMg](z&[QdDS6hJ"$<@TJ,|8wnjGwӠplXXNRҚ\)fT+Ks%̷Ly/>ܵzeKʟ54j7p*d(6nT,rĮ yS`<8WײwrRMxkag e+_ّ+:л22$!ōzmzXCcwj)38d=ۉJGc +:!6τMdW bo'vjn; ns\ p S|3:~Vyĸ}ot2ՙw]Y*˜\nTr9c\O%`ХuϤvYF'm?naX=tsŻ̪NV)78 j-> (9Y;ϜPYbw*[G"?v~XLNHU`7rBGX"mL1Xwcqy5u}Am]|xUkMH&Q_w6 CtRvMe,~y, ~,TZ=kSsa;]hXSlj]IK~qQNf:+JBG!pJq09x);kʑPg$md&Ag*k4s|Ϭv7X =nN7$6ڡ[x,۪Û诬5N5Ag/k*}^6FHNNAӋ46nh.v@YR %vqx$vJ KTF yN5i eڍ#5=Y}/Ҵ4!$XZ& ]ÏXhFm= %vsC`K~qQNf:+JBG!P UL qBbr虽^|θ (*z@e|Sj7c%k}vf[R7J릏*SXyUYv-%]KMuݯ *,Jۨ9q87ҁ{jGD5|lNTݏZrQV!AF~鲨fth9 /;7k_X%r2Ӎ;S)2^ZАWő^`sUn~Bn=܏ᆱ_Ǝu`D:~vھuI&+\RcB˄n%ڍ[F.ZߴmmsFgiO뾏ɻ" VFt}Ku(ON S6IqتV5UD C ~QQ[He6(NPnk3]3#0%|wiTi7vUx p@`Cy__|߯ -|{ё5SڍUJ*IHFnHzVéu\qUMgTeG5&"KFq [√0k#\sv# ^t&*rJ JڍA-njnnʊڍ$\PH,cJEP^zJےr}핱[IΑ!Ƹl|cjDՁXn,ؠZC*TQ ^ਥ#ד"LYO4Ve$EMQ`y ze8NZ'e8F5FdPqeU[u=qGc~U>v6{˽v#;(*lQI]ecQT:(*M3ө(n D_Ԥ}lAL4R}f@`{n7&x?=.l]LtO?gW\[KnV .vxYŚ]F{,kbnK@պ!:H`EFh)~vzpvC z^:)&Ku@nbקE=UP+)F^TگMon*n,6Yhģ.n  2v3OZ,ǚrRjywOS̉.VK ̓ $݀- |o*mif\w*^=zsVtH2hV evzsjSg \6cR>GSR.nVnI'&nj拌(q$wFx]Ur:j-iqfH5]b`k>Zg#1w|\qLtv Nn<:/)w=LLnf7jf :GYgF #v`Jw p ;nFRʬ-Ң*-ݬ=s]n"wYZLg4o#Y^1uzCؖ hDAoVmk$*pY9ZzMeߓ,J M\ a֍`R UF:r$d~U7{#,ˍfe5gAd:Ԏ~/, H-Yʩ~hj*1ʻu,4݌8R}s)u&XaɤrڗAFnU[{cBxgWRZƃMo$y7I~v,fصv޾k$h2+i7;< j7~3e]ij-r , M4ɪhuM*hfSQ1@`n@a*@ D=8wֱD]|'/UGy+NjIUATƨn; ֵHpy O>cS}3{IJ$1$Θ6V2|FZa>i:-Jsln*|л[Qs|րu l?TClߑT@YJ86h7w(%m *Mg zĩJ45Sv{hԳYҳrRE-" Y@MՌl SBĜxPqa LdŞ̈vc){Uv h7q'vs#vs;ִ!p&A~]j48.Vv$F$hTaD u/sFKˍ"&ӠHIg1;wSsd T Lk7oŭ,nc6]C}%j;7_1UCMm_~mƔ@SZݦݔncK/5>N)iwӜ<~7õ!}KG qh7 ܃ JQ3V"+xK/V+RjV4|eJV@jKok.U,(R;tKNU #JIN\ܙwM(q2'_)P6( *OT_J s$1)]jwav%߸ftM,xag7񭷵J[R _\%mN6qYuR$K$zuUl3*cM(belVU{ʨl,~czcW mw*nKzEUZRfݏFe|q7]=wumh祡;uGnGtj7Κ0iU=љV^x'Kڍ/ <nnϳn)uWANCL톩&pdfzQ+꒥"n[|t.\Vwף:v Yc\9=Z;UQ -I҇r:}*K9S輍u-5/RzKgt@nvRǒ?tEC^㓵I/5Q()d/Mk7*ѤT#0jתW+h7ξMmvTӋ Ѡvs{ Tiٿ#,"v plh7ˢV'4Ϲz kHzUrj7.Mtcg$o6t_h!v`<=LR^v%ڍh,|8\ױ>*VO%k.:)Qy75OJ296v'ܐcuOHFD.umEIeԴkJeHQ;]=ݨ4=*iXQrMuu4hz4B`$ͱ{܎X . VnwsႣ(5%L>; +}4XEg8'#FT@տѣRETqϭCN j7wlĢ]>݄Xt:@5]8&LR-f.}KG qh7 ܃ fD`kڍsCG}J孔ʣxW;H [VBnU`9dnc}> I7.##[t 4bx~*% M]m2TK$o jX }`gϮSD8T]c(۱%< Ci7JRXQ~Xy>VWX|($gNi76GɈL;Fr WgT.JgԄMj7s ;U1Njϥ#3fg:ԛd$9\te!>xSnoMC[Ѐ lMM 0~WY%>xs7cBXh7@`n6>@-8v#MrxHP7vܨȗeOi7:ZTQ7bd"5%=4ڍօW.`w9T﬜tg^d)Sl,mXi *YKNI h757Y}Gb_n۽Ƈ{ѱ:KMIvY]Ucj7^ts٫ķFrJ7nz0gY>uYF(lh7[OxDh78 W&pFBtggRH kV!!;$IHFpid(uKYD塦S>2!A4r:Rc1k7;cN̩MU|vtVPu4urf-nVJ%pX8XFʿ:11 0As͚*X+)y1S5!- Vfi7IYKi:U%YS~NuY*|;wSJS+Vn*xQe+ pXh7GRXDf6*AHҤ~(Wu4^^3Il񢤑5SY\# lՌf*i2JB&ѣ_3$ jMjDd;z.?L)tXYit_ŝZFu;Fѯ@;2aq %])ĢG8_h78@9bz@kZ8v5Y[(JT=-XnNu%^V xz+[j)jX;$>S9bx,ҤS|q4FɵL֬Cpj2qґW`i+G֒tƒ zYǣ fYJ-#8A`l*^^0Y4^A꒥MhܙKZZd?g Fу|X~0NSn}[ZF᷼g{~f5=WM^ܽ:2qE36Cе =yh4CtL[enS nqTLl7X yI9Pww%"(żrS7%-ԺuaR$vSq>@l4He6κ:P/*vL?/Ap޸پK\Y#xֱ4Sz$ʢj7Td%=1.ish7WՉy@ ݜ |cƠBJ`EfzX9$^zI:SS~* Oc9޻%Պ94~ֈ LA izCYA,Zq:ڍzk7Žv?8 P ݌͇O~gyv4sgwW{hQ]m4" }Xi}b*Ւ5wkҺ-=72kᔕzS:2Wn^ꯗ*%Wh3:PV7;rv- =V.ܜ^ HbEӜZ`U*IHD-W{x8a=]q B^[;DģdDe(z1wvَeXCV|2xbDc1Nylj"0#–GVxcF,l48i&DgڍN!=t`')W}ᏐOIUh7~kQ K|λvf_ON( 7^_2Zk|,|)FKgh924S@M2*F z[f+i7M\ڤoVQfU;8$Pb&bB;by6:Rc7ptv%Έv##AgaQtߓңnjK j{7jxo.LvVǺAd0:y(XifMl48iǵC5C&]@NOFt$TdA9\C@AAY|VV7A3JR߼[UK=lN*;.#>_M׭M=i\KēM{ ݴ"} gg NWe`QLNzJ =s@ ΓSJ/Rz[I6SѦwqSk ˹y6^mPI\%:UI(^|:5D Ak7:N*0Qxp;K*ʸ^7QtVg$4x4{7^^mPPnL(QSE48iǵjk>l|ׁkH6,By~t vvPp~;x'.>Ɲl*EOM{T8=u %62U@9:߼wOr;|s([Y lJ.Em]%٘rs[کL >OމU^ufpXO/@I6 nԱSݱft`i$A'uF=M=7-TXTLwTbYzd=.-{ʑA&5vɬ%I?kan5 D/ϮjjsRSuPRNᶲaMgD=AK܋jKLՁOj7x9d0C鬓yVYSŵQeo#=I;8)YV9&?V&=F$XsCUh7Ï.@`nn(FNOڦh7웢X4ьlSƖiW[tۖ3N mʱtƖk=xݪ_2&*HYKKYh =keKT3BE`yW1jWɠNlu^3{:vw/L s#l?l`0 fl`.€7.C` B f(2lNB A6| [W;W2@v0|yZUUUߦk=YZ]}Z ʼn'y[aHuP.TD۾ӭ kp0Kc^E(w?Q)XM5YCѦ ԅfuFf0O;4ء֚eHFb73(:ACJe0W DEѕEcWilʚ\B1*#rOS e,Ob`xXuJ,Lka7'.DC(vWOf0k2.:?wa7a7\lcDzKh5J*!ωe\TzfAv3^njT xTv"7 ) H%-51sYnճn<~  n "oiSoPΚnΫŬרyC؊ݐƒZL x\p%k+zY=SaNG!]ڮO7=ܨ aW-I1!>jNGj7p _#~&uLՋRJ&}MbX6AZ_5ůWrxp ~ Q <5qHU W`y"Qn|?kT ~a7]nHpXst,/l0pzvS?즂Zg0i0驪e?`*5ӋƸUUoCvӫw%iCnh]=Y+83@L*)jMSn@sުc攧 +/Q \@ ~ Q 6)٩Zm `tPW=5P FKݔճhAdШ,`T/=qD(ۯF\ ^ 댻3,6j"-6^]y=q&@av3F(NQ g7-%=釄lo+yq]zn3S+ D ݄ln S[PG(Njvㄗ͹.b"KݥALgjˋWE㑶zM3q~N9P&wt! U92Q L(аP s;y4fzKAN2DE:LRuL!LUMaJS{*D_֑0өb=AɻaSm+YfJߵZU7yPFRpkQu`nxjIU[tnƄ׈ZUOM/H2UT/uJetRet(Kp 5ʼdjb4j0 8xo.\ul%eabKM@a7a7;'찹ܼJQ`W 4BxI@HxIl &J|`*L!:9nB+2^+:Uf(A|Ss'DYJ/sppQ+55q4q&B^.(L1Mia1_:J(&t@a*Cߝzέa7>1`z546Ԗ,OYÙ:o]WLUM6 D( s B'7Q Qm?:Io ͸ y u烁:)p;lJe7SWvkU;h4cAqش= cp5Q {qP9viyYqS/vx0#O*Q}C32g r8a7SW__J[N)_} j wo;&@UivC@ S%My#Za7uOdOHV[Cff | v rG%jF yu\aHQs{>5n.67&P*CuMO ;~PUr渭fT @a7ɻ8d5y7?я>[_s XJ:R+ D+p0yIװf8!,kXrcQ}c1jEv\Ct`7d{L+ ;bZfױ* fd7sn+p~:vOfzμ2}Cuٝߥӵ(ptnnn6V`5ַKK~a7G(MAvCJh뀕Y5V ;ULʐgLhY,ckzD P` <'ks=k4dI׈92ryUlT\Fl2%lj6h+:4d1)N>?`s눞p~ 89ڬ1ԓ)[ꁷxnCZPtGcϗ]VFT^ .&5(HnnFG)v;vTo*+,j1'Xn-%| a7'(: i/uŷ :H&Qt^ѻ<itlZP;&(EAxߊyvZQ ,U f.ܗ?wf!я}tQCJ*:V f7E͙ Yz#K(35(@oq <a7sMTHlSxKaz3:^rU+TT/| zRWzvCJTm~5i: =ߊY <3݌Q ToL)awnnCwk*&Q GF7" 0QXDDFURO|Gyt"¢KUyPҳS0: qލˈ,gpZ.+vsWZQ J>ffQ`Cnvu+3Q \f72#'Yt B 1?F@(4и$F.ΙR9i'4Fzz7'1vs;f@S f`8BQ 2FTߓ Ag7A-+p%o}s XJ_[jE(pbnl(a7'kQ`W e7&C/\ )&:2[<5cϖ)/H4F'"vb:uQE ^nvus&)NF(pOn6 c* H{iVxfn沛I00 $e":/#\/m0卙ŚuAbI.f{C[U o{O@nذ>؄[ ܌ _ʬrRue%z7\ʕ1ܙJ3o*eu|Nɔ9a7O{OǣYn~&J7ۂmmu;\Q` 4FFL0믿rE+@TԱ7MmQdDXJV3X[km*Lenq!n8>DgP f av7*uSzv 1 D((а瞈\nD|l-͙2h}&:8jk1a7:Q> ݬd7^Leq=VY +D(vz71wy0G9u&#L]؍0tD׼|R&:#61*CELX˦QUg>TX ެT]0$QHe?X1*RR2h2UCnhM]X ;z }D3M/Ř?5RR[-&qMaV/AQ fW8N@zvs?f@͉ZQ`LE솘\ `%:(Y/FЁ9V*ovz\Qlb P@Q& /nDTd xۘlw1g0 AMCTXVW79jzLNGj@fը:^GŠ01y5r'aq;S?BQ ~I3Tu[Yҙյ2G/vsWZQ JE6al`qD9F?6E :mdl a7:әZWBuhxik>x [f((}en$Qbڟȑ1ykĥ: Ux8a7Ǚ(pbnnlB+o1fY^7%~Ϭ5@a7'ckQ DMnvSJրiՆF/>W"3J+4V2w'3ŘEERl9˴?0Ӫr(,ϔc4G*v(@\v~ h5jk6oob0>7@ؕ(5۝t^'ENB ^lW"ӯ0ެSgQ OB@JWWO!EhڟȎ'YAyZx$$tf]݊L8a7sٍ&i&b{|_Ё$zꘜUa`G$LM /ma JoQɻq 4@Q b,=yYݶWRY5h#( #Oi㉉XA2ݜE(ݰl>cP7I25VdbQoVt[QYW/^`S64Zm- 1Xca75MgANS lH5iB:D%ryUxLz v3(SvUfe/T+ &sU{2ͷ|/D(pn.U |˟ I'Ի4f* `'Ψ T18 |nht:)"\o/Em˪X}lQ+tM8>Nr>ھN{$1݅M`o$>7@ؕy7$ѐA@3$t@ ƽCvX׭7-6]ęf\T'b,\ &r/ {SZEYQmab&y9=:f7&m^,Yocو~v[q'V 2_d/98K`h.C#$Qhn4XO jJ)*'ʐS6ٱc45fvf7JkO^o1wt- D(4f?f<Q {! D(vs9SNBgasm(/CKM~agPFnf1.bj5+w~A]Xnvs55R7 D(p2ֻEQ Gӝ([n#Q ֯!D@ Aa7zKp3n(<,d7s48g9;8#Frg]q,'i p@LiL90{ݸGj]no8v @a7Ia7ߦ( e7TfH m8Sz9#Jb}6.oxZzWeV%(kNmŃ qӸ o[o6^kI* i]e͙{O ݬg77" ε5l3֢bL4sIakF7Cп7>7@8a7Ia7E(pnvnX&E41]Q ,U rڊQ f2@X@4!@ͺQjE(؍7~W^mJjGm`)ooLߴ66Kxt*R з8@M_,L W@[)p#v#a":V^|;-ZWvDm`|5L4*2nz1ub>ya7+O}5\홚bZ=}^lZօl4Siz '{_EnnrۍQ <7b7 ojoa7"5"@J*/ vp;v#?M Upc@(nV{!Ym" Z8t9k/ՠ'᭿쐥m+Vwڪ{v{YQ >90$o-%.1NFINRȥ X@=B8l8zk:aYM@a7 MIQ CDC1g,WC%8/cI=nHpFMМȦ ,;of75Cg,[GUe4`oK匌(=-IQRg9T>ensu+_җ>Gϧ׾uE ek&#[%=1XѻAlS^gǖ>a $ Z _0.KMTQ%ͪ@Qѳj-:iaXDE:h.kAyi/Xc.{>}}O(rUD:0E'kΎ9Z3ΩCjC^ݬgVKncػZdA f1@p#b8n4]p4kQNzTmԊHfYng.jRu5ƪgT4vU+a7KoC;,g><@x6^xt7vT`E-3j<܄ı+& Gj*2K Q+*򨠡qr,^n@ct R ƫ$&HvS=qsV-OKʻnn ٍC3!tfѰuԊQ`a7ٍ xFl5MMwӤ\TX!1Zj؍JbBq\*97M4N#V`vnކvX^?%MD(7n<9LWIy7}C6g9c{0B'$+a8# q+)@t-5sݨviڵ5+D[=Ee@. /F٣b0:׳ 'Hƒάl1!l+v@V f.ѯƺ׻inX_F'Y9D-,O#4|+=Yg@*LٍޒVȬxTnpII8L";ͨ*L3g]iKQ`zy7H>ՠwݜvbJ8g7Be9â34"ŦfPRbdTqN*[Y [8ٙ`s"p`/rpƭJjndw6#XQ3 _|p/3gtr Zf Auu;v]*o)5Uܵzqx"$}Wh3P&?҅(pn,"MB AYN):gTL#^Ĩݘ0U3շQd=S׳B,\)6g~gQC 9ǭI?{[?K}HC;cB*=sb9t! B!ng.F3ӷnfVqk/5X{ 8Ǯa7g7-ȇFY,RRJ7c]c2[*Uڡ a7'.DC(vSvo$l #hM \E_}pmk0f'o}[=IͶuȹ_mt'6YtKVdMskb ѕ72P驕iZe7{ 2:Ska7;Rسa7nb)Y3@͢{Ѝ k)__Xm<% ":`=uvcUtD婫0aty:!U:e.cD1WXG=KUi~9ʁ=- P?R1 DE ݄ݴ+"?o[t6f=?~c MHDuLRWΐe#ŨʓGӰXw6dZI7XF/(R_v5ק[~n!)v8.E=+vsr@@͵fb~w9'bg%#aguCP,l<' xrܽEa ёhz6X:Ⱦʣ[Dᰛ=n`>D_e8Xc #nV>CC|t3{|םWDکҽ&Uʯ6ޔn6Go:,ˇ9 i%XY&$&P{pnv/nD+v3_ o 'fELK=elN Dvl;QCu9O6OTTCcKz=0ۨ>\| YXUnvr P}^T1nJxv_(I].HL ÍYZY a1z:pO7ivxRx؍xIǕC1@zQEr7핶C6~@-3[- iuѥZRA&"8;ra7;7YnĊ f?kx^-p3 =Qǽ ؈iY`I[8@8zɞ +jUSM' iem+ qژb\Qڮb7nvX lf*n;kmvc^o`n^eV6qٚmp[+ęgz){c7 }&sp% +8 5ۤ$[/5ysnٍ|?Y9 /9n݋&dk[OCFoކTbBA51H"{ȸ8Cdj#?jU!֩"vS"y7-0H̨W̹?c]{}a7;9l5bbJ.+>\2|>'έFJk`tqȭDLuֈ/Q25YTRu]֜ Rjb:CGo/*) ;e1 ԜI:= v)='mVծ=%TU^e`VSmߢug/:TUR!`253軕 |!kG)Q \f7KB1%!'Y-c*WORN+dVR3ES!eB uj?C"ۚnPLN|/~q'#!(U}؍t;TFʥii)?S&U0 EzN8^8D5b07j,B`_g cԘCw|1W_TY#Oo:f7GqBs4uA[N(@}mQ7_t7QU'r.we$&M 7t0ŋxa7nbYn tXaf7ՈXw11gсڢ4Kԕ?]|,$jh]{05Tuѱ{Ytgᰛ{~dVؕg7D&5V^87}CdL-֙f7}s6HNN )LHE݋hbd=jQ{Գj-j ѻRІiuDZ%cTݷg]YN"N2*A׶tvr* Oeɒ1",4iv64fMT xsviQ %fEpUHV=}*ŧ{:xa7;!) 1aa7'W^nƦ PXgmh|TRleu+i}Nwg7-522ip ދQ+X)Ə~FVhTTjϜ*)P ?҅(pnn$z&*jVc wZIUK C-aC .W3Tj-bw;>U!}׻ վ/֠ؾruj?UQ,go}xZn JNN86_o`wQuRŭLZD.7웨/E>M(v@ ~ Q ,`7Ws~ϏU+<&ߋQ"ݬaǺEVY<w=:-_#ٹ9Ľo>ٜ3SH{fޗuMԝuf0h8-2ۻv8D+vs~B8a7sMuyԏ`!VڈPO?-=,Fᢚ+ʬZKL$5j1c?5l'QM&GZ@]j9x&7,]Gڪȝ:DЄYwnqn{ l WFK>kdd3CV}3k#ZtK/cPˬgJǤƸVӯ곬QR%tY@uezAmP:Is>PrGE+qU"tʹ2cs7 zWcQa7aؕa7'.DC(v#X{ڱ#HzN*d.,;B T@V.&p@gx oe2 c`a*nZ*3,Qu4*Lw|FU0B ё8) س/s0ִk\w8\G3㍰CpRS~#aun z93 ڛ l'Bt@1vFI[_>&0ARg){vd paqj:Ҵk0q[H 0ג9b `gH 纞v[R_9sz  [ x{1 zJ|?y[{ba7Lؿa7Wn//ZjwlcP*6@j+ VkTcVK@E^8#L3;i(ƢL< -j8kWhEu҂W>vHxǟ'>)N?ϻGE:«?z!0V:z׏69RNqŽȷi| +1T*=&n5!#F.d xGobWyN)Kot7ͪA_ctg7d7\͌ܛڿY+nnvCZX[;Yzj;\;ϑE[\^5rHdٯ{Ϭb98@evÏ'{α'rЏitz( Wx_Npw@m[؍s@kf1+skT`NE&߳}RrL=oQL e7͏W>pW;Cd4&Oae|]©XE^T|1:vz?+H,Cr6xE$zMMT9,_sԸo uʘ=KI͗%M:~~g5͙WkY2hL"ΰrqUg~gثb{w[p2XRj:@M]E4͙{,57ׄ[_Θ 1L!m9L^4G|_yhE;v:I׭,Eҫ? GqW ')(C9R3(/JuMȳ7mQLtUd+dJ7OL!SO>R]U᭱pcuMn;D%n Y' "I(U=i[գwK!Vt^>Sb댹Z({\/s橿L(Mx*ձ! Z{Jvs8}{V f%!Qɸyޭe eU+SR}b oiK9ߦDUKMlovV4ҋ0Xw ҴEwXtWe'+, ?|k_Ӓ7zuݨ_o}o-+\۵eV\rЍT(vun}؍ZŽ }P `BP]EglA 8LRTȢ$\PWȠrzWʎaCd@:cVPEC[2ak}uZ[LcŘU[5@eG5PF.:Rg]pALAZףsj͞׋뮿S~Z*r@:f(*(ba7{ [;W f=YxQL!61΁ky"Sŕ8 +jU$2akotꍒn^{Lk,&<^|:bڦ|E[趲9a4@Zըz;71*;w݇@+8N035IA = Śj\( Wpb \7ѻzgzjRrclN9tነ #FN@g5H.*uz zy8QaOqfZ#U@3xzy8ga<R ƛj{I&E(sV|E>HeQ^dE+a7; OI-vuE#'@8a7Aq4aBzi_)9$h8&\ J8Q|vs:vÜ2\؍IJSIRjy3Ev2UAvc;nga[mg75 Ǻ|tXv~q/ F{9QqNjM~~n.gU!SQcPB8n)ӹ݈xXge6Tu|vsjv2zrV#у &pfFML4.FAvJss nX&n^ޓQvs~q2 @ ?gxԧ?u󵿷`7 'j,ּ?'244'^S#hT9RVwu}vwv\ux K;  @zMG NNSlX#ŚUl V0YfN Y&цi0ezoa ǐL\$*%D6'o4^XW?Y.TUETpL^)NUb ^_p}}FRZHLvbHL4&sy5.n8(n.*ݗv o݂݌mN˚Zj=Z +[}Rc>ONRBqB&HRtpqfHyֺ3ע^+쭬&vD;;Fwdi]wUk[vC^g zxmZ.CxO] 45m8gIc19N@64ghH6ˋuf 3x%;NR@k/={eJ~~b6ܻg*D2Mxt/otSWW/sP^S[+@DMd(N@e7l Ruĭ[ ƽp =un@9uަ9{5!Al$W@o@g{5~bݮN'z]گnlHYqQePR[l\ث%_KTlRרQebiW=f꾇 ˾L0ٖݜ .M,WvsLرa7;8q- D)а# Hؐ^j(-Bi#$ `g%65#詺1ǥ]T9j ʦwk?L3Uz{z|o@dPLiVv_,` WiT3DCtW#D ӷEp5cHbyu6pոe8Zljlp-}] YM`oV7m7g*vki6 <a7Ow(.*aoTX 9i;%XZ UobP~0N܄YcqY߼o!y􌞕,/N(1p PkXU!:WM\a7j a2we7iʨcXbCKaxGufD"eUW=ZjkAXz [lp'u]΄̌WS, D*@DMd(Nt ~*pUhq#p1 Qtڇdf{vSss%e#x4"pP*pj ta78f&R!LvS%U9$5k XV'_w Y~D5즢VW؍5dH4]fUF`mw)+[Q ,R T?ә(cnv|qZR`&q&blVu 1p{k^1vS+0fU$%g:f݈Ssd\,*L=njH]1D2H: MbVujM?vSɑ8W#gc@֘ef 𽡙,ZS8 DXKQpGX%pTP`zOwbq}2+4Q:EuWboz[MʩL vuyt]zvw1qo5sXGʦ}tMM#,/;nӳ:$tuXé4JaIX8IFcgK E.E,ra7 ţ@X@͹~7Q` \6GQ@ ٟ~?l{ݸɳ KV}uF0\PWuzv3(oՊ\·{>rv :IcsGt,-t-;cV[BQe"sKo,ڂ,#$#cn6(\v(989JN%kX32ǰΰƓ2L;v()v3UD(a7a7Rxa7ܜjb%4givL4OQܭh<ƺQod^5qOa7R( D@C(D ݄w{n~ayTXs9LPK_s#i֗1ئZ;\vvR1f/XV 8a7a7:}PnrFf'i܈Q`B}s(pTn/G(vvso=vs;`Mb(nߢ9@MRQd7S2*Eb9a[57r|Vyf/<%mڭ9wp:@(pnnxOv3U~ -%K4W_ wS ٬xafS*[2/0;]ez4.˳{6v_eLQ( ,c7Z;݃ov%o?X}OwQ7MS+_JӋ8wyG~NW^>8hϣ>hWQ5xF'GKm6獽K5!Fu3ꌬn.H=MgپQ')KGutJOܴ;5l9"4V- SUpPpޣ}τ")vK9@9@2vH믿.:Iᛗ/_^ +dJWT_Ŏ!{_Ո3pf5Xscnnt 9p&Q0O@/9:P&LJPj UÓcFoɂ#< ea._N䌊93B ՛N3t}g^`Ll:ssbVR %G 1 R߸kT1=iQWZ A$S fW^G'W 8a7؍T~0A YevvcǦ =LS#dn^j [z+V+0Gw(V8 sF '2n \ 5QC >Uv5gݾS k4w֐ȋ46X_d MG^1Ņ(yZիj~EYQ9@2v/n8)tOAtLH4G'UQ)<6.rގR=pӨ|C:Snd~9oŎ:g<,'Zsɔ+TĈ !*QVI'ʨbuL1Fݶvs;ຼܮ,3X\ vu^(SyPE3 `th{UE&Vr;Ĝ_ vC,EӑʭlB|U7԰iD[n*($ W_GQ fKv8`Fp N2Eak9e̎(g2 (3nQn:1SY=Uv÷88),p oU@Hmk0)6~$-o #(w+ٍV2XMTqI5j%{c&a7 YwSqZ4eH,rJXg)|4`2Δ1Jkn&؍:R cBa~[ͱ-շrvvnCNQ D(@Q ܕ|cw޹%`Y_źB˕7wɽ5 D(@Q D(R ~F`E<$–evv >/_Jv*v@Q D(@Q f1&y=@F=Kz2Gt jB*KY @{M:01e؍VS |輻V+.UI* ;*, W8\jYi;O4s[@Q D(@Q`+n&@BTBpFD/.DB"ѻ q=t2`w@@R[ݨ]A +`>^X3׉^5u]б[Keߝm8HWy= lu(@Q D(@Yn@F;|v+CBݘԺ.Ir3dkz* |CMAvCKyT9=q̢nroQ D(@Q DYn:bݰ 1ixڑnPۭo1JԞ~ݙ$A:^ZAՈ|im{;Q D(@Q D(vݰ @^v{lu(@Q D(@YnHzCBhr&( eڸ 4Ժ*P Z7n@Kb킪tيXGm PC^۾⢼[ɽ5 D(@Q D(R f u&4xי%f;TD(@Q D(@Mm)leNcu&w`=&(@Q D(@Jӹv*v@Q D(@Q &td ɽ5 D(@Q D(R &ft.lu(@Q D(@ 98AnroQ D(@Q D/.Zw ".,V f;TD(@Q D(@~w/_.nroQ D(@Q D 8 a7[ݡb' D(@Q D(n}{oo~+_Qj {om Q|*j&댎U^Ws~T #ɻ9. ɽ5 D(@Q D(R f1<&ˆ/ڈ 3xQTQF8vs\ja7[ݡb' D(@Q D(n_* \?6: $sGvd>[@Q D(@Q`+nA͖Ҥ'".)Qӄ zv*v@Q D(@Q f1Qpj H4gH*9ɻ9qwnroQ D(@Q DYn\q#d&@xn`:-1Uĩɻ,sTLDzltVq~lu(@Q D(@Yn^J\k 2ubDsFU0:C9$1GoQRMϙ0)v{kQ D(@Q l@2v䗺ذ)C:ua7[ݡb' D(@Q D(nhƓiPW~>nroQ D(@Q DYnGң[(v*v@Q D(@Q &m@Q D(@[)vv;Q D(@Q D(vvs v6nroQ D(@Q D yvrluz}k# @?4@Q D(p8nnn.fn|O?6W?"G(@Q D{*vv]myFxocQ D(@8a7a7`n37Ͱ́Ec?ƭحQ D(@Mͳs[?m[ g?)_?ߨ kQ D(@xnnn.fa77" όl,i? D(@W &9-vs{ٶ-|˟o|>[^+Rgt/֔5 I8cѱ,mœ_|_puWu^꩒̫R7I7v5֢@Q D( ݄܂]<Ͱ=OnlV2b.*W^P]g-: ) @[2R]?gEa7G?(@Q _g,e۶xv#8%EDpI ih[/^|#k$8+FP/e6eG06nZQ D(A[gvs؍1̐)r=5 .5=[uivsNvsCQ D( yvr^ma7#,=C"ώ ϫr@>N,jySTIEmTTkfXLpLXGKԵi+FxH5lDe9 jonNQ D(@8a7|q> D(+v(pv޶inn(@Q ZS_t. DU ^ظ&;k>OuA93 W_|/V3X?ޢ؞I-eݪI/<'}->e<[a7(@Q G\$ D}s/| -lHMfP(&GջzW/Es`7jmIU$EφN߰>@Q DQ yuz\*4D[Vv#A( HO\[&2<'!'f0@Q D(a7 Q DV؍2nDCh@3Qʌ'4f79F5@PmϜyuAgc!\ ' D(@Q`a7KK(ίFtFDC," FB9e%TZw3hj&q+KM"W(f0(w0 D(@[+v3$0wi]͠9̙'uz^BT/w9S!;a7ǿCQ D(@a7V}+w0 D(@[+v`7u&˟ am@/SSj1g++FycAM5?8'a7ǿCQ D(@a7VJ['u<#ned#WnQ D(@؛a7{"' D+Pٍ =ٍ"8c禁\G(T ݜ;5=Q DZQ  +6Kln,фYs؍LwSyLjtR%5%j>qؤ=UE(JnV jQ [0Kkzvӯ.L݉홄fD17da>T3YƽP15n׻f'~K+Q <a7M@Q`a7J(E4d%u)OC[;&2VyX=InȲr`S!g u]TԯU%o3Nyo3 D(f(v3CQh؍8؍EDǚvwK2\0*`V QPY9:LžepʌT?Q u'ڥ(N@}Q D(0@MGQ`@}N&kQ D])v(@V ft0|/yF ] *3Q <a7G&Q D(a7b_3 ,R?Om)(pSvTXmj0K@8a7KQ D(OnͿ_ϿgX}yuSvs(+Q l@͢Q Ds+vvs[8?9=9M3f,֢@K9iz@(vvsCv_08fa7ܛn$fiQ DmyWaQ D(vs~v#h"C _·zF1d/1.KUoXzuX'?ɏ^,Fg4ԢUs"Pa7]ٍQ6>YwWcmL>ykòHPZ=\`Mn9tg|,a7|nQ Lo k|cI-Q:߾΀fURueS^dYQ:- tTց*j+a7K^n{7|^j| ' mAʾbi*@_ϢNݹ;3yR4^u]+~XYW%Oh]]s>,<̡.+JeG=\)K9OӋ(@D -:ebRC1vp`kA`=i='/!>:@=n67=FqXNюz]0ye%W/cs~pisz=%ӵSz:cN&XT~u|nn|OkHͧ`}f)8Z׳ّ>s,a7*Q D(nNnD=d $}DR3\O VnhW'k3ngZU5dT]I7&P7a7] "yB5uA=d? 2됲o?x}Aj|/^Fz5jz=$R^7{ݻ )-4>z:xbRϱ u< VjgY{4g5#e7\KJF~YF"Q3܋V#$F(\hnHϾ]m 'u@Q *vs*vC!o%k3n }\f0ɨEi;qcv|(' P@u\nnhVǢ6xvs9 `JE%UF-G( (PC5$(FIX%EbbOpόV:$:CS 隽3wSSXo=žuR@/eP|)K6?lyLaVI[=܍:31iu4% CK顢Jr-|AS~:MT#u먞FR}FE3[sWDv<w̠6c7na7\hu킫iQi<3s|Q D(nnTXbN@I3Cy7z2=M0IOxOz-iH#W ܄v'۲:~ becSEuy+M-kBn8 R5'R- rAc*ͩZD04gzΈp LmQKB^:%B5W0ZV_d"UC_x3- i_vFEˋz״^Re4`IY=$u=Ѽ9RyВId]PE>=ҭܠ,2g/TQ D3)vs6v'(ӑ*MB xeD[`-@52K[>q)=;JmY6ɻ9-iq#4t]%( G>-?íYpSX[K7}ݸ 5 xQލ"T;c*]փHҳA?'CnKsU/fT!IZI_ ~T4ވ>8Ir~"t1DAvSFCEf0$Z/qn}^D(& ݜݜa7ܛnd0Bw JYƩ%5ht=0r6:6Q.>ۙ+M)KMu!^nlnMB 4I.Mombo&Ijn@Q| ݄o#ss(nO sBh&b*"XEb,tڧ9L/y'㨢 DZTwjTg9m^NzSdԆ Gw3k\ݠVэ(Naѧql z?'CnhNkDM/;˄;ELvMUQQ-@%>ϻp/]d7L?Nc5IO`Ȥ9ӠX#ݜ0Q D(vvva7]FQ*bYQ0~UIabT.ERAbZ>8ȲWK%SL%M؆?Z #87qW#OW5'z׾i\bժ ˚ZWhn{KK6[n)0nKhuqs-FE(i?ux &4dxKi d5b@'S &fcr;vsfir5e`jͷRb]9g@9OӋ(@D-mauW&I=u `'/0[$U?ݵʰAxצk1{qtKvopbV4vɽFnuK) K᪖S洒2V З·<0D(~9*ѪN[c XBt^hSl[:ܗ?z:6Ol7o2zrmNiAV U On.l^a ~m,\\nf2jz`AcrwR{o|VkR7 D(N@Q 78@Q16=\+p43qnhqffI=M' Ĭh(wɰmcXQ ,U ߧEQ l@QM3a!yf!Nd7.Le!uFDɓv\5GލV U p#a7KQ l@ÿ @Q G1v~ek.:gb ne /; 1a~(̺nsƓmcXQ ,U oԍQ D)vsTvV!Ι"SFȆ:Ij)eVϙ2Z'Q 9]>Fj`=qgPa7>M/@Q`nnš :zLz2aM솉K<5 dqvy7 `7?0Z p#w`77|wQ@]ʇ .!FիWP*ܑ9~Cb( \ZWWG}9uhg|EcWPWOlvkv8@Q wo|KZ3U_z(]VvLSDm@nNNi_GUS+f?7k<5QN)lnRMLEI"C=iE&nv+Zw_iAhOљJȸO<Ҫ{' ^ a7|nQ LHC "J93MO@&j h$+}xEnTFv eܐр!f7r9muu&KȾ./)\/?/Mzg(П: }yq0P9R ޥXǀ"7#}j+xش\ ]q>&_yEQ _óQe=t\ڛ'f796L.#DN0&0 k3Stes7!Y,'ȸi&P$x5mu\婮cKU[S;+M"#: /UeՅh嘧qجr]CN"qFdU:F]Ue7g:wPo\rߌ~h0ڄ.CCƆb*װMy0JOV3p9ޡ!T~63\F\DƹM/@Q`nn6f7+7u2f{Ía7 h)#tgQEvC自33qjDʃD;nݰ4LGX#  긧]&/FMC+T𵖏{j&f7> ]3n:JG, >ٌ ŋXR`7Uƞc5r4'[ yWaQ D(v3z-G/&(H7~__χ&JUL&MoHLE*lh5]Tށ=X:=C%i;^ >x u$Tԥc >TϩN1Ѩ[KiFe =z4[2AcS'k4ΈQ\83C"|"<]9A˰8bd05k|k9iz@(vh9W_|W*+>-bVJI/| Z߷PI["knHLqt-9꿎yi6'8g*ZZ:8R0(N6 p#3&,I(l H ~b|,M <0D(~Ynֻkm~ 27h^Ƕ+=Q:S9 PCjȎA)H%ŀTE-Bdl>S@=ЧFW\c)vs/t! D(R f@(ءM} RhN:vcPٍ+0*Py  d j\}-URiet7x2` 1uɻX;a7NJд#f5S7\݄lV\; y`ZQ D])v݀!4"SP@. 8P &"P4EސSj!2 81 K-Fnv3ss@a7sR& D(D)v;w9xZE3b:_ϙ N6Qp"uATi `K\}"ec4='1Q6gΔ}`Ni[N9a7 #@U ߧEQ l@⼛ó5U`>:",0Gi:gϻ]Xލ` +TKTI&a7zQ zi+ D(v@bvӯG PIXlp Y$eMU[asfwl ť&SSL IIx^b^@M(cɷsQ D+v3ԥal:D$ϫKJ7.Mj}Wɂ|Q",cݐT,=U<=t@* K2c(5= ƤvC1A*Ч39Sm@nooka-WVEWXZ?Uv"ZjNeP/ՖV[TW.ϏzgU f/Q D+v34kl̤2: >5tL@xa7Z3Q D(XnְAQVcoj[>njZ v3 5rј>?0KQ Ub' D(N@ ӣbJ}}Oӷn%wFua0Uj5T&\LQaquI%~qM糆WT ߧEQ l@ͭ9E lrozAv#h"bl'(B]=4"qCJkdA'^n.MG(pVnU@Q`? ݄4<7T f?7k<3UafVf&b~TЏUS7y3)@X@5b@'S f%af[nLeG*͛t\mvb_6;U|ɺf`mW:prc-nN2'+jpAUᥟl^s\]&wɋkϜ3ŞPƕ4LpCjֱ4oZx,@s9iz@(v3=EXgv[({~{'o>I 1 dwUR dﺹVPEcr!qIn̅=hT0w=[PL@={Ww*Y%gVeda7ܛndv#ipF/u> R& D(HƁ(@؏a7M&5":ΓS[?bd|HRɂn Q0`\n*l%9 x_x2BZ}Ʒ4Z6/v54FF{r0lE**hxr^fT fܐKzW)!^n>/ R8 D(0SkR7 D(N@bvCH3?_FGN rg()BVLv38!X 5w%ڰ 8װɻ̴s%FE(& ݜ4Q DMb7~}_xHK4Y$' * ,Ӧx90Wv/O' S9S.If` S,U35TPWl=d~qΔWlrozMBQ V _q D(@͚GeeXjɻ$ ͙tª(RgQɦ JLvx,O ;ds5!J=LΌZ[3}0`+a7]؍&=ks4=1Uw1_8bQ \-Q D(p2n&1o2XtAp Y'cEKMp"vj[Xnλ^Ȣd6ժtFEnNv9Dwn(9eQ D(v34J _ %ӈX &t^ԃnB-΅ު& '93lTf4<Ӹ:fMĜ)b53&:5n`T3gD)9ɻ֭?Q [[~Q H5F82eD.Tϫb%ME'ٸʋq~1rZ70DMI|ƽ"zm\g%i(%S79ڻޮdI|Zz'Msz=fL tzkb9f!H9? Cvĭ#0Vk_o!6u䕦 :Rÿ @Q G#w'c7D1*(O6}[z4Cz:7y)lO'i4b̉MEߝ׵QG^2_A^ӞJc#ccuPᏚkhhbu54"U/̬S~!ьf!z(4; kaU{gdDG?a79 xla7|ѤnQ D ,c7lT?i>ZWo5h}[ }ɰ7=ܖ0=G1b' )HxP8QWIdSLڢUTW'|X%p'u2N1KȠ48't^һN)Ytb_:Fu dѻNkeFߋ&m.XX,B }J{ 2rt(#뎀A:p[]n j(oM*ԏ@zMD=b;EO>_SAE1wzKKs-R߆ZOtG?|A3a0ܩ 9j>h'f_j- D(@,vlľ~۫vDI!:J*T[ [vC }#4aM{QS1JnV2}E[PqA?A%̉T' +>ͩZD0=dc!,-l}Eӽ X mK65Y.Y!8 ;sI`!F'/_QCtu7]WjR;58P'K*98$1=-2]vǧ_ _jae4HU՟zVUIܬþ=jćb[3u" D(6Q fji؍L_TLF&s'*vɽFnnr VC4TЄx 3Gvѣb!ؾkٍX829{ݻA:dꃌW^ >4h'q U(ivw<ʠ9tu]ea t +jȸd3یmrv?*s $a7unC?n%@QٌԼGJѳ;f)9PsFwnD)V|U'n4PX=2`Tv㜂^L" =N|F/Fg:AFln^Ei)s4]]& 1!xVa7=Lv3XIIWTv3v=_aM\]e7c7rQvdz| ^zśOe~|$ߧEQ l@;ZFOɻQM %Lvs հMM7rv"ҎX)+8g7U+}4lgYIS`XFL?!r8G=iqFu;,'k4>IJλiBMRhz1agbtS9>+,)Dn8tdlx/\Mmǘ);c솭xxu$^WqZd]4yߵEu^~Sc-ۙ^jϕuj+Nk8ֆ~^4{̾_y][ y/t9 D(_>GX￟d7Z\^zK W~m޸%vR 7[D +D軬`dsm9kyQ~(f=uV/th-4zuRLt]٤lP7|̨G9!MЁ^Xsamy]\]ƚ97iQ D P̘Q< BFT_P6WnQ읪$AaK4ߍTlQsB=dVmi[3'o?ؽnNjqa7NMO@Qjn0@8=Q@R&pyQSKWW٬fL?NUлMsu4f\;F˽M/jF+sQOԻ5Kg6Lh[&,%h[JJGK;2e8 x6o/4Des!{y=3,e@Fs<;u$EP}`sf'f$ne7M^=MM/n>E(JnV jQ [( ja3GU*Xcױ0M}(r00H*UY$UrRdu 2M|F'6]C9 =2jKSebF*O/$Ē{xR 噸}w,"Qe.Up@쐪@7hQID÷ގ]REf0fqC+/GbծܾBJ*rɘ?#LP  t`F18Bv|\2a7~F( nf"Q <+ *CVPlxL*M$IWmvDwOFntqaU^2Aگ@ }/ANmm͆5qhO I H,:ævmBW cf0WC}DOk~չ9uҋdQoJ6 OꇫifU ܵ8Y!/I#=~Q1y8 D(FQ (\ ŋss P&sW0!YA5]E[uVvӈ0'wcgg7NUC]c}>nSÍ=q˕즱ӳ4Yw3nH㚹9Zj wp^[7@}̻`7d7v\J۰9#$&_Q D(@DNQ O솙/ V/wUQY9nR8b2F413 Ȧ0k솽Y VDCO^fp)êF]#b v9r- $y_rb  ILqiBhe4!cEM=˛PhoQލ 3H.& ^#[>cVq$b0Ŧ9);XrRt e|E1N˜W;^+$jZP?S{܈.&O;qQ LIQ Y(*cW6tڜ:OF\Amr4"@UF3^ҕV!)ة>:BrNQqֻ7µ^&pVRāSK>oXH<bN%cMݮڲ\ r0Uށ=}Sm {;%\ms!P^'鲻֔xX?;Z݋lQCÀ?gU GVFgU'S 8vv9Gת'LT6^׌vW?4%n-ߣ@Q`cn64@8}&Ȅ\lUR f:A7' Pa#)vs" D(6Q fc$ D)vɢtgZ%hp RxdVnZS l߬OQ \@jU zz(w,ӛb]E.xT;P %pZ)8EZWnE(bnK Q <wf7OQ D1n6}Q D *Ţ@x.nOF(@s}醴Q D(0@MHQ`@li= D(v(@V &! D(pv3I-h~<ײrcCT1_ƾgۺj\Fty9i ZZ{M-WZZp(2Q y7>G(a7Q D݀c.Fb]l~.pQxO"Bq$5f=.:intQ\q*zo4DaI=RS@tiiW &_Q D(@MCQ`证Etg.:ȹF:3H=^&PIU7i<a7zQ D(v1@R3Q@4΋Qȭ3 9OPJpifE5&;qjy2AdОXM180&[~Pg03ɾ9uJyӄF&* zDB YKz74-dDorfI.z1*NG7t2Keen0d'4c9b*,A l }a7Q D(v1@Xn8aJ2EőG|OG(@Q ln;D888gYGzS{2hP0F^Na]dQ:gJeޢhGߜ*w[JghXٱvzC,峉3 R׾x ~ i@0= ګ0ˀX*1,Q41 S& ,R &Q D(n2@ T2D^$hgа 4YW'/M Q=IKcRg`a%͑fTKfQf\o&I7ǁX5Фjg挜LOS Q9.EE[Ta.:KMDNkzduAKĠe0|뫓5mgQQn=@Q &c D(\~ܿ. bc {: D(@M@Q ʤp*dQ {: D(@M@Q;2gef*zMOŇWjckR7 Q L(v(@a7Q DsQ Ds(v(@a7Q DswET &Q D(n2@a7ҫ(Ρ@M@Q d D(nߥQ S|OG(@Q ݜ3K@8a7Q D(v1@9G|^D(pNn=@Q &c D(vsx/Q {: D(@M@Q ]z9tQ D(@9* Ds(v(@a7Q DswET &Q D(n2@a7ҫ(Ρ@M@Q d D(nߥQ S|OG(@5yD ofڱ?O WQ D(v/ɸ@V?W<|jk_[~<|>ӟZ5RiG $Q V})ƕ(@xa7SW f>HI+v6ݜ6LǢ@8a7|JQ Bdm@)vs.nF(pZn}^D(& ݄lL.vɽ)F@Q D(@Qnno A_}׿uY[>O|\ S/dm|w7Sa7F(@Q D( sXBC݁ݨO~GjԺ@3Gڲ|=WRS9ъ"'q[}iSa7(@Q D(Q90+zS.Pp}ۃgQ D(@Q ݜx7nqV\RNa=oݻ;vs{_Q D(@Q EyDcAӦл>L9/~F(@Q D(@ ͕!կT 8@Q D(@8a7a7t%9J&ϿyD+|8'.]Q D(@V &&fcnNp~(0~>ۜn.D(@Q`a7S*ogG~#oߘK*v4X=$E(@Q`[n._K<(0___?kwV Xi !E(@QQ \`7o} u $zlvn Ժl(@Q Yk9=G߾w|od뛋H4[Ln> o/|-znؤ#_}~ }{mf~S, D(@GW f:W,pyw7Cχ it~['`7_׵AwuqvV>Oꆹ-hP Gs>}&qnl>V6'ۤ Q D(@@\v@H_Cz*D!Ph/WA Rr>gGgdDW5dDo83*U^^Cb4hjέgent+JxBu,솓zw_nz*ϵkmdVr]@eTg @jZTIMY{b:S&?]oYN@Q D(a7+ٍ qx%G[72:FteEghv }w1O4vnvu_sK;Xq2Od3!TT Bb)324%ɔCf`zɂXF`#epv;Xw4@Q D{*vs(? Hb EG,LcR [c_#E7f@'pM$-Fmp0iө5Пnk ܗ\}.c7!ymyT5byu~i7mnt(@Q M_4 n;/ v|k0ivC T`"6/*hjob^Q `1ynLv# >x=pp5 Y1S% D(@Q` ,`7ν'h pS.oNaEFu.Ra7;q솕z۰ZMA Feݩ@Q D#*vvs {uC# nII+ 6BQ D((v QN$|vf"L1"WFU|wY^ՆX l:3]H^Qu>2Vzv^&f !U@6;Ľ(@Q l@\v#d08œu"/J۱kCR*s`Tc䍊TU`TѶ DS[ݞh~~w?(g>~x'%MG(@Q G=_ B@OW\tP1C} | 2+KWT: lm3;뮩Q7cRXӴN;rCT꼔v4ѓnntlmPԥb,Զ5rЖY"']Xa7yݴ|g?Ͽ{VW~WOoY(@Q D=(vs0[u5-gĀEtDި[xB,0wZJOORQ f r2>Z4$k0.Qy2hZȩ>㦝wFarrpt ̇G"xXygFkOߖnܩqXnuO2gjјOG)R|BڊQ D(nx[Ё5V4W2nTX@Oעnn \IL6D7iWs`Y{NJ=zW/tSj8}oLUvgnxzTƟuF,\u~y-"F(@Q \f7MK V`}б'Լc7̴bI+Lv*9!k 2MΎ_ࣲN +>Lһl̻YnTikSVsbDSwݢ v3s r;c. ogYNC(->@Q D*v3xmr1  V̑֗ bxF}3Tҁp\bTңOs~'سdlӵ0u1jmרϻR2XKnvx纵KhTTXede(:SS)Ù:t9c#2+Bz.52e6ᗃ.@ͭo@Q D(v3 70Q9VbKuC&c!gC>=!Yw=XcxyTO|Yszvҷkd!cۖEqvrwƍT~¤B@l)Pa+k.Cb^ftS)kpcY%5ȍz8Ψ#Wf ai㉦tsvc ۤ] &CB܄-1PNjƙ61Iyd1dğ* 擒W wm҅(@Q Q Fq\} ,Ի-$q/ D(@[)vsovC<,u\_YcA:4b|SDS[ݞhg3<Zll6ge%mTYZM5^j"@6K(@Q S?*hꞷ3U%#A[ŹYцYTzZ32Xl| ~Cq-tݦndo!y7~e-wb6 D(@{S &/f乡v[F$ͺ6"#) $kkDUo`:*pQ-^Vk=Ӹ-׳zq#ȏ+͊OwD(@Q ܏ݰ%DEvf6G1|nhWF}lzPO݇+vs{KQ D(:n沛f%QGAJZ!.bRVpÀ]\ש",;Ju؀`sf}C5ksL&Y?&D ܦ vC7YrJv lÀn&)AC\';Q D(s*vsݰ@3@f4k)8_u Xiżg TڪFX:9ȫOS)b,Z e.FxV #:׳[5)?窧/\0J4ui͆ۜn.D(@Q`a7ٍXYͷ }Kxg7 v&?i 1s2 hIMe. ٜ`7^唺襦&x?gjqddv)#AdSn"v3gz?YX婨[Y#MbXfm2`Vꢮ #+#,3Nz#@S\IO(@Q Esȸ؊1M@M -̱tΟ@&x8(LAu(> i* x0L=͚5c.R 3j$[-Vt?SrHkQMF^sϙL"twt! D(@sy?էܻO9 g|Tv-%sy9Saq2G`7Pf021vcR\*c&7Gwj ilymNpI@Q D(0G ÿ/+_~ӟK*0n55M@e]QVe*B+qqԦ13isy[T`ӫbkȻ\\/e5Eu [=$E(@Q`[n??m?vg{ Zݝk*(#}o-Ȋ !E(@QQ Q D(@W 8Q`_җ>Gؽ{f|NQ D(9劳Q K??OyD(C-?D(@ػa7{B/ D(?@SrOQ D(v@/J\Q <.^KQ DP ߅ D(v@n.EQ`O $vQ D}*vؘ-G(n@Q! ؉'3835=]3~;2{7Oo;F;Ep奿xb9hQ DMTQ, ln|wyg0fr77W[sE99>o믿իW6{Ӧ4uju瞞̔KpH〇{ァ.#2Ex ̾úrkjݜ5Q D @ĘQ| ln0 VS^59,-3aR7,/'J.:%cdЁT oψ' @13s( t34_^kGXnKU<{m9wkz@Y-]*F(pfzvCDȤv>@Ы> Ȩq,i˦9לLnt}/c@F ho6}jV-eI/D/X0nUɆxȫ:(*&&WJޱ =]a7dMDŽ^?\Ouŋ7-u3֒ yU+[G?vnҢ+^8 jd͙eӷ(@X@BR< DPa7 @N N<D'uFQNEc<BDM@=TKd n*7dR?uЛm+ PYvvpKP-7f{0.jL)DƂM7~rTLMU̠GGDȁGUeVPa.tzhvC+\8,"o5S~|Uߨ4ah!}?{MҾЪqNi>#Mw\c7*A)IR.?DGxF]QA|Qg0rTLgd L+ĵcŻ`'|}svmM/@Q`a7dJ(M>%NDzUkA Ol11{w2aj`/8&5 %deE/jESmTT2kSk[tCzsgɰgM@Q`B (} ]1g㙋/MۚQB\X`7<.gcz+YnTzNG]8a08}]a"1vC{k++؍.1!V+͠ =nFiXE3Ƙ ?½kՔ\nH .ZWz R4s|M@Q X (2vc2n)T0LXnjf7f !<,~y,Oh"t[c*7Vэ%RcT_P25|ٽTKYBa7U+ٍE,\F>:Z=a!d's]$5Xl8؝#<3g7jiDUxzZc;FM@Q P^Ȼa>𐦡1?+҃55 ÓwšcVc?Rfx{pʫby7MOCy{8yr F:C`]'={|/9/*bsMj>v`0 DvO.5 |*Y&IF=I*f 9Mc7Gxt1EEy7,uԬ% a[^N/^k U3k;ƃ(@؍a7q$ D=)0nc;fIQSo]:ugl44!#e955#At `%=TŽC.k^<a6xNyg=TOTmcA7=jT,H05uTI+QG|UrrPg2:ʙڴθ`>d P7>9(~?Bz}.Fs/- \G{y3؅/8QcޱK**| 5Dn=^zVa@b^-ը6k TbcیϦC3k[1D(yHQ SF-XT%W/ [i[~N ~; a7~WQ D(n"{Q` \n>}|u* %2x.ۙ:Nr4 'O;7eQ D;*vsGTQa7ʿ#6yW$XQX>KcjQQ|¤!uF˓8[h{7ٔh;Cq3iQ \K@8}4@V ߞ9 D(n@͍(@M(c9hQ DMTQ, <6fKQ D|Q D(a7Q OkvGZFL-:ygVܪjR;77ά8ϺƆš@UFɥ}GQ D(ZҥbgVJvuL_|IpG`i~yRj}~zનsV@ś$ub긗f(ֱꪃ*^9+#Ԣ6RBm37WuJZ_ WEV㣊raȜ*a7gMߢ@Q`a7 K(C+ٍ3 y՜pe~N 绱hf/txTf%(䥔y /=k&k|0twx ?g?u;1{1,n[1Q D+v @اFK DzGnTAs%pUl׺H7:\ߦzZd4%G] Ǿ щa\#N?xs_tTuU!fS-Ym[rFԨg1. 3Jբ)tr oQE%eCetLꃢAY=& 7|mWvM[hhpI/D4&T q&Rd^5ܖYUQE"^@ 5x< 3St겏e՜Gdhn.$.YIƶT?҂GMz"Ϩpxj:b*2b=j/ qcwWQX4F{q|bJ"G簛+@Q n/U@8 QKv{q2x3S: ?a7KϢ@Q` ij(@?gJ9AlV2niS:X m؍#&ppԘHEz>Rٍrи fB"vC'8MBP߈`7_:0-fM؍R]\oYAj(>FD3G J`a^Ctej5~jpm%.P?qX5?xҵ~ A$#7J'n*~`Q D)v+@؅ 鸺 "4M&jvHLX>M']Og #)#nn<glVs1:v&SL"nj<ܓ8CMs ]54[`7͈# ZG]Dz|d7f728Liv/8@Ϫ@ͳ^; DIvIL,A4||Ru'~vmD$8۷Eư4i|2n1XGGdH+2,7b7GA[bEqBݰ|I ls0'eLs#'KTWb"v38?ӣc]3ȻϠ|%Zuv>|y| #j3qOu`pN/h58Nɘ\)}='w(@wP "(ZŊm-X KBH#H?m DS,ZgKA)(3:1ElS*&:Ak|`\(ޢ G&$b%~u>ET%.B8쎽 4㞒IdR󍇽Axx{P@gjsQﲦclrQtkk3:tʪ"{Z/GF"O^q2( lG;gO:G UpPHx3V੃mJvXHUe+Ey+wWֻ s'ʜ}w(@a776@8{/:v[XQVMRqPc<w`DysW|a7GQ D(a7 sQ Cw=)*vQûL.n % I۪ʹvs" D(6Q fc$ D)pbv8PȆ+'=m莳s}(2W;F=1!y0 _ܱE+l߬OQ \@jU([Q9wlz@Y,Y*D( ΩuT-NŠn sQ D+v@؀h}ٗ/_nleP12ڬG yy`]%УVÊƵ-vZׅZK-B܎θ-3%QUzCN"V4;뢬v'|a7zQ D(v1@R`iލb[Eׄ7i0c&Bv>p*_nA+KIxAxͰλϔO< j^][]]qX#a7Q D(v1@Xn@5$vy+ӑO3Ms(`,:XWv w{}tVgj % O33-V7M4/L/i-֛M]+v;O4xq͡9MT ÍA6Lvӌ%D3]jz֫ ͅk "àoTXrn=@Q &c D(0} <# A5T=t^*bŘz Ȭ.M Y2EIfʨ<|t|LA#fJȠ4Fw(Oo{DŽ/[K pmkTuA|1M)NG$D1۷5b(jZWD\qUGjXrU1 F%5_/UUO,4c@]<4cB[G#)WYcͧjOV:r<\\ x—?%ܨ\E.T" +:}|OG(@Q ,`7^O8нƙ~ D\zp t Eypԉq^QH_KM7hfwG}*Flj q&|E@}wKҲNfP)`:v&aY6Rw`d0>TjulĹDپEC˽ ra7U]ܮWI{08tK"3F%EȬ-Kꉄu8 ?w{+&Q D(n2@M y8r~WAFKn ǥơf3MXG^3fBd:4…F[;CMn|yA#ĥ#MZcЉ "XpPpӁn, ٍ{J렇948}QTt%=>}ׅcX6qv#_Zupꍨ;MnM@Q d D(b7u*P щrGw5sҠ/DRH*MQLڪ%j3Jcf^*y\ۚuX"&Q D(n2@ 9qЋ\Z_>%5DsνJ1(&Q D(n2@a7`qψyoym{"AO ɗtQ Dy []9! D(g~(Ӭ ^[g+wF~+L8j Z`nʏjwLFVeBݎ86_/5AK&fߒ- D(@͝OsQ Ccfq; D(0@1/eQ EȜF@8a7 )@U hߜ7 D(n@ ō(@cc@9wh<Q D\Q g7Z{fƷ4+¬[f{75>Ӈb;wCz=h| zkзf~+g,ZMӇ(@H(Υ@nk]U*:>>^bn_tf`V)VZ7߼X~]͍UT:\Kv6ZE^٤\ 7Fv-.|԰/4Wr tK%u*f?(ǮNM8Vz)#ׇֿӄܰzP`Uo=:bAʈ@:V3vx2冹' tl<7txe~I㙏!rgڨ8\xRtho.zTQw!Q+ۏOu[Mo?ݰgM_@Qa7"Q DU\-"iODm`Rx5`Ԅ p@SΨzM~X>`6dq)l7gL`}`,ԧږnX]X Sd;웎np-P@gUj@5Šq:ըNՏgw\Ͼ3T Ika Pu$ebUi. ԋN7}+ T'ӞԞ\Y,&_Q D(@MCQV<B,>Cqyd MH:h³#ThB$V۲&ƈL/ rݸ5af P(cc$mǰn\d7ؑóxul1nPqr[u\=q/_ PBj`ӨzJyp&ᒹ!RsM/ۥ [nXYQ2&_Q D(n2@S lw3 85F  !n~1/A:%Ǻwf7vݐY0nt8|U50,fT@lܜz0mK]*X|5: ކN4ٍ9n֍g]wK6g7d{2'z=8泛7þj߅xhRXτ[3 D(HOQ WM ;0Hձ+},b7^P(˞O # '0F(i& Dc)pݬFP5ܐc;4}&**]+-6Eg |'vsx@7U xGU!gQŽRY5Aٍ"X!97hQ D(vsQc2 D+p v kヱEWIlvIW64Vsj̲&7Et0i<_sT%{x^=4 o_*4=Q DLQL ܂ݜ)J_@V LߪKQ \@͕zT QYG(9kz@Y%[*E(pvnUF(@ٿiӿ(@X@R4 DQ 1[ZQ g7Jڦ/r'AuN" @ n.4NݬϜz'KM?.+u @nF-4K2zrME0n*|y庛=,@\w3jŦY @`CSTҗ~M-|98zKT>\۾T;/ @;p5  @9_BvSK],S?/uE0l!NݜdNV @i9+6 @fJ] @ k8 @sd7 @`W͜N  @]&@k8 @sd7V @`W͜N  @]&@k8 @sd7V @`W͜N  @O^oS }8zwa}ͤ? ׿_*Cq+{|{s!yXq{W뷷% n&N|oc]ѯP[՟y|O7k:Vb/~YKPsvjp=͑Ӛwگ1+94+ðNqkʡmI ntJL|eyI!$GzaЊ9zb9˻XMMYZipy 3{aڗ' b) 0Y@va%_'_}sJN'9ORSJtH^_sn\/jvLQrQsuO޽f mj(sM6;);Gmj:hmY﬇I"*yɰ5fYwG)^9P2kvS$߹xG<^$V%Vfo{cC5rz@T$9273m.?PjPp:rm!ɀtvs C]Ѻߋ]fd7sVl:%@& n`~c}+D 5`A}ųټvχL$uo5m֋MMM{.8ULu%k/|nֲ;x=9Da}L^TY3k=&fl$Gp6*ǣ߼ar/f7'u |k8 @sd7^ zjZEfhT':߹ȣ^[~rf7UOXẛ5]?1྿/é7fC*Q^%a9Yh3ׯɡ'g7]ws}|/tsMAbtnldFΓ{18+ G`fΊM @d̓[G\<]Oλi8CgrM.3_׀6yL)}OV'g*CU/4'yIA_&WayN?7I,﬌Ӆk<#& Z#Fˬ9B.;ZOUka?&[*?u yvCC7ӵSΪpi_@NjsMXokϨN#&iZ?Tx\LX& ntJLLZ{xS9stN`fΊM @dͤ5}Y6 7)Pw9][0I@v3y w @`=B" b) 0Y@v5m  @{L^# yOkp @ntJLݼeyηΛA~[wo^ x@O]ҝm{Y(oe|?f; 5  @9GP_TFoԗ\LN{z>C/]OSG^bm|q{*xuRۼΣ7mb( b) 0Y@v% UMpTsj׿bs$UE~8U=./);o=aߋrM=y+=G,-ۑkd7pz'@n>Nw| 2-:䝺o}k+Nj{ԾN6-Doqf]C/| :{\nSe.vٱ{KBRp.yg'Ue|[vL˧uʪԜ_[{85=9ֹ:bX?ZX X[6un-GgL^# ̮Sd7<ϟ+_Sc^ bz?'ωQ}=SuA6αMԁ:Z.\+|Owk)Î#w=`6Idbbf7$j]C#I|zt&u_VN\6ak^㹌z/M:F_&O|̚9.^ 9+6 @d7^W;kzC]W߼ݬD=}/~w ;oL^# y"L~Kb$8}+MRySv|e!9y[vI9aɝM=dRToOTp`Rk㾸&wu bfMOjnX83˨w: p2T.I7WuA/` Q@v3gŦS @`K_8]}+VHާ}Cz\r E*&~ zs\5MW֜$i!3<7ڲT\MKKV (us<>I͵}k㺥.._[5`ߗn Uc:7Uks5xV֭=Vg.j/OmF?ٽ캛pnL^# iNypn9lk:oʓSo%gylpΖ:OS<~ڜ'=zwxyLI~TRd=j$^*8$ASU\KMв{rkfE.kIu~rߓSY3stfï!ޠ\% @c9+6 @d7[A]w'>`,C @n&Nݼ @M9+6 @d77-DށfN @;Xz+$ b) 0Y@vsbS~T u??.nG6L^# \Us+kێ}k7nr]Y! {ڲO/^wR@n?+ w EHupھ@>*z4RC5BXKg-SDOjy鬯XzR^^wvSŏ6eGklXe& b) 0Y@va__}s|!S?Ug r6?D-9unީƩV|{j~qrƞ msKM N:]rKS͋Tjl\;|T{۪!\:jkdT~n/p6Y, yM?r|3Tn}JnjS߱  fN @VBn x܁낚 @ @+ ysr @ @FvC @x;7E @ @FvC @x;7E @ @FvC @x;7E @ @FvC @x;7E @ @FvC @x;7E @ @FvC @x;7E @ @FvC @x;7E @ @=?W~ @ @>"-K%6?`(,OIENDB`pygccxml-3.0.2/docs/pygccxml_uml.vsd000066400000000000000000022420001476564735400175400ustar00rootroot00000000000000ࡱ>   Root EntryRoot EntryF-eK@VisioDocument)SummaryInformation( DocumentSummaryInformation8  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~VisioInformation" ՜.+,D՜.+,, hp|   Actimize 4declarationsparserGeneralization ArrowDynamic Connector NavigableShared CompositeComposite NavigableShared Navigable QualifierShared QualifierComposite Qualifier Composite Navigable QualifierShared Navigable QualifierNavigable QualifierProcedure CallAsynchronous Flow Flat Flowrealize_subshapeWatermark TitleUMLPackage ComponentComponent InstanceObject Package.26 Package.27Class Data Type CompositionNoteGeneralizationNote.33 N-ary LinkMulti-tree squareMulti-tree sloped One to manyUniversal connectorSidesSide to top/bottomDynamic connector.41 ConstraintLine connectorLink DependencyUsage Class.47Generalization.48Composition.49Composition.50 Package.51Data Type.52 PagesMasters2 8_VPID_PREVIEWS@_VPID_ALTERNATENAMESMO@_PID_LINKBASEW@A  Oh+'0 PXx $pyste - next generationRomanXC:\Program Files\Microsoft Office\Visio10\1033\Solutions\Software\UML Model Diagram.vstMicrosoft VisioGz EMF|l@VISIODrawingLz{ ??d(P({P̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲ä̲̲̲̲̲ggWWWWWW꯯꯯꯯꯯꯯꯯꯯꯯꯯꯯̲̲ꃃꃃꃃꃃꃃꉉ꯯꯯꯯꯯꯯꯯꯯̲̲ggWWWWWWWWWWWWWWWWWWuuuuuu꾾̲̲ꃃꃃꃃꃃꃃꃃꃃꃃꃃ꟟꯯꯯̲̲ggWWWWWWWWWWWWWWWWWWWWWWWWqq̲̲ꃃꃃꃃꃃꉉ꯯꯯꯯꯯꯯꯯꯯꯯̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲̲꾾̲̲ԟԟԟԟԟԟ̲̲ (0(6@6(0(6@6(0(6@66@66@66@66@66@66@66@6̲̲ggg3?3#3?3#3?3&/&3?3&/&3?33?33?33?33?3̲̲̲̲̲̲̲̲uuuuuuuuuuuuuuuuuuuuuꃃuuuuuuuuuuuuuuuuuuuuu̲̲uuu̲̲̲̲XXXWWWWWWWWWWWWuuuuuuuuuuuuuuuuuu̲̲wwwXXXXXXXXXXXXuuuuuuuuuuuuuuuꀀ̲̲uuuuuu̲̲̲̲WWWWWWWWW꯯꯯꯯꯯꯯꯯꯯꯯꯯꯯꯯̲̲wwwXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXꫫ̲̲uuuuuuuuu̲̲꯯꯯꯯꯯꯯꯯꯯꯯꯯귷̲̲ꃃꃃꃃꃃꃃꃃꃃꃃꃃꃃ꯯=@==@==@==@==@==@=̲̲wwwXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnnnuuu꒒~~ =@==@=~~^`^=@= ^`^̲̲uuuuuu=@=.1. $ =@=NPN=@==@=252=@==@=vxvvxv=@=(+(&)&=@=vxv,/, =@=MPM242  .0.=@= ,/,')'fhf^`^474.0.=@=̲̲꯯꯯꯯꯯꯯꾾@@@@@@@@@@@@@@@000 @@@@@@@@@000@@@``` gggggg ̲̲XXXXXXXXXXXXXXXXXXuuukkkkkkkkkkkkkkk,,,``` ̲̲uuu^`^=@==@==@==@==@==@=??????̲̲bbb̲̲6@6(0(6@6.6.6@66@66@6080 #3?3 ( 3?33?33?33?3 ooo=@=$'$(+(=@= =@==@==@==@==@==@==@==@=̲̲bbbgggooo߿"$"    *,*̲̲-8-̲߲̿  000?????????wwwooowwwwww????????? ???(((888@@@@@@@@@ ')'̲̲bbb222 .1..1.̲̲8;8$$$cccAAA̲̲6@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@66@6$$$cccwwwopo```̲̲ffffffff6@6$$$cccxxx@@@4449G9ffJ\Jffffffff3@3ooo-6-@P@ss@P@ss@P@ss@P@ss@P@ssShSssHZH@A@HHH̲̲ L_LL_LL_LL_LL_L||̙̙̙̙̙̙̙̙̙̙̙̙̙6@6$$$ccc eee*4**4**4**4*%-%*4**4**4**4*@@@@@@@@@̲̲L_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_LL_Lff"("@@@@@@@@@@@@$$$ccc O`OL_L_w_̙̙^`^̲̲ 3?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?3```xxxtttWWWRRR...0;0ssssss^`^̲̲```^`^=@=!#! =@= =@=020=@=vxv@@@O`Ossww̙̹^`^̲̲ppp(((VkVQdQ @@@  3?3#3?3#3?30;03?33?33?33?33?33?3 ( FHF̲̲L_LYoY̲߲̌ @@@ǿTVT̲̲ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@bbb__________________<<;141=@=vxv@@@bbb ̲̲888FFF􂂂@@@Ͽ___ ̲̲ %-%3=3(0(6@6(0(6@6߿WWWWWWmmuu@@@6@6(0(0806@64>4)0)EHE ̲̲ggg3?3 ( 3?33?33?33?3*,*||||ķ@@@HHH ̲̲%'%:=:!`````` @@@EHE&(&%(%HHHHHHuuuuuuuuuuuuuuuuuu̲̲EHE=@==@==@==@==@==@==@==@=ǿ000______555^^^翿www333`````` @@@翿______ooo^^^緷???***WWWjjjuuuuuuuuu̲̲"VkV?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Visio (TM) Drawing )< 'zR' !fffMMM333̙U3ff[UE3f3f`8 TZ Arial?:NWingd{s?vNPvMonotype SortnSymbo^NJ0Courier New?"Times RomanU J:DT1EW-hPT8*  /U_b b0z_Gz?@ 4D.gSb}}},g !k5|'ggK,K,  A& LQ& , O(?&/&5?\.? Ag,,,'1/C% 6T$6~ }( y  ~|~,)~?T"  } } }U}}}}}-<%aBEEEEEE @FOXN}OJ`.BUEEEEUEEE-U}b rQg'$?5FA@#i; rQGfGfrQc d?i4 SoFSoo' `I3g|b:FIpe#|U | | Y?A?l 934U|K,K,K,*J(QU M UQ_4OO __0_XOjOR_OOTI }-H@L&/d2?͝ޘ 3YΞsUď6ҏ,@>P\ngJߖ2& rT~}}}-i| 5 Oe'0ULy?O!D U#\*Z Z Z Z죕0L+{,9QT ZZ3}4}5A&6%jPƿؿl/&!3~BD"?4?F?QL~?!t2DGf?7П-BΧk.Y?e-%1@-( gp { . o1->i\?ǂ#O*D)/. ??T?O-B¿z<ߞS=t߆a2Gh$+hasho/"%)m!^-mee+//%/mF%Uo2q0??6F#Ug6<<7&/Rӌ.1 QUU&O?a?s?4/rF%G4=d/\6 bV/// q?3T?g |F#1@B9LF"]AA1@/ ?S[af@$T.Xġ!̠cRmuC0`hR:CIIraraB.1.1rb.2 _tA5O-PO\OnOOL%OOT_U0O贁Nk]#@:VcmRhgH;5?_:<@E@"E @ooo=i#D!mΖ9xra /ASewg/ZDىQ_64Qh)`s͟ߟ.1/<@); ??BA?[WW$F%~Tm[1%7I[mϑϣϨ[U}"B/U0{W$RwᲣ/ASL ^pgI/HZς7h|N/zjӹ 0U~[U6TFUwQ?F_OI? ;Y@-1e  ,>PbtUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu %U13 VGcGic]WRNJ Jfmb?DzG(\?z??HDB $# ?h- >TE=U@??@İ?P6 >Zu`]?$2 u#5! b^d d>q5 I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.fK`l>,>Ud9 #J@ Wa]"c%c } HN " &B/>// 5!3%?(?Z!2/%rA^:23H'-] 4 )F| #pT s B]G]@ȅ o+qT ]=a < _2 r  U 'U!4"AU#N$[U %h &u'( )*+,-*.221<=?*B J ;;JELRM_Nl*Py7QD3`Qc^3dkex3fi3jlfns$$%>?0/$/F?!2!cwL!yLY!}f!3 s!4UFDfP 7h-RTUU UUI???d x))T)00 bybw a)$P)%!1eqYkz UGu ? ?????GXFFflGYUQ D5Represents an association between two clifiers.bԿ?m:mԿ8?>?>? UG HD )# #h@>T(E=7T# AYU]?ԿP} 4u7` ?A[u#4ku 'u`4E@bKu B D^:xsJ.JAA744a )% bOJd7"A/K:E#L'u->4U2N贁N{?<Կ5#24rn\"#!"?𓎲&&n&:yc3 !3 -2D362 ?3 "4*0R2Q?c;4#?$8&7[#2##"aE,#c,%E A#"0;`UML Background Add-on` /CMD=1001y0k'A4RVD3%V39V 3MV3aV@]A%?#^AbD V VQ! J8:?AaĿ@q`?m*g @TP">L'A-[Sab 7\g-2r3A3bC?!R[!B'cRbui`2K@!HAHqMtKIn`?Copyright (c) 2@ Microsoft Corporation. All rrs reserved.ec`Vis_D112.chm!}#|p00e>ha0rE m %&7 &dE4Qa7!7!RRQQ fafa9rl1UdQ)#Q4T&B&Z"U b}%aH8/H``q#ڃcbG„ Wqc? 3}C?Q WQ;# [#%V9VwPu#%V9V!3&b6,#y3!Ba%l-?  gR/r Xh 6f?>PO ףp= p+ǩͼwPK## VWaV@#LWaVpz (FAg?A-&DHq6#r! Q(-DT!`0@ANѹ?dsyӍ0-2yҠ,3ӧU`h4 |%_P$_(kD)iBE3!1L7=2Vտhzߌߥ@؋ã߇9_7X4苢p7XbtȆdE=ad࿸r!3|@2ْÀTRQ]5KXE=?O,>V!ٜíBa__X4"/_X&ϱnݡA ٙ%YBsBwPuUs Vie&ws.I.pBOM5D kx$X!5K/- s_YUQ?c4Bs?' "sDisplay Se&mantic ErrorQs ?2?C2K>y")rЀ`@e2E!E??6R6?xVIuO8#sShape 3&y Opq?!O@78K?]:U@@O;S`%Propert&ie__@716_]6g_hSŭݲT #eQQ@aa@;ed11"OAOArd9raa!̢͡1`ܖ#aX^@ak7@ /rfaീSTHqcra!WjuwUw+Vve+t@YcP&cͣrh`@ eha;urr~̗UU/ihOA!j-r%M;Yۣރ ރ!@ރdhd͡habksbdbabFp@0c3u`u` u `abąt`u0bbٟ`ab-#``8d,OAOA⯐idq @8&HCU'0%qWHD:  ;h ,>T  9 7AUAh}f?A 3@q?@I?@P} B4u7`p| ~  b b5Au$4+uLA-,4zb .6C z3.m>" &!- 4a1$9 " '>Q4US" uKTp( &" &'4z ^'!3n` ,3"B% bGBS% j&?E"_D#B6J"t4C0&g\#w1w1b+I`?Copyright (c) 2001 Microsoft Corporation. All 2s reserved.Ql @Ud(77?'6$U2#9%9%9 P(`\#41T#"$zB8Hi4A!^h59 %9~^-'0(=A#"!VHD # =h ,>T  9 7#AUA23?Ahf~@q?@IS?@P} B4u7`p A  ۢ b bA)u#$]4uLA-,4zb .6B z3h.>" &!m 4a1$9 " '>Q4US" uKp( $2" &'4$`%E!3` ,E" bS6\#S%j&?E"_D#96 91Bg\#d1d1b+I`?Copyright (c) 2001 Microsoft Corporation. All 2s reserv?ed.l @Ud77?'63"a2#9%9%9 P(`\#9""41TB8H43!aiA^E9 9^-'0=A#"*VHD:  ;h ,>T  9 7AUAaf?A3߿@q?@I?@P} B4u7`p 7 ~  b b5Au$4+uLA-,4zb .6C z3.m>" &!- 4a1$9 " '>Q4US" uKTp( &" &'4`%!3b ,E" bGBS% j&?E"_D#96J"t$:0&g\#n1n1b+I`?Copyright (c) 2001 Microsoft Corporation. All 2s reserved.l @Ud !(77?'63"Wa2#9%9%9 P(`\#41T#"qB8|Hi4A^_59 9^-'0=A#"VHD:  ;h ,>T  9 7AUA3?Aaf߿@q?o@I?jP} B4u7s`p  ~7  b bA@u$4uLA-.,4zb .6B[ .z3. >" &! !a1$l9 " '>JQ4US" uCKp( $" &'4`%N!3b .,E" bBS%j&?E"_D#96J"$:0&g\#n1n1b+I`?Copyright (c) 2001 Microsoft Corporation. All 2s reserved.Gl @Ud77?'\63"a2#9%U9%9 P(`\#41T#"qB$8|Hi4A^_59 9^-'0=A#"V_0Hu- n> | W}O F $ ݿ#rT B9<@ =a$ u[o@+_sT ^o-aGy= o PQ? Fo ]? yDf? .qlq? !vUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu\ N*  _'+<*9]b?HzG\(\33?UHLD t >5h: JT5 AM>U@?Ыګ?P >u~A`bwJ>u`a? >-4 4JqotI>`?Copyright (c) 2001 Microsoft Corporation. All s reserved.,K`+lJ$JUh 3 Mz >wa5"a=#D ]; @m"?>b3"}: |#)A/"/4/F/j<]-4"u/{' 1ɛ////_H-Ӌ] ; _a)Ft$ $w#duT %AB $ ]@e$ o+ Y]3a$ & UFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu ,  ,C}C ,X Y RH?+mbĿ?HzGſ Q?z??HDB $# ?h- >TE=U@V?Чħݸ?P6 [>u`]?[Su#! SbJP P)>q{5 I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.R`l*>0>Udd9 #@ aUM"S%S iF: 2"m &B//F!3+&??/,36?#/v8k?*5R2;?%rAJ2CH'!]  )FD$ O(#tyT )`B} $ h]@e$ ko+\zT n]:a$ ]PUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu ,  ,C}C ,XUY RH?+bĿ?HzGſ qq?z?X[35;?HD  D 3AhZ$>T P3 A [U@?Ы_?Aw?P6 mu ` ?u  )b$* *>B&H>#7 P??$*q5 I`?Copyright (c) 2001 Microsoft Corporation. All s reserve[d.,`l>0>Udd@$!$! Ho aU}"% c   Bb"H &/*  13; 92?/\3f?'?981?Z5H2/%RrA$+B1C}!aHu] 9 W)F\ +ݹ#{T ,[B l _-@eGoK|T oBBo OoPUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUGu ,   , B-a mgX K ? +b.nĿ?< Tҿ57猴?Gz?_ގ3?UHLuD  j>h: JTP5 AM!MU@@ 3??P >tA` at"D a?怗>ub>u M R>[ nPJMJg> UI`?Copyright (c) 2001 Microsoft Corporation. All "s reservedO.lJ$JUh 3 Mz >wa"a# ;@??>VbU]f}:*P#[*r>!AJ/\/n//Ȓ//<-V/'/ ??/?nUGHD t# ih$>TA E=MmJU@??@ı.n?@?@?Pn6 .>JuM`{ ?Umu` )J VJb} )>q5 IJ`?Copyright (c) 2001 Microsoft Corporation. All s reserved.~`}tJ+8e ^7-HM&%=#U@!$lJ"YUdv,2!@+6`K7#($?6?H?Z>HD: # ;h#$>T P#3 AAU@ı.n?@ F%u?AA뚙?P} t`  ?tT#ť}A@i+V>7ujFLVu F Vb )>#U~ ??Bg  ! !5 I`?Copyright (c) 2001 Microsoft Corporation. All 3"s reserved.Sl> 0>Udd  9 # a"% `AV\VhL! FE6B@*?)?_13k;09?%?39{?]A?5!R2/ 5rABC_H] : _)*Fl$ /w#~T w0qB W$ ]@eko+ T ]Ra$ @1G$? 3?$ 48UFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUGu ,   𻻰,K B-La mgX K ? +b.nĿ?< Tҿ8Hf,Y?Gz?(.3T[7ֿm4HNё\?UGD # h$^T UUU@nh?@?@ı.nħ?@?Py u` ?uU`  b& &.REO>DNXqܲI`?Copyright (c) 2001 Microsoft Corporation. All s reseroved.`uB+8e Z3-HE#UNH!$X#HD: # ;h#$>T P#3 AAU@ı.n?@?AA?P} t`  ?Mt# A@+1uFu  b r[>>#U;?Ab/Bg5 I`?Copyright (c) 2001 Microsoft Corporation. All 3"s reserved.l> 0>Udd9 # t@ a"U% `kAťF!LFbXw"  E6 B@*?V.:_13k;09?%?39{?M A?5 2/ 5rABCUHLuD  j>h: JTP5 AM!MU@@ 3??P >tA` at"D a?怗>ub>u M R>[ nPJMJg> UI`?Copyright (c) 2001 Microsoft Corporation. All "s reservedO.lJ$JUh 3 Mz >wa"a# ;@pqʼ?>VbU]f3"e}:*P#[$l>!AJ/\/n////<-n1/{' 1/ ??/?n_H'򈍗] O _z*F$ y7w#|T 28qB W$ ]@e_|$ o+UT ][aG\$ 9f$ j: $ n<UFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu , ;EWi{@+Represents an associatiottribute or list of s whose valu)serve to par;tithe8objece?d withW acros.mb?HzG Q?z?T?HDB $# ?h- >TE=U@V?Чݸ?P6 >-u`]?u#m b=F F>qqv5 I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.>`=l>4 >Ud9 #t@ aG"M%M _H?  ' (& &B#/(/!!3// ?!0?M?/q;???&!-!)2?;rA@uHBNCHu׍] ? W*F$ >#,T ?GB T ]d @@+yk9aTPE=1AoU@?騧?PZ6 t`  rq7?t#*[>u/ bvuQ b% >gU5 IC`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.l> 0>UddR!R!9 #bt@ a"U% `Zv|Xv"b 56B/?X913E;&?`?/3?C3Y?8?5b)2?%rAuYB_CHD: # ;h >TPE='AU@A̫?@P6 t`  :8?Qt#Wq(5u Lu  br x>k>ZgU5 I`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.l> 4 >Ud  9 #t@ a"U% `H ?LRHh " 6B'=3/8/1313??X?j?B31??/;!??O H3129O;rABCUGD # h$^T UUބU@?Чҧ?Py 8R]u` ?UuTU&/[ b qUI`?Copyright (c) 2001 Microsoft Corporation. All s reserved.V`BWe@']G-E (#UH!$#_HT] ! _+F$% Cw#_,T KlB G.D@e% 1o+4T 4o;a % ooT}JBG_% 8]UFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUGu ,  ; HUO ;rj \ N A+bҿGz?Q맿p= ףҿ43?? Q3?(\?UGD # h$^T UUބU@?@{G?ҰQ?Py u` ?uU` K~W[ b& &8RkENOb>DNjNbbqUI`?Copyright (c) 2001 Microsoft Corporation. All s reseroved.`uB>e]G-E(#UNH!$b#HD: # ;h#$>T P#3 A'AoU@?騫?PZ} t`  rq7?t#*u3`u4 U b) >>#U~ ?T?Bg!!5 IG`?Copyright (c) 2001 Microsoft Corporation. All ="s reserved.)l>0>Udd9 #  a"% ``f\|"  O6B?p8:\i13u;6??/?3?s3?H?H5 2?5rABCHD: # ;h >TPE='AU@A̫?@P6 t`  :8?Qt#Wq(5u Lu  br x>k>ZgU5 I`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.l>4 >Ud9 # t@ a"U% `H ?LRHh G"! 6B'=3/8/1313??X?j?B31??/; ??O H31!29O;rABC_H';] # V+F<% DNXXlliqUpI`?Copyright (c) 2001 Microsoft Corporation. All s reserved.`Bt 8eUgyS<#UNH!$l'E$X#HD: # ;h#$>T P#3 AAU@ı.n?@]ڊ?AA뚙?P} t`  ,PQ?t#z#A@+u FuT Q[ b r>5>#U~ ??UBg ! !5 I`?Copyright (c) 2001 Microsoft Corporation. All 3"s reserved.l> 0>Udd9 #  a"% `AťBFLnFbXw"  E6B@*?V.:n_13k;09?%?39{?@MA?5 2/J 5rABCUHLuD  j>h: JTP5 AM!MU@<@3?^?@ ?P >tA`  n&]<t"D_ a? U>ub7>u ajM >)[ PJJg>UI`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.lJ$JUBh 3 M >a"a#ʢ ;@pqʼ?>Vb]f3"2}:*P#[$l>!AJ/\/n/Ѐ///<-q1/' 1/ ??/?nHD: # ;h >TPE='AU@^tE?@3?@?@ ?UP6 t` ]?t#"D an&]juLLu b xYhA>gUB5 I`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.l>4>UdH!H!9 # J@ Wa"% `9LRh g! 56B'=3/8/1313?>X?j?31??/; ?? On31!2/;rABC_Hu;|]  + F@% Q# T gRwB l3% ]@e?% o+$T ][aGC% ?S,I% T4]% VR% X UFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUG ?'  =? M E MrM k \ \U< J&bXtEݷѿ?< Pڿ8Hf,Y?@Gz?&.3T[]w.袋?UGD # h$^T UU#U@(迢?@?@^tEݽѧ?@X?Py vu` o?uU`  bj& &BREOYl>DRNXllqUI`?Copyright (c) 2001 Microsoft Corporation. All s reserved.+`Bj8eUgy<#UNH!$X'E$l#HD: # ;h#$>T P#3 AAU@ı.n?@?AA?P} t`  ,PQ?Qt#}A@i+u2Fu  b r[>>#U;?Ab/Bg5 I`?Copyright (c) 2001 Microsoft Corporation. All 3"s reserved.l> 0>Udd9 # t@ a"U% `kAťF!LFbXXw"  E6 B@*?V.:_13k;09?%?39{?M A?5 2/ 5rABCHD: # ;h >TPE='AU@^tE?@ 3?@?@ ?UP6 t` ]?t#"D an&]juLLu b x[>>gUB5 I`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.lT>4>Ud@9 # @ a"% B`9LRh G"! 6B'=3/8/1313?>X?j?31??/; ??On31!2/;RrABCUHLuD  j>h: JTP5 AM!MU@<@ 3?^?@ ?P >tA`  n&]<t"D_ a? U>ub7>u ajM >)[ PMJg>UI`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.lJ$JUBh 3 M >a"a#ʢ ;@pqʼ?>Vb]f3"2}:*P#[$l>!AJ/\/n/Ѐ///<-n1/' 1/ ??/?n_H;] < , Fg% [#CT D\{B TcW% ]@e_dm% o+_ T ]XaGl% ]zds% ^~{% ` bUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUGu ,  ; ZHPW c Pd\ O A +b?DNXXJNqUI`?Copyright (c) 2001 Microsoft Corporation. All s reserved.`Bn8e Z[-E)<#UXH!$N#UHLuD  j>h: JTP5 AM!MU@@?W?P >tA` aYt ?U->ubF>u PK >[ PJ5Jg>U,F,,I`?Copyright (c) 2001 Microsoft Corporation. All "s reservedO.lJ$JUh 3 Mz >wa"a# ;@"?\>Vb]fU3"}:*P#[$>!AJ/\/n////j<-4"/{' 1/ ??/?HD: # ;h >TPE='AU@A?@?@?P*6 t` ]?t#)uLu b ܎x>>gU(B((5 I`?Copyright (c) 2001 Microsoft Corporation. All "s reserved.l>4>Ud9 # J@ Wa"% ` ?LRh G"! 56B'=3/8/1313??X?j?31=?/; ?? On31!29O;rABC_H'򖐗]  P,F% Te#|T f^B % k]@ekno+UWT q]SaG_t% ]|% @hϩ% jUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUGu ,4E XUI5?mb?@ t¿ Q?Gz?u??UGD # h$^T UUބU@?@?@??Py u` ?muU`  Vb& &8RVESNU>DNXNqU[ `I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.uB>e]G-EUNH!$X#UHLuD  >h$JTB 3 M'MU@v"u}?@?@݊>kUP >tA`  G7?tj WGp >uRu > >br JkJ #>U KKJ>g!!I`?Copyright (c) 2001 Microsoft Corporation. All A"s reserved.lJ ,JUh    >a"% ` ?KTZPpX! O6( K?f8:fi13u?? ?Ji1!2?5>rM6BT9 #?@?@tv>P-DT! A-u `u bu  kh"J[u` ?xu#Sb& nh>M>=U2N贁N#{?<bB\}t  Gl"tw"l"r'$I$Iҿ$/$'B"/% !7-+? gw1w15 Ic`?Copyright (c) 2001 Microsoft Corporation. All 2s reserved.l>#!Ud#3 Az wa3Ba;CB@:9:y'BZEsOM_Hu"] M_ zF% lw#T \mTB TW% ]@e\ko+WT ]BaG_L% ]k% co  %? qVUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZU Gu ,>  밻Y `;l p:b|=x|@ tUﴱ?@N{_? ^(_>3??HD:  # ;h#$>T P#3 AU@@BH>32N贁N{?H<CeuBg5 I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.l> (>Ud9 #} a{"Wa# c#< % !B%?@j}GLA>/ $ 0>X#3%Q1;P3#<7UGD # h$^T UUބU@?o@qP?{||= w=Py 86R %u` [? <uU` +O b ҎqUd`I`?Copyright (c) 2001 Microsoft Corporation. All s reserved.Be ZB-YUH3_0H򐑗] L_  Fl% tw#T >uUWB9G]@9<% o+ęT ]Ga,%+ ]$~wbUFDfP h-RTUUU[UI?A?A3e* ) bYb)4)t$P) %!ueqYkZUHu , _ ;C OU V\QH?+mb?Nh6i?@N{?3 ?UHLD t >ih$JT 3 M>U@? \?P >* Jm>uA` W?+2<uFO >bJ J32N贁N{?H?S>gI`?Copyright (c) 2001 Microsoft Corporation. All )"s reserved.lJ]UhzMz >wa"a# #<B<h+@/L?tf!A(s'11 ///.?N;U#Bc?K)?;?M?_?<3?FO)O 5_H'ޑ] t_ /F% yw#lT SzZB LW% ]@eTko+DT ]5a% ]UFDfP h-RTUUUIV?A5?d \ck$P%!CeqYk HuC 5߃ bп?䯲p? 4 ?HD" # E=h,>TYY#AAU@?;fP-DT!?>Bu `u bu  -B .Bu` ?Ju#U"B4$G7YAi>gBUI`?Copyright (c) 2001 Microsoft Corporation. All s reserved.EBG,?$q'Bl"{/% '-/ #0zGzC6ddl>#l!Ud#5= ,y /T7 UI<+ @Ill??I?^k$P.%![R@j{؍VqsU7 }:e%Z  $Hu \ۿO߶w\߿ w $3 1wwU1X>w(w.1OwwVbl?7q?` `4?@[˿UHDF D# h,TUU#7 #U@Ill?@q?@Py 4bA4uL`R#-$4R.4GtT4a  R74U U#"4k{au!*J!*!*{ݠЃ!"ZbU ++++ + & Vx 6L3'2gB!!#z IX`?Copyright (c) 2001 Microsoft Corporation. All t2s rese?rved.zI Zi#ZP;5| #̓'2?n  Z N9FA ``Lock Text Edit_r%B O)` AAB`Guard(0)~&OB1DJBuA7OpF#@W` BDeleteU[% 0OhWK_4 QF@ oT AJ-37"AUJ UUUt4D@w; ?>@ DrT >C-oT F 7At4D@w; ?>@ pT A>-oT 7"At4D@w; ?>@ rT A-pT 7"A t4D@w; ?>@ rT 3A>-pT 97"A!t4D@w; ?>@ zT A>-lyT 7"A"t4D@w; ?>@ D}T χA>-{T 7"A#t4D@w; ?>@ T A>-LT #7"A$t4D@w; ?>@ ,T kA>-tT q7"A%t4D@w; ?>@ T A>-@ T A>-DT 7"A't4D@w; ?>@ \T UA>-T [7"A(t4D@w; ?>@ T A>-đT 7"A)t4D@w; ?>@ TT A>-̑T 7"A*t4D@w; ?>@ T ?A>-$T E7"A+t4D@w; ?>@ \T A>-ԑT 7"A,-t4D@w; ?>@ ̖T ۊ A>-ܑT 7A.t4D@w; ?>@ T /A>-LT 57/t4D@w; ?>@ lT } A>-T 7AU6 U12U34578t4 D@w; ?>@ T ы+C-T 7AU. U23U458<t4 D@w; ?>@DT N'C\T u7AU2 U34U58=>t4 D@w; ?>@ T Č'C-4T 7AUF U2U3456U78>?@At4D@w; ?>@ T =;C-lT x 7AU6 U23U4578Bt4 D@w; ?>@ DT ʍ+C-T 7AU6 U2U34578t4 D@w; ?>@ \T G+C-IJT r 7AUN U2U3456U78;>U@EGIt4D@w; ?>@ TT ĎAC-T :UB U2U3456U78@GJt4D@w; ?>@ $T W8C-ԲT 7AUV UUUU345Lt4D@w; ?>@ \U HC-T )/AU* U3458Mt4 D@w; ?>@ DT |$C-|T 7AU6 UU345NOt4 D@w; ?>@ T .C-\T /AU* U3458Pt4 D@w; ?>@ dT s$C-lT 7AUN U34U58QRUSTUVUWXYZt4D@w; ?>@ U AC-T *:U45`abt4D@w; ?>@ \T |}C-,T 7"AU45abct4D@w; ?>@ T ے}C-|T 7"AU45abdt4D@w; ?>@ T :C-T N7"A45et4D@w; ?>@ @ T C-dT AU45git4D@w; ?>@ T ]C-T n 7A45jt4D@w; ?>@ \T A-T 7;U* U3458lt4 D@w; ?>@ U $C-T C 7A45nt4D@w; ?>@ T A-lT 7;UV UUUU345st4D@w; ?>@ $T HC-T @ T !C-T 7AU& U345t4 D@w; ?>@ T !}C-T #7AUR U0U2345U678;U>@EGIt4D@w; ?>@ U tEC-,T 7AU: UU345FNOt4D@w; ?>@ T 1C-@ lU HC-T 7AUV UUUU345yt4D@w; ?>@ <U (HC-LU p 7AU6 U23U4578}t4 D@w; ?>@ U ™+C-U 7AUB U2U3456U78@Gt4D@w; ?>@ $J ?8C-J w 7A5@PT ąDR@tPT LLR@4QT FR@QT ER@tT ;FR@xT FR@{T ׇFR@T}T %FR@T sFR@T FR@T FR@T ]FR@T FR@lT FR@T GFR@T FR@T HR@$T ;BR@\T HR@ T LR@ T {IR@T LR@4T ~LR@ĭT LR@T xLR@T LR@T LR@lT /MR@T LR@tT &MR@T LR@T 0LR@T IR@ z_/3}"7Pbt(:L^p77R3U (j!U"#$%U&'()U*+,-U./01U2345U6789U:;<=W?@AUBCDEUFGHIUJKLMUNOPQURSTUUVWXYUZ[\]U^o3abUcdefUghijUklmn3UpqrsUtuvwUxyz{|G~32oi0tE0t01OOM"Ř`&xۇ/`b!?2M2yOOO !Op'c@eJ"nOO_MB _S_lTE O E 0!E%2__!_,0hBp_JCi0Ud0G0nV0r0ii01o!!>_Oo1Uz[E50A=0I)0NB1 !o&3T!>oo1!V oM S.1!"S 0a0po!O3H!f !"+ 0~ '%HO"!"l0mR1O{pt ds!n(ď֏ifGYk}4şןv1",>Pbtί(:LJR1b"!"F MDB L"V!rUS0s0v3f!q /wIC3e!_-CT 0P-0_i0pbUa_{pr s01!ܵB\rܮS@fʳny01Cܵ!_'M2N!"c0a0s-i0p*0_0is_˴<#!P#ld0r2ܵ_QE?ýZ! ߊh}0r1CٸNaD?WȊ1"ߪϼܵMxb9ILY϶uf1"J߾xIG|"1"q0a0iZQo2n!ʱd :0a{p< s nD Cg+s\ۙyI?rt!o0QL^!\BʱlhKT D+`v1EĠBn22eaGIo|'E"nu0 RV!\*:$NǮ,"!}""EjlҶd3C I\ uwa(ın0s]0$*fn0\!0yWZ^1ܵ;Q?F^qt!v0}ܚPJ|9 j /N1t#'JWJfjˤ!S0cWMT1rܵX;@z*Ot$d[DrJ1tD{]qrLǿWOtWy0cy0x01lQܵ3tHNɈM/?;8pNjД!A,1pXxq*r41tq3d#Go(A/2XSBzqrAܵ ݪ2APM ef?x?GT)wYjcI!)o%A°i$O6OHGtwIE]GXDO_rÔE'`N;YGEOKm$HV8_J_[Ej]M5P=9'J !??ԱOOoAI?Ӽ__HGt(AJBm^]5C]Ա'$Rp\KBc( tźs70(iyo AI  JxoorMUn G_2Vq{Rdϰ 4MG w05>rL"OZEq\3 ^U#s_l"EE6sPA41Pngq")SIG++޴t,{녛L_oh9Q}ܵ 9M3> {7I[yHHIf$yKDѬ^5\BrFop KDTD'`ÇbU\u" h[5.*ab_|YܵL"BǼi=ޏr?q܅J!?N%۷ 2LC>sL,'3{1<;ҟگ(g-0K#UԱg5_u]&G9@LL%7\hO!t8#_yk bQŸЯ`eBqzOE1y>A2N`(R$f-G?"ǁ A^O@;)|4EQ$wHdccq¿Կ(_=`A]>EfTf(Dc =F,S8$tݣ$6mEڽEw<%T1tC w rh^ ]lN?ғTfJҞlD5D`iKDa𒝀ߠkOJBwO,v}*`mNa?0hiDбN?}wjY.@J{-EDyljX2F0zIBl~J (xM ע"respo]niblty /@#q5:Au7ysǑz, kG)? `(0pYfD*!:H(4T,>P2zzOxoE?)c2ȯگ/{G 1%e KD6E? Xb=[{BB'4ֿf jEI N9xFl>Ixq_rrgJ:(w`zqcs`)O]T2nDiMuIc4 2?A-*C)( ȁG?sSodsƁLD.ИBf jE,L׸Y=+u4(!JU=C?СKn0@'³;EiŘ_|$nEr/Z&T:V_echO^>0-F3w%<+`gPHI5CxЃ__N53$wvH%J,rj( |jE6 G;b{D2ngHZlءK$P|Ǣb\xO!7DĢQ lRdrW+ mN;9K3@UngL^r;@ٿ; kfxrjL>xV="m(Q^F'_oyr/$<_JО./@/d/0G ̗$hF&xWAt'puOʐ3_GXr˔ooPRӔAm9") zBGvJ*o*<ô!M?p9bt7,oUEG)A :oΏ* WM#z˸ćbH|êIwu#]2O~,}tj7Bk6OED,i舕9_0aՒ_- n76-Ia()k<6K͂lJg5}/LN`oWkJ^è/jK#A-씈1C*Ta@N6CpΟhӬvFI_oV0#DreiҒO CDwqR??X N27cIg;^&tv#AσZO$M{9C-G?U" %UUfvEҺ]_FHCëtGCkmCJ5 q#NI?nHZc70_ʅ t<6XDm= { 3}?7zG [=BpBV?>\B8bU+һj&wb$I3IQ૏asߙsHN.Mӡ&ID[! WmO j}documentain.wb$I3IQ9C-GULn76-Ia()k((Ocp!rsru;VsA .zcBوNMr[ `8,>t^mMxVec'f%g`EQI0WvT#.0BM8iIJMtVls[1.*][m"3U v@c.D}.B!0:/L/.HU%JgS' /92t@NR|//. !-8k|{0cF`%rp'2s%0bi0y+-!< LuvK*m!01i0s>Xnp_$N0Z0Ⱥl2"?GRϥF -Ð+p"1s01c(5"o3/k@u%ٞ/2 -4Gs$@PIb"L/ RMH ???і_KA12"`dOOFr=F?_k2 __0_Ff̊2ByY|O/_KzwgJR qt?__Z/GG"e??8}7DKw95>oPo.a]B]O`lOv HL?sU2eI_0a_`CH@۩Q,os OOECG-}z>OPOѰ hLlZfoo;s$ I[Ϥ@??=.A rst:womx|휪Mj+R]_rchsA:nG?n ;20kQGA4uxq3:@X aSe_*Jj]L?qÔoz_]NMDBgS)?0?_6pFeU???كkLJCA?B? O4[3KAcOnXf\}uLO^OD)w;3M _BMlOOO/ENJLZv_UFs1PA8_O_~}z^ M? .I(_:_L_6S@m0`i5lP1dXJO_/2InH__$߱^]M=*M].r#D?8=h{"av`ae :'p('p[?bx],/rBEJs 1/ 5"\K(Uߠjo|o~ʊaI?P=*d?v?(AV:hOO2oDo`'*"ORG_oӞMpvn__nF5)k86?)G~S 2~wCMNgxB responibltyNk8EȠUoeai1T*2lNo`Wted_cumnFl3.D bNo؁RllvwjIo֪WpsmEisdELc,B=>a_tig:([ʋelED s])QigH: l͙PKbnt LٝNUi=ctZ XjqIObH+/ T -(<BM_Hy`:Ef e]o1TOz-// ߈8Y=Iyt5%C_H2o[0rY0e(F/X/ȽR@ӅJVN?`?/=(X.ߛ@0ItoPo (]>Ll?47#0=acG>!_x pl.fpl]rpbhOtXO%~HF*TJUlQLaoouP8OW?6Pko lݑtH}㢤* d|FLy? Od}((ėHWnU8 ZBEZ/ ?{E6E@f?f x FA?@bbt mO~B -#lПj봋 D_VX mOS-04HuCFW]A1ckFWs60BH8@aedh q1JyJ"?hM{QTgxĩ9D\Δ.ڎDVƓD$DlLQ)b@ƿؿ&.ܘHz2(4&tEA~ǀް_rCKL?olO% mjZ!Hu䄡AS\CIA?[$D_V_h_ k'qTzIMFQ6PqO?kN 7_oR&e5(LqLm]Au %TGzC)Sx_ rB#hhxI/2O_$g7W.IN590?B?eL0eǴ]h_OOEAUG.>__|Oa4^ADv@OOJoO tH0iFroooZc7Kh(:o hOwNڢfQ((GcF8nk"n?xҰ "HNT^!<4/mm}:X]/w3mJ94ST:Akm__ppHşA :_Dhq#oDㆇtq_jՐ$ .EY$Ք" 6k-NEb_ lHGYLrE/tEbl$*IsNv?B):~츮@9Z7.d*hjquo{ vL9XN?|vC"q rqaQrr}LRuxk(JY+~ۻρU5I8j0B`U>H,bxtuB ìCZ6w/3L%˜wp9ϗߧVB W5orFb 97ti/dROOENWBL*ZqtϠwhϠR[%a$62ơRLiW!B ϘYhQ{KlJ>:LϚsn @A9 . _xlϠehzzX;ѼBUT5(ߘHs*@D8߀[.s6$.ZOܱk>ү䯘uK/qjD|3ϖ cro`o (^&GC SN__auS%zIs*O7lo*qYu#NGk= П DA[qPb{> RJqU4+w5$tIxgღ(DA9k@]jsw$ڝ> O偌ˎпpEtqL?o\q(":;wIp1ɩTfx͎,g1Kr"iNL"oς|CHyA{uR"Zn%|7{@y/~ߐߢms1LQ1(:(BbwOVg[R6`Bf:C'ZFM"|A&ƅ"!CO?BA|WZot=rF9$¬ @eч}ã£:RL!<$C$@ rG/z Ͽow; 5LaIoϲ@D^BJ0D(\!ߏ Sz$}7G?j/jTWE@F:_" "rnAL9SXIPBh 0/!_DZ7RTW~+DUW~NoҮHv4*TW>/J?~dpH//j@lI3W6/TW0*D@lb/t//*rU@?獹/ʷ.+L.J%kgA///r)~q/F>QF'?W G,企þlAI?[?"n9G? ?TW|XE2b???'(D ?TWMN -K0 *OP yUHC.9ݢu lF2hA·ў NMtF?>\A7햿NA":"4IrM^DbVbG?IT^BGpF3}#O,ȟbßxp\Ob?=]<FS?EI;0]:> @BOjfxĦp@;GgL&},ǽ. uJՁ{ x#|?N?eGN`ۊoFH:|d 8A'K0"o.@fveޮF1H0"DrDcwuK5]E"nSEk_<Ѽigc؂)X~E{x߼߂oBPGz!^t~LH% SJc!σ fѶrc;%@^VS.@Rzљ}J??>e\?" Es "&documentain vR&H4ؠN is R r4ʯCVh. pyItvp8n p /xN[-8W9lp~9^ȫE)޵7RprIiIc? ގFN@_ hrmv_el5r5lR mM ALtկusaisoHkX@,RGZ y1"LpHO{6>N`Kݰ|ZA//7ϴ#:4/F/f-q>JljzM#/UD!!g'1/*ٸb5K^3//+hE*`K3ٞG c;%@^VS* fJϸ܂@?n`[@?{D:ȳt݀*QAy 2RhYOk fLu&Ώ(UBTM?D#Џ⏎'pW<ۓN'n' ssibO lO ,>G Dg>ğ֟ DNN*FXqmvWiU*p:=-NDK^ίeEWRsbRdn[ qI.on^/AE2 Iԍ[H M5B#VDz,kO%Ke 7Gik?ύ(BDK3OB~UwACES_TYPl FtEpKB_PR$ο"lZ:NHw+@R !GT,'HZn/hhB6S2Ϙmr@EFNa*E jFEZG|+O'PROE16H'B"RErRcQdbhYD$ t 9 7џTMjlBvYȂJI1ςUBLI@&)Huc[``M8\| "3y+lOG ]GV )GY8Fq|1IV@&)Hie[POzpLjhgg{Ax߇z3K DMqb[| }ugX_QrD&z:A7 Rms3T*D jߘ/B%Ϥ@)+Wx?ͬb*Cg]G|.QnσGHڻt?EBOJڏ|%!#r(C?ѬEVlpM:VD/?23$HEJ0?B?.{O]-e|//0=J=Nqt??GpIkpÐjfgJ? 8g__+M7"qjo7 0\PD>_Ç3mJ' H?L8su_MuS>_P_ttYU3#O5Ee T>PdUaMpMθ UU U UUUU!"#$%&'()*+,-.*/01U3456U789:U;<=>U?@ABUCDEFUGHIJUKLMNUOQRSUTUVWUXYZ[U\]^_U`abcUdefgUhijkUlmnoUpqrsu//P\^st}:)lf!<sVBf'sv)nf'mq%pw$,y&Z%>u<}eau tg" 2%/`-# #@B/K?%VCas eq 1rJ %yt5_yUomng s tmt11_ 4n27 oPobotooooȿ$6Hڋ,>O1aBTfϴϊߴaC1bBy2}1C@U(/:/P?Sk$a1..9qCu.ryHu2h^A/ ?/as?0?|y__1vq"Qio"j>j>þ___oi$6a&8$DVL6H̍?{'9?ߠs?O6OHOZO_/OO OO$?"_FUP_/tYʨT 0EpHDp)CD@SRPpIN!J?EP R CEU@S!J? ~IRBUU@bKD<6/8J.O .bt2oXojoTL^oo[[ $@OS_ U\6UAY$(_ooDoL^ot̏o+/I/[/(x/#/'/x?@?8???@?~f?௜?#Eڕ?=JqF`ncɺp 'O_)NO`E^OCO\ȵMȳW~><_N_`__),Y4r11SG)Xɿۿ#5W\ӬϾϨQ(F_UC+#T0Vk BےNqC+-1CUWNw{hw pe_rsitwncTFAy\sm+atc ' HL8s˅>L[drutuo_֩e M2A#8,> `J5SA!CPާ  oI˜o2UWrpn ub l tyjJs XE*out>L v(%D_ F0l=R ;y[C ?$;+  RR%7YB<,6N nQ;A~c4Ja gC( rg@ǡk5KCǭ66/H/ TT/!H?]G bzr<N P9^"AtOBc; ݳ\H@` .'efC0u0!vC0lROEN)2M:`ڃOmˏhG/? 4tcDbڭ#b//SK5x,_eqBG)$nKR@3-dS!o@hB + /YtE:ft<"`OrO &dM,aD "z__WZMrGA@0VOA]N_&D\4F?X __Q]]E=Gi_?Yn@O_O7ٺHcɑ_o"oSJO✵Lo^o_"v:MgQaN`[eqC?*_<_&fmLEZ.Upom}5.4'CBvI QC02O ODI]N/ZOI8љ&8ȅEKHb'҇LqOO8i BG-oi1"DkgOk7~u2n*_h K1ƿؿ DLHUzA?C=YNյs[/0/:TjnK̵K%g &L.`o;PD&9&?8?* 6:O{LAIoߪP}| k!Cr[^* N2"ӦYFJ%d9??7u3H@Fo?8fO|7׽Cշ8OO&M&MxO`mK?=*W!p!e////ZG6Y*_<_* ")]#Ah߱//XF!0NPh^@%1___y|] PFs1Oao!oidY@?{PNo`oWdJN8lh& DqAO=Gr7ԇhl5BM *F ;) |/W񍦩Bh5 2z-V'>NFB*̥ԏ}VL%< 8<F?شDzEruslz/_oooB;Io1MG=i DqC/LmhiOH+]8J?QB[I"?m$u!KD!-8$2D* ƹB4 ??ON2MnIXB021zNƯدD]fM61BPjgfXjxrNG -22ƽjuc=")Lm=Z%2OꃱI:4DBU?j* {BT0MrHx772Dϴ'Y,^@J\S!OOڢBá2yBTAISz)L"tL%CX-y0i$oc޿ʟПIؼE3N}<("4* w$=ID\CyPSAWWPl,0]N@Ag@q* %٢2IǨ*persitnc͸@eWv{arso) b!l!tyԧ.yGW+sWma)t!c Fç"_b#rc% Y׼yLHKz A7d_cu(t`AʩEq,ʆ$ u3A =;5,UJv_gas[0.*_UŪɪͪJӁ+ڪR=TJmUE1]O!fvMRJ[ !ASCDMk!k&09F%Q0dBd?O_ ,p-M(0!IO[OzFEs OOQ`w\$BAxB1oTjW1H$YQh6K2} ЇBV_h_ mw+AvO`mK=F!0NPh^@< 8<FܱشDzCX-y6DaC59MXþ M1TjnK̵KܡQB[I99WO$Fk1UJϥ1SB!3bmgQ_f1`*lU_oQdq$s~E:oҲې>!lpldGubkgR>P?E!E?dk!SeT]SC_N! zvGBy| Nq_F@Jc5R!"Rci"uF)Nt!͏ EIuk:1w}&uPHIt$Ipoxh!2ngVq2g;Aȓtmt#/ZCE^1ewi_d:DHĐNCxB](GY k}$6.,[Ns{.1 G!XA9fF= tckmK3?L=_|NL.@G&uZs^ HW蔮=$gwlv7Alkva!92AɑqSኚ!ϵ'iGL+JT\`z{KLܦ! gO߾ !-O1DޙOH0W'GpP80 C?I2:!w\+ UE#b.@ߨG\0jbYO>&xTɗUJ?5󐷂V˚dBEs2ygnPE{uc$6#] FV(klu#X3GTxuJJQ듀& SK oG~ ́z)Iib5ۊ! UiTGy)4 !?aE1YM  8r1k}UՃc:FaR!a$]VjL?-w-?H5SKI"!R4BcC*T?'b!1ҢERFxm@xTBrǁPbEMN{ӏkW0d/$B?ئ)1sJ#x%? @ W\%spo b( jMKq//!oE?MD/V/v[ %$FM ; //b6cOI&E=H//t]CmH?eK#@/ȥIaJwj['gJEfuAfmtewK'W AQfuܟ{ e~OzP&j??ץK\GeCpЛ4??^~2ht_O: (N??AK]7F2Cj?l_~_R2O_CB=NA1_C_adyFV,0oBobPpJN +bc tpupt2O;CG}@sf\:2]Œ pNҟO۶$Ac@<ΏR0|TL|Jǩ[X]yH?dFjLx6 Jޟ`u JO%$G P tIK ?UA:0Zdjs"Nѫ#>Ÿԟk2vKS+ܓ)E+|:IJ(Q.J͒[\DŽVbO$b4+5D-m3WR>P2m0O?qp4[QKCx&FXxVįB qüί`vK|$L_`7" whW.yO=~J?ScJs=Կ(Ͼl+J_ќBϚϨ#f$qKJ:ԏLkٮ@ J\Ϩ#3$%HOL2upI3 OU1YKTlN ROGҞaעz3a0=-Mrڂ&yGA-OFNBh"r1V"qf] AEAn+$NOaЮsaBr7t3KKf̧ERB tewnc?0E ?0doumtaJi%nDpDG d{_ieqi .1REF "Zf x]jlgMDMhf.@PD&XpLҎ ohr | htۢG2a@u-]I0? @JZ , oH IOիo rle_D!sU vxx ~-khϹJ6W xIpIss(J ~8<@pOysbΦ n r )(COL`^Sn2RCOqǍMf//*:<]%L?Kh<N?烅O&y@\??[RʺNJVOhO$Kf==Q&\GV\v?B?9ǿML\ (Q OO1Os~t'I`H&OO? :OzX*UE_?l_l_JP __zOSJGY.j`IQ mA`>ai X! ߄Y1NGB2*oN;8 >ewT@O."4>!cFdv 9AeAOPPddlͯWAAqw՚.@߀G(O:4 eaϪLDP"hb$ Eɰǝ͠`E dUBߎ; @GI?So2{h/rI_grL!i9Tt#EH*<̏i F?⏉nN&c=REXJ?掾Vѳbx`ҲK x<-"l~ V4G4o7)Wvҏ@]/Of+ P')K? Mدx(Y@;TZwPb7i2xLTEi`J"7Fii^I?.j ᙾXKFC885Şn{d/ U#E8oF.@"XUP6B|(fǟJ;~7@?vx" ` McJ;562FLE|AZ>PR cْL`p. RESM}XD0;9w"<@FF2b/t/f- -xԆ_"Mτ*W´4~}DƦqԡ//U9`LDJ ihb//L-l=Iau۽?/)-YL?A /?Vz('$KUmH OO?=DM j?DUÇ(qQaspdSrH߫0HB [F?BOO`1"C(Pe ')7G բPt_NZ=C?<:h8'|Jj1} .]m?TOϰHy5šQCLAS`_TYPE`c3V-L5]"ToӴ:.PiOC?[ ooHESCzN"ϐt_K 1N:L?T5[Ak 4` `7ǃξ`;|}rl2zlLG~j5JE¯`79F^₅c$Q2_!C[\MrmQ]BTT~J$D#^p2kvrHygvR= cD7)%#oo2 ^{@K "joZ*))JSu-2š^A$+R$ϞNTFG4xI:9LޱnQoUb+pe&&7 KIr1+Pbއ [~HKv!^LOlh6XϠ2CFnFֿ* l\3H?S]XL^erD\E0>' %Gr2 F_VR`U¥`LaotuF\IM?OO/EcDŽ?uNd+- riݐj|n )2ЩfN?pڮŸԟ}H~墈C7zvA]xC >qJy^:"_NK9F?p;| ~H EUr*#`ERqYK $zy\np1 ZK0B,𖏨ֿvBjMMz&nm 1Π[t ʆK(WvOO+?Z%sI;Gҏ(:x/â3B_&۰¿hK|WϢ 4.YcwJhAoBTϨ{ZF%Bӏ Ȍ] //E[9B?WA _/b'YGI۬fxv*՘X6KvXjd9?qBV}\e8RߜBJ\pEj,ː!mߝ YA̬ _uP*EQ!2I@p?,"]qC Tǿa$#g*m{D-8zv>xg H/B/zpݚ9eʛC?pZsOį_0h*Dh_jC>2lA@2ߞ71J!9DC[6+wa@g1* XFq,V^p6}GH?1>d7.NROlKLSKO  S#ƇD|gҴX}g"Fb9G}x0dn0U_e"l7d c@a $7f1>D#%4F"%O9 ??{c\Y)Fו%K#%f=@1nG@@ALbtuCS9KgpA0OBOHz%sE$Y*R11A#vOOw \(FkʁOOOqKM ⅂&p2pS$_6_j=VO'Ѐb_t_ bv=Cݓ"K^__(`W4 EOٱ˿ݿ#UɚD?i=If(ψ1Ag LE]HN`r4BD$gooU L.FH&>TJ5` L?fͿ2:TI &|ߎhF!ȭ.X5.s@i1o!gR1p_̟6a"FhǺ^$6 PGI@?(l`D߈1JuFaS@cΑ.@h PGI@(l`^@.9E!Tڐ:make_fl!t/en:[eR+e4t'tU]] ճH|n|+docSuG.in_ oOPX0lGrsop%d'B ` ^ ZrѶf@>|1˗A  z-9A%f9,fna+l'd%c+rAs{'D\Y ty₅?hIJ[f-g*<'ijEw[up/E u'Ԋđ ubrqJ5r84N?le)%E:6NҘ‡?HB1s=iipi J, 2n*>stc5 ,X1EFH2m}Clll -Y'B 2gcxp`a:nϲg 8Ӂ8L@Zz098@1x77-TOOn 4FZyFCqQ[aNZ`!0dzCNXJ/_Z0*]"l}0!<<858ZMEA n=H/t?p??/A?BHkOb//5Q%HAX @)??OI:Pt DBQIߌ(4OFOX:u{FzOO7o2p:Gܡfȵ":m= 1m'POO_Io JI~{,PT_0_wVNH+0b`_r_KUO9G1ŒK0$Ka%`rp$ұX!dsxtb1__o'u #1FJ¥Z$^opo'+K(lVo.o~ohMwJţCDM5гqsmo7oo(vcl dJYZlVB aǛ@.K pK?#fI8%!c2ooK8!搰K?.|X\2&8'Q)O dvOXm=}_+4TsHYO!QgaJCuljcq(tMjϼ:0J_^1mIeZ}K/?#] d[F:=>T|/̡B{&Q_I.$p!:?D/}jMr_$YE8%ffd EB>?A\̯ޯe\F.Oue񻊯{;MC >t6ֱ.@ yOEqSCs`HH?$IU@._L^Ϥ-[L?p8%dc$׺1trwK? ^KQFֿGAC Q,1P:nMT|*1o2bL5CtϪpB6EbW)y\v'ۥ2wH?x5͟r✱f>e͐@ձ:Px>$6|]NcMUR;`r^DOAރD߶P#ixL?3͗-'%KhC^ ionj4tFeFCn]"me/b1r_caUlAd1f;t eX3L-n'8s*1atcuVd!<_{B {~0uGr1spsbltyhGZK5+=l>VZf]Dy"Wo]p7*sMec1 YYAk_Vu/~ oGGwɧ%V?s;6 zcVVo B5D5$6T Lw:%*]bt|YKN#/QrHo$h'1VL`H#_DJgԈ=P/b/^ PA p* 0ncNh?Tc=C=՛㘊// ,]A'K{CO/$/;V^IKHg_4*v rMu?J?\?ZOT-"B +}}eb0Dg_֝oeyLyJ9-.+wb $Jﰖ"P-?{Do7_Ru$+ y@!5?̻]>G >fijN:eeB:Cئe$,SLV4 B=bF@&8ϊ 0}J?$ػ}h&~PQOX$B϶ψt>OfeǨUψ ҟ-oWK?suqXI"߀ Q4笙Nq)2a9gذ*Us[0. *#>Nr9$NHaN+PC~!fҲNt3L?-ZK4;Id}Ʒy@J :]P ҆2eGO?{9fxM}{L@l >`?FG8Ĩ Ld!+!iF!"<"IM]n&JUm~}EDq?P?ٌʿ,e+IJp+/4?RB3kHhM𚙵-ź'DC؅.vQOZ lROO}洲VG|5/3ROdO۩ MǛIR_/RiONOONlqP5K;"݇ __h_  oK $i`v(S_scc!ڏ[MCKka.`VIRTUALapTYNOup__| @ eۖKRFo,(YсooIchGL(qooF;wK5$oot-KLY66iP/ӯcLs'DoVo^;gK؂.^iwMGKP_8"ANW4'0]otPgpRE{Mc7L?7{`.}b"4Nǥv,)Cdcng8JE6o ErqҟPźUJB=TJcbtNu-pV)B?( 2kEkS Տߴ@H5-E֫H>bcAsiiw3:R޿B ?+AYbEd1dگ8Nֿ Hc`rkqghpB_-=9(2ӨFLӃnCCҢvψgNnZ;gDA2ea ͬr%cmaJ0b(rb}eTR@ANj?L*bu %T![D xU} :3g ew _"n0N/Q` Ls@?2Rp//Z B1F$// :PhO8l?}dLЌJ_|(?:?X Yl۳CƨP#E/?ϒxB3 K;>1r4 S?9SJKPxiOOC[GF>gM7DMtaӃb҈A!#&'2`"^?@*'g*__ke+E}yN ;0IbO$.>&8k"][:JFvk˫R `}meRA1odGOއT\p{M8C?¢wKbNץ4aNy&Poo{KMyK-hJSҏB~-rLD 6^p e=G'wq%fe)RHOkDQFvd>H{BBŨWPaBBΏp"gSHL&z :N .Z?کX M׶xȯگo ,eJ,!eTv$2CI N{@%N2&6=ؓUL^GALrO T<{,%VEf*<ϢgCs dؽ%ެSM֟يtam b{PL/$XvC?:N+bx_ oI,_*EC=?KCz__ >y ,F{Q2toO&hwFr^%A,o>oX |uKyFꦁ݇pijhbdN޻O=9e /[Lsutφ{ʨNPɑNN,e`hMЍI׶.{{ 9Gm"Tfbj$K?)# e@=b? L Lq/LO.@gޒ$.pLbO'7~{q9ʡKuW֛gfBVUxCQՑ(|/{2ΨD@5ʹZi"//ȳ'lL~j>޲Lw7@Zjoo~R# _YF'FˈҠPB,44F̛DڍuMtzJJu"榞j$eZ&V)HfDĻfTfxZ2=bJobDTzȏcIJO %R`ՖI\DmCOϓWuyNa(R"UiPJ]y՛RQZmav}W okC|onODTaΣ~^ DE>&Y;J\D! E߹\Cpz:d JwI2ORy B1@2!\respon?ib:IlIty6yLr`K7dCcWum=nSaSiCX %KJW@l_ka$Lus=mTisWRysJ`Q\*i?_Ieg;aOZ [_g3B`_21EvCiXZ]-ۗtmCQ3]HxTb7':#Ns 1FtP|rQD?X-DTI#AYC D-BAZ/l/(+j-PG/F[A~<91B:rI[1fb7Aȇ`/"/4/U9nvfHԂL//;7eB[ еaz^kI?ֽ]#W??~/G @MEYT[//QnuxD:5xpOO;M=<N6J1C4<f[2Qc=`?\CF:Gzv^2 O2ODO^lgGgB|O_?Oܵ}kK`7zN??_wFo$;_ oO߾|4Ftז`CooZ /8A@?b~AO]0mV~B Oj%44f`n`ahHZ`ݳZZE?:;15___^-=| =@^oooDTEa#0@oRoO H'*obaOJO|CL:UZaຏv}NIE63bFyo]^"h?6t;ipi r_3oAV^=MT4~5pkRIpI(:Zbg_ E--n&^piKFFQ"(:6VB?=>^4wE # ůVc}رI A&y0prScSo]?YzDxnh,F?{kFXԯڥѪ]:LuewC,}h(B. [j|̏1p͐OLIq Z 5A`M;](Ϡmڸ>hO:R8y7nCԿ VdEa?o>v:|E߰ʞ@Rߎ<uFQ:'&,>^qooB?bws-I/Ko}筲H9M@a,2DjB>id@oh<(1beJd7dmRe$_xa}@ 7WGKZUZUb/*p@'uIFqL S?CRGDk.@ "N$oCq0f,VfW3J,qZ-x]OJkx㥬HUci5M|#pQ :^WBfً//jV j 4-#}j"G/D5nQº'7v-V1J/Em1Vn//5%!En;//:HQ#V kURH=+yn??0 B1UgNO`O;=^=5#)HtQ2 ?Z6;?M>IRM?65 n??(OO sJX㜳OOrOĜȶOK'up;__HFOIL4<Ǻ?O"O DkX:1__mm<]53Lp*`6_5_M>xUN?oMXL_^_Ho- WAoM=noo?pB@)1̒so0oBo ˲FIF`;wuLl&IN%ą/A|}}5քG ɅoZ4oM>aĩE#M/w.@biu9gN aPbڽcz}B]eAV  H؋PRd.pUפSGI?! 5١K.=؂3ՏM>AC;?Cilhl J4Ϳ.@ J? `nLAń:L8)77eDfˌ}D!d\BJל |o֭5 <D :ՃzZAP;=gB a`AqK>U3vn&EAG'Y\wпD!P=kD"jN&Zs:H(HL)hQ߶r۴J5c" O0fv251M>G^!QAnvYZl~D!`eETDZE*8oP\a_Cbd@dbi@eO_ o^HJF21_o_*60>E?QtN`#hNPBxK[Baybae}_jvNN&gB 6ZNN4J*{ `[{Hr|0B+dm}fnElMERF԰Kqs`䁞OeK58F4l@RdP0_K/"&pԏT?.SM E1xa0kCZӘ )EyA]iEy7I `yE rr{7ÈG0{6oHm6ANXz0pdnEO? G@?51Cfl`cng@pBhC쮷^eNTծ8|k?]mNthۨRBHmhH/XWB5}.OO05Jz{XPbϖF ?NڭBd_įbT^cyHv?- Lj).+RnE j9E0G0athHc ϰKw5vE%s7bt߆+qI3OИmD߾ 1 -9kG?&JEk A_u%uϨeҙ'BdY([JHy\_Ht h\a5 @)=vooLU<8I Bb|ZNΜ E?*F_w4kGIE?|HWrEK)ցl~vVnGs;,t LnE2fY.F?QQS- <2E"Ʃ JIn uJW}@JžC?,\nv'GHb3+ Z/l/@߉>;z J!dq/}uY[t@7^,//:~*ElE6>Ho=-eDRAn":L^vFAͽDLA//V?v jM"u|?? ?:Z#VK,?>?P?}LiJQ%R}OO?]F _HwAR_d_KMbMe* EQ|$O6O_5I#j^Q__|zh{zIKK#<__&_6㖨P3MH9PoboOs9Nҵs1uOOovG'ļ0oom} gЃD?6Ljoo*ovضEgAP:GO E3NVi:oooxnj9P{ME..@!p$9L4W|h(:v<'BFVeҏ`lzi_Iտ25r*2o}e{c}*/2,Lm)WLS?T$CfnJ*/PbY jRMD^"vßrxqs`F H?BNBTZNS@G8]Yvr*K @xqss$5mOet5(eKU?:Wb+$6Hv=NK4%$nv_*%3OYo%tφZM~HbEےzP 8*c50,C;* Lϒp EG ܿ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~/ /Q=Lӳk)documenWta'in |P7JWr#mv#_0s'46v /NSA<$68 HWH imQ7l ,"MY;F{xD #Op@0a)"Y\fO\nIeeI/SMv~Us]aQiIs3buIMYE>P6 ȜƨI]@nsƦ8 CƏ>/P/D.]gkKJmd&Tfx/&NkDʳl5//b=p-i2N\APi8op71-XR> gE#O+j?|?6 KKčZ}?"?4?F?UPMfaM^䛳o&O8O/VJm=//O鯢xJ̼bHkOO?XMM0 CH?U9qpKv[PliTl)fCF{>R_d_6 oUO":ýhOzOO._t@uȯL/ZAW.}o(oOe Df@do__o`K 2 moog^ry6s;E>R_/-|eHmmOHJAtʙuU$bsk`uUp%a_`yk`9o_`_<j\ @{%`uzo13k3J'16BTocp!]WBso;\ÆJ?`9{afK^j`8J +kFMrg44ލ{THV2IbV_DF>7dž~6 ۏ:@? 1XBE&*Q_[g9L$'Lğ)<qF6'!D6hz XYDwKqwz v_z52kI|WI>b??OAyS-Z I?d/_6 B]B4Q! ƅFv?䛉Bϼ̏xNdyAqhI/ѯ)IR)`E[̕xPb5S<)I֦fvA\n<J A_Ova[omoߍGKqPt.SK DO-4ߨ񠥣)h̫H\BTY.Lu@yG/V&gB ,8  L6S"%pDtN&7 eCć2^bE(EsQfhJ%L׸>I~ES?_)tBz  S M[x/*Wĺb _ yWZ[TrL5N\?7 /lLAYvgIΊP>Cjj//r M6iL*<?jVO@E{6jU?ܖ.SaN"\PJFQ՟/z=D:zC] |=N` ?~Ձ!nEA@j@//??d QJ e??h?MlJT11.??OjˉOiF|ɻ!(_:_j{'EugC? __[MZ_halMERF԰2fY.FQQS-erNJUV8lHH9ByqPG/F[A~<9RysJ`Q\<N6J1 j9E00_V~B j%O? G@?5>id@ohhO:lzi_I2iPJ]y՛& 0 CHU9q#Op@0a)}lM76N/Rk'!{BNsۣ_ HOB>O_ oHWwS2LĿ==|Evl'lk$";>-H? qv"O(s4'VEWn^kul(ܔL*=A:荒jkCsTnv!~}H6y V6 sKtQi/l p!eWiKsjLi^"6s¬UC /8tAgcxlIrmHR{@iz>ЂC6z;/PLыၝHZȥh,yE|&ù8CMm]Ow+L%;ʏX܂ XHdч,OX_!ސxB|Ůp%_qasf $Dō)[EO/[M@lO| 4zNEedOP{%~ohU|_XdYNBҏv"xeH?8GD􂨹eqOX@bXj6EABUhzl;CJe+/t*S|AE?VP 2AD Je+/WGj B@IόPhas_1t/t/icDDDH`fXUM&6| per1i5en?ei|aQBz0doN?um8oj'OFٗow_B3n Bf yf/M"I9~uIf W2B 31Weq'6f D|Ͽ z#H?քF^p`6DC q+o7hj h b+'&A]h$-|ۏ F4w8.m 8blDV,?z$9 C[W // VhkNSq ԍShHP%*<C?^?p?q!/KBq?V/| .3rBm5'A,O>O+f.RA +4L'\4/F/Os=D?#ZOO/ZMM|2O$5fal??z'sn1s.D`SKJ_\_ 룇eXnGbWn'bl9bHo|C,!:EI l+rPsPQb=l=ty36>oD&?G)jO?X3xFm+Xk3/_!_ErOV.X0oBo7|0r@?TSQ_ocMK~+_;@ָ.o|OT|=O+wD>mn_0"}eŲ0F#^aeIKl7orlC,#]6Hj>4G5h߳OPrR#J{3C@Rb|F?eK'B|tX XYCߝA7_ 2 >xKLC`}250eN]FIf^Rq|}yJqBnjGHLqM3F#1fx]M[@!tҟ|X˂[Og]񝈿jcK2c@R>sK<'*ϲNeav(JІ*"aPp0y3q abf=S+yƂgGn1N`!"PV@1i8wϼς!D7 aQpς8/@bJ95=W{߼<ϖV%ewO0nRp,{pO) lL 0ٞM:L+ZEb='YJ2a'9࿪y)6@XN}GBl43 -qm4D%y_O7zeP$r_0tcF{tK_~zkR%@fNJuroQ| ^\AK 6(p߂ߢSKqpBg7v__dw7uD:Aoo45%!&fBΌ)B pw ??/B9%d)()Ņ ~@2㋲|gJNIOX ̿޿i6dF }?'_NGsA3w"4&(;Y=E5-rτۥH՝BOI؎Vhz@EXTt߆4##J_4-ğ֟rS0L*ȯ:9eC.Kng \D]y/zs|JMќrC8(:LݒeT+f KTLZoGȫ c$R@bEdocumenWta'in 9m L#Ѝ8<o'h#r36l lૠFz?cV$6nT+f KTޜLZH "}hI_Xi<_ln MbFNu(6Tv\-Lt_;Tɡ?sgmmjias3@,D+JJF4ÂTXj|EVK?u555Vh6FUDF2Weq!I DCA/0/T- (JUT!t pp r$&(`=@~&gC˲//zmWLOBD,pJs s01c0-b<=MyGߏpD!&fBΌ)B43E֘ vMEtmMk4/,STGu >GQ|_> A n__5DLWOշphq n`|anGb$'0\{ZDH9}֍B:IU5 qd/v//!ML ;ߏA/D.dE?aL6 m,wGWZ}^p/p\ŕKiL;v3fC{K*aa%ɟzRUO;CBr: *'L\Cյ NN,%?b4F֭jpQrI?(+ps@FqKʼnh9faa9qKKkIG5HƿؿX+&jL/BdǗ>BN_&XQO?eWGzF'x:.J[0(ʪ j@5!R_yDfmJIdcBXrЇngEq:[N\qOF7/FXƢBØ߮Xe> >H?2 zF6#׋;G#iŅwzbFAD.BK(E֋2Tfx5J ꭄqFXF+/;bKFԬaLAFxK@AM @ 6u6lG=l"Z(j DUPvn_3Oҽb{$.\(H_gRTfvf͇J^?׭^< _:I2>A/<>AKo@ZDur=40rQ9@J /axLxqIIBkbz//\4AMѣ Pb?,DI?]??T/cT.FvRUZ2BOTOx!_o⪏H EVf./ppDcEoo(q~8_)d-O VohoҐK#IR.o ookuO`9G\_#֐S4 Zotqo@_. A?W1R-GUɮ xWfl%0f7pQUd[w%CK5 $ZsJVGr\ԯ,N6i(;RdWokDL"`cZ4i4HgIВ3%㰼8T ܮEq<ⱑ2*ܓ1->O="f0L]I 6F*4f՚_U.?~3b$ӨD=IbfxߨK ?cU[kHdQ"&ϖX#^]q@m?][|ڰt?@߂ 1mC˱ V1nnWv,}=F{8t-1[ XixYNM;c-\]" t.FtYq1ϩ xHM03Fpersit nc ~˩H> vٙ&r sR oblty!ٜWINv;?s matc" RWE /@Lk)_Rt$$*1zʫ>@?(n`O<JdQc u@tR" a׿L+t. a5rd(rLA.hz$ t'A?<>*<o!zjL#U%Pid!/59HAթ9"^/@#[@dˡ/*/z/ '0VTF4<_zN&b11r"g//? *8YSO+W7OH?Z?$ 2 qG@+h ??{? /4fvOQOL_9}(t#0hdO@c]G_ 'f1'CdW4! ;5BKz}>JR87???Z:@C`AG$"dIO?_[@!HEOOl?DhGDZ2)bQn1Pan__ro#g B*"Y"oo(1 O@O^__"2MLLd]$Uf `l]_Ko]o{oo%=@5PVoo$ ]tuB&_Fzoo*M} K&l|ZBT^9ܺ5FKr|lr*ȉFB5(ШHLIIIs dOi_j-&DVHxM%@?xԏ$ Hm}IFjXÇY"5A2B`]2%oŔ18N1vQB<Ѯ]VfH-J'*%$*1 @A?!\;UN`fKAK /b`"$_Jex͔pE* [B{-h qy G!md$_6] UNa?x0BN)ra5EJy$`,@ר9Q\^U!(Ϻ(HvF1_2(?`5A 2ba!e_@v]%OcvrB,I2//nօM =2\?n?K?@+-GF]H.# yy$WpW=~A:MYuBOTOn'/$@l& ?0?A? +//\ [L-"c3 O?z Q"QOs raA(ip__"BjAb?\X_j_H$D1Mܶ@)a_/_Ġ,˶FFoǢJ__Y|6 FTjo o2oB)aL^eG}F"afb$qr/g=LAّDB_+ɷn`rba zmbtIۊ@fFFDEH"×ށ;DH2`5yMXDCƏ؏n.P7 K;(oܿJOE?B u>N|>>/AAl.TtpeYLk<o.؟0{iO>LZr!NbRpnʺEFK["n\ SH{oo1zɡkC?=k'J\AEPL;-ݕnKoǤ1{DX}(oD0H/FXdbR*FC8|6ulH0u-k ʿܿLՠ(OgW_bB6H8F(w(dϠ̡:Vz9 6O(5TygLbtϖ{&J0:_< 5f vDgG#HDVvvWM;#0{{mO&8aB\Ezd9G`o% &Ϭ6u}(F'@ 2kҁBŨHb!uery 1qnu"6u%O.ZD d^oS:EIO}; b mentai]o O8yG:(mchBr>kgIw򫭴dcu? XaJɐ_LBdcls9K/:r6HXϙw AّDB_(OgWkҁBŨH≠wAy2ukow_YKH!LA\rspsb:lty\8w4M,ռj+La4E0gWPl9"H/\+Bc FlLL+dp5!sE B!cA ->5ܮH-C,wsA ,D!i1 ?Wf8o`&0%C#D"aT !Y{S`D 0{0/B/"YqA'~D?_`kҞ w$ng""~3O#܏G/-\=.=*IF K- I@&_hؠ!//Zex Mvr//$Cv^^E/1o ~?h??9?Du?@lB OmOx( )(O:O-Y%=Oܙ\?Og򩸎-EefBoFTfI{zMS;Eok:#䋟2uyz@8Fү+i R~N{r̟\]+Uz"PDa2EZP i4D$FX)JAݕ) BN90 fx2D֑xѶ8N,̿83 oH[|؆ -m%H ُU2<ϘIC:H;Id@RXϤ9wϧ2/J2+OtXlWCmǭ0ZO?f-I[>:t߆/AIGPڿ_"jb+FO3 `Tfxϐ@bj3cHd3πIRXꡂ6kĮ>UJWݚN`WIe8IDL aTX֡6'*ȃAA h9.U5'w]OGy۾2sgge[ w(2lq ;5J~K.Tf$ MJ$xKxj @~޶͎mʗGmJFSTf0SP݁3+Hn11ү cs('w]_Oylong.(id-)'IO$Hd&*rep/sAbAlAtyPK ^ sqma1tAP_`P%IWpqUr{se1cq eg86(2@O۟E+c0 fi EPd9LU,d-ut11)"+ dulq@TuhjG}\n AnaL6 ț$/F?Y@R8hz 7QPu6F=tN7K@]: Z#w0h r]MKzR/Q%zGl;n// $Z ,AOdǒ//N:EE-?46/H/ӆ7OZWC 2 /O0+?2R?#iL~([D?O}uSxEKN-?? }^PLO^t??Hw2dE &hOzO 'T;JZM%E0OOO OBQr@<N]>=;BY^g6E__ ^ nJSĬoI4_F_ shm I ?/ox__!iBI1EbgO_N̹-0HrPzM_ooS&-o=2sE0o`tOo,3 RMySxoo zVe&eM?L]Oow| mIxl!oonօLa\N68JN:`UJ?>`3&%v HyGyUH?b;6?ʏN B=g7V͟6ypHGDѺ=F¿)GH N;7HJ.C?)+ཤ.Pp~TAi'%0Bߌ 1ɐy]Bb 5tN,N>W|ώN{.NOo!+ϕ كhE(D!2ojcO=5No611v kT`F_.qbNODJ˲_s  aDWj@U /B ﱙVEL.?Ӄ=<R/0!Pu gȡ RSSB#ZWvNS'LK?)BAbI7Kz[xyUљBMyMB(m-G?Ў D{3qdvug*,MQ㈫[Gm;Ci@VSxC//]Q;O.D[bN` C1|ǾF&S7 n.N?tg6/PK/a2\=TH8?*V?/ QT0C m* ?2?.Iv?iRb?t?VJh;lA//Z=RL,~A//2_v$?r"AdAP J?`ȋIOOa KSy^WyO.Oi+KRc __tWE9PObO"!) EjgZO8_4O_oP YѢ@.L2vǒao&oQ>GE-?cNVohog: K^S_Fр|CH/UoO$4MmIykr__C"orc`a#Z^<7I%Ш,Qo6|G@ﶅZ!5uI8&(-*<#,2vD&ǚ{HIfE-?TT.@!a=b;oem_`8LHB`r:_HHX$]M)*LjPX# hAǸ :noe%Us;_5I_;“.ӱ}CG#}o\8_kId-Pmume5jfNїbKpⱲp0lQkJ~"=N!uKq6HZ4n3EܒJ7'ϩХhrоmsl-<ea-l>;hKKGJK+D:& 2kK\Z_ɛ(u3rrdwc31A%+]M im?Ts`*aircvIssJ$aNAmqRqcRNR@cj FK14q+ fzcm)AJ%k !%jCcn@g=KS2ͶF?X_ݒޏhd>DBu#$ qIBpIPb84MbfIy `iarPuS&|LZrMZVHZg 73,oAAƂ+Cɂc (MA¯ԯWl@aiuMK!.r @وėG ac9b!z*֖D+y`X/8M/,qȿh} FA8uMYW@ÓsSBTT eJ?Eޖ/0[ϔK:&8H;zAr!tQz}N(.S I 8i@G]{YBߔbi-.*Dgcߒzߌ4T=)ʠEaYQsAҼT H3M&$>){LӧƷuoj!z%s^Х'NRqXx+A8OԊvq `J#?Y #U**HZ״w"4F鮋d.^Y}L tޒʹ#C6'KN,1JIEyA*z01ywLZǁĎn5l5`C@?JoQmSt!ԗ]B2XRUJLCiurޫI"l.,RuBnbko"6aMx8hkf)~|E?ab/0/pTA8cI~piB^/ $̕#&E@z^#bt]j#F?DrH?gcIu |$)ޡb2Ih'!??T{O ruuY2CReM_@cy jsL*RVOhOzOOb1w}rjb7K=\HOOT{_'Trre`cyC$RM.Jd_v_{a8e~QVB Da3`T7Tj1 Ù,T`ŶޕS4Q+ZmdL5?z?__7)Wl$gN^Z/oVqe(1JE+vVx??hǪ M? ?U4)zF.!- PR?p//YomBrf-qNG[$hǘMJ?;.6Pbw _·Ch0d?Sg#F(Xoo \̔R\/\Ar=2uo_;D{wxOO[4ȏڏ SNL 3fsP VftXdKhҩ(Ⱦ=YzDz?h6Ó%.wHQ:D3ul~:'N2nky*< +%S&(JxjXEyl at_ion|sC|/Lf0perssec%/&- MHK9<r%s#*bltyOODWhs%mnc)?,T`ض Chr$+L_%lc*; Mb*1 .`4/Or Zl^d[D X#kw v|.JNsJdudt#3S%r'ng Q'rGɀ6 //rE ,/.ůH`KxfN`}/,RA[Z,|ELxY6/6VM/B oa0e2 HQcd//å4 @P?>d@"/$OOZMG??b[DۏʕF?X?xlJsCdN???8?_$j#1 n]/D~ʃ%vx_lD*O =OOkBM*MMNO_%7MSHn$OOSFw=̇7oPOO_ 7T?__"O`j=`c ` {/VKOO_oDc+A~>34oFo76|UBp[=rooKJ_#A.KL`s*__o8o&ql1>cg7F&Ɵ,.;*3 u p uAX&jڶMf(C§t$_"tvqaX ƢDW_x\%2exCtdRaXMyV)N_;٦#Rj|_"fg"UcB?8!xRD$po7pL9pvKP{ck{gKrWUh 01uL?0vtdvaub]TU%c!OGHb~)rcpa=pQ΍Z EvN`4RGhv1ġDίANFN? ύ/2Nh!@Q3L@K7tφ(kYy[G~JH<_?CGA#T?̷_ pm7pl?Ѕfre?Dq^Ӵsf#bG 鷡8I&!b(= prLl<9SpBsm.1(1a ssSDqd@s7p(]z-D7r%,,>pV.A;pryB5qUXd1ayo BUCOqVooڟ\b-N~GRMYoo]9&kpHmj60BTk hko$A?{u @'>>Bi6"4eH@'?NU`r]Y=.Ky)qbPȏߏWBO° {Q"XNNP0[("R[JM ' `"NŲ7@O2"R8M1-o=%֟蟊]"?BTMV&0BU~OЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопêǪj'9K]o߁ߓߥ߷k. ~#C~J4[@ EO㲖}1ү,H(-L0 hn\^pL>#HZ]Q2DHQǿo%#G?"[s ./gd@?_˃]sma#tc*ٲ,T`ضig#edshYr3ҮLBTO(W3 dY'cu"tZ* UIO:|l.$m$Dtf^2 4esB|V'a6J\* ,zO=?<vm f_f jZLZa(, @s(O?g@X/ M}!V{WLK{1* NDmEAC/h$/6/M/$u[0l!2 O*I4HT;}//TD/1Ɵ%?/ OZ`EѤ,4??a^D?BͷD?V?* ~N&dd2????BNAn ?O"dD![,OO, aFcG"M-VFO_:ņCnX~~OOHI)CM#yYFOOh>sJ7ZA\jE__$_;_b ca ` ]@6ۏ8 >oPo* wgK1K$>0-om_h6M vWi  dƦL7nϪ/SJT]_', ȟPvMnlҿZ%O) @V$8 <e4E =}BL^boc ;s7DY>P(LN?aXߔOa;,S73RM+Ї2#, q;uXE?&sܕhKτ#;h[Ak6CPGHŜս+Mbs824F)XBHAQZ'tpva"A"?yc)Qx#|/K4Hn&w8o`#&R`FbLՐ1FK .E[6C'|DaRqCsgAc̘/_bc9!ONFfC=//q+/*ՐiypcR/fl{sOXjLLFGor///t/*_d3toK1RT z9NL ??.?uA?qivi{@O,w3;O ?$??{?s_R)R@IG$#} OO.OAO 2q@i1ER:aCT[}HOOOzO_p21hOfPMOG)"_"_4_G_Jg2gb{X0O;9Qo$oooqfCqwkՐWOSqѧZ(;g2c1fUNO4(/+2@Fdžg2#R-6CDNT#&9q)R- zFDp1N~~ȵvlQp_sRx-F ?[~K$7InR-8F)5#kExDy1hHfO2eOF+u5ۧv's8F!ʑH=m$BKtXsq8wJΟYB%Sۣ |1SbXCRjM_)=E8?Wu|1X>O`SDIePdv ϟ1#~1]rpQFHAtφϘϛtYBdr"fJn# 1QXR-P.jF? r߄ߜoe~)*7N>V}!uuLQ`1OfXQi{rR-zHȱfH1)HTaCVsT;*qM䕚Vh tiWon8o`& cpyraNVIzBE/dcuwmetaUesirm,N1 ,@J윖ٿPbtglbl>1 &"LeLQ VISHL&z :4D%yO76eFmqpwb$I3IQ޴ HLsU2]k@q*pM8lHH9ByqZ|€oJGz!bt.r#D8=!"ANW44#9@2 #G[DN  K:&8H;8W2B 31WurޫI"l.,R:O#$z/6E Xs,L׸Y=!"_=Eςˡ//dROOEN臘-CF:Gzv^2(?;C懖G}@sf\p= yUHC.97 S2L== ?^)$f.E] "|YKN#QrH*fxBFw{Vb!#w 7B< <4@tOz'!ijuEHNN\E҂iLyM9@|ZM~t/V(fDf,9a Q;A~c4Ff̊2ByY[WDVAfܜԍShHP%>oD&?)!FUDF28p?=]<FSEI;0]PHIt$Ipxϫh1]AeAOPPd"CX-yBUy7IJOoOPX0lG1J!9DC[6w9m L#߮Ѝ8lOEPL;-ݕnAّDB_ɷ!dGOއT\:45 AXe&ߣ9}֍B:IU5 q_JG*x7<BMHy`!zDxn@o3띎KAcnXfi BG-oiv,}=F{8t-#D /2GN!ڏ[MCKkP/|ۏ F4w8?VPoGGwɧ<vnwh|GjTxoHHp'`N;Y5}L })N(AV:h C4;G/ߨVh_@vpxIa`%Q_.s@i1o!F N NnaWi!2"jG0c\Y)Fו%#/1fb7A`4ƔBD$gt87@CO~LٝNUi=?і_KA12"`dږmL[7֤oۖdOij-& {&J0:_<4pԘ$Mo+ 4M E3NVi:oN:0'Y,^@J\S!x CLD*\0zTۈGdW1HM"PD&XpL&yGA-FN 擜CHğ`ƨI]ߔ@n,nAL9urPlAK"d:zC] |= S M[x*W!;9fE4}< H[Ÿ: !dzCNXJ_ZT4AMѣ "c3 Oz xUNoMXPH՝BOI؎ 8F(wL-F0ޑW^JYG}2Z0pOysbΦeϭFHk/!/ENJLZvUFJSK DO-43ms1LQ1JN 1\j4tFeFCn"$ >H¿2 !cIJO %H3Lp*`6pIE63bFy]!SK5x,kgOk7~u! 'մAi"A;5nUci5M|#pQ#)HtQ2mڸ>hO:A,e`hMЍI׶$)A^dLiͲq `H㢍/>sԍL,'3{`&]fM61BPjgNoHv4*MLh /E1-?0F\bO?'7~oJ ȁGsM~HbEےz|P7Jъ OOܵ}kK`7āzNtOXaJɐL細BOΰIRM65 _@H-#|rp VdEaO:HQ#|/*rU@獹 C>GUɮϚ x]uO`9G\#֐SС+`gPHI5CxЃ"EE6sPg؁DTEa#0p_`eG1 6z_οGmMZ\ӛ/.ZEBgYL_WdJN8lh& |QB[ID!7 eC2^O)RH?Ok'(D eߐe@|pXuС}y-%{H3Ho^]q@m][|ژ؁'!{BNsۣx?NTFG4xI:qСGBO0?0?9G`o% (OgW߸D!ZnEr؁a׿L+t.T?RRz1Iw7&|[c>D:ȳv,}=F{8t-xQrI(+_ZDur=b@6DC q_!ސxB|QaĩE#M/9`F ?Nϭ_P5A2B`]2AK /b`D!UNax@fFFDEHo>JljzM#UD? FN@ߪ_ h0z$}7Gj/jDnС9ǿML\ (_NE*`K3Glmx fJ܂cmaJ01ȂJI13G c}رI A&yD!AC;Cil')K? Mد =1qZ*))JSu-zhp#IVZR`1{'D\Y̟q#1f"K6XΠpIkmGÐjfXUBDK3OB~ύIv)J%Mt|&rD\E0> %G&oK&m?TO߰Hyd<&X^M!ո`ѝUD{]qrLǿטO`ўUMDB L"`1Nm$ U }q81/F+I-_$T0\ @{%`uxb;7eB[ еaLlLG~-GF]H.1 ?K͂lJg5}/Lۏ:@ 1X(JOEB u>8ZEb=Y$3fGBFMl16ȯ/â3B_&MQn @A9  O7ٺHcɑ|pP An$K:&8H;8$5mOet0 CHU9q\(H_gCurI"l.,RoP\{TH0$Ma*j޴ HLsU2TTnB) ؏wwE|}〭HSOT x QOg@KI"EE6sPgVfH-J'*%#TJDd:e,f@RZNN4J*NPBxމ[Яc~[LAAd`Q%HAXPo <D :z<N6J10bR*FCܜ8kҁBŨHl2DŽ?uNd- ʹ#C6'K V^IKHg_4R fQ Hߞ~&rlC,#I_!ސxB|T2p:Gܡf<0pB@)1̒s!R_yDfm=~D`1J!9DC[6wTiTGy)4 ; @GI?o1͸UO9G1Œ϶0oUO":ڽ$U<FJK%[WDVAfܜT 5La̓Io6DaC59MX/ZNS@G8]Yƀ!D74vFAͽDLA<uFQ:'&\<3OAԽ60ld1Mi6dF }?'0G^!QAnvY @95M/qh1c" O0fPG/F[A~<90I >Hȿz2(4& SK oG~S+ܓ)E+|:I1^)$f.E] 1p EG #Op@0a)0=R ;y[C $;+ʹ1|ݐ1 4zNEedP{%C CI24TsHYOÐ1g_؀K&'H,ش1|CHyA{u DɭK<>'Ԋ78{unKR@3-d@ ;5BKz}>|O}XD0!œO})(! /[LsuD8*I67F$s̿rM^Db DMqb[18p* )[EOŲ0F#^aeIKDpDG d{Q&\GV\"2MLLd]j*C@,ʜ,8EE`b+ΧlMERF԰(eKU:Wb+`#)MFni,Iė%TP\l LW#@/O8yG:(D/PGI@(l`1 ZK0B,O/PZFJ^O+_Ws60BH8 ~H EUr*#`VqNq0G$9D\Δ.Ki}IFɘAC YLl47#0V}! Dߥy1"LpHO{6_=")Lm=ZTjnK̵K##J_4ߐ-OB#VDz,˅>L[\ml#D#S*JUc̝X.ߛ@0߿It;z J!dqd|< 8<FܱشDz yO7%M>޲Lw7@Zj ?nHZc70n76-Ia()k@eH?8GD﫻$!@ J{[WDVAfܜ_.AUGBۜ%eߐe@|pXu턑ATI-%=x ^BGpF3}#O,%? @ ߳\ ,AeAOPPd `Bf:C'ZFM:45 AXe&ߣFMj4tFeFCnB@I߫όPJfB@ELWxC >qJy^:"_1?Z%sI;Gҹ@bv=Cݓ"K^\$)A^dLiͲmOFOIL4<Ǻ?O`mK쟋=T PGz!^tntPQ XB5j/rQ9@ϪJ`oQ[AEJxԘCzr@.1REF "ZoY jRMD^"_PrR#J{3ϘC8vR&H4ؠNo?.SM Ǝonp8T ܮEq<6F*4@V%ewO0nR?VUxCQՑ(cmaJ0CVõ+G?:A[.PWGj\UX-9CZlG:*?Nɸ(㏯4.YcwJ?hAo)-YLAQ;A~c4Y4 BnFX:Z#VKvPZMrGA@0VTD.]gkKJmd&|#] FV(klu#ď鲂<GGl>t^mMxVe HLsU2^^sHK[5% hOA^O@;)|4Q_ _ZXOJt!dP+_;@ָ.xN`g_ E--n&0Q`w\$BAx99WO$Fk@a5 @)=v2fY.FQQS-"a!e_@v]p-Ӄb҈A!#&0jbYO>&+M߁[vHcbO?[-,, Zc7KhzcBNMr[o3/k@u%ٞ@^?d#j|A:4A8:V@dBEs2yg4TsHYO!\ͷ9.DFnGKxxNdyA?qhIr`Rd$ONJ se C›>GUɮ x/eL0e]p/vP!&fBΌ)BL3fC{K*HT+f KTޜLZhh%pOͶ5Ϟ(-!qghpB-=9xV=jfF_uO`9G\#֐Sxl$[j~AIZP#}j"G/>id@߸oh<@jcK2?c kBՂ}ޯX^M!ո`l0:BddlABR;˛SȟCxJ@Jf50!nEA@j@7,oUEG)A :Pcp!]WBs`apaDxbt "}hIテXiqF6'!irCKLolOMEtmMk4/۾aEtqLo\u3H@Fr uJ?g_؀K&'H,Tv$2CIVqNq0G̈́xa}@ 7WKZU\*kyxOP9ܕ8zBGvJڽcz}B]eAV|ntzJJu"榞ђOHJAtʙu$qo!zjL#UR {PB7 N c_c{M,S,erNJUV$q"|HZf/-[LŵpX|Ec>6u6lG=l$q+E}yN4`}e@N2-"!I N9xFl$q~QF'Nͼ@=}jMr$YE~O6 /GALrO TRDO (gP8pNjЏ!,.I=DK7 ώ5UHF9h ̢L$qIiKCw˵ (ܥnI0~:pIHw3mJ94T?nEH&j]JZbMlG@cj FK14q\OnEOnErD\E0> %G_nE; @GI?o._nEX_nES+ܓ)E+|:I_nE.'Odu'$ʬ_nE((Oc҆OnEaK٘|92F?nW_nE.ܘWiAB?ϓCϽABML?h /EnEY'BYV @وė OnEP=8bvFLĎnE=D{]qrLǿO۸5-@parse%%? @ \nE4@nE ʹ#C6'Kbt'w]OyeoD!AB"AB#AB$-?AB%WiAB&s &('w]Oye8o`)0);1Se2}345 6%77Oa8yp8MDB /L"q"r /s!/3/"tK/]/uu//"v//w//"x/?y?/?"zG?Y?{q??"|??}??"~?OO+O"COUOmOO"OOOO"OO_'_"?_Q_i_{_"____"__o#o";oMoeowo"oooo"oo "7Ias"" "3E]o"򚇏򛱏Ï"ۏ"/AYk"򠃟򡭟"ן"+=Ug"򧩯"ӯ"'9Qc"{`aϿf#5aL^eG}5UHF9h \\oKϠQ;A~c4EBOJڏT![D xU.eߐe@|pXuX≠wAy2NTFG4xI:qg_؀K&'H,SMيf|휪Mj+8pNjД!,.R}jMr$YE*&9$NHaN+PCunI0~:p>){LӧƷIv)J%?Mt|TrOJBw,v}&9F^f޴ HLsU2PXvX^M!ո"c3 Oz zDƀ84@?[p#'JWJfj5+M["J&zvK^xQKvV C+m`VAeAO?PPd DMqbu!œO})"EE6sPg$hF&͟xAr^)$f.E] H6$.ZOܱk>6$L`7K:&8H;8$)A^dLi?Ͳ/6d,+L;Yl_n/1J!9DC[6w/:45 AXe&ߣ/ψ4D%yȏO7/=D{]qrLǿO&?5?Edeclar0tionsEйG8Ĩ Ldϋ!+j?9.DF?nGKx?鲂<GGl?˅>L[O~m?TO߰Hy(A׹JBm^]~CQJMf?zͤkTO DɭK<>'Ԋ7Of[WDVAfܜm/-GF]H.O?H5SKI빍&_3kHhM𚟙-4P_PHIt$I?pxhWlIJ?_JN _BDK3OB~_84MbfIy? `ilD/DvOQOL9}"ouO`9G\#֐SvoFSCxJ@Jf50~O S2L==oʦzTۈGşdWo4TsHYOzhp#IVZR`H҂iLyM9/>Ki}IFofjDٟ9|qj4tF?eFCnBk6OED,iR6qA'~D?`k҉L_qCCŏC@ݏeSC1 Cc[mC"C C!ٟ럀7-?C$WiC%C&CґurޫI"l.,RLourPlAޟKuqtLdϾ<lDϒxB3 K;>1r8&yGA-FN fA<< 5}L })Nbv,}=F{8t-):~@9ZG.n jE`eaeC 1CUgyߋߝ߯ -?Qcu);M_q~am Bδ_ B- B86 BXQ Bx\ BX. B oB~ B$|$` B40j BD9F= BTY*J BdyV Btb Byo B^| B~ BQ B9١ BYs> B B B<~ B(BsBU Bd Bq@u` vu @u` ?{uq@u` ?u q@u` vu?q@u` vu \? ,At? ,"C? ,*C4? ,%C? ,'C? -"CUDF h ? xT ? W*.Pl ? B- U'H'I8n> (7gQZ@`:FT? #lT KLB $A 9a0& Mo@+T Po4aN, ? -WVUFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"  nN(.?CU^pVX?Adds a grouping of model elements to your Compon diagram.b~׿fl??nɶؿ<>??@BP(4,c 4И߿HD # =hj,>TYY9 7#rAUF?F@ ?@?Fd2L&üW?P} &4t`tuA@4t#uY4YA4u7` ?$Lh P`ujk4 4+b L4tpg@L>4U2{Gz?<@7 #64p o#0$?0&S*Y*g! b4*#!" Le*#!$A>k! Y"2_# Y^!"uBt bUM1B+/(G4l>0>UddYh4 4a2*E@(`*#?&IF9`fW`aNAw  nF4?!%A2OhsRONAA%NOOWAEE)FODO_A|1%O>^!1RSN041aiA^E9 !%3h?'_2q>`8""=fHD:  ;hj,>TYY9 7AUF~?Fi4Fѕ?P} 4t7`  ?4}u`b +4uL .@j7 :A:$>Y_4uTV[o%[ _ A[yi  4+b%& ! X_)"/'>4U2{Gz?<@T7L#64p }#s\$? \&* *R!  ! 4-V#M" 1@(#BXV#M$M%=7$ [!23uB  ta1% "b $|1*+v4J%!l>[0>Udd[[*Y4J6Wa)B/E/@J(`V#FWF%yWyvH)#[Y 8#B4k!aOO}AAENOO=WA5EXF'_sOK_A|2QO;!rA R$S}0i4A^59 :93?'2qQ`Qd"22 PfUGD # Qh=0T`PUU4U@BP(?@hY?F~?Fflֻ?Py 4t` UA@MUU(31 .11 .6T7@111 m4u7` _?~A=Ii)L(u4uibv%& !ZB4U%"% UZ 'y"bw$ && !4Q$y X`UML Background Add-on` /CMD=1001y *i!7t9!9K f |#14;  `7Copyright 1999 Visio Corporation. All 2s reserved.4`0_D112.chm!#31469n#E z8e]@M77 y"U HA%DUC4ZSASAxga]_CEZ4T 7T"2DT7 QT2A A !!xxTQ 3TE5Tirs(6Qa2b1 4TTQ(0S@1 "bh Q7/Z?SX2#i"bBbR57CU5TCbR/KT15\e`v Qx3Vj!SA c7gUcf4&QQWZ@Tc/1@{,jSEBuoPQ@)RkepAn@a 81ping of model elemq. fcRCzmA@10.0fcRYoPJj4rb3 Q+`Width`U@.Default)@i RRK0SioY,4uL%- 7K@WRrN|1 ?C5shapes,֌w,Mq,u,Uml,P50age,unKSA]f>3 -C(v75)K` Dia&g?rams.. @(2I.?@=4Q4y"&!e7sr~C Vie&wDF75ӟl5}EShow Re&l2ships.@J36Y嚠5aE6Q@_w$&.F)EK"CDisplay Se&mantic ErGrorϯI42鮥T"r!@x"4FQhA χ#CS܁} &y Op+G68?eEq%Propert&ieI]wt6V^eV kׂ _ @r߽fez 16ffu l6(H,=pr!v< /Wubk N' /$ƅeg@D?_HuIGn> 0nJ)E_[mF$? .#TT /w]B dT 30d,5& {o@+k~oWa@ o@ 3G? G6PUFDfP 7h$T PUU4UFvn?F??F BP(?3" bAb a1$P1%!?񐤙@Ь,sU /:/B4g eBZ P%.BUG "u 5 φψĊGPLBBTfeAdds a physical module of codrbusiness document inhuman system to your Compon$diagram.bfl6ۿ?? Ͽ7 mۿp= ף?pC?503E?UG D # \ h=0T`PUU4UфU@43?@?Ffl6?F?Fοϻ?Py U1D7DDDUDDlDx#4t7=`bUA@F4tV2<JT^h4u 7?$"u/(4a^$f 4 b] "Y`UML Background Add-on` /CMD=1001Uy4e#$X"(P! Z 4x q#bp$66 x!r" 1!ĉ)  >4 S|#ҏ14+4`Vis_D112.chm!#31462"`7Copyright 1999 0io Corporation. All 2s reserved.2$8$(ZP!5 )3UUHzA%DG7DGPL5DC4Z3A3A g 1`](_SE 6T YT"117sTL2T2<2Tx3T5dT 4Tr!}(YRS/$;@1 "#WQ7kZ] "LU7*g/c?f/cSfY`Z] QL5CT1Dg3`~d5[_bQ<kdmShQxCZ?c$&f333Z*pQRXlg1 {I3?RepAn0a distributable piece of implemp2qa system@QE3x}vQ010.0cRoS3Ishapes,w,Sr,r,Componp,{,Uml,zqT9 7PAUFFh?F?Ffl6?Fu߸?P} m$B>Y #4t7`buA@[4t` [ Q ,49TX-4# YJ3u:huXa 4 b>4U2N贁Nk?<@T764p 2{Gz?h &S*43*A! u4# NL*/BI#Al>E! 3"29#b61i^| =3/f'2qu0""t6)l40>Udd@ ]4`#F,%F0"KAh m gkF4 !/OJOOKAAENOO WA|E&FOAO_A !"O>8!)rARS0HD   E=hZ(>TA7aAUFfl?Fו?֯k?P} VB>    14u7`bA@[4t`  ?BTQ]n4Hfnhu^ua 4 b>4U2N贁Nk?<@T7 #64p }#2{G_z?h&*XD*R! M E4# " rLSB#! $A %@V! D"2J#bJ1l>0>Uddj $U (e`#F6Gf&1  g64*!?>AEN4OFOGA|E6O?OA 1?>I!SrA/R5S04THD   E=hZ(>TA7%AUFfl?F?֯?P} B>4u7`bA@]t`  ?t!4 *2hduQom 4a 4 b>4U2N贁Nk?<@T764p }#2{G_z?h**! E4 6LBIA>! "2#b&!l> 0>Udd!P! o$*`F}6d *30c1z  g 64?a>1E>OOcG1|5~6MO?qO1 !z?> !rABS 4aHD:  )##Hh3$> T 339 7k#UFfl6+?Fϫߴ?P>]# VVk4t7`u-bA@ t3`  ?,4uL*.#-A7@?+4eb W.y45LTuLT4a 4 b>74UH" hwo@4F#%}  tBM#b$& !iP^!-l)3/~ '2q 0Ӽ?=& 6jP4//I'2x?!32A06 )&kV6?H?1'l81UddE 3 $*(@#d!_&<4TW@A4EOOyN__gWA5NQ_Ou_A@ _O__`XTm&_0HIGn> FNtG-\ F$q@ >#LT ?WB9$T w]na?& ]@U+k]MaG4u@ 5@P\@ F@ FIG@ K/@ MPUFDf h>$^T E4UFvn?F??F B_P(?X3" bAb af1$P1%!O?R@ЬؾsU /~:/4!g e!Z P%BWUG4IZ=$! //// ??/6u 5 φψĊGPL?ASe=pAdds an implementation unit that has idity run timed ccoin objects to your Deploy diagram.bfl6ۿ?? Ͽ7 mۿp= ף?pC?503E?UG D # Qh=0T`PUU4UфU@43?@?Ffl6?F?Fοϻ?Py U  1D7DDDDUD Dn#4t7=` bUA@F4tV2<JT^hq4u 7?$"u/(4a^$f 4 b] "Y`UML Background Add-on` /CMD=1001Uy4e#$X"(P! Z 4x q#bp$66 x!r" 1!ĉ)E >4 S|#ҏ14+4`Vis_D112.chm!#31473"`7Copyright 1999 0io Corporation. All 2s reserved.2$8$(ZP!5 )3UUHzA%D G7DGPL5DC4ZP3A3AEg a](_SE4Tr! YT"117$sTL2T2>T<Hx2T 3T2 B5Tr!4T 1}(RS/#V5@1 "WQ"7kY\!LU77g010.0cRgl\3Rshaopes,w,S,r,instanComponp,{,Uml,NzqT9 7PAUFFh?F?Ffٿl6?Fߺ?P} $B> #4t7`}buA@4t`   (,49X-4# J3ƅu:hXaZ 4 b>4U2N_Nk?<@764p 2{Gzׄ?h &*43*A! 4h# NL/BI#A>E! 3"2\9#b6u1i^P| =3/~f'2qu0Ѽ""t6l40>Uddp]4`#F,%F"KAh m gkF4 !/OJOOKAAENOO WA|E&FOAO_A !"O>8!)rARS0HD:  ;h(>T@9 7aAUFfl?F+?֯ׯ?P} V6>  F   4u7`bA@4t`z  ?BQ]n4Hfnh5u^aj 4 b>4U2N贁Nk?<@7 #64p #2{Gz?hN&*XD*R! M 4# " rLSB#!a $A %@V! D"2J#b1l>0>Udd $ (`#F6 Gf01h  g64*!?>AEN4OFOGA|E6O?OA 1?>I!rA/R$5S04THD:  ;h(>T@9 7%AUFfl?F˿?֯?P} >4u7`bA@t`z  ?!4 *2h5duQo 4aj 4 b>4U2N贁Nk?<@764p #2{Gz?hN**! 4 V6LBIaA>! "2#bU&!l>0>Udd!! Vo$U`F}6d *30cA1z  g64?a>1E>OOcG1|5~6MO?qO1 !8z?> !rA%BS 4aHD:  )##Hh3$> T 339 7k#UFfl6+?Fϫߴ?P>]9# VVk4t7`u-bA@ t3`  ?,4uL*.#-A7@?+4eb W.y45LTuLT4a 4 b>74UH" hwo@4F#%}  tBM#b$& !iP^!-l)3/~ '2q 0Ӽ?=& 6jP4//I'2x?!32A06 )&kV6?H?1'l81UddE 3 $*(@#d!_&<4TW@A4EOOyN__gWA5NQ_Ou_A@ _O__`XTm&_0H'Wn> KR3uOj1 F\A P #,T QaB9T URxa__& oW@+|koMaGt#A ?SPGA YSA K\F\A ^/hA `JUFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"u 1?!<BT>|xjDAdds a particular instance ofclass to your Deployment diagram.b~׿@ ??nɶؿDTW??LBP(j4Fߣ 57h=ڿUGD # Qh=0T`PUU4U@BP(?@h4F?F~?F@ ؼȻ?Py 4r764t`A@m4u7` 7?u)4 4UbW` `~Y  6N D}7 V~""""P"Y`UML Background Add-on` /CMD=1001y4dY$P$P"%~Zb$  d Z & `T!Y) <4 %|Y#^1c4_+X"`7Copyright 1999 Visio Corporation. All 2s reserved.4`0_D112.chm!#31481ݾY#Ez8e)]=77 ZU HAAP%MDJXC4Z7@D AAEg@a]OCwE4KT DP"T72 T2AAO2 'T xAT02I>NTZ  3uTA5T4TJŴM(MC)43 Q.X!B2>1 AJBTQIX@SGbQ5/Z?SJ#Z?RO53TIdMCb3S;T^1WMC`TxA_$dWL(w$ 7rsr.vQ03j3dj{wZ3.cYRVdZ.cfRQkCSB4t` -8AR00@f QsRYoPJ4$ Q+`Width`U0.DefaultЃVx@Z`RR;oP,3"Rep1n0an instance of a class0QR3m*Q010.A0SRXf1 R0+shapes,$,CA,object,2,U_mln(Zp|M(AX7f5V00"3Display Se&mantic Errorsp"v/-2T$Z`5r@7E`1-3fQ0_X`Z`5iЭ#3S} I&y Op1s..0cu!8t$O5vЭ` %Propert&ie`j,]XAqqYk Y#X!S&Ga45$!:f1g1A ?IƒP%Y?HAJ0K7bF_`0 0ߟGA`o`I5%7π[mMO5 GbFX+: SԒ-N`r2UJVR.%E1F9:8`HDB # =hj0>TdYY9 7#AUF~?Ffl+?UP} 4t7`} ?4u#`4A@S4pb@3 b&uLbO .57e 53u4 4] 8>6>}4U2qB ?A/S&?\.?R4=S&*,,'4;${߮Gzd#@71#64?E#UD$?u&*:UN]7;#2" %g@t1)I;#2$A2%@C ?2tEbUABFu??64l>YUdvW5D.6aB@[>O@3/(A`;#AF<C 2R" "3WR4!_ 0TmQl5y^__WmQ5yUV_)_omQE1 _>1rAbc@4AaiA^59 6Tx< '%d"2"v!joo9xy3d$!3r]v.D2"HDB # =hj0>TdYY9 7#VAUF~?Fh4F??Fl6fW?P} 4t7` ?m4t#`ubA@4'+4uL^ .)7i )'4um4 4br Z->m>x!2q ?/*& #?\.?R(=*&e,e,e'4${Gz?<@7#64po#$?&S**! "@S! " .R@R7"F# $ %=r~3 tBb1 B5B?4l>YUdvr4b6aBUE@(`#16<msClA ^"i3R4!OuNQ95%^>_P_WQ5%U@F_O_QE2O;!rA9b?c0i4AP^59 93?] '%"2f68Aag@7=Aa54TAS!S! "(M0sF2L&?A >x'! b@'F$Zv_HuWn> 2brKgr FA c#$T dwAB }YeNab& bo@{+UT eoVaGlA oPA Kl$B oo2UFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"  nN(.?CU^pVX?Adds a grouping of model elements to your Compon diagram.b~׿fl??nɶؿ<>??@BP(4,c 4И߿HD # =hj,>TYY9 7#rAUF?F@ ?@?Fd2L&üW?P} &4t`tuA@4t#uY4YA4u7` ?$Lh P`ujk4 4+b L4tpg@L>4U2{Gz?<@7 #64p o#0$?0&S*Y*g! b4*#!" Le*#!$A>k! Y"2_# Y^!"uBt bUM1B+/(G4l>0>UddYh4 4a2*E@(`*#?&IF9`fW`aNAw  nF4?!%A2OhsRONAA%NOOWAEE)FODO_A|1%O>^!1RSN041aiA^E9 !%3h?'_2q>`8""=fHD:  ;hj,>TYY9 7AUF~?Fi4Fѕ?P} 4t7`  ?4}u`b +4uL .@j7 :A:$>Y_4uTV[o%[ _ A[yi  4+b%& ! X_)"/'>4U2{Gz?<@T7L#64p }#s\$? \&* *R!  ! 4-V#M" 1@(#BXV#M$M%=7$ [!23uB  ta1% "b $|1*+v4J%!l>[0>Udd[[*Y4J6Wa)B/E/@J(`V#FWF%yWyvH)#[Y 8#B4k!aOO}AAENOO=WA5EXF'_sOK_A|2QO;!rA R$S}0i4A^59 :93?'2qQ`Qd"22 PfUGD # Qh=0T`PUU4U@BP(?@hY?F~?Fflֻ?Py 4t` UA@MUU(31 .11 .6T7@111 m4u7` _?~A=Ii)L(u4uibv%& !ZB4U%"% UZ 'y"bw$ && !4Q$y X`UML Background Add-on` /CMD=1001y *i!7t9!9K f |#14;  `7Copyright 1999 Visio Corporation. All 2s reserved.4`0_D112.chm!#31469n#E z8e]@M77 y"U HA%DUC4ZSASAxga]_CEZ4T 7T"2DT7 QT2A A !!xxTQ 3TE5Tirs(6Qa2b1 4TTQ(0S@1 "bh Q7/Z?SX2#i"bBbR57CU5TCbR/KT15\e`v Qx3Vj!SA c7gUcf4&QQWZ@Tc/1@{,jSEBuoPQ@)RkepAn@a 81ping of model elemq. fcRCzmA@10.0fcRYoPJj4rb3 Q+`Width`U@.Default)@i RRK0SioY,4uL%- 7K@WRrN|1 ?C5shapes,֌w,Mq,u,Uml,P50age,unKSA]f>3 -C(v75)K` Dia&g?rams.. @(2I.?@=4Q4y"&!e7sr~C Vie&wDF75ӟl5}EShow Re&l2ships.@J36Y嚠5aE6Q@_w$&.F)EK"CDisplay Se&mantic ErGrorϯI42鮥T"r!@x"4FQhA χ#CS܁} &y Op+G68?eEq%Propert&ieI]wt6V^eV kׂ _ @r߽fez 16ffu l6(H,=pr!v< /Wubk N' /$ƅeg@D?_Hfn> ^"u B8FdTB \s#$T Utw]B 4T ]d_dc& ]W@+|k]Wa~B TuB xG\ZB zPUFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"  nN(.?CU^pVX?Adds a grouping of model elements to your Compon diagram.b~׿fl??nɶؿ<>??@BP(4,c 4И߿HD # =hj,>TYY9 7#rAUF?F@ ?@?Fd2L&üW?P} &4t`tuA@4t#uY4YA4u7` ?$Lh P`ujk4 4+b L4tpg@L>4U2{Gz?<@7 #64p o#0$?0&S*Y*g! b4*#!" Le*#!$A>k! Y"2_# Y^!"uBt bUM1B+/(G4l>0>UddYh4 4a2*E@(`*#?&IF9`fW`aNAw  nF4?!%A2OhsRONAA%NOOWAEE)FODO_A|1%O>^!1RSN041aiA^E9 !%3h?'_2q>`8""=fHD:  ;hj,>TYY9 7AUF~?Fi4Fѕ?P} 4t7`  ?4}u`b +4uL .@j7 :A:$>Y_4uTV[o%[ _ A[yi  4+b%& ! X_)"/'>4U2{Gz?<@T7L#64p }#s\$? \&* *R!  ! 4-V#M" 1@(#BXV#M$M%=7$ [!23uB  ta1% "b $|1*+v4J%!l>[0>Udd[[*Y4J6Wa)B/E/@J(`V#FWF%yWyvH)#[Y 8#B4k!aOO}AAENOO=WA5EXF'_sOK_A|2QO;!rA R$S}0i4A^59 :93?'2qQ`Qd"22 PfUGD # Qh=0T`PUU4U@BP(?@hY?F~?Fflֻ?Py 4t` UA@MUU(31 .11 .6T7@111 m4u7` _?~A=Ii)L(u4uibv%& !ZB4U%"% UZ 'y"bw$ && !4Q$y X`UML Background Add-on` /CMD=1001y *i!7t9!9K f |#14;  `7Copyright 1999 Visio Corporation. All 2s reserved.4`0_D112.chm!#31469n#E z8e]@M77 y"U HA%DUC4ZSASAxga]_CEZ4T 7T"2DT7 QT2A A !!xxTQ 3TE5Tirs(6Qa2b1 4TTQ(0S@1 "bh Q7/Z?SX2#i"bBbR57CU5TCbR/KT15\e`v Qx3Vj!SA c7gUcf4&QQWZ@Tc/1@{,jSEBuoPQ@)RkepAn@a 81ping of model elemq. fcRCzmA@10.0fcRYoPJj4rb3 Q+`Width`U@.Default)@i RRK0SioY,4uL%- 7K@WRrN|1 ?C5shapes,֌w,Mq,u,Uml,P50age,unKSA]f>3 -C(v75)K` Dia&g?rams.. @(2I.?@=4Q4y"&!e7sr~C Vie&wDF75ӟl5}EShow Re&l2ships.@J36Y嚠5aE6Q@_w$&.F)EK"CDisplay Se&mantic ErGrorϯI42鮥T"r!@x"4FQhA χ#CS܁} &y Op+G68?eEq%Propert&ieI]wt6V^eV kׂ _ @r߽fez 16ffu l6(H,=pr!v< /Wubk N' /$ƅeg@D?_H'fn> ~),_ABFlB -#T ]B ,T ]d d& :@+tk=W|aB B _TGB PUFDf h>$^T (E4oU??F BP(?0@"(01 bab af1$P1%!))U(+? sU!& $/:/4 eZ p%bUG4$Z;$!)//??+?=?O6u E?)7PV ?WQcu eDenotes a set of objects that have similar structure, beior, and relationships in your diagram.b~׿j4F??inɶؿ`0 ?? WGҿvnᅲ1e뿀D"H$?9h3?UG D  # Qh=0T`PUU4UU@vn?@.c2?F~?Fi?4F?Py 4r7q4t` rb @} b x*AI[4u7`Hn?ou{77@U 6DK'6P#`& P#t&RP#6ĉ"""&#&#"" """"""(""2""<""F"&K7Vn3U"3(!3 3`2'&3"U6666, aD"@ (kEErH!!Rr3:_r5Gf4T,9HqksVQ LBL&A_'Er_r BWd7/qҍB^s(dE@bjd'U4@>Qod[CT6QB=c`߄xWqQ 7|#K2h C׌uC?$6GCRC ? _pdEu`2 efvV w#  CtŤs4t a-I&NQ^6g<^R @j ##RrYJ4v J+`Width`UP.DefaultGÀU~I(о@jUS`RepQnPa descriptor fa set of objecPwith similar structure, behavip@relRshipsPdRTSͪqXP10.0_tQXP[,shapes,,Clas]et,,,Uml,,Np(Zp1o9H-ECFg!\6Q pvQ߃6QIu`du.`.qr%FNgnp` ExtepArrow6G4ABa-C4A7 .w>QI|ew66E .@Rdv66'U#5GYk}66n4Q_Zwo4d9Hv0W>U**6` Dia&grams.I.P\BbOtM4DBRFf!Ess/-qXP Vie&w//zG5/*E}/-TUShow Re&/?A?~C6Z?l:'Us?(XP_DF?֡O*'F P"USDisplay Se&mantic Er??$24rF2a9f!eO#O5OGO%ukc_(#3S` C&y O!p,?O&8?l: r//$%Propert&ieO$_$1_qu/ayq B/T/wOxf2FNt?F[?Fw_`9#bL_gaՄn)o eдB~w?n@}: 9uu?s{tvD|(~l}y7Fz{8|wwv`N`3ǏLte ?%fD|UuB EϼDVVWu|>5GYW[*ugD|>%^nFza 2˟Ms+Q}%ϭ[,XAAB;(eD!;eHD: !# 4Aih(>TA9 #:AUF~?Fi4F?FN<@P-DT! A4u `u bwu  -4 *@4uv` ?FSu#Q"40 ChV>h 4a b>A4U0zGz?*gb/4] 4t` @n"qt x(dp A ('B$$'"/%7-? 6p@b6 1l>#!Ud#\5= 5tR$>0R@Ca:C9GM[484KMOZeMHD: !# 4Aih(>TA9 #:AUF~?Fi4F?FN<@P-DT! A4u `u bwu  -4 *@4uv` ?FSu#Q"40 ChV>h 4a b>A4U0zGz?*gb/4] 4t` @n"qt x(dp  ('B$$'"/%7-? 6p@b6 1l>#!Ud#\5= 5tR$>0R@Ca:C9GM[484KMOZeMHD: !# 4Aih(>TA9 #:AUF~?Fi4F?FN<@P-DT! A4u `u bwu  -4 *@4uv` ?FSu#Q"40 ChV>h 4a b>A4U0zGz?*gb/4] 4t` @n"qt x(dp # ('B$$'"/%7-? 6p@b6 1l>#!Ud#\5= 5tR$>0R@Ca:C9GM[484KMOZeMHD: !# 4Aih(>TA9 #:AUF~?Fh4F?FYaD+ج<@P3žm>4u `u bu  -R4 *@4u` n?Fu#Q"40 Ch >jh]a^ b>A4U0z_Gz?%gbU4iug4t` @n"t x(dp  ( '$$'!"/%7-? 6@bU6 1l>#!Ud#\5= 5R$>u0R@Ca:FGM44EMOZeMHD )# =h0>TdYY9 7#AUF~?Ffl?TP} 4t7` ?A@4Uu#`4Z S4pb@3 b&uL>b .U7  4u8A Z  za$  g>4U2ǍqJ ?I/[&?\.?J= "U[& ",,',"2!4MC${Gzl#@@#t1$t5'+C#+(7OIC#:$A:% 2N I2O+#bU*$62!BJ<'0r # % l>YUdvWE4I@ T K 7(`C#YFF CA1 "b3R4!O^5Q>5A^Z_l_W5Q|5AUF_O_5QE1O>2rA2[c0i4A ^|59 6^J< '%l"2 " fj{ooCK3l$<!3Zr]bv 4:","2!0{6!aHD )# =h0>TdYY9 7#|AUF~?F4F??Ffl\?P} 4t7` ?4t#` ubA@4'S4pb@3} b&uL .T)7 )'4u8xA  a $  f>4U2q? ?>/P&?\.?(=P&,R,'!"'!4M8${Gz-a#@@#ct$t 5'+8#+R7N I8#/$A/%"M H2N #b$6'! B8YUdv!?1C.H*K ,(`8#F,FC"A1 "W3R4kDON%Q351^J_\_W%Qq51UF_O_%QE1OL>2rA2IKc0i4A^q59 6]?< '%a"2fjko}oB@3a$,! 3Jr]Rv 4/"!"'! 0p6!aHDD # 7hj0>TdYY9 7#AUF~?F6f??Fl?P} 4t7`  ?)4Mt#`  ubA@41U4uL^) .37 3p rbFd2L&?0F4u'$ A Zm/a$ " #  >4U2qk ?j/|&[#?\.?2="|&,"';8q#|&;2"?1"'4+d#["="7d${Gz?<@*@64p U2)rn3%n5*:"=##">3@36FC)! BFd#[$[%5" tB"#b*!$oF)!D-;"%% i^E9 II3O '%u2AB"VUl44>UdAETgQX,1" X(`d#:A5F<QĚRY "1# b@4|1_^!a^5.mFoXcW3r"'g1'tAu`rua4,$QE|oeR3ru1cb,b\rbQbQtb`]oYb!aELQZg#[sUbdasbgQ28_;1rA"%p@[8!aHD  )# =h,>TE=7#tAUF~?Fi4FW?A]?P} 4t7` t# ]ֽuLA-W@7 >U@ 4iJ4u >  4zFa5 4 b v >4U2{Gz?@T7"#64p}#s2$?2&* [*i!bj 4=#"24@&,#`!r !:!#$Al#%@m! ["2a#b|1l>0>Udd11y+$BE +Q "U"["m!d b@["Ea#>#r (`,#F9u6~ȅA 'B4A!GOOAA5N __A<5K@X_O|_AEn1O>)2rA)2$c}0i4A^<59 V63/'2q`:"K2fj.o@oSjg:#o!3 r1v4#"koojj_H4uvn> +@U,~:N\E}4FlB ڑ$#< wOB Msa o@+ܔ ocaGy & Pt L  .  R  v1l$ Ϧ 2 C Ь S h#UFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG" M?C); JX^ _Yk}  6Adds a data type to your Static ructure diagram.b~׿h4F??nɶؿ WG??@ 34CUGD # Qh=0T`PUU4aU@@ ?F~?Fi4Fѻ?Py 4r7M64t`  rb @ b mA%4u7`$?KuW6@2 ʎ  7 U" @6D)@"Z#j& Z#~&D'ĉ """""""" """"""B("D/5?G?N3VAN?w???X:????5GBY`UML Background Add-on` /CMD=100/1yH4ADBtEbE A6   !I!x $@ J|C QTKB`7Copyright 1999 Visio Corporation. All 4Rs reserved.{)`?P_D112.chm!#31518wCSEz8e$Z E YU@HQETg7T  c4+Z&@@idQQ Rga]oc(De`CT dBA2d7..Bd xtBgbtb2!2!R3Bt.5OtY4\t6 HcW@A bFlq79yz?sGCxAvrES~utbcsx4tL -%&*Q@ @Fs2#lqUYpJX4R RqTa`Width`U`P.Defoaultӣ~%@2rMr-E|&C`Rep^Qn[Pa data typefPlqZriS'amP10.0grvdPQ )jS9,shapes,D5,',Umln_q]!E\ HsWUTDmP Vi?e&ws..fP0BI6OHM5YD 7})iUShow Re&}lKRshipsJD\RC6uχEEX)mP_F-) "jSDisplay Se&mantic ErroQrQD2crH ,>Pbߌx+c)Z.#jSS &y OpGOF8ً[ !v|)L%Propert&iepQL[,X ]qR>e]Yi Yñ(!@hfCFNt?F[?FħgC 4R `h_z E,DVhzДdEw-<ð a E ?Qc  E QGr $/@,:&L&L-?@o/m E5A/S/e-A?//|>L0F?X????䷥!ѽl[LI / ,=6//j?|??C,6]_o_OO_Bm`3=EgJYҋFHDB # =hj0>TdYY9 7#AUF~?Ffl+?UP} 4t7` ?Ao@4u#`4 S4pb@3 b&uLbO .7  4uh4- 4gU 8A&e & &&>4U27qL ?K/]&?\.+?=]&,R,'4ME${Gz-n#@@#ct!$t5'+E#;Q '7O IE#<$A<% 2N I2Ob1 B:I?)0r 4fl>YUdvE46aB@I@ ('"9(`E#FFCA(" "d3#R4!O^9Q@5E^^_p_W9Q~5EUF_O_9QE1O>BrAB_c0i4A^~59 6^L< '%(n"2f0?6AajooCM3n$\!3zr]v4<"HDB # =hj0>TdYY9 7#VAUF~?F4F??FflW?P} 4t7` ?m4t#` ubA@4t'+4uLO .)7i )'4um4br QA  >4U2Ǎq ?/*&?\.?J(=*&e,e,Te'4M${Gz;#@@#t$t%'BU+7I# $A %Z"4 p2B2ubU1B:?h r 4l>YUdv/r4b6aQBIW@(`#FFEmsCl$A ^"13B4!OuNA 5N_'_vWAK5EF`_O_AE}1O>2SrA2c@0 6QAaiA^K59 e6R3?] '%;"4Z2fjRodoSg;$o!31r]@9v4 "HD # =hj0>TdYY9 7# VAUF~?F6f{??Flq?P} U4t7`  ?)4t#`  ubA_@4j1+4uL) .37 4314uRw'4]"b $ A  >!o2q ?/*& #?\.W?2J=*&e,Ue,e'4${Gz?<@@64p #$?:&**! ,"ʹ>I3?2E6O6LU+Y37" BF# $ %%9 tBWb1{?4l>YUdvWDl6aBE @(`#16<"w}vA  ^"3!R4!O^7Qw5C^\_n_W7QECUF_O_7QE2O;!SrA"Wb]c:0iF6^E9 93O] '%"2ft8Aa_rHn> 4cC) FPC ߉#dT wVB _" ]>a @+tWT EaG4 ^P<   #? UFDfP 7h$T PUU4UFvn?F??F BP(?3" bAb a1$P1%!?񐤙@Ь,sU /:/B4g eBZ P%.BUG "u   bM^LlX~`rAdds a collaboration in which all of the participantronemposite object toDeployment diagram.bԿ?m:mԿ88?>>? UG HD )# T#h @> T(YY9 7# AU@DP( ?@vOn?]uԿP} m4u7` ?A[u#4u Z'uY`4E@bvKu`u ^:xsJ.JLAXA744a )%Y bJ d7"A/K:E#L'u->4U2N?贁N{?<j5#24r\"#!^"?&G&n&:ycY3 F!3 -236"2 ?3 "4*02Q?c;4#@ B?@?@?$8&7[#2<K#2Gu#2'L#JQ+ 7"a,#c,%E A tN'zs LŬ#"0;`UML Background Add-on` /CMD=1001y`k'A49Rj3OV3cV 3wV3V5> V nD%?#A-"WbD V VQ ! @c cc! J84A~aĿ@-q`?mg @P">L'A-[ab 7g-2rs3A3 r?!9R[!'s9R,ru6y2K@!|#qtKp`7Copyright 1999 Visio Corporation. All rs reserved.c`p_D112.chm!#31474e>harE m s%7  dE4\aa7!7!8bdb@QQ aarl1Ud9Q)#NDa@4]pg[<,r ,r%aH?pğq#>cIbG q=< r?@@ r A?Q!ͼ\a;# [#OVcVۢP!u#OVcV!3&r,#y3!Bal%ml  =w9Rr3XK]o6xhfU?@Uf㢿 ףp= Լ 1ۧK# # WV#hvWVp-? P'_c_aXaX,dE? ta%rQ!?3|@a,>P.Ӹ@Hb{]י-@uX1E5e?A\^ij~O>P8ӄ_X/Xx3QAAbem%Tӽၩ@uuJ Vie&ws..B_]5@(T$D1KQ?c= _Ź?4dE?c7P "Display Se&mantic Errors??!S2>R"r]!Ѐ3p@2BEE5O?6RFOVOh8#Shape _C&y Opq?O78?:8ev,_c=` %Propert&ievO_4)1_6gbPToDcfATBq ddD]!]!KBqBq'!'!FaFas1s1$2AAlrdrRqRql!011@$$шa3L.ta5;tr4Htf'!]"Tϓ7@@y XqD$с`qOtrՄXqKWeyvۧDwPvJ GXqY~cP~s1-rF`@jpyrN% r$rG.hyrU/eyssUҳAr$5M,k'!?VoV!Vd9 91Fab(bq7dsbH#0XqrkĊp@LsWCu`uy`n6ul `츀Xqr` uV%.05Wrr u` 䊩'#Xq,rQc``p$ܯF9r(V}tSjRepresents a form of aggregagQ with strong ownership a`coincidt lifetimeth?e partwholenPXqiQ,c`10#.0Sr{CA lSbsWQs,n,{,ı,composigQ,Uml,A,Wӱ,,O,,AbгAMid2bԤHIHG6O@XNSUk'0q#+?(2B bЋ)CB-M pHD:  ;h(>T@9 7AUAhf~?A23@q?@I?@P} B4u7`p    b bkAuJ 4WuLA-(4vb .6?- z3*h>j&h[ 4a-$5 6 #>Q4UO" qKl(&{" &'4v Z'|I!/\ (/">% b#BO%? O$AA"[@#>6F"X4?0" t` l @UdP77?'6$.#5%5%5 L(`X#!4|1 B4Hi4A^| =!7Z-f'0=A"FHD # =h(>T@E=7#AUA,3?Ahf߿@q?@I?@P} B4u7`p A   b bkAu#J 4WuLA-(4vb .6>- z3*h>j&h[ 4a-$5 6 #>Q4UO" qKl( ${" &'4\%EI!/\ (A" bFX#O%?O$PAA"[@#56 51" t` l( @Ud77?'6/"a.#5%5% 5 L(`X#94i1B4$H4/!aiAp^| =78Z-f'0=A"FHD:  ;h(>T@9 7AUAifީ?A3@q?@wI?@jP} B4u7s`p 7  } b bAu 4uLA-(4vb .`6? z3*h>&h 4a-$5 M #>Q4iUO" qKl*(&{"&'C4\%|!/b (A" bBO%?O$AA"[@#56F"$60" t` l @Ud!77?'6/"a.#5%5%5 L(`X#!4s1B4Hi4A^| =7Z-f'0=A"FHD:  ;h(>T@9 7AUA53?A\f߿@q?o@I?jP} B4u7s`p  ~7  b bA@u 4uLA-*(4vb .6>[ *z3*h >&h!a-$l5  #>JQ4UO" qCKl(${"&'4\%|!/b *(A" bGBO%@?O$AA"[@#56F"$60" t`F l @Ud77?'\6/"a.#5%U5%5 L(`X#4s1"BI4Hi4A^8| =7Z-f'0=A "F_0H'Wn> ο\mEEw FC #T B9LT ixa_P oW@+ko/aG _ ? P & B&L h !UFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"u ?\?JϊQcu~~w|̄ޤ̆8Adds a customizable comment to your Activity diagram.b~[׿??2|&8i6?4?6BP(p8 4࿈=UGDF # hz0T `UU4#]7U@BP(?@p8?F~_?F߼?Py m4t7`A@it#4u ?u %4 V4bS\ \e.  ' T~~Utz y7# U(" ""z#" "" "'&" """"`""J!4UV b 47~X`UML Background Add-on` /CMD=10_01y 4 5VF Z VW bT661|3A DO;H2`7Copyright 1999 Visio Corporation. All 0Bs reserved.4`;@_D112.chm!#31443K4Ez9e%]M77 )3UUHA 5DSpY&8Z%< !3%J 83[A!0V\\!1a 16'1 ju`cu `U` Connect NoteET7 H3CbvQ7]@lo__QbhAcoo%o7m Hl Xb5eowoooooooo8l Hl Xb54FXj|P8l Hl Xb'9K]o(8lHlXbxҏ,>Pb8lHlXbӟ -?0IkXbEpʯܯ8lHln (ZFR_ 8GE:WVP!0"fCDisplay Se&mantic Erro/rs`2f?x=24u1r1E7EhR:Z!0 fC_T\zE5A#fCShape} |&y OpHAs..b@Ϩτ18 R(E5vIS` %Prop?ert&ieϝ<(gV`P]q03l4%T 27@1122 3x5E4!2 8CT%F@'1 Db- 7A#5-`S 5=R\$7 5r(1"0 ),A7e x>Fq/fC%Use to ce a comment onXdiagram. 7EeCK`10.07NUKA 6~fC,use,PT,on,sts,nݰ,h,UmlM,[VQ/Q/Qh,5Be QFc<(UH duD R # 7# *> hU(TPUUJɤUF~?FG?FP 4t`aAo@tZ4t7` 41t#<4u9A?duSqb2 ]kVNT]7   U K;& ;&U ;& ;&;&;&;&#4U0zGz?H@74#"- 3LN,#% bU#1lJ$zU!#% &ia]2a30E(4#&&)774| 4yp  uBGu$02X5=?O?a?s?@??5?zflbH?O|HO3U8JUIO[OmOOOOOOOOO_!_4:_Oe8J e_w________oo+o=oNVoku8J]oooooooo#5GYRr8Ja -?QcuV8JAˏݏ%7I[mZ8Ji՟ /ASew^Ư۵8FUH LuD # 74h4JT]]HM# MUF~?F?Q 64u`M-@FL&d2ɫ?7 -A +4b . #4t7`  ?\t#gf4udu~l4+b Jg M]J] J&U&&G"M&J4U2N贁NkU?H@9 j#*xp  b*#!2{Gz?z&42Uk"]<")kt#N1S4;Cx`9Copyright 1997 Visio Corporation. All x2s reseroved.` t#? P yA/OlF !HdxCb "G"(" "  )E5{$E"FD v#CT o|B B ]Aao& ,@+lT /RaGF7D )PfD D 6PUFDf h>$^T (E4oU?? F B/P(?0@*"(1 bab na1$P1%!)U(?вsU!& $/:/ 4  eZ p%bUGJ4ZN$!)//??+?=?O6u| n%  1:{<B:72/zAdds a classification relship betweenmore general andspec element in your StcOructu!diagram.bϿ?,؂-؂ݿ?_3OP?  UG HD # #h T,YY9 7T# U }AU@?ϿP} 4u`u`bA@uY`+u 4E:/*P4u7` ?hu#xBJLAAJ)4i4a6)C% bJc"m(@q$#>4U2N贁N{?<M@5"'`Generalization Arrow{jA 24rn"#2]2?c!&G&%6@0_ 048?_ M4U01H_ 22^?p;41 !;?2AY"?bJE#@#N?$d&'Gm#1H"B@eG#FBoH!"'7AFB:CBC؜,CF0A`UML Background Add-on` /CMD=100/1y  >#77"aX#(X%pU oQ!A%?41Y" V VR148|4?A$a@q,`?@I5`,c-3e? @EBDLA- R}dbb .ofv~2r33#A3b?Hc"Gm!rhb#Bbuyi22K(@&c!|#K'`7Copyright 1999 Visio Corpor". All rs reserved.4`p_D112.chm!#31521eMFaE9 W3Y"U%4^AO:R9l"AUdE&Jf1C4T&&l" ub 6ďG`܏+i4'0,e=q7ya]KW;4Q?@ q(?,,$,`,,i,R2,M$,Uml," l_Q”+UNqF +(sPw^uцw1p Vie&w's..pR _]5/Tĕ_!ݕaKѹp_a#C #5/P`Display Se_&mantfE rs(S25`@"EEp/$/6&RU&T/9Vp ?3`S} #&y Op5/%V8Uvg?ң` %Propert&iep/?'\?,Dx !!OBt$G{G`HD   7h ,>T  9 7AUAA@q?@[I?P} u.4p|  @z3Ah94u7`$b+} b mcFuVbtB>4uLTA-4b - 4a$' u >O"4UA"3"9!*k"+4#J#P*"Aa'BL''!"'%~0% b&6$A%A%>3"T2#L6 L1ir&^59 78*'2о=A"6lT47 >Ud59 '(6$ #'%'%' >(`3@4R1T}BD?!HWn> w/K4 RzeZ.xBUG"u ?\?JϊQcu~~w|̄ޤ̆8Adds a customizable comment to your Activity diagram.b~[׿??2|&8i6?4?6BP(p8 4࿈=UGDF # hz0T `UU4#]7U@BP(?@p8?F~_?F߼?Py m4t7`A@it#4u ?u %4 V4bS\ \e.  ' T~~Utz y7# U(" ""z#" "" "'&" """"`""J!4UV b 47~X`UML Background Add-on` /CMD=10_01y 4 5VF Z VW bT661|3A DO;H2`7Copyright 1999 Visio Corporation. All 0Bs reserved.4`;@_D112.chm!#31443K4Ez9e%]M77 )3UUHA 5DSpY&8Z%< !3%J 83[A!0V\\!1a 16'1 ju`cu `U` Connect NoteET7 H3CbvQ7]@lo__QbhAcoo%o7m Hl Xb5eowoooooooo8l Hl Xb54FXj|P8l Hl Xb'9K]o(8lHlXbxҏ,>Pb8lHlXbӟ -?0IkXbEpʯܯ8lHln (ZFR_ 8GE:WVP!0"fCDisplay Se&mantic Erro/rs`2f?x=24u1r1E7EhR:Z!0 fC_T\zE5A#fCShape} |&y OpHAs..b@Ϩτ18 R(E5vIS` %Prop?ert&ieϝ<(gV`P]q03l4%T 27@1122 3x5E4!2 8CT%F@'1 Db- 7A#5-`S 5=R\$7 5r(1"0 ),A7e x>Fq/fC%Use to ce a comment onXdiagram. 7EeCK`10.07NUKA 6~fC,use,PT,on,sts,nݰ,h,UmlM,[VQ/Q/Qh,5Be QFc<(UH duD R # 7# *> hU(TPUUJɤUF~?FG?FP 4t`aAo@tZ4t7` 41t#<4u9A?duSqb2 ]kVNT]7   U K;& ;&U ;& ;&;&;&;&#4U0zGz?H@74#"- 3LN,#% bU#1lJ$zU!#% &ia]2a30E(4#&&)774| 4yp  uBGu$02X5=?O?a?s?@??5?zflbH?O|HO3U8JUIO[OmOOOOOOOOO_!_4:_Oe8J e_w________oo+o=oNVoku8J]oooooooo#5GYRr8Ja -?QcuV8JAˏݏ%7I[mZ8Ji՟ /ASew^Ư۵8FUH LuD # 74h4JT]]HM# MUF~?F?Q 64u`M-@FL&d2ɫ?7 -A +4b . #4t7`  ?\t#gf4udu~l4+b Jg M]J] J&U&&G"M&J4U2N贁NkU?H@9 j#*xp  b*#!2{Gz?z&42Uk"]<")kt#N1S4;Cx`9Copyright 1997 Visio Corporation. All x2s reseroved.` t#? P yA/OlF !HdxCb "G"(" " ! ѫc?FбF1E #CT |B \B ]Aa4u& ]@+T ]RaGL?E )P|]E CyE ?D6PUFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"u ?*&#FPCUmgcOSAdds a link between three or mor bjects to your Static#ructudiagram..bп?Le["I?Ne?T6~\.5޿r<ۿHD # =hj,>TYY9 7#jAUF?A9ȯvּQ(-DT!鿪>4t7`  ?t# 94uLzA-@3_b .>#m >A> 4uJLYAY]nX}Xs4c*$oy}u4 4b >4U2{Gz?<@T7#64p }#s($?(&* Q*z_! b4=X"]4@oF"#A$%@wb tBR11B!"#W?P0!A$6k}?}06l> 0>Udd  Y$\R6aBE@(`Q4F3:W?R"w3 ')R47!T7p0O? _?Q%K^j5d_v_7?QEKUF _O_?Q|2O;V!r4_bec04AaiA^E9 63/'_2q`0",!.RfUGD # Qh=0T`PUU47U@~?@r\.?F߼ϺPy 4u7`A@UY  D    J  T7ssUssHs  x yj4 ?%/9CMWa"o"y"""""  :&3y:":":":":"L#u))4u9bl5u6 u12Y`UML Background Add-on` /CMD=1001y4R3478 bm4 FA` Z /4CC4CM4CW4C4Ca4C94CpG+FAI593  Eu6Iu6B|3AD;2`7Copyright 1999 Visio Corporation. All #Rs reserved.4`.P_D112.chm!#315284Ez8el*}SCU iqJDV` r( ,6vuڊ5W)W9x$*iq*FTYY9 7# VAUF'#Ft^?F?@Pϲ! >-4u `u bu  @4-"4!4 Vg4u7` ?u#Ob2 YAaY@%5>C4U2N贏N{?<7\ #%t 1%tG%4пF輪@# A!P# #dp A *('$$72?!5@M7=W?  ZsN? @q0?@I0?66P(-DT! AJLA@#&2b .!+Xu#ژ!V u `N$6@1A$GG6 3`!B<# % '@% tB$bA&#,A}r C ZM2VGl>#1U@d#5 @DJ!a.RaSP(  (:#r&CN$+4Uo/mF 6J!aiAhaE9 G3A_= '25=FvHD # =hj4>TYY9 7# VAUFP?FT U9(FN]?w?@Px">-4u `u bu  @k4"4Y!4T Vg4u7` ?ux#b2  >@%>C4U2N贁N{?<7 #%tr 1%tG%e4$?r$?F*?F*п@# ?AL!"t(Я%dp  U('$$ 72?'5S7=]?   @q0?@I0?66P(} LA@#&2b ˀ.!+Xu#V u֘ `N$67A$MG6 3`!B<#p % '@% tB$bAD&#2Ar GCU0S2\Gl>#1Ud#Ԛ5 S# 5aRa@%Rb Wr;DC  (:#F 69!CVN$+4)eBoZmF 6J!aiAhaE9 G3G_= 'Q25=F.vHD # =hj4>TYY9 7# VAUF(_?Ft^?Fᮀ??@PXԾ>-4u `u bu  @k4"4Y!4T Vg4u7` ?ux#b2  >@%>2N?贁N{?<7 #64p #2\"?:%&*oE*W L6@#!#Y#&>&"&&&&&Z&&4?J4Q?Fw4Yt A!ot 3d\E" 874$72?5!G=+O 3@q@?@7I@?G0}  `A@3&Bb K.!+XuR `S!J!u0`'$*'"R$+p2ud C`!B <4U % '@% tBx4bJQ&SJ!r> CZ>3F*Wl8>#1Ud#hE @Tab ac` * (:SFF9 C^4eo]%3_iAhaE9 W3oP'2E=VvHD # =hj4>TYY9 7# VAUFv^?F'#F?@P9f[">-4u `u bu  @4-"4!4 Vg4u7` ?u#Ob2 Aa@%5>C4U2N贏N{?<7\ #%t 1%tG%4켪}п@#X A!P# $dp\ 7 ('$$72?!5M7=HW?  ^sN? @q0?@I0?66P(-DTC! AL)A@#&2_b .!+XVu#!V [u `N$6(1A$GG6 3`!B<# % '@% tB$bA&#,Ar C Z`M2VGl>#1Ud#5 @DJ!aRaSP Ŋ (:#{&@CN$+48Uo/mi4AhaE9 G3A_= '25=FfF 7^HD # =hj4>TYY9 7# VAUFP?F*M]w?@Px"?>-4u `u bu  @4-"4!4 Vg4u7` ?u#Ob2 @a@%5>C4U2N贇N{?7\ #%t 1%tG%4$?r'?FCU @# ?A!"t/@$'B"/%#7--? d9p   #f2l7w4  @q~0?@I0?66P} LA@#|&2b .!+Xu#V u `N$6@7A$MG6 3`!B<# % '@% tB$bA&#2Ar CU#2l>#!Ud#5 5S#t05aRa@i5Rb W;DC * (:#F69H!CVN$+48)eBoZm F 6J!aiAhaE9 Gr3G_= '25=F.vHD # =hj4>TYY9 7# VAUF꼪?FN?Fڮ??@P.j["?>-4u `u bu  @k4"4Y!4T Vg4u7` ?ux#b2 @%>C4U2N贁N{?r7 #%t 1%tG%4?FyU?@# A!P# bs$dp # ('B$$72?!5M7=$W?   @q0?@I0?D66P} L)A@#&2_b .!+XVu#!V [u `N$6(1A$GG6 3`!B<# % '@% tB$!AD&#,Ar GCU0M2VGl>#1Ud#Ԕ5 S# 5aRa@%Rb Wr5DC  (:#F 69CVN$+!4#e#1Ud#5 5S# 5aRa@%Rb/ W;DC  (:#F69$!CVN$+4)eBoZmF 6J!aiAhpaE9 G93G_= '25= F.vHD # =hj4>TYY9 7# VAUF|U<FT U9(򱓈?@P=?,~>-4u `u bu  @4-"4!4 Vg4u7` ?u#Ob2 >a@%5>C4U2N贏N{?<7l #%t` 1%tG%4$?r'>*пF*w @# ?A!"t/@dp Y U('$$ 72?'5S7=]?  sG`ϟ? @q0?@I0?66P(?-DT! ALA@#&2b e.!+Xu#kV u k`N$67A$EMG6 3`!VB<# %8 '@% tB$WbA"&#2Ar #CUS2\Gl>#1Ud#5j S# 5aRa@%R_b W9;DCT  (:#F69!CVN$+p4)eBo@Zm7J!aiAhaE9 G3G_= '2(5=F.v_HJun>" pk_A/F̑E 6 w#TT / oB T ][a& ]@U+\k]Qa,E MGE $PE ??(F ~WE E Y#9$E ߒ&RF )E F )-gLF 0`UFDf" h7 T77 7UF~@ǿxh @JT(  GTN` (7UF~?N&?d2?FUP 4u `u`bwu $ )-4'"->9Zs44u7` ?u"24`Ps b ]M] \" #"7 #/" #C"Y #W"] #k"dz'&&"/""C""W""k"""""mw{&J34U2NNk?Hu73w6Z4 3FM\.@"44X6vvj6v6$72?5& G='O , 36aGL bA~4OaZ[D< DLsa/M_Q ZV5"z'E_#"Qa`Q(-DT!?M [ 7@@9VT @@> 3EaAC I4`?Copyright (c) 2001 Microsoft Corporation. All obs reserved.4`Vis_SE.chm!#27283G 4q`?ofmA?l2?-AeHrAe:a0lJ1U|EREI Z 3C@Basp84R4V~4~3.40R4^CyS~Eq7YUtwYEI " -t67E & 4&M 4&D"M4&6M4&tJM4&8JU & &&&yBLI5rM -ɒr#S& RE2R4ޓ՗EqK]o5ǏȟڒВ䐢{0ׯ ) 9cHZl~Ư.Ϸ# Itd/#+ 9S%ѿ^p=Oo#ϮϾC#+9a 2DV߭߿ߌߞ߾ۑ#W#+9#=Oas#ۑ#坠GY(ik#+pdTXqXq96eq!98&xD TEaܷ@yBbbUA!ۇr?%{&C{ C4"H& P`Reposia Branch Endjq&,"W",","$,"2&I5WTL^qgy1  :gޓ&REң_W/*C/{V??$ ??G[?m?VÐ???????;$Oy&E7l/aHn># !OyaZECWcVFF 58T :6yB Y]oa4& "7@+\/T %2adF WYPUFDf" h7 T77 7UF~@ǿxh @J T(qqRMN` (7UF~?N&d2?FP qb] \M4744Y4]4] +v\0+:+D+N+X+Zb@ ?U ? ???grv4uq`u `b""u *!1%-4-"("3!D"?"`#s44u7` ?#u)"4f(V(Iy!" "6}!rJ34U2NNk?Hu7i3}"64 3FM\.@44X6|#|#j6|%6$hgC27?5h G=O5 32 %Ly!,[D5GLb$ AZ!&x4a%a/M_Q ")%)ZV/;","{E$_v$ )Q a`Q(-DT!?M [ 7Z@@9VT @ @> 3EaAC I:"`?Copyright (c) 2001 Microsoft Corporation. All obs reserved.4`Vis_SE.chm!#27282G 4q`?ofmA?l2? -AgHx Aeb0lJ1U@| REI - 3C@BWasp84R4V~4&3"J4"40R4^qCyS~Eq7YUt}!YEI ~A |8:MMMMT F F F F FybX?FMLP"ySr0;vs?< # B eRE2JR4ƐEqK]o5ǏM Ɛfx: Ȝ ؟ E*Pbtߪ߼X߰]Ȝ+=X #y< -kbbtȜdb ƐAaEBT_hEP! UTReposia Bran?ch End5I5REE/pDcu6e ъu8$D힮Ea@!b`?3%RӒ}3wrCBFCbP`(A/DE 2@22]2!W/!D/, 1 8?:; I?[?m?2N!%_'xQ!O#1@sw ;:; OOOOC2%OO( __0_%6i:;f_x___Cz__(Z_oo%6":;Ko]ooooCuoo,ooo*%6/6 |0BTf2Af' Zq&B2@uqL@ˈb1BA&?fGKW0gwgi$C'!&1> atBH)A)A5z4~rW9;#?")C>BtQntR K6w >? p_b Ak 5V;6C6/6rZ6<j20z5$@ǒ~u;#!!"`Multi,tree,sloped,Linplit,into,two,six,b2es,control,handle,on,primary,Connector7mbining8V0s,associan9junmjoins&`pCb"O?H' n>$ !OyaZEEWcVFLG I@8#T AB T &Boa& o@}+4T o2aG oPUFDf" h7 T77 7UF~@ǿx  PV^Ecyqkgba^WRConnecter that splits intoree branches, showing a one-to-many relationship.es create multiple c8.8 poab\.P&d2??DƿfО??&UHLD  74h8JT MBMUF~?\.?FM&d2?P 4u `u bu  -4 ">@44u7`l?j)uu"4D4Wb B2 M  L M#Z7 `A"2" "[J4UF`0 x@[$t&ZZ&ZB&$'"/%F&1#?*1? ^ 4n#e"w@zQn#2q0??6i?lA8n#AD};I`?Copyright (c) 2001 Microsoft Corporation. All ;Bs reserved.4`Vis_SE.chm!#27284{9e%K? b/O1kq~2Vqkj_lYF`Q(-DT!? &[ 7v0@VT @kYQ""BV E{A0)lJ(JUh[PE n#s 5abWac`b(2n$N4r #bc4LBN)MWrIR`@R@eA#c5n]gd#f"`.a!>d5I qooo:n$x#u`_{i@L1|psgG b($npApbArplPTr}?~|buc=v.&" 2"&Ó"Ζ :a`Reposi[A Branch Intersec[ADԁ7UD *LXbvQui{Q"& "&7 xB` 5S1D0as$©ӯgheCaTae"??75. 4;Bb(9D +V+?4t0`tRIK7jX-KcxCl? kb U#@aŐKc]$@gKE Ao+yC~One,Conner,splits,into,three,bes,showing,relZBshipcors,combinceӖ,associӲjunjoins[eVXkCk,Hb+Hu n>% !OyaZEKWcVFRG EL8#T }MB tT Na& uo@+yko?aDV7G oPUFDf" h7 T77 UF~@ǿxT$E=3AU@~?@bX?@L&d2@\.Q} 4u `u A@]u  %4 bh"N4u7` ?kuv4b - LA@UU7 -$">̵@k'?.?.k&-,}&-&`'*'H-&" 29&"//??(6V7|6i?{83'???>4<\$Z$aPxD :vA4 tNSsB Lj &/ HT7'M'Oz?,2B OOOO_'7\"@" &>BR R2rq?@I`?de?P} *`A-brGR#lNb[u.X4n_bc@9 f r_b l@brAcco`ie ntk~awCpBy.9fSX.#6ęT\$[&?bUxDv q Sq\A\C~ IV`?Copyright (c) 2001 Microsoft Corporation. All $s reserved.4`Vis_SE.chm!#27301GS2bq?]A??CpVQt#d0l*4>Ud =șST@gBm@gBaUgnY(TSAF##7 & #-ŋ4*y{h` QSe1icCe"rb ec oAd`+ `>P_pA-#"U7o:'A}n!@r{ HaeSb[} P .ZQq:n.lh @a@R#8%0azEXjp|ȳ֢ӽ ̥;/?9Wx߫{UN_ .ۮ`?9dR"ٹ8Urc3q9Ā."P;M붡_ms $S q9#Z. _8̳qa;֢Hu,GSjYRi2T U)wJ3_o'?-TrWp6$P9-Y(<cQqg@`;pcdd beAtRgAgBm@S24fu@`u(eufza`pR@'!)@`u zaa*u2+k,)de#u#R1WR"WcV 2qB`ReposiD Bend"rtFV#2^R>AE1K]c~g@h @z2t8N ,+@.'2=/0Z++`.d%+tB/+XJR&XW)_B/9Y&NW)"c>"{E4U6~S8Uo1H@Sy?3t?6u!K??/$$v,)uRONh/'!w5O8ř%s #)b#L)=JJ"SlCt@Ct@d?a~?/rSB2R!o@"%r  $o!+sxRuR""R+s:[GV&m4!6eK,nG'FrHB HBr (#,h׾0 ?Qc%$0y8b$6xGRg.g&#\bH,-;OBc<5-hT = e,oGoj<52hSyzz}#b)q`Change Arrowhead...^Bed\eDC/QOnLpA;k#<ɸh_C5TBNNҴH"Td$M@ qյ@1ya qѠUniversal,connector,Line,variable,aݥ,routes,betweenƵs,adjustڲright,נled,CȵsưmbiningƵ0ssocia4ǰjun3joinsH n>& !Oya"ZE_;cVF4qG s_vG Q(fUFDf" h7 T77 7UF~@ǿxTA$E=3UYAU@bX?@~?@@N&d2?P8A4u `u bvu `u 4 &A-">4u7` n?eupb@D%P D h3AU,g 7>4\.@K?4M"0&\#S,B&' /% "'/ 47!#"!LF&""FL2rq?@I*0ϋ5є5?u4rg qrƫ#r70B60/11U21<6R:i?1#2>12!d1@*/H0`A-b C7dBuNf@`.FM"BLM"uqHqM2\8&M!"6*4$:0QV QQqF$a)!#QQS~ 4`Vis_SE.chm!#27293I`?Copyright (c) 2001 Microsoft Corporation. All Rs reservedO.G!#22q?DoVfQ?1#?qE86W@S0lT>,>UdmU= A2WUSP()W!$F9m \$1vL3,$C&4M!#z61x FT&Cu{k5GAw?v4A2 \"#ywE"|x =w5tx17 dag=!T11"a݄7H11k25R45b([Ƀq? QQ1%+7^br 79!!1{M1tQ2t4@k5 jK30q? fb .KC+ UUs&$@05e}ɃQU nSdSides,Connect,s,one,same,anotherors,combiningŠ`s,?associbġnjunդjoinsp7.Pam=(Vt?Dt{>AQ!YY RrqDv C1  E d El)1KFA E KCb1@QV' !OyaZE,WcVF|G c7#CT Qd B T ]e]dW& o@G o 2P+CklLsUFDf" h7 T77 UF~@ǿxT$YY9 3BMAU@~?L&_d2P8A4u `u bu  4 ?@AA-">4uv7` ?eup b+4 DQP A @j>4U?@\.@$'%4&RA"$&P#W,G'Bh'"/%'P"/ 47#x "LF`"G2rq?@UI05ш5?44rgb 0 Z0l26?50Y*/<0`A-Abr7Yd!BuM.FA"PBLA"uqeHqU3A! 64 $:R0F AqEB $Ya#DQQS~ 1`Vis_SE.chm!#27292I`?Copyright (c) 2001 Microsoft Corporation. All Rs reserved.c2#2΂2q?_VZQ?%#?q E,6B1AT0>cS0l>(>UdA!E=52U'S.P (3UFf?%fP$g40*?hclo\8,lCv{5217da*3W+4T11 "5tB11RQ (]pa e(qE@qq$@RrqU}sDQU ncSdSide,top,bottom,Connect,one,anotherors,combiningPs,associRnjunjoinsiA.aoi=G3?Y`'T?=ABG7sqaYwi (ATQqFUcSChange Arrowhead..P;b)=P@I7f"cS_Move Text To O BendPa` UP.1Pos6Q@@C~F( !OyaZE5WcVFG m&#T nB $T ^oCaW& o@,G o;P+kt-aUFDf" h7- T77 4U?~@xT YY9 #FAU@bX?\_.P} u `u bA@uU  .#D2AZ@u `hW?\hrM|uia>U @-?bl;'bE-ho'y(42rq?@I k?$%? @"V*5LA-br/  ^vԜv"(2u&."q28iv"uh9d&<?/M #14;|`Vis_SE.chm!#27265I`?Copyright (c) 2001 Microsoft Corporation. All ;Bs reserved.x4U  1#kB7>A0A+4j'vQ8l> $>Udv5 \Ŋ4 $lU 1$b24R4eU~[D ZQiAa59 93O';2"q?=A2GB81avO3N߲=8gdaozG T 5d2eQeQ28ch$@ a51`1E b@Dynamic,connector,automZ@cally,routes,between>us,;B,angled,l_ine,C@us>pmbining>u\@s,assocyiZBqnjuntjoins,yH^qsHen>) !OyaZE_)cVFG u#T vw7OB T wqhdIx@+k1|sG z ̂UFDfP 7h$T PUU4UF??F BP(?x 3j" bAb1$P1%!?񐔙[@RصU7 }>/K4 RzeZ.xBUG"u ?\?JϊQcu~~w|̄ޤ̆Denotes conditions and proposthat must be mai{nt$ed arue fore system tovali'd.% .b~[׿??2|&8i6Л?4?6s5EUH LuD # 74h4JT]](M# k#UF~?F?Q s4p b @Sjau`M-FL&d2?7  2[A]4=)PbO .ALTh4t7` ?t4#4uSu4]b9%B&9 B!MK Jj& d"Z"`&j&*j&~&,!\d""&//?#?5?G?Y?j="j????????MJ4U2N贁WNk?H@9 %Ci*u bNB 64^J#2{Gz?,!5F 4+/C&B1"#`&/C QTKC`9Copyright 1997 Visio Corporation. All 3Rs reserved.:$`9 /C_P "@/-$K /u4 /Vn!R3c!"+"^#n"""n"j/C&DM%EM," tB OJ U:$ ffa)!OWdR9 lJ,JUhpe5dE6azrp.K@#H}ZPfr?#T`X3r?iZ""# " # #Ջ4cZWrSju,"Sr$-1 Cv ;E2IwcArM ق rA@31 Db?7KA/5_`?5A=L:wF7>5Z10?MJL$Z.JJe I1 +jT{hCRep\AnY@a serelIBship among model elemthat specif~D condik a]p=osmust be med arued@?EgC}`10.0iPU4A `ۂss,,M,, ,,Uml,,,,, ,,  AXQ1Q1Q,D?/3BhDq}V0SIzfjUH duD R # P7#* > hU(TPUUJUF~?FG?@P 4t`YAt18a4ur7`?Q5Xbu#lb* VNa7    '& '& '& '&'&'&N'&#4U0zGz#?H7_E4#|" 3KLN,#q|% bU1lJ$zU!#% |&iar2Waz30y()4#184F#164p  uu2Gu$2D5)?;?M?_?q? ??zbhWbA?>{8 OU$JU5OGOYOkO}OOOOOOOO _4&_;e$JYQ_c_u________oo)oNBoWu$JVuqoooooooo%7^U^s$Ja+=OaVz$JAɏۏ#5GYk}Z$Jiӟ -?Qcu^ǵ$F_H'n>* ՚<wCiFG |#T }w|B T V~}ka& o@+4T o@a5H PGG ?PH C UFDf" h7 T77 UF~@ǿxT$PE=3UAUF~?N&?d2?FP-DT!@A4u `u bu  -4 ">@44uv7` ?jSuu"4D4WUbh#4  A .2AU\&5&[ W8">,>'> \._@M/?[Z)&Z,&@']"/?B7(? 5#'L?^:4^4Ul$j$a v4 tNzsW2 62,3k&G@b6<@QD} A"LW'V F "B2B"B"I!@2rq?@I@?DE??Z4rUR S*/t@`A.@b S7@j)RuKTXRvnPmY(#`-u`@;@;@k@u`xCH>&8"W3Q13~ 4`Vis_SE.chm!#27277I`?Copyright (c) 2001 Microsoft Corporation. All 9bs reserved.G32Bq?of1?"?nP#FATa0l>hUdB!E=7"30202WaQsXpi(439#q$4sEHPnT&s0~R [V[a;A4anxnQaeB'yi(T1nTScChange Arrowhead..s`%b)P@73[bS0 Ss k5 A#`YP`_Set As Stra:bLine]` Controls.X1`Widt?h/2~WqY`pB7^ME#}=i(zHQy5Dh#E[wDA!`Modify Curvatureh#B"7 (GB2Ţ#&iAҟ8 .'G3VO='d?=A8,BX[aAQ{C?A֟gPdaG4~T7A5BpqpqMB HSTnT$@ MEٳQ5 c,connector,automX`cally,routes,betweenMs,ced,diagonal,Q|om?biningMZ`s,associXbnjunj?oinsAe^Huo>+ !Oya ZE_?cVFDH '#T !w{B _T ]na @k 1a  5>(:UFDfP 7h$T PUU4UF@ߜ?F??F BP(?3" bAb a1$P1%!?񐤙@Ь,sU /:/B4g eBZ P%.BUG "u ?  ???GYDAdds a link between two objects to your Staticructure diagram.bԿ?m:mԿ8?>?>? UG HD )# T#h @> T(YY9 7# AU@BP(?@vOn?]uԿP} m4u7` ?A[u#4u Z'uY`4E@bvKu`u ^:xsJ.JLAXA744a )%Y bJ d7"A/K:E#L'u->4U2N?贁N{?<j5#24r\"#!^"?&G&n&:ycY3 F!3 -236"2 ?3 "4*02Q?c;4#@?@ ?@>?$8&7[#2M V nDģ%?#A-"bUD V VQ2 ! c cc! J84A~~aĿ@q`K?mg @P"*>L'A-[yab 7g-2r3A3 r?!!9R[!'s9R,riu6y20K@!%|#qtKp`7Copyright 1999 Visio Corporation. All rs reserved.c`p_D112.chm!#31524e>harE m s%7 dE4\aa7!7!8bdbQQ aarl1Ud9Q)#9NDa4]pg[<,r ,r%paH?pğq#>cIDbG q8 rO?@@r A?_Qͼ\a;# [#OVcVۢ!u#OVcV!L&r,#3!Bal%ml =w9Rr3XK]o66xgfU?SŢ ףp= Լ 1ۧK#(# WV#vWVp-?P'_c_aXaXdEbUA4 rZ%rQ!3|@a,>P.ӸHb{]-uX1(Ed?l~O>P8_X/Xx3QAAbem%Tӽ@uuJ Vie&Ows..B_]5(T$D1iKQ?c= _?4dE?c7P "Display Se&mantic Errors??!S2J>"r]!Ѐ3p @2EE5O?6RFOVOh8#Shape >_C&y Opq?DO78?:8ev,_c=` %Propert&ievO_41_6g@bToDcfA%TBq ddD]!]!KBqBq'!'!FaFas1s1$2AAlrdrRqRql!011@$$шa33.ta5;tr4Ht'!]"mTϔA@y XqD$с`qtrՄXqKWezuۧDYwPvEJ GXqY~c P~s1[rF`@j@pyr%r$rG.yrU@gwHstAWr$5M,k'!?FoF!Fd9 gxss0FabEϐ@rb'dsbH#XqrkĊpsWCu`uy`6ul `Xqr혘`uV@0%Wrr u` z'#Xq,rS```$̯9rv2P&Represents a link between two objectsnPXqiA,c`10.0xSrGCAsP.x,|,sWQs,p,Ll,^,Uml,{AbгA&id2bԤIHG6@XNSUk'0q.@B b:rAZצ7KHD:  ;h(>T@9 7AUAhf?A 3߿@q?@I?@P} B4u7`p  ~  b b5Au 4+uLA-(4vb .6? z3*nh>&h- 4a-$5  #>Q4UO" qKTl(&{"&'4v Z'|!/[\ (/">% bBO%?O$AA"[@#>6F"4?0" t` Ql @Ud(77?'6$U.#5%5%5 L(`X#4|1I B4Hi4A^| =!7Z-f'0P=A"FHD # =h(>T@E=7#AUA2}3?Ahf@q?@I?@P} B4u7`p A   b bAu# 4uLA-(4vb .6>[ z3*h>&h 4a-$l5  #>JQ4UO" qCKl( ${"&'4\%E!/n\ (A" b)FX#O%?O$AA"[@#56 51" t` Ql @Ud(77?'6/"Wa.#5%5%5 L(`X#9(4,i1B4$H!4/!aiA^| =7pZ-f'0(=A"FHD:  ;h(>T@9 7AUAbf?A43߿@q?@I?@P} B4u7`p 7 ~  b b5Au 4+uLA-(4vb .6? z3*nh>&h- 4a-$5  #>Q4UO" qKTl(&{"&'4\%|!/b (A" bBO%?O$AA"[@#56F"$60" t` l @Ud!(77?'6/"Wa.#5%5%5 L(`X#C4s1$B4H i4A^| =7Z-f'C0=A"FHD:  ;h(>T@9 7AUA43?Abf߿@q?o@I?jP} B4u7s`p  ~7  b bA@u 4uLA-*(4vb .6>[ *z3*h >&h!a-$l5  #>JQ4UO" qCKl(${"&'4\%|!/b *(A" bGBO%@?O$AA"[@#56F"$60" t`F l @Ud77?'\6/"a.#5%U5%5 L(`X#4s1"BI4Hi4A^8| =7Z-f'0=A "F_0Ho>, yQ<$}B FԭH #T YB9tT _]Na& ]@+k]-aG/K4 RzeZ.xBUH"ud V? q , :FgDenotes where tis a semantic relationship between two model elements in your Compon7 diagram.bؿ?Ͽؔݿ?H D  # =ih@>TA(E=7#:ZAU]+?]?P} 4u`u bA[u  R4 6+&L$A@m4u7` W?p5u44a bO>4U2N贁NK{?C"A"b)b24rY!#2"?,&Q&!x&<,U X# 4Q&$qf ?/&?\.+?=JN#U!&#?!t{7o=p78D|&#&?#&A!"_ #EFF!#FU F FF AiU&#7j7@!?:EV BI  % U!"!霙 z^?AVfA?2r"?@IPEі  N}?#ASQ?*=L A-[b>IR7 o~~-R6gRu .-RARB~Bu` SI[4} 7~X0=`UML Background Add-on` /CMD=1001Ky8҂adk4`Vis_D112.chm!#31464'1`7Copyright 1999 `io Corporation. All bs reserved."k@!l8>jUd~9 CRU0 arasp(][<-YSQ>8{A1q4Apaby=77qCT?-Y4Ԇ R*giUg3 'E$4"2R+ggdaCT!!"Y!Y"A22 FFB5sb)4" (?@A E$27=?C Brz30Q27 G2DA5>av C` 5#pMV 8,2sۓH2EVQGc=Indicates a sem_antic`lbship between two model elements`2secJ10.0\u蹊a ZcPð,shapes,,Mjȱ,,͵,R,dependency,Uml,n#?aaP(s|gev !` Vie&ws..`?bEoWm5hdh$.J7E'a_%NF@6bA "cDisplay Se&?Errors!Jac2:x%P@T5as߅ߗQ„Ý!`S7 &y Op ^f8:6GEv-S` %Propert&ie`lCj ;;IG!3-?aS5@d"k;;gBph!gg`&, ^q8န8ᛝA5qP&TShow rzPH'o>- /K4 RzeZ.xBUH"u q? q _׿k / =߂M=N~Adds a dependency relationship where one elementquirenotto impor operate fully.H .bؿ?Ͽؔݿ?H D  # =ih@>TA(E=7#:ZAU]+?]?P} 4u`u bA[u  R4 6+&L4u7` ?dut44a b$ A@>4U2N贁N{%?C"Ab~b24}rY!#۠2"?,&&!x&<,*X#u4Q&$q ?/&?\.?u=N#%U!&#?{7=I78"|&#&?#A_ FF!F F FF A4U&#77@!u?:EV B u U! z^?AVfA?2r"?@WIPE q N}?y##ASQW?*=L uA-[bIR7 @-RgRu .VRuCu"u`T7"!#d[4} 0=`UML Background Add-on` /CMD=1?001y7$X8adk4`Vis_D112.chm!#31538'1`7Copyright 1999 `io Corporation. All bs reserved.`"k@!l>UdȐ9 CRU|0 arWasp(@][<-YS Q>8{A1q4Aa8by=77q C?*-Y4ԆRZgiUg3 '$4"2R[gg@daCɅT!!"Y!Y"A22FFB5sb4" (u@Q@A EE27=?DR0Q272A5>av`25#pMV 8,2sۓ2E:!`{Indicates a depen_dency`lbship in which one element`qui` anotherɶfoor i`fu`imp˳b oped\secJ10.0\u#̊a }csF,shapes,One,RӴ,*,۴,,ʴV,O ,,,Uml,Usagen#%aa(s|gev !` Vie&ws..$`%b+o=m5Ndh$.J07E=O'a_%N@6R< "cDisplay Se&mantic Errorsp߂Gc2Rx%P@Ҁ5߲O݁!`Sv >E&y OpmlDf86G0EvO-S` %P=r t&ie\fFlj ;;IGr! 3%a@d"kd,>;;g,^qᛝA5qP&_TShow PBGȔ!XTe\zHBI wHuo>. /u_L0PFI zw#$T s]tB Y]raL& Y@}+4T \TB̻I LPUFDf h TPUUmU??F BP(?30@$,- b]b a$+?Шغ sU/?:/e!Z "%^WUGuZP;$h!//////6u E?)7PV ?WQcu cDenotes a set of objects that have similar structure, beior, and relationships in your diagram.b~׿j4F??inɶؿ`0 ?? WGҿvnᅲ1e뿀D"H$?9h3?UG D  # h0T`UUU@vn?@.c2?F~?Fi4Fܻ?Py r7qt` rb @ bj *AIu`H?ou{U 6DK'6P#`& P#t&RP#U6ĉ"""&#&#"" """"""(""2""<""F"&K7Vn3 U"3(!3 3`2'&3"666Z6, aD"@ (kE Er!!Rr3:_r4Gq5TŴ9HksVQ LL&A_'Er_r BWdE/qҍB^sdE@<bjd'U4@>Qo d[T6QB=c `߄xWqQ |#K2 C׌uC?$6GCRC ? _CpdEu`2 fvV w  CtHsbtJ a-I&N"Q^6g<H^񜷁 @j##RrYJbv W+`Width`UP.DefaultVGÀ~I(AႾ@jUS`RepQnPa descriptor fa set of objecPwith similar structure, behavip@rel>RshipsPdRt~σQXP[,shapes},,Clas-Чet,,,/Uml,,_TSͪqXP1?0.0p(Zu'UmZECFgB\6Q`pv.Q߃6QIu`d]u`.qrJFNgnp` ExtepArrow6G4AB a-C4AQI|ew66E .@Rdv66E#5GYk} 66n4__j2-px0[6Q**K` Dia&grams..P.uP-List the dia" Cociatedthis AүPR\B$bOtM4DRFf!tHײq'i F/X+!wO(hf2FNt?F[?F)g!؆9#bLwYe)}eŎ w?u 9H)ƒrnjWx5Ɋ;UW8 PV N`AJ@τee ? fX njteW zE?ǯٯ?wW|>p縿ʿܿ<'ޏ*!gnjMg&nDɊQ~vNЃ3a~ߨ0?,$-QQa+e.Tn_S.BeD!;eHD: # =ih(>TA9 #:AUF~?Fi4F?FN<@P-DT! ABu `u bwu  -B *@Buv` ?FSu#Q"B0 ChV>h Ba b>ABU0zGz?*gb/B] Bt` @n"qt x(dp A ('B$$'"/%7-? 6p@b6 1l>#!Ud#3 A5tR$>0R@Ca:C9GM[B84KMOZeMHD: # =ih(>TA9 #:AUF~?Fi4F?FN<@P-DT! ABu `u bwu  -B *@Buv` ?FSu#Q"B0 ChV>h Ba b>ABU0zGz?*gb/B] Bt` @n"qt x(dp  ('B$$'"/%7-? 6p@b6 1l>#!Ud#3 A5tR$>0R@Ca:C9GM[B84KMOZeMHD: # =ih(>TA9 #:AUF~?Fi4F?FN<@P-DT! ABu `u bwu  -B *@Buv` ?FSu#Q"B0 ChV>h Ba b>ABU0zGz?*gb/B] Bt` @n"qt x(dp # ('B$$'"/%7-? 6p@b6 1l>#!Ud#3 A5tR$>0R@Ca:C9GM[B84KMOZeMHD: # =ih(>TA9 #:AUF~?Fh4F?FYaD+ج<@P3žm>Bu `u bu  -RB *@Bu` n?Fu#Q"B0 Ch >jh]a^ b>ABU0z_Gz?%gbUBiugBt` @n"t x(dp  ( '$$'!"/%7-? 6@bU6 1l>#!Ud#3 A5R$>u0R@Ca:FGMB4EMOZeMHD # =h0>T@dYY9 #AUF~?Ffl?TP6 t` ?A@Uu#`Z Spb@3 b&uL>b .U  u8A Z  za$  g>U2ǍqJ ?I/[&?\.?J= "U[& ",,)',"2!MC${Gz-l#@@#ct$t5'+C#5 Q7O IC#:$A:% 2N I2O+#b*$62!BJ<'0]r # %% l>YUdvE46I@  K 7(`C#FF@CAb "b3R( !O^5Q3A^Z_l_W5Q|5AUF_O_5QE01O>2rA%2[c0iWDAA^|59 6(^J< '%l"' fj{ooCK3l$<!3Zr]bv 4:","2!0{6!aHD # =h0>T@dYY9 #|AUF~?F4F??Ffl\?P6 t` ?t#` ubA@҉'Spb@3} b&uL .T) )'u8xA  a $  f>U2q? ?>/P&?\.?(=P&,R,'!"'!M8${G[za#@@ƅ#t$t$ 5'+8#5 R7N I8#/$A/%"M H2N #b$6'! B8YUdv!?1C.H*K ,(`8#F,FC"A1 "W3R(kDON%Q31^J_\_W%Qq51UF_O_%QE1OL>2rA2IKc0iLDA^q59 6]?TdYY9 M#AUF~?F6f??Fl?P6 JtM`  ?)JMt#`  ubA@J1UJuL^) .3M 3p rbFd2L&?0FJu'$ A Zm/a$ " #  >JU2qk ?j/|&[#?\.?2="|&,"';8q#|&;2"?1"%'J+d#5 1# 7配d${_Gz?<@U@6Jp U2)n3%n5*t:" =##">H3@36FC)!BFd#[$[%5" tB"#bU!$oF)!-;"J% i^(E9 II3O '%u2'VUlJ4>UdAETgQX,1" X(`d#:A5F<QĚRY "1# b@8|1_^!a3.mFoXcW3r"'g1'tAu`rua4,$QE|oeR3ru1cb,b\rbQbQtb`]oYb!aELQZg#[sUbdasbgQ28_;1rA"%p@[8!aHD  # =ih,>T!E=#tAUF~?Fi4FW?A]?P6 t` t# ]ֽuLA-W@ >U@ iJu >  zFa5  b v >U2{Gz?@T"#6p}#s2$?2&* [*i!bj =5 e4@"&,#`!r C:!#$A#%@m! r["2a#bU|1l>0>Udd11+$B + "U"["m!d b;@["Ea#># (`,#FL9u6~A 'B(A!GOOAA3N __A<5K@X_O|_AEn1OL>)2rA)2Ic}0iA^P<59 V63/'2Eq`:"#"fCj.o@oaSjg:#o!3 r1v4#" koojj_H4 +@U,~:N\E}4FTJ f #T qOB T ]ral 2@+$T 3caGg Ֆft! E$~) iϸ t2 Ѹ : 1~E LS b s ߸UFDf h TPUUmU?? F B/P(?30@*$- b]b >a񱐕$?вغsU/:/eZ "%r^UUGuZP N$h!//////6u| n%  1:{<B:72/xAdds a classification relship betweenmore general andspec element in your StcOructu!diagram.bϿ?,؂-؂ݿ?_3OP?  UG HD h# #h TB,YY9 J  AU@U?]ϿP6 u`u`bA@uY`u :/*Pmu` ?hSu#xBJ&AAQ)a6)C% biJc"m(@q$#>U2N贁N{?<@"'`Generalization Arrow{A 2rn"ۢ#22?c!&&%6@0J_ 048?d_ M4U01_ $22^?p;1 !;?2AY"?bJE#@#N?$d&'Gm#1H"B@eG#FBoH!5 ( FB:CBC,CF0A`UML Background Add-on` /CMD=1001y >#3"^aX#X%pU oQ!ȮA%?4T1Y" V V1)4K84?A$a߿@q,`?@I5`,c3e? @EBDLA- R>dbb .of~2;r33#wA3b?$c"Gm!rb#4Bbuyi22K(@c!|#5 '`7Copyright 1999 Visio Corpor". All rs reserved.`p_D112.chm!#31521eMFaE9 WY"U*8>PAO:R9l"AUdE&Jf1C8T&&l" ub 6ďG`܏+i4'0,e=qya]KW;4Q?@ q(?,,$,`,,i,R2,M$,Uml," ӓҡs`10.0l+Q”+UUIF}P{ZqцT1p Vie&ws..pNusDList the diagrams containing  views ofis Binary AssocisqT$R _]5/T"%_,Թp_qT"B I/[#5PwPP`Display Se&mantfErrors#cJ`G./ /\2B.F02r#ѫ`@\"5l/~//E6R&/F(?S`S3&y Op5n`wq#w or edit d4oOD /T?]8B/T*:UOң` %Propert&ie0r`bJApSPO$O0.1OT&,TQ0101,ZA^bsT?3.B$G{G`HD   R3hZ ,>T@  9 MAUAޭA@q?@I?P6 .Jp|  @z3VA9JuM`$b+ b 6cFuVibtB>kJWuLTA-Jb  Ja$' uM >OJU5 3"9!k")J#J#5 "Aa'BL''!"'%~0% b&6$A%A%>3"T2#L6 L1ir&^59 78*'2hX&"6lJ*M >Ud5J9 '(6$ #U'%'%' >(`3@PJR1T}BD?!H'stƂ w /T6DUFvn;?F??F BP( ?33 b=b= a@wвؚ~sU:/eZ %r>UGu   bM^LlX~`pAdds a collaboration in which all of the participantronemposite object toDeployment diagram.bԿ?m:mԿ88?>>? UG HD # #h @>T(YY9 TJ AU@DP( ?@vn?]ԿP6 u` ?A[ut#u '-uY`E~@bK;u`u ^:QxsJ.J&AAbia )%Y bSJd7"A/KD:E#L'u->U2NN{?<#2r\"[#!"?&&n&:yjcY3 !#3 -2362 ?3 "4*02Q?c;#@ B?@?@?$8&7[#2<K#2Gu#2'L#JQ+ 3"a,#c,%E A tN'zs LŬ#5 0;`UML Background Add-on` /CMD=1001y`k'A49Rj3OV3cV 3wV3V5> V nD%?#A-"WbD V VQ ! @c cc! 5 84A~aĿ@-q`?mg @P">L'A-[ab g-2rs3A3 r?!9R[!'s9R,ru6y2K@!|#qt5 p`7Copyright 1999 Visio Corporation. All rs reserved.c`p_D112.chm!#31474e>harE m s%5  3ɘ8\aP7!7!8bdbQQ aar9l1Ud9Q)#NDa8]pg[<,r ,r%aHG?pğq@#>cIbG q< r?@@$r A?Qͼ\a;# P[#OVcVۢ@!u#OVcV!&r䚦,#3!Ba l%ml =w9Rr3X`K]o6xhfU7?@Uf㢿 ףp= Լ 1ۧK#(# WV#vWVAp8JYLFAiU¾?A2dqA6#r! Q(-DT!yp0@Aѧ?tF0-2d,3IU`4 4O_N_DBE3!ѣ%Z+Ajӿ >-@?P'_c_aXaXX5? t՘a%rQ!3|@a,>P.ӀHb{]י-uX1dE5e?A\^ij~O>P8_X/Xx3QAbem%w Vѩˮ{qT Vie&ws..@qDList the diagrams containing shape views of0is Binary Ass'ocisDB _]5(T$DD1_Q?c:  _D7ù ODDźwO_;PP"Display Se&mantic Errors'`.??<2DBLBr]!Ѐ3p @!BY/OAOSOHRFO\Hx_#S2C&y Opq3`1#{0w or ed+it4dDod?D _=8OJ_c=` %Propert&ie@Ntr`'j^apc`Io[o>1oFg'!ebiYsㅙՕAT ttD]!]!]'!'!t$2s1s1AA -ššl!01Q@$$ѝq3Cq4LP]!5]iҴv]"Tϓ@@yCmD$іpE ՄmWzdۧDP 9VJvGm]mSWTP~󿫃1rp@jp1N6:r$r\.ǎ$5/z!∃UArMȏk'!?kok!k tb̆1xqb= LybH#mkğ@LCu`uvy`6ul `m'@0@+`uV:CPJl4u`1䟹'#mAfxp`$[NЃtcjRepresents a form1aggreg2 with stro0ownership a#pcoincid lifetime3e partÓ1whole0m[Щ{flcb2s,,,,composi1,Uml,A,W,,4,#hs`10.0,tAcpAn}&EavuOC.i GctU(9&EOsxSUp{'0qe?,2B cp)CB-M pHD: H ;hZ(>T9 B~AUAhf?A23߿@q?@I?@P6 Bu`p  ~  b b5Au +uLA-(vb .? z3*nh>&h- a-$5  #>QډU5 qKTl(&{"&'v Z'|I!/\ (/">% b#BO%? O$AA"[@#>6F"X4?0" t` l @UdP%='6$.#5%5%5 L(`X#!|1 B4HiA^| =!7Z-f'Q0f&"FHD H# =hZ(>TE=AUA,}3?Ahf@q?@I?@P6 Bu`p A   b bAu# uLA-(vb .>[ z3*h>&h a-$l5  #>jQU5 qCKl( ${"&'$\%E!/\ (A" bSFX#O%@?O$AA"[@#56Y 51" t` l @UdP%='6/"a.#5%*5%5 L(`X#P9Xi1B4B$H(/!aiA^| =7Z-f'0(f&"FHD: H ;hZ(>T9 B~AUAif?A3@q?@;I?@P6 Bu`p    b bAMu uLJA-(}vb .? z3*h[>&mh a-$5  #>QU65 qKl(&{"&'A\%|!/b (A" bBO%?O$AA"[@#56F"$60" t` l @Ud!%='6/"a.#5%5%5 L(`X#!s1B4HiA^| =7Z-f'Q0f&"FHD: H ;hZ(>T9 B~AUA53?A\f@q?@7I?P6 Bu`9p   } b bAo@uJ WuLA-*(vb .>- *z3*h >j&h]!a-$5 6 #>QU5 qKl(${" &'\%|!/b *(A" bGBO%@?O$AA"[@#56F"$60" t`F l @Ud%='\6/"a.#5%U5%5 L(`X#s1"BI4HiA^8| =7Z-f'0f&"F_0Husׂ ο\mEEw FJ ߺ#U B9\U 3wa& oW@+ko/aG, o P0- 8- %DC- K-? UFDfP h> /T6DUFvn;?F??F BP( ?33 b=b= a@wвؚ~sU:/eZ %r>UGu   bM^LlX~`pAdds a collaboration in which all of the participantronemposite object toDeployment diagram.bԿ?m:mԿ88?>>? UG HD # #h @>T(YY9 TJ AU@DP( ?@vn?]ԿP6 u` ?A[ut#u '-uY`E~@bK;u`u ^:QxsJ.J&AAbia )%Y bSJd7"A/KD:E#L'u->U2NN{?<#2r\"[#!"?&&n&:yjcY3 !#3 -2362 ?3 "4*02Q?c;#@ B?@?@?$8&7[#2<K#2Gu#2'L#JQ+ 3"a,#c,%E A tN'zs LŬ#5 0;`UML Background Add-on` /CMD=1001y`k'A49Rj3OV3cV 3wV3V5> V nD%?#A-"WbD V VQ ! @c cc! 5 84A~aĿ@-q`?mg @P">L'A-[ab g-2rs3A3 r?!9R[!'s9R,ru6y2K@!|#qt5 p`7Copyright 1999 Visio Corporation. All rs reserved.c`p_D112.chm!#31474e>harE m s%5  3ɘ8\aP7!7!8bdbQQ aar9l1Ud9Q)#NDa8]pg[<,r ,r%aHG?pğq@#>cIbG q< r?@@$r A?Qͼ\a;# P[#OVcVۢ@!u#OVcV!&r䚦,#3!Ba l%ml =w9Rr3X`K]o6xhfU7?@Uf㢿 ףp= Լ 1ۧK#(# WV#vWVAp8JYLFAiU¾?A2dqA6#r! Q(-DT!yp0@Aѧ?tF0-2d,3IU`4 4O_N_DBE3!ѣ%Z+Ajӿ >-@?P'_c_aXaXX5? t՘a%rQ!3|@a,>P.ӀHb{]י-uX1dE5e?A\^ij~O>P8_X/Xx3QAbem%w Vѩˮ{qT Vie&ws..@qDList the diagrams containing shape views of0is Binary Ass'ocisDB _]5(T$DD1_Q?c:  _D7ù ODDźwO_;PP"Display Se&mantic Errors'`.??<2DBLBr]!Ѐ3p @!BY/OAOSOHRFO\Hx_#S2C&y Opq3`1#{0w or ed+it4dDod?D _=8OJ_c=` %Propert&ie@Ntr`'j^apc`Io[o>1oFg'!ebiYsㅙՕAT ttD]!]!]'!'!t$2s1s1AA -ššl!01Q@$$ѝq3Cq4LP]!5]iҴv]"Tϓ@@yCmD$іpE ՄmWzdۧDP 9VJvGm]mSWTP~󿫃1rp@jp1N6:r$r\.ǎ$5/z!∃UArMȏk'!?kok!k tb̆1xqb= LybH#mkğ@LCu`uvy`6ul `m'@0@+`uV:CPJl4u`1䟹'#mAfxp`$[NЃtcjRepresents a form1aggreg2 with stro0ownership a#pcoincid lifetime3e partÓ1whole0m[Щ{flcb2s,,,,composi1,Uml,A,W,,4,#hs`10.0,tAcpAn}&EavuOC.i GctU(9&EOsxSUp{'0qe?,2B cp)CB-M pHD: H ;hZ(>T9 B~AUAhf?A23߿@q?@I?@P6 Bu`p  ~  b b5Au +uLA-(vb .? z3*nh>&h- a-$5  #>QډU5 qKTl(&{"&'v Z'|I!/\ (/">% b#BO%? O$AA"[@#>6F"X4?0" t` l @UdP%='6$.#5%5%5 L(`X#!|1 B4HiA^| =!7Z-f'Q0f&"FHD H# =hZ(>TE=AUA,}3?Ahf@q?@I?@P6 Bu`p A   b bAu# uLA-(vb .>[ z3*h>&h a-$l5  #>jQU5 qCKl( ${"&'$\%E!/\ (A" bSFX#O%@?O$AA"[@#56Y 51" t` l @UdP%='6/"a.#5%*5%5 L(`X#P9Xi1B4B$H(/!aiA^| =7Z-f'0(f&"FHD: H ;hZ(>T9 B~AUAif?A3@q?@;I?@P6 Bu`p    b bAMu uLJA-(}vb .? z3*h[>&mh a-$5  #>QU65 qKl(&{"&'A\%|!/b (A" bBO%?O$AA"[@#56F"$60" t` l @Ud!%='6/"a.#5%5%5 L(`X#!s1B4HiA^| =7Z-f'Q0f&"FHD: H ;hZ(>T9 B~AUA53?A\f@q?@7I?P6 Bu`9p   } b bAo@uJ WuLA-*(vb .>- *z3*h >j&h]!a-$5 6 #>QU5 qKl(${" &'\%|!/b *(A" bGBO%@?O$AA"[@#56F"$60" t`F l @Ud%='\6/"a.#5%U5%5 L(`X#s1"BI4HiA^8| =7Z-f'0f&"F_0Hs~׃ daH(W< FDJ #U B9U R wa  o@+$ U o/aG7 o PJ S %\^  g UFDfP h> /T6DUUF??F BP( ?33 b=bI[)@nؑuUx {?>/eEZT.>UG  nN(.?CU^pVX=Adds a grouping of model elements to your Compon diagram.b~׿fl??nɶؿ<>??@BP(4,c 4И߿HD H# =h,>TYY9 rAUF?F@ ?@?Fd2L&ü?P6 &t`tuA@Mt#uYJYYAu` ?W$L4 P`uk b mLtg8@ML>U2{GzK?<@ #6p 7#0$פ?0&*Y*g! bɄ*#5 Le*#!$A>k! Y"2_# Y^!"uBt bUM1B+/(G4l>0>UddYh4 a2*E@(`*#?&IF9`fW`aNAw  nF(?!%A2OhsRONAA3NOOWAEE)FODO_A|1%O>^!1RSN0(1aiA^E9 !%3h?'_2q>`8"!"=fHD: H ;h,>TYY9 BAUF~?Fi4F?JP6 Ut`  ?u`b v+uL .@ :A:m$>lY_uV[o[ _ [y  b%& ! TX_)"/'>U2{_Gz?<@L#6p #\$? N\&* *!  ! -V#5 1@(#BXV#M$M%=7$ [!23uB  ta1% "b $|1*+v4J%!l>[0>Udd[[*Y4JWa)B/E/@J(`V#FWF%yWyvH)#[Y 8#B(k!aOO}AA3NOO=WA5EXF'_sOK_A|2QO;!rA R$S}0iA^59 :93?'2qQ`Qd"M" PfUGD # h0T`UUU@BP(?@hY?F~?F_flw?Py t` UA@UU(31A .11 .%6T111 u` ?~=Ii)(uib*v%& !ZU%"%* UZ 'y"Wbw$ &&% !Q$y X`UML Background Add-on` /CMD=1001y i!7t!9K<0$ %|#14;  `7Copyright 1999 Visio Corporation. All 2s reserved.`0_D112.chm!#31469ݾ#Ez8e]@M5y"U HA%DU*C8ZPSASAxg a]_hCET 7T"2DT2AA2^T !!x$xTQ3TE4T25Tirs6Qa2b1 (0S@1"b Q5/Z?SX2#i"bBbRȠ57CU5TCbR/KT15\e`v Qx3Vj!(SA cgUcLf4&QQWZTc/1@{,jSEBuoPQ@)RepAn@a 81ping of model e7lemq. fc3NoP?C5shapes,w,Mq,u,Uml,P50age,ufcRCzmaQ@10.0fcRYoPJrb3 Q+`Width`U@.Default@i RRK0Sio,uUL-  K@ nSA]f>@I+;1)I` Dia&gr_ams.. @93/List the dia associated withi#s  @y"a(2I.?@=4Q4y"&!e%r~C Vie&wC39containqr viewsqԟE85(5qEShow Re&l2shipsKR`(;reC forʯD96(l5T,6Q@_w$a"y"&67II"CDisplay Se&mantic _ErrorM"rb`.A<2r!uV4e/Eܿ$Ϡ+xH F#CSs&y OpE1#hw ^peditdt!oԀ@=8,aeQ߄%Propert&+ieM&3p{??(nq/Ei!]hg`&qR6Q],LEWKi`FFi4F?!F@s3Ph#}%f%A$5fƪ(Y)(l5ǘ5}> .CU w(: YTeV P _")@rFh"eu%z{// +1/h"fu\}&l6`.8/u ֡?#7 /-!3?DN/9aUP ]Uё%sυ._H'j 0nJ)_E_[mF\J w# U ]B U -!Gat to@+< U uoWa$ ol $r, <'PUFDfP h> /T6DUUF??F BP( ?33 b=bI[)@nؑuUx {?>/eEZT.>UG M?C); JX^ _Yk}  4Adds a data type to your Static ructure diagram.b~׿h4F??nɶؿ WG??@ 34CUGD # h0T`UUaU@@ ?F~?Fi4_Fw?Py r7mMt`  rb @ b ۀA%ur`$?KcuW6M@2    DU @6D)@"Z#j&Q Z#~&D'ĉ"""""""" """"""("D/5?G?N3VN?w???X: ????5GBY`UML Background Add-on` /CMD=10_01yHADBtE'bE A6   !I!0D |C QTKB`7Copyright 1999 Visio Corporation. All 4Rs reserved.)`?P_D112.chm!#31518CEz8e$Z E U@HQETgdETT caH+ZP@@idQQRg6`]ocDe`CT dB2ddB..BAd xtBgbtb2!d2!R3Bt.4Otfa5\t HYcW@AbFlqdE9yz?sGCxvrES~u9tb"csx+tL-%H&*QL@ @F@s2#lqUYbpJR _qTa`Width`U`P.DefaultӣU~%@2rMr-E&C`Rep^Qn[Pa data typefPPlqZrvd )jS9,shapes,D5,',UmlgriS'amP10.0nPs]#_ U[ QTmP Vie&ws..fPE)S;List the diagrams containing o views ofXisM v T:=0B6OHM5YD" E)iUShow Re&lKRshipsRq,P*Yr=e forϑJK6dEXmP_=D_׈FWU"jSDisplay Se&mantic Error(Brw`.#^pIL2j3rHBr E@Ƕ%#jSSrP&y Op G+Q#Aw KeditpdBQo]ߎHM8> xǁbL%Propert&ie(C,PpX_GO4,jPjm浤Eq`Pb.q$>eT0Ai>aY#!ZhfC𔗼FNt;?F[?FgC>`NtNu?Ei4F).dEw>/0S)6%g/#1B5&,E.--///s)/*E+.5='86G&S)QGi?r4?@ $V66=?G/@?-T,E%Ǹ??=q}OOO䷕%|>@OOT?O__/*&!4/F/X/..?\@?R?d?i?*FDOVOOOOCᕣ>Voono}_Bm3=EgJYҋFHDB D# =h50>TdYY9 #AUF~?Ffl+?UP6 t` ?Ao@u#` S։pb@3 b&uLbO .  uh- gU 8A&e & &&>U27qL ?K/]&?\.+?=]&,R,'ME${G[zn#@@Ʋ#t!$t$5'+E#5  '7OIE#<$A<%, 2N I2O]b1B:I?)0r 4f%l>YUdv(E4aB@MI@ ('"9(`E#FFCA(" "d3#R(!O^9Q3E^^_p_W9Q~5EUF_O_9QE1O>B)rAB_c0 i[DA^~59 6B^L< '%)n"'f0?6AajooCM3n$\!3zr]v4<"HDB D# =h50>TdYY9 #VAUF~?F4F??FflW?P6 t` ?mt#` ubA@t'+uLO .)i )'umbr QA  >U2Ǎq ?/*&?\.?J(=*&e,e,e'M${Gz;#@@#t1$t%'1BU5 7I# $A %Z" p2B2ubU1B:?h r 4l>YUdv/r4baQBIW@(`#FFEmsCl$A ^"13B(!OuNA3N_'_vWAK5EF`_O_AE}1O>2SrA2c@0 &QAaiA^K59 e6R3?] '%;"Z'fjRodoSg;$7!31r] 9v4 "HD H# =h50>TdYY9  VAUF~?F6fܽ??Flɸ?P6 t`  o?)t#S`  ubA/@1+uL) W.3 31uw'"b ʹ$ A >!27q ?/*& #?\.+?2=*&e,Je,e'${Gz?<@@6p #$?:&**! ,"ʹ>I3?2E6O6LUP5 X47"BF# $ %% tB+b1{?B4l>YUdv+DlWaBE@(`#16<w}vA  ^"3!R(!O^7Q3C^\_n_W7QECUF_O_7QE2O;!)rA"Wb]c0iF6^E9 J93O] '%i"Z'ft8Aa_rHuׂ 4cC) FO /#O 0V? O 1=aQO >oD+,O ?oE?GCO oyPDP 9 P =#P ?_(VT25 ݎSD" z bB!$ $/"$ 'S$ b+S 0/,"$ 6S4$ S>S$ zB$ IS|% QS:% Ze% dS$% k % s % xS% |b % CSP "/}?PT rPD?aT -f% =.;% a=SD% Pϭ% ca% r& ST&  ߋSt S Z S& a bS& z ( & 3A@& ?'& KK'& To'& yb%& mK'& u)& F|)!& :SL f''$& Λ'& ߵ))& ˿) eo t*&  (I(l /,O B5* ?!V=UUUU !"# %&a)*s,-.013] ?L&d@{@g 9Oas]4 >= #5GYk}D:\Program Files\Microsoft Office\Visio10\1033\Solutionsftware\UML Staticructure.vssh(4C*5T GWC!lDQ %c+/UpqU{:U.09t4|>7@ XOH-l7"PU UUUU.0U2345U6789U;>@CUDEFGUHIJKUOpqrUtwz}"t40~/@ HC-|" FI AU UUUU.0U2345U6789U:;>@UEFGIUJKLNUO[\]U^hkmUnouvUxy{|}~"t49D@w; ?K>@ GT IC-lDT _WJA.9Dt4Y,b'@"H$ @ J+-7"P.9Ft4Y,b'@"H$ @ K+-7"P.9Ht4Y,b'@"H$ @ SK+-a7"P @nH8@F PIJR@I eJPR@J?@K?@cK?H<( H<( H<( H<( H<( H<(  E`L E" mL RED! zL REL EL EL UP (?L&d@{@ FD TeyC (ah/TtUF~/@x$eb%AU@$2?}&x\.Ҭ8x~sU^q\vqy 4bnuOs 22CU2a?#fftnr'Au`1obD&fupBhbTDO (gPgۏmCT%a%abCnrK&DaZe5_dAЀaVanuRh2`10275;4294967295;8eC 91;0;4eU113!U1v Q1OAEA'Aps!aECUHe 1GnuDalBTD?1OAEAhh4418 !,V.Q1A1D!񈨳A'A+QQ؅/!Wa!OA))!%!!!!1YYA1QQ+QeeWa!!a1l QeksRRq02&Insert UML Diagram...`Background Add-on`/CMD=201 @1T@ eQQؒD;@ޕConnectorEA [ ޒ ꗡe 1l|揸YADqE @P9@@ll4FeS-1 \RnuC-0),, bAXea鄥qr?.6nu!Static Structure6 h@O%i3UdQnu !1ݔr2 2RcAfqŘ|́ SU@b*qA?@@-؂-)%l*4#?GU1tmޑ [M?]"c'5n"t%th"6t 3//# i r%6x)[#Hbbm1 zנ@5Qs&lR ^pUWX:Y6KnuA0n~?i4FvM1A3AŁ|4яAõB]SThHHb2DPB44s88,,TT2ޑޑ9a9aBbCa3dTòBB~,q`SaA̟Q&{00490EFB-76D3-4A29-9425-4DB6747CF605}lY#@W[ hURW@L5R4[50{1rA8d3A"ʟU^J&<Ȱ$\qQh14QBh9@T2LUQ8xQ+#@Dkr7?FvC?w}j NqZ~4#r~$PEZuO,%k}Kt@5~}us{C&!w<}dgAw]!_1NqZuN"uu2Zuw߈UU1/AuG$}l1&D܏( @̏LsJecq:u4hB:u0{B80;Mdvp蓿¿aZ 2΄a .qJcaaшˉR(e.qVa4Ͷ(e.9S)sdbX @Fz @@L&d2FQ]k@HOU׿n1ubP`u`Eu P`u՝!IХS*JR@FB N{!@@`0 @FG@)2p`d[C@zgP@aa92C?9_p!Z8TNO/ H2^n>ha}1FPCQ h2 tN z4@h2 ]f@aA pK̿@rN)@Z&9;S1<52Y4hSU2N贁N{Q01"` Composite{! 5=C2 ?U?,DO,D.Q,D[7OLg\"QX c!P]!]!H.R[l,2U1U(!g[Y%`i,.Xr#Y%Nշ(a??/Mh̘Ա'9B@芦n.׏'V?h4}X<#'?_9pd?"/PAAXAcQGO4Au @E@IL?OkL\@EXbyAۑɠ)꡿OkL@EhE2 _ kHgX$R_BSNaaԽSaЅRDQDQ\RaRcDaTTT[!!llTXрJb!& dQ .bgR ta5Fdha\NITar`&{E0A48948-7581-43C3-A793-8D4607B815A4}VaSTP-DT! a@3Vae,bgXd;6gd|g5e~*b~༤3BQax,FCDQ ѓ~6ŅsKE'/?O'ڍGRDIqo5Q\2,][o5}''ձ$\7/QM/_/%,>PbC@!ƂX@ԏax1);M_qǟӟ -MDZͯ(:L^vAÿտ ]0TW7Yk}Ϗϡկ 0>A^[ԏQ HbsߎݿŏQB//+)ٓ$8"?@?@@#?Fl6fXˀtP`Ia `W?'-`Ϳ>t1Q>EIaU` iU8n5RHaPs4(.So$3^Rb3b6FzK0eTxqBxq1NaG qWG amaEQ%Qe!R#R"3aS\Q~?i4F?qaaQQJ!!g!>RUBUbUbUR24RUr>$4b74b64/e*bIeDb o%lPtTQ5!A C5!1Q#WEv1 AϪE@9LsobX @Fuٿ.@@LFC[?45?PJ+u5 `u@`A2Cu 1@5 rT*JR@FҖd@@`0 @FG@)p٤fFk6f?F9cT<&~Pjc%C4@$3K5`3b)ov8&$[Flw@=njwu"1CBU&0Q F6>))󻑆 ӮAW&1,7WQ?&1&5Y'=Q 5Iёy5ݔq&hR=A2Ͽug!4?Ȥ &5lAy5=Q*9䡨8¢aì ~R. @-?Q߼ "mz`0 9h|Kh]fgcagaiSw egmQX1jif0{(jI|jgֶ %A2BL&  )v8M 2"Rq?./@&d\?J0iU`t$ёAUݚ;BC陱r} IOz1M5;f^?×q~?5>??o`M>Op?(OM??jO>6Tf~4QHѕˤALL_AT_ONCE +QIn this mode project_reader_t cFPtes new temporal hGR file and includUPall usiTs. AftiP3RtheWReY5PނPd astPput to gccxml. FILE_BY_Q)_;_MQompQ singnPlSPimeUS`}RR_ Wrun|P PiUPof joinpR%`k}Pgor/ithmPTQPa defaul]tSfor3o.FQ_R function.j@*9ٕdޗQ$!3!r!2)vy u?;q`Poo=ޗ}"I'2r8"Q"r_4b66vCk4mޘq,DƸ1<øE!L_贁NulMʡǤ#ŋ1`ry@Z"@@ `*#@@K @Fȥ[??=@K]oѲ;2(y%*n(IU_qeM81ť!7/ 1I[q@Վ_y%D>E@ 5n/(\`~?i4ߍF?ѕ_ϱ &` ng4 1,8BT҄фѝuuy">Br c 2I2nQ{n>V[q7 16Ԓ235d4Ad6n@ѝ@#ӋQ!=u$`&{98DCD42E-3CF5-4DD2-BB55-8B589EB2E917} 5ՌQ?nـؓx@4#2# >E;>A'!'! {MA&: ;`IvnADkE|=GM2x- 1Z[qt!A㓹FVEd E&-tŌp-&-p/4?91/ a?&4c~//pQcҔ??qZo%ϾV*//i?l,/LM/p>/ ?r>OOnD;Mn+=<@UV]Q__Ũ__<_o+o=hӒQ4Zo=oNȉoaoYonGG'?8?dOZrUnUvn$quȥz`EDPbtφϼ (U {T[ &~AߒقQ,$iQRerUߜ@-؂- @,,PbVi@Y҄ufI#eUgy?ci}1@}5n_SzU46ն?@#eReiؠSQR#e N#'2q 0#a~LS+parse(in files, config"declarations_cache) :)_t #_string/i g.ek}Q' EGNM h,tVY);M_#`1/_Zw_ /_D'NE4:o-W)|(e$TP?(|{??)WW2_)[?Y?>6E4Fl6fFOtX FOXI*A,էOGOOy2XL$?.s?\.k?@pAd;pބE !`.`2ޏ?W@8$2{G7z"}XN4R!)NN/_AW+QK_++_U_I|7]_J˛+UENj(l"r.__init__E"5R/d/v//|.jc(Vhdwl`!3% Qܵ-vt$?`k4ïկ2xaAL? n oo???? }!rU?W忈i{ZOz힁U1d__o {[Sfwaq19UWSߍ}"_^ٜ"o4oFo$Xo]!c"i?;'9?]B6@7Dp &Yk OϱϜO$3!33rOߞ߰R_<o?Y_/_oa " !oDVh(u )TɯavOw.ώjߎ׏1w1fVO8OПO%+scanner_tMz<%yQp?st`1 ۂ?BrtpQ#빐\e5o rFۏ&1Ue rfyE&A&xeU"8 q"2rw@1\q,p_%Te-&5RE-'5yE-a8-)5-*5\u-85-+5cs\~h?i4F ?&4Qn aűgtQPa{QqNTѪ{77yBQQ\r2 2QdQ>'-74f26Aa!3NԀ21bhѻ(@&x ń$ӓQƻT<V.t//x.??nگ쯡rXHBQQECMAeOOxOOxOO_*X@A.G_*_YxvSU}Ya_v_^4]汴-cʼn\qE/Y_Eq w@g]YJj[tӠ:ՌU7e=(:L^p??O$6vOHZlO+?Qnѹ?Q@ñS,/?F{UFX9+{/' ??-?r4;43X9;;m?7i1?Q?MG?9l?\cM:Oi6{i5oJYvlinker_taB%3?Yreskh#^v`'2qpt`E,O N OO__'_9_K_]_ZA⥩⥙__/___ oo/o@?R?d?woo?3ꄾoo=OyD|!`OrOOO*3-Ր(JbVQ(0/۟%/ 1XlR?@\.ߗ?ݴ @@Һ u`$?"u,1D$r$bcNTu^Nt)tKa$Kt?DsJ5!:ULsч6G3 ?-?? :oj|ꃟꀥԧE$٣#џAl!KO"(Bp7>y5L]*ǘ}eǃLo' LiB6Py C^Implementation details: u - qs instances of+clar&s, creatMnew typesj ŕdPԿ!3"eu? ` ѡDq!wT }=3>" r}4b6qt!sk{8GaqDdT\4Vߵ`0 G̻8< 贁N&xAA/D?a =D);ʼn4bX?@+GdD@@~?@p?4:5 8OxjXZW%66P6'x666684weD?V?訐 |1&CpD1,ɏ~!P331e>1_zIZ% &///??&?8?OOn?4KRT*@@@@z^0&_te e!?PGQX6Ef6YfOH;f EfEfYfFOXOjO|O__ONEaODYaCsORtztYa_PC)Ms[C&O\ GQfQf_b YP4?@yi@F(4s?}  Q޳ʲ˲x-T!Ҭ:-s#e(1C$t(y## ,U6FIU7եD1D97D:욮D; Dh%!H Dp'C ~?i4F?1B_(|hgH C$PE5bu2T EaEeE^RѠ777mq 2Ĵ11 oo D 3Zf5ĺhغr @/ju;OmqrK`&{7EB13A29-B8EC-40AE-ADD6-395AF5B02?E6E}/;?K;ɀJZl8@ UU{€-fq7P7`q`q_L|L1Ihm0zEL?!p&Ò1 GQ_FAce,廈EWjun 3%AC$ӭQո#%!j)1uF+;?F?F-f%e~įju{g$@>f% ym pcf%49Kg$`f% ) /lF/X/nX*j(2Qa5-1e? ?gx=?O?l?~?M?8a1m??3UIa O? N`q1$|~Aϱ' $V̭/ GS!Ƈ/GAPY/+ H$𓿥RzQU̥oTе^pϡQؿl6GP>SƼXVԯ/}?[-+QaeaD~AIqmoMEq4cbnIȅ]ȁ_U@UW֕ueo?F5Q?I?Fd2L&ZPe`[8o___UWeX#d{_GzH"XlqsUQmq!ʃL1ɀ%h@exQ[ieUuAa#qqqCqEqgdI̅ "ʃ6[NU ﷙@XzA aq1?S?>$3AD pu Sae]Bpygccxml::parserCiX__C?XQh'~"e>J/ jTJ-d(YFx?dF69?!3U2 ֬EuGT5?Eq`pkd/???AI̅1CUg>VzO K]4qi@ag%f1Qi?]Lk@iL/^/L ZV&@@|>+@@X&e @@PR?T?T)4q$5f-f$f"Au9`?.ff$f$f8buiBiFCxQeHy__HHEq20act$a`9n9aN> mڔ5_,_>_P_m_oo_ ޿~XZ^_[Xq ccVfj7oIhLVjj{ooooontj+s:Ap!A;ċ1qa=t^3OD$_6ߧ /]oܓa V_:U@?F(47Pst f~P eC,(:L^pU :D !:FGb 1,sAA1 5F@-(7H~1MHA0܄!@9؁ECd$6EBTfD?O(OGJ.OnOFOMOOOAiW1_GH0*"/4/ H/Z/l/~/////n& ``?Gce h ??1<؁E䊄>@1EL?^:??????OO@7OO[OOO~"eOJ{OO=t oBTfx+֯2O#??1FvO __._j*>}97}@϶_\9 9z^@@Nt?@4@@E=C9Nb݀ :uz`~4?wSuO` !y.yS:t~u t_vv ъKa㱂ߌLчظG#bĬ?Bc?ْ?~0cOeGߑ ood3`&8J~bc1h"w}  !%E//%Oe.N ??n7.X?/|?/??*>BظPaE=LYUk =Xproject_r_t can take as argument list tha@ould@ntain _t and \ or inÀnces. IfOCE is given,@@Pcas@ll reoleva@opՂ o@rMA wiPbe overriddenG byOC*T.4_F]Àys uneffv@ed.jP!`(`(dL o!3)bq@!1f{(e? l!``&@__3xO"xrcb4b@B6fk\$uoo`(Oqo`(`(\43 T(%I)!u<N{] ՔL+]۱Ut۵g%4JRT*@@zN8-@2Ka?9%?2b8@!bxCT| !*)(eh(Vhd(b&caO@!{ғy4OPTKWM_CiPRyV T$Rwc6vk%4~@@L&dW2?/h 5k+1Y!PNm8!y<N`*ffb@/R/d/v//?? OO/G5j?;?);߄?LtϘ?()O;HTlCN o QYkS6HZl~Ưد꣒ L@`5G`rƼ4ܿ$6HZl~ϐϢϴ$6a+OVh`>!>/EWjWpE?ҬEr1siA'9NJ338ziA@6 ֶ# e=Oasa/s///]__X5__u_P0o_To[/__o/W`z@?!1!/+A/??+?=?O?a?s??9No]?A?KO.Ons9 48# nsߘOOOOOO__(_:_L_^_p_ooo_`Bo o0CU\oӟ%oݟBWuB>B /'GPphq^q[t8Tnsڽ8uwuϕ8y1A6v6S68`hqORLƒÏ"6 K=ZU6GKp{Aex(wE qɡe WqϕԓTԀ!ב jT;N }PL#A4WqWW|"!̱̿u ,w衕qyEP99# $!̘ ϔ3;fPpϒ)u5@U` di`t/׍%;}jrߨp˙'7- u J:u$g ]UmBr/-EWqXbt ؏ߡ-؂-'?*r#y%o(Pbt-@"ϔ#&?'2 q0?8qL 1?x+ALL_AT_ONCE +FILE_BY_1gy'5w&tN%<QJKi{v)nyK7WўWqYPpyq-SP@/`/DRy/ ///':;話)04?goyfϓ?\.?j ཱྀAt)?// ϕ'<{enumeration COMPILATION_MODE<2z tґ^Q;^_j]T@ɒ__ 2?ɓb$?@xm ?@݁?F(A?@nk,ta q80>s8ttC$3 `au1ѾoS3ca TQζTQȳ)a5dur&򧅖Xqooo8dq8Zw"adqdy+-SU[&\$&]&^=%_%"b~Ua#tS]p>~?i4ߍF?q>"?\yѳ g0 "E4"aUɮȺb"TLsra!a!Pmm44="LL`I2~R䑢>f76&TQ3W54)"xo6 @,P@8L1o螕Ht`&{2205B1BB-A045-451F-92D6-CAFF36735067},ZJ~U8?H8nG5@)aq&*5_=%=!`a`a\YyэŽIR# (nHAapt;/0*ͪ*x/b$%" -6>xuKdv?=%q,TTQ&]tNn+9/Qdqs(F7M|?Ft'z$u./.xu[@-?;P8j{0s2d>!%D6 =]?%ݕ<5,76g???;%&FMo+%SOO%~U%?|>OO%du<5<?f?2ODOjk??mn`u!YX#_&@'_2qMp``I K+gccxml : string +workp_directoryxinclude_paths[0..*]xdefine_symbolstart_with_declaration}OT/-VIKgM{KARաKL avOO4HUK_yeaO#ZJgPo WFl6fW -_?_Q_c_uZ堊_We_c XLt?ן閣?\.?g eATw;apbTo 4q閣(A2Jw?@(4t2{GzTrJh^ա4Wac աouo*okSoeiomVo{:yHconfig_t2̅o!3šI~ TtOKߧC%j Ͽadtψ!3Qt$?mC@kȚϬϻXKA%GOJ \nOp\nIȍ܏-.?, _,$6HZl~]YUeǡp__ů0۬63(A2lA Ud8go5 ???OO%G" j K?6KAP6$0F{FՋOJWِ;DbX @@`0 ?@N&d2@@U 怍c)u``g$?& "uF)~Q[LUđGњ蕓/FYp4xS)L^2=V'"(vIqrMre6o4b""6o6޹;TODO: Answer from pars0should be filtere0y locr? Possibility to0nd out template pss x I @ement@ear metho@n1e_cacheYF`aso}B ") "9)AEO' OEF ^"_4_W? Nm_O_f O__?^TH7^ަC?F$[-9Caɵ%fп?*<ђ6 %5 (q !a俊3 Ɗ3 (fļoo ;&ooo7?/?m߅!Yi%W/j"|AN;U@|>@@H.o+@@V*JR@Fl[xWa?px؃닇I)SV/IaYy!͖y!F AѓA B( % Ce88(f43tArJnmnopCqjrtEtVsnУ\Y~?i4oF?܏Y"?\yбgDљmҡ ˨%TGGR򊡊ѾрCj tB2$V>J376ԃb3t4,5 9$@SIU Qij>,eTD`&{53999BCB-C89C-439F-9878-4A404A663530}IVU?8eUـdpt߆R@ .5cGӃe/|CP!!y[RQ0бI䳱jP˒E$Bڑ`5\tAj|D˯B#ʁT ⍔ՠS9FU_q5:ym! xi֯nC JљnUAqFI?F?FouMձz5w e7XMe7 j͟jA/S/tE N?: /ʥ  z7<X5'./#/I.??+ƥrQH`QSEJ\nOȏڏ"4FXj|ğ֟ N&8Uas75кa?P?nM#$6HZlM ƿؿULA n1lx U#π@IJ$ $PP/ASe؄#DYgZ\@WB՗!YY!%XOߝUX n!`nO GTViQUY#'2qZ0!żUU+__init__() +flashupdate(in source_file, configurationdeclastypeincludedscachvalue : ( [_t], [ )))KrQc@1, YlEgQ$|)\!_3_(E_W_6GuҴHEĥZ1'ѵ/*驭U@HjZ?@\.e)@@9?Fg8L_l150\ / i[2ն4630;e x8T9ws'q!06yBvI w(D/ x(EZy(D;Zz(5Z{(D%Z}(+uZ|(S\T~?i4F?'Da~g$غ%bTk$a$a/ҬѬѲB@kk2"2+r <>Z7'p!643A q qkԨ64(@1k/w 35a+ć}`&{EDC77CD5-AA9C-4DE9-B6B8-86BB6AE12BBB}k+uw ?Gc?>/57=8O4E YN'MzOEd/?IcF9%b R_1s566/F=5p#ؠO_E+u5)Ra__EO/O=<ŜO1lOEI^g_y_3k^oonߔ?>Kxuхu6}rq~,ح" rqs: ia}昏{'/nG5(VuRuDɡ)$9ŧ/Vq_EL<iP-DT! Vpѥuߞ߰ޝ",&:<96>qU dvVuUsӯQD !-?Qtuϟ);M_w˯ݯS 'q8DVhό¿Կ .@Rdvߠ߬Ͼp1W 21O[@mߢߵMkte&5wKfaw 0BTfo/Un32; afr0,&'|9 R Wt|} . (P w6yG( 5GYw|9"/ tVpuQrQ{1|9QURdsU2U '/3?:25w?2o?i PtAc*թՙȏڏ!o3oEoWojoWᴱ ۟4a !%RThSP% 2*Ye 8YW:Qe%vsDL%RZ 0RZ RZ %RF]RQ]UR]]RZ$\C~?i4F?NYvFQ$gCߨC&WT+Q+Q0bCC"ѡI%$R22$]?$2n>L$R7Y$A6f$23s$>`> !(!d(!T(@Q!0թ+S# ]"`&{02CF1DAD-9DF2-4A4F-AC86-42772C9D767D}!]+?'n)ĸ(W"/(d"'@SŽN2#2?SUPQF_Q_QQ$IDB萱0cnKuVpjpāDwHS_qϧ˿ݿ%7I[mϑϩ߻@! ;MYjv߈ߚ߽*PbtO (:U(/S1vAm 8ρtG,A,^61cI,A,E%Rr/'$=NGG?28GOSe_ZdU _RE_Vi!anoWhaA?????WU?:_Y0OBOTOfOY/OOOOzAdOI QE_'_9_K_]_o___Ao____oݏ5oGo Yoko}oood8!oood(w,xM/wuɠyWPD*%`4',@``ђCw5qQ^0ďr=6"dz=+_JZ5uտǛdummy_cache_tt{tdV#"'_2q8м;ޕԡޟ (:L^pAį֯ 0BSew^3/; g7oƩdKPVG^0^01l NA߁118w! =}5qlsd2L&@FoJh*@@{<F׿@|'-ٿkLu `un0`@Xuv`u`g! |>@F fc7+@@GjZ)/@)p!Al`@z3!N"M(&"7'p%uW'W/i.e ?јQ6"C&F"B"BzAEW[c-cs tN`z @s %2!.3]u]h1kAvhߢ:ѿ@8@[Ix0?n4v5)7𿌸&(? Q FO!̑dvxsepVRWSOpNM?CNA|POTAEus !: 8r> _X b<ڿS8p\=X/q9c!t5cDU=X~Z *O#1ln-Ea4Qe^4@0TloB|ipNO`O=X=Xlq?u],gi@j EAVT{vv"B.ee<tssᏲ2r Bpp5 q`#TA5`&{EDB40850-393D-4A27-920A-F9F2F3F621DA}UsTP-DT!?~c{0xƋ5{Fcd~cB8@aAMYD&. EƟCcZNk O DQA$pi.>_UAu tn?Wx58!CGcNBT)O;H.:VSRdXQo@$D" @FgHg#~`0 ?FʕP@hnHZl~P*JR@Fr\. /XQ)XX@$xQ$jх%ϒ///s##/??*?C?DJ?Ag?y??????? OOV?OoouOFnQODXYOOXQnQOJnQ_"_4_F_X_j_|___Yg_poo,o>oPl<@TfhozomΟoo+=Oas'933B271A2-2364-4791-B490-CF6F1E288FDaBl~𿆤ϏqIn 頙ASewџ@+=gasӌ?;CUی5Zi{9ܴ@YVj'@@XPxSU;FcQ!uzv`?Ru2YSAYAbQRf fKIXOc1L1vF2qofW?@BBoA2R-]Ed6Ѵ%>fcVk?db_#-*AWrRY SYquVWU/~U]$ ~Gk%1v"4B|E(F'l2_What I am caching? declarations. atryo to save? Right now, compilsource file with GCCXML and parsgenevyed. _ke_t stڑgy: thisje uses time of last modificzʑalls itspends .%theoːout wheSr data (sɒtyp ) exisܑinstieKOx \W~U~Ƹ1䎽<#UU ?贁NcOCQ!OO_#_ 5_G_Y_k_y Z&d2?@НbҬP @"ըؿZ__@\ci"QtQ! : TtQy]L[f.o@oRodooooooooo*<N`r1!YE*i|s @3Џ{39)vOC)F|KImplement"details: Oscanؐ-͒ Ô֛,laBrsvs Oa#5GY4E4;դ95DUƷѿ>1#7U4e_?q0g/y/#5??k}VΧQϫϽ7 7A^ѿA/rC-KAG,A(7ݱ-I,A,I~َٓ7P?@akA?@MFl6fO?@LrTTVE^ ܔwȒRI?!(AOr;f7O<<@dbase487JT;9C1t&t1cdiQgd>1g)d!g,EdjrdjdLAgAhf&S{0A}~?i4F7?OAaiQ>1!mqqqLAg 4SCa*hTFEdd)EE,BFFr5ǂ2$҄r߄R>t1+7 a63h4 F QȁȁE(@A=I C]rɱ%Y`&{C31E9502-081B-46BB-AC8C-4CE8C48EE9B1}=uI?8YUIXhzF@)aP; Dp,EcP,Amq`qAqbaqILBrկ6HP_M|q,[p4"_4_DoA`IU jT_;@C-:J]Se|.)վпE4(D]op1A;At1LI`SFhq;?F?F{MHEΌS KUͿ ID+@LHE,E TBHEu ŸFXHEeϟTUnHE77=zTfnhoofxΩ!AQA#. K]z[xTxUavqa#ѫqDAI1 MU$7aVe&5UÀAi"zH ]3UO/s!A?/%/7/I/[/m/////////O'O3?E?W?i?{??q3q?????O)_*OoJ_\_n____B)____ oo@AoSok&5wKhhfawoooooA(:R^pAU@Ü| @;,,CqJ4oHPmT׀Ŋ cJǁӏA/MQT@J//ӀUU&f4ʩ[' ς6i T@ϕ7c@:~'9K]oɯϸ˅/6;M_q˿ݿϯ%^Icm6 ߒXJV(h(Js]?td rhׯ鯥` v14N 11Q0UQ,3#/@,A/ 3 gccxml_runtime_e?rror_tՀ@ %Q#x'2Eq0  JG ^ pA#*uEu0BSfx//+DO/Gy/_HW&e_'zaQT~q?(Qi[NWO+O=Oz_aLbX?@@+ys @ty~倀Q[8Qu `(o?ruLy9qax2rmv8QtqdUa(p tq4tjߢ q )ψpj˅O(RXWL GƬ4?Ɔ(S?\.?(`d9q _U"_07T,F_X_j_R_WYLprysy֑Yvwڟ앂u'"i`̟@IiƯ2B 89qP>O_6XOJu|siThis exception will be thrown if source file contain}J1(s).j'Y?k?hhI~2o!3$Hn,2Lpa¿Կ}?n=R~"gF1r23z 8Q4br6a4o@8oMoov߈ߚrdOU@Fh@@B N{!@VF(?Aw-ܬKq5~(Ri$r{zA ?FP_._@Y#hٔa>eg8@$+fg7gFUdu"#5 A&eg".s\@ ~o?i4? 3PAgT1|ojT1Tabц#2qq^11&baa"$g2> 76 #300arlt@@Z#5f>z%1DvG`&{69F9D04B-A27D-4993-B1A5-A3C507461?1C9}Zf?vdud@?[ uX.=/?č&eP&a! $7$A36$ 3$S"xx1!!k T@Q(1m4;SH3luIk D2`&{7D1235AF-ECA0-4CD9-910D-D7CB7D294E81}(1 V?F54;?8D749C8"?e8"17@8C2&3"-OT[!.eP.aTTXbauIDBͱ@' DG pԾпB(Ty <1 /TXUGU3`_r\mՉ___Xu___qq qT lEt\ċ!oh F+ ?FvTdUńn)onmղemd,8~} YeXelהvmq~vm ղeOSeeQ?( B']mdo=iRa{܌e(ED$cJEnson; sd;U]oj،ػͯU,;E HZwmdSXu /U1Tni4gm0!Vht߆߿ߪ@ߖ#5Gjk} 1CUmOa缚a.:L^}Sкa?#PnM#!3EN_i{/U/Mca#Q, |E/Q/!Wm)__pxcIkR5_____oo8oJo\oP;o3og4D %wDy;!Tx$B徙17CUgy%[8cGFl6fWĹ_%_@JWe%cu%8>t2{Gz:rC9&v5 47aI oǫ6BrixoZӖ߸mh e%Q{project_qer_tbEoo/"D4 K ]oɿۿ\a?A(ĭ!3@Wi{ύϟϱe!e$Ο-C5v 7sޯP&vGo`$3!~"%BTfUn6@ޜ&x@@~d5?@e"d7WL,UM5k)!{BTfe$o`8G!11/P&vRA0#C1D9JRU1D9J1D9J1D9J1D9J1DQ9J"1D9F(0\!"]~?i4oF?Q/!8AUArAAAAQAg  A*8obTDqT2J11 񐖢DqDqd2$d"dq">+d1A378d-6Ed5" 3RdR5_daсAAaP @!AJk0c:qP%b`&{24C836E8-2E9F-4F5A-BDDC-B190886BD63E}Aoe"ƈk?gq%iėh6bhCbg@)aq&OrnS5#!Q3P!!A8A21QIABwap%E$NuWp Spwb8OT{%4/ 0!J囅-ƌݏ1Cq\;\u{<11ACaØ{#F+?FFS ʄ1J%kՌZ 9EiJ1b1!39"?|>95I4b1q%ϯ09|ufxpu۾n ?:q%Ο~015qJ}ߏW߾ߒ8ߥ 3q9Hha|6A8A@1A*$A";)@F_]-QMy%$W™@11/(K<KP-DT! @01 ??`0&oiTcuQU UK-CUAA ,>Pst(:L^vAdQ17CUg/ //-/?/Q/c/u/??/////?hQ?1?)aN?Z?l?~?O??s?f~8S8P eC, OO/OAOSOeOOO_OOOO_U_q]:\e_q_YP,Yqޕi]_wk$6|d Pk(o(:oLo^hXTdT53JaWAdALҢeda鐱@yQoW]oU jU nMI2v+ qhT]ā;4&Vt]h{_iS8d!1QPQs@U?F aW ȱEΘs.$!uͿiHXͫ7.e{W/UeenP`/;r17Ň[$߷7CU_.ΰ.7ҥdv3?jPai!1 ???: i a؎waoLPAH,+h%.ʐUeOZ~AoU.ND_V_h_˿\xQ__AQop[.kQLOoIso_/oiā$6QS_,gA52Dz. `0˟up3۟x5!-fxUeN1B1 'Qy YT +'2qE)RMq/!E;k+STANDARD_SOURCE_FILE +GCCXML_GENERATEDqDTEXTCRqQ09](^ 5`[ ^ā݁AW,8h//G)//?@fb8?-؂-ҟxc9?K?]?o?yH0XO04D?.v3?\.?9ADА??/!EA?(enumeration CONTENT_TYPE< $EuIOU&(O:Eyspp6HOOOOOdO__+_=_eh_M_j?? dg@?YF BP(?2`RK]of|; 2RW:98U7654U3 ('U&%$#U"!UUUUU)10/U.-,+*AG6S6[6Z6Y6X6W6 *G4WORFNRFMRFULRFKRFJRFRFHFDDRFRFDLKJIHGFE*GUUMUTUSRQPUONhpUonmlUkjiHFUHFHFHFHFUHFHFHFHFU_gfeUdcbaU`V^]U\[ZYXWGRFHFRFRFRFRFRFRFRFRFRFRFRF     TWRF/HF2HF1HF0HF RF4RF RFRFRF43RFRFRF=RFWRF_RF^RF]RF\RF[RFZRFYRFXRFTPgGHFHFHFHFHFHFHFMHFLHFݪHFHFHFHFHFHFHFHFުHFHFHFHFتHFHFHFHFԪHFHFHFHFHFHFHFHFHFHFHFHRFɪHFHFHFHFΪHFHFHFHFTULWHFHFHFĪHFHFHFHFHFHFHFHFHFHFHFHF HFHFHFGRF RF RF hwRFRFvRF7RF6RF5RF4RF3RF2RF1RF0RFRF#RF"RF!RF RF*RFRFRFHFU;HF:HF9HF8HFU7HF6HF5HF468676665646362616RF*'6URFRFRFRTgHF^HF]HF\HFU[HFZHFYHFXHFbRFjRFiRFdRFfRFeRFdRFcRFmRFuRFtRFsRFrRFqRFpRFoRFnRFHF HFHFHFHFHFJHFHFdRFFUFFFFUFFF&HFURHFQHFPHFOHFUNHF.HF(HF'HFUFFFFFFFFFFFFFFFFFV6U6T6\6d6c6b6a6`6F*FFFGFUFFF{FUFFFFUF~F}F|FUFFFFUFFFFUF HFHFHFUHFHFHFHFUHFHFHF HFU HFHFHF I gB~B]BfB'B&B%B$B#B"B!B B BBBBBBBBBBBBBBBBBTGx,x+x*x)x(x',x%xxxx8*~J8A T@gBoBnBmBlBkBjBiBhBpBrBsBtBuBvBw*BxByBzWx$Pxbb%x?1/aaՐxU(`.bFL&d2?/}@x\.YRx0~sUxqvvqu O s 3bvxaU+?0=2f:よrn/aau8)`brzaubT撧K7 #%aaɃ끠aKe8xT9&rK3r&' uT}b>Qb1,qύ!uTzur` 10291;0;12!aSː38464;4294967295;3ٓXH @8(|\e/a%a{ѠWMC9 xxńxxxǑxxx ѕQQQQQ Q-x.xkѻѱ@ѝѓщ);xUx?1ALCLDLELGLHLILJ*3LLMLNtaUQLRLSLTLUULVLWLXLUYLZL\L]LU^L_L`LaL YOE;wLxLyLzL!G1=131)111T 11LLLu~L/+kLlMwmTc1LLQ% Q1e/U/a8u{8Èu!8 BPBǢDڪK @ǮɮVJW@ȇADzDȯںȟqXơȶʡȀΡ&Ǒz8֡Kʀȶޡޱn")꡺/V;~Ⱦ PDZv tŒǚa!DZȚʕQȝ!Q"ȮQȰQ"ȲQeWڽQ"{WکQȽʟQ&*ȕQ.2J6::ȁ >BF!ڎaJAJ#N_R$DVȜZȻ^AbO3jڼ)rFvȘdzș@Jüüzچ|ڊ~6ȁڒw ږȊښȌqȎeĐڦȒڪڮڲ ڶD2ھDD±MƱVDʱ_αhDұֱȴ ڱ|ޱȿ걺ȁ%W߁ȱ@zJGyzJfȼzJDjzJnzJrzJPmzJz"zJ~ڂ"WHʆ &zJSzJ8zJ zJUzJ$"$&^*W.W20W60(Wڲž*Wڂ0,W>0.Wڊ00Wڎ09WB0ȈF0;WN0BWR*ZWڦ"0qWڪ0rWu:*$TDaa*aDa4aaee9AA[ й6}}!\A[11q+1+15Q5Q;AAXFp.(ڑڑNNPDkkJh߷p]@dnXjsџթpP}V0U`&Insert UML Diagram...`Background Add-on`/CMD=201-ڐ@ՁpĈڷPj،Qљ$џ Connectora+` A8s0AT0EXsЀрjրP A j33ݛjMA!jFw; ?>@@P9@@ll?}}oU`a؀!p b0@>H1d\5qG? sd5Componen!tRC5 Vճ=ڷ@ѧ1X> arJ=jAX BX=5X',>5 #3XjU@x4@@HsF \.@F[JgPo?$?$$?$K[!XR|"p x&x&Dw"" oQ|#&oQ#|#&‘"a|#&a#MA|#6AMA#|#,6#"q|#J6$#h6#)$#6A1##N45#"#]@#61#X#6)ү"ֱ|#6ֱ#D^!\pSqSXk gD}bbAz@qs8@>ڨ 20ad5adAaVuZXdXa#daa50BaA0} ծadHP~?i4FVE5AXaQBq3 %DArobcPueToggvvҝAAVdadaXo o#R2dR> t7LtQ6%tB32t2b5?t4Lt9`A\qhzu#?cxr0&{34E188CF-9D8E-44BB-9C25-79C8CB4F37DF}\qU{?xwy@xwrwx#r?@)aq ZsBBTɾDXNNrAA#rIׄB-#9r虃C4Pp2SCWruhEOp z/%Y8$-/rfCLY/-rV MXݟqDUAquiBBO>oPeuhqz#F7M|? F&c?.яPĮ%#ܯdH " խ)p/"-VKkyG?z3l=}Bϱ1ĥ'(ڶ#2d~zͬpŢ/3-?>30=J?AFޤ?",>P߮7UĥaoρUJbX+})(Jt?J⿀?x:J/\M?fnOJ T EHH"4zXQcU0XaF /.QaAQ TDDu$:#4aaߖ#3EhT`a$ig%KEaAA`uhaȧ-f<= .7P-DT! @qA}OONH&?2''lD'U//R>Qţf/6x4K-8Sag/y/RQ////?//? ?2?D?V?h?z??????OO OOUO@ORO dOaY~OOOOOOo___7_I_[_m________!o3oloWo@io{oaoooooo*aZMw\xlnxsnl -Y "@Rdvxl {.ۏ V,y QFo@ `? @ۉ ǝ(ΞFʿu+i,>8J\nLa4%3Adaa{&w^뀦9\>6Eדޕ٭u5R!r$6Į<32Qq ozu!r}vKU8ɺ^ܳ s"4~jD0zGzVae ZZ8vg~%%&A~@9u|o|aKU|QqD|U||ҡE|uc\vc3am~Ɛ?i4F?>1c@aQqҡgP3a~k~6TqâPPoҡҡKR3a3aqqR2\ԿBd^>vԢ7&6"3k@BAbx0 4o`ՙU Ldt`&{C9AD9956-9371-4E03-82BA-7130DE478DCD}ѿE?^ـ@ׁ؎Ҫ@?b着vx")#aQ()IBҡRUT~*,g LNU%p@QuojUTx/ SoKU*HZlqD!|!q~!GA%q*t!~qדFV//bHrZ^!dZ;/eq3k2?#.//!>O$On);^ x,EMAoOO __8_J_g_yXãA`_y_<_a_G_^5u5c8,JEf1A< wP-DT! ϠEį֮ŝl&0 P˵lhB-Up 6oUVH ރUx3àNo`o}oooooooo+=Oas'9K]oBe^bnAΏڏ"4FXj|ğ֟ 0BTfxүBe1+=Oas5f~㺸P e?C,(:^pςϦϸIU4E bn1p|׶Aչ!ԯѴٹ!% EEߊ@-؂-+¢SҢTD1XHD(`EҤ.G= T7CUgU2{!iDA#a" ؽ'2qE1Je4AT+__eq__(in other : location_t) bool  ne /+A O$ string +linQintS/e/w////[?/ ?/??+?=?O?[oH?>?????LOP\FGFl6fXGtjO|OGA|OOO9 __/^|1A'?RL_^_p__ a_ 2`4qqo.5oGokOpoiꜝo|̓m0oߙ`ڟߪ >EQcusV?UAɆBO5GYk}L@Uµϴf__ o 1o ΟU5ߋ_ߎo@ڛ\nCG<n﯂*\8 GNq}bsdvn[5@FXVf4@@\.?FJgPoٿɿu;p`u`m@u0S`u0 2~a@ W(D5@@t:Nq4@<DR(hr)p%so0@z3FRhnh2A OH&hR1 ҊAm.E[?AZr?@U Фȑ[-y/N5 tNz@5 6&Yyf}¸H ! R/eZN贁N{ewR` Composite{W@e( J\nȯڭ1rk4jˊ?U"]"H"ԸRO"-6" :5612 836Gp3F6F13<1,3&d6;0r<x163UU6@ehc&G T[HH.4rbbAze[q<1d\yqg ]##'@v}CJ{DGheDJXD\GzD!J{rGGrG"F\cy~?i4oF?AA\#Q]Qa@2qozy(s}u Gruhb@2uX?uzLu{r2kdHrsuG>d7dr6druruLqv'`CFoez DFD06504-C690-4Hp-B2D0-7C7058D1E375QNU{ocGyđc @b着@Տ/r aX8DXCB#Q7B<1]QIQz, %=:M.tZp@$Q.U^/ܧ° 3ƂiӅާ'9ǁEW$i{q$KaLWa]eZc #UCqXsQ~FqA)?FSW4ui`CD7yu?6B!Zl~Тi%mߕSӯ`˥ʦ ­ASeH¶6?]1H꿃rU!̀::ޯqZ`3?l8m8212AS61U ۃ/AS R߰ώNU |>ݠSߎ̱x?qÙ6WEʯoࢤ Ũӿ*WF?ożX0xB-6uB'wfO uBސ?F?Ÿ:6<sï $I$In8OJJuhA01NkU8H/X#/5(c1UR/5/KX/a/VF/.AAkQAoTDlDzQUQ1Q_93fhcBa$WUBa5FQkQ0AX1a$d<d7P-DT! :0@h7Ui)8cbb-AzJP@hX&Clgm7Ux??NUPhT~~0DΡO~கjv韔@-؂-?R'0&P竤BNOΡQ!EjEcto"A%M_qzG(G2q2?1Cc?\.?w:_Aɷ͢ؿjtU58 ;ŀ%DJ%Oi@ޘ3%ɔO}#'CUTKDO+take_parenting(in inst : scopedef_t) +remove_declaratison3R)js(OOdT޳!3ͱ?.`kG$oāOOtR1!sS > n"%k(DO^ ϔ߱cs0F?flB:T͎EϬAqxߊߜ߀#7q,+4Le*+yk.@'9,Rs[0..*],;R_ti"$jҡ'ܚá 0o=0l6; BCTfx *ǧ%qX4ȧ )XX#/?/Q//u///_HS-o/Y@Ik_ & >2$?6?H?Z?-Qp?PB>AlAOD?_WK/j q nx ?O(O:OLO^OpO6?l!OOxOO __0_B_//__Uk_Ul_K&_u)/VWlY7 ]dk e )ǡHjqgtңǡWa}DWa4CWaWe{U7,b?@@VY2t.@@ X @F0[?#?,TL\T\VS\d$d3\@WaddyS\aHd dd1K\ft~2yRIJβزYT߲:hŒ )kY <IA ÏU vI.isɯȄ % e뤰8ħn&X  B%`tY& ' eqD%)We*@1}U+s\ģ\~?i4F? \5Rq1g!qq*T!T1aa ѝ b@qqu҅11Wb2}R> ı76$%s325?]R^QrGf\ hzWe{1 Dx`&{21B1E6BF-93C5-4FB1-9EAC-E8EF7DCE29D2}1\}U ?x @xw#?@8" /Zs@fӀuվuXX!!ҾI13rWe@ts|0J-??p WaPzIG/wD%7@5fL" Y%7r/, e///M!u//? qqLħ^Q{9/WHıα1zA$Fj$F?AF&@f} u `Ԡ2u$ E?!1Y>-??ON(D m4%=YOnIQEO,%CPF*B eMHMOOOI ^Y!R_C1u&U'lUU ,H`q|] V@Ϣ%7I[mߑߣߵ'3E~i{'Q)*J\( @/AS]څх3:?,8C@/t !/3/K??i/{///F$>)yd, @ ??,9a,=7AYIae45𥡱o?Go@ `P?DK @T۲UXPmK8~sYI!8TAp45预X8`q\21??>AEa0NGTAYIa@eOQOUsO]P{[54~U&s@ ~l{е YFid8e@4.iYH#Ho'2q `X8=3YE+get_members(in access : string = None)bdeclaration_t +sN`, [0..*]s) +find_ou_\_typerACCESS_TYP ES*OOQ_'_9_Ց#B2@YL#t_$1_X]XOӐXӓ]a5o.j1$5ko}o>;oMoooooooWB͛tzX 1>@@basehierarchy_infoderived>Px܄b +publicprotectedϨivatewis_abeactbbool +recurs\_9KHYI +fXA5ASewļg5AH9V?^PUFl6'fWCYJh$5tYg[53(Eo4NG QYIͧׯ{F_y~?=`fsnYF1$5A{į~Uο1xSQw  ߯ ? #?UA- %ݦ %]o5K UfbU|//`*6; /@?B lE > G - Q 13 CV!QCGU1 3I@s"&d29@F0֚c.2@@ "@Fס1$kDE\nQu`uP`,0@BMu `u+E8 %x4@FO{3@@.r=@Fj 1@U1NR2XXUTVNRtW)V"qp%W+'@z3dR__BpW__^hf/3$sRf2`bR`bSR`bh8,1%@3@U" tNA z@@"U" bac(H d@AcބO,{@ @Ip+?du %&?hOLSȋAm`$e{$e v1%5! Ip1}]B?O15!ip!aOO5!z$y++/yOA11//{P/ PQ/K9A8"@W֕ue=@ 1Cg?U@x?d@@%U}i_n(H-muUX5pnkE D4E3EqzAtmun5⒅xv!䊐Ii&0q׮azQ0e@0ׯp$/&4?gdH?NkE;N"Tg  LAĴVV3*7ĕ"U!U!(A AmrP`kB5kĊ 8>cTeu$`&{BCEE1594-CB27-4428-BAD1-1CAEC2EA9D0C}3TP-DT!?飈0muF`ΤBjxXة9PsIWE1kE=q5!vk4C19!!rX1?}R y0-o?u!/?w܃x OԻ?F%1N% ;@@G 0@@?[;Q[?@@~ qn'8{f} 9yxa?AkCA)!35/G/Y.uAFANAٖ!Uv!st1 5t2 VajtLAtn%t7 4ut6\Cy~~?i4ߍF?yv!-aLAn!N޽ 1~$"aaG?M@b--O:kB>$4Bab"nzdr؅(@C;X2ՔϦ44575B8D-5606-41D2-BE66-1ADC9CA1B7884uC;W3kEC9R84Ee?U5*O;MM{rPnID?LԠ/fOB'J6sHdrNPUk^>j׀(Q4U}M__\?v___(QM___uFNYE_g[~Fh?F#?AF"!ho n}md@?%~mFuMd_vviǂ5ra~v}0}/ saa521 N`?Up?U WOki^c`uojUoojEois\$<ѨZ 5KO]O}A}OOOOOOOO__+_OrQ-5~_ZHQn5T_fY______ oo-o?oQocooooşoo  )iM_BE6zκ1'(wF#/|??nhz[n5؏ e.JA4&y..`r\|߱@ Fr -)\ )ixnamespace_tT&P$2eŐYy#ھi'2q" 7 4 үP,>PtAbȿڿ"3EWjπύ,C 3 o 7@SewG8sA|LLMsA|%:rI[yŻs$z<@FJU0@@~F֒_Ƶs9\u0`us@`e@m "uB`upp/%HYer# n3gQ~ tNj? z@ ~"6#k8VyAF YT'ڿ@@I ?$%j1 C`r=@F~kM1@@% ;@FLC@%0@D32=3)p!:Y7Np@z3!S2Y?Tk>3296327&S2p6ợ7o??>́ Nl2@G822&$HňO13qR0\@eش-r96]M?ISMQ͌OTQs%@0+h`Sv?c8l WfqTB UC@я}iAn`ae%@p:doypO^U6bqu?ug7Ĕ tQ*DbTC BB,FRS]®bw0|r5=>ѡL#CTPQi%`&{5F0C04AD-585A-4FCF-93AE-A0074AC09FC3}}3TP-DT!?sUFeFcsBhW g$J %unS&|7Z_Xxoon|drpI/?g%>J8:-ѡ;_qVj>@F|>?Fq8K쿤וּ/"/4/F/X/j/|/'$/!??////?5,b?@F zk/1S??w?"<ѡ=9BBִ4@b4O5OO*O]kqOCiO{OOOOOOOO Y;_*Wѡ8_J_ѡt_Z______oo:onmo ol+Qn3 mFX| 0BTfxCC119C12-12EۀE31-A56D-86240C9655AA);FVhU8A˪{jgƐg%gU1g]䧑g[C`\3A~?i4ߍF?OAaa#A1q/ Qzee%/%R]2"" %aa$7ƄI"6ӄV"4%5A%M&!$wd @w"[)u$+Ug/y*D1EB8C10-7F1D-4589-8DFC-424F8F4ADA8F$["*%$8(I"(8(V"ퟻ+%ld%͡͡#A1kblaqIB1U46RFPFE Q2&U.@U@cUlTa_A/{c] 2/I[m%HV!qDV!,S 1B1mqUOTF`0 w?Fs?F (AxYSϜQUͿc/ ߥ%dο[S]T֝_Uն֘Z]Aٍߟ(uAPGY(5lTϝͭ;\(8d {Ugsa0qD%BI?O.5qQD.%u5?hX&#<#F#$ #A0aHE+o=oOnŝ-&s۹վl7)U4F NUPXAP##F-saR%HI[m!3K/]/i{qZA //*/= AބO,@W@IV`?de:0>qu Nqx4@FO{3@@r\.)@F9U1@"Ё1rQ;x7v1rWw)p56ww;v@z3aqrwbp4!w~ !L?j4VrS?frR6rRH&" /sE54.8P4e4Qp0EAU%§ۀta4KR?GMK_aEAɴ$ۀOEBpxDv׏>58/]D⑹?jb394!4A$99?73y4O^p)O`PQ pW֕uexHT#9r@ 1C̠?OU@8iZT@pTYTZH=t<q4v9Q)vB񙮘1(Ghg(05 Ŵe@p(8g3QO)r*RTA`@!@!2A}!!{B3211Yaap8:5C9:L!TNge4`&{2545EE16-5E6F-4D7F-BEBD-920EB40984CA}`{ETP-DT!?`3BךFB!M}LfA:]EAA$Tz#a5Y1XV-%v%ο;/b@o?e<<15H?5_SZckSQ8%A_?v%3,'\A33BQ~/@@:sUT1@@D?F(4?T\;IV2~RrWNU ԯV V  1I2%6LaΥa::8Q`1{El?~?>˅Z8'9QF\U !5I&*E"J&*fSK&*{E"L&*M&*5)'U}`\Q6~?i4F7?Q!B!_!|!!!!@ΡϮͺA4BtB΢@{BŤ24HR:>DkR7%DN62D[9Ք2FR]R`р @|`uKzԊBl~A26DEA63-8061-4A98-981C-81F0AF30A3ECԢUuK҉C:uIHkUOENK_[L_rщ!*!!L2B!$?ńM>o-ʱ@R˟1h qffZafeh olΥoooZaooƱ[! [ыUFo#ʱZy!UTF?+?F33m sDx^~$ V}6t@ΥW%xd-`y  q@w3?ӟqL łncs݅?|> .sqq-}ŚGU݅ewpiU >DV#ns#wum!$yHm%YLm<( (~M&z:y4~ltLUWiqUЊJ(ۯG7q$6Hkl~ϐϢϴ 2DVnߞ!_!/;M_%7I[m !|!)AFRdvލf~#P eC,'9K]mo/U/lsQBa2,+]/i/@k%Ba,$g10iBaBe%@uB/s7 Ft4^*XP; -3VFL*a00 (=0 r(:2Յ,?>?P>5둪4*a0i땕C? UB?UW Obi ^c%oxjՅfoxjEo6ij\$37P(衙 6B҈#]M5MnEMBOTOtAtOOOB('xq9=#pO}!OH `R?gRYO0\iQ$5u_Z 1}%__P>___ oo/oAoZo~ooodoo ($(PY8#vp'2q]0PyAA`x+value : string +typΡڡ_tأ_qualifiersޥ_tkTaM@Y~1%NYN1%!5s8cYFl6fkĹ}:}%W%ď֏_Q%47M9%%L^HhzFܙ?П!߀4ٵH/Gz}%]{variablrEM_q1i!%%)\IBr1R{yqO5Q YN ^ppʿܿ?AUč0ϡTfxϊϜϮ1C Uo=߷g -?Qcuw2LBbv q!AZA0QjA,UA#=-#S%8'RYN%R!)Q5isn0@FѺI3@@|>F'kؿ$%ȿ0\nKQu0`uj@`@"Mu`up5ED;lA'ο@H=Y70YʅjX -83@FߒO{ ~>+@FV3@&wr0QZ2"3)=p7;p@z312??"p AD-FO,O>N262~G?Qu G ^Q,V< t4`Qz @< BC0Uvs0QE}B#&VB"2"&Hum_ 3|7PȤ 2N贁N{->E?` Compo?site{-@e.@}L QEc"SdR[j6S[juՀSd^ccl ?aUtQsT%ca/s+',@(#su)?ʏ(XqPOS7@ 1C̠?NU@@?M| 8|O`W֕ue @hu%q$@]LL]@TB+gHpзAA.<75ඈWi<\O/gop@yo"j x/ bQ%*q'Oh;HycRXsuHQ|Alccݿӯs+HեOcהV sgĨ(qLT- uҬ +̴|  u"<<" 1 10$'06‚o5A9vST A\`&{D20FB41B-0E03-4A90-9B1ADC022C21F3}^+TP-DT!i^, @>%¹F!N֑,2„%=iu%Y!K˨Za])|oY& (oziWH77I?w,yТSgQ #0z?Gz^=R sH݉%,>Pb@!Ɗ"$61drzsutu)UP_amqͭޤEWi{ 6H^p/P!3ZY/k/}//////@ /ASfG)ArD|DvQ>rBhs),bp!QHw@-z7@~rBp qv ~AjO.?vR`crRK3R!&/`(4xR 74[6DhFe2S_jRmޕԧ @mFK[BxyߋA5C8FEBE-49EF61-8D77-E06A5BFC2767ԯUFKZCGFIUHxUhOXE[ %_qqj!5!!IT!$x1 GmmNY,⨂؟u~s ߀+a7eu Pobl uyooo+aoooӱkhѨ!]h\UoaG1UaF`0 ?F3?FQϨxk~]sh}t>%(}I[domyq2(zȆȍ@{Y?cpяf?qbXawq~}kh[U]p6Hs:U]nxj|{,h Rm嵿ǿ;({X%XBT/c`%qTHa(Ψ!!1$^y>%0yz<5P-DT! 5/`O/e[m&t~l4Uߩ,U,h  5(#!);qXdv߈߫߾i*o//?/ ??-???U-O=sQr< =ԡ??g9,@wK1n5OGKVDTBnAhP[aHsmRAp@PdDd@dE`sndB`A:lO~ONEqDAn`$_U/_UCgL_yMnscz:Ŧznil4sBnȑ0]__Q___D(cn}3 oA'oHfl ?vnvlpladEoj`AENoo9K]o%H8yz :]dAFP4:iR##~$'2q @aa-type : K_t|R^a=A%7EϱRHh4F[vl6oɈùRE"gϵ(\e4GjReei{aE߯J6ze߇Edef]ej|HAzT_a  #5GYk}Ϗϸ|#?A* %. %+=Oas<N`ߕC/X3,6cf[m G`QI!g#aa#dAQU5R߬1) sDx<c3@Fi2@@X*JRF1i<4ͿE4plײuv@`uP`@ײu`uـ~5ir0CacC tiN|1z#0@ 23{3e06{AބO,꿽@@I @?DER Aϵ f'1-0x4@FO{3@@t:N2@F9U1@i!Bh"HFBG)Rp5Gـ@z31BOOp2Ip W__,^eB3`VB2B2h&sXϵ_CbnrPe" m!a@n$%,`i!m"?c/Di!fa,`fOdfap!(o c/3qu?1u127D/!ASH@zx`PQs:pW֕ueտ$4#9r.@ 1C̠?U<6~pG4q!!d! !% w<@aG̸QYsϰ0fE@p *getU!"/ U!jTa .T0fI!ڔϲRrױױς@*55krlq"xrSTa5`&{EC136F8A-46F5-48E0-933C-65C9403D2DA4}RTP-DT!?YsRU#υFYsB̈`DgAOt3CI!U-fa!u$i!)ojҏ| 2r8pO?w ES fpʗfU/bhUM~‰/Q, QU'1`0 6@@{vI]0@@6@F(A?F?OR ;/PJBv6G $6ѻӰ6։ѻFf3 $V99kVWAW323u2Q)hfv1o1֤,!@e8! fsSoCUcgf|f_dd@%_daMF$3f_dyU_d_dju_d!jo\n~?i4F7?ay!=y@Ñ ÑI!W11"ÕЕRݕR2hr>"7@6M+8ݑD"Ru@ @nRlU^p343AFAEA-35120-B85826DFA318F2u(@ϨxqP÷/Ysa5{{y{b55ZIN4= UAE\K/-[aQpcRE\#Z%cXYt1u5Z?<O$O6O1TOfOxOhqM^dM%?w@hqk6UFF7M|?F?F@e6?ZPS_2eZeR/QuCML]_,T^]onU~ULWQf_WUoSn:jfm# hW3 Ea~U3oo WuSsK~U%H$Nת9cBBa;^b՗_f]8oYonU%~^\a%(peunX 5G_[<ȠeaM:FXu_8ӯ?:.H1C`a^^~œf@$I!AUL_䄰<;1P-DT! ;1&aϩDNlDU(:BUb0 䆂ۀ?̿A<=Osυϗϩ'?Q]oߨߓߥ߷^w 0STf,>VhtAf#@5Gjk} &ԅȯ# eC, .?Rd|/U/g',./:/V)*,g'19*e^%Q/D7E4@MHP;( egK(~10vT0vU( 92!se/?!>k5q{4~19quH(?U`?UG?3iNPc%^oIjU 7oIjeo6i;\j$7(j 6BXg#^mC5Y}AZ!O(O@tEOQOcO1c(g'Iq9#ON!OH88?g#* \:Q%F_XZ!N%__!>e_w____ooل+ooOooso5o_oo(j$yXY唃8#׏Gp'2qn#Q!y.{+arguments[0..*] : [ Λ_t _t +exceptiondeclaraСǡret;urypeǡoverloadscalldefǡhas_externalbool<T}̀IH?Slq ahނ1|%!D8ZJgPo*Fl6f<%ĹN`r:ʁN%֏W%_4x79/9K6t`ܡBȝU PzN%.{bE0BTj:i!mqV@K8lqjVQ  ǿٿ뿸!J?A*̭?QruχϙϫϽ-&o^Ÿ =oo"479lDcBl$rGJk ##QA>#]M;AuEqEe۰&ՉsP( B5@F`Fw%2@@@&d2?FPd_]$%s\Qu0`u;@`3@m2u`upp 5Y3@0>S/QL\ tN1Jz @\ o2rx3߆?AÃބO,@no@I0?45J! Mx4@FO{3@@-6@F|>0@Hr !z*$B*L*F$B "NC)"pjG;p@z3ƁdBjO|O2prhGOONʁUu:)B#2V9B"IB"o&Xy_ "CCPHew_qlV!@qlqPePt !'m>"?:cM>/ !qˌdPMOydqpHP_I/-[a?eo]2넘Dχ/8 1@yxPQs_/K?xHtt@W֕uew@ 1C̠np$| X$qv,!dlIh}wz@IZQc`5@t̉gtjveaeT40 M.|QQKr::\\-r11q@̒F5הa rq~3STAaZ5|`&{C6AA7A53-7D24-4737-89F2-6A2F9BDB1}KTP-DT!?crRbqRFcq:L!)0N?/F]qd$J !()Ko&yvFbt.|2b`??zw5 l!m @4/*@Fr,g,irr5r 8@@ -@@P*JR@Fb?zKp?ݹSMvpGVED &cc] X M?1ie1+F΄+!0K<N`Ua8g,!iaa09s_Un fjdo~da@6tsZKdr~@rd!du~$-udt o\c!)n~?i4F?T!}aZ!H+e'HjeJ[ibeKrr2V-rF>p^"7}6͕ڕ斎R kuR.rD18BEDA6-3B51-419B-B87E-6315D734A81BC-u aF @^%qb着a8åceaJ#Jb!" #HI<$+>#Vӷ_C͉a^cbRhPEJowqN_ԂMd!u%O/,ie??$?!JB?T?f?Z qLd䁡i/Gw qan$aUıFo&w?F?Fq؏/HAOSNu䅌3:MODieN}MO\EJKG VTM5^OVO]VK7#D_V_hU-udttw|__qZrc5bvg`AaUtL0OSJ5cEOco`AFOl_hU^__Cf@R E#5F?K޸BQ}q7IGfxM(q0ď6a`"4L}L-J >\wJ-$9ەN+Id<dCP-DT! ŝ>lߗUu UP ޸~fIB|1ɟ۟5GYk}ůׯ1jUgyL񓿥ma¿ο(L^pςϔϦϸ*6H߁l~ 11߼n߀ ,-?6]`eq:,8C/&>J\nU3 !a 'q+W P!,7)!% ua[@-o-œ5@$Ҝ7&PYaHEW 1dDdErH/-U-Qrq=1EQUsl!U:& KE N%C-U>XK^%?6iPQt-U998#4?'2q PP0a[Ts5+__eq__(in other : argument_t)HPbool 8Pne=_O[s!@jq//%/qa(wE`/z/(DGb( `Y`(Yc-!?:W?i?'?9???????O OCO.OSk`OrJ{OOOOOOO _Y>*\namenPstring +default_va;lu‰typK_tRt_O1D_____JSq*oϠR'Fl6'fɰ'ȔroogEaoE7uoo{?[4:BEASw=q]opKKIœ}Iy=u󯮦Q*[qW5j%BT fxuO1  "4FXj|Ēa?A_._o*F?.@@`0 ?FX^k@H,n!uD`u`@s u`uP)v!\ tN{b-zP@ ( Њ!x6@Fߨ/@@ˑl5 -@)*pQ4NP@z3a.4Ftpfs1iUh%BԼAH @7-H')$4O5Oҽ&i:&w//(bn 񅪨2NoN{+` Composite{z@e"`6mBwa3f4x:Dy:94z633L3iOOnK3俜i11A/AɢD1D1R AD/Are3??-=t S!zxHKaSH9AXq9$7!I_Xz@L觰Sf^Xñdo&nU/?Tg?@DKYo(hp?Z)c/bQ?AIgU8@A}(dbvcrAuR~3|9u;׳%$?AZ|(*z3|~Xxu3xg"<AUԋRTaңѶe9aaݱݱUssnmVD焑R/50b<3T`&{5F86D478-220E-4DF5-94CF-8405CB2A5761}lTP-?DT!)c|U|؂yFcU b?ߙ1ż)cBa`WyK?!ͳlqIRc1wtEirOŹ___ ߲Ss.t7'7IH?OWHS܍fՙbr؀ 3%fkC ApόWگ"dTt6!FbtmY1BΥ&_U<_N_崐AϾЯGPYk}ϲ@u`t>7'E ο/A߀1/ASe të ! *ASߠew߉ߛ߭G4`{ܕARRa~,gQVI`o"!Q3@@x<'@@P&d2?F_@ ?   %j%!& "! 96&2S&XЁ&c)dzq.c($bb!z@7DaVI ma?U|?%G}$?%G~O%G<:t"(D<:(D<: %G1y7%G0O4`\cVM~?i4oF?0;1X1u1111A1rN7D__"%%gRrNt[h2T>.T7;T؂6HThb|$ @:[8R*<4ADCC8CA-FFC1-4EB9[0C-EA8C12FE0F14m5[pScYĚX_ٝ@b"lj5t$toAP1"!AId(2OL zOO闢IXq,GaYXqXuE@`u>OW(fT~*xP[ hJSJFHQMP" ""_JEJSY"=QI_[_m^UTQYbt_U> oU w)o*~E땃eBi|DPB!Hn@ځ_oqoaooooooo #f'l?؆OWMM|qAUz\qEhtY{x /AS\xw%ƜՉ¼ɏ[ꏶ:AQѶDtyq#'2qzmDq+is_copynstructor : boolNBQP̟ޟA(G\ZCOA3Xh4oFWl6P iӹ{Z࡚EE"4B4WuYBBtpPƿ/bA p dEz_t9#uχϙϫvyP ) ;M_q߃ߕp߹]3?AU%J% 1CUgyGYkrKt/OD/R*+/8J\n:&Gݤae1ޣoq3AQaEBM%E%&s4RT*J3@FR=(@@@+rٿFPJy5XD`EۿM|hquP`u`` @Bu`uE\y!G@S{q tN@p z?@@ BC(u@+ ĿA.Ki߉*Կ@@[I$:%14Hpࡡ}2?s?ࡂqHpOtqp61D<.A%p(/$O?MMԥ!@ "E-Y/o/%P/ O#ݿRZD;@cDq6$6116165⯅!@AHg?Pq1AqT@Ae1R9"AAPa5|f:cTqE$`&{9F956D18-73A9-4C31-97D1-C151A5AA0F31}%TP-DT!?um.q}mFBϓuBIm,C${}e1aq=тq61 ё499! A} & NTX2_m27z6 `2s%m+(@+)-3E85CBB5LECGD3-B784-165B121A07D7^E|a5v}SӢ/uqR R11r  EI94DZӴ``afK yO7pK:U@ j u15?_P^&UC 7]_Tu ^z]_YURdOffQY`ibooQլ[LfLm S[u&U3AoSoe6&UbXo e|i_ _Q]a_|oe%nooS%8/~ nX 2aO[ڈ]%؅Łя㏿b/A^pŁp3aП{ΞIzIHe;Y3weSZIiŜ(Yt<$t t Z&8쯔DNlĨQUů;UȮGvZ GEWtǿȯگ"4FXj|30BI\njqϗϩϻϜ'9K]o߁ߓߥ߷J5GYAsk3mkuкa?:J9PnM#_q?%7I[AUIC1a Y@q(g 1,y7W!915a$Hg&^>]8P"+Ť^X%X !aTaUX)|*ea&Q$ !@)aec5/U`K/U_7h/Ii>CUOJ*eOJ'57_F!i<_GXq4//!3///??$?6?H?Z?l?~?H1?:1?9?OO&O8OJO\OnOOOOOd_O_O"_F_`@j_|___%_GqY !_ oo1 Gq(,A!$ro?F)'ooZy;+=w7 Oast4'y)wq2^& C7Ŝ^L|uҊpVdestructor_tbey9o#-a'2qX\)Gq  %7I[mǚA(3(o-?Qcuӯ4]8.;Xh늼k憐ʏ܏ #G00!\NlqVaϡ!/e6.̥s1h4F4@Fk((@@@&d2?F@;C{뿚AIۿ<qu `u `m@tu`uP9#w1W tN|0z(@ >; ?A.Ki*Կ@X@I%?#Wڶ0< Ж|3@F%eZ)@@@ 5@Fk7(@n#Qm)upP@z3D2pVa & //1.qGu_ԬX'mSh&x(~?iܒ ?XNgLaNia+oJiaNm_cN ӑӑeRie vee"2ZԿb$eJb>t7b6beeaf`a\Vt2(@ritҫz3916B8B70p2E-46EA-8EF0-6E47834B78#8AGterJeـbux8$ex<^C1;U';Qjj2Q&'LI@rtEIjoU `;Ud&&Xgp"v/dS&S-Z 9%H/Z/l'I%0?#=ťUbX??`ep XJe</`U&//bj>DOVOn'9JeFAUMQ __Ƹ;_M_Kxj_|__XQ 0__:_a od&o nPP1NqAB`GEN1$ eɵB/D<DGwP-DT! ڡ |ey&'lDgUo U∗pFMFxNooAoooo9K]o#5nYk}P#Əҏ,ןPbtΟ.:Lpݡrݯ 01C:-kEкa?utPnM#п*BN`rτϖU$X1 n+A/',:i$@X1_ *P]eI GEaDhhB:i1%1!AD:i!%OCp UX0U $1%bri 0_X10oj nA );M_q  +=OasN9SO])OOOte /1nH:/F/(X/Ea1(-:lÐMrA/ ?FdUb/?9! f?x7rE???44>紁Y?G1 Oma OGEO~IA|rOl#sMO6y{51 Z#[member_operator_tB@%0Ye h#hn`'2 qp`:U:_ N^ `_r__@_____jAcUcsc o2o?Vohozoooo???oOt?xiǯ{O|OO__cG,0,1Hő!썖,1f/x//mOoѠ|3@@k*@@8%@F%k?u?~ٗr7,0'Z1ߟm0\ޑ ƙ $Ӛ;; eZ1wZ1UӕU/2wu<4 C0~?*,e=,08IC9,1QQ8xab`uল㫕å䨰wu 䪰%b䭰ey\I~?i4F?e#@z]gցgց,1uT:%QQâ44wrցց ⎱"Hb2b>0!6Ų35 ba#6C6O1å0%6B`&{6A96C0EF-349F-4674-B3C3-E26546436EA8}e!?x!@ ,03u$O3#cųO3& U ᪱#;BQLC_Q%%/waQ"Q(HC`vFt\P/J?Fک/4\DkNɃONåkE3||MO\Dwu NM_E d?ðۦMVI5R__A4A,%{ZHFI~/!;+fxҙ%b/oAoSoeowoo _AbkE3__EkkEw߈Uշ<NEtOOM4_|U_E-~_o]Cp~J\nLHUg3OEKϱʍå$AS p5%bΟhas,>aRa ˹!o $'IcR%PN{_q߃lㄢU慉U NSL_ᆯAӯ -?QcuϿ );t_qσaϯ 2DVhzߌ߰ "4@RvA5q67I[f~{zP eC,?0HTfx!UC5 1 "Q,3!IQU*慗e(fl5385Pc+bHIf(J!DE߂aQ?7%%qqG$J!ˉ%q@%uSv/1/U|/y[Q*^5S@^b[U_FiZ[6$IH#>O'2q`@N23E+function_type() : member_Cj_%t, t??#w9?K?]?o?? +c^7@ `Epۺ7Dt=AO$J2XGbCd?vC?\.?ʀ_AD/OAOSOeOwOOOOOOOO|Y/L_Aq;_Bxj_Ɋ$_ώ____oo&j7ivirtualityR`bool +has_conststa7ticjdto!3d܈4vt?1`0kdDVb5! /2nN!oo(/?x2(3pSQ(:u=L8l618ù^pwpq%Q#5G-4D'p--a_ُP_] ,2T}Y e:'a%4kUdcalldefi`|uԟ"D@or i{ÿտm?t{(:ρ^pςϔϸYk}2.UtHߥr, ܳz Tyb% 4krx1,'ap+1eeV~vWsyTH$4@F̂-@@xFx0$$<1uvh`u0`p@"u`u`%9qȿ 1* tN bxzp @"* 2\#35`;ݿA?{@ؕ@Im0+?c4k5:x |Q`0 6@Fߨ/@@|3@FrpW+@)+p1-7;`@z321?>+ke!B'G2p\RGG?GOO 'F!BCq2ߑ&B@F6B@,B@h&HՂ$_*e8qehPb o:kh]?¡PQ|yPO$dQptu_mr/a?~e~o2x?ecQok yъg.@yR{/s݊%A@%/s2lvNwqDDdW rhK<@?MsQcquR5Mvg*oW xae T ȄH++2j**¼!!r05#h32xCT¥ 1J`&{4260C3D9-3A66-43B6-B201-DF275AA4464D}@σTP-DT!?c@՞֮uFucBx+D`W]zAF#V`rGQNj_G_lWb`dc?wm5pm //1/C/U/g.Fh84 X( B>  AHū/////??)85?`ɡk?A\?`n????31;@FVAY1CmIր0DADuE]O? O?&8O;CmClC__)_;_M___q___Y_Wm__mjo"jj3o1Woio{ooooooło*PA}#J|аn#H) @[m5/Ǐُ!3EW&{64E552EF-8524-4F16-814E-4A0AFE73658CşןFqI&{m-j?mdvsЯ*<N`QC"#R)O?/MEl{ OUr@N?*@@~?F?@ ؾ@RUKIO~A fffa`b gffa~cW_i`f@\us.fI#A7܎ũ tbbFqzW@ dA8YdAdI L`WUkqc!wczQ֮özczo5czczckI@\~?i46/?oq!q0Mj!h!*/Zh!M-ja y!G%h%u%o2%2"%I">7"6ɔ"%+%!&!U4mt@2) 4!o5?:C2430120-3E9B-47A)0055-C9AE9A0B7882F4 pd2 I% ."t8hF(9d8;S]btiW0`AMarbqI{j2o54`fCao1txu %dd_]e(?Qcϓ]!!Y!"ݿm3a!dAQcd!RF`0 ?Fʃ` -IAnS!ߒPyݿY޼dSSJYHo\o5uP!sfocm!ryb@,>\[߃dx|>ddEdߓI%t9'RfʏޥZnIbtzI%0B۩EQ`=[&J8//X0/B(c`[_/B/u/a/cF/.q&0TM1#RAYO__u9eME$ $v5QE0OhuؖQ`u6#K8l"?-j糙,)廕wfGla2*2P[F=ۡ^(Уu"ߘzϣNlZl~ȥhؤۡੂsBa╻DŭlSi!ǔt)ɔS#'2qHz ߘ3TS+function_type() : free__tjpҿ,J92SۗRϵmy[ .@Rd z69Oa.%IǔHjT$+>@ߡ2>z(kkСh4F9l%62K#] R^p╂4SQ4էWSQSQ28\LO(CO/HK)O*, calldefKWi{Q;Bw!P(:A ^Rz F. X/j/M/////\B?A?u eu?*?N?`?r?????Osd7OcaOhzL/{vG;gd;ߣƁyA_m;^p~goU@T*JR1@@ B'@@\.O(?&y"RR5oRnԡHd,a UQRf'yA;v 2Dxew8.; 񦡦Pw1zqJpʦm!he"oEa"Eqzu"q5q0c?\.Ɓ~?i" ?Ɓ!> [xϱg]QIZQʨQ Tb oBQQa$Bzr22>q7L(6݂3Ԁs̑̑21;bh;(@GH TEhӽEƋHdZt`&{2C64D578-2B02-4CCA-991F-3BB0BB596C5F}H5T?dTcs߅Q@}F݃,G{aax3񕱩 ϱI䲱REST ]Gj3pwtA0oBj)yh/Dj9 G9 E^poE 9aq4W!6!AT[qIYW!j%7 1ʁqљm[qAF"?F0mte#  oE6Wad v ]E6`  zuM5bX//ɥ  y<&v.D/V/H.??nx h=QmRbEMOA [OmOxOO^OOMOHcOAzu0_OF_aZ_Ȧu_X^( ҄KcƁzq/E+E!`Xl wm a0ht~x&voOu2garAoSk/E UUvfwh\ qA LHa!;X^uĈiistKRT4@Fk((@@ZV@F@;C{6?ۿ=uI`uq`gAuP`u3LaG RKӮb tNzV@b FL` ue&sC?A.Ki*Կ@q~?@Ik??ىqLLq|3@F%eZ)@@z^W6@Fk(@qL*)pKn!@z!Ћ@!3p`CDs`sErɣHULb| # ,t]vL+C 򠠸TLadJ@eTXE,Y~`gv`JwXqcM?Cq߱UeBLOP߱:r;E,HwqS+Ox`Uff@#ݿUeŶEPAqA%YiuŤaN1Ļ7@|@0Իqod9UAf?ZddgBA 57oPobmUj|ooqoooo$~2s4| -^g_k=yhǝrwωˀ灖?uS,82Zfuv"@/ ?.@RzۏU?rݗ6pݿ'ilu/DVvvʟܟ$-kwAuM_̯ޯ&8J\ ȿ@"bFXs?-^ϱ(w0p?sHu?TgXas錫u@u'14p'1'1Yku9k &"+Uxumember_func?tion_tMՠBt+ ^W#'2Eq0 Ţ  -^ %7Im A*U5U ,>PcynC4_32_8Zn[0,_L^pFGPPl4|QcK10!K?Lc7lu3rBTEEr9sP|>g2@FR=(@@X*JRFPJydͿdۿ2u`ul`dP@ruA0`u.uAdQq@"p.S`/CB tN>pPz`@EB }rsdOAv.Ki*Կ@5@IVp?tuJPcDž S|3@F%eZ)@@Tb1@F@ (@)´"pq0!38@z3q28J1a"bL2pʇNʏ܎ 1MOkDc@bb&# 3kED/HQDe(//ԝ@Faq@d5ta]Lb?HMLoad0AOpP.Q؟NEX/^T[㡹?᥿բAôB MO$@_9*_ #'ݿ`d8϶eqD.Qѧ\.Q.UCOOOOSOO_B<_#`___}_v_oWooJo\ooooo:4Xjb0Bfl/~/ҏ//,/P ?t'?^ӱXApCӱɔCc1ޕCj,Q^̽{EfOC[SmL S÷맷ب89nC 2iLT^ι.DrPlgnU㡠u]=/É_UC AmFWبevN7cnEo0jC o0j4Eo:˫??1??? E$64OJO\N `psۑuOOOO __/_A_S_N@?%!rTCUIX# Mp'2qMXCY=[+CLASS = "class" +STRUCT~structUNIONunion"_____ oo6oooZouo웲ooc8l> ~@OO)O;Ox_Kf x-؂- ұxw^aH=2???\.W?+A9"4FX"[enumerat _TYPESc..ѱrTiOUQÆŽߣ 2DVhz(ןŸ}!Bjwk}8ؕ8adطz!3 >$Դ?.`k:8dJ8؈*,۵}!ԉP3r={fOw ᧥8oW8=| oqQ)s%@FFO1 6@@P( !FڿmWF]# @7Auvq`u`;@=u ELA@S  tiNE}z@¥  H _0 .@FqH1@@@F:/@)oRp} @z3_Oq3gJ2TPJpp 9!0(hZV$AMi@-'7tOؿ o4^&4O4y3Q8&A(յ/NsFL5Rr,>x8N贁N5{FpQ ` Composite{ @e%xDVz C]Px683D4֣:ף:D՛4أ6X3LoSh3Of31111ȼ؞vD1D1/2011ba1 c(z?Limw X@"3SQ\pV3S I XqToq$Y7qISOXAZ08%ֿvcepV{%Y4oFne>f"@yoHhp$@RO/AcQ?AԿYB i/Hdr(|A:|ywS|(uMȚ #Alz#@S|~oN9yuSxg0Ad:΃bA3Ta[m 0ІȰaaױױ ""P @TTER"n5!b4.ױ6X3TD`&{9A631A7D-3ED1-4404-8AB8-F54D10E394CA}>匃TP$-DT!Ic> 圕_p%@Z1>%<1<ŜF@.d,UF/b?e͔Bar@1𘱐N?Z0ނۄ@21B?#3P!ld>7yd6d$0> u(EXJ\F5243972-C7F9-4E0E-9948-614E2B5043FE>o_uUxWD7!7!AM QBADQI8'QΤy;]gCs1AnՔށO1JJO֓]a(\!1хEʏ܏H (:Wi#ؕ0iTxaɟŦǞp[DA E(/$=5j4?}lyE>=ǯٯ yE -q;DR!7F#qYR!ue1q#q !3ߙFh~Q?FS?Fl% 3ΤE ?5ͿUᴂvD͗#EdL3dj_?3 9ES pU𵍣 Wu\.#34L͖N#śuބߖ⳽u)[D7 e)`_q[qWu!H$$$v@@$@@k@&5s@!u@`t?:@Ju8)`T 3tQY1 1ZtwhUQC])B?"R!LA1E4?5O CH7!2qs?rtfpYA"L`lQ#sUQ]QUC)a2h!-&JP @Jv S!H&%7/R]W/i%y.//'m!E&./I/?m!E&//C?.HEToN㥵N +?a%@make_flatten: @This function returns list of all declaraBinstancesBP0@ms:+I_#@rFNJ ? find_,HO@vA+O=@ according criteria: type, nam@parent,@cursiv@fullA.De@fault value f\@IE a@C @Non@F = True,BI]fGnotPu@N Qher@gP2[AmogP8FO/QtD(@zIK@OC(@O|SOOOOO_!_3_.@ OFR%D[S8G NIpath:_O)@zcsRs. F\@exampl4cvUaPb`pbcpa@dummy{7@.ar; }b[ ::, !r%:7K >GKK^=ABhlAhC1^e?$!)?]51cqh4F4@FEf:@@L&d2?F`"_W?fTnUi-"fVA;u `u^`SH~N]wqdPUVbX,;o@)RplAg^@z3RonSA"PbVgRpK0!6awfovon!%Zѫ/d$Ub!fgBb/lEPePNv#" 5t~`azs" Dr.aMs8yUA؜&x{?@5@Ipόuu*K&o+ /!~;$!Н4e///6^`@D74AB?ѣO@An)41O߄Pnj2;A$x7 <d??A ?zwc?VpUMQB4~œ5w1T/fՌ#hZ0X|Q9PPbjbPbҥ!_ddbi6a o ib2e4 3EqE 2Yr M~Iwi⁞f~c@s c qlEyt5xd2NׁN{4m1w"_` Composite{1k@$jxe'j9[Uo.!HgB*fSB*EgoLPCѸ/4䮏A!^!{!!ˉ=2j4A!"4^!^_{!<4!СC}2 _w?/W.@vOd<@M@3M@ 1Cſ8g?1OoSG@B?hOU@(!Eѿ J_ZS *Ń=UAScQA3?oQ~bb?AN eEn&lE /@AB @o&lj?Aen@دk i(:ׁׁRtr11rdJ %qfFtAq}"r☵ׁȵ02BAAC52-00BC-41FE-B188-E=EE93A'020x Ú+yrH@w5ˆ?H‚9%%#"DȀTE%$=rDE]T&ZnNX9ϒA!A̯ϡ7@/OB6He@ d[ߛ2%ߑ &ޠH*djEz{2#&iAZ.-!^!/ 3EWi{Hc!c7ѯ +=6%1K211H\4\d5U?U0??`EoyMhkDQg!{!ܟ) 'σl|uχϙϫϽOapv E1P'!!đɿۿ*Tr7Tr6Truru[qPՋ(ˆgՋ+ %/19892BDC-EA8F-4DE1-87B0-8C819BF9D25B`͏~郼ˆQo2EKvaOQ~4Q__iA}2~1QItA %o$aL3"Tp ! %,-M/JI$=u%j~$s/a g>u-2D[m qTs,Ta7YU#wAQđ qAaL!b#FhA?FC?FAxPk#g?c%u ؝+dm#of I"/Ǣͯx %熪l`wE!ve\.Yk5ǟ~$MneJ*vugyne~?:L^M1@6#H/At^p:HߟWHP#`wE߳ha.6I[tswuQz??"t\<)s B2@F,5@@D"H$@F|jߪ!nu~@V u`u`An1 uP`upPK!Bc&19]2 tNz]@]2 KĄIL!z=0@F9U1@@Җ4~Qo9@~FdnjUd)pQPp@-zP@Bp!4tH%M??A.>@@-qn?m~!=EO/nR=2@9#&{Q&& E!/b!wE,{r3hlcU2N贁N{laЄq00x` Composite{nQn9Q0z=E?U?7I?7O76BIL#? a#71+1H1e1OQ Ehxǡǡ14+1wxH13 De1lTQaU(Qx7Y/ ܉EH!hň& AfND*JR@C%E^E@H( A8 1CH@RAuEwLB/^lq!$'@pGFOxH @>ZZ?&11 Z@BV_[7Vچ;uoZ/AbQAnH?AfmFh2cb?g~lA_@A[# @Sl׌ABjl[x~hgg$D$ds1T6! qq%"6!6!$?bLBYj"@AAȲ @N©aV"r56"%A%ABp8r#T{q`&{F6C858EE-5A8D-4788-A84C-9B1FF80F8987}ށ,TP-DT!?{sށe"D?V?((##uh'T1b5>d,'Soe`-1Dq۱?2ٷЯh?aQ~??p߈ uF{N2~E$s@wU ~j{VE fjtT@ $')eIhad\W^b Q!3,VdvXT+?2 `khh_UQ۔EcŁi1VA?'sޕwQ4 ')p5urIsDxT*?@F `8@@bX?F`4F鿘정ٿL!u"`u`CP@˒uD`uڕ!5CQ_P#ΐ1rRW tNӐsz@R )/~E?A& пr*԰K sA}>>@Fn69@@jZV@@F:Ni8@&ŁrޢĂޢ)̒pC3$@z3Q$6"p.VAVwcv!wU^a__}TrrĂr x&ϸ%3ܣ"E$( T `e|dPfҰ%,P%7 0ŁM?HŁ1SY 0,QO3be7C?2BOTKmo o &TRT3ڿQ}Іtx}怣qt_ooܙoتa@f3 wYAc֞pd!qvժ8/L$I?G.G5gLf! $dQ1e "T鐿,RQQ"LP"!!wR VBBQQO!!SB'5`2/01(γTH1d`&{2F81EBD8-21D7-445F-BAEF-845AA8CA37C3}OwUTP-?DT!?3OVE<SF31SCW\QHf$ c A O&!$ 'JY,QrOU@?&d2?Fl6fo?Fc< $' ,PsQ5__^% @-@@>b,Q@?2*eUV@U $?+PK]}O}///+/=/O/a/s/////??/?_P_b_Qy__Q0____o_ofk4e9cTChSUhjchozooo,oo@=+ejoo '9K]_Ss| bķuKZlۀ$-؇ڃgfP+MaYm q|ҰH$±#ҿ呏i3qUqQv>UTxՈx3I4"4nՏςz򧟹ّٟ -?Qcuϯ);M_q˿ݿϯϚ7p[uϐKϽ|bJu(ws{؏?2d0hc(4FXj﵎zfloat_t@%Ǒt ٔ#6j'2q ?B!W44HfXs4 Ǒ11 ';=gb, #?)8;/z϶ ^ .@#dv AS1eZE1e$6HZl}r/1!:[D/__C/_bHZ9k\F<_G{p{p{pqtAϑcǕW?=AaA4FXߣ^6OU@D"H$0@@?=WJ7@IO&J(5OBNqUPwqA AUUDBF% WWLO_ e$ta8ee#UI!QPϑp!4̄ԊUUB̄Iׇ%̄UPׇ̄+W̄+Ū+l%̄+3s\+#a~?i4F?oaӁ *Gdgd1*_T14ərTQQ^IчURXX"11QQQQW$R2l">Ƥb7Ӥ6 -3BqqL"M! BXZ6(@UU#7W!Zd3xT`&{440BB6B6-ADC9-4BFF-B53C-3EE327D48A37}l%#?3!@2cC3ޢ FϕJyaaGdx yIā"Wnv8fPzC>HFpTW?JWUX/=j UU>/A%Vhzߪ߼qF$- yQ-9φ'I!a]Qaޡ8}ۑ–И~% .S%ǡ0`' @ǡǡ a1/U//)(88S~%F_1Z_1Z5_Fi#L_G~%~G3~ |j#)a5a1-?BcZya?s?OF?U@/Pc:@@k'@@\.o?dY}SZOB $8MvLrYA #Nvkvkqes"OU6F!ڟ4u|c-qOHOO(e/98` I*A99O ǡ KP@q Q%~D~%~~D5~E~ Tz (3\O)ao~?i4F?\o)a@܁P3gX$ _ё*AK X"T a11" ~"ёёr a$ a2QB2^Ak|b>x#17J *A6j"35T4*AT D(@Aɡ%իC5? <4墽D`&{4F75A51E-BB60-4739-AC16-5CF423D69053}cɡAի?|eթ䨃ҧ@SŽzǣj%=1u+q%a%aR`1*+PID3Fr5ġj0"dlIL@^R%pDaZTĢKER/TuI% D%ſ}~%,ߺuJ\nqgj!RAk)j!j)VCja#1ؾAQcFh?FK%1I[%1`B"~%du vɕ\5@=W^EdʑL^*AX"k5%AbXMw,Jt]|e d姵1#ɵp1BHZn +=|e 81PA%!&E/"/{(?/Q/J8n//8/(3!E//>/a?I*? >7&A75dqEbFin@hmhEe͑$֗W׍qQo7 xSPtqv45G>kкa?yxP?nM#ԏ.F RdvU(!͜ ^' ,ז>9xXŕ!cΜPai 9^HˠlؠlT >9آ%ǯٯ5EH>9HtU U٨O(% xvic(s:ݿr-?QcuχϙϫϽѿ"/ASew߉ߛ߭ߣR=Wa-x5 ^L>J' (w><ؓQ ?5f  %۞j|O4Q4BQ )QQq1$IELv<'CO:IK5O*Tfree_operator_tQz)5"ٔ8#l>0'2qP@0B!PX[EG.FC   R. d/v/Y@/////:ATUgeg$?6?Z?l?~?????O#dCOcmOhz(L //vGQ8pуGaoHg8qn$76?;uu Etis$r8;@F[QJO)@@` B,FRT*殕@uvL`u`@ْuP`u4+pܐs7sGr tNᐲq`z@"Gr 7S!@x%NKAs{@U@I+?jq``Qr\F𛾜*@@M :@Ft(@)mp<04@z3WHaӁeR>HD> dpS!4^Q%tcmsmCmE&ݸ{EAGcчudh 3tebXJ_\_Wpvׁ+p 8p;eztӁ?!28p_ z28qOApqϊ~4uh/ѹ?տR\qvnr}`k9P`l@w_L{Mj氕qzqGBzqu4uhq7j>0"%Spe p@Xl%5g4&!&!a-rTQQ8rV{BHaHa  rGqGq2@@55`@21c!OܳT "gt`&{B7722A1A-5596-40CA-B891-ACF4DBE78DB9}]TP-?DT!?]ջ@FkӫQST@9?B1fFL&/'qI!߄5cӁqmdea1e@toҢЀa犥laee8pD`X"U1ecߗyU@؀@[<@@?k'@oQ45ekF)C.V/$_Ʈ6 2R! ak8rf{E67qU'9K~8>g􁤉8qUƵAe"JuJ"JUJ5"JuJ])0\>c!~?i4F?/P>@AAQQBggry2r2d$>$d&7dK6dX67bCOV]u,yD(@y] {w-r5i{ F2BDB798-6A7D-4D82-AF72-1Ap459B545]{,sy'x&:*uKA8#-ѳnDρρCgU0X a9QA2qQ$")/:Exa10Uvj8%Ԡ<%&%ԐZ %!>@!AJ%-O?OQN/x&:מ'lU*ՉU 0G(!8%%&/x` YxSA (L^p/*/6Hl@~QQjA /,?-/?//c/u////////??/OAOM?_?????Q??a??O OC_DOVOkкa?HcHP?nM#OOOOO_+_=_Uo a_s____Uokk\ >ooN/i,LJq7ekrowvt򬎫Pp{~s$hWq``bb2~baxoonDuTtWqH߹UkU )57"x "ϖiCdݯϗ2C`*PbtΟ(aLfp<ߔ߸ʯ "[qMY/i(@gS`o ?wDuH 4'eyϋDž՝ϯϬ4Qw߀3vXߑT 6I D befree_function_tҰCd1#{'2qBȿPcUC+y?-" a sh@AbcUvE%vE3E,i{ !.Ө$R?#|?(:7K ?*6G G0"ACV!/SW'G1}3e55)s~ɻ1;@F[QJO)@@y^?FRT*TֽUڌOu[p`u`-@@Ru `uCU-A:0PsF3V2 tNP zP@EV2 FbbOc x~w%?As@@IV`?de*Ȁ q G0јr\PF*@@e<@Ft(@ )2pKawwC@z3fabb~AtMrBWxSv2Mrswbpb13qv~m?44rr|S r|R,Rr|RiH&xPV#5$(B4eqYk o$f06A:0G0"J%ץARk?_A"߁n̥G1OP߁pd$w!>C5(/'D?:ak1}2=? ?zp?HP`?l@w_[ UyݘUq4w!Vp8mQ90?GS1̏UD%؄E؄DfCEE؄D؄5؄ $lU؄8\m~?i4F ?0Mjݱ:ݱ½ӳA$vava+ňݵ EB22$3$ž>45R74Z6 4gEł"R^`el5(@lc;x2xϊ54BD34D8-D4EF-4873-8859-4FC1D6D5F6C3lUc;pw3c9r85U?u5Z %ǰ;Oғ<AA4ID#0ԾuNfD5́ga419́ͅ$SOU4OUHWQOiR^c%ojuojU jfi\$xBjg( OOAOOOOO __1_C_U_g_HQi5_ZQ5_Y___o!o3oEoWoio{oooMooo ן/ISe$"!Y1!!('@<#/![??/ɪC[5&%8J\Gj47b9jjᜟΟ|GF, G5i@eۘϻ5ѫoperator_tKb$nFY#J'_2q?EФH 寂!  2DVhzACοǏ(:L^oϼɟDn"AO sR(ů G!A|5S?A%v& sw1l7@Fɱd)@@@&d2F`0 ($oF3"u\nu0`u@`@[" u}`upj%Y^ 3Q tNz zV @ "#!5bXAÿ1ܿ@?@I 0?4B 5>1 E z"68@Frv*@@i4F6@Fk(@)p?vt7p@z3!n2t?>DU 2T86e27n2p!G?ON0F2|F2X2<&_H%OQ Zk9@e@  Y"@qYPUq]?SDURQ POTRQp-_ O/au?eo; += )`?|0fhc%)%lG v3$qBT\xhjjZƤA~%ЀqRu%@dygsСZСQ{eT~ }}5g%0 wb \r015`„Lyz ^CTQ%`&{649ABB9A-4212-45B8-8873-A832EA796715}߁nTP-?DT!?Ec߁we=M\u=FĞtEcBYxPֈ!3ZO]?*~51ЯSaUr _M_ xlb$`(d?w 5?yRWRA$Vh v>.BE'9@Fe& q?Fߴ/?FK/]/@o/////'v/U@ O|?/ ??/?A?S5gHҰ:@Ft j13 9++4KD 8AlOk}o???IO[OmL C32 COOOOOO_"_4_FY$S_eW s__L _Z __oo,o>oPobotoooooooomCEWya%ba<@g);M_qˏݏA1D9A07-66D8-46D2-82E6-EA5F89A3D319.@RdvFUvGK^ y̛ ޟ!p )'9$oɯHۯ͚%?$@A?OO?? OO0O?:EKO]OoOOOO&A✑"R1OU 0R,> Y_U@@k'@@?Fl6?de[YS_N1S4vrQ U47v7q1s0iv@j )fpA-n"t~ibbqMz@5Q8A5Q5Y: ԤCU' >d(RD.RMNRD%OR{ePRDRRQ b`\a*~?i4F?(oaQnŁj !!!ܔU%j@%"%{b!%2*H]"H%>D_7Q"6^"o%|%!!&Q!d$(@")${e/*E95FEC67-80!BD5-A726-27482C80EA#D8$2İOҨ"8}rE# cyf%tQQrqIM2{eZ4:qe$BP>z{a0R.pejdomϽj%(:! !r 5QA!7UdFhV;?F_?FRzc'``bjQs%dYcd(W@ F4{e`##* *<7Xr bXs5U@dY( ssӕ:&n 5a //(:/L/xhi/{(us/{/ /a/4V/. Q dnRiO0oU$ٯ5"UU_LhS_)_;_M_A)8k\szqTӁ_sZ8snU\nis;v;@F&2@@%Ftگ P]Y?Pkaui`u`Aau `u\5 e`y A'˧ @@q؀?׍uPi 8>BP(J@@F zk0@@t:N5@FDI2 73@+zq8CyrMI*Ci)bpQЉ\@zn@ApnQܖȟ۟힤Xȇ#b tiNQz8@bQ Wn`OH 98CzqReb@hxd@mƦdVSZ V86vdp/2NǁN{M6DvQ%1` Composite{8Op@e5nOa`q*8Գ8+,U-궟³Lzq`ϺQ\俭Azq#@X`tn0$2%1#@bnwb"^U(UDv&DvOo\Ui@ʏ،>PS?@ 1C̠?xi&Iz#ݻծ+2iRq_o 9#:#<@? ?Dv3PP]e :ƅ@G:r$/pᡟ+ݪZh/AcQAP?/?( Us$A  @b [ Y@ sgQ##T]b4R$N[-h"@4q4q2aa@r "54Q MTT,1 `&{1E1C093E-52E4-4AE6-8E71-5517348EF12B};TJda?K+ @['uK$Dv['H'Fa@['%![')*B0/KLD;}VZqoTSzqy-Ϣ]UQURo/UAd@ׇI@߈Bf;{]eQ"607AU##0z?Gz\br]e:?Qk^g=_?gU?????$ F!H<~5OGOYOkO}OOOOMq>81]c dYgu[GU,p]oD#R?d?q_??P_b_t__dmOgE___ oo.o@o@RoOO@OO4(_:_`rgAS_&8J\nlou*ooooHoon.t&͡w&ӏ,I|>U@\.?Fl6m?$07Pf+D(V?1?7%E'??7%G/`//-/.L/7%>d?v?>OOn+6աnzա.~U%kQw__y__N_XkQ^o_83oaGo6bo Enɀ O|&,3וn^{i %a8{|a8PƜKFi'|߭Q.ھi|bŁ+7||6@5K_cUyϛ(xE|S>Q,>^oooo *6E[?4?4P듇SB1<r6\r1 As56 12 `ulnUrUt)CA -BeGQ8)WFmGQ^c ZaHpFaX04jшCD5JuD6JUD7JED8J+eD9JZeD;JeD:FRsC\#N!]~?i4F7?/N!AAAQQ;QuQXQgB ymQ"ApHT5dr/A/A2QQB@(xbIR2dfRd">da7d6d3ddb5dya4d]ya1`vauo u(1` r2`&{792693E0-F419-4147-A82D-8A0746E94?E0B}afU{? w%y@ wb xbw@mwUUm'Ba(A!aEPDAQ;QOBPAuQXQk2(]Vߤۿ%LSGO#pFT(Rd({MU/N)524'?c3ނO)=5-?Q߁EoqcTj^(zOFTfQoAaQQa343FVbt./@/L^\QAoA //B?C/U/?y//////// ??-?EOWOc?u?????7??AaOO$O6OY_ZOlOc+f~HcHP eC,OOOO __A_S_kow_____AUoM\ @To)oEi},qǁDž}uυo3w@-؂--ɕ@ÄɗÆP{*.sry#Ѩmq`-P->qh aoo~ZujtmqryUF!͆7teMօ?&&i}h~YdG#a'_2q9Дqh`Vc+__eq__(in other : hierarchy_info_t)ubool enej|ol944@(R(Vgr|SP=aDˏݏ)-5Ga=e~Tf˟ݟ7p[ٯ43E2Waccessstring +related_cla,_tȲ:ɼqqω.@{jbqc3xPߋ\Fl?6fəϽrz'=e3߀rteߨ[t4gw{ryzߌvߨ/v 0%vG%v J=eWn{ByY`x}J߷4/n; ;ɱ;¿% = Oaυ9S?A*EɄ5E DVhzL^p@%U4.O3XO8J[Om5Yd`_teaZG]0A< 0*ɼ*S$/S47 1SB3Ie qVg r|&a&axi%^u`9s.tt:N@@F/˘2-^FI?ʖdݞe uqp`u*` P@bu `ue Q@`%s#C3B tNT!z}`@3B 'rfq0s 0c2L&3A@FbX,@@ov`M .@)7"p!idw@z3#фrbApAqaaqvL~41QQ"(..(RRHQuAa ?@卍Q%O?$BB-Yc =YbMYb7Qs FX&͏@~@421sE48zD@2N贁N{!!6"` Composite{ 1@@Ce 8)?;?xO"Q@= 0ɱ5"'>/Ovp?/f 'p1L7#Qt&A䡓_Q.KhH*d%.`K5"6!h)JGZBEO0OZ5O3 efeոqFTaa@Aq:$NB)Cf3TA1ꀺou`h]0BPq40Dü5R}@fm%RŀTy#4϶υplDPWxI8/TcQA;7% տ?e~Q%^?ADqWb܉f^0׷J6A5t0މܛ%^ ?+gx_P^&AhԖT& !!$Bf@&&ћ"11sBQQIb3A 3AQRaa@`3 ! !!pL5W&һ1sT4qSD`&{4C783269-5400-45C8-93F56018144A3C}t%TP-DT!?t, @e.CFde!H5 3<×!Ie$˓r/N{OɾQ_".!!$CQYsAȯ-P5"?"^I`?WPdhԀpԍIό_<15?#C1pY8v\m$0zGzgⷒQ5aa,^/ⷀpQ0BTfxE!Ơ/@/(/:/L-QX1833cXDIi7+|U]`u$h&a/&/// ? RT@0ԘpG[?m??????? L/^/t//O//OO __9-67?pOo________??O!O 3OEOWOiOfGr`~+l;VongraeMqqyHљ!is~@@FqA)W,@@x?Fһ鿚ٿ|&u;`u~`m@Eu`u.THO tNMz+@ 3r`V$bU@BP(JlPo)-@@n=)W+)gp. .@-zM@Fp8YEXj;raU:Σ@Ǿ?A8EKW y`qO*.ՃfՂɢՂ;&I;pbAq Jw`x_plq}U2NWN{~vg` Composite{raXeodoooI҃ȮqQpBr`+aæy"QpC˖Dve"E`ÃLg;t!߉qsn;эve~Ԫ`78Ѿr{`rk}ϽeSp"Oʖ3veQqdR{ߙ/##x`@˕@Hdp{ 2pش`iѪ/3Tc(4"A%˕A$ RjY?Ax{<桿e ^g4U뿧gĢqMqs(qjTc qq˒7@)q)q^۲kł aEEH4Lr $$54)qsȘTed>`&{7FA6EC1B-A74D-4A63-A2B2-3BF5F235D093}>TP-DT!>N% ~=L( ^'N$]V^'K'F^'&?^')gr>BˆzFwa# Uҏ%)RvɑGRRjж۱Asp85@F0@@`0 F@A̕?֖u`uw``mv@u `uеv͐İ> tNɰb>zVu@ ̝U@vn[ߨ/@@jZV4@F;#0@)wp$wa@z@|ϔQ¶ |Ғ&ޜST@-%3?u#xA׊>)O.QQQf"&خ  iƗܘېvU2NWN{xa` Composite{Աe*wa͐G""͐H'GƙI'V"J'Lxct&`} V"&`C`!}:z1#M z1@W1h!vϐ e@H߿앞@*JR h%I`#qZ$%z^!<@d(#&F>^#t@Pf-F@ %p^jh /TcDcM ]ÿ/$"f,A,',앬%P`Aϯ);9_*Yk}ŚGK]ޜl᤿gе,ݷj;2/˰qnh4F4@@zv9@@8?Fb?zK?PX[˃ Ar7kr}nr,w մTV 44$RR8ppDKT*.I,{"Uab8tAc$ц.k̛̄oYBbbzMe$8ݷ9$$ِ-21a!oALy DɟM!8!D!!D:U!;B!DHB!ܳ\^ -~w?iA? =Zw1T1?}*U93@Ebll8ZE55:R E;B2$HB3EbB> 4oB|B6-4BEBE AFAb TBIp?5:UOK9B782D2-7FA9-4C1E-8DEC-794D39811C00T;R3e9!@7\\?}VeTQdn_PK#хєƒqѱIDR:UT-OJw?^pPܿ_/k%d_mbndR8qUd_\___eQ_ooq4y2T1})EQ_#$]BAdAh1nQ㩼Fo&;?F.#?FgTdbnZo~8eRmAd b~0}ud8o\vvyk a} wVkF8Rt@ҏSeyS uk4E]oΟ>$u'|7z7mQՆ1FAޢSBEuVp7QdEeh դok_تџn3o8{ύPϼzϟ؀h3o7fazx ^TDBA.!./o hd!$/WiNSGUQh!fwEhPtOu¤T;S3 w6c屙419cI O?>P?UG?QiNncu|ogjUogjWofiWx1$"gx P1OCOcAݱcOoOOOOOOOOO_#_5_G_Y_k_}_U_YQ/՟_Z__ oo0oBoofoooooZ$>P|Q`*HN1p!*()<+^?p3+l4Tj8N`rT5W:547ѡ9эJwb۱x&6֙ʟX{ɠ^ՉeT5{casting_operator_t:(ш$p%YD#־O'/2qмMRRQ HN ʯܯ$6ZUAGk5k5xҿ+=Pfs  \ 9K]oGSYAg|Ձ99:|YAux% NJ"/AːuuqӔ l68@Fe)@@L&d2?F ,R@΁mu/`up`#pQR T3, tN* zsL1, i"#r#Q8%A#+/´@@I ?$%P1irv*@t(@)pn!C$7Np@z3!2$?L6>|p2v72p#ᡣ7:??>UрQ u2 F2 F&8iSOA{uqX@eء߳߿ Tgqo@]:?5S:Aɟ@OSTQRptkѤOR/FLQ T_i${Y_w'EChkՁsT!{\kkRhAj{4Anianucojgz{ZzR?Q T. //g ti||Ƃttr,,C΁΁bB0rkr5tq#d$Rh3TQ݅`&{0D9EEDD3-8908-430E-9F04-49CC00329393}ƅsTP-DT!?w,ևLewFdBh|sPD_JC+tbkuz9Skѝi$%_EReoolQR T/'%A Mwv F(xL^pfs ?}>5@F0(@@vn@F@9e[!""u`uJ1%"/4/F/X/j!<r//(PJj@A.Ki*Ο//g |3@F%eZ[_V7?pR5fƬ?e_? DFp2E4ǐ85{Ͼ3???Fm$Cm3OEOWOiO{OOO|_OJVOGF__FC?_QZCb_ _____R4Ϋo-oNoʰ@#|`?U@@μ3@g`YW֕u @ 1C̠BUSP$}oovT`J!o|@04Fmj| 0&{75B8B4AC-E0E3-4A1DVD5-819FBFF38F9B`hzFˏ݄&GKa|Cc=Oas͟ߟ'9Wt1S\Aka?w5K,7daKKp? `:@@4l1@@\.?Fl6f?j#T+UKI8!(OS`րV R$A \eVzcfV J1(gN\Tbb$az0@ ՜187g1`9tb0UXD戇a7"6*"% %!&`/!$Kd(@K"/)I$K;/M*A76A0992-AEEE-443Fl BF-18A355C387#BF~$Х"ꉀ "()aq-#sCŸ %@d!XAXAq1+q?b@aeqIYHq"K$Tn;kN CIKMҠ`hgo7Uj@T5_P6ϡۥ7]/Aϡ%_q*!iq*!@11AqU#TߢFhq?Fs?FB L-S^p*PWͿ7ΚyŅ%d/S1(ֲq_}K?P?b?iqa|??????O?OO5OGOYOkO}OOOOOOOoo_1_j_U_g_y_q______o(oSkкa?ZhjYhPnM#ooooooo@'3EWi{Ui=Ѯ| yHm,wmm DR~}PB~Ȅ)SMҤbxGé-GœJը̎&)EUUkU޹0 @JGWϡix)ϡ-T]ПS 2DVhz桠˯"4FXj|Ŀֿ38Bfπ Y^gy-+=g(Xs20?fIdGhz5uK]0o14#111R~*c&,W #~l/)+/u1class_de0ration_t4)( ٩#M'2q0| _g 3 EWi{ AHe ZEHe(;M_q[D$/__CN/_bHxZ[,_JVG?``UPuac1v?c GUQO]Ҽ]UUU6IsQl7@Fi񢌲2@@|>@F1ikhtpunu-`u搷`P@r u0`uЪuQps  R tNq?`zOp@ R r8ވ73(cj|a//-`%%ci3պ4(DCF(snlY/`k/}////@%_//???*?F/TB*BT]oXVѹſ[ =IV05-eBTfx{PT >aJKܜeB1) 4FXj|ߎߠ߲$#W?A"%_"%*<N`r&8&UU`/d=/g濔*+/4Ǜ]? E1qT(p VB <GPZ 1V!S1U 5V!_ooY.;U@™h(@@}9@@\.؅CLKBIUAZ qFB zBFAB |$VVQSV;VI;QSVYVYQS VwVwQS$ VVQSVVIQSVVQSVVQS$V f aSV+fI+aSVIfIaSVgfgaS~$ VfaSVfIaSVfaSK9(C$ /.eLD@81p;*}q}qGOd'N!頡v γ ps%tz"tztz"tztzN%"tztvs\1ō~|@?i4F7??1qq2Olg@w$S?;*qɡxw"Tf"66`q`q@N"2B>Δq7۔ q623J5a(bt(@)q/'s?b;.$`&{1EE68C86-6541-4F9EFF-A5509350DF64}+?;E+:ْJ\(7@^pn 0Т3)sR쵁t챹11O*lrqI2ĉ0'#i'F돨p@G$ SI(/ԮEjDO \p)seůM5G^pς5q3э/!;) A}q1q摙D/!хCFh?F)KxԈ%޲߱eË@x .Ղ5dϴ&iw"O {C4> FOWX_MS?]Y_XX_XX_c] o=c/mIoyckm0ohhoARK]o#5GY@kg{N%$Ң՗bXՠuD߲EPq,q-y./?nh؁zEOa۩ 1Dp)q5v=1e?? ??=O.OKO]H#1`zzO]OOaOvONqa7TDtÁÁQѱaSEߎ5hGԋ$,CّUu1a1Dz$Ӡ<<9WP?-DT! 04q#@Rd~B&8_l4WAU__51lUŊ 1c&VBkXq2_D_a_m___o__ro__o!o3oEoWoio{oooo@o  /$ѩFXxqc1xˏ&8J\nΟ7"4F$Ѫ]o!k%кa?'7&PnM#L^pjïկ  /AC7m{ F^!AGι,߷Dֵ5 1ϼ(KJPۤjvv97#øy405<HSɆiCEuχϙ_!?3" U08ULU߫VECErE$ni|nH!!Zߝ߽ 1#5GYkﺸ5Ƶ%7I[mQ?/3M?Wi?&U F^( !(߷̆$1_?36EG)Ƶ/*'$5_P_b_s///__/l"_K&ou)E?VwlY?P???GW{ְN@&f̀rar9exo@.`@u]7\x?㿏D\Y ,OYq#5F?FmU@@pW񴀿ݖC,}@ 1C̠? U/Wwm:q<q 'q empg}f)`BYN!<^p)`pq V/͙$%gwT1 1 .哕T qq@@@ P8w@@Q*d2@PR*EISO!akVjRA zOYU i)ebQVl{|@Ԏ8} 9FCUZaYR䳤jD R䴤j@ơjDR䶤j%R䷤jDR乤jRZ\GAz~?i4oF?_GAaaaaq4qnqQqAM p<.b"!2|l> 7"6"% &!Jx$Td (@6")4$%&/8*384782B9-A8C4-4C0A-B564-80FE8B212BB6i$?l"(u'^C˟{IdyQXXqn4qHb IanqIbQq"%$I!hȔGEb 6!xsih(poM"Uj+T _A$`:ءfN"]&8JءhzE!rq ! į E1JqBUôFhq?Fs?&yUB*SgyfNOU`Ϳ@ĺΣŽdS&1zYk_%Nuu7|Nrl~A_uN\.$6KՇ5+Tzl[ ܲ9ߎfŕAXfxn0Io[jl)˩H `{5" .@h]om(sc"`Bu\xa-6H+rqah1rqSDyQFBdI>?Op5a$w %et50?'X$U%pHA qj& o;h(Ssq/$?%/7/I/[/m/////////?'O9OE?W??{?? ?rqa????OO;_oPo\_n_____챵__Q_ oo/oRSoeo\k9cT騗hhjcoooo:LdpUF| M"Q>,Fс,f-TPY3fPqbjYفS S cf $ӒUШUşƮ8mF1S1ʄ޶i#RB޷jR --9K]oɯۯ"݅.@M_q˿ݿ7p[uKϽ$ߖ*ߤj\hz(O@som,?dh*Cm14`111" ,Bgc,"E#/@X)+ S// E pointer_t1R %@(# '/2q0  R\Y p $UAheEeBT;x/0/=Da/_C/_HZk,_'$9z?0!u:ui5(\$@c' qfvr%t D?Qc*ue`8c7ױױ{  1 u".ľ6ʨ.Ŀ6ʙ%".6ʒ.6Ru".6ʫ.6 %".62C\c3~?i4F ?*5Ro gԄ1P1Tבԫzqzq"11בבRr䫂2 "=1d=1J>(.75&a6B3O@=Bx(@yᨕRu1 t⋄`&{A5DBE527-7732-48C2-A01A-78089735CD4D}y %?JĔ3@F1y]۴q0ڲ۱IB~=Af0ҖIN+?[pRqP2ODJRuͪx/%=jѮjv %j qMf4MV''ױa.a?F]h:?FCYuE -?F/3 g.5-/%d=ʣV&<$2*?RuDbn=& -~0/?\.??%$/N=/ -J/?L/%W>u??y>OOnۿJxaUD]Q__0____~o+h aHo+owoaoon5C6`U\URׁԝӇ`Qm%JDPbt}πUD`PAIXattߋ>`QE144a? 15R2aTsp8>@F `8@@3F`z!+3kPdu{`u@`At^u f@m8par)Sc tNf`Pz@c ʼ.Ե <ҿAf п@q?@I? ?O Qx `P}> n69@@9 BP :Ni8@)_pa0w;@@z3tq1wX`Qqp \1t?#h0TCH3&~'tR20[6/\S8e!$;^QT{Pe]T`Q`ae'sȔFAG`P`A(."Xt=?3XU1`QO 4U1pd?]T/A"A? E O!E!!,SEhUUeU""-IURTڿCE-Le^6qqTъaeՂE{H0JF`!^HCЃQ;冏U;F_YgjocA1*}5T|RbToojdҝ$%Rd"d"cc^^bb4b5dOaLHa#T1R`&{3A5321FA-EF07-4762-BF7A-79D6DF21B935}a%UqcT?HCa%@t"f76b3äqqqqxHI23Xx0( @0 B%104 D`&{4647B02D-5DCB-4892-81A4-E6171D2E95D1}h?8 e*Fcѿ %O!gaga:NOtIhWCbB%KC xmzp@f$B!?:9 Y3X/]jjsE~ *^j,>P%nߒqe$A)ςhK4aAN!3sFh?FtYFEEUEnU_|fF%Ad߆uV7K"h{sIB%U^i%UxrGhU?\.*<nԱe ?˵Gp^8Jn6 Oae/3X!q%%//)h//A/X^/p/X/(H//b/a/m?.[pA[wd3ɑiHmeYq$WpAA uTӠ'|,dž.9||HŅ!SjΌPQ8 e.9"%ɯۮ%58.9HdU zU٘ % Vfi̱c:Ϳ߿b /ASewωϛϭT1CUgyߋߝߓ B-GQuHh5!>@<.:L(g.<ȓAf?u% Zlf~Q42QQQa19r5Lf,C{O*IK%O*!array_tQj)5ٔ8#\>0'2qP@0.%)+/ B. T/f/x//////*A7CW]eW?&? J?\?n?????O^d3Obc]Oehz{L / vG\`!đTq<֕_]TqZl~W~9oU@~?@@@ P8@@ .` ?cN5ob Ta Uebf`#kE07Proe'C87 &xx"bw@1Hq砠v?LeϤתuϤתkEϤתϤתϤתLuϤת5Ϥצcs\~?i4oF?ˏ֡-JggtQQiQ*rTxaLFFr[[kBQQxxLr2$2>ϡ37$6į3Ež21 bh]7(@Cѭu&A:Q]ڄ6,t`&{93DC2B53-C6AC-4529-AF2B-7C3AA949A818}c5&?6&ـ5EW#FҵCѯCM|J/g{|I䄱BT~/)tGLƕ%y"p@&tojh/o%j%r WC u.1CkEYk} q4S!2!-qiS!<71x!ϡ?-qr`Fh۱?FyFsehe u% skE );Ad#vd rּv2 Lut5\.W/i/ K,lH./(/t.e?w?n@c|J\ h2Q?$4E=!Au-O?Ox\OnOxOOOHL!ALuOO_a,_G_*^֡qcHq׍E5> tw?qL:t<~yhgP-DT! ~@L/u;M~x1& !ug 3ro%kElUUvifrwgh_____o#$o6oHoZolo~oooooooo&8DVzx:;M_qˏݏ%=O[mϟ @.QRdk#59cTØjcͯ߯9KcoUy ^L1!ϰG=ɩ,+ uE +ח,P~ۤ#9#e„i#+ ER@!*be+ @!@%? UU 7lE0 E0 儓0i"Qi 1QZ ,1,8J\n!-?5L^p6oZt?~J??OU )!^i[g(y1!(N,nl+?6U/)/)B5Ň/'lū///4q4_q)qq?!7 1+?QA?7f?9bl?!\Dc=o?Wik 5Ro.J5Aconst_tBqPQIe? h#^P'2q"p``[EXO! oN OOOOOPOOO#ZAdcA_S_:/w______//?o/o>@Fn69@@uX, @@FT*Jߥ7@9Tšzr)̲pCjCNQ@z3IZp.6wv߈{!%q_U__L&ؘe3 yʄۈewx_q͔I͖ɡ*0-7š?&š|,2*O3p$v|/ ?o%N`Ѐ?֟+TRTڿ>m\ ={qrvd!BSfvvZ)@Տfp#`…!c@`^'gTCA~fCA͕2Tqq*0v b::"y99 b]!]!"'"52$RQAATY`&{CCFDCF19-6CE7-4C8E-9F47-FF941C7E9?003}O!(TP-DT!?O!$d'$FBr*Q*Qv%k(RQ2"%>$7Ȕ="6ՔJ"(%75%A&HO!,$yt @k"O)i$-U[/m*2429805E-AF66-452E-BB5D-EB11C0B0890D$O",':*="(ą'CntxAxA<A0YmrnqIv2U4JGFEJBiTCQU@HxuxMWU `TU_IpD NW]"4kK]oϟϱϵzJ!SIJ!.Sz161oUęF`0 ?Fփ?Fb83zMS@ߞDDVݿ߀ek-d OS_VokU|Sǚ\_S]_*cm֏RooU.R8J\n"igɏ-\.-5`TݡD\#^_xꥆf nUnzE8>s!g[?>?`???aL@q2D-BITMs%o%E$0rEo!2>q0_\Xqp!q-?Q~/&ulp$vGUOOs%U^UJ SqF/[HO%OTBONO`OrO_OOOOOO__&_8_J_\_n__oo__o__ o*oPpGp|ßď֏aS[:XL>@Fr\.9@bT bmSwsmJ)rp1#w@z3ءbſqpϴի!tzr(ۈ&^@pbYtjxeh_otpvXppeTp?5ӿTQёйqOQApd Nxm/?wAf!rQp8wuـSS KuA(_p>2ePv E?茶(@BvDqrU@@'vDBsaD敬DFWM4@!Q!`cTqߒm~ewo#4 >|xqQuQu@Ug1u?ϟ>Q3?@F `8@@f?F`4F+qDyEJ\nҧǨӯ娠lh4?Aƺ &?$6ZnR6%~f@:Ni8jִQᵾVρ_^m1wlf/g(Tb_Oo@Rd*ffg2ãϭc  /ARdמ1r߄}1qڛqb+g@2,X翁4z3@TRTu ]tC56T{E// r@r`a}L`;T@`7f .@Rdv&{0C2604A9-530BD5-B9^6FB791C7477E-DT!(+C</&q#/5$'tʽeF^L/^+qp/019////??%?7? I?[?m??:GpAt,#T(?Zp~¬U@# @@:@@bX @Fc??%ۇ!$*bb5Eyx &q02|GrAu A_zChbn̴h~CbbMzp@Qu8)D4̍}dCUvtDtVCDkttD*ut(Et\\)UѼ~~?i|B?Uѓ$^AOq[H4~Grrk*r2lڥz>276#2 (ʴDD(4F90DE215F-AF78-42AD-86AF-C31A7CE1E7B9w(E+z)@5/xq "&lӻ/qk9 11 $89^IR4A߲є"N֦Zs7p4Ş̍SU@0 9.N150?񅢍ށ+{HZwށ2 L՟a韔@bbaԇTrLϐ߼~sIŵY5&tPbtUbC61a r g aq41ae55=@IZ}0ѲE @|4G*|6P;+wXF>"!zT(zPzUr&?zRCehG>C2q@?OF,?\.?tqA&7!",? >;L/3d/U&/4Z6J[)`^5RSCe 9^[e9_,i2@Ou- AHq#>CG'D=B*bB7dOGpLo^`&ޘ,+apply_qualifiers(in f : typeh_t, `aet)`string +__eq__aothoaaoboolqne*tlt3E*pju05EIHdGD!3rO,?Du?!`k˄HHց5!q, r //85E ,"7!H?^?p:N8-O-Җ8`¨?????OO&O8OJO\OOOO__&__J__n_ЯZ_Z__2BT$o6e[nqi/lhas_static&vmutablar!򌏌q&!ʏ܏{d("7[+!1"7Fl6f7Ĺy[ޑ) 2wy4's[yyrV7 1[w&ɯY%k? 5,aknRL5s8$/M DVhzόϞϰϬ?DW`ǟ:L^p߂ߔEWiLUp UD#\M_WdU/[ ke`a!%ak5Z$"7C3r3U@?&d2ǿ<]7P-DT! e`>aeeTaNh&>@E= @>E=F'-?H;RfU|U8^O[9G!e`,,C$/CeaCa8Q3ai)+y09s>'?9@FU9@@D*Bi>%F`9ߨ?TUyuvC`u,` @Ru`u䴀Ubh?AAv XM?@PeBmgz09 e`RG0L?@Fp8g~PU4@Fwq:@&ArrbB|hxfrbg)pݏ~!yg;@z3Ѳb1ooRpK wo ~[!0P㨑2 tNPazgP@2 r4qsDޑOrbA(22bCSvbCR wbCR(4m'@NF؃02N贁N{sF,` Compo?site{~@@eKA0D=f3D[΃LσAN䋃OA5RoTCQ5",RoBCQW-_1[RQWAOWOR`~OX.?[Ǧ}*?tj! C ;@ 1C_̠?UVpdUq /OOҸ'2?NtΧsF$uqa㳏UD "prMp@CΏZ/cq?AcQ9WӿF([?Fg$AUD>?(?F{O1%Aw? C?(gqr!K/e.ؑWTr!Zޢ$Ft3R11aBQQPDQp$524|Tuq&`&{746F5AE0-3D96-4672-88BB-BCF5D939A6ED}aTPu ?qcEqn(ɳq*ԢB0Xj @ɴDoZ?zr!{/B(1ADnAIF-$5/ʿY0?rEgI=\q[ECC)Zh+[E`ʓb/ Dq/ܧ(1)@!;&Wi{Ad1BXX:D 3YEvU[@ Rx+/Pҿp2L[p;fqEB10ABL767gpgU4[gccxml sees static awnd ernȑ gєߦZI4z !դ1#d/v//AjU[beuQ@A_I1!9_K_# 8{__;a_U@>r?Fk6f?F9cTN3т< >ea??i<#,MaX#e)OGirRnQh@Xc(Iࠋ M$M'E-7k|OON(&_L?_c_HchsEzkz+MiP䃏uw)12__Q ____oo'o9oKo]ooooooooooo#5GYk}OC]gy[#<>Q +πOasυϗϻATDFE!3EWizԯGpK"NL{~~п5G@14=\1#!"51C@"U@pv0@@eS7@@\.I3251؁62E U0Eʔg'ەѐ7HHe4!8љ%%? #55Ƙ! 쐈C"D J앸D J"D JED J %"DJ5DJ"DF5\!]~?i4F ?/!AAA Q3QPQQmQgԩP:/AɅHTa!JdrrDADABa!a! "d52d$dB>d"7d36d3d.b@11a҅l؎aF`є(@ݑq{ۓ#s %OF`ޔr`&{E786024E-547F-4746-9A34-C978493A9F71}q{?wC {x#/wb w@ЌPr/rsbܔ6aEeDA}!}!3QiPQdB eAQI~mQX %eH̏vdIwCpbp. !BEUl/\5jł[>Yݔ\=+BTfEqɉ%פ!۱!a(I3FhQ ?FS/\kQ5kΓO0|Я\񮿭EdǟîMYҥ?_ %a0.Ǧ5k҆kbX@RϞ%ǯu4Uu1]tN`A1#(5_71']` #?qa8w@a7 Q6]3`LLS4ԅQ1S (t( @4q52s4ӡe?BDt`&{3C82B2E9-E108-47C5-AAB0-8CF4E0476CF0}@?8יـ؂@%q,yӇUCA*xBBK!)*OIC2Bho@;+L;|ptaYqBJQW1/ل^]T4t55>+I[mq=]AoDqY]YUs@!2@aљq܁Fh ?F%0{$U0O3HZ50A!cdV&2yjs"y/$eF@V-]u0K/P]/c@0??cIsE\</c.//"9>O%On@*< 1g4qEMA[OO __ި9_K_hh_zXSAu_z_=_a_H_^6 [6RxEcqυEEd "["6LR4<߆R4wP-DT! ߁"ݡ4~bX&ou@grokEU̐0UR6Ly4áOoao@~oooooo,>Pbtԏ=(:L6fx&ŏ1CUgyӟ T?Qc}uѬ@ʯܯ=-k5кa?DTCPnM#i{ÿ/ASeUS'! z1^Wɫ!,a i!%#E !.qhgP,VY]#}DEB i`Uߤ߶! i!%OC? U UUir s `U %AiDط1@>j=A .@RdvEű 0BTfxn"O,?PjOtOCeQz /P/WQ1(B' l |/?PF̴Uʸ//d95?G7Y?k?}?'ԋ4 烁I?71?@JL5RQ1 ^ /_A_$/e_w____ZUAc2b2_o/%o7oIo[omoo???oo?cg8jbO|OOOOTG1AY㝱ŔqϏۍY5/G/Y/\>U@Vj@@ E[L7@@G&d2XHf_+‡)15Ο|͑ U`"+ 40PM? e.$ 89+}}'gaQ!DӚFu8ڔuQںe\Ý~?i4F7?пр2Olg@zŁVnŁɡzT}fQҳQQ``FrŁŁ8H}}rQ2b>763Jbaab4(@1+ 3?ukbߴ;1`&{ABDE7538-2510-4D96-BFD8-30FA419CA36B}1e+ ?;+ :J\(F33R8Ձ8љO B AlҁѦItu S9AO?"/BEpNqPXYa/L%ExjUw4!%Fx5/G,Fu^/p//!8ՠ///qd.Q Q2n.QAga}AD82AwÙFh?FɩK$x4>m?=Ň5eƘ=?x4Fu N=.O58d/SʦiF9zBO{1u5&76=Q5$#@ OOy3e5[d_v_?$?=PO\qO5M^_-_y3p^jo|onh8 ߓO?a;D)9um&q2D֨as ȿxQ&qQa1L/ᩴ"Qܽ%u}C9yD7!?E}ʤӠ<mP?-DT!  4ы@R&:).& 8*%qUUʦnwlѦՏ();M_q˟ݟ+=I[ϯ} ?@Rdvп*BT`rϫϖϨϺ$1 !ߠ3VWiߔMk(e9?cTثjc#/>PhtU"3~q Qa&wB,09z%q01P i7j4p5 In09u WEQ/1gj09EQEUSUpU9<3qJ?5:u#?5:?B&i',V?'naV1a1=Oas(&!2/D*/)Q/c/u////////???;?t?_?yo?Oo?o??OOA5Ln`OlO(wBa(S\smO0?f#"_._YG+_Wq___X4dYo&ga0oFogkoigo&Imo\ݛeW3z5Fint_trEVyD)#'2qaBqV? 'FL !5A).Oa t~ {O(A"婰"FX?_|ď֏__ o4Aoeϵ߸o@+= G*@ HqnA)OOOΌU@ƛl; @@8@@G%7sĀQ5PRE &/UPUR0qbT8#iP_EWeX*@8ciYyu o'!5A""* "#* "$* e"%* E"&* "(* "'*U\c~?i4F7?)Fcg@WߌWTAAҮbHѷB2$$>>$"7)$VA66$3C$`aiT(@uQm!y+sS#E-"`&{059C14B3-39EC-46E8-82AE-A69EE4EFB65E}1m!y+?'>y)Ĉ('"/(4"v'F%uSm!Q?uSeaѝabQI4¢EϤPVVxF ?3GpyķAPUgyɪ/ %EjuT^AjEFOJOOO^AeO__q넅qdqfɅq5JO+Hq"4!XF]h.?F7DT^_mU]:oT[n)m|oeǥd1_dfiWr QqU8V1fmUrC`oSU\.eoBT1om>o3oeK5~i{Sm5~ʏnX>_[ w8tՀ$دKޟr t`<ka})p7*TPF }YǒW`Tae>XԠ<1ɐP-DT! 1TŎcΝ&Z>Y8^tWfxTUqUּ@ǺF#/ASvwѿ+=Oayߋߗϩπc :FXjߍߠ 0BTfxrQY"4!Q]omkv9cTjc 2DVhqO@ UpS1Fq= ht1,(G13I15%TFq~'R$ N HP+(1s8g"8!B; dTe"hs)H"+!7/I/[.%q}Q$!)quP3/UFp/UG?mYNSe_Z@q_Z5_2ViuL1>o0Wh\1&M?_?1???????? OO-O3XtA/%OJJAVOhIOOOOOO __/_A_S_e_o___Ǐ__o+okOoao'ql!oowq(,H!~/?qpoj| Kw"g04'(ѽ)00bt^~ᡔB 6򉵼t /+^char_tVu(d4gI`#ܮk'/2qм iqBx `lݹLț_E&ȃa(|o q ž ԟo .@RvAb*ppʯܯ$5GYl䳿)ݿS497UgyG<)DA#:Vqlx"oooU@vn!@@eS7@@\.y2⋯q/%q5k!:c^]j tOU6Gr뵰t iCp*a(e<8Ƿy!!<@&u1*Ѓac#7"q$+y*Oq$,y*"q$-y*q$.y*u"q$/y*q$1y*_"q$0y&@#\:b=~?i4F ?m:x!!! !! 1C1&1gsbPbE!>(sTD-q-qObbr2QD_d^D>kDq!7xD&a6DQ3D2@@@?@Ҵ%؏0t(@qAGsCu0|B`&{2005EADA-17FB-4D44-B3FC-FEC071AE625B}A_K?GIHvBOHBG@ЌPrWmRCQ_s1$66!aq 1" !C1I7d&1uܹDWw/pq߶U%/jjH taOeolo a=Oaq9ӑӑUoy<!q!AxEFh}1 ?F3fd7$ =OO$s5뵪xˏWd}gOYs^gmO$c?QW_$bX W=%gtO폂WUꞀʟU-n/0*{%ֵñOϿs-?Ͻ\nñn18a<&*1x!*1F:W ?y !XywA*g< a; P-DT! a(ŝL&ߒt~ۣU$Ug I (3!CU]!r~ߢ߃ 2DVhz1. @*1!Zl!%7I[mH3@EWq1qiA//1kťкa?8(HC7(PnM#]/o/////o//O?#?5?G?Y?UGOsaT< W??R9Ka,wgUQKaKeUT"OG9&DT\n[hP [JX.QqXQ@P__B H.ɗBzATņOONEqTQ╟$#c3_UTI_U]gf_ygnsEzTz%e5vil4Bw H02/__Q1____o"o4oFoXojo|oxa~EojaEoio$6HZl~b D^hzD70@TҌW@ Q R9\(7̗3OApO?D$ɿ%(˟XkE);EM_q4Wwʹçͯ0㯑\VA5\J~z뭥кunsigned_char_t@`w4ɶi#+޺'2qYZ\B^o0PKSO?ҁ1ˏ\  #5Yk}ϨϡA% W%ܟ+=Oas߄ޯX\,_VȿڿIGb02@屓14N S!5Tz%N);MQ3U@"@@Jx8@@J&d2Z3 2~E5162E oU0U)cAHe!4RP8  1rArA?\ FFQ9@3`ҁCD4JeD5J:D6J\D7JTD8JFD:JD9FC\ !]~?i4F7?/!AA Q'QDQaQQ~Qg@K/c*AɖHTr![dFBbUAUA:\Hr!r!TdF2dd">dA7d6d"3d?b11aҏa}aW`(@q5 {4sT`W`$0r&`&{437EF5CB-518C-4D4A-AE66-977ACDA46B84}1q {?0w% y/xb?QxbwFUq#Ga\vD\!!DQaQuBvAQI~QiTv􋷚1E*r?xEpCTP LV}/%Gm5jl>@5Hm=*<:Sew\q" 'c)"6׋rAAa9'Z3FhQ?FS@m|b$5|I[5m@:Э#nd؟ÿ^xR?5ſp5|ߖ,.ئF|@n|YkϕEد%EfuB"n_qn@]vOJ%DV} 9@A.5'9Vh8FCFXa&FA$QA1Q$Q)F_-%Q1$d8n914?r8PtQ QrA/4?5/G/Y/k/}//////// ??7OIOU?g?????a??a?O@O(OK_LO^Ok9cTHcHjcOOOOO_3_E_]oi_{____Uos\ Foo7i,χq%ou zo%wF&t鴎Px{xc٩#x_q`bchc%baoo~Lu:$\t_q%::  UU1fe?**}ٖiKdחchK`8&&2DVhzԏژe'9UFXj|ğ֟ 0iTnxDү9P*cqUPa7i(Hg Shofaȿ%?T}H#ϰݢQ L(Uw?char_tҸKd9#'2EqB6,zf7FNw%ޥF*:# i {pA U%U;M4q)673$Z?#?(:7K ?( 26G`pDP=QT1csAU/ -E1>/U@ W)@@d2L7@@PS1&H3ue5?G2Ga~g,a1 U%G2&JfeW/YA^fq7 K6-B3:QQW"8^( @jd5ph0$Tv4`&{C53FF525-DF1E-4009-A19D-0994B3E25C8A}dp?85Up+mFjdCHj×dAAqVqbaqIߤq6nn`H4;uXp@p4L/^*98/Mj^ `jU5aN{ǿU qzY]w19zᆥA a=q+w1ѪSFh%?F.I%β%5OͿ1߽ĒR sžAd($FbohU/|N(͖5i߾\.eK(5U*B`rdn@oj5UϦ˩8Y`na~/ k5wHBHeXck53xbavftq q1qDg#AI1.!]KG=Uhqatɾ71K_XGȦD<ȡ9'P-DT! ȡ@Kya5ooZ>81&5/k5N' }2]/o+K?UhP?UF&?7(s=qq/&/8/J/m?n/////////?"?4?F?X?pOO??????qZqOOa1O=OOOaO_OOOOOOO__'_9_K_]_o_oo______iPo+oHoTo@foxoookm9cThhjc);M_hUgá4 D_k,*󥿕K ʏufvPț// #2K@/?".@RtGE۟ UUdözhzͥ)il5'SJDVvvʯܯ$*k&wAM_̿޿&8J\ ߀ϹϤϾϔ"bFXKzDP)( ?u?ztgxxas綅^'A4A'A'AYkUu9,k# /&)";U/x bshort_int_tMA+^%W(#b '/2q00` B.] iN(_RzLs  D %7ImAY#*yuEyu //,>Pc/y/SD/%oS/OoX0jk0<3oL^pVGM;8Q6qMhOtMuQ^OU@ZV&@@eS7@1po&q5g_R6DcZYfQ kU2URCVǕ y`__*Xet87qg3!QPgm7t&6Mr3@<&tKa&BtC6qSyQu}%%uTȤgKa!Lcd<7iWP-DT! џ ́$eُ돮^bHh&!U@GROK% oUp oUcfVEogX?OQOYnOzOOO_OOOO __._@_R_d_v____oo__-oo*o e?w????P???JACu໕%O7O[OmOOOOOO_.tD_ȏsn_xu/ӊ.\֏//// ?\=-KS AGVӠő+q }HZlzU@X,*@@'uT7@@a@NģO?<z5 >{!  E Uu>v0I%`3EWe8Qg%ܱܱA ]W%u3X;3Y;|U3Z;{%3[+u\ʍ^E]Cs\Qc$~?i4F7?/:Wtg@qqT԰|Rqq{"H+r䍂2B O>-7:6G3T BANraĈ %(@1~/+ua>m`&{49481750-749B-4924-A9BA-7078AB68FFAC}1~E?Oę8E@ UU/|b1{%{!"0߲IԒ+u 4SuBa2U~p+qCUzT+yĈ/]$=5 j5֮ 1o{>> |U@o{%#qDd1C1Tdnd1[@ WAܱőEᙣnQģFh.??FHuu- ?EK/|Ul.:-/%edBCd&) )2 /?+uI@sB&-??%E\.??%)/SB/-O/DL/%\>z??~>OOnOĈPaUI]Q____9_o(xo0hQ`Mo0o|oaoon:^sH;eUaUWԢ`eQr%O<ډwP-DT! ePDžQ&OI'lbThwUs*eUUWvҋxW4@Rd*D@ [gy  .@Rdv$/OO/ _*/1>1 rR==2$g2tpr™>7! 6t3 ccjPrQqҒWj"64(@1 35+"`&{49896CBA-AE8A-4ADC-82FF-A43FA2A69C13}pu ? @ F3t3UAQYYBr1,@ AfIZ$I45Ay:M9Mp1ǟٚi!UW/SM8j{e7k4!%N8/ɗ؟u1UGU.l7,Kfxᕟş 1CUgyӯ T?Q cM}=ᬿʿܿ$6HZl~ϐϢϴ 2kV@hz1ߦ)T]ke9cT[kmjc/(4FXj|Uj3>!w zqu n!,'x)n!n%:uwE\T.~(PCmQcytG*PDpE.Qc/wa1'*/ae$SVUwlU'9.31 O:w?:H%XO6i,OB7.aUeTq/!/3/E/W/i/{///8!/:!/)?#?5?G?Y?k?}??????O?4OO9COgOOOODOZf wQLz@. _,_ q(/31_?gvH__{i;%Lo^g1poood4$/ogaoSw+dy'X }mez%~ bool_tr@Uٕ9Ҙ#Nݐ'2qs}ېqBQ3:wRCemAgOq 4 FX;_|ďAԓ q_<N`roooޟasr%vOyy뫬 cG h.wQ޿꽔M___q_lMU@bX,@@Zz8@@\.Ot&:@a5n, /U҂b1"d#A)`doe;:8$)i:6v׮`0вSAi Aj D%k ]l Dum wUn D`p ѕoò\$~?i4F?$A^{gԱe/ԱɰarTu$`ZZ"oo]ԱԱrwR`2$ђ$>$7$Q6$34Y"!´q )d(@5a.1>7`3cN3wUzq J2@`&{9C140EF3-2D8F-4C5B-80C5-B5E1A0F7DF70}.1ѕ:;q?J7:9I8"Y?k8"77@ЌPr[2,3O5ca!uq^!rQ{IDwUZ"K%ƥp:ԠwQ(op٪/Jatj܅5dQ+UD_V\]m___Qu___qE$'A/EPE _뗮!ShAdqtwFh?FZTdŖn|ůo@meSzmod]~m=ed _xvi˂kra2{Ffm`Ֆe3Sұeѕeck}eodom_e E\*1ì`2>$RiSgNeLԠf5T>av4y1?iTTC?UƠ?UG?.iNKc%YoDjƥ2oDjEoVi6\e$oW!}(e nO O@A@OLO^OpOOOOOOOOX5Q%A_SZ Q_)Y`_r________oo&ooJoonoo^oПoo,""oqD|}1o{wQ)Α(b'@ #/!???D1+=ʉV[%я(4s7 #5?U6zv̧5XΝkfB#long__int_tue$(SY!#,'_2qм*ΑBe gBD8..\NDqp=Α @˯ݯ7A#UCCUgNӿ-CPtȟY (:LGz6AD|x6q67y6AfU%g" <ťs5+@FZW;9@@ @F˩JN?ٿLqu}0`u6@`mO@ "u,`uep% YO\# *QhxW tN) z+@x h"_q# +%U ?A _ߖ1Ͽ@@[I ?$%!-15 ™h(@FD"HdFh4/@F*.8@x(2'3)pm!qC7ep@z3!=2C?U>2#627=2p$!~7Y??>Ε8V2+F2"2x&HrO34R 9<@e{@߻\{@Dql@ ]7?3S7DQɐ@OrTQs{0Y'd2ٿc͌"lΝAfqtxBDYXWм@ecSAnae%"foiApO^UXm/Iq?u]gWWQ^QU RT- ,,iDyyΒ0R=xx @qqba0fr5q0qh CT:QS%`&{E0F26B63-6DB2-4BF9-9033-4CDFCCCEF03D}ΕTP-DT!?cU` eFdcђen鼠DPBvuWXSf!D_BQbooX|WUAur/pe%(4|%IUcu7+#@F)8@@/FP_ //0/B/T/f/x'/(xϐasA/////2Vj@FD1=?x?a?Dυ<'9,,ր4Lׯ495ml?OOGU[CCROdOvOOOOOUOJ}_W"_4_^_pZ;rDVhzrQU_____0o_b@&%o@R Xmqpyc@uooa }no W@`T !3EWi{BA6C4D8-EA70-4094-8D14-F0CBD099FB3Bݏ0%F@@R8~ B"ƕh6i{፟໡ةğ֟0BTfx~ΧrAܯO$6HZl5SH))@FF$\.?FpH$_D@GRMU汿ÿտ /D:LȰV4q?AF4a?yϋϝ~Ϯ W:P:FrAPّgQղfoo&ӑf5Uw@OrAvTrәv .@RdvrAﲍrAo'o86\n"4֚RYԓFU (PT??i0ߧraMe@ į`r://&/8/J/\/&{420EB75E-47A6-46{ B4EB-337D80234F2C/////F/ 4%\ܰA?ro!n ?2;oD?rAIi?{???x??? OO/OAOSOeJsOG)O[OOOOO_#^dAc%@FIUCPQ FЫˎ#[h_z______W2_h 3 A_1ϱ0oBoTofoGR"@F ,a&8oOE})Yy dde^oߓs)PsP -?Qcp)ᐏi-)&!̏ފ&!%7I[mǟٟ럍;&d23< ?6`bts{3ӯYL6{O)OM_q˿ݿ&{EF6383D5_-FA3A4A80D4-61529CB2D1B7 K]oρϓFqEč |DT{&!Ϝp)F 2DV/OAOߞ߀ * imtDyFBσrgÀk#Fu"Տ /AS_qf\, ˟ݖbX@F^Zem˯?FULFz(G1-IF?HO̯ޯ#F1#F7B F/ASewѹ޿]Q:LʔQ][_ϓϥȹgo%7I[mBbl$@Rqu$5 럿@ l~M08 0BTfx5D7FD123-0DCB-4618-8A56-BE286B6C7523!qDs %1s.,OG[t8WEW Qi( M=DVhzV//$/6/H.,y$@F~h !F0r=)F`0t/////// 6 t?(8=AM>?P?b?t??2ƛl; @FUj8???y?V,IBDvE֋߰BD9O$CV}C}OO __-_ ?_Q_.ou_Z_WV__VS_j@So8oJo\h?qn&oooooooH20+ d} 4ąv{м@`>0$)| z <(:L/pʏ܏$6HB1F0BE9F-6E22-4739-9EA7-819EF9?0DA48Apѐ۟'OBI* S(@VsM_q\n˧?֯ &v `1CWi Qw?_ѿ#!S'@Fd":h'N4F?DwS/ٿFRL^@pςϔϦϸMȨTAT ܕO&8JZV&@F?Ral7l Q,wԋaMvL^p߫ߔ*,vBwSOw Q43 R#5GTf QtM Q я -?Qcuq@T#æTDFOXOz<@c'=e@ U\ /Կ0/B/T/f/x////////002DA6983-D7F1054-BC95-79DA29340AC1/?A?S?e?w?FV?4iMPxѢPbte˯mOA ̣1C?mi[ma@ ]D_Ŀ_ 0BTfxϊϜϮ&{7C1322FC-909D-489A-A81F-58D97F8EF .F TI[԰jY`@mMr߄1]OO'9K]o{ﭏ -?Qcu C)@Ft*> i8@@T?FBrg{N?FY&8VCU.?A k}X,Ō^Zem 7pk{> 3EI{#z/%/7/I/[/m////)/'{//{x?0:xA??e?w????????OO+O=OOOaOpPO$6XOOL&Gu$V_%_@`P_t________oo(o:oLo^opf8B5D173D-003C-460E-AC53-45493B305DF4opooooFtɨhL\%%);{xM{r&8J\Aktake_parenting: `transfers all nested declarations from inst to self I think I should move0qpuncq&q`serUpckagejPLDHI7D!3rA@iak!mHcm_>+}@F g;<1@&p$^B'@7ݯgy";?"o+0!T>-- ?PAq830ԞEg tNȡzs8jB :2!CÂco(zsNvzޏ);ſxneHs%ũ8t}DamީAs!1DtMOU YPFjn9e83EEV%dO'v ,8[la s"1`r es 畑////faÍm%@@n@@ϖ]$@?(\21D3#as!A=̣?t )3=GQ[eأuv2r7@_2tQ* {T`]4t5 -f#<38R( s%JH>AJDxUOjDb!yCeGĀ==ـOAz@F&?P `ei#cw$*e"w$*ew$*"w$*w$*E"w$*s(&^e\k~?i4ߍF?D~!!!!!1I1,1a =1 a DcbjAjAb11a aB2WD:2 dD>qD""6DtB2I X6T@)Ae`KfCHT衱Fǔ`&{311FD2A9-214A-4439-9FED-A2435B367795}A5OE:5K?GIHd_E)IA_q$$ !qbα1FGI1rq,1T;nZI}CoX㑗S3½BD([%K/o taEe |3EWau$q1L=5oQt_1oԼ@wq?F3?('_q&=>זL)@ `vXXH}‚5>cQM_q2𚯬:5>7bUbDoVovavoooooo.uu&5wOKx xfaw3EWi{4pw(ͦTfxҏ䏝G8 ᄣp0<\p,jpph4F4@@x\;@@P&d2?F@ ?~?]P>ɇqTڍ` F e B$à5pWI 'sA#eFai{En/.WA8*2D8*2ꇕ*2DA*2p*2D*2*2(5\ӷ~?io7?1Nkg >l{*غTaa8Ѷч}}2$  >$71 6>3dK5X4e @u8 }0s?05`&{2924F8C6-5E41-4C64-A269-B7CDB21A1488}u ? Ł /<~@? UU&s[ѨԖᳱr2q3IB:ȇT2<C{RUpnp/JfMĐ6e"8r%N͋/,///f!/??ᄡl }<8éF`0 ;?F??F7$4>ø?N85O=BO4cN1MOE5@<AGFMdMV]ds GcR i_15z#O _E5\.__E,U(L8OJcS3}Sfo1 ,UL@gO_W{UoSS^=_O_cu^(:n8 ť?;Wu}q81N`:}q嬏ۏa 18ôӲԹ?uuu"YiEddP-DT! ա7uߨߺŝ&:F9@>ltǗUҟV% Ux)Wf,1*x3Ndvᓟß /ASewѯR=Oak{Ѫȿڿ"4FXj|ώϠϲ0iTfxz1ߡјa߀'Me9cTYikjc~y/&2DVhzUhx3q xqs q,wv-u4u? Z}.|(PA,(#-ɂr#yF G!X( tɀurq1%(-qF)R pjU~'9.3/O:u?:$UVOi (tO7,apSRq //1/C/U/g/Cfl?6FTƵUX/////??)6->?P?b?t?????9d?Gsv?3I |'O\HOzo{uO~EɁ9ZTuih#[o'2qB#vp`uI%K+declaration : PK_tBO#1x@,_*_<_a#1(WW-1 _ h4FѵXl%6QXA___o!jE6oxa/o-4"q-oWao$]H>]}}puUkJElong_intnȿ#1BOhYZPdžu'NO_iZA /BTf x.AAU'9K]n߀ߒߥv%OC9@qJKmccGy`(P {/{QuS$|a/S'1ST#%y`8' QQpRa5u9sz<c3@Fk^没7@@-2ɿFIVNdVe a<%Qu `u{P`.@bu. `u gbH.N0`(SP932 tN`-z5`@2 bAc%X 0|C`x\;@@ST*JC`HsF4@"wQ "E#30zGzY%Ro@WQeEi?A\e/ /2(d@!L(FEh/z/////// / ??ەgX1C@SiG;@U4@VhK4 Qy?????9.V/E-O?OQOcOuOOOOOOO&?o=J?\?V_??__o!o3oqCM&woooooooo+O*_!_3_E_W_i_{^{ϱ]| {qpͷ/(%mgT\[DwŃ {@Qu_Æ̸.MlyLb< CzpU1UP,ZUϰp+"{.gٳuҺ Һ.5†iĬxA }Οڟt]o UuASFl6f'?ƈɐՆDϯS{ u0B/ɠr,/ᴿbٿϔܷ-OKP{long_double_tv19Tćᩔ؄'#2W%ű  -?PQcuޘAƒՙׯ 2DUgyﯿ:% W/ '8*+Y@;/uχϙϫ†G"{A]|<3+p%pq3A\k}uu s/@|Mi*+@F)8@@hs @FPD?DDuv`u@` @DBuf`uĐSE!GG@{ tNL@z0@J B"Cx*%U ?AM_1SϿSoD:C" h(@FD"Hd9@@|^-@FD8/@)xpA%{]WĐ@z3WR]_o^>1R=2XʯVRWWRp$AWs__nSrR3efR2R2"&Hho5e „†G{]q>1=q2k?msq?>1";qשּׁOt;qp{o)(/$?:!1#/(/bPO/@&?d2ٿ lDՌ-E!q񬡬1[9~| h6HaUA O?̇E5Lb,%n@,%*?ƠWȿ3^g?X5Ŝ=L^)YU@BP($@@=WJ7@@GׂI@Hjׂ '\$Rzf 7)h ,"KrADA^1e58_1<53(U&2736@âS2ȡX,%&(@ȩ⤘{ԯ68107A06-2370-49F1-B212-561B5A5260#FB55Ē5EL5âZ/-quq:1:1PŕI${ՌUߗhFA#5$q2{0ƒ7pԵyU@E j.h1t5Fݍ?C*91E5%n@x`?p9gxa?PaB)KTAf– D*5R:DxGD:AA2pB25{DA~2r"ØmTE`&{62BA6A30-9059-4F97-8EF3-3E26F495F894}A5U@P-DT!y?T#1DAx'CTT#A5 TFX3T#^5j {N ?mTf5oƑa裆ѣ:ĭB??\,'UA7%6" 2WnpGrߙao%)>&@Fۖ'#8@@pkJSF`m1tet|u@`u`䢡33 A _1UoBT( tBP($@F#s a>C_^'K>baoagsM BTbta aʡʡ//B)(?>.P/^",cȵ>C//BP;5/(t U@htd̂pt/oo2?65@s{3ˠ?o?>ʟR6"6.@R@dv˯ݧMA'9AJHOnȿڿ"4|FX*JRkcXl:fϵUjȝf_.ߴl!$@dor߄Lߺ&8J\n&{0EA1ADB1-437C-480F-BB71A819?8F7B75Fd :rKFs2v `aZ QgeWR__YU@o$D@@@7@@`0g?Fl6f?Дؕ0 @ q?$2ն6-,L AeL-B_E`sdrNh2PYbbѡzn@@7Ea8gPi]$wbnOÛF4U"zDHezDHh&"HzDH"zDHEzDHzD҂Ol0\c N~?i4F?< Gdر5qAqAZ$qd}usq-B!!buBuduruB2 ru`rI>:7Gr6T uuqBXU(@sq҆u53F0C-BC95-4C32-80C4-3DEE1AAE003D]{`uĦߩrCŞ ndAddRQرIł҄H;CyVQxaqCRc$7_t!]j!tT|e^䝡E|d 0ta dY h(@azA{qoUДߙFhL?FU?F!}oړ ee_ҕXEyG&ddOܓR-6"_*ۥ ;vola?tile_t"{a9U7H#uN'2Džq`Pl?TQtMŜRD?l [> m????????JUA#ՕuՕ-O?O-cOuOOOOO__/ÝtL_Əsv_x}/ъ,\ԏ///??G@*V>@Fn69@@o١ T*J7@ib9)ptaV3Y'@z3~SYkςpcQƘϽDla )8” ^&؄UhtxFВefhNo`o@0֛?u']-?)-Eq Oh`\r gy p/@TRgTڿ]ZУp-7ץq^ܛql@?f\IF`uh*F@`pPߦx/[~?|| gDÑJ ÑT᭕CbT#aarf Rߑߑl&R3KKBw\5gBAl1T0Ik`&{880BEAF5-AC79-4855-949D-432E8D393?700}:TP-DT!?UTFӑߔp|jZÝK1R19s:}hu5uyN x !})4?籵|quuk/׀/9s1/?//// ?8~2?D?V?h?z??Ĝ A_?Yk}c,@Fd":hˡW;@F?DwޠR ԠR&8J\d`yx|J~@AM_1kOʿܿh(@FD"Hdv0@F?RalLavρ~AT|TvBtwSaaŕv ov}S r% I[m@ߣߵ A*#ATf1N:L^p2x= 'Od2 YTzNTo6O*O `Gxd@&}5E);M_qBE7B2127-428EBD18-73DBA3FBE4DE8 &E/TF@,6/H$p!8FV7*_/;?+AY???OFOXOjO|OOOOOJON6S__)_zT8Qyр}UUJQ_U@ `p3@F,5ǠX,?F|jߪ!n5py@___ka;we`?A?.>@#`eoaeEh42@F9U1@@h4F4@F|Q9` nsxyidWfW=Ori]t"tK-x aA#o5oGbPn%`PcyTf}Sx"1CUgyjXt2NǁN{q05;m` Composite{;^@sx͏U!;ل :.S :fSzPLӚ? |# 0 1&1C1`1=d4 140&1lmC1D`1ْ/*cN`+=@D*JR@ !YtLFl|ѣ$h\NAO =@ 5G4S plGTY@a@JDq_]E0EQ_Za'/*KMUAucQAuJ6X?koϘXaEbnb?AvenlAb ?A8F@olŤNL,?A d2~ϘﱠyýԳ1!޿bbt4}A}A,N9[t VCqEƋrS1"`bl~ϐ39001A62-956D-414E-A9F5-595F861C993FD,8.:%@ze%++xc=[ kS$UN %T˓@f+3THZ 1lߣߵ!oP/Ao`mevd#GYGE@Yt2%Q5B$V$P${~^&1qYt8யү䯱k@!+G(:L^p%1B&B[OUu@qOOմC1EWπ7I([m+ted'@9߸b3`1Կ!;M_q{e3u ?4$$<%E%;(V P9 E PcQ5qH.S7~Sbb#1]zM0@GS2?F?X6\.?#5dpA&BHm@a6!L^pO3%M KMG.CMYK@e?2fi1pt5)8#'"'2U Ri2Ʌt01+make_flatten : [ element_t ](in s?coped_KTFPalgorithm) +find_declarationVQ|Qs[0..*]FP|X_t, WPtypeަRnameFPstringRpareS_recurs{ivQboolR/fullZ)]uTall{Ys___`_Ao__` +wipath/etmtQP1_\aodjtOO88d'i4Lo!3jr󿜁l2rv$iu?O`k8X86%s"s eG71,A7175 //1/U'/HX'25/*!&/?">// .?????rA?OO$O6OO:gO2OG "UWG"71s -?75^pPwE(}'W(ýU e&y'"U8J">QD2{Gzi3!q4ȗ$qq'?ƯUߒ572jl0m_N_[Li,Ufv fb`$ B=1.Y2_9Y29QdE6Oa7l0 _Ui.^ 5G_Y_WN_O_O@__d^0³HK!@R'j;3/E+T/f#Jm////////%5$}.@@L&"4#mr>su0~s.@:?L0aS?e=v~?=a >zs;r<}Q63rCc;r1?O!O3OEOWOiO{OOOOO!o3oEoWo_:uvJ_nu_~u_5W\o?\co;xA`>!'qoE+of#Hooo%7I%F Ǟ~0:vrpvuʳpӳ0ʵ|k1k6so378( LV. \T8缙#\,~63vWi{ÏՏ珛 /w ˟۶Nryui,SO ,Oy^E+"4FXj|~T|r<ǣ 0~ܶb.0?J>&01 0:8>)m;Pjk͔ Cf|<\<=v̹%7I[m1/`*/1N(:a/s/zC///`/?1PtD[ l}MgGYad733Y,95 EB4t:N%@@Zz8su?Fl6f{pusٚERYB5$6MnFB =(^!VK8ICkGS^6s~Pe8g6QQUO B3aSd jd j5d jd j95d jd jQX f(=(\Z1m~?i4F??1 a&aCa`aP}aaaag4 PcSsQX2T1t6yAyAss2UqUq1192t2tbdtB>ta7 % Q63#xrAAq4=ءaqp(@WQMYUSm95?s Di`&{89FBF5FB-102A-4E3F-B0C9-B8E6A0288FAF}1MeY?iEYhxVFuWSM3lqT11}a@2H1aRQaIȔa195ؤCIGMb&spcHX_/B4IEjDO5WS=JJMcu5 >ίqTu_ QQYar|E1CFhqw?Fs?F yCͿ߾$յKEƽϦ@5; \d`CƗ๯Ok95͝⻳Rϧe \2ߜUDE~+{I[ߧMn_ZE}1apgT3`r8(68ThKa_Vza a3a4!29 M40&E1A]tq3(QmOAūHfaP wvoid61 GH@#'2q  o!#5XAbe5betߪ'9Lbo4O3_8JJ[,O5GYkG1PUcQSl'1'?(cj7ZAUtu+=EE[9s9j$'@FZW;9@@orb F˩JNdeٿJeu`uU`@P@buo `u uY@QM@`PxYCiB tNpZ@z`@EiB YrbsMutA]ο@%@IVp?tu:L Z@<h(@FD"Hd`t:N%@F*.8@K)bpw@z3Hb&j1Q"`Rjf2`p^qF*0!)OGDbebc&cAi3ѩE4G7De(//y@Qc]5Q(b?"$(oIrɯZAOcpw4ѴԬNE8/:Tֿ?w~AÐBMO@O"_z[@p$ٿndeCqDlZAAT0DGx 5,őu@`GWgv_PvOœ:RTp n"o!ZBQc&Hj1j1!.BiAiA?ee2W5b 3XT+DuD`&{58E455A1-972D-4339-BA5A-6C93473AF2A6}XUTP-DT!?ԐNFS?Bj1c0P i2L30;QvQdW3QiA63=5S5?UAU?\u<A5%O5_]_Gd_o)o;ow4S58`7aQe[oU@^55@F`Fw%2`\.FPd]‹=o }q55Aj up puVuvn[x|>0@@@ xO{3 `_j{!{ɄbS3D& /.)qS5GYrb~XQbsfx&h3_2_ c& &DVhz|h2N贁N{`Q{` Composite{ZAp@XQ IߟUAE딁J@DJv:SD:PL\'?32{S8AUArAOXQDAD8A~UATrAXQ?*$Km҆2fUWert~ߐߢ62AD97E3-30EA-44B6-AE675FBAA3D6C9DL5"@w5.="=m0{e6e`~7T!]̐NPZlA~IU2S=_O_aYUAuu5Yk,Y!Ui "SkD5cET4h4b4s1U#S0zGz>R2l8AcAkJҿw@!=W>PbtφϘϪ@E1%R56T6 m_Ui0__!UAWiOߒߕߧ߹@) /ASew WCrA 2[m܀E`"DVhz D* -?QGc@j6cq1 Q^^5@Y&d29@@YHW-@~?Fȥe?8D@E,))\a9/`(ABFA5! *$FFACKFFACw!U$ebVL"~Y$9d1X.SB(:T'bobuQzPeD8W 9Z}1P9 ~3S) Z 5TZ~TZTZ5TZ&TZHTV3s\q1~?i4F??q1Qa%aBa_a|aaar~~򥥉́ J2 2$~Ʌ2օ2t7I>t97tF6tSe`rց~zJ5P = 5Pe5729475C8-6C50-41E͐AC5-DE4BӐB8CC7۔HB7.=d@LЬ`s║Tm1m1_aR!|aRQaIa5YPjasME⫪p#1cAr*XU_WG8/ DLE UDJOI0l$ 5,LMEW~n Pe¯ԯwAq1O@sJy1Q 3aq /TV19CFVʵPedDCyj) BOBM5ͽƽl'PSOCMPRB[mߋe4ωɅ|>ʵUڿUD½5`Qʵ +=߉/nx_Z5_qG81 l!V 5{Mh8+=J3eZ= ƈaV3Q 13q19ao j7J15Pa$o4io{ooooooo 2q[| &Ǯy,5$@}r [4\+*PVķ@wցҴrҵmՎoӄցWrpU,56uςOiJցO\OzOk}񝟩U՟y"-؟-?\cYYhutW¯Ԯ#5GYk1ϧ˿n#5J(yԩ}#:P'2q$1qy>+return_type : _t +argumentss[0.'.*] q&ځ(i}q?[>6EcFl6fuK߰iꂁu.@#4Їi##وv\+B,$#+/M7)+2/pMtcalldef0F}<)8q O asacW?AUqEU!3EW{Sew/~SrD@/_vCj/_yH%Zk,_DPVhzbVGPbq_thQڃatu?=ehQ I5Il]MOU@|>7@@v8@@P&d2tsL:rlSORBQ*48vrA .vvqs]iqiFc{O__*Xe;tn8w{:q6vW#\Qφq l " E Q5" u "u #u Cσ\sa~?i4ߍF?oa%B_|ӑgCt1eoMZ1ՁUΈnTa~KKB1 1Q2aaԤ`R 2#bfu76b3"w5/ס!BXס( @LX0lh@T`&{547ACEA7-88DB-4783-8ACF-C5E61F649C57}L#X?8heXgpwU@/`Jc0Q5Q1aa|0ӑIĶr!Ap DH.$ӹpYTO$OTҏҪX/Mu jt؀=IN}btEߝ@=Q5q`?tAQMY`n)@'auqAQtsFh ?FrxUOuuE :[Q5d Vn6eFn`UQ\.)ͅte}F*zHZLŴn讏e|XF1qV%K-!//H// h/?3h ?28~!`UO?2?~?a?̆?>dabi\Qmg%c%ua$wpUec!Bu0N@xT_P_b_t_o______oBo0oMoYoko}ooooooo 1CUgy  Q2Dddp@ʏk&5wK faw!3!Q^pʟܟ OҡP 2n{Ч,%%ʥg% ҡPQ EP仠˱(g b"5K)rйwҥd$r\ȴ˱йrrc/- UҠ U!*π+uҥDi˱QD!xo j`rϞϰ .@d8ы%ߦ]?mD 0BTfx&"/,>~/bt"5K2nϱPE7(м [ԫ4P?&Ƀ5SN` !{-Ca4ŷ;aйCaCauq1U' )L[qO*!+free_function_type_ti"$;aҩzE{ٔsH#>~@'_2q"`P'@ҡBD831PvKք2 NnI"Rҡ . //?/?A?S?e?:UAtCꅩ u????OO%O7OHZlOOs!tOJ%sOt(x/UL\Xh/z///Gp !WTϳ[iomCoU@~:@@; 7@@~?Fȥ?"*&D{XuSrn3a([d~q ,Urhv`ҧuPxe8W YY%OAL~ 񈢳Xu!p"u#e$%'rE&c~\S[?i4F?[Ա+Heg8aZTa}T;B-@@p<԰7ԷI6r3&5RBSAbF>6 @p)a>t`&{A7EEF402-A5F6-4A95-8FCFr193100BB95}rE?8箕&8@ rr.e]aWW+tH\]Ive2b?cT[jeNpoj9F/J$6?4p6# u:L^e|qLD!!TqY!GOAY!љ q!#FV8?J?̢'#?W|?,/)LM/c16/ ?Uc6OOnD]o+=FQ }U.]jQpv__x__h__ޘoh-jQ2oo paoauo{osn@ipigZx?JUFU$7FQ;<_\wP-DT!) _JPm&d U.@lGTQQsUXeӠJUrUᐊv跋xgԱoo%7Ilm!3EWo{؏ÏՏiY0<N`̟ޟ&8J\nگ#'GGSewϛp-lE]`G߸޸PhGcASewωϡ߭ϿZ3 nA^j߳׆,i!%@JU34P렛jPJPER{g,.Y!(giwZfxGT!1Ai!1!5F_#UU cUygy%'i{خ4/B'[RAj%CUuAu-؂O-?43;5181 knUwi@")P'%70[ /NF5JK /{`AaԵ\E^ UH#?'2qP@ @Q)<^++has_const : bool +class_iSSdePration_t=&r/./// (l>ӷ۟?3>6E;7Fl6fM7d_=@9B*1~?7^?O&4YQB)&&XOjGTAtOO4[OIOls]^%_@ TEH*~^+member_fwunccype`!5Y_k_}__q_R;'o . 7oIo[omooooob9?As͵ O͵o ?-?Qcu+O=OOOVߣPyT@WO߻ /./@/R/@G,ky,j~JkՊ՟w@{Ju+sDbX,9@FXd8@@@xT=5]eܿ`<;M1Qܤ$ӱ*$,$&N>]Ee<$6 @@)'y!GM k?"rѧ"2f25`41rq6aT`&{B294956A-1211-40C0-BB16-6CDC4933571D}A3TP-?DT!?u#A@rDG%rDFY%u#B( 2M@:C'bjf5vaa >ȝ; //,+԰ 20T6Q%At7v*ϝAaso);l8@F\Zѐ].FR'(msu߀ߣߵ 2NA0BTfx~@  p?vn7cu9qdAa$$oAach3h@ 2D/hz +AaAa> >+=Oas'<J0tq sz__5/G/./r/-t@ /#/// ??-???c?u????????OO)O;A9CF3E3D2-6EF7-4C41-80A3-39C37F8913B1cOuOOfFOEOD=2oNTOVO[>_Aa^i8_J_\_n_ο࿤______o"o4j,BoVfoxooiojiea8oU@?7` p$CC@F BP7I[ !U@ZS5@FzvD~:@FfqVplȏk-ZK.>bs&r'vuqCr'!~w͕v=SJl@/A230uŐe^?7@՟/-?Q_q8M1!P188̧88 *@@|>7@Fvn7a_a e/Ϧa2//?/Q/c-_w#ihA#G1CS9Oq?V? ?oo?$^7k6xr!%,$d(@")$Ђ /*B6F9B2F2-F1908!D-8FAF-680A2FA45O$̥p"σRʈݏͅ}(hF(9K(DCad>>a<`1aba6qI*q"$p%oJuٮIm5ZTsBRuޫ߽ ï  no#jR߿OȺPaz5h 2u(OaS` u~a$xal6:qka1:q9D,BJI$?hOV5(KQtӹDeF9`O X$<6$P-DT! 1҈&ʀzRe__"^lUcTTy.U5OpAP96҈@;8sa6Heq///%/7/I/[/m////?///$??!?3?:qaM?_? a|????O???OO*O@FL&8@@`0 FH$_D1pn69@@q8=@FT*J7@)prp1@z3あ1ia2ԂhbވچԂ pq{!,8Z1ODrقrhbrX&sEן 3bAUnD$Te8??T@Vma@:@5a,iab?oiafH,AOפfA5U(R3E)]=_t@S_z_VJ?RTڿi-->tOGtCqT!, \!%ATlEŸB@fE'BςRpT!(cH/T?ſg{"o ZáBTp11BIa&{ԵB118 {"RAAoqoqE5``с(rT蟡uD`&{AED26F4E-1200-4819-9276-34012A0F98FE}UTP-?DT!?T{%QaQF9TB1E)v,N6HIaE!ud3iaiQ=55 OP?W SLAfEO8kfEUo;joQc oool$87a Y`s5~`U@z^9@Fj 2@@@ !F@һ?RMo7I%Uv-tj 1@@t:N5@FDI2 3 ԃ މQAL0g)'/)/Uڡ3 2 &'qkE8] Aӈ?6s@,/):qU~sQxsS!seę ?_Br2N贁N{r~WB` Compo?site{Ak@Qp[eu)YSUJM<3?g LV _C䦯)P AAAAéQcTAS!S!A­ATA`^ .@Rdo_&FhQμ3kh@ 1C̏?*ake?(?lme5p od5eFhൖ$V^_PZJ*x@@ ]35[qeq//D^dH$@@|>?@%bXW@@YBVE _E^A1q<u.``T?jBFBuI~)d.ZL+hGS2ƹ?_+V\.?<ય0ARh.S(zs.bTzQ15&2 e]WO?UAe9xqu?RBI WBI;aa?5eXFoG@?oQeanaEzoogUano1ooUaYoso+n?5#U^E8")ԑJ__eq__, __ne__ andpltpimplementation: In order tow compariso pers I introduce newncept decla- path - list ofYrNs names. DrPss hi,rchy i lex with a loecross-refelce. Everyp holgds sc* (i)6 which it waspfined.ׄ_t sall6ernX܁ p|Հ breakcursVIv mad?xo i/: 17. C f _Idone byvL.Forאaq:4쐒eis pr*ties,6steadf3th7eirs@r 2ȝ\ data듓0y𑜥Lcsfq,d way: FirdI sortUm. SeEdKm using ==.j4A7IU(ŕXIGobuo,Nt,|ŭtu?{N8v!ACs:s|*tD2zDRFE2zs*tF2vcsq!6/!1qNqkqqɤ-4q 1qNqx"y!@kq҄шq,lMMSYRP Us̎4u5 qJs$giiaX.j7ۅ༬ Кst|ՀԆ\jskՀd. Կ@5ݟpMojM/AQ1~I?AcQ?Ռ0•կsŌ]_ϿAKQ@跬uF3GY"'ZgMlqbTT0Ѳ|sTTrR!$R!MąSSZ..AoB@"110Hk"ұ@z³5T4R!ؕcTE%A`&{68C5FA6A-B462-4E64-89E1-DEBB4F3D9D39}uT6M-DT! @>11eDSZf۰15ԇ\bFL@Tv߬ZpĂHI֛ ֋B¸D"1qq!$!)UT!5ooat9wTA@WI6ۇ>㻤Zeujd~dxd@Usq,`5T5 @/!4Pbt&uY1;qqLL9T5lUkqm)1+_q",+=OaqYQ7/7Ic/pu////Ad/F/??@)?;?M?_?iY*@Gp<)c?SU{xQexQ?OO(O+dT|>@@jZ<@@x@@`_0 ?fdne&mGup`?bupiaYQxQbfI/Ogp@Gc2F#?(:vĹ#?P(찆x.cHip9btzqv.@~J8bcpbAnU)oa rt IjDktNyn~t۞JjxSaex/Sw:_L_pvw`1 Y`(T9ϔEKK- 7h!q'J&8pJ\nV^`@`@*#cl& b& l&l&%Wi   22:O 8 l!(!qIu^FnxMٶt !qvDgP~jBop`Ԟ_ UqdCC"K,cF@b&/FFFb&'/m???A??:DIfR!qK[Q~nA ra2DaOQc|2[WE[utQqeUuqQR)sjxmc6@F55`:@@ =/;F#$O?de?J"u Ou[`cp@(ruQ 0q5`7uX Y&d29@F $9@@U4@Fwq:@)p nAwN5`@z3;qr ~|arb*xvrrpK2q()'9OwH.rda^:pl Q`1 tNOqz`@ HQdzAEj(rյTAL[?@qM_$IԐzA&=OvG| XxGyDd 2N贁N{@V2cB` Composite{2;qUmsLQ_#UL_MZv"NOCBtCL3azAQoa$ǡ cPnAnnєѪbBcAfǡl<4cAOUelDLbDtE26 =@2{p?" ؎#@Ȍȋ!$=IOf@ 1C̠?$م c@-eqdv$D/pBNUsH0 =@йG&ǖڈ 6`J-2;ؕ?@xVh5;x(MUepd?QNBsH/AcQA9\?Ng:2G?AYr5G]A~?rOEGuą\ArgÔYIzAMtELBTFp2KK2OB$nBق- RQQqb?q?q5b &n5n򘤱5MⴜXTw:`&{B4DF8F4C-40CA-48D3-B035-2D1345D6483E}]nETP,DT!?h]م/-c@y] U![qep75cFNe1NQUcPn5IO+KtFv&lb;ia'W#tKOEQWE$NBI5AP@Y@8?@I (tE|0sՁ5?q倔cnCv䶕OEƔڔԔd&-End1US__Q$(/:/W/c/u//p////?A%!(?!?3?E?W?i?{??e(????? O"Oǡ8OJOQgOsOOOOOOH\/(o_1_C_U_g_y___?22____ oo#NDoVosooooPoooHtuB(#5GYk}_&* -#JG8v_\Z6YO_ ǑU@T*JRpn=@@`0 ?Ff_l?# ?;ǕƕǒbI VƓe , ^ QT !ֳǙR춻__y'~?%yCT ONJvǒaaaa ڂ6CH"P 6%72$] !5i{ 35E8B41755-46A7-91A9-39689B0B1Ь_ڛ9vڅǑ80xXd/J@mmn3ῄ֨ځ(^(zǕŸ@ 2׈OUVjOaحq,nj봱!]^AFi4F?FK?F_Ǖ  %Aƺ 7 څ"H$qh@0 ՙ}/  RǐǑyꋿ#2{_Gz#2ĸǑ|aQ1_Ÿ=Q9Go[^CEwSڅU[h ^_3jX>??5E4=9hMځO9&,o]OoO_OOXAqzp?yvǓ?\.U?1AcAڅOOЛpygccxml::declarationsi^t/5F't"bǕtΨǐjǑ 49e2yŕ^dOw&!39&dxu%8?ϒ `~k4׏Vx1VxsRuO_!_3_E__i_{__^_Z_;rqS<~4]q' e#/270Y6 =:a:a4Wq35dH!1tbŀUٔ`&{4F057666-1351-4FE8-90F7-4CBA0F89397D}ctf%?E.ó/> b%?#-A?$Ub>0=?5ub;Ҷ@76=ϥ>߮86=%y? O5%bX}OO5??ִ8?=I?\?5RnNaR mP~0OI>5+euQ $/)!!X'ҸYT<ޭP-DT! ϧϹΝb_&nJ$?.Α*9K+eUϠ/QYVTJw#X&IJ\ȏڏ"4L^j| ğjޟa +=`asͯ߯'9Kcuρ@ɿۿy!`/Q$0BTwxϊ=IUwȮsnl);x_q߉߹Uw#* ~rQ;Gwc,/y+e*Q@-؂-O%@RO'P1ӄy 7W8B,p'r*,ru .xfA!yfAfE 'o/UU+k.]#u@k%L&+D/vi蠜qwu$yex#'2qW0P 2wu+does_match_exist(in inst) : bool +__call__=&Y 2RQR^pfBI@C GSeC);r//&/8//\/n//nE/*Gk///? ?2?D?V?h9'u;-type -nam+pfu0.sparen%t2Z?1~?OOSQ1(tiOQ"Fl?6fOOGQC"_4WF_X_j_4aI_WQ_Q_joiU.kQ7Umwo(ʜUEFh1CdE3declara?tion_tbYEoooo oOt[K1 tW+?ACЉW4FOj|ď}___ "U09US}ϑOo|lϝgŵw,1x8G\1%)MA%"4FeU@B@@0;@@P&d2@F}\  RD(GU)Ѷ Ϩ/Ae#8_ RRN܁ xπFH]1^'_.e`UeaMEb% xd% c%+C\_њ ~?i4F7?Ѱ$A{^g@}j"HTh1;&uAuA'55.bUbHh1h1MB|x2>7163`h157a @ Q'+ S0#MEq7"X`&{98D94B61-397C-4632-9FBB-6E1DC757CDD8}+?8')(/1(@lwUU: "/ S'UeVP1р$RAUV{Io4^BJH6D0 ) nT_FbrApR'9vªHшaM{ T15N OL'3OEOWO1.euOOOqلsqRqbYܹsq5}܁Rф~YaFWy@F DMT\^?u_]'\UOm]_MT^]oU\UL {>f]ٕhn^޸V]x\U3?xooMT\U%woUu__]%o|FoU%nooNS%81~ nnVh_/^~^!څǁӏ$1C$`r&ǁٕruȾaҟkbˬx$YObUL<\1QP-DT! \1& '<Νb&]ZINM@_¹˫U0QI`GYAvɿʯܯ$6HZl~ 2Db^p|ϙϽ);M_q߃ߕߧ߹%7I [yuDQ im|uS[:XLsloatingcNb`base_and_derivebmay_ berdnbtttghas_tpial`pyq{`ructoorany_nonrhremove_cv)type_t9mPoOvolfplzPb`unary_opera&ti及jfip+rP͏Cj__44dGD!3ؒA2Bm4וw?!`0!kTvJ8J85b  . //BE Q, 7Y!IQU1?G?Y?}7WX7PK1Q%?:1a4@??OO*O\.?t1sCB_TQ_TQa Sr%vıC/w"L&豺f$q/$ i#Aj #?ty@`4XRU0zGz?WC"b$///8M/')WD6=WHY(sY@#9vJWuޞu Xq9Bf9🨯QdQ Ij/p%#9lw This algorithms helps you to answer a few common question_bout the qhave. For example: is_base_and_derived( x, y ) willxx wher x class of԰~not. Tideauintroduc" pygccxml came from boos.library. See http://Q.org/cs//index.html ffu۰explana . __N3"U$S=2w (a4br6Y߄~)q"&3fV޽2 3bfj4Ls%d!3:*PBS?$n9?k`P!k#xqAg1L q2/oP5iIxqu^?@b?@| @F(4?-tIQ nQ PfaRStQBPB/v# !9yO&Y/k/}/)UAXQA`IUsIoUhE$&odiMljE"dku5dlHu"dmIdou"dn:\*s~?iA? *GdgB ?j-Y!TbeպBT1$E$"EY!Y!u211HrЀ"II2$r$&>4Va7 4 643'4|"44415A4!! 6MT@QQ1"@];Sq3Hu+є Vm2)`&{CBD1D4F5-61FD-4C82-AD5E-A36547A97D07}Q1u];q?m7&]9l8 2|?82Z7@ͪl2O37Ofa׉`U񅁅0ނXQIDQHudFlNO:)ep #6HDJ5xSARUNUzg_y\"___BQE___qtaKCq!k1*5F+?F#?F}Tdnon"e {mdE?~@ }`erelwvm~v}+kIeVSeepdmom&㌣e/EK+cQEhzG zon؊v}Q7$0B_qBoϨ$ϯa/J-1!w1&SQ/.ʕi#CwL6Pbt(@L^p@Va=!! 1TUg}&кa?Й#PnM#&eV^ 1C[/gy.TcAQ O/$/A@)aaTQYQx/)@ `@-,e @D,gFP;wx_)12ex _gxh1$0d10e,21PC ?2?D>Go2qP?_V%?\.W?.AT0HHgCg2rOA ?Q?U?9GkzunEcu@efko%iJd8!.T$w%8)Q%#}q%'zTRpr@W}tH䠒p8|Q#%+normalize_path(in som : string) +by_locationdecls, 5irs) +user_defined4matcher)jᤔQyT$o)UjY%d/WT!3ւ%TՅ?O`kt%%QUAm0L  &O8OHb@)Q,Q'1_)UOOOGhGO_LQX_j^__D>"Q{U.T.AXo$o6oHoZoqso!oooo4wT$aχwy!x2 npl1(Q'mFHF8AGtA'15Dt)AwBömۗ@ErM4EGΗB@mxsLU$au[U__kwQ/bmT uYAq BU4p" BI0!C(Ica)6e6GoGAgoye/n5oo|Gm)6noYo)6ooSnB (PGgC?7)(This class7Ps a few method, that help to complete tasks kIԏUqbt(\}5-eTTV<~=<@!PvR=G"r 4br6Q'1)?K5@om5QqQUo tRT*@@p8@g`0 8أ A89B'1BCv@ 2>F[Nb%>FWG"OA QZXeXzX#&fQ1@psq/tk(6#O{~ҴQr/! vR}212L %ju??_?IؿJ3@@P( 8@@ &d2uE,oI5Os5$SB{֠ +)$buX?Q/ZþXVhzԱg$ԱԹo_3TU s)UAU(A/vUw%xUza5y)x}~?i4F7?}ဌA(A/Lig,6/.% ,T!F1R@@/R!$!"R2a2>7d6A30*уъ4ZQBt(@QU S%:QBT`&{E0A4FA3D-B8CC-4177-A179-180791F9A632}U-a5 ? @< FS/T2UaPQQQ/bށL@`񑂒iq=tokYxB pT[=/tXjaVՄ1U5X7?I<`?r??1U???A,ʈ,AC%/QԱqEәFh?F?AFˏʼnNNөOHNeEF՚MO^M0_Ud ?PtVkVIҡkR_=E6V]OKZE&3P__wEAt_oqoԵOaOMR_ls_Ono/o!%nl~nyasJO\N$ಱ;}(4F3cuؒӈ1(=ӏWa3vN1,Q, |š! -ћEIQ0+S]:tl U( 0U:vp3un$C᨟ן*+=Oasͯ߯-?K] m῿ѿa ABTfxϜϮ,DVbt߭ߘ߼&Av#5XYk]k*u9cT騝jc %?@RjvU$C!Q uA(WD a,'daeL Q23T.(Pyw9lPDEpdUYGa1AildGaGe$UPU'!I.>CsLO7JU%O7JeOvi)HB? KPDd" LPTb& lM| U1( UO"D&aU=QJf )h- *T--*! +U !-?Qcux T$P%!?Ʌ>-)H*= @M#$1-  g!g!! E/// s 3)#0z_Gz?$@ G2Ǎqp0?o?6?\.?ZAiP? 6%UML Background Add-on/CMD=1%UML Background Add-on/CMD=2/H (C/$I +C/DL& a/N& a/LP& a/S& a/A& a/U& a/LW& a/ Y& a/Z& a/\& a/`& a/d& a/e& a/ R& a GuideTheDocPackage.27Gesture FormatDependencyUMLUsageUML NormalConnectorBlack fillWhite lineGeneralization ArrowDynamic ConnectorUMLShapeTypeUMLObjectGUIDUMLError BeginAngleEndAngleUMLPresOption1 UMLSuppressOptionNavigabilityUMLVersion DX1 DY1DX3DY3end1_nameend1_mpend2_nameend2_mpNavigableSharedCompositeComposite NavigableShared NavigableQualifierShared QualifierComposite Qualifier$Composite Navigable Qualifier!Shared Navigable Qua?lifierNavigable QualifierProcedure CallAsynchronous FlowFlat Flowrealize_subshapereal_subshapeWatermark TitleVisio Extended DataClass.47Package UMLAutoLockTextEditvisDescription!visKeywords!visVersion EnsureWidthOK DefaultWidthNameUMLPageGUIDComponent-1ClassComponentComponent In?stanceUMLPresOption2ObjectAttributesHeightRatioPackage.26UMLShape28Class.90UMLTemplateGeneralizati?on.48OperationsClass.24ParametersData TypeUMLShape20CompositionNoteGeneralizationDiscriminatorNote.33N-ary LinkUMLArityEnd_2End_1End_3End_7End_4End_5End_8End_6Class.444Class.4Composition.22Generalization.45Visio 90Multi-tree squareScaleAntiScaleMulti-tree slopedOne to manyUniversal connectorSidesTextPosUMLShape33Side top/bottomDynamic connector.41Composition.501ConstraintUMLShape23Line connectorClass.666parsercplus_parserClass.145LinkClass.165Class.671Composition.223Composition.49Generalizati?on.449Composition.50Class.108declarationsGeneralizati?on.701Package.51Class.882Data Type.52 3  E3  E3 E3< G3d> E3|>  E3?  E3\ E3k E3 0E3 AE3 R G3 rG3< G3T G3l E3 E3 E3 G3 G3 !G3 8E3 I E3 S E3 ] E3$ g E34 qE3L E3d E3| E3 E3  E3 E3 G3 G3 E34 #G3T >G3t \*G3 &G3 G3 G3 G3$ E3< G3\ *G3t BG3 \G3 z E3 E3 G3 G3$ E3< E3T G3l G3  E3 (G3 =G3 R E3 ^E3 nG3 G3,  E3D E3\ G3t E3 E3 E3 G3 G3 8E3 IE3$ XE3< iE3T yE3l G3  E3 G3 G3 E3 E3 E3  E3$  E34 ! E3D - E3T 9 E3d E E3t Q E3 ] E3 iE3 yE3 G3 G3 E3 G3<  E3L E3d G3 G3 4G3 R E3 ^E3 lE3 }G3  G3< G3\ E3t E3 G3 E3  E3 +G3 DE3 R E3$ ]E3< kE3T {G3t G3 G3 G3 E3 G3 G3 $E3 3E34O AE  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~U  _t4D@w; ?>@ U r$*C-37A%t4 $U _$ A-37AJ@DT $JR@Q $5RH<( H<( JEtGT A& RECT N& R} Display{  g'9K] , (h(0@@(F*ޭs`A@ > :WB \ v(` >&^ f.}fF C R$F=! .P!)TI HR' P1 Gq$B %P2 R ?NT %*"D OT [&6%`c߬'/Fpygccxml-3.0.2/docs/query_interface.rst000066400000000000000000000247161476564735400202500ustar00rootroot00000000000000====================== Declarations query API ====================== ------------ Introduction ------------ You parsed the source files. Now you have to do some real work with the extracted information, right? pygccxml provides very powerful and simple interface to query about extracted declarations. Just an example. I want to select all member functions, which have 2 arguments. I don't care about first argument type, but I do want second argument type to be a reference to an integer. More over, I want those functions names to end with "impl" string and they should be protected or private. .. code-block:: python #global_ns is the reference to an instance of namespace_t object, that #represents global namespace query = declarations.custom_matcher_t( lambda mem_fun: mem_fun.name.endswith( 'impl' ) query = query & ~declarations.access_type_matcher_t( 'public' ) global_ns.member_functions( function=query, arg_types=[None, 'int &'] ) The example is complex, but still readable. In many cases you will find yourself, looking for one or many declarations, using one or two declaration properties. For example: .. code-block:: python global_ns.namespaces( 'details' ) This call will return all namespaces with name 'details'. -------------- User interface -------------- As you already know, ``pygccxml.declarations`` package defines the following classes: * :class:`scopedef_t ` - base class for all classes, that can contain other declarations * :class:`namespace_t ` - derives from :class:`scopedef_t ` class, represents C++ namespace * :class:`class_t ` - derives from :class:`scopedef_t ` class, represents C++ class/struct/union. So, the query methods defined on ``scopedef_t`` class could be used on instances of ``class_t`` and ``namespace_t`` classes. I am sure you knew that. Usage examples -------------- I will explain the usage of ``member_function`` and ``member_functions`` methods. The usage of other methods is very similar to them. Here is definition of those methods: .. code-block:: python def member_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ) mem_fun = member_function #just an alias def member_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None ) mem_funs = member_functions As you can see, from the method arguments you can search for member function by: * ``name`` Python string, that contains member function name or full name. .. code-block:: python do_smth = my_class.member_function( 'do_smth' ) do_smth = my_class.member_function( 'my_namespace::my_class::do_smth' ) * ``function`` Python callable object. You would use this functionality, if you need to build custom query. This object will be called with one argument - declaration, and it should return ``True`` or ``False``. .. code-block:: python impls = my_class.member_functions( lambda decl: decl.name.endswith( 'impl' ) ) ``impls`` will contain all member functions, that their name ends with "impl". * ``return_type`` the function return type. This argument can be string or an object that describes C++ type. .. code-block:: python mem_funcs = my_class.member_functions( return_type='int' ) i = declarations.int_t() ref_i = declarations.reference_t( i ) const_ref_i = declarations.const_t( ref_i ) mem_funcs = my_class.member_functions( return_type=const_ref_int ) * ``arg_types`` Python list that contains description of member function argument types. This list could be a mix of Python strings and objects that describes C++ type. Size of list says how many arguments function should have. If you want to skip some argument type from within comparison, you put ``None``, into relevant position within the list. .. code-block:: python mem_funcs = my_class.member_functions( arg_types=[ None, 'int'] ) ``mem_funcs`` will contain all member functions, which have two arguments and type of second argument is ``int``. * ``header_dir`` Python string, that contains full path to directory, which contains file, which contains the function declaration ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz' )`` * ``header_file`` Python string, that contains full path to file, which contains the function declaration. ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz/xyz.hpp' )`` * ``recursive`` Python boolean object. If ``recursive`` is ``True``, then member function will be also searched within internal declarations. If ``recursive`` is ``False``, then member function will be searched only within current scope. What happen if ``recursive`` is ``None``? Well. ``scopedef_t`` class defines ``RECURSIVE_DEFAULT`` variable. Its initial value is ``True``. So, if you don't pass ``recursive`` argument, the value of ``RECURSIVE_DEFAULT`` variable will be used. This "yet another level of indirection" allows you to configure pygccxml "select" functions in one place for all project. * ``allow_empty`` Python boolean object, it says pygccxml what to do if query returns empty. If ``allow_empty`` is ``False``, then exception ``RuntimeError( "Multi declaration query returned 0 declarations." )`` will be raised ``allow_empty`` uses same technique as ``recursive``, to allow you to customize the behavior project-wise. The relevant class variable name is ``ALLOW_EMPTY_MDECL_WRAPPER``. Its initial value is ``False``. Now, when you understand, how to call those functions, I will explain what they return. ``member_function`` will always return reference to desired declaration. If declaration could not be found or there are more then one declaration that match query ``RuntimeError`` exception will be raised. Return value of ``member_functions`` is not Python list or set, but instance of ``mdecl_wrapper_t`` class. This class allows you to work on all selected objects at once. I will give an example from another project - https://pypi.python.org/pypi/pyplusplus/. In order to help `Boost.Python`_ to manage objects life time, all functions should have `call policies`_. For example: .. code-block:: c++ struct A{ A* clone() const { return new A(); } ... }; .. code-block:: c++ struct B{ B* clone() const { return new B(); } ... }; ``clone`` member function `call policies`_ is ``return_value_policy()``. The following code applies the `call policies`_ on all ``clone`` member functions within the project: .. code-block:: python #global_ns - instance of namespace_t class, that contains reference to global namespace clone = global_ns.member_functions( 'clone' ) clone.call_policies = return_value_policy( manage_new_object ) Another example, from https://pypi.python.org/pypi/pyplusplus/ project. Sometimes it is desirable to exclude declaration, from being exported to Python. The following code will exclude ``clone`` member function from being exported: .. code-block:: python global_ns.member_functions( 'clone' ).exclude() As you can see this class allows you to write less code. Basically using this class you don't have to write loops. If will do it for you. Also if you insist to write loops, ``mdecl_wrapper_t`` class implements ``__len__``, ``__getitem__`` and ``__iter__`` methods. So you can write the following code: .. code-block:: python for clone in global_ns.member_functions( 'clone' ): print clone.parent.name ---------------------- Implementation details ---------------------- Performance ----------- For big projects, performance is critical. When you finished to build/change declarations tree, then you can call ``scopedef_t.init_optimizer`` method. This method will initialize few data structures, that will help to minimize the number of compared declarations. The price you are going to pay is memory usage. Data structures ~~~~~~~~~~~~~~~ Here is a short explanation of what data structures is initialized. * ``scopedef_t._type2decls``, ``scopedef_t._type2decls_nr`` Python dictionary, that contains mapping between declaration type and declarations in the current scope. ``scopedef_t.type2decls_nr`` contains only declaration from the current scope. ``scopedef_t.type2decls`` contains declarations from the current scope and its children * ``scopedef_t._type2name2decls``, ``scopedef_t._type2name2decls_nr`` Python dictionary, that contains mapping between declaration type and another dictionary. This second dictionary contains mapping between a declaration name and declaration. ``scopedef_t.type2name2decls_nr`` contains only declaration from the current scope. ``scopedef_t.type2name2decls`` contains declarations from the current scope and its children * ``scopedef_t._all_decls`` A flat list of all declarations, including declarations from the children scopes. Except ``scopedef_t.decl`` and ``scopedef_t.decls`` methods, all other queries have information about declaration type. If you include ``name`` into your query, you will get the best performance. ---------------- More information ---------------- I think, I gave you the important information. If you need definition of some query method, you can take a look on API documentation or into source code. .. _`Boost.Python`: http://boost.org/libs/python/doc/tutorial/doc/html/index.html .. _`call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies .. _`Call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org .. _`UML diagram` : declarations_uml.png .. _`parser package UML diagram` : parser_uml.png .. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html pygccxml-3.0.2/docs/releasing.rst000066400000000000000000000026341476564735400170270ustar00rootroot00000000000000Releasing ========= Preparation ----------- Run `git checkout develop`. To build a new release, modify the version number in `pyproject.toml`. This version number will then automatically be used to build the documentation and by the build script when building the wheels. Run `git add . && git commit -m "Bump version major.minor.minor"`. Do not forget to document the latest changes in the ``CHANGELOG.md`` file. Merging and releasing --------------------- Merge develop into master: Run `git checkout master`. Run `git merge develop master`. Tag the version (do not forget the v): Run `git tag vmajor.minor.minor`. Run `git push origin vmajor.minor.minor && git push origin master` Wait for the CI to be done and all green. Go to the releases page on github and use the "draft a new release" button to create a new release. Use the exisiting tag. You can copy-past the changelog's content there if you want to. Once you are done, you can upload the release to pypi. Uploading to pypi ----------------- The documentation for the building and uploading can be found here: `pypi`_ Cleanup your dist: ``rm -rf dist`` Make sur your build tools are up to date `python3 -m pip install --upgrade build` The wheels and the source distribution are built with: ``python3 -m build`` They are uploaded with: ``twine upload dist/*`` .. _`pypi`: http://python-packaging-user-guide.readthedocs.org/en/latest/distributing/ pygccxml-3.0.2/docs/upgrade_issues.rst000066400000000000000000000165501476564735400201020ustar00rootroot00000000000000========================================= GCC-XML 0.7 → 0.9 upgrade issues (Legacy) ========================================= ------------ Introduction ------------ This page is kept here for historical reasons. CastXML is the recommended xml generator and GCC-XML is being phased out. This page will be removed in version 2.0.0 of pygcxml. Recently, GCC-XML internal parser was updated to GCC 4.2. The internal representation of source code, provided by GCC's parser, has changed a lot and few backward compatibility issues were introduced. In this document, I will try to cover all problems you may encounter. ------------------- Default constructor ------------------- GCC-XML 0.9 doesn't report compiler generated default and copy constructors as an implicit ones. If you rely heavily on their existence in the generated XML, I suggest you to switch to :func:`has_trivial_constructor ` and to :func:`has_trivial_copy ` functions. -------------------------- Pointer to member variable -------------------------- Previous version of GCC-XML reported pointer to member variable as a "PointerType" with reference to "OffsetType". The new version removes "PointerType" from this sequence. C++ code: .. code-block:: c++ struct xyz_t{ int do_smth( double ); int m_some_member; }; typedef int (xyz_t::*mfun_ptr_t)( double ); typedef int (xyz_t::*mvar_ptr_t); GCC-XML 0.7: .. code-block:: xml GCC-XML 0.9: .. code-block:: xml pygccxml handles this issue automatically, you don't have to change your code. ----------------------- Constant variable value ----------------------- GCC-XML 0.9 uses suffix to report the constant variable value For example: .. code-block:: c++ const long unsigned int initialized = 10122004; GCC-XML 0.9 will report the ``initialized`` value as ``10122004ul``, while GCC-XML 0.7 as ``10122004``. pygccxml handles this problem automatically, you don't have to change your code. ------------------------------------------ Free and member function default arguments ------------------------------------------ Both versions of GCC-XML have a few issues, related to default arguments. GCC-XML 0.9 fixes some issues, but introduces another ones. Take a look on the following examples: * Example 1 .. code-block:: c++ void fix_numeric( ull arg=(ull)-1 ); GCC-XML 0.7 .. code-block:: xml GCC-XML 0.9 .. code-block:: xml * Example 2 .. code-block:: c++ void fix_function_call( int i=calc( 1,2,3) ); GCC-XML 0.7 .. code-block:: xml GCC-XML 0.9 .. code-block:: xml * Example 3 .. code-block:: c++ void typedef__func( const typedef_::alias& position = typedef_::alias() ); GCC-XML 0.7 .. code-block:: xml GCC-XML 0.9 .. code-block:: xml * Example 4 .. code-block:: c++ void typedef__func2( const typedef_::alias& position = alias() ); GCC-XML 0.7 .. code-block:: xml GCC-XML 0.9 .. code-block:: xml * Example 5 .. code-block:: c++ node* clone_tree( const std::vector &types=std::vector() ); GCC-XML 0.7 .. code-block:: xml GCC-XML 0.9 .. code-block:: xml Basically pygccxml can't help you here. The good news is that you always can change the default value expression from the script: .. code-block:: python #f is "calldef_t" instance for arg in f.arguments: arg.default_value = <<>> ------------- Name mangling ------------- GCC-XML 0.9 mangles names different than the previous one. This change is the most dramatic one, because it may require from you to change the code. Consider the following C++ code: .. code-block:: c++ template< unsigned long i1> struct item_t{ static const unsigned long v1 = i1; }; struct buggy{ typedef unsigned long ulong; typedef item_t< ulong( 0xDEECE66DUL ) | (ulong(0x5) << 32) > my_item_t; my_item_t my_item_var; }; ==================== ====================== ======================= generated data GCC-XML 0.7 GCC-XML 0.9 ==================== ====================== ======================= class name item_t<0x0deece66d> item_t<-554899859ul> class mangled name 6item_tILm3740067437EE 6item_tILm3740067437EE class demangled name item_t<3740067437l> item_t<3740067437ul> ==================== ====================== ======================= pygccxml uses class demangled name as a "name" of the class. This was done to overcome few bugs GCC-XML has, when it works on libraries with extreme usage of templates. As you can see the name of the class is different. pygccxml is unable to help you in such situations. I suggest you to use query API strict mode. This is the default one. If the class/declaration with the given name could not be found, it will raise an error with clear description of the problem. You can also to print the declarations tree to ``stdout`` and find out the name of the class/declaration from it. .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org pygccxml-3.0.2/docs/users.rst000066400000000000000000000016421476564735400162150ustar00rootroot00000000000000Who is using pygccxml? ====================== Users ----- * The Insight Toolkit is using pygccxml (http://www.itk.org). * `PyBindGen`_ - is a Python module that is geared to generating C/C++ code that binds a C/C++ library for Python. * your project name ... :-) pygccxml in blogs ----------------- - http://blog.susheelspace.com/?p=88 " ... I have used pygccxml for parsing c++ code, it was a lot of fun to use " - http://cysquatch.net/blog/2007/09/01/c-code-metrics-with-pygccxml pygccxml is used to calculate the Weighted Methods per Class (WMC) metric. - http://www.garagegames.com/blogs/4280/13907 pygccxml is used to generate input files for `SIP`_ code generator. - http://blogs.sun.com/thorsten/entry/more_on_source_code_grokking Short listing of C++ parsers and their description. .. _`PyBindGen` : https://launchpad.net/pybindgen .. _`SIP` : http://www.riverbankcomputing.com/software/sip/intro pygccxml-3.0.2/pyproject.toml000066400000000000000000000033541476564735400163100ustar00rootroot00000000000000[build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "pygccxml" description = "Python package for easy C++ declarations navigation." authors = [ {name = "Michka Popoff", email = "michkapopoff@gmail.com"}, {name = "Insight Software Consortium", email = "castxml@public.kitware.com"}, {name = "Roman Yakovenko", email = "romanyakovenko@gmail.com"}, ] readme = "README.rst" license = {file = "LICENSE.rst"} keywords = [ "C++", "XML", "declaration parser", "CastXML", "gccxml", ] version = "3.0.2" classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", ] dependencies = [ 'importlib-metadata >= 4.6; python_version < "3.10"', # Not required for 3.8+, but fixes a stdlib bug ] [project.urls] Homepage = "https://github.com/CastXML/pygccxml" Documentation = "https://readthedocs.org/projects/pygccxml/" Repository = "https://github.com/CastXML/pygccxml" Changelog = "https://github.com/CastXML/pygccxml/CHANGELOG.md" [options] python_requires = ">=3.9" [project.optional-dependencies] test = [ "coverage", "coveralls", "pycodestyle", "pytest", ] docs = [ "sphinx", "sphinx_rtd_theme", ] examples = [ "notebook", ] pygccxml-3.0.2/src/000077500000000000000000000000001476564735400141565ustar00rootroot00000000000000pygccxml-3.0.2/src/pygccxml/000077500000000000000000000000001476564735400160045ustar00rootroot00000000000000pygccxml-3.0.2/src/pygccxml/__init__.py000066400000000000000000000040311476564735400201130ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """Python CastXML front end. This package provides functionality to extract and inspect declarations from C/C++ header files. This is accomplished by invoking an external tool like CastXML, which parses a header file and dumps the declarations as a XML file. This XML file is then read by pygccxml and the contents are made available as appropriate Python objects. To parse a set of C/C++ header files you use the :func:`parse ` function in the :mod:parser sub package which returns a tree that contains all declarations found in the header files. The root of the tree represents the main namespace `::` and the children nodes represent the namespace contents such as other namespaces, classes, functions, etc. Each node in the tree is an object of a type derived from the :class:`declaration_t` class. An inner node is always either a namespace :class:`declarations.namespace_t` or a class :class:`declarations.class_t`, which are both derived from :class:`declarations.scopedef_t` class. Everything else (free functions, member functions, enumerations, variables, etc.) are always a leaf. You will find all those declaration classes in the :mod:declarations sub-package. """ import sys import warnings from . import declarations from . import parser from . import utils # Always show deprecation warnings. # These are hidden by default since python 2.7. # pygccxml is a tool for developers, and these need # to know what is deprecated. warnings.simplefilter("always", DeprecationWarning) version = sys.version_info if version < (3, 8): import importlib_metadata as metadata elif version < (3, 9, 10) or (3, 10, 0) <= version < (3, 10, 2): try: import importlib_metadata as metadata except ModuleNotFoundError: from importlib import metadata else: from importlib import metadata __version__ = metadata.version("pygccxml") pygccxml-3.0.2/src/pygccxml/declarations/000077500000000000000000000000001476564735400204545ustar00rootroot00000000000000pygccxml-3.0.2/src/pygccxml/declarations/__init__.py000066400000000000000000000303121476564735400225640ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Contains classes that describe different C++ declarations """ # Keep compilers for backward compatibility from . import xml_generators as compilers from . import xml_generators from .location import location_t from .declaration import declaration_t from .scopedef import scopedef_t from .enumeration import enumeration_t from .typedef import typedef_t from .namespace import namespace_t from .namespace import get_global_namespace from .class_declaration import class_t from .class_declaration import CLASS_TYPES from .class_declaration import ACCESS_TYPES from .class_declaration import hierarchy_info_t from .class_declaration import class_declaration_t from .class_declaration import class_types from .cpptypes import type_t from .cpptypes import dummy_type_t from .cpptypes import unknown_t from .cpptypes import ellipsis_t from .cpptypes import fundamental_t from .cpptypes import void_t from .cpptypes import char_t from .cpptypes import signed_char_t from .cpptypes import unsigned_char_t from .cpptypes import wchar_t from .cpptypes import short_int_t from .cpptypes import short_unsigned_int_t from .cpptypes import bool_t from .cpptypes import int_t from .cpptypes import unsigned_int_t from .cpptypes import long_int_t from .cpptypes import long_unsigned_int_t from .cpptypes import long_long_int_t from .cpptypes import long_long_unsigned_int_t from .cpptypes import int128_t from .cpptypes import uint128_t from .cpptypes import float_t from .cpptypes import double_t from .cpptypes import long_double_t from .cpptypes import FUNDAMENTAL_TYPES from .cpptypes import compound_t from .cpptypes import volatile_t from .cpptypes import const_t from .cpptypes import pointer_t from .cpptypes import reference_t from .cpptypes import elaborated_t from .cpptypes import restrict_t from .cpptypes import array_t from .cpptypes import calldef_type_t from .cpptypes import free_function_type_t from .cpptypes import member_function_type_t from .cpptypes import member_variable_type_t from .cpptypes import declarated_t from .cpptypes import type_qualifiers_t # java types from .cpptypes import java_fundamental_t from .cpptypes import jbyte_t from .cpptypes import jshort_t from .cpptypes import jint_t from .cpptypes import jlong_t from .cpptypes import jfloat_t from .cpptypes import jdouble_t from .cpptypes import jchar_t from .cpptypes import jboolean_t from .variable import variable_t from .declaration_utils import full_name from .declaration_utils import full_name_from_declaration_path from .declaration_utils import declaration_path from .declaration_utils import get_named_parent from .scopedef import make_flatten from .scopedef import find_declaration from .scopedef import find_all_declarations from .scopedef import find_first_declaration from .scopedef import declaration_files from .scopedef import matcher from .algorithm import apply_visitor from .algorithm import match_declaration_t from .calldef_types import VIRTUALITY_TYPES from .calldef_types import FUNCTION_VIRTUALITY_TYPES from .calldef_types import CALLING_CONVENTION_TYPES from .calldef import argument_t from .calldef import calldef_t from .calldef_members import member_calldef_t from .calldef_members import operator_t from .calldef_members import member_function_t from .calldef_members import constructor_t from .calldef_members import destructor_t from .calldef_members import member_operator_t from .calldef_members import casting_operator_t from .free_calldef import free_calldef_t from .free_calldef import free_function_t from .free_calldef import free_operator_t from .decl_visitor import decl_visitor_t from .type_visitor import type_visitor_t from .type_traits import decompose_type from .type_traits import decompose_class from .type_traits import base_type from .type_traits import is_bool from .type_traits import is_same from .type_traits import is_void from .type_traits import is_void_pointer from .type_traits import is_const from .type_traits import is_array from .type_traits import is_pointer from .type_traits import is_volatile from .type_traits import is_integral from .type_traits import is_reference from .type_traits import is_arithmetic from .type_traits import is_fundamental from .type_traits import is_floating_point from .type_traits import is_std_string from .type_traits import is_std_wstring from .type_traits import is_std_ostream from .type_traits import is_std_wostream from .type_traits import is_calldef_pointer from .type_traits import is_elaborated from .type_traits import array_size from .type_traits import array_item_type from .type_traits import remove_cv from .type_traits import remove_const from .type_traits import remove_pointer from .type_traits import remove_volatile from .type_traits import remove_reference from .type_traits import remove_declarated from .type_traits import remove_alias from .type_traits import remove_elaborated from .has_operator_matcher import has_public_binary_operator from .has_operator_matcher import has_public_equal from .has_operator_matcher import has_public_less from .type_traits_classes import is_enum from .type_traits_classes import enum_declaration from .type_traits_classes import enum_traits from .type_traits_classes import is_class from .type_traits_classes import class_traits from .type_traits_classes import is_class_declaration from .type_traits_classes import class_declaration_traits from .type_traits_classes import is_base_and_derived from .type_traits_classes import is_convertible from .type_traits_classes import is_noncopyable from .type_traits_classes import is_copy_constructor from .type_traits_classes import is_trivial_constructor from .type_traits_classes import is_struct from .type_traits_classes import is_union from .type_traits_classes import is_unary_operator from .type_traits_classes import is_binary_operator from .type_traits_classes import has_destructor from .type_traits_classes import has_copy_constructor from .type_traits_classes import has_public_assign from .type_traits_classes import has_public_destructor from .type_traits_classes import has_public_constructor from .type_traits_classes import has_trivial_constructor from .type_traits_classes import find_trivial_constructor from .type_traits_classes import find_copy_constructor from .type_traits_classes import find_noncopyable_vars from .type_traits_classes import has_any_non_copyconstructor from .type_traits_classes import has_vtable from .pointer_traits import auto_ptr_traits from .pointer_traits import smart_pointer_traits from .pointer_traits import internal_type_traits from .container_traits import list_traits from .container_traits import deque_traits from .container_traits import queue_traits from .container_traits import priority_queue_traits from .container_traits import vector_traits from .container_traits import stack_traits from .container_traits import map_traits from .container_traits import multimap_traits from .container_traits import hash_map_traits from .container_traits import hash_multimap_traits from .container_traits import set_traits from .container_traits import hash_set_traits from .container_traits import multiset_traits from .container_traits import hash_multiset_traits from .container_traits import find_container_traits from .container_traits import unordered_map_traits from .container_traits import unordered_multimap_traits from .container_traits import unordered_set_traits from .container_traits import unordered_multiset_traits from .function_traits import is_same_function from . import templates from . import call_invocation from .dependencies import get_dependencies_from_decl from .dependencies import dependency_info_t from .decl_factory import decl_factory_t from .matchers import matcher_base_t from .matchers import or_matcher_t from .matchers import and_matcher_t from .matchers import not_matcher_t from .matchers import regex_matcher_t from .matchers import custom_matcher_t from .matchers import access_type_matcher_t from .matchers import virtuality_type_matcher_t from .declarations_matchers import declaration_matcher_t from .declarations_matchers import calldef_matcher_t from .declarations_matchers import namespace_matcher_t from .declarations_matchers import variable_matcher_t from .declarations_matchers import operator_matcher_t from .mdecl_wrapper import mdecl_wrapper_t from .decl_printer import decl_printer_t from .decl_printer import dump_declarations from .decl_printer import print_declarations from . import scopedef from .container_traits import all_container_traits from .container_traits import sequential_container_traits from .runtime_errors import declaration_not_found_t from .runtime_errors import multiple_declarations_found_t from .runtime_errors import visit_function_has_not_been_found_t # make matchers to look more like functors or_matcher = or_matcher_t """see :class:`or_matcher_t` for documentation""" and_matcher = and_matcher_t """see :class:`and_matcher_t` for documentation""" not_matcher = not_matcher_t """see :class:`not_matcher_t` for documentation""" declaration_matcher = declaration_matcher_t """see :class:`declaration_matcher_t` for documentation""" calldef_matcher = calldef_matcher_t """see :class:`calldef_matcher_t` for documentation""" namespace_matcher = namespace_matcher_t """see :class:`namespace_matcher_t` for documentation""" variable_matcher = variable_matcher_t """see :class:`variable_matcher_t` for documentation""" regex_matcher = regex_matcher_t """see :class:`regex_matcher_t` for documentation""" access_type_matcher = access_type_matcher_t """see :class:`access_type_matcher_t` for documentation""" operator_matcher = operator_matcher_t """see :class:`operator_matcher_t` for documentation""" custom_matcher = custom_matcher_t """see :class:`custom_matcher_t` for documentation""" virtuality_type_matcher = virtuality_type_matcher_t """see :class:`virtuality_type_matcher_t` for documentation""" scopedef.scopedef_t._impl_all_decl_types = [ scopedef.scopedef_t, enumeration_t, namespace_t, class_t, class_declaration_t, typedef_t, variable_t, calldef_t, member_calldef_t, free_calldef_t, operator_t, member_function_t, constructor_t, destructor_t, member_operator_t, casting_operator_t, free_function_t, free_operator_t] __impl_matchers = scopedef.scopedef_t._impl_matchers __impl_decl_types = scopedef.scopedef_t._impl_decl_types __impl_matchers[scopedef.scopedef_t.decl] = declaration_matcher_t __impl_matchers[scopedef.scopedef_t.class_] = declaration_matcher_t __impl_decl_types[scopedef.scopedef_t.class_] = class_t __impl_matchers[scopedef.scopedef_t.variable] = variable_matcher_t __impl_matchers[scopedef.scopedef_t.calldef] = calldef_matcher_t __impl_decl_types[scopedef.scopedef_t.calldef] = calldef_t __impl_matchers[scopedef.scopedef_t.operator] = operator_matcher_t __impl_decl_types[scopedef.scopedef_t.operator] = operator_t __impl_matchers[scopedef.scopedef_t.member_function] = calldef_matcher_t __impl_decl_types[scopedef.scopedef_t.member_function] = member_function_t __impl_matchers[scopedef.scopedef_t.constructor] = calldef_matcher_t __impl_decl_types[scopedef.scopedef_t.constructor] = constructor_t __impl_matchers[scopedef.scopedef_t.member_operator] = operator_matcher_t __impl_decl_types[scopedef.scopedef_t.member_operator] = member_operator_t __impl_matchers[scopedef.scopedef_t.member_operator] = operator_matcher_t __impl_decl_types[scopedef.scopedef_t.member_operator] = member_operator_t __impl_matchers[scopedef.scopedef_t.casting_operator] = calldef_matcher_t __impl_decl_types[scopedef.scopedef_t.casting_operator] = casting_operator_t __impl_matchers[scopedef.scopedef_t.enumeration] = declaration_matcher_t __impl_decl_types[scopedef.scopedef_t.enumeration] = enumeration_t __impl_matchers[scopedef.scopedef_t.typedef] = declaration_matcher_t __impl_decl_types[scopedef.scopedef_t.typedef] = typedef_t __impl_matchers[namespace_t.namespace] = namespace_matcher_t __impl_matchers[namespace_t.free_function] = calldef_matcher_t __impl_decl_types[namespace_t.free_function] = free_function_t __impl_matchers[namespace_t.free_operator] = operator_matcher_t __impl_decl_types[namespace_t.free_operator] = free_operator_t pygccxml-3.0.2/src/pygccxml/declarations/algorithm.py000066400000000000000000000043761476564735400230260ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Define few unrelated algorithms that work on declarations. """ from . import declaration_utils from . import runtime_errors class match_declaration_t(object): """ Helper class for different search algorithms. This class will help developer to match declaration by: - declaration type, for example :class:`class_t` or :class:`operator_t`. - declaration name - declaration full name - reference to parent declaration """ def __init__( self, decl_type=None, name=None, fullname=None, parent=None): self._decl_type = decl_type self.name = name self.fullname = fullname self.parent = parent def does_match_exist(self, inst): """ Returns True if inst does match one of specified criteria. :param inst: declaration instance :type inst: :class:`declaration_t` :rtype: bool """ answer = True if self._decl_type is not None: answer &= isinstance(inst, self._decl_type) if self.name is not None: answer &= inst.name == self.name if self.parent is not None: answer &= self.parent is inst.parent if self.fullname is not None: if inst.name: answer &= self.fullname == declaration_utils.full_name(inst) else: answer = False return answer def __call__(self, inst): """ .. code-block:: python return self.does_match_exist(inst) """ return self.does_match_exist(inst) def apply_visitor(visitor, decl_inst): """ Applies a visitor on declaration instance. :param visitor: instance :type visitor: :class:`type_visitor_t` or :class:`decl_visitor_t` """ fname = 'visit_' + \ decl_inst.__class__.__name__[:-2] # removing '_t' from class name if not hasattr(visitor, fname): raise runtime_errors.visit_function_has_not_been_found_t( visitor, decl_inst) return getattr(visitor, fname)() pygccxml-3.0.2/src/pygccxml/declarations/algorithms_cache.py000066400000000000000000000162211476564735400243240ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Defines classes that will keep results of different calculations. """ class declaration_algs_cache_t(object): def __init__(self): object.__init__(self) self._enabled = True self._full_name = None self._full_partial_name = None self._access_type = None self._declaration_path = None self._partial_declaration_path = None self._container_key_type = None self._container_element_type = None self._cmp_data = None self._normalized_name = None self._normalized_partial_name = None self._normalized_full_name_true = None self._normalized_full_name_false = None self._container_traits = None def disable(self): self._enabled = False def enable(self): self._enabled = True @property def enabled(self): return self._enabled @property def full_name(self): return self._full_name @full_name.setter def full_name(self, fname): if not self.enabled: fname = None self._full_name = fname @property def container_traits(self): return self._container_traits @container_traits.setter def container_traits(self, container_traits): if not self.enabled: container_traits = None self._container_traits = container_traits @property def full_partial_name(self): return self._full_partial_name @full_partial_name.setter def full_partial_name(self, fname): if not self.enabled: fname = None self._full_partial_name = fname @property def access_type(self): return self._access_type @access_type.setter def access_type(self, access_type): if not self.enabled: access_type = None self._access_type = access_type @property def declaration_path(self): return self._declaration_path @declaration_path.setter def declaration_path(self, declaration_path): if not self.enabled: declaration_path = None self._declaration_path = declaration_path @property def partial_declaration_path(self): return self._partial_declaration_path @partial_declaration_path.setter def partial_declaration_path(self, partial_declaration_path): if not self.enabled: partial_declaration_path = None self._partial_declaration_path = partial_declaration_path @property def container_element_type(self): return self._container_element_type @container_element_type.setter def container_element_type(self, etype): if not self.enabled: etype = None self._container_element_type = etype @property def container_key_type(self): return self._container_key_type @container_key_type.setter def container_key_type(self, ktype): if not self.enabled: ktype = None self._container_key_type = ktype @property def normalized_name(self): return self._normalized_name @normalized_name.setter def normalized_name(self, normalized_name): if not self.enabled: normalized_name = None self._normalized_name = normalized_name @property def normalized_partial_name(self): return self._normalized_partial_name @normalized_partial_name.setter def normalized_partial_name(self, normalized_partial_name): if not self.enabled: normalized_partial_name = None self._normalized_partial_name = normalized_partial_name @property def normalized_full_name_true(self): return self._normalized_full_name_true @normalized_full_name_true.setter def normalized_full_name_true(self, normalized_full_name_true): if not self.enabled: normalized_full_name_true = None self._normalized_full_name_true = normalized_full_name_true @property def normalized_full_name_false(self): return self._normalized_full_name_false @normalized_full_name_false.setter def normalized_full_name_false(self, normalized_full_name_false): if not self.enabled: normalized_full_name_false = None self._normalized_full_name_false = normalized_full_name_false @property def cmp_data(self): """Data used for comparison between declarations.""" return self._cmp_data @cmp_data.setter def cmp_data(self, cmp_data): """Data used for comparison between declarations.""" if not self.enabled: cmp_data = None self._cmp_data = cmp_data def reset(self): self.full_name = None self.full_partial_name = None self.access_type = None self.declaration_path = None self.partial_declaration_path = None self.container_key_type = None self.container_element_type = None self.cmp_data = None self.normalized_name = None self.normalized_partial_name = None self.normalized_full_name_true = None self.normalized_full_name_false = None self.container_traits = None def reset_name_based(self): self.full_name = None self.full_partial_name = None self.declaration_path = None self.partial_declaration_path = None self.container_key_type = None self.container_element_type = None self.cmp_data = None self.normalized_name = None self.normalized_partial_name = None self.normalized_full_name_true = None self.normalized_full_name_false = None self.container_traits = None def reset_access_type(self): self.access_type = None class type_algs_cache_t(object): enabled = True @staticmethod def disable(): type_algs_cache_t.enabled = False @staticmethod def enable(): type_algs_cache_t.enabled = True def __init__(self): object.__init__(self) self._remove_alias = None self._decl_string = None self._partial_decl_string = None @property def remove_alias(self): return self._remove_alias @remove_alias.setter def remove_alias(self, remove_alias): if not type_algs_cache_t.enabled: remove_alias = None self._remove_alias = remove_alias @property def decl_string(self): return self._decl_string @decl_string.setter def decl_string(self, decl_string): if not type_algs_cache_t.enabled: decl_string = None self._decl_string = decl_string @property def partial_decl_string(self): return self._partial_decl_string @partial_decl_string.setter def partial_decl_string(self, partial_decl_string): if not type_algs_cache_t.enabled: partial_decl_string = None self._partial_decl_string = partial_decl_string def reset(self): self.remove_alias = None self.decl_string = None self.partial_decl_string = None pygccxml-3.0.2/src/pygccxml/declarations/byte_info.py000066400000000000000000000026201476564735400230040ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt class byte_info(object): """ This class stores information about the byte size and byte align values from a declaration/type. """ def __init__(self): self._byte_size = 0 self._byte_align = 0 @property def byte_size(self): """ Size of this declaration/type in bytes Returns: int: Size of this declaration/type in bytes """ return self._byte_size @byte_size.setter def byte_size(self, new_byte_size): """ Set size of this declaration/type in bytes Args: new_byte_size (int): Size of this declaration/type in bytes """ self._byte_size = new_byte_size @property def byte_align(self): """ Alignment of this declaration/type in bytes Returns: int: Alignment of this declaration/type in bytes """ return self._byte_align @byte_align.setter def byte_align(self, new_byte_align): """ Set size of alignment of this declaration/type in bytes Args: new_byte_align (int): Alignment of this declaration/type in bytes """ self._byte_align = new_byte_align pygccxml-3.0.2/src/pygccxml/declarations/call_invocation.py000066400000000000000000000040001476564735400241640ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Free function invocation parser The parser is able to extract function name and list of arguments from a function invocation statement. For example, for the following code .. code-block:: c++ do_something( x1, x2, x3 ) the parser will extract - function name - `do_something` - argument names - `[ x1, x2, x3 ]` """ from . import pattern_parser __THE_PARSER = pattern_parser.parser_t('(', ')', ',') def is_call_invocation(declaration_string): """ Returns True if `declaration_string` is a function invocation. :param declaration_string: string that should be checked for pattern. :type declaration_string: str :rtype: bool """ return __THE_PARSER.has_pattern(declaration_string) def name(declaration_string): """ Returns the name of a function. :type declaration_string: str :rtype: str """ return __THE_PARSER.name(declaration_string) def args(declaration_string): """ Returns list of function arguments :type declaration_string: str :rtype: [str] """ return __THE_PARSER.args(declaration_string) NOT_FOUND = __THE_PARSER.NOT_FOUND def find_args(text, start=None): """ Finds arguments within function invocation. :type text: str :rtype: [ arguments ] or :data:NOT_FOUND if arguments could not be found. """ return __THE_PARSER.find_args(text, start) def split(declaration_string): """ Returns (name, [arguments] ) """ return __THE_PARSER.split(declaration_string) def split_recursive(declaration_string): """ Returns [(name, [arguments])]. """ return __THE_PARSER.split_recursive(declaration_string) def join(name_, args_, arg_separator=None): """ Returns name( argument_1, argument_2, ..., argument_n ). """ return __THE_PARSER.join(name_, args_, arg_separator) pygccxml-3.0.2/src/pygccxml/declarations/calldef.py000066400000000000000000000261541476564735400224300ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines classes, that describes "callable" declarations This modules contains definition for next C++ declarations: - operator - member - free - function - member - free - constructor - destructor """ from . import cpptypes from . import declaration from . import calldef_types # First level in hierarchy of calldef class argument_t(object): """ class, that describes argument of "callable" declaration """ def __init__( self, name='', decl_type=None, default_value=None, attributes=None): object.__init__(self) self._name = name self._default_value = default_value self._decl_type = decl_type self._attributes = attributes def clone(self, **keywd): """constructs new argument_t instance return argument_t( name=keywd.get('name', self.name), decl_type=keywd.get('decl_type', self.decl_type), default_value=keywd.get('default_value', self.default_value), attributes=keywd.get('attributes', self.attributes )) """ return argument_t( name=keywd.get('name', self.name), decl_type=keywd.get('decl_type', self.decl_type), default_value=keywd.get('default_value', self.default_value), attributes=keywd.get('attributes', self.attributes)) def __str__(self): if self.ellipsis: return "..." if self.default_value is None: return "%s %s" % (self.decl_type, self.name) return "%s %s=%s" % (self.decl_type, self.name, self.default_value) def __eq__(self, other): if not isinstance(other, self.__class__): return False return self.name == other.name \ and self.default_value == other.default_value \ and self.decl_type == other.decl_type def __hash__(self): return (hash(self.__class__) ^ hash(self.name) ^ hash(self.default_value) ^ hash(self.decl_type)) def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): if not isinstance(other, self.__class__): return self.__class__.__name__ < other.__class__.__name__ if other.default_value is None: return False if self.default_value is None: return self.name < other.name \ and self.decl_type < other.decl_type return self.name < other.name \ and self.default_value < other.default_value \ and self.decl_type < other.decl_type @property def name(self): """Argument name. @type: str""" return self._name @name.setter def name(self, name): self._name = name @property def ellipsis(self): """bool, if True argument represents ellipsis ( "..." ) in function definition""" return isinstance(self.decl_type, cpptypes.ellipsis_t) @property def default_value(self): """Argument's default value or None. @type: str""" return self._default_value @default_value.setter def default_value(self, default_value): self._default_value = default_value @property def decl_type(self): return self._decl_type @decl_type.setter def decl_type(self, decl_type): self._decl_type = decl_type @property def attributes(self): """GCCXML attributes, set using __attribute__((gccxml("..."))) @type: str""" return self._attributes @attributes.setter def attributes(self, attributes): self._attributes = attributes class calldef_t(declaration.declaration_t): """base class for all "callable" declarations""" def __init__( self, name='', arguments=None, exceptions=None, return_type=None, has_extern=False, does_throw=True, mangled=None): declaration.declaration_t.__init__(self, name) if not arguments: arguments = [] self._arguments = arguments if not exceptions: exceptions = [] self._does_throw = does_throw self._exceptions = exceptions self._return_type = return_type self._has_extern = has_extern self._calling_convention = None self._has_inline = None self._mangled = mangled self._overrides = None def _get__cmp__call_items(self): """ Implementation detail. """ raise NotImplementedError() def _get__cmp__items(self): """ Implementation detail. """ items = [ self.arguments, self.return_type, self.has_extern, self.does_throw, self.exceptions.sort(), self.has_inline] items.extend(self._get__cmp__call_items()) return items def __eq__(self, other): if not declaration.declaration_t.__eq__(self, other): return False return self.return_type == other.return_type \ and self.arguments == other.arguments \ and self.has_extern == other.has_extern \ and self.does_throw == other.does_throw \ and self.exceptions.sort() == other.exceptions.sort() def __hash__(self): return (super(calldef_t, self).__hash__() ^ hash(self.return_type) ^ hash(self.name)) @property def arguments(self): """The argument list. @type: list of :class:`argument_t`""" return self._arguments @arguments.setter def arguments(self, arguments): self._arguments = arguments @property def has_ellipsis(self): return self.arguments and self.arguments[-1].ellipsis @property def argument_types(self): """list of all argument types""" return [arg.decl_type for arg in self.arguments] @property def required_args(self): """list of all required arguments""" r_args = [] for arg in self.arguments: if not arg.default_value: r_args.append(arg) else: break return r_args @property def optional_args(self): """list of all optional arguments, the arguments that have default value""" return self.arguments[len(self.required_args):] @property def overrides(self): """If a function is marked as an overrides, contains the declaration which this function overrides.""" return self._overrides @overrides.setter def overrides(self, overrides): self._overrides = overrides @property def does_throw(self): """If False, than function does not throw any exception. In this case, function was declared with empty throw statement.""" return self._does_throw @does_throw.setter def does_throw(self, does_throw): self._does_throw = does_throw @property def exceptions(self): """ The list of exceptions. Useless with c++17 and above as dynamich exceptions are not allowed anymore: https://developers.redhat.com/articles/2021/08/06/porting-your-code-c17-gcc-11#exception_specification_changes # noqa @type: list of :class:`declaration_t` """ return self._exceptions @exceptions.setter def exceptions(self, exceptions): """ Useless with c++17 and above as dynamich exceptions are not allowed anymore: https://developers.redhat.com/articles/2021/08/06/porting-your-code-c17-gcc-11#exception_specification_changes # noqa """ self._exceptions = exceptions @property def return_type(self): """The type of the return value of the "callable" or None (constructors). @type: :class:`type_t`""" return self._return_type @return_type.setter def return_type(self, return_type): self._return_type = return_type @property def overloads(self): """A list of overloaded "callables" (i.e. other callables with the same name within the same scope. @type: list of :class:`calldef_t` """ if not self.parent: return [] # finding all functions with the same name return self.parent.calldefs( name=self.name, function=lambda decl: decl is not self, allow_empty=True, recursive=False) @property def has_extern(self): """Was this callable declared as "extern"? @type: bool""" return self._has_extern @has_extern.setter def has_extern(self, has_extern): self._has_extern = has_extern @property def has_inline(self): """Was this callable declared with "inline" specifier @type: bool""" return self._has_inline @has_inline.setter def has_inline(self, has_inline): self._has_inline = has_inline def _report(self, *args, **keywd): # Implementation detail. Will be removed when the deprecated # i_depend_on_them method is dropped from . import dependencies # pylint: disable=R0401 return dependencies.dependency_info_t(self, *args, **keywd) def i_depend_on_them(self, recursive=True): self._warn_deprecated() answer = [] if self.return_type: answer.append( self._report(self.return_type, hint="return type")) for arg in self.arguments: answer.append(self._report(arg.decl_type)) for exc in self.exceptions: answer.append(self._report(exc, hint="exception")) return answer # pylint: disable=R0201 def guess_calling_convention(self): """This function should be overriden in the derived classes and return more-or-less successfull guess about calling convention""" return calldef_types.CALLING_CONVENTION_TYPES.UNKNOWN @property def calling_convention(self): """function calling convention. See :class:CALLING_CONVENTION_TYPES class for possible values""" if self._calling_convention is None: self._calling_convention = \ calldef_types.CALLING_CONVENTION_TYPES.extract(self.attributes) if not self._calling_convention: self._calling_convention = self.guess_calling_convention() return self._calling_convention @calling_convention.setter def calling_convention(self, cc): self._calling_convention = cc @property def mangled(self): """ Unique declaration name generated by the compiler. :return: the mangled name :rtype: str """ return self.get_mangled_name() @mangled.setter def mangled(self, mangled): self._mangled = mangled pygccxml-3.0.2/src/pygccxml/declarations/calldef_members.py000066400000000000000000000147531476564735400241440ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import calldef from . import declaration_utils from . import cpptypes from . import calldef_types # Second level in hierarchy of calldef class member_calldef_t(calldef.calldef_t): """base class for "callable" declarations that defined within C++ class or struct""" def __init__( self, virtuality=None, has_const=None, has_static=None, *args, **keywords): calldef.calldef_t.__init__(self, *args, **keywords) self._virtuality = virtuality self._has_const = has_const self._has_static = has_static def __str__(self): # Get the full name of the calldef... name = declaration_utils.full_name(self) if name[:2] == "::": name = name[2:] # Add the arguments... args = [str(a) for a in self.arguments] res = "%s(%s)" % (name, ", ".join(args)) # Add the return type... if self.return_type is not None: res = "%s %s" % (self.return_type, res) # const? if self.has_const: res += " const" # static? if self.has_static: res = "static " + res # Append the declaration class cls = self.__class__.__name__ if cls[-2:] == "_t": cls = cls[:-2] cls = cls.replace('_', ' ') return "%s [%s]" % (res, cls) def _get__cmp__call_items(self): """implementation details""" return [self.virtuality, self.has_static, self.has_const] def __eq__(self, other): if not calldef.calldef_t.__eq__(self, other): return False return self.virtuality == other.virtuality \ and self.has_static == other.has_static \ and self.has_const == other.has_const __hash__ = calldef.calldef_t.__hash__ @property def virtuality(self): """Describes the "virtuality" of the member (as defined by the string constants in the class :class:VIRTUALITY_TYPES). @type: str""" return self._virtuality @virtuality.setter def virtuality(self, virtuality): assert virtuality in calldef_types.VIRTUALITY_TYPES.ALL self._virtuality = virtuality @property def access_type(self): """Return the access type of the member (as defined by the string constants in the class :class:ACCESS_TYPES. @type: str""" return self.parent.find_out_member_access_type(self) @property def has_const(self): """describes, whether "callable" has const modifier or not""" return self._has_const @has_const.setter def has_const(self, has_const): self._has_const = has_const @property def has_static(self): """describes, whether "callable" has static modifier or not""" return self._has_static @has_static.setter def has_static(self, has_static): self._has_static = has_static def function_type(self): """returns function type. See :class:`type_t` hierarchy""" if self.has_static: return cpptypes.free_function_type_t( return_type=self.return_type, arguments_types=[arg.decl_type for arg in self.arguments]) return cpptypes.member_function_type_t( class_inst=self.parent, return_type=self.return_type, arguments_types=[arg.decl_type for arg in self.arguments], has_const=self.has_const) def create_decl_string(self, with_defaults=True): f_type = self.function_type() if with_defaults: return f_type.decl_string return f_type.partial_decl_string def guess_calling_convention(self): if self.has_static: return calldef_types.CALLING_CONVENTION_TYPES.SYSTEM_DEFAULT return calldef_types.CALLING_CONVENTION_TYPES.THISCALL class operator_t(calldef.calldef_t): """ Base class for "operator" declarations. Operators are constructs which behave like functions. Therefore, operator_t has calldef_t as parent class. """ OPERATOR_WORD_LEN = len('operator') def __init__(self, *args, **keywords): calldef.calldef_t.__init__(self, *args, **keywords) def _get__cmp__call_items(self): raise NotImplementedError() @property def symbol(self): """operator's symbol. For example: operator+, symbol is equal to '+'""" return self.name[operator_t.OPERATOR_WORD_LEN:].strip() # Third level in hierarchy of calldef class member_function_t(member_calldef_t): """describes member function declaration""" def __init__(self, *args, **keywords): member_calldef_t.__init__(self, *args, **keywords) class constructor_t(member_calldef_t): """describes constructor declaration""" def __init__(self, *args, **keywords): member_calldef_t.__init__(self, *args, **keywords) self._explicit = True @property def explicit(self): """True, if constructor has "explicit" keyword, False otherwise @type: bool""" return self._explicit @explicit.setter def explicit(self, explicit): self._explicit = explicit in [True, '1'] def __str__(self): # Get the full name of the calldef... name = declaration_utils.full_name(self) if name[:2] == "::": name = name[2:] # Add the arguments... args = [str(a) for a in self.arguments] res = "%s(%s)" % (name, ", ".join(args)) # Append the declaration class cls = 'constructor' return "%s [%s]" % (res, cls) class destructor_t(member_calldef_t): """describes deconstructor declaration""" def __init__(self, *args, **keywords): member_calldef_t.__init__(self, *args, **keywords) class member_operator_t(member_calldef_t, operator_t): """describes member operator declaration""" def __init__(self, *args, **keywords): member_calldef_t.__init__(self, *args, **keywords) operator_t.__init__(self, *args, **keywords) self.__class_types = None class casting_operator_t(member_calldef_t, operator_t): """describes casting operator declaration""" def __init__(self, *args, **keywords): member_calldef_t.__init__(self, *args, **keywords) operator_t.__init__(self, *args, **keywords) pygccxml-3.0.2/src/pygccxml/declarations/calldef_types.py000066400000000000000000000024611476564735400236470ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import re class VIRTUALITY_TYPES(object): """class that defines "virtuality" constants""" NOT_VIRTUAL = 'not virtual' VIRTUAL = 'virtual' PURE_VIRTUAL = 'pure virtual' ALL = [NOT_VIRTUAL, VIRTUAL, PURE_VIRTUAL] # preserving backward compatebility FUNCTION_VIRTUALITY_TYPES = VIRTUALITY_TYPES class CALLING_CONVENTION_TYPES(object): """class that defines "calling convention" constants""" UNKNOWN = '' CDECL = 'cdecl' STDCALL = 'stdcall' THISCALL = 'thiscall' FASTCALL = 'fastcall' SYSTEM_DEFAULT = '<<>>' all = (UNKNOWN, CDECL, STDCALL, THISCALL, FASTCALL, SYSTEM_DEFAULT) pattern = re.compile( r'.*(?:^|\s)(?:__)?(?Pcdecl|stdcall|thiscall|fastcall)(?:__)?.*') @staticmethod def extract(text, default=UNKNOWN): """extracts calling convention from the text. If the calling convention could not be found, the "default"is used""" if not text: return default found = CALLING_CONVENTION_TYPES.pattern.match(text) if found: return found.group('cc') return default pygccxml-3.0.2/src/pygccxml/declarations/class_declaration.py000066400000000000000000000375571476564735400245210ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines classes, that describes C++ classes This modules contains definition for next C++ declarations: - class definition - class declaration - small helper class for describing C++ class hierarchy """ from . import scopedef from . import declaration_utils from . import declaration from . import templates from . import byte_info from . import elaborated_info from . import type_traits class ACCESS_TYPES(object): """class that defines "access" constants""" PUBLIC = "public" PRIVATE = "private" PROTECTED = "protected" ALL = [PUBLIC, PRIVATE, PROTECTED] class CLASS_TYPES(object): """class that defines "class" type constants""" CLASS = "class" STRUCT = "struct" UNION = "union" ALL = [CLASS, STRUCT, UNION] def get_partial_name(name): from . import container_traits # prevent cyclic dependencies ct = container_traits.find_container_traits(name) if ct: return ct.remove_defaults(name) if templates.is_instantiation(name): tmpl_name, args = templates.split(name) for i, arg_name in enumerate(args): args[i] = get_partial_name(arg_name.strip()) return templates.join(tmpl_name, args) return name class hierarchy_info_t(object): """describes class relationship""" def __init__(self, related_class=None, access=None, is_virtual=False): """creates class that contains partial information about class relationship""" if related_class: assert isinstance(related_class, class_t) self._related_class = related_class if access: assert access in ACCESS_TYPES.ALL self._access = access self._is_virtual = is_virtual self._declaration_path = None self._declaration_path_hash = None def __eq__(self, other): if not isinstance(other, hierarchy_info_t): return False return (self.declaration_path_hash == other.declaration_path_hash) \ and self._declaration_path == other._declaration_path \ and self._access == other._access \ and self._is_virtual == other._is_virtual def __hash__(self): return self.declaration_path_hash def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): if not isinstance(other, self.__class__): return self.__class__.__name__ < other.__class__.__name__ return (self.declaration_path, self.access, self.is_virtual) < \ (other.declaration_path, other.access, other.is_virtual) @property def related_class(self): """reference to base or derived :class:`class `""" return self._related_class @related_class.setter def related_class(self, new_related_class): if new_related_class: assert isinstance(new_related_class, class_t) self._related_class = new_related_class self._declaration_path = None self._declaration_path_hash = None @property def access(self): return self._access @access.setter def access(self, new_access): assert new_access in ACCESS_TYPES.ALL self._access = new_access # TODO: Why is there an access_type / access which are the same ? @property def access_type(self): """describes :class:`hierarchy type `""" return self.access @access_type.setter def access_type(self, new_access_type): self.access = new_access_type # TODO: check whether GCC XML support this and if so parser this # information @property def is_virtual(self): """indicates whether the inheritance is virtual or not""" return self._is_virtual @is_virtual.setter def is_virtual(self, new_is_virtual): self._is_virtual = new_is_virtual @property def declaration_path(self): if self._declaration_path is None: self._declaration_path = declaration_utils.declaration_path( self.related_class) return self._declaration_path @property def declaration_path_hash(self): if self._declaration_path_hash is None: self._declaration_path_hash = hash(tuple(self.declaration_path)) return self._declaration_path_hash class class_declaration_t(declaration.declaration_t): """describes class declaration""" def __init__(self, name=''): """creates class that describes C++ class declaration ( and not definition )""" declaration.declaration_t.__init__(self, name) self._aliases = [] def _get__cmp__items(self): """implementation details""" return [] def i_depend_on_them(self, recursive=True): self._warn_deprecated() return [] @property def aliases(self): """List of :class:`aliases ` to this instance""" return self._aliases @aliases.setter def aliases(self, new_aliases): self._aliases = new_aliases def _get_partial_name_impl(self): return get_partial_name(self.name) class class_t( scopedef.scopedef_t, byte_info.byte_info, elaborated_info.elaborated_info): """describes class definition""" def __init__( self, name='', class_type=CLASS_TYPES.CLASS, is_abstract=False): """creates class that describes C++ class definition""" scopedef.scopedef_t.__init__(self, name) byte_info.byte_info.__init__(self) elaborated_info.elaborated_info.__init__(self, class_type) if class_type: assert class_type in CLASS_TYPES.ALL self._class_type = class_type self._bases = [] self._derived = [] self._is_abstract = is_abstract self._public_members = [] self._private_members = [] self._protected_members = [] self._aliases = [] self._recursive_bases = None self._recursive_derived = None def _get_name_impl(self): return self._name def __str__(self): name = declaration_utils.full_name(self) if name[:2] == "::": name = name[2:] return "%s [%s]" % (name, self.class_type) def _get__cmp__scope_items(self): """implementation details""" return [ self.class_type, [declaration_utils.declaration_path(base.related_class) for base in self.bases].sort(), [declaration_utils.declaration_path(derive.related_class) for derive in self.derived].sort(), self.is_abstract, self.public_members.sort(), self.private_members.sort(), self.protected_members.sort()] def __eq__(self, other): if not scopedef.scopedef_t.__eq__(self, other): return False return self.class_type == other.class_type \ and [declaration_utils.declaration_path(base.related_class) for base in self.bases].sort() \ == [declaration_utils.declaration_path(base.related_class) for base in other.bases].sort() \ and [declaration_utils.declaration_path(derive.related_class) for derive in self.derived].sort() \ == [declaration_utils.declaration_path(derive.related_class) for derive in other.derived].sort() \ and self.is_abstract == other.is_abstract \ and self.public_members.sort() \ == other.public_members.sort() \ and self.private_members.sort() \ == other.private_members.sort() \ and self.protected_members.sort() \ == other.protected_members.sort() def __hash__(self): return hash(self.class_type) @property def class_type(self): """describes class :class:`type `""" return self._class_type @class_type.setter def class_type(self, new_class_type): if new_class_type: assert new_class_type in CLASS_TYPES.ALL self._class_type = new_class_type @property def bases(self): """list of :class:`base classes `""" return self._bases @bases.setter def bases(self, new_bases): self._bases = new_bases @property def recursive_bases(self): """list of all :class:`base classes `""" if self._recursive_bases is None: to_go = self.bases[:] all_bases = [] while to_go: base = to_go.pop() if base not in all_bases: all_bases.append(base) to_go.extend(base.related_class.bases) self._recursive_bases = all_bases return self._recursive_bases @property def derived(self): """list of :class:`derived classes `""" return self._derived @derived.setter def derived(self, new_derived): self._derived = new_derived @property def recursive_derived(self): """list of all :class:`derive classes `""" if self._recursive_derived is None: to_go = self.derived[:] all_derived = [] while to_go: derive = to_go.pop() if derive not in all_derived: all_derived.append(derive) to_go.extend(derive.related_class.derived) self._recursive_derived = all_derived return self._recursive_derived @property def is_abstract(self): """describes whether class abstract or not""" return self._is_abstract @is_abstract.setter def is_abstract(self, is_abstract): self._is_abstract = is_abstract @property def public_members(self): """list of all public :class:`members `""" return self._public_members @public_members.setter def public_members(self, new_public_members): self._public_members = new_public_members @property def private_members(self): """list of all private :class:`members `""" return self._private_members @private_members.setter def private_members(self, new_private_members): self._private_members = new_private_members @property def protected_members(self): """list of all protected :class:`members `""" return self._protected_members @protected_members.setter def protected_members(self, new_protected_members): self._protected_members = new_protected_members @property def aliases(self): """List of :class:`aliases ` to this instance""" return self._aliases @aliases.setter def aliases(self, new_aliases): self._aliases = new_aliases def _get_declarations_impl(self): return self.get_members() def get_members(self, access=None): """ returns list of members according to access type If access equals to None, then returned list will contain all members. You should not modify the list content, otherwise different optimization data will stop work and may to give you wrong results. :param access: describes desired members :type access: :class:ACCESS_TYPES :rtype: [ members ] """ if access == ACCESS_TYPES.PUBLIC: return self.public_members elif access == ACCESS_TYPES.PROTECTED: return self.protected_members elif access == ACCESS_TYPES.PRIVATE: return self.private_members all_members = [] all_members.extend(self.public_members) all_members.extend(self.protected_members) all_members.extend(self.private_members) return all_members def adopt_declaration(self, decl, access): """adds new declaration to the class :param decl: reference to a :class:`declaration_t` :param access: member access type :type access: :class:ACCESS_TYPES """ if access == ACCESS_TYPES.PUBLIC: self.public_members.append(decl) elif access == ACCESS_TYPES.PROTECTED: self.protected_members.append(decl) elif access == ACCESS_TYPES.PRIVATE: self.private_members.append(decl) else: raise RuntimeError("Invalid access type: %s." % access) decl.parent = self decl.cache.reset() decl.cache.access_type = access def remove_declaration(self, decl): """ removes decl from members list :param decl: declaration to be removed :type decl: :class:`declaration_t` """ access_type = self.find_out_member_access_type(decl) if access_type == ACCESS_TYPES.PUBLIC: container = self.public_members elif access_type == ACCESS_TYPES.PROTECTED: container = self.protected_members else: # decl.cache.access_type == ACCESS_TYPES.PRVATE container = self.private_members del container[container.index(decl)] decl.cache.reset() def find_out_member_access_type(self, member): """ returns member access type :param member: member of the class :type member: :class:`declaration_t` :rtype: :class:ACCESS_TYPES """ assert member.parent is self if not member.cache.access_type: if member in self.public_members: access_type = ACCESS_TYPES.PUBLIC elif member in self.protected_members: access_type = ACCESS_TYPES.PROTECTED elif member in self.private_members: access_type = ACCESS_TYPES.PRIVATE else: raise RuntimeError( "Unable to find member within internal members list.") member.cache.access_type = access_type return access_type else: return member.cache.access_type def __find_out_member_dependencies(self, access_type): members = self.get_members(access_type) answer = [] for mem in members: answer.extend(mem.i_depend_on_them(recursive=True)) member_ids = set([id(m) for m in members]) for dependency in answer: if id(dependency.declaration) in member_ids: dependency.access_type = access_type return answer def i_depend_on_them(self, recursive=True): self._warn_deprecated() # Deprecated method. The cyclic import will be removed with the method # in the next release, so we can disable the cyclic import check here. from . import dependencies # pylint: disable=R0401 answer = [] for base in self.bases: answer.append( dependencies.dependency_info_t( self, base.related_class, base.access_type, "base class")) if recursive: for access_type in ACCESS_TYPES.ALL: answer.extend(self.__find_out_member_dependencies(access_type)) return answer def _get_partial_name_impl(self): if type_traits.is_std_string(self): return 'string' if type_traits.is_std_wstring(self): return 'wstring' return get_partial_name(self.name) @property def top_class(self): """reference to a parent class, which contains this class and defined within a namespace if this class is defined under a namespace, self will be returned""" curr = self parent = self.parent while isinstance(parent, class_t): curr = parent parent = parent.parent return curr class_types = (class_t, class_declaration_t) pygccxml-3.0.2/src/pygccxml/declarations/comment.py000066400000000000000000000070401476564735400224710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Describe a C++ comment declaration. """ from . import location as pygccxml_location class comment_t(object): def __init__(self, name='', declarations=None): """ Creates an object that describes a C++ comment declaration. Args: """ self._location = {} self._begin_line = 0 self._begin_column = 0 self._begin_offset = 0 self._end_line = 0 self._end_column = 0 self._end_offset = 0 self._text = "" @property def location(self): """An instance of the location_t class which contains the file where the comment can be found. @type: location_t """ return self._location @location.setter def location(self, location): if not isinstance(location, pygccxml_location.location_t): raise ValueError( "'location' must be a location_t (got a %s instead)" % type(location).__name__) self._location = location @property def begin_line(self): """An integer value which corresponds to the line of the file where the comment begins @type: int """ return self._begin_line @begin_line.setter def begin_line(self, begin_line): self._begin_line = int(begin_line) @property def begin_offset(self): """An integer value representing the number of bytes from the beginning of the file to the start of the comment @type: int """ return self._begin_offset @begin_offset.setter def begin_offset(self, begin_offset): self._begin_offset = int(begin_offset) @property def begin_column(self): """An integer value which corresponds to the column of the file where the comment begins @type: int """ return self._begin_column @begin_column.setter def begin_column(self, begin_column): self._begin_column = int(begin_column) @property def end_line(self): """An integer value which corresponds to the line of the file where the comment ends @type: int """ return self._end_line @end_line.setter def end_line(self, end_line): self._end_line = int(end_line) @property def end_offset(self): """An integer value representing the number of bytes from the beginning of the file to the end of the comment @type: int """ return self._end_offset @end_offset.setter def end_offset(self, end_offset): self._end_offset = int(end_offset) @property def end_column(self): """An integer value which corresponds to the column of character in a line of the file where the comment ends @type: int """ return self._end_column @end_column.setter def end_column(self, end_column): self._end_column = int(end_column) @property def text(self): """A list of strings where each entry in the list is one line of the comment. These comments will not end in a newline @type: list """ return self._text @text.setter def text(self, text): if not isinstance(text, list): raise ValueError( "'text' must be a list (got a %s instead)" % type(text).__name__) self._text = text pygccxml-3.0.2/src/pygccxml/declarations/container_traits.py000066400000000000000000000571651476564735400244140ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Define a few algorithms that deal with different properties of std containers. """ import string from . import cpptypes from . import templates from . import type_traits from . import namespace from . import class_declaration from . import traits_impl_details from .. import utils std_namespaces = ('std', 'stdext', '__gnu_cxx') # Take into account different equivalences (with or without spaces) string_equivalences = type_traits.string_equivalences + \ type_traits.normalized_string_equivalences string_equivalences = [ v for v in string_equivalences if not v == "std::string"] wstring_equivalences = type_traits.wstring_equivalences + \ type_traits.normalized_wstring_equivalences wstring_equivalences = [ v for v in wstring_equivalences if not v == "std::wstring"] class defaults_eraser(object): def __init__(self, unordered_maps_and_sets): self.unordered_maps_and_sets = unordered_maps_and_sets def normalize(self, type_str): return type_str.replace(' ', '') @staticmethod def replace_basic_string(cls_name): strings = { "std::string": string_equivalences, "std::wstring": wstring_equivalences } new_name = cls_name for short_name, long_names in strings.items(): for lname in long_names: new_name = new_name.replace(lname, short_name) return new_name def decorated_call_prefix(self, cls_name, text, doit): has_text = cls_name.startswith(text) if has_text: cls_name = cls_name[len(text):] answer = doit(cls_name) if has_text: answer = text + answer return answer def decorated_call_suffix(self, cls_name, text, doit): has_text = cls_name.endswith(text) if has_text: cls_name = cls_name[: len(text)] answer = doit(cls_name) if has_text: answer = answer + text return answer def erase_call(self, cls_name): c_traits = find_container_traits(cls_name) if not c_traits: return cls_name return c_traits.remove_defaults(cls_name) def no_std(self, cls_name): return self.decorated_call_prefix( cls_name, 'std::' + utils.get_tr1(cls_name), self.erase_call) def no_stdext(self, cls_name): return self.decorated_call_prefix( cls_name, 'stdext::', self.no_std) def no_gnustd(self, cls_name): return self.decorated_call_prefix( cls_name, '__gnu_cxx::', self.no_stdext) def no_const(self, cls_name): return self.decorated_call_prefix( cls_name, 'const ', self.no_gnustd) def no_end_const(self, cls_name): return self.decorated_call_suffix( cls_name, ' const', self.no_const) def erase_recursive(self, cls_name): return self.no_end_const(cls_name) def erase_allocator(self, cls_name, default_allocator='std::allocator'): c_name, c_args = templates.split(cls_name) if len(c_args) != 2: return value_type = c_args[0] tmpl = string.Template( "$container<$value_type, $allocator<$value_type>>") tmpl = tmpl.substitute( container=c_name, value_type=value_type, allocator=default_allocator) if self.normalize(cls_name) == \ self.normalize(tmpl): return templates.join( c_name, [self.erase_recursive(value_type)]) def erase_container(self, cls_name, default_container_name='std::deque'): c_name, c_args = templates.split(cls_name) if len(c_args) != 2: return value_type = c_args[0] dc_no_defaults = self.erase_recursive(c_args[1]) if self.normalize(dc_no_defaults) == self.normalize( templates.join(default_container_name, [value_type])): return templates.join( c_name, [self.erase_recursive(value_type)]) def erase_container_compare( self, cls_name, default_container_name='std::vector', default_compare='std::less'): c_name, c_args = templates.split(cls_name) if len(c_args) != 3: return dc_no_defaults = self.erase_recursive(c_args[1]) if self.normalize(dc_no_defaults) != self.normalize( templates.join(default_container_name, [c_args[0]])): return dcomp_no_defaults = self.erase_recursive(c_args[2]) if self.normalize(dcomp_no_defaults) != self.normalize( templates.join(default_compare, [c_args[0]])): return value_type = self.erase_recursive(c_args[0]) return templates.join(c_name, [value_type]) def erase_compare_allocator( self, cls_name, default_compare='std::less', default_allocator='std::allocator'): c_name, c_args = templates.split(cls_name) if len(c_args) != 3: return value_type = c_args[0] tmpl = string.Template( "$container<$value_type, $compare<$value_type>, " + "$allocator<$value_type>>") tmpl = tmpl.substitute( container=c_name, value_type=value_type, compare=default_compare, allocator=default_allocator) if self.normalize(cls_name) == \ self.normalize(tmpl): return templates.join( c_name, [self.erase_recursive(value_type)]) def erase_map_compare_allocator( self, cls_name, default_compare='std::less', default_allocator='std::allocator'): c_name, c_args = templates.split(cls_name) if len(c_args) != 4: return key_type = c_args[0] mapped_type = c_args[1] tmpls = [ string.Template( "$container<$key_type, $mapped_type, $compare<$key_type>, " + "$allocator>>"), string.Template( "$container<$key_type, $mapped_type, $compare<$key_type>, " + "$allocator>>"), string.Template( "$container<$key_type, $mapped_type, $compare<$key_type>, " + "$allocator>>")] for tmpl in tmpls: tmpl = tmpl.substitute( container=c_name, key_type=key_type, mapped_type=mapped_type, compare=default_compare, allocator=default_allocator) if self.normalize(cls_name) == self.normalize(tmpl): return templates.join( c_name, [self.erase_recursive(key_type), self.erase_recursive(mapped_type)]) def erase_hash_allocator(self, cls_name): c_name, c_args = templates.split(cls_name) if len(c_args) < 3: return default_less = 'std::less' default_equal_to = 'std::equal_to' default_allocator = 'std::allocator' if len(c_args) == 3: default_hash = 'hash_compare' tmpl = ( "$container<$value_type, $hash<$value_type, " + "$less<$value_type>>, $allocator<$value_type>>") elif len(c_args) == 4: default_hash = 'hash' tmpl = ( "$container<$value_type, $hash<$value_type>, " + "$equal_to<$value_type>, $allocator<$value_type>>") else: return value_type = c_args[0] template = string.Template(tmpl) for ns in std_namespaces: inst = template.substitute( container=c_name, value_type=value_type, hash=ns + '::' + utils.get_tr1(cls_name) + default_hash, less=default_less, equal_to=default_equal_to, allocator=default_allocator) if self.normalize(cls_name) == \ self.normalize(inst): return templates.join( c_name, [self.erase_recursive(value_type)]) def erase_hashmap_compare_allocator(self, cls_name): c_name, c_args = templates.split(cls_name) if self.unordered_maps_and_sets: default_less_or_hash = 'std::hash' else: default_less_or_hash = 'std::less' default_allocator = 'std::allocator' default_equal_to = 'std::equal_to' if len(c_args) > 2: key_type = c_args[0] mapped_type = c_args[1] else: return if len(c_args) == 4: default_hash = 'hash_compare' tmpl = string.Template( "$container<$key_type, $mapped_type, " + "$hash<$key_type, $less<$key_type>>, " + "$allocator>>") if key_type.startswith('const ') or key_type.endswith(' const'): tmpl = string.Template( "$container<$key_type, $mapped_type, $hash<$key_type, " + "$less<$key_type>>, $allocator>>") elif len(c_args) == 5: default_hash = 'hash' if self.unordered_maps_and_sets: tmpl = string.Template( "$container<$key_type, $mapped_type, " + "$hash<$key_type>, " + "$equal_to<$key_type>, " + "$allocator>>") if key_type.startswith('const ') or \ key_type.endswith(' const'): tmpl = string.Template( "$container<$key_type, $mapped_type, " + "$hash<$key_type>, " + "$equal_to<$key_type>, " + "$allocator>>") else: tmpl = string.Template( "$container<$key_type, $mapped_type, " "$hash<$key_type >, " + "$equal_to<$key_type>, " "$allocator<$mapped_type>>") if key_type.startswith('const ') or \ key_type.endswith(' const'): # TODO: this template is the same than above. # Make sure why this was needed and if this is # tested. There may be a const missing somewhere. tmpl = string.Template( "$container<$key_type, $mapped_type, " + "$hash<$key_type>, " + "$equal_to<$key_type>, " + "$allocator<$mapped_type>>") else: return for ns in std_namespaces: inst = tmpl.substitute( container=c_name, key_type=key_type, mapped_type=mapped_type, hash=ns + '::' + utils.get_tr1(cls_name) + default_hash, less=default_less_or_hash, equal_to=default_equal_to, allocator=default_allocator) if self.normalize(cls_name) == self.normalize(inst): return templates.join( c_name, [self.erase_recursive(key_type), self.erase_recursive(mapped_type)]) class container_traits_impl_t(object): """ Implements the functionality needed for convenient work with STD container classes Implemented functionality: * find out whether a declaration is STD container or not * find out container value( mapped ) type This class tries to be useful as much as possible. For example, for class declaration (and not definition) it parses the class name in order to extract the information. """ def __init__( self, container_name, element_type_index, element_type_typedef, eraser, key_type_index=None, key_type_typedef=None, unordered_maps_and_sets=False): """ :param container_name: std container name :param element_type_index: position of value\\mapped type within template arguments list :param element_type_typedef: class typedef to the value\\mapped type :param key_type_index: position of key type within template arguments list :param key_type_typedef: class typedef to the key type """ self._name = container_name self.element_type_index = element_type_index self.element_type_typedef = element_type_typedef self.key_type_index = key_type_index self.key_type_typedef = key_type_typedef self.unordered_maps_and_sets = unordered_maps_and_sets # Get the method from defaults_eraser using it's name self.remove_defaults_impl = getattr( defaults_eraser(unordered_maps_and_sets), eraser) def name(self): return self._name def get_container_or_none(self, type_): """ Returns reference to the class declaration or None. """ type_ = type_traits.remove_alias(type_) type_ = type_traits.remove_cv(type_) utils.loggers.queries_engine.debug( "Container traits: cleaned up search %s", type_) if isinstance(type_, cpptypes.declarated_t): cls_declaration = type_traits.remove_alias(type_.declaration) elif isinstance(type_, class_declaration.class_t): cls_declaration = type_ elif isinstance(type_, class_declaration.class_declaration_t): cls_declaration = type_ else: utils.loggers.queries_engine.debug( "Container traits: returning None, type not known\n") return if not cls_declaration.name.startswith(self.name() + '<'): utils.loggers.queries_engine.debug( "Container traits: returning None, " + "declaration starts with " + self.name() + '<\n') return # When using libstd++, some container traits are defined in # std::tr1::. See remove_template_defaults_tester.py. # In this case the is_defined_in_xxx test needs to be done # on the parent decl = cls_declaration if isinstance(type_, class_declaration.class_declaration_t): is_ns = isinstance(type_.parent, namespace.namespace_t) if is_ns and type_.parent.name == "tr1": decl = cls_declaration.parent elif isinstance(type_, cpptypes.declarated_t): is_ns = isinstance(type_.declaration.parent, namespace.namespace_t) if is_ns and type_.declaration.parent.name == "tr1": decl = cls_declaration.parent for ns in std_namespaces: if traits_impl_details.impl_details.is_defined_in_xxx(ns, decl): utils.loggers.queries_engine.debug( "Container traits: get_container_or_none() will return " + cls_declaration.name) # The is_defined_in_xxx check is done on decl, but we return # the original declation so that the rest of the algorithm # is able to work with it. return cls_declaration # This should not happen utils.loggers.queries_engine.debug( "Container traits: get_container_or_none() will return None\n") def is_my_case(self, type_): """ Checks, whether type is STD container or not. """ return bool(self.get_container_or_none(type_)) def class_declaration(self, type_): """ Returns reference to the class declaration. """ utils.loggers.queries_engine.debug( "Container traits: searching class declaration for %s", type_) cls_declaration = self.get_container_or_none(type_) if not cls_declaration: raise TypeError( 'Type "%s" is not instantiation of std::%s' % (type_.decl_string, self.name())) return cls_declaration def is_sequence(self, type_): # raise exception if type is not container self.class_declaration(type_) return self.key_type_index is None def is_mapping(self, type_): return not self.is_sequence(type_) def __find_xxx_type( self, type_, xxx_index, xxx_typedef, cache_property_name): cls_declaration = self.class_declaration(type_) result = getattr(cls_declaration.cache, cache_property_name) if not result: if isinstance(cls_declaration, class_declaration.class_t): xxx_type = cls_declaration.typedef( xxx_typedef, recursive=False).decl_type result = type_traits.remove_declarated(xxx_type) else: xxx_type_str = templates.args(cls_declaration.name)[xxx_index] result = traits_impl_details.impl_details.find_value_type( cls_declaration.top_parent, xxx_type_str) if None is result: raise RuntimeError( "Unable to find out %s '%s' key\\value type." % (self.name(), cls_declaration.decl_string)) setattr(cls_declaration.cache, cache_property_name, result) return result def element_type(self, type_): """returns reference to the class value\\mapped type declaration""" return self.__find_xxx_type( type_, self.element_type_index, self.element_type_typedef, 'container_element_type') def key_type(self, type_): """returns reference to the class key type declaration""" if not self.is_mapping(type_): raise TypeError( 'Type "%s" is not "mapping" container' % str(type_)) return self.__find_xxx_type( type_, self.key_type_index, self.key_type_typedef, 'container_key_type') def remove_defaults(self, type_or_string): """ Removes template defaults from a templated class instantiation. For example: .. code-block:: c++ std::vector< int, std::allocator< int > > will become: .. code-block:: c++ std::vector< int > """ name = type_or_string if not isinstance(type_or_string, str): name = self.class_declaration(type_or_string).name name = defaults_eraser.replace_basic_string(name) if not self.remove_defaults_impl: return name no_defaults = self.remove_defaults_impl(name) if not no_defaults: return name return no_defaults list_traits = container_traits_impl_t( 'list', 0, 'value_type', 'erase_allocator') deque_traits = container_traits_impl_t( 'deque', 0, 'value_type', 'erase_allocator') queue_traits = container_traits_impl_t( 'queue', 0, 'value_type', 'erase_container') priority_queue_traits = container_traits_impl_t( 'priority_queue', 0, 'value_type', 'erase_container_compare') vector_traits = container_traits_impl_t( 'vector', 0, 'value_type', 'erase_allocator') stack_traits = container_traits_impl_t( 'stack', 0, 'value_type', 'erase_container') map_traits = container_traits_impl_t( 'map', 1, 'mapped_type', 'erase_map_compare_allocator', key_type_index=0, key_type_typedef='key_type') multimap_traits = container_traits_impl_t( 'multimap', 1, 'mapped_type', 'erase_map_compare_allocator', key_type_index=0, key_type_typedef='key_type') hash_map_traits = container_traits_impl_t( 'hash_map', 1, 'mapped_type', 'erase_hashmap_compare_allocator', key_type_index=0, key_type_typedef='key_type') hash_multimap_traits = container_traits_impl_t( 'hash_multimap', 1, 'mapped_type', 'erase_hashmap_compare_allocator', key_type_index=0, key_type_typedef='key_type') set_traits = container_traits_impl_t( 'set', 0, 'value_type', 'erase_compare_allocator') multiset_traits = container_traits_impl_t( 'multiset', 0, 'value_type', 'erase_compare_allocator') hash_set_traits = container_traits_impl_t( 'hash_set', 0, 'value_type', 'erase_hash_allocator') hash_multiset_traits = container_traits_impl_t( 'hash_multiset', 0, 'value_type', 'erase_hash_allocator') # c++11 equivalents for clang unordered_map_traits = container_traits_impl_t( 'unordered_map', 1, 'mapped_type', 'erase_hashmap_compare_allocator', key_type_index=0, key_type_typedef='key_type', unordered_maps_and_sets=True) unordered_multimap_traits = container_traits_impl_t( 'unordered_multimap', 1, 'mapped_type', 'erase_hashmap_compare_allocator', key_type_index=0, key_type_typedef='key_type', unordered_maps_and_sets=True) unordered_set_traits = container_traits_impl_t( 'unordered_set', 0, 'value_type', 'erase_hash_allocator', unordered_maps_and_sets=True) unordered_multiset_traits = container_traits_impl_t( 'unordered_multiset', 0, 'value_type', 'erase_hash_allocator', unordered_maps_and_sets=True) all_container_traits = ( list_traits, deque_traits, queue_traits, priority_queue_traits, vector_traits, stack_traits, map_traits, multimap_traits, hash_map_traits, hash_multimap_traits, set_traits, hash_set_traits, multiset_traits, hash_multiset_traits, unordered_map_traits, unordered_multimap_traits, unordered_set_traits, unordered_multiset_traits) """tuple of all STD container traits classes""" sequential_container_traits = [ list_traits, deque_traits, queue_traits, priority_queue_traits, vector_traits, stack_traits, set_traits, hash_set_traits, multiset_traits, hash_multiset_traits] """list, that contains all STD container traits classes""" def find_container_traits(cls_or_string): """ Find the container traits type of a declaration. Args: cls_or_string (str | declarations.declaration_t): a string Returns: declarations.container_traits: a container traits """ if isinstance(cls_or_string, str): if not templates.is_instantiation(cls_or_string): return None name = templates.name(cls_or_string) if name.startswith('std::'): name = name[len('std::'):] if name.startswith('std::tr1::'): name = name[len('std::tr1::'):] for cls_traits in all_container_traits: if cls_traits.name() == name: return cls_traits else: if isinstance(cls_or_string, class_declaration.class_types): # Look in the cache. if cls_or_string.cache.container_traits is not None: return cls_or_string.cache.container_traits # Look for a container traits for cls_traits in all_container_traits: if cls_traits.is_my_case(cls_or_string): # Store in the cache if isinstance(cls_or_string, class_declaration.class_types): cls_or_string.cache.container_traits = cls_traits return cls_traits pygccxml-3.0.2/src/pygccxml/declarations/cpptypes.py000066400000000000000000000622531476564735400227050ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines classes, that describe C++ types """ from . import algorithms_cache from . import byte_info from . import elaborated_info class type_t(byte_info.byte_info): """base class for all types""" def __init__(self): byte_info.byte_info.__init__(self) self.cache = algorithms_cache.type_algs_cache_t() def __str__(self): res = self.decl_string if res[:2] == "::": res = res[2:] return res def __eq__(self, other): if not isinstance(other, type_t): return False return self.decl_string == other.decl_string def __hash__(self): return hash(self.decl_string) def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): if not isinstance(other, self.__class__): return self.__class__.__name__ < other.__class__.__name__ return self.decl_string < other.decl_string def build_decl_string(self, with_defaults=True): raise NotImplementedError() @property def decl_string(self): if self.cache.decl_string is None: self.cache.decl_string = self.build_decl_string() return self.cache.decl_string @property def partial_decl_string(self): if self.cache.partial_decl_string is None: self.cache.partial_decl_string = self.build_decl_string(False) return self.cache.partial_decl_string def _clone_impl(self): raise NotImplementedError() def clone(self): """returns new instance of the type""" answer = self._clone_impl() return answer # There are cases when GCC-XML reports something like this # # In this case I will use this as type class dummy_type_t(type_t): """provides :class:`type_t` interface for a string, that defines C++ type. This class could be very useful in the code generator. """ def __init__(self, decl_string): type_t.__init__(self) self._decl_string = decl_string def build_decl_string(self, with_defaults=True): return self._decl_string def _clone_impl(self): return dummy_type_t(self._decl_string) class unknown_t(type_t): """ type, that represents all C++ types, that could not be parsed by GCC-XML """ def __init__(self): type_t.__init__(self) def build_decl_string(self, with_defaults=True): return '?unknown?' def _clone_impl(self): return self class ellipsis_t(type_t): """type, that represents "..." in function definition""" def __init__(self): type_t.__init__(self) def build_decl_string(self, with_defaults=True): return '...' def _clone_impl(self): return self ########################################################################## # Fundamental types: class fundamental_t(type_t): """base class for all fundamental, build-in types""" def __init__(self, name): type_t.__init__(self) self._name = name def build_decl_string(self, with_defaults=True): return self._name def _clone_impl(self): return self class java_fundamental_t(fundamental_t): """base class for all JNI defined fundamental types""" def __init__(self, name): fundamental_t.__init__(self, name) class void_t(fundamental_t): """represents void type""" CPPNAME = 'void' def __init__(self): fundamental_t.__init__(self, void_t.CPPNAME) class char_t(fundamental_t): """represents char type""" CPPNAME = 'char' def __init__(self): fundamental_t.__init__(self, char_t.CPPNAME) class signed_char_t(fundamental_t): """represents signed char type""" CPPNAME = 'signed char' def __init__(self): fundamental_t.__init__(self, signed_char_t.CPPNAME) class unsigned_char_t(fundamental_t): """represents unsigned char type""" CPPNAME = 'unsigned char' def __init__(self): fundamental_t.__init__(self, unsigned_char_t.CPPNAME) class wchar_t(fundamental_t): """represents wchar_t type""" CPPNAME = 'wchar_t' def __init__(self): fundamental_t.__init__(self, wchar_t.CPPNAME) class short_int_t(fundamental_t): """represents short int type""" CPPNAME = 'short int' def __init__(self): fundamental_t.__init__(self, short_int_t.CPPNAME) class short_unsigned_int_t(fundamental_t): """represents short unsigned int type""" CPPNAME = 'short unsigned int' def __init__(self): fundamental_t.__init__(self, short_unsigned_int_t.CPPNAME) class bool_t(fundamental_t): """represents bool type""" CPPNAME = 'bool' def __init__(self): fundamental_t.__init__(self, bool_t.CPPNAME) class int_t(fundamental_t): """represents int type""" CPPNAME = 'int' def __init__(self): fundamental_t.__init__(self, int_t.CPPNAME) class unsigned_int_t(fundamental_t): """represents unsigned int type""" CPPNAME = 'unsigned int' def __init__(self): fundamental_t.__init__(self, unsigned_int_t.CPPNAME) class long_int_t(fundamental_t): """represents long int type""" CPPNAME = 'long int' def __init__(self): fundamental_t.__init__(self, long_int_t.CPPNAME) class long_unsigned_int_t(fundamental_t): """represents long unsigned int type""" CPPNAME = 'long unsigned int' def __init__(self): fundamental_t.__init__(self, long_unsigned_int_t.CPPNAME) class long_long_int_t(fundamental_t): """represents long long int type""" CPPNAME = 'long long int' def __init__(self): fundamental_t.__init__(self, long_long_int_t.CPPNAME) class long_long_unsigned_int_t(fundamental_t): """represents long long unsigned int type""" CPPNAME = 'long long unsigned int' def __init__(self): fundamental_t.__init__(self, long_long_unsigned_int_t.CPPNAME) class float_t(fundamental_t): """represents float type""" CPPNAME = 'float' def __init__(self): fundamental_t.__init__(self, float_t.CPPNAME) class double_t(fundamental_t): """represents double type""" CPPNAME = 'double' def __init__(self): fundamental_t.__init__(self, double_t.CPPNAME) class long_double_t(fundamental_t): """represents long double type""" CPPNAME = 'long double' def __init__(self): fundamental_t.__init__(self, long_double_t.CPPNAME) class complex_double_t(fundamental_t): """represents complex double type""" CPPNAME = 'complex double' def __init__(self): fundamental_t.__init__(self, complex_double_t.CPPNAME) class complex_long_double_t(fundamental_t): """represents complex long double type""" CPPNAME = 'complex long double' def __init__(self): fundamental_t.__init__(self, complex_long_double_t.CPPNAME) class complex_float_t(fundamental_t): """represents complex float type""" CPPNAME = 'complex float' def __init__(self): fundamental_t.__init__(self, complex_float_t.CPPNAME) class jbyte_t(java_fundamental_t): """represents jbyte type""" JNAME = 'jbyte' def __init__(self): java_fundamental_t.__init__(self, jbyte_t.JNAME) class jshort_t(java_fundamental_t): """represents jshort type""" JNAME = 'jshort' def __init__(self): java_fundamental_t.__init__(self, jshort_t.JNAME) class jint_t(java_fundamental_t): """represents jint type""" JNAME = 'jint' def __init__(self): java_fundamental_t.__init__(self, jint_t.JNAME) class jlong_t(java_fundamental_t): """represents jlong type""" JNAME = 'jlong' def __init__(self): java_fundamental_t.__init__(self, jlong_t.JNAME) class jfloat_t(java_fundamental_t): """represents jfloat type""" JNAME = 'jfloat' def __init__(self): java_fundamental_t.__init__(self, jfloat_t.JNAME) class jdouble_t(java_fundamental_t): """represents jdouble type""" JNAME = 'jdouble' def __init__(self): java_fundamental_t.__init__(self, jdouble_t.JNAME) class jchar_t(java_fundamental_t): """represents jchar type""" JNAME = 'jchar' def __init__(self): java_fundamental_t.__init__(self, jchar_t.JNAME) class jboolean_t(java_fundamental_t): """represents jboolean type""" JNAME = 'jboolean' def __init__(self): java_fundamental_t.__init__(self, jboolean_t.JNAME) class int128_t(fundamental_t): """represents __int128_t type""" CPPNAME = '__int128_t' def __init__(self): fundamental_t.__init__(self, int128_t.CPPNAME) class uint128_t(fundamental_t): """represents __uint128_t type""" CPPNAME = '__uint128_t' def __init__(self): fundamental_t.__init__(self, uint128_t.CPPNAME) FUNDAMENTAL_TYPES = { # adding java types void_t.CPPNAME: void_t(), char_t.CPPNAME: char_t(), signed_char_t.CPPNAME: signed_char_t(), unsigned_char_t.CPPNAME: unsigned_char_t(), wchar_t.CPPNAME: wchar_t(), short_int_t.CPPNAME: short_int_t(), 'signed ' + short_int_t.CPPNAME: short_int_t(), short_unsigned_int_t.CPPNAME: short_unsigned_int_t(), bool_t.CPPNAME: bool_t(), int_t.CPPNAME: int_t(), 'signed ' + int_t.CPPNAME: int_t(), unsigned_int_t.CPPNAME: unsigned_int_t(), long_int_t.CPPNAME: long_int_t(), long_unsigned_int_t.CPPNAME: long_unsigned_int_t(), long_long_int_t.CPPNAME: long_long_int_t(), long_long_unsigned_int_t.CPPNAME: long_long_unsigned_int_t(), int128_t.CPPNAME: int128_t(), uint128_t.CPPNAME: uint128_t(), float_t.CPPNAME: float_t(), double_t.CPPNAME: double_t(), long_double_t.CPPNAME: long_double_t(), complex_long_double_t.CPPNAME: complex_long_double_t(), complex_double_t.CPPNAME: complex_double_t(), complex_float_t.CPPNAME: complex_float_t(), jbyte_t.JNAME: jbyte_t(), jshort_t.JNAME: jshort_t(), jint_t.JNAME: jint_t(), jlong_t.JNAME: jlong_t(), jfloat_t.JNAME: jfloat_t(), jdouble_t.JNAME: jdouble_t(), jchar_t.JNAME: jchar_t(), jboolean_t.JNAME: jboolean_t(), '__java_byte': jbyte_t(), '__java_short': jshort_t(), '__java_int': jint_t(), '__java_long': jlong_t(), '__java_float': jfloat_t(), '__java_double': jdouble_t(), '__java_char': jchar_t(), '__java_boolean': jboolean_t() } """ defines a mapping between fundamental type name and its synonym to the instance of class that describes the type """ def _f(x, with_defaults): """ A small helper function. """ return x.build_decl_string(with_defaults) ########################################################################## # Compound types: class compound_t(type_t): """class that allows to represent compound types like `const int*`""" def __init__(self, base): type_t.__init__(self) self._base = base @property def base(self): """reference to internal/base class""" return self._base @base.setter def base(self, new_base): self._base = new_base def build_decl_string(self, with_defaults=True): raise NotImplementedError() def _clone_impl(self): raise NotImplementedError() class volatile_t(compound_t): """represents `volatile whatever` type""" def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): return self.base.build_decl_string(with_defaults) + ' volatile' def _clone_impl(self): return volatile_t(self.base.clone()) class restrict_t(compound_t): """represents `restrict whatever` type""" # The restrict keyword can be considered an extension to the strict # aliasing rule. It allows the programmer to declare that pointers which # share the same type (or were otherwise validly created) do not alias # eachother. By using restrict the programmer can declare that any loads # and stores through the qualified pointer (or through another pointer # copied either directly or indirectly from the restricted pointer) are # the only loads and stores to the same address during the lifetime of # the pointer. In other words, the pointer is not aliased by any pointers # other than its own copies. def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): return '__restrict__ ' + self.base.build_decl_string(with_defaults) def _clone_impl(self): return restrict_t(self.base.clone()) class const_t(compound_t): """represents `whatever const` type""" def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): return self.base.build_decl_string(with_defaults) + ' const' def _clone_impl(self): return const_t(self.base.clone()) class pointer_t(compound_t): """represents `whatever*` type""" def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): decl_string = self.base.build_decl_string(with_defaults) if isinstance(self.base, calldef_type_t): # This is a function pointer. Do not add supplementary * return decl_string return decl_string + " *" def _clone_impl(self): return pointer_t(self.base.clone()) class reference_t(compound_t): """represents `whatever&` type""" def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): return self.base.build_decl_string(with_defaults) + ' &' def _clone_impl(self): return reference_t(self.base.clone()) class elaborated_t(compound_t): """represents `elaborated` type""" def __init__(self, base): compound_t.__init__(self, base) def build_decl_string(self, with_defaults=True): prefix = "" if isinstance(self.base, type(declarated_t)) and \ isinstance(self.base.declaration, type(elaborated_info)): prefix = self.base.declaration.elaborated_type_specifier + " " return prefix + self.base.build_decl_string(with_defaults) def _clone_impl(self): return elaborated_t(self.base.clone()) class array_t(compound_t): """represents C++ array type""" SIZE_UNKNOWN = -1 def __init__(self, base, size): compound_t.__init__(self, base) self._size = size @property def size(self): """returns array size""" return self._size @size.setter def size(self, size): """sometimes there is a need to update the size of the array""" self.cache.reset() self._size = size def build_decl_string(self, with_defaults=True): return self.__bds_for_multi_dim_arrays(None, with_defaults) def __bds_for_multi_dim_arrays(self, parent_dims=None, with_defaults=True): if parent_dims: parent_dims.append(self.size) else: parent_dims = [self.size] if isinstance(self.base, array_t): return self.base.__bds_for_multi_dim_arrays( parent_dims, with_defaults) tmp = [] for s in parent_dims: tmp.append('[%d]' % s) return self.base.build_decl_string(with_defaults) + " " + "".join(tmp) def _clone_impl(self): return array_t(self.base.clone(), self.size) class calldef_type_t(object): """base class for all types that describes "callable" declaration""" def __init__(self, return_type=None, arguments_types=None): object.__init__(self) self._return_type = return_type if arguments_types is None: arguments_types = [] self._arguments_types = arguments_types @property def return_type(self): """reference to :class:`return type `""" return self._return_type @return_type.setter def return_type(self, new_return_type): self._return_type = new_return_type @property def arguments_types(self): """list of argument :class:`types `""" return self._arguments_types @arguments_types.setter def arguments_types(self, new_arguments_types): self._arguments_types = new_arguments_types @property def has_ellipsis(self): return self.arguments_types and isinstance( self.arguments_types[-1], ellipsis_t) class free_function_type_t(type_t, calldef_type_t): """describes free function type""" NAME_TEMPLATE = '%(return_type)s (*)( %(arguments)s )' TYPEDEF_NAME_TEMPLATE = ( '%(return_type)s ( *%(typedef_name)s )( %(arguments)s )') def __init__(self, return_type=None, arguments_types=None): type_t.__init__(self) calldef_type_t.__init__(self, return_type, arguments_types) @staticmethod def create_decl_string( return_type, arguments_types, with_defaults=True): """ Returns free function type :param return_type: function return type :type return_type: :class:`type_t` :param arguments_types: list of argument :class:`type ` :rtype: :class:`free_function_type_t` """ return free_function_type_t.NAME_TEMPLATE % { 'return_type': return_type.build_decl_string(with_defaults), 'arguments': ','.join( [_f(x, with_defaults) for x in arguments_types])} def build_decl_string(self, with_defaults=True): return self.create_decl_string( self.return_type, self.arguments_types, with_defaults) def _clone_impl(self): rt_clone = None if self.return_type: rt_clone = self.return_type.clone() return free_function_type_t( rt_clone, [ arg.clone() for arg in self.arguments_types]) # TODO: create real typedef def create_typedef(self, typedef_name, unused=None, with_defaults=True): """returns string, that contains valid C++ code, that defines typedef to function type :param name: the desired name of typedef """ return free_function_type_t.TYPEDEF_NAME_TEMPLATE % { 'typedef_name': typedef_name, 'return_type': self.return_type.build_decl_string(with_defaults), 'arguments': ','.join( [_f(x, with_defaults) for x in self.arguments_types])} class member_function_type_t(type_t, calldef_type_t): """describes member function type""" NAME_TEMPLATE = ( '%(return_type)s ( %(class)s::* )( %(arguments)s )%(has_const)s') TYPEDEF_NAME_TEMPLATE = ( '%(return_type)s ( %(class)s::*%(typedef_name)s' + ')( %(arguments)s ) %(has_const)s') def __init__( self, class_inst=None, return_type=None, arguments_types=None, has_const=False): type_t.__init__(self) calldef_type_t.__init__(self, return_type, arguments_types) self._has_const = has_const self._class_inst = class_inst @property def has_const(self): """describes, whether function has const modifier""" return self._has_const @has_const.setter def has_const(self, has_const): self._has_const = has_const @property def class_inst(self): """reference to parent :class:`class `""" return self._class_inst @class_inst.setter def class_inst(self, class_inst): self._class_inst = class_inst # TODO: create real typedef def create_typedef( self, typedef_name, class_alias=None, with_defaults=True): """creates typedef to the function type :param typedef_name: desired type name :rtype: string """ has_const_str = '' if self.has_const: has_const_str = 'const' if None is class_alias: if with_defaults: class_alias = self.class_inst.decl_string else: class_alias = self.class_inst.partial_decl_string return member_function_type_t.TYPEDEF_NAME_TEMPLATE % { 'typedef_name': typedef_name, 'return_type': self.return_type.build_decl_string(with_defaults), 'class': class_alias, 'arguments': ','.join( [_f(x, with_defaults) for x in self.arguments_types]), 'has_const': has_const_str} @staticmethod def create_decl_string( return_type, class_decl_string, arguments_types, has_const, with_defaults=True): has_const_str = '' if has_const: has_const_str = 'const' return_type_decl_string = '' if return_type: return_type_decl_string = return_type.build_decl_string( with_defaults) return member_function_type_t.NAME_TEMPLATE % { 'return_type': return_type_decl_string, 'class': class_decl_string, 'arguments': ','.join( [_f(x, with_defaults) for x in arguments_types]), 'has_const': has_const_str} def build_decl_string(self, with_defaults=True): return self.create_decl_string( self.return_type, self.class_inst.decl_string, self.arguments_types, self.has_const, with_defaults) def _clone_impl(self): rt_clone = None if self.return_type: rt_clone = self.return_type.clone() return member_function_type_t( self.class_inst, rt_clone, [ arg.clone() for arg in self.arguments_types], self.has_const) class member_variable_type_t(compound_t): """describes member variable type""" NAME_TEMPLATE = '%(type)s ( %(class)s::* )' def __init__(self, class_inst=None, variable_type=None): compound_t.__init__(self, class_inst) self._mv_type = variable_type @property def variable_type(self): """describes member variable :class:`type `""" return self._mv_type @variable_type.setter def variable_type(self, new_type): self._mv_type = new_type def build_decl_string(self, with_defaults=True): return self.NAME_TEMPLATE % { 'type': self.variable_type.build_decl_string(with_defaults), 'class': self.base.build_decl_string(with_defaults)} def _clone_impl(self): return member_variable_type_t( class_inst=self.base, variable_type=self.variable_type.clone()) ########################################################################## # declarated types: class declarated_t(type_t, byte_info.byte_info): """class that binds between to hierarchies: :class:`type_t` and :class:`declaration_t`""" def __init__(self, declaration): type_t.__init__(self) byte_info.byte_info.__init__(self) self._declaration = declaration self.byte_size = self._declaration.byte_size self.byte_align = self._declaration.byte_align @property def declaration(self): """reference to :class:`declaration_t`""" return self._declaration @declaration.setter def declaration(self, new_declaration): self._declaration = new_declaration self.byte_size = self._declaration.byte_size self.byte_align = self._declaration.byte_align def build_decl_string(self, with_defaults=True): if with_defaults: return self._declaration.decl_string return self._declaration.partial_decl_string def _clone_impl(self): return declarated_t(self._declaration) class type_qualifiers_t(object): """contains additional information about type: mutable, static, extern""" def __init__(self, has_static=False, has_mutable=False, has_extern=False): self._has_static = has_static self._has_extern = has_extern self._has_mutable = has_mutable def __eq__(self, other): if not isinstance(other, type_qualifiers_t): return False return self.has_static == other.has_static \ and self.has_extern == other.has_extern \ and self.has_mutable == other.has_mutable __hash__ = object.__hash__ def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): if not isinstance(other, type_qualifiers_t): return object.__lt__(self, other) return self.has_static < other.has_static \ and self.has_extern < other.has_extern \ and self.has_mutable < other.has_mutable @property def has_static(self): return self._has_static @has_static.setter def has_static(self, has_static): self._has_static = has_static @property def has_extern(self): return self._has_extern @has_extern.setter def has_extern(self, has_extern): self._has_extern = has_extern @property def has_mutable(self): return self._has_mutable @has_mutable.setter def has_mutable(self, has_mutable): self._has_mutable = has_mutable pygccxml-3.0.2/src/pygccxml/declarations/decl_factory.py000066400000000000000000000072161476564735400234720ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines default declarations factory class """ from .calldef_members import member_function_t from .calldef_members import constructor_t from .calldef_members import destructor_t from .calldef_members import member_operator_t from .calldef_members import casting_operator_t from .comment import comment_t from .free_calldef import free_function_t from .free_calldef import free_operator_t from .enumeration import enumeration_t from .namespace import namespace_t from .class_declaration import class_t from .class_declaration import class_declaration_t from .typedef import typedef_t from .variable import variable_t class decl_factory_t(object): """ declarations factory class """ def __init__(self): """creates declarations factory""" object.__init__(self) def create_member_function(self, *arguments, **keywords): """creates instance of class that describes member function declaration""" return member_function_t(*arguments, **keywords) def create_constructor(self, *arguments, **keywords): """creates instance of class that describes constructor declaration""" return constructor_t(*arguments, **keywords) def create_destructor(self, *arguments, **keywords): """creates instance of class that describes destructor declaration""" return destructor_t(*arguments, **keywords) def create_member_operator(self, *arguments, **keywords): """creates instance of class that describes member operator declaration""" return member_operator_t(*arguments, **keywords) def create_casting_operator(self, *arguments, **keywords): """creates instance of class that describes casting operator declaration""" return casting_operator_t(*arguments, **keywords) def create_free_function(self, *arguments, **keywords): """creates instance of class that describes free function declaration""" return free_function_t(*arguments, **keywords) def create_free_operator(self, *arguments, **keywords): """creates instance of class that describes free operator declaration""" return free_operator_t(*arguments, **keywords) def create_class_declaration(self, *arguments, **keywords): """creates instance of class that describes class declaration""" return class_declaration_t(*arguments, **keywords) def create_class(self, *arguments, **keywords): """creates instance of class that describes class definition declaration""" return class_t(*arguments, **keywords) def create_enumeration(self, *arguments, **keywords): """creates instance of class that describes enumeration declaration""" return enumeration_t(*arguments, **keywords) def create_namespace(self, *arguments, **keywords): """creates instance of class that describes namespace declaration""" return namespace_t(*arguments, **keywords) def create_typedef(self, *arguments, **keywords): """creates instance of class that describes typedef declaration""" return typedef_t(*arguments, **keywords) def create_variable(self, *arguments, **keywords): """creates instance of class that describes variable declaration""" return variable_t(*arguments, **keywords) def create_comment(self, *arguments, **keywords): """creates instance of class that describes variable declaration""" return comment_t(*arguments, **keywords) pygccxml-3.0.2/src/pygccxml/declarations/decl_printer.py000066400000000000000000000350161476564735400235050ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko, 2006 Allen Bierbaum, Matthias Baas # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines class, :class:`decl_printer_t` that prints declarations tree in a user friendly format """ import os import sys from . import calldef_members from . import algorithm from . import decl_visitor from . import variable_t from . import calldef_t from . import type_traits_classes def _stdout_writer(x): sys.stdout.write(x) class decl_printer_t(decl_visitor.decl_visitor_t): """helper class for printing declarations tree""" JUSTIFY = 20 INDENT_SIZE = 4 def __init__( self, level=0, print_details=True, recursive=True, writer=_stdout_writer, verbose=True): decl_visitor.decl_visitor_t.__init__(self) self.__inst = None self.__level = level self.__print_details = print_details self.__recursive = recursive self.__verbose = verbose self.__writer = writer def clone(self, increment_level=True): level = self.__level if increment_level: level += 1 return decl_printer_t( level, self.print_details, recursive=self.recursive, verbose=self.__verbose, writer=self.writer) @property def recursive(self): return self.__recursive @recursive.setter def recursive(self, recursive): self.__recursive = recursive @property def verbose(self): return self.__verbose @verbose.setter def verbose(self, verbose): self.__verbose = verbose @property def level(self): return self.__level @level.setter def level(self, level): self.__level = level @property def print_details(self): return self.__print_details @print_details.setter def print_details(self, details): self.__print_details = details @property def writer(self): return self.__writer @writer.setter def writer(self, writer): self.__writer = writer @property def instance(self): return self.__inst @instance.setter def instance(self, inst): self.__inst = inst @staticmethod def is_builtin_decl(decl): if not decl.name.startswith('__builtin_'): return False @staticmethod def __nice_decl_name(inst): return inst.__class__.__name__ def print_decl_header(self): header = self.__nice_decl_name( self.__inst) + ": '%s'" % self.__inst.name self.writer( ' ' * self.level * self.INDENT_SIZE + header.ljust(self.JUSTIFY) + os.linesep) if self.__print_details: curr_level = self.level + 1 if self.__inst.location: location = 'location: [%s]:%s' % ( self.__inst.location.file_name, self.__inst.location.line) self.writer( ' ' * curr_level * self.INDENT_SIZE + location) if self.verbose: artificial = 'artificial: ' + \ "'%s'" % str(self.__inst.is_artificial) self.writer( ' ' * curr_level * self.INDENT_SIZE + artificial.ljust(self.JUSTIFY)) if self.__inst.attributes: attributes = 'attributes: %s' % self.__inst.attributes self.writer( ' ' * curr_level * self.INDENT_SIZE + attributes) # Mangled name is only available for functions and variables # when using castxml. print_mangled = False if self.__inst.mangled and \ (isinstance(self.__inst, variable_t) or isinstance(self.__inst, calldef_t)): print_mangled = True if print_mangled: mangled = 'mangled: %s' % self.__inst.mangled self.writer( ' ' * curr_level * self.INDENT_SIZE + mangled) def print_calldef_info(self, decl=None): if None is decl: decl = self.__inst retval = None if decl.return_type: retval = decl.return_type.decl_string args = [] for arg in decl.arguments: args.append(arg.decl_type.decl_string + ' ' + arg.name) indent = ' ' * (self.level + 1) * self.INDENT_SIZE self.writer(indent + "is extern: " + str(decl.has_extern)) self.writer(indent + "return type: " + str(retval)) self.writer(indent + "arguments type: " + ', '.join(args)) self.writer( indent + "calling convention: __%s__" % decl.calling_convention + os.linesep) if isinstance(decl, calldef_members.member_calldef_t): self.writer(indent + "virtual: " + str(decl.virtuality) + os.linesep) self.writer(indent + "is const: " + str(decl.has_const) + os.linesep) self.writer(indent + "is static: " + str(decl.has_static) + os.linesep) def visit_member_function(self): self.print_decl_header() self.print_calldef_info() def visit_constructor(self): self.print_decl_header() self.print_calldef_info() indent = ' ' * (self.level + 1) * self.INDENT_SIZE self.writer(indent + "explicit: " + str(self.__inst.explicit) + os.linesep) if self.__print_details: self.writer(indent + 'copy constructor: ' + str(type_traits_classes.is_copy_constructor( self.__inst)) + os.linesep) def visit_destructor(self): self.print_decl_header() def visit_member_operator(self): self.print_decl_header() self.print_calldef_info() def visit_casting_operator(self): self.print_decl_header() self.print_calldef_info() def visit_free_function(self): self.print_decl_header() self.print_calldef_info() def visit_free_operator(self): self.print_decl_header() self.print_calldef_info() def visit_class_declaration(self): self.print_decl_header() def visit_class(self): self.print_decl_header() curr_level = self.level + 1 class_type = 'class type: ' + "'%s'" % str(self.__inst.class_type) self.writer( ' ' * curr_level * self.INDENT_SIZE + class_type.ljust(self.JUSTIFY)) if self.__print_details: byte_size = 'size: %d' % self.__inst.byte_size self.writer( ' ' * curr_level * self.INDENT_SIZE + byte_size.ljust(self.JUSTIFY)) try: byte_align = 'align: %d' % self.__inst.byte_align self.writer( ' ' * curr_level * self.INDENT_SIZE + byte_align.ljust(self.JUSTIFY)) except NotImplementedError: self.writer( ' ' * curr_level * self.INDENT_SIZE + "align: not implemented".ljust(self.JUSTIFY)) if self.__inst.aliases: aliases = sorted([typedef.name for typedef in self.__inst.aliases]) msg = 'aliases: ' + repr(aliases) self.writer( ' ' * curr_level * self.INDENT_SIZE + msg.ljust(self.JUSTIFY) + os.linesep) def print_hierarchy(hierarchy_type, classes, curr_level): self.writer( ' ' * curr_level * self.INDENT_SIZE + hierarchy_type.ljust(self.JUSTIFY) + os.linesep) curr_level += 1 for class_ in classes: class_str = 'class: ' + \ "'%s'" % str(class_.related_class.decl_string) self.writer( ' ' * curr_level * self.INDENT_SIZE + class_str.ljust(self.JUSTIFY) + os.linesep) access = 'access type: ' + "'%s'" % str(class_.access) self.writer(' ' * (curr_level + 1) * self.INDENT_SIZE + access.ljust(self.JUSTIFY) + os.linesep) if class_.is_virtual is not None: is_virtual = 'virtual inheritance: ' + \ "'%s'" % str(class_.is_virtual) self.writer(' ' * (curr_level + 1) * self.INDENT_SIZE + is_virtual.ljust(self.JUSTIFY) + os.linesep) def print_members(members_type, members, curr_level): members = sorted(members[:]) self.writer( ' ' * curr_level * self.INDENT_SIZE + members_type.ljust(self.JUSTIFY) + os.linesep) if self.__recursive: curr_level += 1 for member in members: prn = self.clone() prn.instance = member algorithm.apply_visitor(prn, member) if self.__inst.bases: print_hierarchy('base classes: ', self.__inst.bases, curr_level) if self.__inst.derived: print_hierarchy( 'derived classes: ', self.__inst.derived, curr_level) print_members('public: ', self.__inst.public_members, curr_level) print_members('protected: ', self.__inst.protected_members, curr_level) print_members('private: ', self.__inst.private_members, curr_level) def visit_enumeration(self): self.print_decl_header() curr_level = self.level + 1 self.writer( ' ' * curr_level * self.INDENT_SIZE + 'values:'.ljust(self.JUSTIFY) + os.linesep) value_level = ' ' * (curr_level + 1) * self.INDENT_SIZE self.writer(os.linesep + os.linesep) for name, value in self.__inst.values: self.writer(value_level + "%s : %s" % (name, value) + os.linesep) def visit_namespace(self): if not self.verbose and not self.__inst.declarations: return # don't print info about empty namespaces self.print_decl_header() if self.__recursive: inst_decls = sorted(self.__inst.declarations[:]) for decl in inst_decls: if self.is_builtin_decl(decl): continue prn = self.clone() prn.instance = decl algorithm.apply_visitor(prn, decl) def visit_typedef(self): self.print_decl_header() curr_level = self.level + 1 self.writer( ' ' * curr_level * self.INDENT_SIZE + 'alias to: ' + self.__inst.decl_type.decl_string + os.linesep) def visit_variable(self): self.print_decl_header() curr_level = self.level + 1 self.writer( ' ' * curr_level * self.INDENT_SIZE + 'type: %s' % self.__inst.decl_type.decl_string) self.writer( ' ' * curr_level * self.INDENT_SIZE + 'value: %s' % self.__inst.value) if self.__print_details: if self.__inst.bits: bits = 'bits: %d' % self.__inst.bits self.writer( ' ' * curr_level * self.INDENT_SIZE + bits.ljust(self.JUSTIFY)) byte_size = 'size: %d' % self.__inst.decl_type.byte_size self.writer( ' ' * curr_level * self.INDENT_SIZE + byte_size.ljust(self.JUSTIFY)) try: byte_align = 'align: %d' % self.__inst.decl_type.byte_align self.writer( ' ' * curr_level * self.INDENT_SIZE + byte_align.ljust(self.JUSTIFY)) except NotImplementedError: self.writer( ' ' * curr_level * self.INDENT_SIZE + "align: not implemented".ljust(self.JUSTIFY)) byte_offset = 'offset: %d' % self.__inst.byte_offset self.writer( ' ' * curr_level * self.INDENT_SIZE + byte_offset + os.linesep) def print_declarations( decls, detailed=True, recursive=True, writer=lambda x: sys.stdout.write(x + os.linesep), verbose=True): """ print declarations tree rooted at each of the included nodes. :param decls: either a single :class:declaration_t object or list of :class:declaration_t objects """ prn = decl_printer_t(0, detailed, recursive, writer, verbose=verbose) if not isinstance(decls, list): decls = [decls] for d in decls: prn.level = 0 prn.instance = d algorithm.apply_visitor(prn, d) def dump_declarations(declarations, file_path): """ Dump declarations tree rooted at each of the included nodes to the file :param declarations: either a single :class:declaration_t object or a list of :class:declaration_t objects :param file_path: path to a file """ with open(file_path, "w+") as f: print_declarations(declarations, writer=f.write) pygccxml-3.0.2/src/pygccxml/declarations/decl_visitor.py000066400000000000000000000026471476564735400235250ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines declarations visitor class interface """ class decl_visitor_t(object): """ declarations visitor interface All functions within this class should be redefined in derived classes. """ def __init__(self): object.__init__(self) def visit_member_function(self): raise NotImplementedError() def visit_constructor(self): raise NotImplementedError() def visit_destructor(self): raise NotImplementedError() def visit_member_operator(self): raise NotImplementedError() def visit_casting_operator(self): raise NotImplementedError() def visit_free_function(self): raise NotImplementedError() def visit_free_operator(self): raise NotImplementedError() def visit_class_declaration(self): raise NotImplementedError() def visit_class(self): raise NotImplementedError() def visit_enumeration(self): raise NotImplementedError() def visit_namespace(self): raise NotImplementedError() def visit_typedef(self): raise NotImplementedError() def visit_variable(self): raise NotImplementedError() def visit_comment(self): raise NotImplementedError() pygccxml-3.0.2/src/pygccxml/declarations/declaration.py000066400000000000000000000210751476564735400233200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Defines :class:`pygccxml.declarations.declaration_t` class - all declarations base class. """ import warnings from . import declaration_utils from . import algorithms_cache from . import comment class declaration_t(object): """ Base class for all classes that represent a C++ declaration. """ def __init__( self, name='', location=None, is_artificial=False, mangled=None, attributes=None): self._name = name self._location = location self._is_artificial = is_artificial self._mangled = mangled self._attributes = attributes self._parent = None self._cache = algorithms_cache.declaration_algs_cache_t() self._partial_name = None self._decorated_name = None self._comment = comment.comment_t() self._deprecation = None def __str__(self): """ Default __str__ method. This version just returns the decl_string and the class. Derived classes may override this method to provide more detailed information. A __str__ method for a declaration should always provide enough information so that it uniquely identifies the declaration and the user is able to find the declaration in his source code. """ name = self.decl_string if name[:2] == "::": name = name[2:] # Append the declaration class cls = self.__class__.__name__ if cls[-2:] == "_t": cls = cls[:-2] cls = cls.replace('_', ' ') return "%s [%s]" % (name, cls) def _get__cmp__items(self): """ Implementation detail. """ # Every derived class should implement this method. This method should # return a list of items, that should be compared. print( '_get__cmp__items not implemented for class ', self.__class__.__name__) raise NotImplementedError() def _get__cmp__data(self): """ Implementation detail. """ if self._cache.cmp_data is None: cmp_data = [ declaration_utils.declaration_path(self.parent), self.name, self.location] cmp_data.extend(self._get__cmp__items()) self._cache.cmp_data = cmp_data return self._cache.cmp_data def __eq__(self, other): """ This function will return true, if both declarations refers to the same object. This function could be implemented in terms of _get__cmp__data, but in this case it will downgrade performance. self.mangled property is not compared, because it could be changed from one compilation time to an other. """ if not isinstance(other, self.__class__): return False return self.name == other.name \ and self.location == other.location \ and declaration_utils.declaration_path(self.parent) \ == declaration_utils.declaration_path(other.parent) def __hash__(self): return (hash(self.__class__) ^ hash(self.name) ^ hash(self.location)) def __ne__(self, other): """ Return not self.__eq__( other ). """ return not self.__eq__(other) def __lt__(self, other): """ .. code-block:: python if not isinstance( other, self.__class__ ): return self.__class__.__name__ < other.__class__.__name__ return self._get__cmp__data() < other._get__cmp__data() """ if not isinstance(other, self.__class__): return self.__class__.__name__ < other.__class__.__name__ return self._get__cmp__data() < other._get__cmp__data() def _get_name_impl(self): return self._name def _on_rename(self): """ Placeholder method, is redefined in child class. """ pass @property def name(self): """ Declaration name @type: str """ return self._get_name_impl() @name.setter def name(self, new_name): previous_name = self._name self._name = new_name self._partial_name = None self.cache.reset_name_based() if previous_name: # There was a reset of the name self._on_rename() def _get_partial_name_impl(self): return self.name @property def partial_name(self): """ Declaration name, without template default arguments. Right now std containers is the only classes that support this functionality. """ if None is self._partial_name: self._partial_name = self._get_partial_name_impl() return self._partial_name @property def parent(self): """ Reference to parent declaration. @type: declaration_t """ return self._parent @parent.setter def parent(self, new_parent): if new_parent: assert isinstance(new_parent, declaration_t) self._parent = new_parent @property def top_parent(self): """ Reference to top parent declaration. @type: declaration_t """ parent = self.parent while parent is not None: if parent.parent is None: return parent else: parent = parent.parent return self @property def location(self): """ Location of the declaration within source file @type: :class:`location_t` """ return self._location @location.setter def location(self, new_location): self._location = new_location @property def is_artificial(self): """ Describes whether declaration is compiler generated or not @type: bool """ return self._is_artificial @is_artificial.setter def is_artificial(self, new_artificial): self._is_artificial = bool(new_artificial) def get_mangled_name(self): return self._mangled @property def mangled(self): """ Unique declaration name generated by the compiler. For GCCXML, you can get the mangled name for all the declarations. When using CastXML, calling mangled is only allowed on functions and variables. For other declarations it will raise an exception. :return: the mangled name :rtype: str """ return self._mangled @mangled.setter def mangled(self, mangled): self._mangled = mangled @property def attributes(self): """ GCCXML attributes, set using __attribute__((gccxml("..."))) @type: str """ return self._attributes @attributes.setter def attributes(self, attributes): self._attributes = attributes def create_decl_string(self, with_defaults=True): return declaration_utils.full_name(self, with_defaults) @property def decl_string(self): """ Declaration full name. """ return self.create_decl_string() @property def partial_decl_string(self): """ Declaration full name. """ return self.create_decl_string(with_defaults=False) @property def cache(self): """ Implementation detail. Reference to instance of :class:`algorithms_cache_t` class. """ return self._cache def i_depend_on_them(self, recursive=True): """ Return list of all types and declarations the declaration depends on """ self._warn_deprecated() raise NotImplementedError() @staticmethod def _warn_deprecated(): """ Implementation detail. """ warnings.warn( "The i_depend_on_them() method is deprecated.\n" + "Please use the declarations.get_dependencies_from_decl()" + "function instead.\n", DeprecationWarning) @property def comment(self): return self._comment @comment.setter def comment(self, comment): self._comment = comment @property def deprecation(self): return self._deprecation @deprecation.setter def deprecation(self, deprecation): self._deprecation = deprecation pygccxml-3.0.2/src/pygccxml/declarations/declaration_utils.py000066400000000000000000000112351476564735400245350ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt def declaration_path(decl): """ Returns a list of parent declarations names. Args: decl (declaration_t): declaration for which declaration path should be calculated. Returns: list[(str | basestring)]: list of names, where first item is the top parent name and last item the inputted declaration name. """ if not decl: return [] if not decl.cache.declaration_path: result = [decl.name] parent = decl.parent while parent: if parent.cache.declaration_path: result.reverse() decl.cache.declaration_path = parent.cache.declaration_path + \ result return decl.cache.declaration_path else: result.append(parent.name) parent = parent.parent result.reverse() decl.cache.declaration_path = result return result return decl.cache.declaration_path def partial_declaration_path(decl): """ Returns a list of parent declarations names without template arguments that have default value. Args: decl (declaration_t): declaration for which the partial declaration path should be calculated. Returns: list[(str | basestring)]: list of names, where first item is the top parent name and last item the inputted declaration name. """ # TODO: # If parent declaration cache already has declaration_path, reuse it for # calculation. if not decl: return [] if not decl.cache.partial_declaration_path: result = [decl.partial_name] parent = decl.parent while parent: if parent.cache.partial_declaration_path: result.reverse() decl.cache.partial_declaration_path \ = parent.cache.partial_declaration_path + result return decl.cache.partial_declaration_path else: result.append(parent.partial_name) parent = parent.parent result.reverse() decl.cache.partial_declaration_path = result return result return decl.cache.partial_declaration_path def full_name_from_declaration_path(dpath): # Here I have lack of knowledge: # TODO: "What is the full name of declaration declared in unnamed # namespace?" result = [_f for _f in dpath if _f] result = result[0] + '::'.join(result[1:]) return result def full_name(decl, with_defaults=True): """ Returns declaration full qualified name. If `decl` belongs to anonymous namespace or class, the function will return C++ illegal qualified name. Args: decl (declaration_t): declaration for which the full qualified name should be calculated. Returns: list[(str | basestring)]: full name of the declaration. """ if None is decl: raise RuntimeError("Unable to generate full name for None object!") if with_defaults: if not decl.cache.full_name: path = declaration_path(decl) if path == [""]: # Declarations without names are allowed (for examples class # or struct instances). In this case set an empty name.. decl.cache.full_name = "" else: decl.cache.full_name = full_name_from_declaration_path(path) return decl.cache.full_name else: if not decl.cache.full_partial_name: path = partial_declaration_path(decl) if path == [""]: # Declarations without names are allowed (for examples class # or struct instances). In this case set an empty name. decl.cache.full_partial_name = "" else: decl.cache.full_partial_name = \ full_name_from_declaration_path(path) return decl.cache.full_partial_name def get_named_parent(decl): """ Returns a reference to a named parent declaration. Args: decl (declaration_t): the child declaration Returns: declaration_t: the declaration or None if not found. """ if not decl: return None parent = decl.parent while parent and (not parent.name or parent.name == '::'): parent = parent.parent return parent pygccxml-3.0.2/src/pygccxml/declarations/declarations_matchers.py000066400000000000000000000322141476564735400253660ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import templates from . import matcher_base_t from . import variable from . import cpptypes from . import namespace from . import calldef from . import calldef_members from .. import utils class declaration_matcher_t(matcher_base_t): """ Instance of this class will match declarations by next criteria: - declaration name, also could be fully qualified name Example: `wstring` or `::std::wstring` - declaration type Example: :class:`class_t`, :class:`namespace_t`, :class:`enumeration_t` - location within file system ( file or directory ) """ def __init__( self, name=None, decl_type=None, header_dir=None, header_file=None): """ :param decl_type: declaration type to match by. For example :class:`enumeration_t`. :type decl_type: any class that derives from :class:`declaration_t` class :param name: declaration name, could be full name. :type name: str :param header_dir: absolute directory path :type header_dir: str :param header_file: absolute file path :type header_file: str """ # An other option is that pygccxml will create absolute path using # os.path.abspath function. But I think this is just wrong, because # abspath builds path using current working directory. This behavior # is fragile and very difficult to find a bug. matcher_base_t.__init__(self) self.decl_type = decl_type self.__name = None self.__opt_is_tmpl_inst = None self.__opt_tmpl_name = None self.__opt_is_full_name = None self.__decl_name_only = None # Set the name through the setter. self.name = name self.header_dir = header_dir self.header_file = header_file if self.header_dir: self.header_dir = utils.normalize_path(self.header_dir) if not os.path.isabs(self.header_dir): raise RuntimeError( "Path to header directory should be absolute!") if self.header_file: self.header_file = utils.normalize_path(self.header_file) if not os.path.isabs(self.header_file): raise RuntimeError("Path to header file should be absolute!") @property def name(self): return self.__name @name.setter def name(self, name): self.__name = name if not self.__name: self.__opt_is_tmpl_inst = None self.__opt_tmpl_name = None self.__opt_is_full_name = None self.__decl_name_only = None else: self.__opt_is_tmpl_inst = templates.is_instantiation(self.__name) self.__opt_tmpl_name = templates.name(self.__name) if self.__opt_is_tmpl_inst: if '::' in self.__opt_tmpl_name: self.__opt_is_full_name = True self.__decl_name_only = \ self.__opt_tmpl_name.split('::')[-1] else: self.__opt_is_full_name = False self.__decl_name_only = self.__opt_tmpl_name self.__name = templates.normalize(name) else: if '::' in self.__name: self.__opt_is_full_name = True self.__decl_name_only = self.__name.split('::')[-1] else: self.__opt_is_full_name = False self.__decl_name_only = self.__name def __str__(self): msg = [] if self.decl_type is not None: msg.append('(decl type==%s)' % self.decl_type.__name__) if self.name is not None: msg.append('(name==%s)' % self.name) if self.header_dir is not None: msg.append('(header dir==%s)' % self.header_dir) if self.header_file is not None: msg.append('(header file==%s)' % self.header_file) if not msg: msg.append('any') return ' and '.join(msg) def __call__(self, decl): if self.decl_type is not None: if not isinstance(decl, self.decl_type): return False if self.name is not None: if not self.check_name(decl): return False if self.header_dir is not None: if decl.location: decl_dir = os.path.abspath( os.path.dirname(decl.location.file_name)) decl_dir = utils.normalize_path(decl_dir) if decl_dir[:len(self.header_dir)] != self.header_dir: return False else: return False if self.header_file is not None: if decl.location: decl_file = os.path.abspath(decl.location.file_name) decl_file = utils.normalize_path(decl_file) if decl_file != self.header_file: return False else: return False return True def check_name(self, decl): assert self.name is not None if self.__opt_is_tmpl_inst: if not self.__opt_is_full_name: if self.name != templates.normalize_name(decl) \ and self.name != templates.normalize_partial_name(decl): return False else: if self.name != templates.normalize_full_name_true(decl) and \ self.name != templates.normalize_full_name_false(decl): return False else: if not self.__opt_is_full_name: if self.name != decl.name and self.name != decl.partial_name: return False else: if self.name != templates.normalize_full_name_true(decl) and \ self.name != templates.normalize_full_name_false(decl): return False return True def is_full_name(self): return self.__opt_is_full_name @property def decl_name_only(self): return self.__decl_name_only class variable_matcher_t(declaration_matcher_t): """ Instance of this class will match variables by next criteria: - :class:`declaration_matcher_t` criteria - variable type. Example: :class:`int_t` or 'int' """ def __init__( self, name=None, decl_type=None, header_dir=None, header_file=None): """ :param decl_type: variable type :type decl_type: string or instance of :class:`type_t` derived class """ declaration_matcher_t.__init__( self, name=name, decl_type=variable.variable_t, header_dir=header_dir, header_file=header_file) self._decl_type = decl_type def __call__(self, decl): if not super(variable_matcher_t, self).__call__(decl): return False if self._decl_type is not None: if isinstance(self._decl_type, cpptypes.type_t): if self._decl_type != decl.decl_type: return False else: if self._decl_type != decl.decl_type.decl_string: return False return True def __str__(self): msg = [super(variable_matcher_t, self).__str__()] if msg == ['any']: msg = [] if self._decl_type is not None: msg.append('(value type==%s)' % str(self._decl_type)) if not msg: msg.append('any') return ' and '.join(msg) class namespace_matcher_t(declaration_matcher_t): """Instance of this class will match namespaces by name.""" def __init__(self, name=None): declaration_matcher_t.__init__( self, name=name, decl_type=namespace.namespace_t) def __call__(self, decl): if self.name and decl.name == '': # unnamed namespace have same name as thier parent, we should # prevent this happens. The price is: user should search for # unnamed namespace directly. return False return super(namespace_matcher_t, self).__call__(decl) class calldef_matcher_t(declaration_matcher_t): """ Instance of this class will match callable by the following criteria: * :class:`declaration_matcher_t` criteria * return type. For example: :class:`int_t` or 'int' * argument types """ def __init__( self, name=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None): """ :param return_type: callable return type :type return_type: string or instance of :class:`type_t` derived class :type arg_types: list :param arg_types: list of function argument types. `arg_types` can contain. Any item within the list could be string or instance of :class:`type_t` derived class. If you don't want some argument to participate in match you can put None. For example: .. code-block:: python calldef_matcher_t( arg_types=[ 'int &', None ] ) will match all functions that takes 2 arguments, where the first one is reference to integer and second any """ if None is decl_type: decl_type = calldef.calldef_t declaration_matcher_t.__init__( self, name=name, decl_type=decl_type, header_dir=header_dir, header_file=header_file) self.return_type = return_type self.arg_types = arg_types def __call__(self, decl): if not super(calldef_matcher_t, self).__call__(decl): return False if self.return_type is not None \ and not self.__compare_types(self.return_type, decl.return_type): return False if self.arg_types: if isinstance(self.arg_types, (list, tuple)): if len(self.arg_types) != len(decl.arguments): return False for type_or_str, arg in zip(self.arg_types, decl.arguments): if type_or_str is None: continue else: if not self.__compare_types( type_or_str, arg.decl_type): return False return True @staticmethod def __compare_types(type_or_str, decl_type): assert type_or_str if decl_type is None: return False if isinstance(type_or_str, cpptypes.type_t): if type_or_str != decl_type: return False else: if type_or_str != decl_type.decl_string: return False return True def __str__(self): msg = [super(calldef_matcher_t, self).__str__()] if msg == ['any']: msg = [] if self.return_type is not None: msg.append('(return type==%s)' % str(self.return_type)) if self.arg_types: for i, arg_type in enumerate(self.arg_types): if arg_type is None: msg.append('(arg %d type==any)' % i) else: msg.append('(arg %d type==%s)' % (i, str(arg_type))) if not msg: msg.append('any') return ' and '.join(msg) class operator_matcher_t(calldef_matcher_t): """ Instance of this class will match operators by next criteria: * :class:`calldef_matcher_t` criteria * operator symbol: =, !=, (), [] and etc """ def __init__( self, name=None, symbol=None, return_type=None, arg_types=None, decl_type=None, header_dir=None, header_file=None): """ :param symbol: operator symbol :type symbol: str """ if None is decl_type: decl_type = calldef_members.operator_t calldef_matcher_t.__init__( self, name=name, return_type=return_type, arg_types=arg_types, decl_type=decl_type, header_dir=header_dir, header_file=header_file) self.symbol = symbol def __call__(self, decl): if not super(operator_matcher_t, self).__call__(decl): return False if self.symbol is not None: if self.symbol != decl.symbol: return False return True def __str__(self): msg = [super(operator_matcher_t, self).__str__()] if msg == ['any']: msg = [] if self.symbol is not None: msg.append('(symbol==%s)' % str(self.symbol)) if not msg: msg.append('any') return ' and '.join(msg) pygccxml-3.0.2/src/pygccxml/declarations/dependencies.py000066400000000000000000000124521476564735400234600ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import declaration from . import typedef from . import cpptypes from . import type_traits from . import class_declaration from . import variable from . import calldef from . import namespace def get_dependencies_from_decl(decl, recursive=True): """ Returns the list of all types and declarations the declaration depends on. """ result = [] if isinstance(decl, typedef.typedef_t) or \ isinstance(decl, variable.variable_t): return [dependency_info_t(decl, decl.decl_type)] if isinstance(decl, namespace.namespace_t): if recursive: for d in decl.declarations: result.extend(get_dependencies_from_decl(d)) return result if isinstance(decl, calldef.calldef_t): if decl.return_type: result.append( dependency_info_t(decl, decl.return_type, hint="return type")) for arg in decl.arguments: result.append(dependency_info_t(decl, arg.decl_type)) for exc in decl.exceptions: result.append(dependency_info_t(decl, exc, hint="exception")) return result if isinstance(decl, class_declaration.class_t): for base in decl.bases: result.append( dependency_info_t( decl, base.related_class, base.access_type, "base class")) if recursive: for access_type in class_declaration.ACCESS_TYPES.ALL: result.extend( __find_out_member_dependencies( decl.get_members(access_type), access_type)) return result return result def __find_out_member_dependencies(members, access_type): answer = [] for mem in members: answer.extend(get_dependencies_from_decl(mem, recursive=True)) member_ids = set([id(m) for m in members]) for dependency in answer: if id(dependency.declaration) in member_ids: dependency.access_type = access_type return answer class dependency_info_t(object): def __init__(self, decl, depend_on_it, access_type=None, hint=None): object.__init__(self) assert isinstance( depend_on_it, (class_declaration.class_t, cpptypes.type_t)) self._decl = decl self._depend_on_it = depend_on_it self._access_type = access_type self._hint = hint @property def declaration(self): return self._decl @property def depend_on_it(self): return self._depend_on_it @property def access_type(self): return self._access_type @access_type.setter def access_type(self, access_type): self._access_type = access_type def __str__(self): return 'declaration "%s" depends( %s ) on "%s" ' \ % (self.declaration, self.access_type, self.depend_on_it) @property def hint(self): """The declaration, that report dependency can put some additional inforamtion about dependency. It can be used later""" return self._hint def find_out_depend_on_it_declarations(self): """If declaration depends on other declaration and not on some type this function will return reference to it. Otherwise None will be returned """ return impl_details.dig_declarations(self.depend_on_it) @staticmethod def i_depend_on_them(decl): """Returns set of declarations. every item in the returned set, depends on a declaration from the input""" to_be_included = set() for dependency_info in get_dependencies_from_decl(decl): for ddecl in dependency_info.find_out_depend_on_it_declarations(): if ddecl: to_be_included.add(ddecl) if isinstance(decl.parent, class_declaration.class_t): to_be_included.add(decl.parent) return to_be_included @staticmethod def we_depend_on_them(decls): """Returns set of declarations. every item in the returned set, depends on a declaration from the input""" to_be_included = set() for decl in decls: to_be_included.update(dependency_info_t.i_depend_on_them(decl)) return to_be_included class impl_details(object): @staticmethod def dig_declarations(depend_on_it): if isinstance(depend_on_it, declaration.declaration_t): return [depend_on_it] base_type = type_traits.base_type( type_traits.remove_alias(depend_on_it)) if isinstance(base_type, cpptypes.declarated_t): return [base_type.declaration] elif isinstance(base_type, cpptypes.calldef_type_t): result = [] result.extend(impl_details.dig_declarations(base_type.return_type)) for argtype in base_type.arguments_types: result.extend(impl_details.dig_declarations(argtype)) if isinstance(base_type, cpptypes.member_function_type_t): result.extend( impl_details.dig_declarations( base_type.class_inst)) return result return [] pygccxml-3.0.2/src/pygccxml/declarations/elaborated_info.py000066400000000000000000000012511476564735400241420ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt class elaborated_info(object): """ This class stores the name of the elaborated type specifier. """ def __init__(self, elaborated_type_specifier): self._elaborated_type_specifier = elaborated_type_specifier @property def elaborated_type_specifier(self): """ Elaborated specifier (can be: struct, union, class or enum). Returns: str: elaborated specifier """ return self._elaborated_type_specifier pygccxml-3.0.2/src/pygccxml/declarations/enumeration.py000066400000000000000000000105431476564735400233570ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines class, that describes C++ `enum` """ import copy from . import declaration from . import byte_info from . import elaborated_info class enumeration_t( declaration.declaration_t, byte_info.byte_info, elaborated_info.elaborated_info): """ describes C++ `enum` """ def __init__(self, name='', values=None): """creates class that describes C++ `enum` declaration The items of the list 'values' may either be strings containing the enumeration value name or tuples (name, numeric value). :param name: `enum` name :type name: str :param parent: Parent declaration :type parent: declaration_t :param values: Enumeration values :type values: list """ declaration.declaration_t.__init__(self, name) byte_info.byte_info.__init__(self) elaborated_info.elaborated_info.__init__(self, "enum") # A list of tuples (valname(str), valnum(int)). The order of the list # should be the same as the order in the C/C++ source file. self._values = [] # Initialize values via property access self.values = values def __eq__(self, other): if not declaration.declaration_t.__eq__(self, other): return False return self.values == other.values __hash__ = declaration.declaration_t.__hash__ def _get__cmp__items(self): """implementation details""" return [self.values] @property def values(self): """A list of tuples (valname(str), valnum(int)) that contain the enumeration values. @type: list""" return copy.copy(self._values) @values.setter def values(self, values): self._values = [] # None is treated like an empty list if values is None: return # Check that we have indeed a list... if not isinstance(values, list): raise ValueError( "'values' must be a list (got a %s instead)" % type(values).__name__) # Append the items individually. This has the effect that there's # some additional type checking and that a copy of 'values' is stored # and the caller cannot further manipulate the list via his own # reference for item in values: if isinstance(item, str): self.append_value(item) elif isinstance(item, tuple): name, num = item self.append_value(name, num) else: raise ValueError( "'values' contains an invalid item: %s" % item) def append_value(self, valuename, valuenum=None): """Append another enumeration value to the `enum`. The numeric value may be None in which case it is automatically determined by increasing the value of the last item. When the 'values' attribute is accessed the resulting list will be in the same order as append_value() was called. :param valuename: The name of the value. :type valuename: str :param valuenum: The numeric value or None. :type valuenum: int """ # No number given? Then use the previous one + 1 if valuenum is None: if not self._values: valuenum = 0 else: valuenum = self._values[-1][1] + 1 # Store the new value self._values.append((valuename, int(valuenum))) def has_value_name(self, name): """Check if this `enum` has a particular name among its values. :param name: Enumeration value name :type name: str :rtype: True if there is an enumeration value with the given name """ for val, _ in self._values: if val == name: return True return False def get_name2value_dict(self): """returns a dictionary, that maps between `enum` name( key ) and `enum` value( value )""" x = {} for val, num in self._values: x[val] = num return x def i_depend_on_them(self, recursive=True): self._warn_deprecated() return [] pygccxml-3.0.2/src/pygccxml/declarations/free_calldef.py000066400000000000000000000073521476564735400234300ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import calldef from . import calldef_members from . import calldef_types from . import declaration_utils from . import cpptypes from . import type_traits from . import type_traits_classes class free_calldef_t(calldef.calldef_t): """base class for "callable" declarations that defined within C++ namespace""" def __init__(self, *args, **keywords): calldef.calldef_t.__init__(self, *args, **keywords) def __str__(self): # Get the full name of the calldef... name = declaration_utils.full_name(self) if name[:2] == "::": name = name[2:] # Add the arguments... args = [str(a) for a in self.arguments] res = "%s(%s)" % (name, ", ".join(args)) # Add the return type... if self.return_type is not None: res = "%s %s" % (self.return_type, res) # extern? if self.has_extern: res = "extern " + res # Append the declaration class cls = self.__class__.__name__ if cls[-2:] == "_t": cls = cls[:-2] cls = cls.replace('_', ' ') return "%s [%s]" % (res, cls) def _get__cmp__call_items(self): """implementation details""" return [] def function_type(self): """returns function type. See :class:`type_t` hierarchy""" return cpptypes.free_function_type_t( return_type=self.return_type, arguments_types=[ arg.decl_type for arg in self.arguments]) def create_decl_string(self, with_defaults=True): f_type = self.function_type() if with_defaults: return f_type.decl_string return f_type.partial_decl_string def guess_calling_convention(self): """This function should be overriden in the derived classes and return more-or-less successfull guess about calling convention""" return calldef_types.CALLING_CONVENTION_TYPES.UNKNOWN class free_function_t(free_calldef_t): """describes free function declaration""" def __init__(self, *args, **keywords): free_calldef_t.__init__(self, *args, **keywords) def get_mangled_name(self): if not self._mangled \ and '<' not in self.name and not self.overloads: # it is possible we deal with C function, so lets put it name as # mangled one return self.name return self._mangled class free_operator_t(free_calldef_t, calldef_members.operator_t): """describes free operator declaration""" def __init__(self, *args, **keywords): free_calldef_t.__init__(self, *args, **keywords) calldef_members.operator_t.__init__(self, *args, **keywords) self.__class_types = None @property def class_types(self): """list of class/class declaration types, extracted from the operator arguments""" if None is self.__class_types: self.__class_types = [] for type_ in self.argument_types: decl = None type_ = type_traits.remove_reference(type_) if type_traits_classes.is_class(type_): decl = type_traits_classes.class_traits.get_declaration( type_) elif type_traits_classes.is_class_declaration(type_): tt = type_traits_classes.class_declaration_traits decl = tt.get_declaration(type_) else: pass if decl: self.__class_types.append(decl) return self.__class_types pygccxml-3.0.2/src/pygccxml/declarations/function_traits.py000066400000000000000000000077171476564735400242550ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines few algorithms, that deals with different properties of functions """ from . import calldef_types from . import calldef_members from . import type_traits from . import type_traits_classes def is_same_return_type(f1, f2): # covariant returns # The return type of an overriding function shall be either identical to # the return type of the overridden function or covariant with the classes # of the functions. If a function D::f overrides a function B::f, the # return types of the functions are covariant if they satisfy the following # criteria: # both are pointers to classes or references to classes # the class in the return type of B::f is the same class as the class in # the return type of D::f or, is an unambiguous direct or indirect base # class of the class in the return type of D::f and is accessible in D # both pointers or references have the same cv-qualification and the class # type in the return type of D::f has the same cv-qualification as or less # cv-qualification than the class type in the return type of B::f. if f1.__class__ is not f2.__class__: # it should be assert return False # 2 different calldef types if not isinstance(f1, calldef_members.member_calldef_t): # for free functions we compare return types as usual return type_traits.is_same(f1.return_type, f2.return_type) if f1.virtuality == calldef_types.VIRTUALITY_TYPES.NOT_VIRTUAL \ or f2.virtuality == calldef_types.VIRTUALITY_TYPES.NOT_VIRTUAL: # for non-virtual member functions we compare types as usual return type_traits.is_same(f1.return_type, f2.return_type) rt1 = f1.return_type rt2 = f2.return_type if type_traits.is_pointer(rt1) and type_traits.is_pointer(rt2): rt1 = type_traits.remove_pointer(rt1) rt2 = type_traits.remove_pointer(rt2) elif type_traits.is_reference(rt1) and type_traits.is_reference(rt2): rt1 = type_traits.remove_reference(rt1) rt2 = type_traits.remove_reference(rt2) else: return type_traits.is_same(f1.return_type, f2.return_type) if (type_traits.is_const(rt1) and type_traits.is_const(rt2)) \ or (not type_traits.is_const(rt1) and not type_traits.is_const(rt2)): rt1 = type_traits.remove_const(rt1) rt2 = type_traits.remove_const(rt2) else: return False if not type_traits_classes.is_class(rt1) or not \ type_traits_classes.is_class(rt2): return type_traits.is_same(rt1, rt2) if type_traits_classes.is_union(rt1) or \ type_traits_classes.is_union(rt2): return type_traits.is_same(rt1, rt2) c1 = type_traits_classes.class_traits.get_declaration(rt1) c2 = type_traits_classes.class_traits.get_declaration(rt2) return type_traits.is_same(c1, c2) \ or type_traits_classes.is_base_and_derived(c1, c2) \ or type_traits_classes.is_base_and_derived(c2, c1) def is_same_function(f1, f2): """returns true if f1 and f2 is same function Use case: sometimes when user defines some virtual function in base class, it overrides it in a derived one. Sometimes we need to know whether two member functions is actually same function. """ if f1 is f2: return True if f1.__class__ is not f2.__class__: return False if isinstance(f1, calldef_members.member_calldef_t) and \ f1.has_const != f2.has_const: return False if f1.name != f2.name: return False if not is_same_return_type(f1, f2): return False if len(f1.arguments) != len(f2.arguments): return False for f1_arg, f2_arg in zip(f1.arguments, f2.arguments): if not type_traits.is_same(f1_arg.decl_type, f2_arg.decl_type): return False return True pygccxml-3.0.2/src/pygccxml/declarations/has_operator_matcher.py000066400000000000000000000041601476564735400252200ustar00rootroot00000000000000from . import type_traits from . import class_declaration from . import matchers from . import cpptypes def has_public_binary_operator(type_, operator_symbol): """returns True, if `type_` has public binary operator, otherwise False""" type_ = type_traits.remove_alias(type_) type_ = type_traits.remove_cv(type_) type_ = type_traits.remove_declarated(type_) assert isinstance(type_, class_declaration.class_t) if type_traits.is_std_string(type_) or type_traits.is_std_wstring(type_): # In some case compare operators of std::basic_string are not # instantiated return True operators = type_.member_operators( function=matchers.custom_matcher_t( lambda decl: not decl.is_artificial) & matchers.access_type_matcher_t('public'), symbol=operator_symbol, allow_empty=True, recursive=False) if operators: return True declarated = cpptypes.declarated_t(type_) const = cpptypes.const_t(declarated) reference = cpptypes.reference_t(const) operators = type_.top_parent.operators( function=lambda decl: not decl.is_artificial, arg_types=[reference, None], symbol=operator_symbol, allow_empty=True, recursive=True) if operators: return True for bi in type_.recursive_bases: assert isinstance(bi, class_declaration.hierarchy_info_t) if bi.access_type != class_declaration.ACCESS_TYPES.PUBLIC: continue operators = bi.related_class.member_operators( function=matchers.custom_matcher_t( lambda decl: not decl.is_artificial) & matchers.access_type_matcher_t('public'), symbol=operator_symbol, allow_empty=True, recursive=False) if operators: return True return False def has_public_equal(decl_type): """returns True, if class has public operator==, otherwise False""" return has_public_binary_operator(decl_type, '==') def has_public_less(decl_type): """returns True, if class has public operator<, otherwise False""" return has_public_binary_operator(decl_type, '<') pygccxml-3.0.2/src/pygccxml/declarations/location.py000066400000000000000000000031131476564735400226340ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt class location_t(object): """ Provides information about the location of the declaration within the source file. """ def __init__(self, file_name='', line=-1): self._file_name = file_name self._line = line def __eq__(self, other): if not isinstance(other, self.__class__): return False return self.line == other.line \ and self.file_name == other.file_name def __hash__(self): return hash(self.__class__) ^ hash(self.line) ^ hash(self.file_name) def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): if not isinstance(other, location_t): return self.__class__.__name__ < other.__class__.__name__ return (self.file_name, self.line) < (other.file_name, other.line) @property def file_name(self): """ Absolute source file name, type string. """ return self._file_name @file_name.setter def file_name(self, new_file_name): self._file_name = new_file_name @property def line(self): """ Line number, type int. """ return self._line @line.setter def line(self, new_line): self._line = new_line def as_tuple(self): """ Return tuple(self.file_name, self.line) """ return self.file_name, self.line pygccxml-3.0.2/src/pygccxml/declarations/matchers.py000066400000000000000000000143551476564735400226440ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines all "built-in" classes that implement declarations compare functionality according to some criteria """ import re from . import class_declaration class matcher_base_t(object): """matcher_base_t class defines interface for classes that will implement compare functionality according to some criteria. """ def __init__(self): object.__init__(self) def __call__(self, decl): raise NotImplementedError( "matcher must always implement the __call__() method.") def __invert__(self): """not-operator (~)""" return not_matcher_t(self) def __and__(self, other): """and-operator (&)""" return and_matcher_t([self, other]) def __or__(self, other): """or-operator (|)""" return or_matcher_t([self, other]) def __str__(self): return "base class for all matchers" class and_matcher_t(matcher_base_t): """ Combine several other matchers with "&" (and) operator. For example: find all private functions with name XXX .. code-block:: python matcher = access_type_matcher_t( 'private' ) & \ calldef_matcher_t( name='XXX' ) """ def __init__(self, matchers): matcher_base_t.__init__(self) self.matchers = matchers def __call__(self, decl): for matcher in self.matchers: if not matcher(decl): return False return True def __str__(self): return " & ".join(["(%s)" % str(x) for x in self.matchers]) class or_matcher_t(matcher_base_t): """Combine several other matchers with "|" (or) operator. For example: find all functions and variables with name 'XXX' .. code-block:: python matcher = variable_matcher_t( name='XXX' ) | \ calldef_matcher_t( name='XXX' ) """ def __init__(self, matchers): matcher_base_t.__init__(self) self.matchers = matchers def __call__(self, decl): for matcher in self.matchers: if matcher(decl): return True return False def __str__(self): return " | ".join(["(%s)" % str(x) for x in self.matchers]) class not_matcher_t(matcher_base_t): """ return the inverse result of a matcher For example: find all public and protected declarations .. code-block:: python matcher = ~access_type_matcher_t( 'private' ) """ def __init__(self, matcher): matcher_base_t.__init__(self) self.matcher = matcher def __call__(self, decl): return not self.matcher(decl) def __str__(self): return "~(%s)" % str(self.matcher) class regex_matcher_t(matcher_base_t): """ Instance of this class will match declaration using regular expression. User should supply a function that will extract from declaration desired information as string. Later, this matcher will match that string using user regular expression. """ def __init__(self, regex, function=None): """ :param regex: regular expression :type regex: string, an instance of this class will compile it for you :param function: function that will be called to get an information from declaration as string. As input this function takes single argument - reference to a declaration. Return value should be string. If function is None, then the matcher will use declaration name. """ matcher_base_t.__init__(self) self.regex = re.compile(regex) self.function = function if self.function is None: self.function = lambda decl: decl.name def __call__(self, decl): text = self.function(decl) return bool(self.regex.match(text)) def __str__(self): return '(regex=%s)' % self.regex class custom_matcher_t(matcher_base_t): """ Instance of this class will match declaration by user custom criteria. """ def __init__(self, function): """ :param function: callable, that takes single argument - declaration instance should return True or False """ matcher_base_t.__init__(self) self.function = function def __call__(self, decl): return bool(self.function(decl)) def __str__(self): return '(user criteria)' class access_type_matcher_t(matcher_base_t): """ Instance of this class will match declaration by its access type: public, private or protected. If declarations does not have access type, for example free function, then `False` will be returned. """ def __init__(self, access_type): """ :param access_type: declaration access type, could be "public", "private", "protected" :type access_type: :class: `str` """ matcher_base_t.__init__(self) self.access_type = access_type def __call__(self, decl): if not isinstance(decl.parent, class_declaration.class_t): return False return ( self.access_type == decl.parent.find_out_member_access_type(decl) ) def __str__(self): return '(access type=%s)' % self.access_type class virtuality_type_matcher_t(matcher_base_t): """ Instance of this class will match declaration by its virtual type: not virtual, virtual or pure virtual. If declarations does not have "virtual" property, for example free function, then `False` will be returned. """ def __init__(self, virtuality_type): """ :param access_type: declaration access type :type access_type: :class:VIRTUALITY_TYPES defines few constants for your convenience. """ matcher_base_t.__init__(self) self.virtuality_type = virtuality_type def __call__(self, decl): if not isinstance(decl.parent, class_declaration.class_t): return False return self.virtuality_type == decl.virtuality def __str__(self): return '(virtuality type=%s)' % self.virtuality_type pygccxml-3.0.2/src/pygccxml/declarations/mdecl_wrapper.py000066400000000000000000000061461476564735400236610ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines class :class:`mdecl_wrapper_t` that allows to work on set of declarations, as it was one declaration. The :class:`class ` allows user to not write "for" loops within the code. """ import os class call_redirector_t(object): """Internal class used to call some function of objects""" def __init__(self, name, decls): """creates call_redirector_t instance. :param name: name of method, to be called on every object in the `decls` list :param decls: list of objects """ object.__init__(self) self.name = name self.decls = decls def __call__(self, *arguments, **keywords): """calls method :attr:`call_redirector_t.name` on every object within the :attr:`call_redirector_t.decls` list""" for d in self.decls: callable_ = getattr(d, self.name) callable_(*arguments, **keywords) class mdecl_wrapper_t(object): """ multiple declarations class wrapper The main purpose of this class is to allow an user to work on many declarations, as they were only one single declaration. For example, instead of writing `for` loop like the following .. code-block:: python for c in global_namespace.classes(): c.attribute = "xxxx" you can write: .. code-block:: python global_namespace.classes().attribute = "xxxx" The same functionality could be applied on "set" methods too. """ def __init__(self, decls): """:param decls: list of declarations to operate on. :type decls: list of :class:`declaration wrappers ` """ object.__init__(self) self.__dict__['declarations'] = decls def __bool__(self): return bool(self.declarations) def __len__(self): """returns the number of declarations""" return len(self.declarations) def __getitem__(self, index): """provides access to declaration""" return self.declarations[index] def __iter__(self): return iter(self.declarations) def __ensure_attribute(self, name): invalid_decls = [d for d in self.declarations if not hasattr(d, name)] sep = os.linesep + ' ' if invalid_decls: raise RuntimeError( "Next declarations don't have '%s' attribute: %s" % (name, sep.join(map(str, invalid_decls)))) def __setattr__(self, name, value): """Updates the value of attribute on all declarations. :param name: name of attribute :param value: new value of attribute """ self.__ensure_attribute(name) for d in self.declarations: setattr(d, name, value) def __getattr__(self, name): """:param name: name of method """ return call_redirector_t(name, self.declarations) def __contains__(self, item): return item in self.declarations pygccxml-3.0.2/src/pygccxml/declarations/namespace.py000066400000000000000000000176421476564735400227740ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Describe a C++ namespace declaration. """ from . import scopedef from . import declaration_utils class namespace_t(scopedef.scopedef_t): """ Describes C++ namespace. """ def __init__(self, name='', declarations=None): """ Creates an object that describes a C++ namespace declaration. Args: name (str): name of the namespace declarations (list[declaration_t]): list of declarations """ scopedef.scopedef_t.__init__(self, name) if not declarations: declarations = [] # List of all declarations belonging to this namespace self._declarations = declarations def __str__(self): name = declaration_utils.full_name(self) if name != "::" and name[:2] == "::": name = name[2:] return "%s [namespace]" % name def _get__cmp__scope_items(self): """ Implementation detail. """ return [self.declarations.sort()] def _get_declarations_impl(self): return self._declarations @property def declarations(self): """ List of children declarations. Returns: list[declaration_t] """ return scopedef.scopedef_t.declarations.fget(self) @declarations.setter def declarations(self, declarations): """ Set list of all declarations defined in the namespace. Args: declarations (list[declaration_t]): list of declarations """ self._declarations = declarations def take_parenting(self, inst): """ Takes parenting from inst and transfers it to self. Args: inst (namespace_t): a namespace declaration """ if self is inst: return for decl in inst.declarations: decl.parent = self self.declarations.append(decl) inst.declarations = [] def adopt_declaration(self, decl): self.declarations.append(decl) decl.parent = self decl.cache.reset() def remove_declaration(self, decl): """ Removes declaration from members list. :param decl: declaration to be removed :type decl: :class:`declaration_t` """ del self.declarations[self.declarations.index(decl)] decl.cache.reset() # add more comment about this. # if not keep_parent: # decl.parent=None def namespace(self, name=None, function=None, recursive=None): """ Returns reference to namespace declaration that matches a defined criteria. """ return ( self._find_single( scopedef.scopedef_t._impl_matchers[namespace_t.namespace], name=name, function=function, recursive=recursive) ) def namespaces( self, name=None, function=None, recursive=None, allow_empty=None): """ Returns a set of namespace declarations that match a defined criteria. """ return ( self._find_multiple( scopedef.scopedef_t._impl_matchers[namespace_t.namespace], name=name, function=function, recursive=recursive, allow_empty=allow_empty) ) def free_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """ Returns reference to free function declaration that matches a defined criteria. """ return ( self._find_single( scopedef.scopedef_t._impl_matchers[namespace_t.free_function], name=name, function=function, decl_type=self._impl_decl_types[namespace_t.free_function], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def free_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """ Returns a set of free function declarations that match a defined criteria. """ return ( self._find_multiple( scopedef.scopedef_t._impl_matchers[namespace_t.free_function], name=name, function=function, decl_type=self._impl_decl_types[namespace_t.free_function], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def free_operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """ Returns reference to free operator declaration that matches a defined criteria. """ return ( self._find_single( scopedef.scopedef_t._impl_matchers[namespace_t.free_operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[namespace_t.free_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def free_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """ Returns a set of free operator declarations that match a defined criteria. """ return ( self._find_multiple( scopedef.scopedef_t._impl_matchers[namespace_t.free_operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[namespace_t.free_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def i_depend_on_them(self, recursive=True): self._warn_deprecated() answer = [] if recursive: for decl in self.declarations: answer.extend(decl.i_depend_on_them()) return answer def get_global_namespace(decls): """ Get the global namespace (::) from a declaration tree. Args: decls (list[declaration_t]): a list of declarations Returns: namespace_t: the global namespace_t object (::) """ found = [ decl for decl in scopedef.make_flatten(decls) if decl.name == '::' and isinstance(decl, namespace_t)] if len(found) == 1: return found[0] raise RuntimeError("Unable to find global namespace.") pygccxml-3.0.2/src/pygccxml/declarations/pattern_parser.py000066400000000000000000000162761476564735400240730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Implementation details """ import re class parser_t(object): """implementation details""" def __init__( self, pattern_char_begin, pattern_char_end, pattern_char_separator): self.__begin = pattern_char_begin self.__end = pattern_char_end self.__separator = pattern_char_separator # right now parser does not take into account next qualifiers, but it # will self.__text_qualifier = '"' self.__char_qualifier = "'" self.__escape = '\\' def has_pattern(self, decl_string): """ Implementation detail """ if self.__begin == "<": # Cleanup parentheses blocks before checking for the pattern # See also the args() method (in this file) for more explanations. decl_string = re.sub("\\s\\(.*?\\)", "", decl_string).strip() last_part = decl_string.split('::')[-1] return ( decl_string.find(self.__begin) != -1 and last_part.find(self.__end) != -1 ) def name(self, decl_string): """implementation details""" if not self.has_pattern(decl_string): return decl_string args_begin = decl_string.find(self.__begin) return decl_string[0: args_begin].strip() def __find_args_separator(self, decl_string, start_pos): """implementation details""" bracket_depth = 0 for index, ch in enumerate(decl_string[start_pos:]): if ch not in (self.__begin, self.__end, self.__separator): continue # I am interested only in < and > elif self.__separator == ch: if not bracket_depth: return index + start_pos elif self.__begin == ch: bracket_depth += 1 elif not bracket_depth: return index + start_pos else: bracket_depth -= 1 return -1 def args(self, decl_string): """ Extracts a list of arguments from the provided declaration string. Implementation detail. Example usages: Input: myClass, std::vector> Output: [std::vector, std::vector] Args: decl_string (str): the full declaration string Returns: list: list of arguments as strings """ args_begin = decl_string.find(self.__begin) args_end = decl_string.rfind(self.__end) if -1 in (args_begin, args_end) or args_begin == args_end: raise RuntimeError( "%s doesn't validate template instantiation string" % decl_string) args_only = decl_string[args_begin + 1: args_end].strip() # The list of arguments to be returned args = [] parentheses_blocks = [] prev_span = 0 if self.__begin == "<": # In case where we are splitting template names, there # can be parentheses blocks (for arguments) that need to be taken # care of. # Build a regex matching a space (\s) # + something inside parentheses regex = re.compile("\\s\\(.*?\\)") for m in regex.finditer(args_only): # Store the position and the content parentheses_blocks.append([m.start() - prev_span, m.group()]) prev_span = m.end() - m.start() # Cleanup the args_only string by removing the parentheses and # their content. args_only = args_only.replace(m.group(), "") # Now we are trying to split the args_only string in multiple arguments previous_found, found = 0, 0 while True: found = self.__find_args_separator(args_only, previous_found) if found == -1: args.append(args_only[previous_found:].strip()) # This is the last argument. Break out of the loop. break else: args.append(args_only[previous_found: found].strip()) previous_found = found + 1 # skip found separator # Get the size and position for each argument absolute_pos_list = [] absolute_pos = 0 for arg in args: absolute_pos += len(arg) absolute_pos_list.append(absolute_pos) for item in parentheses_blocks: # In case where there are parentheses blocks we add them back # to the right argument parentheses_block_absolute_pos = item[0] parentheses_block_string = item[1] current_arg_absolute_pos = 0 for arg_index, arg_absolute_pos in enumerate(absolute_pos_list): current_arg_absolute_pos += arg_absolute_pos if current_arg_absolute_pos >= parentheses_block_absolute_pos: # Add the parentheses block back and break out of the loop. args[arg_index] += parentheses_block_string break return args NOT_FOUND = (-1, -1) """implementation details""" def find_args(self, text, start=None): """implementation details""" if start is None: start = 0 first_occurance = text.find(self.__begin, start) if first_occurance == -1: return self.NOT_FOUND previous_found, found = first_occurance + 1, 0 while True: found = self.__find_args_separator(text, previous_found) if found == -1: return self.NOT_FOUND elif text[found] == self.__end: return first_occurance, found else: previous_found = found + 1 # skip found sep def split(self, decl_string): """implementation details""" assert self.has_pattern(decl_string) return self.name(decl_string), self.args(decl_string) def split_recursive(self, decl_string): """implementation details""" assert self.has_pattern(decl_string) to_go = [decl_string] while to_go: name, args = self.split(to_go.pop()) for arg in args: if self.has_pattern(arg): to_go.append(arg) yield name, args def join(self, name, args, arg_separator=None): """implementation details""" if None is arg_separator: arg_separator = ', ' args = [_f for _f in args if _f] if not args: args_str = '' elif len(args) == 1: args_str = args[0] else: args_str = arg_separator.join(args) return ''.join([name, self.__begin, args_str, self.__end]) def normalize(self, decl_string, arg_separator=None): """implementation details""" if not self.has_pattern(decl_string): return decl_string name, args = self.split(decl_string) for i, arg in enumerate(args): args[i] = self.normalize(arg) return self.join(name, args, arg_separator) pygccxml-3.0.2/src/pygccxml/declarations/pointer_traits.py000066400000000000000000000114421476564735400240760ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import templates from . import type_traits from . import class_declaration from . import class_declaration_traits from . import class_traits from . import traits_impl_details from . import runtime_errors class internal_type_traits(object): """small convenience class, which provides access to internal types""" # TODO: add exists function @staticmethod def get_by_name(type_, name): if class_traits.is_my_case(type_): cls = class_traits.get_declaration(type_) return type_traits.remove_declarated( cls.typedef(name, recursive=False).decl_type) elif class_declaration_traits.is_my_case(type_): cls = class_declaration_traits.get_declaration(type_) value_type_str = templates.args(cls.name)[0] ref = traits_impl_details.impl_details.find_value_type( cls.top_parent, value_type_str) if ref: return ref else: raise RuntimeError(( "Unable to find reference to internal " + "type '%s' in type '%s'.") % (name, cls.decl_string)) else: raise RuntimeError( ("Unable to find reference to internal type '%s'" "in type '%s'.") % (name, type_.decl_string)) class smart_pointer_traits(object): """implements functionality, needed for convenient work with smart pointers""" @staticmethod def is_smart_pointer(type_): """returns True, if type represents instantiation of `boost::shared_ptr` or `std::shared_ptr`, False otherwise""" type_ = type_traits.remove_alias(type_) type_ = type_traits.remove_cv(type_) type_ = type_traits.remove_declarated(type_) if not isinstance(type_, (class_declaration.class_declaration_t, class_declaration.class_t)): return False if not ( traits_impl_details.impl_details.is_defined_in_xxx( 'boost', type_) or traits_impl_details.impl_details.is_defined_in_xxx( 'std', type_)): return False return type_.decl_string.startswith('::boost::shared_ptr<') or \ type_.decl_string.startswith('::std::shared_ptr<') @staticmethod def value_type(type_): """returns reference to `boost::shared_ptr` \ or `std::shared_ptr` value type""" if not smart_pointer_traits.is_smart_pointer(type_): raise TypeError( 'Type "%s" is not an instantiation of \ boost::shared_ptr or std::shared_ptr' % type_.decl_string) try: return internal_type_traits.get_by_name(type_, "element_type") except runtime_errors.declaration_not_found_t: return _search_in_bases(type_) class auto_ptr_traits(object): """implements functionality, needed for convenient work with `std::auto_ptr` pointers""" @staticmethod def is_smart_pointer(type_): """returns True, if type represents instantiation of `boost::shared_ptr`, False otherwise""" type_ = type_traits.remove_alias(type_) type_ = type_traits.remove_cv(type_) type_ = type_traits.remove_declarated(type_) if not isinstance(type_, (class_declaration.class_declaration_t, class_declaration.class_t)): return False if not traits_impl_details.impl_details.is_defined_in_xxx( 'std', type_): return False return type_.decl_string.startswith('::std::auto_ptr<') @staticmethod def value_type(type_): """returns reference to `boost::shared_ptr` value type""" if not auto_ptr_traits.is_smart_pointer(type_): raise TypeError( 'Type "%s" is not instantiation of std::auto_ptr' % type_.decl_string) try: return internal_type_traits.get_by_name(type_, "element_type") except runtime_errors.declaration_not_found_t: return _search_in_bases(type_) def _search_in_bases(type_): """Implementation detail.""" found = False for base_type in type_.declaration.bases: try: found = internal_type_traits.get_by_name( base_type.related_class, "element_type") except runtime_errors.declaration_not_found_t: pass if found: return found raise RuntimeError( ("Unable to find 'element_type' declaration '%s'" "in type '%s'.") % type_.decl_string) pygccxml-3.0.2/src/pygccxml/declarations/runtime_errors.py000066400000000000000000000027241476564735400241120ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt class declaration_not_found_t(RuntimeError): """Exception raised when the declaration could not be found""" def __init__(self, decl_matcher): RuntimeError.__init__(self) self._decl_matcher = decl_matcher def __str__(self): return ( "Unable to find declaration. Matcher: [%s]" % str( self._decl_matcher) ) class multiple_declarations_found_t(RuntimeError): """Exception raised when more than one declaration was found""" def __init__(self, decl_matcher): RuntimeError.__init__(self) self._decl_matcher = decl_matcher def __str__(self): return ( "Multiple declarations have been found. Matcher: [%s]" % str( self._decl_matcher) ) class visit_function_has_not_been_found_t(RuntimeError): """ Exception that is raised, from :func:`apply_visitor`, when a visitor could not be applied. """ def __init__(self, visitor, decl_inst): RuntimeError.__init__(self) self.__msg = ( "Unable to find visit function. Visitor class: %s. " + "Declaration instance class: %s'") \ % (visitor.__class__.__name__, decl_inst.__class__.__name__) def __str__(self): return self.__msg pygccxml-3.0.2/src/pygccxml/declarations/scopedef.py000066400000000000000000001156411476564735400226260ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """Defines :class:`scopedef_t` class""" import timeit try: from collections.abc import Callable except ImportError: from collections import Callable from . import algorithm from . import templates from . import declaration from . import mdecl_wrapper from . import byte_info from . import elaborated_info from . import runtime_errors from .. import utils class matcher(object): """Class-namespace, contains implementation of a few "find" algorithms""" @staticmethod def find(decl_matcher, decls, recursive=True): """ Returns a list of declarations that match `decl_matcher` defined criteria or None :param decl_matcher: Python callable object, that takes one argument - reference to a declaration :param decls: the search scope, :class:declaration_t object or :class:declaration_t objects list t :param recursive: boolean, if True, the method will run `decl_matcher` on the internal declarations too """ where = [] if isinstance(decls, list): where.extend(decls) else: where.append(decls) if recursive: where = make_flatten(where) return list(filter(decl_matcher, where)) @staticmethod def find_single(decl_matcher, decls, recursive=True): """ Returns a reference to the declaration, that match `decl_matcher` defined criteria. if a unique declaration could not be found the method will return None. :param decl_matcher: Python callable object, that takes one argument - reference to a declaration :param decls: the search scope, :class:declaration_t object or :class:declaration_t objects list t :param recursive: boolean, if True, the method will run `decl_matcher` on the internal declarations too """ answer = matcher.find(decl_matcher, decls, recursive) if len(answer) == 1: return answer[0] @staticmethod def get_single(decl_matcher, decls, recursive=True): """ Returns a reference to declaration, that match `decl_matcher` defined criteria. If a unique declaration could not be found, an appropriate exception will be raised. :param decl_matcher: Python callable object, that takes one argument - reference to a declaration :param decls: the search scope, :class:declaration_t object or :class:declaration_t objects list t :param recursive: boolean, if True, the method will run `decl_matcher` on the internal declarations too """ answer = matcher.find(decl_matcher, decls, recursive) if len(answer) == 1: return answer[0] elif not answer: raise runtime_errors.declaration_not_found_t(decl_matcher) else: raise runtime_errors.multiple_declarations_found_t(decl_matcher) class scopedef_t(declaration.declaration_t): """ Base class for :class:`namespace_t` and :class:`class_t` classes. This is the base class for all declaration classes that may have children nodes. The children can be accessed via the :attr:`scopedef_t.declarations` property. Also this class provides "get/select/find" interface. Using this class you can get instance or instances of internal declaration(s). You can find declaration(s) using next criteria: 1. ``name`` - declaration name, could be full qualified name 2. ``header_dir`` - directory, to which belongs file, that the declaration was declared in. ``header_dir`` should be absolute path. 3. ``header_file`` - file that the declaration was declared in. 4. ``function`` - user ( your ) custom criteria. The interesting thing is that this function will be joined with other arguments (criteria). 5. ``recursive`` - the search declaration range, if True will be search in internal declarations too. Every ""query"" API, takes name or function as the first argument. .. code-block:: python global_namespace.member_function("do_something) the statement returns reference to member function named "do_something". If there the function doesn't exist or more than one function exists, an exception is raised. If you want to query for many declarations, use other function(s): .. code-block:: python do_something = global_namespace.member_functions("do_something") the statement returns :class:`mdecl_wrapper_t` instance. That object will save you writing `for` loops. For more information see :class:`the class ` documentation. """ RECURSIVE_DEFAULT = True ALLOW_EMPTY_MDECL_WRAPPER = False # this class variable is used to prevent recursive imports _impl_matchers = {} # this class variable is used to prevent recursive imports _impl_decl_types = {} # this class variable is used to prevent recursive imports _impl_all_decl_types = [] def __init__(self, name=''): declaration.declaration_t.__init__(self, name) self._optimized = False self._type2decls = {} self._type2name2decls = {} self._type2decls_nr = {} self._type2name2decls_nr = {} self._all_decls = None self._all_decls_not_recursive = [] @property def _logger(self): """reference to :attr:`pygccxml.utils.loggers.queries_engine` logger""" return utils.loggers.queries_engine def _get__cmp__scope_items(self): """implementation details""" raise NotImplementedError() def _get__cmp__items(self): """implementation details""" items = [] if self._optimized: # in this case we don't need to build class internal declarations # list items.append(self._all_decls_not_recursive.sort()) else: items.append(self.declarations.sort()) items.extend(self._get__cmp__scope_items()) return items def __eq__(self, other): if not declaration.declaration_t.__eq__(self, other): return False return self.declarations[:].sort() == other.declarations[:].sort() __hash__ = declaration.declaration_t.__hash__ def _get_declarations_impl(self): raise NotImplementedError() @property def declarations(self): """ List of children declarations. Returns: List[declarations.declaration_t] """ if self._optimized: return self._all_decls_not_recursive return self._get_declarations_impl() @declarations.setter def declarations(self, declarations): """ Set list of all declarations defined in the namespace. Args: List[declarations.declaration_t]: list of declarations Not implemented. """ raise NotImplementedError() def remove_declaration(self, decl): raise NotImplementedError() @staticmethod def __decl_types(decl): """implementation details""" types = [] bases = list(decl.__class__.__bases__) if 'pygccxml' in decl.__class__.__module__: types.append(decl.__class__) while bases: base = bases.pop() if base is declaration.declaration_t: continue if base is byte_info.byte_info: continue if base is elaborated_info.elaborated_info: continue if 'pygccxml' not in base.__module__: continue types.append(base) bases.extend(base.__bases__) return types def clear_optimizer(self): """Cleans query optimizer state""" self._optimized = False self._type2decls = {} self._type2name2decls = {} self._type2decls_nr = {} self._type2name2decls_nr = {} self._all_decls = None self._all_decls_not_recursive = None for decl in self.declarations: if isinstance(decl, scopedef_t): decl.clear_optimizer() def init_optimizer(self): """ Initializes query optimizer state. There are 4 internals hash tables: 1. from type to declarations 2. from type to declarations for non-recursive queries 3. from type to name to declarations 4. from type to name to declarations for non-recursive queries Almost every query includes declaration type information. Also very common query is to search some declaration(s) by name or full name. Those hash tables allows to search declaration very quick. """ if self.name == '::': self._logger.debug( "preparing data structures for query optimizer - started") start_time = timeit.default_timer() self.clear_optimizer() for dtype in scopedef_t._impl_all_decl_types: self._type2decls[dtype] = [] self._type2decls_nr[dtype] = [] self._type2name2decls[dtype] = {} self._type2name2decls_nr[dtype] = {} self._all_decls_not_recursive = self.declarations self._all_decls = make_flatten( self._all_decls_not_recursive) for decl in self._all_decls: types = self.__decl_types(decl) for type_ in types: self._type2decls[type_].append(decl) name2decls = self._type2name2decls[type_] if decl.name not in name2decls: name2decls[decl.name] = [] name2decls[decl.name].append(decl) if self is decl.parent: self._type2decls_nr[type_].append(decl) name2decls_nr = self._type2name2decls_nr[type_] if decl.name not in name2decls_nr: name2decls_nr[decl.name] = [] name2decls_nr[decl.name].append(decl) for decl in self._all_decls_not_recursive: if isinstance(decl, scopedef_t): decl.init_optimizer() if self.name == '::': self._logger.debug(( "preparing data structures for query optimizer - " + "done( %f seconds ). "), (timeit.default_timer() - start_time)) self._optimized = True @staticmethod def _build_operator_function(name, function): if isinstance(name, Callable): return name return function @staticmethod def _build_operator_name(name, function, symbol): """implementation details""" def add_operator(sym): if 'new' in sym or 'delete' in sym: return 'operator ' + sym return 'operator' + sym if isinstance(name, Callable) and None is function: name = None if name: if 'operator' not in name: name = add_operator(name) return name elif symbol: return add_operator(symbol) return name # both name and symbol are None def _on_rename(self): for decl in self.decls(allow_empty=True): decl.cache.reset_name_based() # I am not sure whether to introduce this or not? # It could be very time consuming operation + it changes optimize query # data structures. # if self.parent: # if self.parent._optimized: # self.parent.init_optimizer() @staticmethod def __normalize_args(**keywds): """implementation details""" if isinstance(keywds['name'], Callable) and \ None is keywds['function']: keywds['function'] = keywds['name'] keywds['name'] = None return keywds def __findout_recursive(self, **keywds): """implementation details""" if None is keywds['recursive']: return self.RECURSIVE_DEFAULT return keywds['recursive'] def __findout_allow_empty(self, **keywds): """implementation details""" if None is keywds['allow_empty']: return self.ALLOW_EMPTY_MDECL_WRAPPER return keywds['allow_empty'] @staticmethod def __findout_decl_type(match_class, **keywds): """implementation details""" if 'decl_type' in keywds: return keywds['decl_type'] matcher_args = keywds.copy() del matcher_args['function'] del matcher_args['recursive'] if 'allow_empty' in matcher_args: del matcher_args['allow_empty'] decl_matcher = match_class(**matcher_args) if decl_matcher.decl_type: return decl_matcher.decl_type return None def __create_matcher(self, match_class, **keywds): """implementation details""" matcher_args = keywds.copy() del matcher_args['function'] del matcher_args['recursive'] if 'allow_empty' in matcher_args: del matcher_args['allow_empty'] decl_matcher = decl_matcher = match_class(**matcher_args) if keywds['function']: self._logger.debug( 'running query: %s and ', str(decl_matcher)) return lambda decl: decl_matcher(decl) and keywds['function'](decl) self._logger.debug('running query: %s', str(decl_matcher)) return decl_matcher def __findout_range(self, name, decl_type, recursive): """implementation details""" if not self._optimized: self._logger.debug( 'running non optimized query - optimization has not been done') decls = self.declarations if recursive: decls = make_flatten(self.declarations) if decl_type: decls = [d for d in decls if isinstance(d, decl_type)] return decls if name and templates.is_instantiation(name): # templates has tricky mode to compare them, so lets check the # whole range name = None if name and decl_type: impl_match = scopedef_t._impl_matchers[scopedef_t.decl](name=name) if impl_match.is_full_name(): name = impl_match.decl_name_only if recursive: self._logger.debug( 'query has been optimized on type and name') return self._type2name2decls[decl_type].get(name, []) self._logger.debug( 'non recursive query has been optimized on type and name') return self._type2name2decls_nr[decl_type].get(name, []) elif decl_type: if recursive: self._logger.debug('query has been optimized on type') return self._type2decls[decl_type] self._logger.debug( 'non recursive query has been optimized on type') return self._type2decls_nr[decl_type] else: if recursive: self._logger.debug(( 'query has not been optimized ( hint: query does not ' + 'contain type and/or name )')) return self._all_decls self._logger.debug(( 'non recursive query has not been optimized ( hint: ' + 'query does not contain type and/or name )')) return self._all_decls_not_recursive def _find_single(self, match_class, **keywds): """implementation details""" self._logger.debug('find single query execution - started') start_time = timeit.default_timer() norm_keywds = self.__normalize_args(**keywds) decl_matcher = self.__create_matcher(match_class, **norm_keywds) dtype = self.__findout_decl_type(match_class, **norm_keywds) recursive_ = self.__findout_recursive(**norm_keywds) decls = self.__findout_range(norm_keywds['name'], dtype, recursive_) found = matcher.get_single(decl_matcher, decls, False) self._logger.debug( 'find single query execution - done( %f seconds )', (timeit.default_timer() - start_time)) return found def _find_multiple(self, match_class, **keywds): """implementation details""" self._logger.debug('find all query execution - started') start_time = timeit.default_timer() norm_keywds = self.__normalize_args(**keywds) decl_matcher = self.__create_matcher(match_class, **norm_keywds) dtype = self.__findout_decl_type(match_class, **norm_keywds) recursive_ = self.__findout_recursive(**norm_keywds) allow_empty = self.__findout_allow_empty(**norm_keywds) decls = self.__findout_range(norm_keywds['name'], dtype, recursive_) found = matcher.find(decl_matcher, decls, False) mfound = mdecl_wrapper.mdecl_wrapper_t(found) self._logger.debug('%d declaration(s) that match query', len(mfound)) self._logger.debug( 'find single query execution - done( %f seconds )', (timeit.default_timer() - start_time)) if not mfound and not allow_empty: raise RuntimeError( "Multi declaration query returned 0 declarations.") return mfound def decl( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None): """returns reference to declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[ scopedef_t.decl], name=name, function=function, decl_type=decl_type, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def decls( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[ scopedef_t.decl], name=name, function=function, decl_type=decl_type, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def class_( self, name=None, function=None, header_dir=None, header_file=None, recursive=None): """returns reference to class declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.class_], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.class_], header_dir=header_dir, header_file=header_file, recursive=recursive) ) def classes( self, name=None, function=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of class declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.class_], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.class_], header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def variable( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None): """returns reference to variable declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[ scopedef_t.variable], name=name, function=function, decl_type=decl_type, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def variables( self, name=None, function=None, decl_type=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of variable declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[ scopedef_t.variable], name=name, function=function, decl_type=decl_type, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def calldef( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to "calldef" declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.calldef], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.calldef], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def calldefs( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of :class:`calldef_t` declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.calldef], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.calldef], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to operator declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[scopedef_t.operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of operator declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[scopedef_t.operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def member_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to member declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.member_function], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.member_function], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def member_functions( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of member function declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.member_function], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.member_function], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def constructor( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to constructor declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.constructor], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.constructor], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def constructors( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of constructor declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.constructor], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.constructor], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def member_operator( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to member operator declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.member_operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[scopedef_t.member_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def member_operators( self, name=None, function=None, symbol=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of member operator declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.member_operator], name=self._build_operator_name(name, function, symbol), symbol=symbol, function=self._build_operator_function(name, function), decl_type=self._impl_decl_types[scopedef_t.member_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def casting_operator( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None): """returns reference to casting operator declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.casting_operator], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.casting_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive) ) def casting_operators( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of casting operator declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.casting_operator], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.casting_operator], return_type=return_type, arg_types=arg_types, header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def enumeration( self, name=None, function=None, header_dir=None, header_file=None, recursive=None): """returns reference to enumeration declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.enumeration], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.enumeration], header_dir=header_dir, header_file=header_file, recursive=recursive) ) def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of enumeration declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.enumeration], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.enumeration], header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def typedef( self, name=None, function=None, header_dir=None, header_file=None, recursive=None): """returns reference to typedef declaration, that is matched defined criteria""" return ( self._find_single( self._impl_matchers[scopedef_t.typedef], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.typedef], header_dir=header_dir, header_file=header_file, recursive=recursive) ) def typedefs( self, name=None, function=None, header_dir=None, header_file=None, recursive=None, allow_empty=None): """returns a set of typedef declarations, that are matched defined criteria""" return ( self._find_multiple( self._impl_matchers[scopedef_t.typedef], name=name, function=function, decl_type=self._impl_decl_types[ scopedef_t.typedef], header_dir=header_dir, header_file=header_file, recursive=recursive, allow_empty=allow_empty) ) def __getitem__(self, name_or_function): """ Allow simple name based find of declarations. Internally just calls `decls` method. :param name_or_function: Name of `decl` to lookup or finder function. """ return self.decls(name_or_function) def i_depend_on_them(self, recursive=True): raise NotImplementedError() def make_flatten(decl_or_decls): """ Converts tree representation of declarations to flatten one. :param decl_or_decls: reference to list of declaration's or single declaration :type decl_or_decls: :class:`declaration_t` or [ :class:`declaration_t` ] :rtype: [ all internal declarations ] """ def proceed_single(decl): answer = [decl] if not isinstance(decl, scopedef_t): return answer for elem in decl.declarations: if isinstance(elem, scopedef_t): answer.extend(proceed_single(elem)) else: answer.append(elem) return answer decls = [] if isinstance(decl_or_decls, list): decls.extend(decl_or_decls) else: decls.append(decl_or_decls) answer = [] for decl in decls: answer.extend(proceed_single(decl)) return answer def find_all_declarations( declarations, decl_type=None, name=None, parent=None, recursive=True, fullname=None): """ Returns a list of all declarations that match criteria, defined by developer. For more information about arguments see :class:`match_declaration_t` class. :rtype: [ matched declarations ] """ if recursive: decls = make_flatten(declarations) else: decls = declarations return list( filter( algorithm.match_declaration_t( decl_type=decl_type, name=name, fullname=fullname, parent=parent), decls)) def find_declaration( declarations, decl_type=None, name=None, parent=None, recursive=True, fullname=None): """ Returns single declaration that match criteria, defined by developer. If more the one declaration was found None will be returned. For more information about arguments see :class:`match_declaration_t` class. :rtype: matched declaration :class:`declaration_t` or None """ decl = find_all_declarations( declarations, decl_type=decl_type, name=name, parent=parent, recursive=recursive, fullname=fullname) if len(decl) == 1: return decl[0] def find_first_declaration( declarations, decl_type=None, name=None, parent=None, recursive=True, fullname=None): """ Returns first declaration that match criteria, defined by developer. For more information about arguments see :class:`match_declaration_t` class. :rtype: matched declaration :class:`declaration_t` or None """ decl_matcher = algorithm.match_declaration_t( decl_type=decl_type, name=name, fullname=fullname, parent=parent) if recursive: decls = make_flatten(declarations) else: decls = declarations for decl in decls: if decl_matcher(decl): return decl return None def declaration_files(decl_or_decls): """ Returns set of files Every declaration is declared in some file. This function returns set, that contains all file names of declarations. :param decl_or_decls: reference to list of declaration's or single declaration :type decl_or_decls: :class:`declaration_t` or [:class:`declaration_t`] :rtype: set(declaration file names) """ files = set() decls = make_flatten(decl_or_decls) for decl in decls: if decl.location: files.add(decl.location.file_name) return files pygccxml-3.0.2/src/pygccxml/declarations/templates.py000066400000000000000000000066541476564735400230370ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ template instantiation parser This module provides functionality necessary to * :func:`parse ` * :func:`split ` * :func:`join ` * :func:`normalize ` C++ template instantiations """ from . import pattern_parser from . import declaration_utils __THE_PARSER = pattern_parser.parser_t('<', '>', ',') def is_instantiation(decl_string): """ returns True if `decl_string` is template instantiation and False otherwise :param decl_string: string that should be checked for pattern presence :type decl_string: str :rtype: bool """ return __THE_PARSER.has_pattern(decl_string) def name(decl_string): """ returns name of instantiated template :type decl_string: str :rtype: str """ return __THE_PARSER.name(decl_string) def args(decl_string): """ returns list of template arguments :type decl_string: `str` :rtype: [`str`] """ return __THE_PARSER.args(decl_string) def split(decl_string): """returns (name, [arguments] )""" return __THE_PARSER.split(decl_string) def split_recursive(decl_string): """returns [(name, [arguments])]""" return __THE_PARSER.split_recursive(decl_string) def join(name_, args_): """returns name< argument_1, argument_2, ..., argument_n >""" return __THE_PARSER.join(name_, args_) def normalize(decl_string): """returns `decl_string`, which contains "normalized" spaces this functionality allows to implement comparison of 2 different string which are actually same: x::y< z > and x::y """ return __THE_PARSER.normalize(decl_string) def normalize_name(decl): """ Cached variant of normalize Args: decl (declaration.declaration_t): the declaration Returns: str: normalized name """ if decl.cache.normalized_name is None: decl.cache.normalized_name = normalize(decl.name) return decl.cache.normalized_name def normalize_partial_name(decl): """ Cached variant of normalize Args: decl (declaration.declaration_t): the declaration Returns: str: normalized name """ if decl.cache.normalized_partial_name is None: decl.cache.normalized_partial_name = normalize(decl.partial_name) return decl.cache.normalized_partial_name def normalize_full_name_true(decl): """ Cached variant of normalize Args: decl (declaration.declaration_t): the declaration Returns: str: normalized name """ if decl.cache.normalized_full_name_true is None: decl.cache.normalized_full_name_true = normalize( declaration_utils.full_name(decl, with_defaults=True)) return decl.cache.normalized_full_name_true def normalize_full_name_false(decl): """ Cached variant of normalize Args: decl (declaration.declaration_t): the declaration Returns: str: normalized name """ if decl.cache.normalized_full_name_false is None: decl.cache.normalized_full_name_false = normalize( declaration_utils.full_name(decl, with_defaults=False)) return decl.cache.normalized_full_name_false pygccxml-3.0.2/src/pygccxml/declarations/traits_impl_details.py000066400000000000000000000056661476564735400250770ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import namespace from . import calldef from . import cpptypes from . import type_traits from . import class_declaration class impl_details(object): """implementation details""" @staticmethod def is_defined_in_xxx(xxx, cls): """ Small helper method that checks whether the class `cls` is defined under `::xxx` namespace """ if not cls.parent: return False if not isinstance(cls.parent, namespace.namespace_t): return False if xxx != cls.parent.name: return False xxx_ns = cls.parent if not xxx_ns.parent: return False if not isinstance(xxx_ns.parent, namespace.namespace_t): return False if xxx_ns.parent.name != '::': return False global_ns = xxx_ns.parent return None is global_ns.parent @staticmethod def find_value_type(global_ns, value_type_str): """implementation details""" if not value_type_str.startswith('::'): value_type_str = '::' + value_type_str found = global_ns.decls( name=value_type_str, function=lambda decl: not isinstance(decl, calldef.calldef_t), allow_empty=True) if len(found) == 1: return found[0] no_global_ns_value_type_str = value_type_str[2:] if no_global_ns_value_type_str in cpptypes.FUNDAMENTAL_TYPES: return cpptypes.FUNDAMENTAL_TYPES[no_global_ns_value_type_str] elif type_traits.is_std_string(value_type_str): string_ = global_ns.typedef('::std::string') return type_traits.remove_declarated(string_) elif type_traits.is_std_wstring(value_type_str): string_ = global_ns.typedef('::std::wstring') return type_traits.remove_declarated(string_) else: value_type_str = no_global_ns_value_type_str has_const = value_type_str.startswith('const ') if has_const: value_type_str = value_type_str[len('const '):] has_pointer = value_type_str.endswith('*') if has_pointer: value_type_str = value_type_str[:-1] found = None if has_const or has_pointer: found = impl_details.find_value_type( global_ns, value_type_str) if not found: return None else: if isinstance(found, class_declaration.class_types): return cpptypes.declarated_t(found) if has_const: return cpptypes.const_t(found) if has_pointer: return cpptypes.pointer_t(found) return None pygccxml-3.0.2/src/pygccxml/declarations/type_traits.py000066400000000000000000000421041476564735400233760ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines few algorithms, that deals with different C++ type properties Are you aware of `boost::type_traits `_ library? pygccxml implements the same functionality. This module contains a set of very specific traits functions\\classes, each of which encapsulate a single trait from the C++ type system. For example: * is a type a pointer or a reference type ? * does a type have a trivial constructor ? * does a type have a const-qualifier ? """ from . import cpptypes from . import typedef from .. import utils def __remove_alias(type_): """ Implementation detail. Args: type_ (type_t): type Returns: type_t: the type associated to the inputted type """ if isinstance(type_, cpptypes.declarated_t) and \ isinstance(type_.declaration, typedef.typedef_t): return __remove_alias(type_.declaration.decl_type) if isinstance(type_, cpptypes.compound_t): type_.base = __remove_alias(type_.base) return type_ return type_ def remove_alias(type_): """ Returns `type_t` without typedef Args: type_ (type_t | declaration_t): type or declaration Returns: type_t: the type associated to the inputted declaration """ if isinstance(type_, cpptypes.type_t): type_ref = type_ elif isinstance(type_, typedef.typedef_t): type_ref = type_.decl_type else: # Not a valid input, just return it return type_ if type_ref.cache.remove_alias: return type_ref.cache.remove_alias no_alias = __remove_alias(type_ref.clone()) type_ref.cache.remove_alias = no_alias return no_alias def decompose_type(tp): """ Implementation detail """ if isinstance(tp, cpptypes.compound_t): return [tp] + decompose_type(tp.base) elif isinstance(tp, typedef.typedef_t): return decompose_type(tp.decl_type) elif isinstance(tp, cpptypes.declarated_t) and \ isinstance(tp.declaration, typedef.typedef_t): return decompose_type(tp.declaration.decl_type) return [tp] def decompose_class(type_): """implementation details""" types = decompose_type(type_) return [tp.__class__ for tp in types] def base_type(type_): """returns base type. For `const int` will return `int` """ types = decompose_type(type_) return types[-1] def _create_cv_types(base): """ Implementation detail. """ return ( [base, cpptypes.const_t(base), cpptypes.volatile_t(base), cpptypes.volatile_t(cpptypes.const_t(base))] ) # Some tuples containing combinations of different types # These are created once the module is loaded, so that when they are used # they do not need to be re-created. _void_def = _create_cv_types(cpptypes.void_t()) _bool_def = _create_cv_types(cpptypes.bool_t()) _float_def = ( _create_cv_types(cpptypes.float_t()) + _create_cv_types(cpptypes.double_t()) + _create_cv_types(cpptypes.long_double_t())) _integral_def = ( _create_cv_types(cpptypes.char_t()) + _create_cv_types(cpptypes.unsigned_char_t()) + _create_cv_types(cpptypes.signed_char_t()) + _create_cv_types(cpptypes.wchar_t()) + _create_cv_types(cpptypes.short_int_t()) + _create_cv_types(cpptypes.short_unsigned_int_t()) + _create_cv_types(cpptypes.bool_t()) + _create_cv_types(cpptypes.int_t()) + _create_cv_types(cpptypes.unsigned_int_t()) + _create_cv_types(cpptypes.long_int_t()) + _create_cv_types(cpptypes.long_unsigned_int_t()) + _create_cv_types(cpptypes.long_long_int_t()) + _create_cv_types(cpptypes.long_long_unsigned_int_t()) + _create_cv_types(cpptypes.int128_t()) + _create_cv_types(cpptypes.uint128_t())) def does_match_definition(given, main, secondary): """implementation details""" assert isinstance(secondary, tuple) assert len(secondary) == 2 # general solution could be provided types = decompose_type(given) if isinstance(types[0], main): return True if len(types) >= 2: cond1 = isinstance(types[0], main) cond2 = isinstance(types[1], secondary) cond3 = isinstance(types[1], main) cond4 = isinstance(types[0], secondary) if (cond1 and cond2) or (cond3 and cond4): return True if len(types) >= 3: classes = set([tp.__class__ for tp in types[:3]]) desired = set([main] + list(secondary)) diff = classes.symmetric_difference(desired) if not diff: return True if len(diff) == 2: items = list(diff) return ( issubclass( items[0], items[1]) or issubclass(items[1], items[0])) return False else: return False def is_bool(type_): """ Check if type is of boolean type. Args: type_ (type_t): The type to be checked Returns: bool: True if type is a boolean, False otherwise. """ return remove_alias(type_) in _bool_def def is_void(type_): """ Check if type is of void type. Args: type_ (type_t): The type to be checked Returns: bool: True if type is void, False otherwise. """ return remove_alias(type_) in _void_def def is_void_pointer(type_): """returns True, if type represents `void*`, False otherwise""" return is_same(type_, cpptypes.pointer_t(cpptypes.void_t())) def is_integral(type_): """ Check if type is a C++ integral type Args: type_ (type_t): The type to be checked Returns: bool: True if type is a C++ integral type, False otherwise. """ return remove_alias(type_) in _integral_def def is_floating_point(type_): """returns True, if type represents C++ floating point type, False otherwise""" return remove_alias(type_) in _float_def def is_arithmetic(type_): """returns True, if type represents C++ integral or floating point type, False otherwise""" return is_integral(type_) or is_floating_point(type_) def is_pointer(type_): """returns True, if type represents C++ pointer type, False otherwise""" return does_match_definition(type_, cpptypes.pointer_t, (cpptypes.const_t, cpptypes.volatile_t)) \ or does_match_definition(type_, cpptypes.pointer_t, (cpptypes.volatile_t, cpptypes.const_t)) def is_calldef_pointer(type_): """returns True, if type represents pointer to free/member function, False otherwise""" if not is_pointer(type_): return False nake_type = remove_alias(type_) nake_type = remove_cv(nake_type) return isinstance(nake_type, cpptypes.compound_t) \ and isinstance(nake_type.base, cpptypes.calldef_type_t) def remove_pointer(type_): """removes pointer from the type definition If type is not pointer type, it will be returned as is. """ nake_type = remove_alias(type_) if not is_pointer(nake_type): return type_ elif isinstance(nake_type, cpptypes.volatile_t) and \ isinstance(nake_type.base, cpptypes.pointer_t): return cpptypes.volatile_t(nake_type.base.base) elif isinstance(nake_type, cpptypes.const_t) and \ isinstance(nake_type.base, cpptypes.pointer_t): return cpptypes.const_t(nake_type.base.base) elif isinstance(nake_type, cpptypes.volatile_t) \ and isinstance(nake_type.base, cpptypes.const_t) \ and isinstance(nake_type.base.base, cpptypes.pointer_t): return ( cpptypes.volatile_t(cpptypes.const_t(nake_type.base.base.base)) ) return nake_type.base def is_reference(type_): """returns True, if type represents C++ reference type, False otherwise""" nake_type = remove_alias(type_) return isinstance(nake_type, cpptypes.reference_t) def is_array(type_): """returns True, if type represents C++ array type, False otherwise""" nake_type = remove_alias(type_) nake_type = remove_reference(nake_type) nake_type = remove_cv(nake_type) return isinstance(nake_type, cpptypes.array_t) def array_size(type_): """returns array size""" nake_type = remove_alias(type_) nake_type = remove_reference(nake_type) nake_type = remove_cv(nake_type) assert isinstance(nake_type, cpptypes.array_t) return nake_type.size def array_item_type(type_): """returns array item type""" if is_array(type_): type_ = remove_alias(type_) type_ = remove_cv(type_) return type_.base elif is_pointer(type_): return remove_pointer(type_) else: raise RuntimeError( "array_item_type functions takes as argument array or pointer " + "types") def remove_reference(type_): """removes reference from the type definition If type is not reference type, it will be returned as is. """ nake_type = remove_alias(type_) if not is_reference(nake_type): return type_ return nake_type.base def is_const(type_): """returns True, if type represents C++ const type, False otherwise""" nake_type = remove_alias(type_) if isinstance(nake_type, cpptypes.const_t): return True elif isinstance(nake_type, cpptypes.volatile_t): return is_const(nake_type.base) elif isinstance(nake_type, cpptypes.array_t): return is_const(nake_type.base) return False def remove_const(type_): """removes const from the type definition If type is not const type, it will be returned as is """ nake_type = remove_alias(type_) if not is_const(nake_type): return type_ else: # Handling for const and volatile qualified types. There is a # difference in behavior between GCCXML and CastXML for cv-qual arrays. # GCCXML produces the following nesting of types: # -> volatile_t(const_t(array_t)) # while CastXML produces the following nesting: # -> array_t(volatile_t(const_t)) # For both cases, we must unwrap the types, remove const_t, and add # back the outer layers if isinstance(nake_type, cpptypes.array_t): is_v = is_volatile(nake_type) if is_v: result_type = nake_type.base.base.base else: result_type = nake_type.base.base if is_v: result_type = cpptypes.volatile_t(result_type) return cpptypes.array_t(result_type, nake_type.size) elif isinstance(nake_type, cpptypes.volatile_t): return cpptypes.volatile_t(nake_type.base.base) return nake_type.base def remove_declarated(type_): """removes type-declaration class-binder :class:`declarated_t` from the `type_` If `type_` is not :class:`declarated_t`, it will be returned as is """ type_ = remove_alias(type_) if isinstance(type_, cpptypes.elaborated_t): type_ = type_.base if isinstance(type_, cpptypes.declarated_t): type_ = type_.declaration return type_ def is_same(type1, type2): """returns True, if type1 and type2 are same types""" nake_type1 = remove_declarated(type1) nake_type2 = remove_declarated(type2) return nake_type1 == nake_type2 def is_elaborated(type_): """returns True, if type represents C++ elaborated type, False otherwise""" nake_type = remove_alias(type_) if isinstance(nake_type, cpptypes.elaborated_t): return True elif isinstance(nake_type, cpptypes.reference_t): return is_elaborated(nake_type.base) elif isinstance(nake_type, cpptypes.pointer_t): return is_elaborated(nake_type.base) elif isinstance(nake_type, cpptypes.volatile_t): return is_elaborated(nake_type.base) elif isinstance(nake_type, cpptypes.const_t): return is_elaborated(nake_type.base) return False def remove_elaborated(type_): """removes type-declaration class-binder :class:`elaborated_t` from the `type_` If `type_` is not :class:`elaborated_t`, it will be returned as is """ nake_type = remove_alias(type_) if not is_elaborated(nake_type): return type_ else: if isinstance(type_, cpptypes.elaborated_t): type_ = type_.base return type_ def is_volatile(type_): """returns True, if type represents C++ volatile type, False otherwise""" nake_type = remove_alias(type_) if isinstance(nake_type, cpptypes.volatile_t): return True elif isinstance(nake_type, cpptypes.const_t): return is_volatile(nake_type.base) elif isinstance(nake_type, cpptypes.array_t): return is_volatile(nake_type.base) return False def remove_volatile(type_): """removes volatile from the type definition If type is not volatile type, it will be returned as is """ nake_type = remove_alias(type_) if not is_volatile(nake_type): return type_ else: if isinstance(nake_type, cpptypes.array_t): is_c = is_const(nake_type) if is_c: base_type_ = nake_type.base.base.base else: base_type_ = nake_type.base.base result_type = base_type_ if is_c: result_type = cpptypes.const_t(result_type) return cpptypes.array_t(result_type, nake_type.size) return nake_type.base def remove_cv(type_): """removes const and volatile from the type definition""" nake_type = remove_alias(type_) if not is_const(nake_type) and not is_volatile(nake_type): return type_ result = nake_type if is_const(result): result = remove_const(result) if is_volatile(result): result = remove_volatile(result) if is_const(result): result = remove_const(result) return result def is_fundamental(type_): """returns True, if type represents C++ fundamental type""" return does_match_definition( type_, cpptypes.fundamental_t, (cpptypes.const_t, cpptypes.volatile_t)) \ or does_match_definition( type_, cpptypes.fundamental_t, (cpptypes.volatile_t, cpptypes.const_t)) def _normalize(string): return string.replace(' ', '').replace("::std", "std") def _normalize_equivalences(equivalences): return [_normalize(eq) for eq in equivalences] string_equivalences = [ ( 'std::basic_string, ' 'std::allocator>' ), 'std::basic_string', 'std::string' ] wstring_equivalences = [ ( 'std::basic_string, ' 'std::allocator>' ), 'std::basic_string', 'std::wstring' ] ostream_equivalences = [ 'std::basic_ostream>', 'std::basic_ostream', 'std::ostream' ] wostream_equivalences = [ 'std::basic_ostream>', 'std::basic_ostream', 'std::wostream' ] normalized_string_equivalences = _normalize_equivalences( string_equivalences ) normalized_wstring_equivalences = _normalize_equivalences( wstring_equivalences ) normalized_ostream_equivalences = _normalize_equivalences( ostream_equivalences ) normalized_wostream_equivalences = _normalize_equivalences( wostream_equivalences ) def is_std_string(type_): """ Returns True, if type represents C++ `std::string`, False otherwise. """ if isinstance(type_, str): return _normalize(type_) in normalized_string_equivalences type_ = remove_alias(type_) type_ = remove_reference(type_) type_ = remove_cv(type_) return _normalize(type_.decl_string) in normalized_string_equivalences def is_std_wstring(type_): """ Returns True, if type represents C++ `std::wstring`, False otherwise. """ if isinstance(type_, str): return _normalize(type_) in normalized_wstring_equivalences type_ = remove_alias(type_) type_ = remove_reference(type_) type_ = remove_cv(type_) return _normalize(type_.decl_string) in normalized_wstring_equivalences def is_std_ostream(type_): """ Returns True, if type represents C++ std::ostream, False otherwise. """ if isinstance(type_, str): return _normalize(type_) in normalized_ostream_equivalences type_ = remove_alias(type_) type_ = remove_reference(type_) type_ = remove_cv(type_) return _normalize(type_.decl_string) in normalized_ostream_equivalences def is_std_wostream(type_): """ Returns True, if type represents C++ std::wostream, False otherwise. """ if isinstance(type_, str): return _normalize(type_) in normalized_wostream_equivalences type_ = remove_alias(type_) type_ = remove_reference(type_) type_ = remove_cv(type_) return _normalize(type_.decl_string) in normalized_wostream_equivalences pygccxml-3.0.2/src/pygccxml/declarations/type_traits_classes.py000066400000000000000000001005641476564735400251200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import class_declaration from . import type_traits from . import enumeration from . import calldef_members from . import calldef_types from . import scopedef from . import cpptypes from .. import utils def is_union(declaration): """ Returns True if declaration represents a C++ union Args: declaration (declaration_t): the declaration to be checked. Returns: bool: True if declaration represents a C++ union """ if not is_class(declaration): return False decl = class_traits.get_declaration(declaration) return decl.class_type == class_declaration.CLASS_TYPES.UNION def is_struct(declaration): """ Returns True if declaration represents a C++ struct Args: declaration (declaration_t): the declaration to be checked. Returns: bool: True if declaration represents a C++ struct """ if not is_class(declaration): return False decl = class_traits.get_declaration(declaration) return decl.class_type == class_declaration.CLASS_TYPES.STRUCT class declaration_xxx_traits(object): """this class implements the functionality needed for convenient work with declaration classes Implemented functionality: - find out whether a declaration is a desired one - get reference to the declaration """ def __init__(self, declaration_class): self.declaration_class = declaration_class @staticmethod def __apply_sequence(type_): return \ type_traits.remove_declarated( type_traits.remove_elaborated( type_traits.remove_cv( type_traits.remove_alias( type_traits.remove_pointer(type_))))) def is_my_case(self, type_): """returns True, if type represents the desired declaration, False otherwise""" return ( isinstance(self.__apply_sequence(type_), self.declaration_class) ) def get_declaration(self, type_): """returns reference to the declaration Precondition: self.is_my_case( type ) == True """ return self.__apply_sequence(type_) enum_traits = declaration_xxx_traits(enumeration.enumeration_t) """implements functionality, needed for convenient work with C++ enums""" is_enum = enum_traits.is_my_case """returns True, if type represents C++ enumeration declaration, False otherwise""" enum_declaration = enum_traits.get_declaration """returns reference to enum declaration""" class_traits = declaration_xxx_traits(class_declaration.class_t) """implements functionality, needed for convenient work with C++ classes""" is_class = class_traits.is_my_case """returns True, if type represents C++ class definition, False otherwise""" class_declaration_traits = declaration_xxx_traits( class_declaration.class_declaration_t) """implements functionality, needed for convenient work with C++ class declarations""" is_class_declaration = class_declaration_traits.is_my_case """returns True, if type represents C++ class declaration, False otherwise""" def find_trivial_constructor(type_): """ Returns reference to trivial constructor. Args: type_ (declarations.class_t): the class to be searched. Returns: declarations.constructor_t: the trivial constructor """ assert isinstance(type_, class_declaration.class_t) trivial = type_.constructors( lambda x: is_trivial_constructor(x), recursive=False, allow_empty=True) if trivial: return trivial[0] return None def find_copy_constructor(type_): """ Returns reference to copy constructor. Args: type_ (declarations.class_t): the class to be searched. Returns: declarations.constructor_t: the copy constructor """ copy_ = type_.constructors( lambda x: is_copy_constructor(x), recursive=False, allow_empty=True) if copy_: return copy_[0] return None def find_noncopyable_vars(class_type, already_visited_cls_vars=None): """ Returns list of all `noncopyable` variables. If an already_visited_cls_vars list is provided as argument, the returned list will not contain these variables. This list will be extended with whatever variables pointing to classes have been found. Args: class_type (declarations.class_t): the class to be searched. already_visited_cls_vars (list): optional list of vars that should not be checked a second time, to prevent infinite recursions. Returns: list: list of all `noncopyable` variables. """ assert isinstance(class_type, class_declaration.class_t) logger = utils.loggers.cxx_parser mvars = class_type.variables( lambda v: not v.type_qualifiers.has_static, recursive=False, allow_empty=True) noncopyable_vars = [] if already_visited_cls_vars is None: already_visited_cls_vars = [] message = ( "__contains_noncopyable_mem_var - %s - TRUE - " + "contains const member variable") for mvar in mvars: var_type = type_traits.remove_reference(mvar.decl_type) if type_traits.is_const(var_type): no_const = type_traits.remove_const(var_type) if type_traits.is_fundamental(no_const) or is_enum(no_const): logger.debug( (message + "- fundamental or enum"), var_type.decl_string) noncopyable_vars.append(mvar) if is_class(no_const): logger.debug((message + " - class"), var_type.decl_string) noncopyable_vars.append(mvar) if type_traits.is_array(no_const): logger.debug((message + " - array"), var_type.decl_string) noncopyable_vars.append(mvar) if type_traits.is_pointer(var_type): continue if class_traits.is_my_case(var_type): cls = class_traits.get_declaration(var_type) # Exclude classes that have already been visited. if cls in already_visited_cls_vars: continue already_visited_cls_vars.append(cls) if is_noncopyable(cls, already_visited_cls_vars): logger.debug( (message + " - class that is not copyable"), var_type.decl_string) noncopyable_vars.append(mvar) logger.debug(( "__contains_noncopyable_mem_var - %s - FALSE - doesn't " + "contain noncopyable members"), class_type.decl_string) return noncopyable_vars def has_trivial_constructor(class_): """if class has public trivial constructor, this function will return reference to it, None otherwise""" class_ = class_traits.get_declaration(class_) trivial = find_trivial_constructor(class_) if trivial and trivial.access_type == 'public': return trivial def has_copy_constructor(class_): """if class has public copy constructor, this function will return reference to it, None otherwise""" class_ = class_traits.get_declaration(class_) copy_constructor = find_copy_constructor(class_) if copy_constructor and copy_constructor.access_type == 'public': return copy_constructor def has_destructor(class_): """if class has destructor, this function will return reference to it, None otherwise""" class_ = class_traits.get_declaration(class_) destructor = class_.decls( decl_type=calldef_members.destructor_t, recursive=False, allow_empty=True) if destructor: return destructor[0] def has_public_constructor(class_): """if class has any public constructor, this function will return list of them, otherwise None""" class_ = class_traits.get_declaration(class_) decls = class_.constructors( lambda c: not is_copy_constructor(c) and c.access_type == 'public', recursive=False, allow_empty=True) if decls: return decls def has_public_assign(class_): """returns True, if class has public assign operator, False otherwise""" class_ = class_traits.get_declaration(class_) decls = class_.member_operators( lambda o: o.symbol == '=' and o.access_type == 'public', recursive=False, allow_empty=True) return bool(decls) def has_public_destructor(decl_type): """returns True, if class has public destructor, False otherwise""" d = has_destructor(decl_type) return d and d.access_type == 'public' def has_vtable(decl_type): """True, if class has virtual table, False otherwise""" assert isinstance(decl_type, class_declaration.class_t) return bool( decl_type.calldefs( lambda f: isinstance(f, calldef_members.member_function_t) and f.virtuality != calldef_types.VIRTUALITY_TYPES.NOT_VIRTUAL, recursive=False, allow_empty=True)) def is_base_and_derived(based, derived): """returns True, if there is "base and derived" relationship between classes, False otherwise""" assert isinstance(based, class_declaration.class_t) assert isinstance(derived, (class_declaration.class_t, tuple)) if isinstance(derived, class_declaration.class_t): all_derived = ([derived]) else: # tuple all_derived = derived for derived_cls in all_derived: for base_desc in derived_cls.recursive_bases: if base_desc.related_class == based: return True return False def has_any_non_copyconstructor(decl_type): """if class has any public constructor, which is not copy constructor, this function will return list of them, otherwise None""" class_ = class_traits.get_declaration(decl_type) decls = class_.constructors( lambda c: not is_copy_constructor(c) and c.access_type == 'public', recursive=False, allow_empty=True) if decls: return decls class __is_convertible_t(object): """implementation details""" def __init__(self, source, target): self.__source = self.__normalize(source) self.__target = self.__normalize(target) @staticmethod def __find_class_by_class_declaration(class_decl): found = scopedef.find_declaration( class_decl.parent.declarations, name=class_decl.name, decl_type=class_declaration.class_t) return found def __normalize(self, type_): type_ = type_traits.remove_alias(type_) bt_of_type = type_traits.base_type(type_) if isinstance(bt_of_type, cpptypes.declarated_t) \ and isinstance(bt_of_type.declaration, class_declaration.class_declaration_t): type_ = type_.clone() bt_of_type = type_traits.base_type(type_) bt_of_type.declaration = self.__find_class_by_class_declaration( bt_of_type.declaration) return type_ @staticmethod def __test_trivial(src, target): if not (src and target): return False if type_traits.is_same(src, target): return True # X => X if type_traits.is_const(target) and type_traits.is_same( src, target.base): return True # X => const X if type_traits.is_reference(target) and type_traits.is_same( src, target.base): return True # X => X& if type_traits.is_reference(target) and type_traits.is_const( target.base) and type_traits.is_same(src, target.base.base): return True # X => const X& if type_traits.is_same(target, cpptypes.pointer_t(cpptypes.void_t())): if type_traits.is_integral(src) or is_enum(src): return False return True # X => void* if type_traits.is_pointer(src) and \ type_traits.is_pointer(target) and \ type_traits.is_const(target.base) and \ type_traits.is_same(src.base, target.base.base): return True # X* => const X* if type_traits.is_reference(src) and \ type_traits.is_reference(target) and \ type_traits.is_const(target.base) and \ type_traits.is_same(src.base, target.base.base): return True # X& => const X& if not type_traits.is_const(src) and \ type_traits.is_array(src) and \ type_traits.is_pointer(target) and \ type_traits.is_same(type_traits.base_type(src), target.base): return True # X[2] => X* if type_traits.is_array(src) and \ type_traits.is_pointer(target) and \ type_traits.is_const(target.base) and \ type_traits.is_same( type_traits.base_type(src), target.base.base): return True @staticmethod def __test_pointer_to_func_or_mv__to__func_or_mv(source, target): if type_traits.is_pointer(source) \ and type_traits.is_reference(target) \ and isinstance(target.base, (cpptypes.free_function_type_t, cpptypes.member_function_type_t, cpptypes.member_variable_type_t)) \ and type_traits.is_same(source.base, target.base): return True if type_traits.is_pointer(source) \ and isinstance(target, (cpptypes.free_function_type_t, cpptypes.member_function_type_t, cpptypes.member_variable_type_t)) \ and type_traits.is_same(source.base, target): return True if type_traits.is_pointer(target) \ and type_traits.is_reference(source) \ and isinstance(source.base, (cpptypes.free_function_type_t, cpptypes.member_function_type_t, cpptypes.member_variable_type_t)) \ and type_traits.is_same(source.base, target.base): return True if type_traits.is_pointer(target) \ and isinstance(source, (cpptypes.free_function_type_t, cpptypes.member_function_type_t, cpptypes.member_variable_type_t)) \ and type_traits.is_same(target.base, source): return True @staticmethod def __test_const_x_ref__to__x(source, target): if not type_traits.is_reference(source) \ or not type_traits.is_const(source.base) \ or not type_traits.is_same(source.base.base, target): return False if type_traits.is_fundamental(target): return True if is_enum(target): return True if isinstance(target, cpptypes.declarated_t): assert isinstance(target.declaration, class_declaration.class_t) if has_copy_constructor(target.declaration): return True # we have copy constructor return False @staticmethod def __test_const_ref_x__to__y(source, target): if not type_traits.is_reference(source) or not \ type_traits.is_const(source.base): return False if type_traits.is_fundamental(source.base.base) and \ type_traits.is_fundamental(target): return True if is_convertible(source.base.base, cpptypes.int_t()) and \ is_enum(target): return True if isinstance(target, cpptypes.declarated_t): assert isinstance(target.declaration, class_declaration.class_t) if has_copy_constructor(target.declaration): return True # we have copy constructor return False @staticmethod def __test_ref_x__to__x(source, target): if not type_traits.is_reference(source) or not \ type_traits.is_same(source.base, target): return False if type_traits.is_fundamental(target): return True if is_enum(target): return True if isinstance(target, cpptypes.declarated_t): assert isinstance(target.declaration, class_declaration.class_t) if has_copy_constructor(target.declaration): return True # we have copy constructor return False @staticmethod def __test_ref_x__to__y(source, target): if not type_traits.is_reference(source): return False if type_traits.is_fundamental(source.base) and \ type_traits.is_fundamental(target): return True if is_convertible(source.base, cpptypes.int_t()) and is_enum(target): return True if isinstance(target, cpptypes.declarated_t): assert isinstance(target.declaration, class_declaration.class_t) if has_copy_constructor(target.declaration): return True # we have copy constructor return False @staticmethod def __test_fundamental__to__fundamental(source, target): if not type_traits.is_fundamental( type_traits.base_type(source)) or not \ type_traits.is_fundamental( type_traits.base_type(target)): return False if type_traits.is_void(type_traits.base_type(source)) or \ type_traits.is_void(type_traits.base_type(target)): return False if type_traits.is_fundamental(source) and \ type_traits.is_fundamental(target): return True if not type_traits.is_pointer(source) and \ type_traits.is_fundamental(target): return True if not type_traits.is_pointer(source) and \ type_traits.is_const(target) and \ type_traits.is_fundamental(target.base): return True if type_traits.is_fundamental(source) \ and type_traits.is_reference(target) \ and type_traits.is_const(target.base) \ and type_traits.is_fundamental(target.base.base): return True # X => const Y& return False @staticmethod def _is_both_declarated(x, y): return ( isinstance(x, cpptypes.declarated_t) and isinstance(y, cpptypes.declarated_t)) def __test_derived_to_based(self, source, target): derived = type_traits.base_type(source) base = type_traits.base_type(target) if not ( isinstance(derived, cpptypes.declarated_t) and isinstance(derived.declaration, class_declaration.class_t)): return False if not (isinstance(base, cpptypes.declarated_t) and isinstance(base.declaration, class_declaration.class_t)): return False base = base.declaration derived = derived.declaration if not is_base_and_derived(base, derived): return False for b in derived.recursive_bases: if ((b.related_class is base) and b.access_type != class_declaration.ACCESS_TYPES.PRIVATE): break else: return False base = target derived = source # d => b if self._is_both_declarated(base, derived): return True # d* => b* if type_traits.is_pointer(derived) and \ type_traits.is_pointer(base) and \ self._is_both_declarated(base.base, derived.base): return True # const d* => const b* if type_traits.is_pointer(derived) and \ type_traits.is_pointer(base) and \ type_traits.is_const(derived.base) and \ type_traits.is_const(base.base) \ and self._is_both_declarated(base.base.base, derived.base.base): return True # d* => const b* if type_traits.is_pointer(derived) and type_traits.is_pointer(base) \ and type_traits.is_const(derived.base)\ and self._is_both_declarated(base.base.base, derived.base): return True # d& => b& if type_traits.is_reference(derived) and \ type_traits.is_reference(base) and \ self._is_both_declarated(base.base, derived.base): return True # const d& => const b& if type_traits.is_reference(derived) and \ type_traits.is_reference(base) and \ type_traits.is_const(derived.base) and \ type_traits.is_const(base.base) \ and self._is_both_declarated(base.base.base, derived.base.base): return True # d& => const b& if type_traits.is_reference(derived) and \ type_traits.is_reference(base) and \ type_traits.is_const(derived.base) \ and self._is_both_declarated(base.base.base, derived.base): return True return False def is_convertible(self): source = self.__source target = self.__target if self.__test_trivial(source, target): return True if type_traits.is_array(source) or type_traits.is_array(target): return False if self.__test_const_x_ref__to__x(source, target): return True if self.__test_const_ref_x__to__y(source, target): return True if self.__test_ref_x__to__x(source, target): return True if self.__test_ref_x__to__y(source, target): return True if self.__test_fundamental__to__fundamental(source, target): return True if self.__test_pointer_to_func_or_mv__to__func_or_mv(source, target): return True if self.__test_derived_to_based(source, target): return True if isinstance(source, cpptypes.declarated_t): if isinstance(source.declaration, enumeration.enumeration_t) \ and type_traits.is_fundamental(target) \ and not type_traits.is_void(target): return True # enum could be converted to any integral type if isinstance(source.declaration, class_declaration.class_t): source_inst = source.declaration # class instance could be convertible to something else if it # has operator casting_operators = scopedef.find_all_declarations( source_inst.declarations, decl_type=calldef_members.casting_operator_t, recursive=False) if casting_operators: for operator in casting_operators: if is_convertible(operator.return_type, target): return True # may be target is class too, so in this case we should check whether # is has constructor from source if isinstance(target, cpptypes.declarated_t) and \ isinstance(target.declaration, class_declaration.class_t): constructors = scopedef.find_all_declarations( target.declaration.declarations, decl_type=calldef_members.constructor_t, recursive=False) if constructors: for constructor in constructors: if len(constructor.arguments) != 1: continue # TODO: add test to check explicitness if is_convertible(source, constructor.arguments[0].decl_type): return True return False def is_convertible(source, target): """returns True, if source could be converted to target, otherwise False""" return __is_convertible_t(source, target).is_convertible() def __is_noncopyable_single(class_, already_visited_cls_vars=None): """ Implementation detail. Checks if the class is non copyable, without considering the base classes. Args: class_ (declarations.class_t): the class to be checked already_visited_cls_vars (list): optional list of vars that should not be checked a second time, to prevent infinite recursions. Returns: bool: if the class is non copyable """ # It is not enough to check base classes, we should also to check # member variables. logger = utils.loggers.cxx_parser if has_copy_constructor(class_) \ and has_public_constructor(class_) \ and has_public_assign(class_) \ and has_public_destructor(class_): msg = os.linesep.join([ "__is_noncopyable_single - %s - COPYABLE:" % class_.decl_string, " trivial copy constructor: yes", " public constructor: yes", " public assign: yes", " public destructor: yes"]) logger.debug(msg) return False if already_visited_cls_vars is None: already_visited_cls_vars = [] if find_noncopyable_vars(class_, already_visited_cls_vars): logger.debug( ("__is_noncopyable_single(TRUE) - %s - contains noncopyable " + "members"), class_.decl_string) return True logger.debug(( "__is_noncopyable_single(FALSE) - %s - COPYABLE, because is " + "doesn't contains noncopyable members"), class_.decl_string) return False def is_noncopyable(class_, already_visited_cls_vars=None): """ Checks if class is non copyable Args: class_ (declarations.class_t): the class to be checked already_visited_cls_vars (list): optional list of vars that should not be checked a second time, to prevent infinite recursions. In general you can ignore this argument, it is mainly used during recursive calls of is_noncopyable() done by pygccxml. Returns: bool: if the class is non copyable """ logger = utils.loggers.cxx_parser class_decl = class_traits.get_declaration(class_) true_header = "is_noncopyable(TRUE) - %s - " % class_.decl_string if is_union(class_): return False if class_decl.is_abstract: logger.debug(true_header + "abstract client") return True # if class has public, user defined copy constructor, than this class is # copyable copy_ = find_copy_constructor(class_decl) if copy_ and copy_.access_type == 'public' and not copy_.is_artificial: return False if already_visited_cls_vars is None: already_visited_cls_vars = [] for base_desc in class_decl.recursive_bases: assert isinstance(base_desc, class_declaration.hierarchy_info_t) if base_desc.related_class.decl_string in \ ('::boost::noncopyable', '::boost::noncopyable_::noncopyable'): logger.debug(true_header + "derives from boost::noncopyable") return True if not has_copy_constructor(base_desc.related_class): base_copy_ = find_copy_constructor(base_desc.related_class) if base_copy_ and base_copy_.access_type == 'private': logger.debug( true_header + "there is private copy constructor") return True elif __is_noncopyable_single( base_desc.related_class, already_visited_cls_vars): logger.debug( true_header + "__is_noncopyable_single returned True") return True if __is_noncopyable_single( base_desc.related_class, already_visited_cls_vars): logger.debug( true_header + "__is_noncopyable_single returned True") return True if not has_copy_constructor(class_decl): logger.debug(true_header + "does not have trivial copy constructor") return True elif not has_public_constructor(class_decl): logger.debug(true_header + "does not have a public constructor") return True elif has_destructor(class_decl) and not has_public_destructor(class_decl): logger.debug(true_header + "has private destructor") return True return __is_noncopyable_single(class_decl, already_visited_cls_vars) def is_unary_operator(oper): """returns True, if operator is unary operator, otherwise False""" # definition: # member in class # ret-type operator symbol() # ret-type operator [++ --](int) # globally # ret-type operator symbol( arg ) # ret-type operator [++ --](X&, int) symbols = ['!', '&', '~', '*', '+', '++', '-', '--'] if not isinstance(oper, calldef_members.operator_t): return False if oper.symbol not in symbols: return False if isinstance(oper, calldef_members.member_operator_t): if len(oper.arguments) == 0: return True elif oper.symbol in ['++', '--'] and \ isinstance(oper.arguments[0].decl_type, cpptypes.int_t): return True return False if len(oper.arguments) == 1: return True elif oper.symbol in ['++', '--'] \ and len(oper.arguments) == 2 \ and isinstance(oper.arguments[1].decl_type, cpptypes.int_t): # may be I need to add additional check whether first argument is # reference or not? return True return False def is_binary_operator(oper): """returns True, if operator is binary operator, otherwise False""" # definition: # member in class # ret-type operator symbol(arg) # globally # ret-type operator symbol( arg1, arg2 ) symbols = [ ',', '()', '[]', '!=', '%', '%=', '&', '&&', '&=', '*', '*=', '+', '+=', '-', '-=', '->', '->*', '/', '/=', '<', '<<', '<<=', '<=', '=', '==', '>', '>=', '>>', '>>=', '^', '^=', '|', '|=', '||'] if not isinstance(oper, calldef_members.operator_t): return False if oper.symbol not in symbols: return False if isinstance(oper, calldef_members.member_operator_t): if len(oper.arguments) == 1: return True return False if len(oper.arguments) == 2: return True return False def is_copy_constructor(constructor): """ Check if the declaration is a copy constructor, Args: constructor (declarations.constructor_t): the constructor to be checked. Returns: bool: True if this is a copy constructor, False instead. """ assert isinstance(constructor, calldef_members.constructor_t) args = constructor.arguments parent = constructor.parent # A copy constructor has only one argument if len(args) != 1: return False # We have only one argument, get it arg = args[0] if not isinstance(arg.decl_type, cpptypes.compound_t): # An argument of type declarated_t (a typedef) could be passed to # the constructor; and it could be a reference. # But in c++ you can NOT write : # "typedef class MyClass { MyClass(const MyClass & arg) {} }" # If the argument is a typedef, this is not a copy constructor. # See the hierarchy of declarated_t and coumpound_t. They both # inherit from type_t but are not related so we can discriminate # between them. return False # The argument needs to be passed by reference in a copy constructor if not type_traits.is_reference(arg.decl_type): return False # The argument needs to be const for a copy constructor if not type_traits.is_const(arg.decl_type.base): return False un_aliased = type_traits.remove_alias(arg.decl_type.base) # un_aliased now refers to const_t instance if not isinstance(un_aliased.base, cpptypes.declarated_t): # We are looking for a declaration # If "class MyClass { MyClass(const int & arg) {} }" is used, # this is not copy constructor, so we return False here. # -> un_aliased.base == cpptypes.int_t (!= cpptypes.declarated_t) return False # Final check: compare the parent (the class declaration for example) # with the declaration of the type passed as argument. return id(un_aliased.base.declaration) == id(parent) def is_trivial_constructor(constructor): """ Check if the declaration is a trivial constructor. Args: constructor (declarations.constructor_t): the constructor to be checked. Returns: bool: True if this is a trivial constructor, False instead. """ assert isinstance(constructor, calldef_members.constructor_t) return not bool(constructor.arguments) pygccxml-3.0.2/src/pygccxml/declarations/type_visitor.py000066400000000000000000000063761476564735400236020ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines types visitor class interface """ class type_visitor_t(object): """ types visitor interface All functions within this class should be redefined in derived classes. """ def __init__(self): object.__init__(self) def visit_void(self): raise NotImplementedError() def visit_char(self): raise NotImplementedError() def visit_unsigned_char(self): raise NotImplementedError() def visit_signed_char(self): raise NotImplementedError() def visit_wchar(self): raise NotImplementedError() def visit_short_int(self): raise NotImplementedError() def visit_short_unsigned_int(self): raise NotImplementedError() def visit_bool(self): raise NotImplementedError() def visit_int(self): raise NotImplementedError() def visit_unsigned_int(self): raise NotImplementedError() def visit_long_int(self): raise NotImplementedError() def visit_long_unsigned_int(self): raise NotImplementedError() def visit_long_long_int(self): raise NotImplementedError() def visit_long_long_unsigned_int(self): raise NotImplementedError() def visit_int128(self): raise NotImplementedError() def visit_uint128(self): raise NotImplementedError() def visit_float(self): raise NotImplementedError() def visit_double(self): raise NotImplementedError() def visit_long_double(self): raise NotImplementedError() def visit_complex_long_double(self): raise NotImplementedError() def visit_complex_double(self): raise NotImplementedError() def visit_complex_float(self): raise NotImplementedError() def visit_jbyte(self): raise NotImplementedError() def visit_jshort(self): raise NotImplementedError() def visit_jint(self): raise NotImplementedError() def visit_jlong(self): raise NotImplementedError() def visit_jfloat(self): raise NotImplementedError() def visit_jdouble(self): raise NotImplementedError() def visit_jchar(self): raise NotImplementedError() def visit_jboolean(self): raise NotImplementedError() def visit_volatile(self): raise NotImplementedError() def visit_const(self): raise NotImplementedError() def visit_pointer(self): raise NotImplementedError() def visit_reference(self): raise NotImplementedError() def visit_elaborated(self): raise NotImplementedError() def visit_array(self): raise NotImplementedError() def visit_free_function_type(self): raise NotImplementedError() def visit_member_function_type(self): raise NotImplementedError() def visit_member_variable_type(self): raise NotImplementedError() def visit_declarated(self): raise NotImplementedError() def visit_restrict(self): raise NotImplementedError() def visit_ellipsis(self): raise NotImplementedError() pygccxml-3.0.2/src/pygccxml/declarations/typedef.py000066400000000000000000000034611476564735400224720ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines class that describes C++ typedef declaration """ from . import declaration from . import byte_info class typedef_t(declaration.declaration_t, byte_info.byte_info): """describes C++ typedef declaration""" def __init__(self, name='', decl_type=None): """creates class that describes C++ typedef""" declaration.declaration_t.__init__(self, name) byte_info.byte_info.__init__(self) self._decl_type = decl_type if not isinstance(decl_type, str) and decl_type is not None: self.byte_size = decl_type.byte_size self.byte_align = decl_type.byte_align def _get__cmp__items(self): """implementation details""" return [self.decl_type] def __eq__(self, other): if not declaration.declaration_t.__eq__(self, other): return False return self.decl_type == other.decl_type __hash__ = declaration.declaration_t.__hash__ @property def decl_type(self): """reference to the original :class:`decl_type `""" return self._decl_type @decl_type.setter def decl_type(self, decl_type): self._decl_type = decl_type self.byte_size = decl_type.byte_size self.byte_align = decl_type.byte_align def i_depend_on_them(self, recursive=True): self._warn_deprecated() # Deprecated method. The cyclic import will be removed with the method # in the next release, so we can disable the cyclic import check here. from . import dependencies # pylint: disable=R0401 return [dependencies.dependency_info_t(self, self.decl_type)] pygccxml-3.0.2/src/pygccxml/declarations/variable.py000066400000000000000000000074551476564735400226260ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ defines class that describes C++ global and member variable declaration """ from . import declaration from . import class_declaration class variable_t(declaration.declaration_t): """describes C++ global and member variable declaration""" def __init__( self, name='', decl_type=None, type_qualifiers=None, value=None, bits=None, mangled=None): """creates class that describes C++ global or member variable""" declaration.declaration_t.__init__(self, name) self._decl_type = decl_type self._type_qualifiers = type_qualifiers self._value = value self._bits = bits self._byte_offset = 0 self._mangled = mangled def _get__cmp__items(self): """implementation details""" return [self.decl_type, self.type_qualifiers, self.value] def __eq__(self, other): """implementation details""" if not declaration.declaration_t.__eq__(self, other): return False return self.decl_type == other.decl_type \ and self.type_qualifiers == other.type_qualifiers \ and self.value == other.value \ and self.bits == other.bits __hash__ = declaration.declaration_t.__hash__ @property def decl_type(self): """reference to the variable :class:`decl_type `""" return self._decl_type @decl_type.setter def decl_type(self, decl_type): self._decl_type = decl_type @property def type_qualifiers(self): """reference to the :class:`type_qualifiers_t` instance""" return self._type_qualifiers @type_qualifiers.setter def type_qualifiers(self, type_qualifiers): self._type_qualifiers = type_qualifiers @property def value(self): """string, that contains the variable value""" return self._value @value.setter def value(self, value): self._value = value @property def bits(self): """integer, that contains information about how many bit takes bit field""" return self._bits @bits.setter def bits(self, bits): self._bits = bits @property def byte_offset(self): """integer, offset of the field from the beginning of class.""" return self._byte_offset @byte_offset.setter def byte_offset(self, byte_offset): self._byte_offset = byte_offset @property def access_type(self): if not isinstance(self.parent, class_declaration.class_t): raise RuntimeError(( "access_type functionality only available on member" + "variables and not on global variables")) return self.parent.find_out_member_access_type(self) @property def mangled(self): """ Unique declaration name generated by the compiler. :return: the mangled name :rtype: str """ return self.get_mangled_name() @mangled.setter def mangled(self, mangled): self._mangled = mangled def i_depend_on_them(self, recursive=True): # Deprecated method. The cyclic import will be removed with the method # in the next release, so we can disable the cyclic import check here. from . import dependencies # pylint: disable=R0401 self._warn_deprecated() return [dependencies.dependency_info_t(self, self.decl_type)] def get_mangled_name(self): if not self._mangled \ and not isinstance(self.parent, class_declaration.class_t): return self.name return self._mangled pygccxml-3.0.2/src/pygccxml/declarations/xml_generators.py000066400000000000000000000016251476564735400240630ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Contains enumeration of all xml_generators supported by the project. """ gccxml_06 = "GCC-XML 0.6" gccxml_07 = "GCC-XML 0.7" gccxml_09 = "GCC-XML 0.9" gccxml_09_buggy = "GCC-XML 0.9 BUGGY" # revision 122: # After this fix, all constructors and destructors that exist for a class # are dumped whether the user declared them or not. Those that were # implicitly declared by the xml_generator are marked as "artificial". # CastXML has no version number for the moment so "None" is used. castxml_none = "CastXML None" def on_missing_functionality(xml_generator, functionality): raise NotImplementedError( '"%s" xml_generator doesn\'t support functionality "%s"' % (xml_generator, functionality)) pygccxml-3.0.2/src/pygccxml/parser/000077500000000000000000000000001476564735400173005ustar00rootroot00000000000000pygccxml-3.0.2/src/pygccxml/parser/__init__.py000066400000000000000000000046321476564735400214160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """Parser sub-package. """ from .config import xml_generator_configuration_t from .config import load_xml_generator_configuration from .project_reader import COMPILATION_MODE from .project_reader import project_reader_t from .project_reader import file_configuration_t from .project_reader import create_text_fc from .project_reader import create_source_fc from .project_reader import create_gccxml_fc from .project_reader import create_cached_source_fc from .source_reader import source_reader_t from .declarations_cache import cache_base_t from .declarations_cache import file_cache_t from .declarations_cache import dummy_cache_t from .directory_cache import directory_cache_t # shortcut CONTENT_TYPE = file_configuration_t.CONTENT_TYPE def parse( files, config=None, compilation_mode=COMPILATION_MODE.FILE_BY_FILE, cache=None): """ Parse header files. :param files: The header files that should be parsed :type files: list of str :param config: Configuration object or None :type config: :class:`parser.xml_generator_configuration_t` :param compilation_mode: Determines whether the files are parsed individually or as one single chunk :type compilation_mode: :class:`parser.COMPILATION_MODE` :param cache: Declaration cache (None=no cache) :type cache: :class:`parser.cache_base_t` or str :rtype: list of :class:`declarations.declaration_t` """ if not config: config = xml_generator_configuration_t() parser = project_reader_t(config=config, cache=cache) declarations = parser.read_files(files, compilation_mode) config.xml_generator_from_xml_file = parser.xml_generator_from_xml_file return declarations def parse_string(content, config=None): if not config: config = xml_generator_configuration_t() parser = project_reader_t(config) declarations = parser.read_string(content) config.xml_generator_from_xml_file = parser.xml_generator_from_xml_file return declarations def parse_xml_file(content, config=None): parser = source_reader_t(config) decls = parser.read_xml_file(content) config.xml_generator_from_xml_file = parser.xml_generator_from_xml_file return decls pygccxml-3.0.2/src/pygccxml/parser/config.py000066400000000000000000000340041476564735400211200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ Defines C++ parser configuration classes. """ import os import copy import platform import shutil import subprocess import warnings # In py3, ConfigParser was renamed to the more-standard configparser. # But there's a py3 backport that installs "configparser" in py2, and I don't # want it because it has annoying deprecation warnings. So try the real py2 # import first # Inspired by https://bitbucket.org/ned/coveragepy/commits/f8e9d62f1412 try: from ConfigParser import SafeConfigParser as ConfigParser except ImportError: from configparser import ConfigParser class parser_configuration_t(object): """ C++ parser configuration holder This class serves as a base class for the parameters that can be used to customize the call to a C++ parser. This class also allows users to work with relative files paths. In this case files are searched in the following order: 1. current directory 2. working directory 3. additional include paths specified by the user """ def __init__( self, working_directory='.', include_paths=None, define_symbols=None, undefine_symbols=None, cflags="", ccflags="", compiler=None, xml_generator=None, keep_xml=False, compiler_path=None, flags=None, castxml_epic_version=None): object.__init__(self) self.__working_directory = working_directory if not include_paths: include_paths = [] self.__include_paths = include_paths if not define_symbols: define_symbols = [] self.__define_symbols = define_symbols if not undefine_symbols: undefine_symbols = [] self.__undefine_symbols = undefine_symbols self.__cflags = cflags self.__ccflags = ccflags self.__compiler = compiler self.__xml_generator = xml_generator self.__castxml_epic_version = castxml_epic_version self.__keep_xml = keep_xml if flags is None: flags = [] self.__flags = flags # If no compiler path was set and we are using castxml, set the path self.__compiler_path = create_compiler_path( xml_generator, compiler_path) def clone(self): raise NotImplementedError(self.__class__.__name__) @property def working_directory(self): return self.__working_directory @working_directory.setter def working_directory(self, working_dir): self.__working_directory = working_dir @property def include_paths(self): """list of include paths to look for header files""" return self.__include_paths @property def define_symbols(self): """list of "define" directives """ return self.__define_symbols @property def undefine_symbols(self): """list of "undefine" directives """ return self.__undefine_symbols @property def compiler(self): """get compiler name to simulate""" return self.__compiler @compiler.setter def compiler(self, compiler): """set compiler name to simulate""" self.__compiler = compiler @property def xml_generator(self): """get xml_generator""" return self.__xml_generator @xml_generator.setter def xml_generator(self, xml_generator): """set xml_generator""" self.__xml_generator = xml_generator @property def castxml_epic_version(self): """ File format version used by castxml. """ return self.__castxml_epic_version @castxml_epic_version.setter def castxml_epic_version(self, castxml_epic_version): """ File format version used by castxml. """ self.__castxml_epic_version = castxml_epic_version @property def keep_xml(self): """Are xml files kept after errors.""" return self.__keep_xml @keep_xml.setter def keep_xml(self, keep_xml): """Set if xml files kept after errors.""" self.__keep_xml = keep_xml @property def flags(self): """Optional flags for pygccxml.""" return self.__flags @flags.setter def flags(self, flags): """Optional flags for pygccxml.""" if flags is None: flags = [] self.__flags = flags @property def compiler_path(self): """Get the path for the compiler.""" return self.__compiler_path @compiler_path.setter def compiler_path(self, compiler_path): """Set the path for the compiler.""" self.__compiler_path = compiler_path @property def cflags(self): """additional flags to pass to compiler""" return self.__cflags @cflags.setter def cflags(self, val): self.__cflags = val def append_cflags(self, val): self.__cflags = self.__cflags + ' ' + val @property def ccflags(self): """ additional cross-compatible flags to pass directly to internal simulated compiler. Castxml removes any definitions of its pre-defined macros (e.g. -fopenmp). To propagate these down to the compiler, these flags must also be passed here. See `cc-opt` on castxml's documentation page: https://github.com/CastXML/CastXML/blob/master/doc/manual/castxml.1.rst """ return self.__ccflags @ccflags.setter def ccflags(self, val): self.__ccflags = val def append_ccflags(self, val): self.__ccflags = self.__ccflags + ' ' + val def __ensure_dir_exists(self, dir_path, meaning): if os.path.isdir(dir_path): return if os.path.exists(self.working_directory): msg = '%s("%s") does not exist.' % (meaning, dir_path) if meaning == 'include directory': # Warn instead of failing. warnings.warn(msg, RuntimeWarning) else: raise RuntimeError(msg) else: raise RuntimeError( '%s("%s") should be "directory", not a file.' % (meaning, dir_path)) def raise_on_wrong_settings(self): """ Validates the configuration settings and raises RuntimeError on error """ self.__ensure_dir_exists(self.working_directory, 'working directory') for idir in self.include_paths: self.__ensure_dir_exists(idir, 'include directory') if self.__xml_generator != "castxml": msg = f"xml_generator ({self.xml_generator}) can only be 'castxml'" raise RuntimeError(msg) class xml_generator_configuration_t(parser_configuration_t): """ Configuration object to collect parameters for invoking gccxml or castxml. This class serves as a container for the parameters that can be used to customize the call to gccxml or castxml. """ def __init__( self, gccxml_path='', xml_generator_path='', working_directory='.', include_paths=None, define_symbols=None, undefine_symbols=None, start_with_declarations=None, ignore_gccxml_output=False, cflags="", ccflags="", compiler=None, xml_generator=None, keep_xml=False, compiler_path=None, flags=None, castxml_epic_version=None): parser_configuration_t.__init__( self, working_directory=working_directory, include_paths=include_paths, define_symbols=define_symbols, undefine_symbols=undefine_symbols, cflags=cflags, ccflags=ccflags, compiler=compiler, xml_generator=xml_generator, keep_xml=keep_xml, compiler_path=compiler_path, flags=flags, castxml_epic_version=castxml_epic_version) if gccxml_path != '': self.__gccxml_path = gccxml_path self.__xml_generator_path = xml_generator_path if not start_with_declarations: start_with_declarations = [] self.__start_with_declarations = start_with_declarations self.__ignore_gccxml_output = ignore_gccxml_output self.__xml_generator_from_xml_file = None def clone(self): return copy.deepcopy(self) @property def xml_generator_path(self): """ XML generator binary location """ return self.__xml_generator_path @xml_generator_path.setter def xml_generator_path(self, new_path): self.__xml_generator_path = new_path @property def xml_generator_from_xml_file(self): """ Configuration object containing information about the xml generator read from the xml file. Returns: utils.xml_generators: configuration object """ return self.__xml_generator_from_xml_file @xml_generator_from_xml_file.setter def xml_generator_from_xml_file(self, xml_generator_from_xml_file): self.__xml_generator_from_xml_file = xml_generator_from_xml_file @property def start_with_declarations(self): """list of declarations gccxml should start with, when it dumps declaration tree""" return self.__start_with_declarations @property def ignore_gccxml_output(self): """set this property to True, if you want pygccxml to ignore any error warning that comes from gccxml""" return self.__ignore_gccxml_output @ignore_gccxml_output.setter def ignore_gccxml_output(self, val=True): self.__ignore_gccxml_output = val def raise_on_wrong_settings(self): super(xml_generator_configuration_t, self).raise_on_wrong_settings() if self.xml_generator_path is None or \ not os.path.isfile(self.xml_generator_path): msg = ( 'xml_generator_path("%s") should be set and exist.') \ % self.xml_generator_path raise RuntimeError(msg) def load_xml_generator_configuration(configuration, **defaults): """ Loads CastXML or GCC-XML configuration. Args: configuration (string|configparser.ConfigParser): can be a string (file path to a configuration file) or instance of :class:`configparser.ConfigParser`. defaults: can be used to override single configuration values. Returns: :class:`.xml_generator_configuration_t`: a configuration object The file passed needs to be in a format that can be parsed by :class:`configparser.ConfigParser`. An example configuration file skeleton can be found `here `_. """ parser = configuration if isinstance(configuration, str): parser = ConfigParser() parser.read(configuration) # Create a new empty configuration cfg = xml_generator_configuration_t() values = defaults if not values: values = {} if parser.has_section('xml_generator'): for name, value in parser.items('xml_generator'): if value.strip(): values[name] = value for name, value in values.items(): if isinstance(value, str): value = value.strip() if name == 'gccxml_path': cfg.gccxml_path = value if name == 'xml_generator_path': cfg.xml_generator_path = value elif name == 'working_directory': cfg.working_directory = value elif name == 'include_paths': for p in value.split(';'): p = p.strip() if p: cfg.include_paths.append(os.path.normpath(p)) elif name == 'compiler': cfg.compiler = value elif name == 'xml_generator': cfg.xml_generator = value elif name == 'castxml_epic_version': cfg.castxml_epic_version = int(value) elif name == 'keep_xml': cfg.keep_xml = value elif name == 'cflags': cfg.cflags = value elif name == 'ccflags': cfg.ccflags = value elif name == 'flags': cfg.flags = value elif name == 'compiler_path': cfg.compiler_path = value else: print('\n%s entry was ignored' % name) # If no compiler path was set and we are using castxml, set the path # Here we overwrite the default configuration done in the cfg because # the xml_generator was set through the setter after the creation of a new # emppty configuration object. cfg.compiler_path = create_compiler_path( cfg.xml_generator, cfg.compiler_path) return cfg def create_compiler_path(xml_generator, compiler_path): """ Try to guess a path for the compiler. If you want to use a specific compiler, please provide the compiler path manually, as the guess may not be what you are expecting. Providing the path can be done by passing it as an argument (compiler_path) to the xml_generator_configuration_t() or by defining it in your pygccxml configuration file. """ if xml_generator == 'castxml' and compiler_path is None: if platform.system() == 'Windows': # Look for msvc compiler_path = shutil.which('cl') # No msvc found; look for mingw if compiler_path is None: compiler_path = shutil.which('mingw') else: # OS X or Linux # Look for clang first, then gcc compiler_path = shutil.which('clang++') # No clang found; use gcc if compiler_path is None: compiler_path = shutil.which('c++') return compiler_path if __name__ == '__main__': print(load_xml_generator_configuration('xml_generator.cfg').__dict__) pygccxml-3.0.2/src/pygccxml/parser/declarations_cache.py000066400000000000000000000225021476564735400234460ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import timeit import hashlib try: import cPickle as pickle except ImportError: import pickle from pygccxml import utils from . import config as cxx_parsers_cfg def file_signature(filename): """ Return a signature for a file. """ if not os.path.isfile(filename): return None if not os.path.exists(filename): return None # Duplicate auto-generated files can be recognized with the sha1 hash. sig = hashlib.sha1() with open(filename, "rb") as f: buf = f.read() sig.update(buf) return sig.hexdigest() def configuration_signature(config): """ Return a signature for a configuration (xml_generator_configuration_t) object. This can then be used as a key in the cache. This method must take into account anything about a configuration that could cause the declarations generated to be different between runs. """ sig = hashlib.sha1() if isinstance(config, cxx_parsers_cfg.xml_generator_configuration_t): sig.update(str(config.xml_generator_path).encode()) sig.update(str(config.working_directory).encode('utf-8')) if isinstance(config, cxx_parsers_cfg.xml_generator_configuration_t): sig.update(str(config.cflags).encode('utf-8')) for p in config.include_paths: sig.update(str(p).encode('utf-8')) for s in config.define_symbols: sig.update(str(s).encode('utf-8')) for u in config.undefine_symbols: sig.update(str(u).encode('utf-8')) return sig.hexdigest() class cache_base_t(object): logger = utils.loggers.declarations_cache def __init__(self): object.__init__(self) def flush(self): """ Flush (write out) the cache to disk if needed. """ raise NotImplementedError() def update(self, source_file, configuration, declarations, included_files): """ update cache entry :param source_file: path to the C++ source file being parsed :param configuration: configuration used in parsing :class:`xml_generator_configuration_t` :param declarations: declaration tree found when parsing :param included_files: files included by parsing. """ raise NotImplementedError() def cached_value(self, source_file, configuration): """ Return declarations, we have cached, for the source_file and the given configuration. :param source_file: path to the C++ source file being parsed. :param configuration: configuration that was used for parsing. """ raise NotImplementedError() class record_t(object): def __init__( self, source_signature, config_signature, included_files, included_files_signature, declarations): self.__source_signature = source_signature self.__config_signature = config_signature self.__included_files = included_files self.__included_files_signature = included_files_signature self.__declarations = declarations self.__was_hit = True # Track if there was a cache hit @property def was_hit(self): return self.__was_hit @was_hit.setter def was_hit(self, was_hit): self.__was_hit = was_hit def key(self): return self.__source_signature, self.__config_signature @staticmethod def create_key(source_file, configuration): return ( file_signature(source_file), configuration_signature(configuration)) @property def source_signature(self): return self.__source_signature @property def config_signature(self): return self.__config_signature @property def included_files(self): return self.__included_files @property def included_files_signature(self): return self.__included_files_signature @property def declarations(self): return self.__declarations class file_cache_t(cache_base_t): """ Cache implementation to store data in a pickled form in a file. This class contains some cache logic that keeps track of which entries have been 'hit' in the cache and if an entry has not been hit then it is deleted at the time of the flush(). This keeps the cache from growing larger when files change and are not used again. """ def __init__(self, name): """ :param name: name of the cache file. """ cache_base_t.__init__(self) self.__name = name # Name of cache file # Map record_key to record_t self.__cache = self.__load(self.__name) self.__needs_flushed = not bool( self.__cache) # If empty then we need to flush for entry in self.__cache.values(): # Clear hit flags entry.was_hit = False @staticmethod def __load(file_name): """ Load pickled cache from file and return the object. """ if os.path.exists(file_name) and not os.path.isfile(file_name): raise RuntimeError( 'Cache should be initialized with valid full file name') if not os.path.exists(file_name): open(file_name, 'w+b').close() return {} cache_file_obj = open(file_name, 'rb') try: file_cache_t.logger.info('Loading cache file "%s".', file_name) start_time = timeit.default_timer() cache = pickle.load(cache_file_obj) file_cache_t.logger.debug( "Cache file has been loaded in %.1f secs", (timeit.default_timer() - start_time)) file_cache_t.logger.debug( "Found cache in file: [%s] entries: %s", file_name, len(list(cache.keys()))) except (pickle.UnpicklingError, AttributeError, EOFError, ImportError, IndexError) as error: file_cache_t.logger.exception( "Error occurred while reading cache file: %s", error) cache_file_obj.close() file_cache_t.logger.info( "Invalid cache file: [%s] Regenerating.", file_name) open(file_name, 'w+b').close() # Create empty file cache = {} # Empty cache finally: cache_file_obj.close() return cache def flush(self): # If not marked as needing flushed, then return immediately if not self.__needs_flushed: self.logger.debug("Cache did not change, ignoring flush.") return # Remove entries that did not get a cache hit num_removed = 0 for key in list(self.__cache.keys()): if not self.__cache[key].was_hit: num_removed += 1 del self.__cache[key] if num_removed > 0: self.logger.debug( "There are %s removed entries from cache.", num_removed) # Save out the cache to disk with open(self.__name, "w+b") as cache_file: pickle.dump(self.__cache, cache_file, pickle.HIGHEST_PROTOCOL) def update(self, source_file, configuration, declarations, included_files): """ Update a cached record with the current key and value contents. """ record = record_t( source_signature=file_signature(source_file), config_signature=configuration_signature(configuration), included_files=included_files, included_files_signature=list( map( file_signature, included_files)), declarations=declarations) # Switched over to holding full record in cache so we don't have # to keep creating records in the next method. self.__cache[record.key()] = record self.__cache[record.key()].was_hit = True self.__needs_flushed = True def cached_value(self, source_file, configuration): """ Attempt to lookup the cached declarations for the given file and configuration. Returns None if declaration not found or signature check fails. """ key = record_t.create_key(source_file, configuration) if key not in self.__cache: return None record = self.__cache[key] if self.__is_valid_signature(record): record.was_hit = True # Record cache hit return record.declarations # some file has been changed del self.__cache[key] return None @staticmethod def __is_valid_signature(record): for index, included_file in enumerate(record.included_files): if file_signature(included_file) != \ record.included_files_signature[index]: return False return True class dummy_cache_t(cache_base_t): """ This is an empty cache object. By default no caching is enabled in pygccxml. """ def __init__(self): cache_base_t.__init__(self) def flush(self): pass def update(self, source_file, configuration, declarations, included_files): pass def cached_value(self, source_file, configuration): return None pygccxml-3.0.2/src/pygccxml/parser/declarations_joiner.py000066400000000000000000000075361476564735400237030ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from .. import declarations def bind_aliases(decls): """ This function binds between class and it's typedefs. :param decls: list of all declarations :rtype: None """ visited = set() typedefs = [ decl for decl in decls if isinstance(decl, declarations.typedef_t)] for decl in typedefs: type_ = declarations.remove_alias(decl.decl_type) if not isinstance(type_, declarations.declarated_t): continue cls_inst = type_.declaration if not isinstance(cls_inst, declarations.class_types): continue if id(cls_inst) not in visited: visited.add(id(cls_inst)) del cls_inst.aliases[:] cls_inst.aliases.append(decl) def join_declarations(namespace): _join_namespaces(namespace) for ns in namespace.declarations: if isinstance(ns, declarations.namespace_t): join_declarations(ns) def _join_namespaces(namespace): ddhash = {} decls = [] for decl in namespace.declarations: _fill_declarations(ddhash, decls, decl) class_t = declarations.class_t class_declaration_t = declarations.class_declaration_t if class_t in ddhash and class_declaration_t in ddhash: # If there is a class and its forward declaration in the namespace, # Remove the second one from the declaration tree _remove_second_class(ddhash, decls, class_t, class_declaration_t) namespace.declarations = decls def _fill_declarations(ddhash, decls, decl): if decl.__class__ not in ddhash: ddhash[decl.__class__] = {decl.name: [decl]} decls.append(decl) else: joined_decls = ddhash[decl.__class__] if decl.name not in joined_decls: decls.append(decl) joined_decls[decl.name] = [decl] else: if isinstance(decl, declarations.calldef_t): if decl not in joined_decls[decl.name]: # functions has overloading decls.append(decl) joined_decls[decl.name].append(decl) elif isinstance(decl, declarations.enumeration_t): # unnamed enums if not decl.name and decl not in \ joined_decls[decl.name]: decls.append(decl) joined_decls[decl.name].append(decl) elif isinstance(decl, declarations.class_t): # unnamed classes if not decl.name and decl not in \ joined_decls[decl.name]: decls.append(decl) joined_decls[decl.name].append(decl) elif isinstance(decl, declarations.namespace_t): joined_decls[decl.name][0].take_parenting(decl) def _remove_second_class(ddhash, decls, class_t, class_declaration_t): class_names = set() for name, same_name_classes in ddhash[class_t].items(): if not name: continue if same_name_classes[0].mangled: class_names.add(same_name_classes[0].mangled) else: class_names.add(same_name_classes[0].name) class_declarations = ddhash[class_declaration_t] for name, same_name_class_declarations in \ class_declarations.items(): if not name: continue for class_declaration in same_name_class_declarations: if class_declaration.mangled is not None: # gccxml if class_declaration.mangled in class_names: decls.remove(class_declaration) elif class_declaration.name in class_names: # castxml decls.remove(class_declaration) pygccxml-3.0.2/src/pygccxml/parser/directory_cache.py000066400000000000000000000450061476564735400230060ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt # # The initial version of the directory_cache_t class was written # by Matthias Baas (baas@ira.uka.de). """ directory cache implementation. This module contains the implementation of a cache that uses individual files, stored in a dedicated cache directory, to store the cached contents. The :class:`parser.directory_cache_t` class instance could be passed as the `cache` argument of the :func:`parser.parse` function. """ import os import os.path import gzip import hashlib try: import cPickle as pickle except ImportError: import pickle from . import declarations_cache class index_entry_t(object): """ Entry of the index table in the directory cache index. Each cached header file (i.e. each .cache file) has a corresponding index_entry_t object. This object is used to determine whether the cache file with the declarations is still valid or not. This class is a helper class for the directory_cache_t class. """ def __init__(self, filesigs, configsig): """ :param filesigs: a list of tuples( `fileid`, `sig`)... :param configsig: the signature of the configuration object. """ self.filesigs = filesigs self.configsig = configsig def __getstate__(self): return self.filesigs, self.configsig def __setstate__(self, state): self.filesigs, self.configsig = state # pylint: disable=W0622 class directory_cache_t(declarations_cache.cache_base_t): """cache class that stores its data as multiple files inside a directory. The cache stores one index file called `index.dat` which is always read by the cache when the cache object is created. Each header file will have its corresponding .cache file that stores the declarations found in the header file. The index file is used to determine whether a .cache file is still valid or not (by checking if one of the dependent files (i.e. the header file itself and all included files) have been modified since the last run). """ def __init__(self, directory="cache", compression=False, sha1_sigs=True): """ :param directory: cache directory path, it is created, if it does not exist :param compression: if `True`, the cache files will be compressed using `gzip` :param sha1_sigs: `sha1_sigs` determines whether file modifications is checked by computing a `sha1` digest or by checking the modification date """ declarations_cache.cache_base_t.__init__(self) # Cache directory self.__dir = os.path.abspath(directory) # Flag that determines whether the cache files will be compressed self.__compression = compression # Flag that determines whether the signature is a sha1 digest or # the modification time # (this flag is passed to the filename_repository_t class) self.__sha1_sigs = sha1_sigs # Filename repository self.__filename_rep = filename_repository_t(self.__sha1_sigs) # Index dictionary (Key is the value returned by _create_cache_key() # (which is based on the header file name) and value is an # index_entry_t object) self.__index = {} # Flag that indicates whether the index was modified self.__modified_flag = False # Check if dir refers to an existing file... if os.path.isfile(self.__dir): raise ValueError(( "Cannot use %s as cache directory. There is already a file " + "with that name.") % self.__dir) # Load the cache or create the cache directory... if os.path.isdir(self.__dir): self._load() else: # Create the cache directory... os.mkdir(self.__dir) def flush(self): """Save the index table to disk.""" self._save() def update(self, source_file, configuration, declarations, included_files): """Replace a cache entry by a new value. :param source_file: a C++ source file name. :type source_file: str :param configuration: configuration object. :type configuration: :class:`xml_generator_configuration_t` :param declarations: declarations contained in the `source_file` :type declarations: pickable object :param included_files: included files :type included_files: list of str """ # Normlize all paths... source_file = os.path.normpath(source_file) included_files = [os.path.normpath(p) for p in included_files] # Create the list of dependent files. This is the included_files list # + the source file. Duplicate names are removed. dependent_files = {} for name in [source_file] + included_files: dependent_files[name] = 1 key = self._create_cache_key(source_file) # Remove an existing entry (if there is one) # After calling this method, it is guaranteed that __index[key] # does not exist anymore. self._remove_entry(source_file, key) # Create a new entry... # Create the sigs of all dependent files... filesigs = [] for filename in list(dependent_files.keys()): id_, sig = self.__filename_rep.acquire_filename(filename) filesigs.append((id_, sig)) configsig = self._create_config_signature(configuration) entry = index_entry_t(filesigs, configsig) self.__index[key] = entry self.__modified_flag = True # Write the declarations into the cache file... cachefilename = self._create_cache_filename(source_file) self._write_file(cachefilename, declarations) def cached_value(self, source_file, configuration): """Return the cached declarations or None. :param source_file: Header file name :type source_file: str :param configuration: Configuration object :type configuration: :class:`parser.xml_generator_configuration_t` :rtype: Cached declarations or None """ # Check if the cache contains an entry for source_file key = self._create_cache_key(source_file) entry = self.__index.get(key) if entry is None: # print "CACHE: %s: Not cached"%source_file return None # Check if the entry is still valid. It is not valid if: # - the source_file has been updated # - the configuration object has changed (i.e. the header is parsed # by gccxml with different settings which may influence the # declarations) # - the included files have been updated # (this list is part of the cache entry as it cannot be known # by the caller when cached_value() is called. It was instead # passed to update()) # Check if the config is different... configsig = self._create_config_signature(configuration) if configsig != entry.configsig: # print "CACHE: %s: Config mismatch"%source_file return None # Check if any of the dependent files has been modified... for id_, sig in entry.filesigs: if self.__filename_rep.is_file_modified(id_, sig): # print "CACHE: %s: Entry not up to date"%source_file return None # Load and return the cached declarations cachefilename = self._create_cache_filename(source_file) decls = self._read_file(cachefilename) # print "CACHE: Using cached decls for",source_file return decls def _load(self): """Load the cache. Loads the `index.dat` file, which contains the index table and the file name repository. This method is called by the :meth:`__init__` """ indexfilename = os.path.join(self.__dir, "index.dat") if os.path.exists(indexfilename): data = self._read_file(indexfilename) self.__index = data[0] self.__filename_rep = data[1] if self.__filename_rep._sha1_sigs != self.__sha1_sigs: print(( "CACHE: Warning: sha1_sigs stored in the cache is set " + "to %s.") % self.__filename_rep._sha1_sigs) print("Please remove the cache to change this setting.") self.__sha1_sigs = self.__filename_rep._sha1_sigs else: self.__index = {} self.__filename_rep = filename_repository_t(self.__sha1_sigs) self.__modified_flag = False def _save(self): """ save the cache index, in case it was modified. Saves the index table and the file name repository in the file `index.dat` """ if self.__modified_flag: self.__filename_rep.update_id_counter() indexfilename = os.path.join(self.__dir, "index.dat") self._write_file( indexfilename, (self.__index, self.__filename_rep)) self.__modified_flag = False def _read_file(self, filename): """ read a Python object from a cache file. Reads a pickled object from disk and returns it. :param filename: Name of the file that should be read. :type filename: str :rtype: object """ if self.__compression: f = gzip.GzipFile(filename, "rb") else: f = open(filename, "rb") res = pickle.load(f) f.close() return res def _write_file(self, filename, data): """Write a data item into a file. The data object is written to a file using the pickle mechanism. :param filename: Output file name :type filename: str :param data: A Python object that will be pickled """ if self.__compression: f = gzip.GzipFile(filename, "wb") else: f = open(filename, "wb") pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) f.close() def _remove_entry(self, source_file, key): """Remove an entry from the cache. source_file is the name of the header and key is its corresponding cache key (obtained by a call to :meth:_create_cache_key ). The entry is removed from the index table, any referenced file name is released and the cache file is deleted. If key references a non-existing entry, the method returns immediately. :param source_file: Header file name :type source_file: str :param key: Key value for the specified header file :type key: hash table object """ entry = self.__index.get(key) if entry is None: return # Release the referenced files... for id_, _ in entry.filesigs: self.__filename_rep.release_filename(id_) # Remove the cache entry... del self.__index[key] self.__modified_flag = True # Delete the corresponding cache file... cachefilename = self._create_cache_filename(source_file) try: os.remove(cachefilename) except OSError as e: print("Could not remove cache file (%s)" % e) @staticmethod def _create_cache_key(source_file): """ return the cache key for a header file. :param source_file: Header file name :type source_file: str :rtype: str """ path, name = os.path.split(source_file) return name + str(hash(path)) def _create_cache_filename(self, source_file): """ return the cache file name for a header file. :param source_file: Header file name :type source_file: str :rtype: str """ res = self._create_cache_key(source_file) + ".cache" return os.path.join(self.__dir, res) @staticmethod def _create_config_signature(config): """ return the signature for a config object. The signature is computed as sha1 digest of the contents of working_directory, include_paths, define_symbols and undefine_symbols. :param config: Configuration object :type config: :class:`parser.xml_generator_configuration_t` :rtype: str """ m = hashlib.sha1() m.update(config.working_directory.encode("utf-8")) for p in config.include_paths: m.update(p.encode("utf-8")) for p in config.define_symbols: m.update(p.encode("utf-8")) for p in config.undefine_symbols: m.update(p.encode("utf-8")) for p in config.cflags: m.update(p.encode("utf-8")) return m.digest() class filename_entry_t(object): """This is a record stored in the filename_repository_t class. The class is an internal class used in the implementation of the filename_repository_t class and it just serves as a container for the file name and the reference count. """ def __init__(self, filename): """Constructor. The reference count is initially set to 0. """ # Filename self.filename = filename # Reference count self.refcount = 0 # Cached signature value for the file. # If sig_valid flag is False, the signature still has to be computed, # otherwise the cached value can be used. # These attributes must not be pickled! self.sig_valid = False self.signature = None def __getstate__(self): # Only pickle filename and refcount return self.filename, self.refcount def __setstate__(self, state): self.filename, self.refcount = state self.sig_valid = False self.signature = None def inc_ref_count(self): """Increase the reference count by 1.""" self.refcount += 1 def dec_ref_count(self): """Decrease the reference count by 1 and return the new count.""" self.refcount -= 1 return self.refcount class filename_repository_t(object): """File name repository. This class stores file names and can check whether a file has been modified or not since a previous call. A file name is stored by calling acquire_filename() which returns an ID and a signature of the file. The signature can later be used to check if the file was modified by calling is_file_modified(). If the file name is no longer required release_filename() should be called so that the entry can be removed from the repository. """ def __init__(self, sha1_sigs): """Constructor. """ # Flag that determines whether the signature is a sha1 digest or # the modification time # (this flag is passed to the filename_repository_t class) self._sha1_sigs = sha1_sigs # ID lookup table (key: filename / value: id_) self.__id_lut = {} # Entry dictionary (key: id_ / value: filename_entry_t) # This dictionary contains the actual data. # It must always hold that each entry in __entries has a corresponding # entry in __id_lut (i.e. the keys in __id_lut must be the names # stored in __entries) self.__entries = {} # A counter for new ids self.__next_id = 1 def acquire_filename(self, name): """Acquire a file name and return its id and its signature. """ id_ = self.__id_lut.get(name) # Is this a new entry? if id_ is None: # then create one... id_ = self.__next_id self.__next_id += 1 self.__id_lut[name] = id_ entry = filename_entry_t(name) self.__entries[id_] = entry else: # otherwise obtain the entry... entry = self.__entries[id_] entry.inc_ref_count() return id_, self._get_signature(entry) def release_filename(self, id_): """Release a file name. """ entry = self.__entries.get(id_) if entry is None: raise ValueError("Invalid filename id (%d)" % id_) # Decrease reference count and check if the entry has to be removed... if entry.dec_ref_count() == 0: del self.__entries[id_] del self.__id_lut[entry.filename] def is_file_modified(self, id_, signature): """Check if the file referred to by `id_` has been modified. """ entry = self.__entries.get(id_) if entry is None: raise ValueError("Invalid filename id_ (%d)" % id_) # Is the signature already known? if entry.sig_valid: # use the cached signature filesig = entry.signature else: # compute the signature and store it filesig = self._get_signature(entry) entry.signature = filesig entry.sig_valid = True return filesig != signature def update_id_counter(self): """Update the `id_` counter so that it doesn't grow forever. """ if not self.__entries: self.__next_id = 1 else: self.__next_id = max(self.__entries.keys()) + 1 def _get_signature(self, entry): """Return the signature of the file stored in entry. """ if self._sha1_sigs: # return sha1 digest of the file content... if not os.path.exists(entry.filename): return None try: with open(entry.filename, "r") as f: data = f.read() return hashlib.sha1(data.encode("utf-8")).digest() except IOError as e: print("Cannot determine sha1 digest:", e) return None else: # return file modification date... try: return os.path.getmtime(entry.filename) except OSError: return None def _dump(self): # pragma: no cover """ Dump contents for debugging/testing. """ print(70 * "-") print("ID lookup table:") for name in self.__id_lut: id_ = self.__id_lut[name] print(" %s -> %d" % (name, id_)) print(70 * "-") print("%-4s %-60s %s" % ("ID", "Filename", "Refcount")) print(70 * "-") for id_ in self.__entries: entry = self.__entries[id_] print("%04d %-60s %d" % (id_, entry.filename, entry.refcount)) pygccxml-3.0.2/src/pygccxml/parser/etree_scanner.py000066400000000000000000000015571476564735400224770ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt # keep py2exe happy import xml.etree.ElementTree # pylint: disable=W0611 import xml.etree.cElementTree as ElementTree from . import scanner class ietree_scanner_t(scanner.scanner_t): def __init__(self, xml_file, decl_factory, *args): scanner.scanner_t.__init__(self, xml_file, decl_factory, *args) def read(self): context = ElementTree.iterparse( self.xml_file, events=("start", "end")) for event, elem in context: if event == 'start': self.startElement(elem.tag, elem.attrib) else: self.endElement(elem.tag) elem.clear() self.endDocument() pygccxml-3.0.2/src/pygccxml/parser/linker.py000066400000000000000000000207331476564735400211430ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import declarations class linker_t( declarations.decl_visitor_t, declarations.type_visitor_t, object): def __init__( self, decls, types, access, membership, files, xml_generator_from_xml_file=None): declarations.decl_visitor_t.__init__(self) declarations.type_visitor_t.__init__(self) object.__init__(self) self.__decls = decls self.__types = types self.__access = access self.__membership = membership self.__files = files self.__inst = None self.__xml_generator_from_xml_file = xml_generator_from_xml_file @property def instance(self): return self.__inst @instance.setter def instance(self, inst): """ Called by __parse_xml_file in source_reader. """ self.__inst = inst # use inst, to reduce attribute access time if isinstance(inst, declarations.declaration_t) and \ inst.location is not None and \ inst.location.file_name != '': inst.location.file_name = self.__files[inst.location.file_name] def __link_type(self, type_id): if type_id is None: # in some situations type_id is None, return_type of constructor or # destructor return None elif type_id in self.__types: return self.__types[type_id] elif type_id in self.__decls: base = declarations.declarated_t(declaration=self.__decls[type_id]) self.__types[type_id] = base return base elif type_id == '...': return declarations.ellipsis_t() return declarations.unknown_t() def __link_compound_type(self): self.__inst.base = self.__link_type(self.__inst.base) def __link_members(self): if id(self.__inst) not in self.__membership: return for member in self.__membership[id(self.__inst)]: if member not in self.__access: continue access = self.__access[member] if member not in self.__decls: continue decl = self.__decls[member] if isinstance(self.__inst, declarations.class_t): self.__inst.adopt_declaration(decl, access) else: self.__inst.adopt_declaration(decl) def __link_calldef(self): self.__inst.return_type = self.__link_type(self.__inst.return_type) if isinstance(self.__inst, declarations.type_t): linked_args = [ self.__link_type(arg) for arg in self.__inst.arguments_types] self.__inst.arguments_types = linked_args else: for arg in self.__inst.arguments: arg.decl_type = self.__link_type(arg.decl_type) for i, exception in enumerate(self.__inst.exceptions): try: self.__inst.exceptions[i] = self.__decls[exception] except KeyError: self.__inst.exceptions[i] = self.__link_type(exception) def visit_member_function(self): self.__link_calldef() def visit_constructor(self): self.__link_calldef() def visit_destructor(self): self.__link_calldef() def visit_member_operator(self): self.__link_calldef() def visit_comment(self): pass def visit_casting_operator(self): self.__link_calldef() # FIXME: is the patch still needed as the demangled name support has # been dropped? # will be fixed by patcher. It is needed because of demangled name # taken into account # self.__inst._name = 'operator ' + self.__inst.return_type.decl_string def visit_free_function(self): self.__link_calldef() def visit_free_operator(self): self.__link_calldef() def visit_class_declaration(self): pass def visit_class(self): self.__link_members() # GCC-XML sometimes generates constructors with names that does not # match class name. I think this is because those constructors are # compiler generated. I need to find out more about this and to talk # with Brad new_name = self.__inst._name if declarations.templates.is_instantiation(new_name): new_name = declarations.templates.name(new_name) for decl in self.__inst.declarations: if not isinstance(decl, declarations.constructor_t): continue if '.' in decl._name or '$' in decl._name: decl._name = new_name bases = self.__inst.bases.split() self.__inst.bases = [] for base in bases: # it could be "_5" or "protected:_5" data = base.split(':') base_decl = self.__decls[data[-1]] access = declarations.ACCESS_TYPES.PUBLIC if len(data) == 2: access = data[0] self.__inst.bases.append( declarations.hierarchy_info_t(base_decl, access)) base_decl.derived.append( declarations.hierarchy_info_t(self.__inst, access)) def visit_ellipsis(self): pass def visit_enumeration(self): pass def visit_namespace(self): self.__link_members() def visit_typedef(self): self.__inst.decl_type = self.__link_type(self.__inst.decl_type) def visit_variable(self): self.__inst.decl_type = self.__link_type(self.__inst.decl_type) def visit_void(self): pass def visit_char(self): pass def visit_signed_char(self): pass def visit_unsigned_char(self): pass def visit_wchar(self): pass def visit_short_int(self): pass def visit_short_unsigned_int(self): pass def visit_bool(self): pass def visit_int(self): pass def visit_unsigned_int(self): pass def visit_long_int(self): pass def visit_long_unsigned_int(self): pass def visit_long_long_int(self): pass def visit_long_long_unsigned_int(self): pass def visit_int128(self): pass def visit_uint128(self): pass def visit_float(self): pass def visit_double(self): pass def visit_long_double(self): pass def visit_complex_long_double(self): pass def visit_complex_double(self): pass def visit_complex_float(self): pass def visit_jbyte(self): pass def visit_jshort(self): pass def visit_jint(self): pass def visit_jlong(self): pass def visit_jfloat(self): pass def visit_jdouble(self): pass def visit_jchar(self): pass def visit_jboolean(self): pass def visit_volatile(self): if isinstance(self.__inst.base, declarations.const_t): const_type_inst = self.__inst.base const_type_inst.base = self.__link_type(const_type_inst.base) else: self.__link_compound_type() def visit_const(self): self.__link_compound_type() def visit_pointer(self): if isinstance(self.__inst.base, declarations.member_variable_type_t): original_inst = self.__inst self.__inst = self.__inst.base self.visit_member_variable_type() self.__inst = original_inst else: self.__link_compound_type() def visit_reference(self): self.__link_compound_type() def visit_elaborated(self): self.__link_compound_type() def visit_array(self): self.__link_compound_type() def visit_free_function_type(self): self.__link_calldef() def visit_member_function_type(self): self.__link_calldef() if isinstance(self.__inst, declarations.type_t): self.__inst.class_inst = self.__link_type(self.__inst.class_inst) def visit_member_variable_type(self): self.__inst.variable_type = self.__link_type(self.__inst.variable_type) self.__link_compound_type() def visit_declarated(self): if isinstance(self.__inst.declaration, str): self.__inst.declaration = self.__decls[self.__inst.declaration] def visit_restrict(self): self.__link_compound_type() pygccxml-3.0.2/src/pygccxml/parser/patcher.py000066400000000000000000000262361476564735400213110ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import re from .. import utils from .. import declarations from ..declarations import type_traits class default_argument_patcher_t(object): def __init__(self, enums, cxx_std): object.__init__(self) self.__enums = enums self.__cxx_std = cxx_std def __call__(self, decl): for arg in decl.arguments: if not arg.default_value: continue fixer = self.__find_fixer(decl, arg) if fixer: arg.default_value = fixer(decl, arg) def __find_fixer(self, func, arg): if self.__is_unqualified_enum(func, arg): return self.__fix_unqualified_enum elif self.__is_double_call(func, arg): return self.__fix_double_call elif self.__is_invalid_integral(func, arg): return self.__fix_invalid_integral elif self.__is_constructor_call(func, arg): return self.__fix_constructor_call return None @staticmethod def __join_names(prefix, suffix): if prefix == '::': return '::' + suffix return prefix + '::' + suffix @staticmethod def __is_unqualified_enum(func, arg): type_ = declarations.remove_reference( declarations.remove_cv(arg.decl_type)) if not declarations.is_enum(type_): return False enum_type = declarations.enum_declaration(type_) # GCCXML does not qualify an enum value in the default argument # but CastXML does. Split the default value and use only the # enum value for fixing it. return enum_type.has_value_name( arg.default_value.split('::')[-1]) def __fix_unqualified_enum(self, func, arg): type_ = declarations.remove_reference( declarations.remove_cv(arg.decl_type)) enum_type = declarations.enum_declaration(type_) if self.__cxx_std.is_cxx11_or_greater: qualifier_decl_string = enum_type.decl_string else: qualifier_decl_string = enum_type.parent.decl_string return self.__join_names( qualifier_decl_string, arg.default_value.split('::')[-1]) @staticmethod def __is_invalid_integral(func, arg): type_ = declarations.remove_reference( declarations.remove_cv(arg.decl_type)) if not declarations.is_integral(type_): return False try: int(arg.default_value) return False except ValueError: # The arg.default_value string could not be converted to int return True def __fix_invalid_integral(self, func, arg): try: int(arg.default_value) return arg.default_value except ValueError: # The arg.default_value string could not be converted to int pass try: int(arg.default_value, 16) if utils.get_architecture() == 64: # on 64 bit architecture, gccxml reports 0fffff, which is # valid number the problem is that in this case it is so # buggy so pygccxml can not fix it users will have to fix the # default value manually return arg.default_value default_value = arg.default_value.lower() found_hex = [ch for ch in default_value if ch in 'abcdef'] if found_hex and not default_value.startswith('0x'): int('0x' + default_value, 16) return '0x' + default_value except ValueError: # The arg.default_value string could not be converted to int pass # may be we deal with enum # CastXML qualifies the enum value with enum type, so split the # argument and use only the enum value enum_value = arg.default_value.split('::')[-1] parent = func.parent while parent: found = self.__find_enum(parent, enum_value) if found: if declarations.is_fundamental(arg.decl_type) and ' ' in \ arg.decl_type.decl_string: template = '(%s)(%s)' else: template = '%s(%s)' if self.__cxx_std.is_cxx11_or_greater: qualifier_decl_string = found.decl_string else: qualifier_decl_string = found.parent.decl_string return template % (arg.decl_type.decl_string, self.__join_names(qualifier_decl_string, enum_value)) else: parent = parent.parent # check if we have an unqualified integral constant # only do patching in cases where we have a bare variable name c_var = re.compile("[a-z_][a-z0-9_]*", re.IGNORECASE) m = c_var.match(arg.default_value) if m: parent = func.parent while parent: try: found = parent.variable( arg.default_value, recursive=False) except declarations.declaration_not_found_t: # ignore exceptions if a match is not found found = None if found and declarations.is_fundamental(arg.decl_type): return "%s" % self.__join_names( found.parent.decl_string, arg.default_value) parent = parent.parent return arg.default_value def __find_enum(self, scope, default_value): # this algorithm could be improved: it could take into account # 1. unnamed namespace # 2. location within files for enum in self.__enums: if enum.parent is scope and enum.has_value_name(default_value): return enum return None @staticmethod def __is_double_call(func, arg): call_invocation = declarations.call_invocation dv = arg.default_value found1 = call_invocation.find_args(dv) if found1 == call_invocation.NOT_FOUND: return False found2 = call_invocation.find_args(dv, found1[1] + 1) if found2 == call_invocation.NOT_FOUND: return False args1 = call_invocation.args(dv[found1[0]: found1[1] + 1]) args2 = call_invocation.args(dv[found2[0]: found2[1] + 1]) return len(args1) == len(args2) @staticmethod def __fix_double_call(func, arg): call_invocation = declarations.call_invocation dv = arg.default_value found1 = call_invocation.find_args(dv) found2 = call_invocation.find_args(dv, found1[1] + 1) # args1 = call_invocation.args(dv[ found1[0] : found1[1] + 1 ]) args2 = call_invocation.args(dv[found2[0]: found2[1] + 1]) return call_invocation.join(dv[:found1[0]], args2) @staticmethod def __is_constructor_call(func, arg): call_invocation = declarations.call_invocation dv = arg.default_value if not call_invocation.is_call_invocation(dv): return False name = call_invocation.name(dv) base_type = type_traits.base_type(arg.decl_type) if not isinstance(base_type, declarations.declarated_t): return False decl = base_type.declaration return ( decl.name == name or (isinstance(decl, declarations.class_t) and default_argument_patcher_t.__is_decl_in_aliases(decl, name))) @staticmethod def __is_decl_in_aliases(declaration, name): return name in [typedef.name for typedef in declaration.aliases] def __fix_constructor_call(self, func, arg): call_invocation = declarations.call_invocation dv = arg.default_value if not call_invocation.is_call_invocation(dv): return False base_type = type_traits.base_type(arg.decl_type) decl = base_type.declaration name, args = call_invocation.split(dv) if decl.name != name: # we have some alias to the class relevant_typedefs = [ typedef for typedef in decl.aliases if typedef.name == name] if len(relevant_typedefs) == 1: f_q_name = self.__join_names( declarations.full_name( relevant_typedefs[0].parent), name) else: # in this case we can not say which typedef user uses: f_q_name = self.__join_names( declarations.full_name( decl.parent), decl.name) else: f_q_name = self.__join_names( declarations.full_name( decl.parent), name) return call_invocation.join(f_q_name, args) class casting_operator_patcher_t(object): def __init__(self): object.__init__(self) def __call__(self, decl): decl.name = 'operator ' + decl.return_type.decl_string _casting_oper_patcher_ = casting_operator_patcher_t() def fix_calldef_decls(decls, enums, cxx_std): """ some times gccxml report typedefs defined in no namespace it happens for example in next situation template< typename X> void ddd(){ typedef typename X::Y YY;} if I will fail on this bug next time, the right way to fix it may be different """ default_arg_patcher = default_argument_patcher_t(enums, cxx_std) # decls should be flat list of all declarations, you want to apply patch on for decl in decls: default_arg_patcher(decl) if isinstance(decl, declarations.casting_operator_t): _casting_oper_patcher_(decl) def update_unnamed_class(decls): """ Adds name to class_t declarations. If CastXML is being used, the type definitions with an unnamed class/struct are split across two nodes in the XML tree. For example, typedef struct {} cls; produces For each typedef, we look at which class it refers to, and update the name accordingly. This helps the matcher classes finding these declarations. This was the behaviour with gccxml too, so this is important for backward compatibility. If the castxml epic version 1 is used, there is even an elaborated type declaration between the typedef and the struct/class, that also needs to be taken care of. Args: decls (list[declaration_t]): a list of declarations to be patched. Returns: None """ for decl in decls: if isinstance(decl, declarations.typedef_t): referent = decl.decl_type if isinstance(referent, declarations.elaborated_t): referent = referent.base if not isinstance(referent, declarations.declarated_t): continue referent = referent.declaration if referent.name or not isinstance(referent, declarations.class_t): continue referent.name = decl.name pygccxml-3.0.2/src/pygccxml/parser/project_reader.py000066400000000000000000000571531476564735400226550ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import timeit import pygccxml.declarations from . import source_reader from . import declarations_cache from . import declarations_joiner from .. import utils class COMPILATION_MODE(object): ALL_AT_ONCE = 'all at once' FILE_BY_FILE = 'file by file' class file_configuration_t(object): """ source code location configuration. The class instance uses "variant" interface to represent the following data: 1) path to a C++ source file 2) path to GCC-XML generated XML file 3) path to a C++ source file and path to GCC-XML generated file In this case, if XML file does not exists, it will be created. Next time you will ask to parse the source file, the XML file will be used instead. Small tip: you can setup your makefile to delete XML files every time, the relevant source file was changed. 4) Python string, that contains valid C++ code There are few functions, that will help you to construct :class:`file_configuration_t` object: * :func:`create_source_fc` * :func:`create_gccxml_fc` * :func:`create_cached_source_fc` * :func:`create_text_fc` """ class CONTENT_TYPE(object): STANDARD_SOURCE_FILE = 'standard source file' CACHED_SOURCE_FILE = 'cached source file' GCCXML_GENERATED_FILE = 'gccxml generated file' TEXT = 'text' def __init__( self, data, start_with_declarations=None, content_type=CONTENT_TYPE.STANDARD_SOURCE_FILE, cached_source_file=None): object.__init__(self) self.__data = data if not start_with_declarations: start_with_declarations = [] self.__start_with_declarations = start_with_declarations self.__content_type = content_type self.__cached_source_file = cached_source_file if not self.__cached_source_file \ and self.__content_type == self.CONTENT_TYPE.CACHED_SOURCE_FILE: self.__cached_source_file = self.__data + '.xml' @property def data(self): return self.__data @property def start_with_declarations(self): return self.__start_with_declarations @property def content_type(self): return self.__content_type @property def cached_source_file(self): return self.__cached_source_file def create_text_fc(text): """ Creates :class:`parser.file_configuration_t` instance, configured to contain Python string, that contains valid C++ code :param text: C++ code :type text: str :rtype: :class:`parser.file_configuration_t` """ return file_configuration_t( data=text, content_type=file_configuration_t.CONTENT_TYPE.TEXT) def create_source_fc(header): """ Creates :class:`parser.file_configuration_t` instance, configured to contain path to C++ source file :param header: path to C++ source file :type header: str :rtype: :class:`parser.file_configuration_t` """ return file_configuration_t( data=header, content_type=file_configuration_t.CONTENT_TYPE.STANDARD_SOURCE_FILE) def create_gccxml_fc(xml_file): """ Creates :class:`parser.file_configuration_t` instance, configured to contain path to GCC-XML generated XML file. :param xml_file: path to GCC-XML generated XML file :type xml_file: str :rtype: :class:`parser.file_configuration_t` """ return file_configuration_t( data=xml_file, content_type=file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE) def create_cached_source_fc(header, cached_source_file): """ Creates :class:`parser.file_configuration_t` instance, configured to contain path to GCC-XML generated XML file and C++ source file. If XML file does not exists, it will be created and used for parsing. If XML file exists, it will be used for parsing. :param header: path to C++ source file :type header: str :param cached_source_file: path to GCC-XML generated XML file :type cached_source_file: str :rtype: :class:`parser.file_configuration_t` """ return file_configuration_t( data=header, cached_source_file=cached_source_file, content_type=file_configuration_t.CONTENT_TYPE.CACHED_SOURCE_FILE) class project_reader_t(object): """parses header files and returns the contained declarations""" def __init__(self, config, cache=None, decl_factory=None): """ :param config: GCCXML configuration :type config: :class:xml_generator_configuration_t :param cache: declaration cache, by default a cache functionality will not be used :type cache: :class:`cache_base_t` instance or `str` :param decl_factory: declaration factory :type decl_factory: :class:`decl_factory_t` """ self.__config = config self.__dcache = None if isinstance(cache, declarations_cache.cache_base_t): self.__dcache = cache elif isinstance(cache, str): self.__dcache = declarations_cache.file_cache_t(cache) else: self.__dcache = declarations_cache.dummy_cache_t() self.__decl_factory = decl_factory if not decl_factory: self.__decl_factory = pygccxml.declarations.decl_factory_t() self.logger = utils.loggers.cxx_parser self.__xml_generator_from_xml_file = None @property def xml_generator_from_xml_file(self): """ Configuration object containing information about the xml generator read from the xml file. Returns: utils.xml_generators: configuration object """ return self.__xml_generator_from_xml_file @staticmethod def get_os_file_names(files): """ returns file names :param files: list of strings and\\or :class:`file_configuration_t` instances. :type files: list """ fnames = [] for f in files: if isinstance(f, str): fnames.append(f) elif isinstance(f, file_configuration_t): if f.content_type in ( file_configuration_t.CONTENT_TYPE.STANDARD_SOURCE_FILE, file_configuration_t.CONTENT_TYPE.CACHED_SOURCE_FILE): fnames.append(f.data) else: pass return fnames def read_files( self, files, compilation_mode=COMPILATION_MODE.FILE_BY_FILE): """ parses a set of files :param files: list of strings and\\or :class:`file_configuration_t` instances. :type files: list :param compilation_mode: determines whether the files are parsed individually or as one single chunk :type compilation_mode: :class:`COMPILATION_MODE` :rtype: [:class:`declaration_t`] """ if compilation_mode == COMPILATION_MODE.ALL_AT_ONCE \ and len(files) == len(self.get_os_file_names(files)): return self.__parse_all_at_once(files) else: if compilation_mode == COMPILATION_MODE.ALL_AT_ONCE: msg = ''.join([ "Unable to parse files using ALL_AT_ONCE mode. ", "There is some file configuration that is not file. ", "pygccxml.parser.project_reader_t switches to ", "FILE_BY_FILE mode."]) self.logger.warning(msg) return self.__parse_file_by_file(files) def __parse_file_by_file(self, files): namespaces = [] config = self.__config.clone() self.logger.debug("Reading project files: file by file") for prj_file in files: if isinstance(prj_file, file_configuration_t): del config.start_with_declarations[:] config.start_with_declarations.extend( prj_file.start_with_declarations) header = prj_file.data content_type = prj_file.content_type else: config = self.__config header = prj_file content_type = \ file_configuration_t.CONTENT_TYPE.STANDARD_SOURCE_FILE reader = source_reader.source_reader_t( config, self.__dcache, self.__decl_factory) if content_type == \ file_configuration_t.CONTENT_TYPE.STANDARD_SOURCE_FILE: self.logger.info('Parsing source file "%s" ... ', header) decls = reader.read_file(header) elif content_type == \ file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE: self.logger.info('Parsing xml file "%s" ... ', header) decls = reader.read_xml_file(header) elif content_type == \ file_configuration_t.CONTENT_TYPE.CACHED_SOURCE_FILE: # TODO: raise error when header file does not exist if not os.path.exists(prj_file.cached_source_file): dir_ = os.path.split(prj_file.cached_source_file)[0] if dir_ and not os.path.exists(dir_): os.makedirs(dir_) self.logger.info( 'Creating xml file "%s" from source file "%s" ... ', prj_file.cached_source_file, header) reader.create_xml_file(header, prj_file.cached_source_file) self.logger.info( 'Parsing xml file "%s" ... ', prj_file.cached_source_file) decls = reader.read_xml_file(prj_file.cached_source_file) else: decls = reader.read_string(header) self.__xml_generator_from_xml_file = \ reader.xml_generator_from_xml_file namespaces.append(decls) self.logger.debug("Flushing cache... ") start_time = timeit.default_timer() self.__dcache.flush() self.logger.debug( "Cache has been flushed in %.1f secs", (timeit.default_timer() - start_time)) answer = [] self.logger.debug("Joining namespaces ...") for file_nss in namespaces: answer = self._join_top_namespaces(answer, file_nss) self.logger.debug("Joining declarations ...") for ns in answer: if isinstance(ns, pygccxml.declarations.namespace_t): declarations_joiner.join_declarations(ns) leaved_classes = self._join_class_hierarchy(answer) types = self.__declarated_types(answer) self.logger.debug("Relinking declared types ...") self._relink_declarated_types(leaved_classes, types) declarations_joiner.bind_aliases( pygccxml.declarations.make_flatten(answer)) return answer def __parse_all_at_once(self, files): config = self.__config.clone() self.logger.debug("Reading project files: all at once") header_content = [] for header in files: if isinstance(header, file_configuration_t): del config.start_with_declarations[:] config.start_with_declarations.extend( header.start_with_declarations) header_content.append( '#include "%s" %s' % (header.data, os.linesep)) else: header_content.append( '#include "%s" %s' % (header, os.linesep)) declarations = self.read_string(''.join(header_content)) declarations = self._join_top_namespaces(declarations, []) for ns in declarations: if isinstance(ns, pygccxml.declarations.namespace_t): declarations_joiner.join_declarations(ns) return declarations def read_string(self, content): """Parse a string containing C/C++ source code. :param content: C/C++ source code. :type content: str :rtype: Declarations """ reader = source_reader.source_reader_t( self.__config, None, self.__decl_factory) decls = reader.read_string(content) self.__xml_generator_from_xml_file = reader.xml_generator_from_xml_file return decls def read_xml(self, file_configuration): """parses C++ code, defined on the file_configurations and returns GCCXML generated file content""" xml_file_path = None delete_xml_file = True fc = file_configuration reader = source_reader.source_reader_t( self.__config, None, self.__decl_factory) try: if fc.content_type == fc.CONTENT_TYPE.STANDARD_SOURCE_FILE: self.logger.info('Parsing source file "%s" ... ', fc.data) xml_file_path = reader.create_xml_file(fc.data) elif fc.content_type == \ file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE: self.logger.info('Parsing xml file "%s" ... ', fc.data) xml_file_path = fc.data delete_xml_file = False elif fc.content_type == fc.CONTENT_TYPE.CACHED_SOURCE_FILE: # TODO: raise error when header file does not exist if not os.path.exists(fc.cached_source_file): dir_ = os.path.split(fc.cached_source_file)[0] if dir_ and not os.path.exists(dir_): os.makedirs(dir_) self.logger.info( 'Creating xml file "%s" from source file "%s" ... ', fc.cached_source_file, fc.data) xml_file_path = reader.create_xml_file( fc.data, fc.cached_source_file) else: xml_file_path = fc.cached_source_file else: xml_file_path = reader.create_xml_file_from_string(fc.data) with open(xml_file_path, "r") as xml_file: xml = xml_file.read() utils.remove_file_no_raise(xml_file_path, self.__config) self.__xml_generator_from_xml_file = \ reader.xml_generator_from_xml_file return xml finally: if xml_file_path and delete_xml_file: utils.remove_file_no_raise(xml_file_path, self.__config) @staticmethod def _join_top_namespaces(main_ns_list, other_ns_list): answer = main_ns_list[:] for other_ns in other_ns_list: same_name_namespaces = pygccxml.declarations.find_all_declarations( answer, decl_type=pygccxml.declarations.namespace_t, name=other_ns.name, parent=None, # top-level only recursive=False ) if len(same_name_namespaces) == 0: answer.append(other_ns) elif len(same_name_namespaces) == 1: same_name_namespaces[0].take_parenting(other_ns) else: primary_ns = same_name_namespaces[0] for extra_ns in same_name_namespaces[1:]: primary_ns.take_parenting(extra_ns) answer.remove(extra_ns) # then unify the new other_ns primary_ns.take_parenting(other_ns) return answer @staticmethod def _create_key(decl): return ( decl.location.as_tuple(), tuple(pygccxml.declarations.declaration_path(decl))) def _join_class_hierarchy(self, namespaces): classes = [ decl for decl in pygccxml.declarations.make_flatten(namespaces) if isinstance(decl, pygccxml.declarations.class_t)] leaved_classes = {} # selecting classes to leave for class_ in classes: key = self._create_key(class_) if key not in leaved_classes: leaved_classes[key] = class_ # replacing base and derived classes with those that should be leave # also this loop will add missing derived classes to the base for class_ in classes: leaved_class = leaved_classes[self._create_key(class_)] for base_info in class_.bases: leaved_base = leaved_classes[ self._create_key(base_info.related_class)] # treating base class hierarchy of leaved_class leaved_base_info = pygccxml.declarations.hierarchy_info_t( related_class=leaved_base, access=base_info.access) if leaved_base_info not in leaved_class.bases: leaved_class.bases.append(leaved_base_info) else: index = leaved_class.bases.index(leaved_base_info) leaved_class.bases[ index].related_class = leaved_base_info.related_class # treating derived class hierarchy of leaved_base leaved_derived_for_base_info = \ pygccxml.declarations.hierarchy_info_t( related_class=leaved_class, access=base_info.access) if leaved_derived_for_base_info not in leaved_base.derived: leaved_base.derived.append(leaved_derived_for_base_info) else: index = leaved_base.derived.index( leaved_derived_for_base_info) leaved_base.derived[index].related_class = \ leaved_derived_for_base_info.related_class for derived_info in class_.derived: leaved_derived = leaved_classes[ self._create_key( derived_info.related_class)] # treating derived class hierarchy of leaved_class leaved_derived_info = pygccxml.declarations.hierarchy_info_t( related_class=leaved_derived, access=derived_info.access) if leaved_derived_info not in leaved_class.derived: leaved_class.derived.append(leaved_derived_info) # treating base class hierarchy of leaved_derived leaved_base_for_derived_info = \ pygccxml.declarations.hierarchy_info_t( related_class=leaved_class, access=derived_info.access) if leaved_base_for_derived_info not in leaved_derived.bases: leaved_derived.bases.append(leaved_base_for_derived_info) # this loops remove instance we from parent.declarations for class_ in classes: key = self._create_key(class_) if id(leaved_classes[key]) == id(class_): continue else: if class_.parent: declarations = class_.parent.declarations else: # yes, we are talking about global class that doesn't # belong to any namespace. Usually is compiler generated # top level classes declarations = namespaces declarations_ids = [id(decl) for decl in declarations] del declarations[declarations_ids.index(id(class_))] return leaved_classes @staticmethod def _create_name_key(decl): # Not all declarations have a mangled name with castxml # we can only rely on the name if decl.mangled is not None: # gccxml return decl.location.as_tuple(), decl.mangled # castxml return decl.location.as_tuple(), decl.name def _relink_declarated_types(self, leaved_classes, declarated_types): mangled_leaved_classes = {} for leaved_class in leaved_classes.values(): mangled_leaved_classes[ self._create_name_key(leaved_class)] = leaved_class for decl_wrapper_type in declarated_types: # it is possible, that cache contains reference to dropped class # We need to clear it decl_wrapper_type.cache.reset() if isinstance( decl_wrapper_type.declaration, pygccxml.declarations.class_t): key = self._create_key(decl_wrapper_type.declaration) if key in leaved_classes: decl_wrapper_type.declaration = leaved_classes[key] else: name = decl_wrapper_type.declaration._name if name == "": # Happens with gcc5, castxml + std=c++11 # See issue #45 continue if name.startswith("__vmi_class_type_info_pseudo"): continue if name == "rebind, void *> >": continue if name == "type": continue msg = [] msg.append( "Unable to find out actual class definition: '%s'." % name) msg.append(( "Class definition has been changed from one " + "compilation to an other.")) msg.append(( "Why did it happen to me? Here is a short list " + "of reasons: ")) msg.append(( " 1. There are different preprocessor " + "definitions applied on same file during compilation")) msg.append(" 2. Bug in pygccxml.") raise Exception(os.linesep.join(msg)) elif isinstance( decl_wrapper_type.declaration, pygccxml.declarations.class_declaration_t): key = self._create_name_key(decl_wrapper_type.declaration) if key in mangled_leaved_classes: decl_wrapper_type.declaration = mangled_leaved_classes[key] @staticmethod def __declarated_types(namespaces): def get_from_type(cpptype): if not cpptype: return [] elif isinstance(cpptype, pygccxml.declarations.fundamental_t): return [] elif isinstance(cpptype, pygccxml.declarations.declarated_t): return [cpptype] elif isinstance(cpptype, pygccxml.declarations.compound_t): return get_from_type(cpptype.base) elif isinstance(cpptype, pygccxml.declarations.calldef_type_t): types = get_from_type(cpptype.return_type) for arg in cpptype.arguments_types: types.extend(get_from_type(arg)) return types assert isinstance( cpptype, (pygccxml.declarations.unknown_t, pygccxml.declarations.ellipsis_t)) return [] types = [] for decl in pygccxml.declarations.make_flatten(namespaces): if isinstance(decl, pygccxml.declarations.calldef_t): types.extend(get_from_type(decl.function_type())) elif isinstance( decl, (pygccxml.declarations.typedef_t, pygccxml.declarations.variable_t)): types.extend(get_from_type(decl.decl_type)) return types pygccxml-3.0.2/src/pygccxml/parser/scanner.py000066400000000000000000000670221476564735400213120ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import pprint import xml.sax import xml.sax.handler from .. import utils from .. import declarations # XML_NN - XML Node Name # XML_AN - XML Attribute Name XML_AN_ABSTRACT = "abstract" XML_AN_ACCESS = "access" XML_AN_ALIGN = "align" XML_AN_ARTIFICIAL = "artificial" XML_AN_ATTACHED = "attached" XML_AN_ATTRIBUTES = "attributes" XML_AN_BASE_TYPE = "basetype" XML_AN_BASES = "bases" XML_AN_BEGIN_COLUMN = "begin_column" XML_AN_BEGIN_LINE = "begin_line" XML_AN_BEGIN_OFFSET = "begin_offset" XML_AN_BITS = "bits" XML_AN_COMMENT = "comment" XML_AN_CONST = "const" XML_AN_CONTEXT = "context" XML_AN_CVS_REVISION = "cvs_revision" XML_AN_CASTXML_FORMAT = "format" XML_AN_DEFAULT = "default" XML_AN_DEPRECATION = "deprecation" XML_AN_END_COLUMN = "end_column" XML_AN_END_LINE = "end_line" XML_AN_END_OFFSET = "end_offset" XML_AN_EXPLICIT = "explicit" XML_AN_EXTERN = "extern" XML_AN_FILE = "file" XML_AN_ID = "id" XML_AN_INCOMPLETE = "incomplete" XML_AN_INIT = "init" XML_AN_INLINE = "inline" XML_AN_LINE = "line" XML_AN_MANGLED = "mangled" XML_AN_MAX = "max" XML_AN_MEMBERS = "members" XML_AN_MUTABLE = "mutable" XML_AN_NAME = "name" XML_AN_OFFSET = "offset" XML_AN_OVERRIDES = "overrides" XML_AN_PURE_VIRTUAL = "pure_virtual" XML_AN_RESTRICT = "restrict" XML_AN_RETURNS = "returns" XML_AN_SIZE = "size" XML_AN_STATIC = "static" XML_AN_THROW = "throw" XML_AN_TYPE = "type" XML_AN_ORIGINAL_TYPE = "original_type" XML_AN_VIRTUAL = "virtual" XML_AN_VOLATILE = "volatile" XML_NN_ARGUMENT = "Argument" XML_NN_ARRAY_TYPE = "ArrayType" XML_NN_CASTING_OPERATOR = "Converter" XML_NN_CLASS = "Class" XML_NN_COMMENT = "Comment" XML_NN_CONSTRUCTOR = "Constructor" XML_NN_CV_QUALIFIED_TYPE = "CvQualifiedType" XML_NN_DESTRUCTOR = "Destructor" XML_NN_ELLIPSIS = "Ellipsis" XML_NN_ENUMERATION = "Enumeration" XML_NN_ENUMERATION_VALUE = "EnumValue" XML_NN_FIELD = "Field" XML_NN_FILE = "File" XML_NN_FUNCTION = "Function" XML_NN_FUNCTION_TYPE = "FunctionType" XML_NN_FUNDAMENTAL_TYPE = "FundamentalType" XML_NN_FREE_OPERATOR = "OperatorFunction" XML_NN_GCC_XML = "GCC_XML" XML_NN_CASTXML = "CastXML" XML_NN_MEMBER_OPERATOR = "OperatorMethod" XML_NN_METHOD = "Method" XML_NN_METHOD_TYPE = "MethodType" XML_NN_NAMESPACE = "Namespace" XML_NN_OFFSET_TYPE = "OffsetType" XML_NN_POINTER_TYPE = "PointerType" XML_NN_REFERENCE_TYPE = "ReferenceType" XML_NN_ELABORATED_TYPE = "ElaboratedType" XML_NN_ROOT = "GCC_XML" XML_NN_STRUCT = "Struct" XML_NN_TYPEDEF = "Typedef" XML_NN_UNION = "Union" XML_NN_VARIABLE = "Variable" class scanner_t(xml.sax.handler.ContentHandler): def __init__(self, xml_file, decl_factory, config, *args): xml.sax.handler.ContentHandler.__init__(self, *args) self.logger = utils.loggers.cxx_parser self.xml_file = xml_file self.config = config self.__readers = { XML_NN_FILE: self.__read_file, XML_NN_NAMESPACE: self.__read_namespace, XML_NN_ENUMERATION: self.__read_enumeration, XML_NN_ENUMERATION_VALUE: self.__read_enumeration_value, XML_NN_ARRAY_TYPE: self.__read_array_type, XML_NN_CV_QUALIFIED_TYPE: self.__read_cv_qualified_type, XML_NN_POINTER_TYPE: self.__read_pointer_type, XML_NN_REFERENCE_TYPE: self.__read_reference_type, XML_NN_ELABORATED_TYPE: self.__read_elaborated_type, XML_NN_FUNDAMENTAL_TYPE: self.__read_fundamental_type, XML_NN_ARGUMENT: self.__read_argument, XML_NN_FUNCTION_TYPE: self.__read_function_type, XML_NN_METHOD_TYPE: self.__read_method_type, XML_NN_OFFSET_TYPE: self.__read_offset_type, XML_NN_TYPEDEF: self.__read_typedef, XML_NN_VARIABLE: self.__read_variable, XML_NN_CLASS: self.__read_class, XML_NN_STRUCT: self.__read_struct, XML_NN_UNION: self.__read_union, XML_NN_FIELD: self.__read_field, XML_NN_CASTING_OPERATOR: self.__read_casting_operator, XML_NN_COMMENT: self.__read_comment, XML_NN_CONSTRUCTOR: self.__read_constructor, XML_NN_DESTRUCTOR: self.__read_destructor, XML_NN_FUNCTION: self.__read_function, XML_NN_FREE_OPERATOR: self.__read_free_operator, XML_NN_MEMBER_OPERATOR: self.__read_member_operator, XML_NN_METHOD: self.__read_method, XML_NN_GCC_XML: self.__read_version, XML_NN_CASTXML: self.__read_version, XML_NN_ELLIPSIS: self.__read_ellipsis} self.deep_declarations = [ XML_NN_CASTING_OPERATOR, XML_NN_CONSTRUCTOR, XML_NN_DESTRUCTOR, XML_NN_ENUMERATION, XML_NN_FILE, XML_NN_COMMENT, XML_NN_FUNCTION, XML_NN_FREE_OPERATOR, XML_NN_MEMBER_OPERATOR, XML_NN_METHOD, XML_NN_FUNCTION_TYPE, XML_NN_METHOD_TYPE] assert isinstance(decl_factory, declarations.decl_factory_t) self.__decl_factory = decl_factory # mapping from id -> decl self.__declarations = {} # list of all read declarations self.__calldefs = [] # list of enums I need later self.__enums = [] # mapping of id -> comment decl self.__comments = {} # mapping from id -> type self.__types = {} # mapping from id -> file self.__files = {} # mapping between decl id -> access self.__access = {} # mapping between file decl_id -> text self.__files_text = {} # current object under construction self.__inst = None # mapping from id to members self.__members = {} self.__mangled_suffix = ' *INTERNAL* ' self.__mangled_suffix_len = len(self.__mangled_suffix) # These fields are generated by clang, and have no location. # Just set an empty location for them. # bug #19: gp_offset, fp_offset, overflow_arg_area, reg_save_area # bug #32: isa, flags, str and length were added in llvm 3.9 self.__name_attrs_to_skip = [ "gp_offset", "fp_offset", "overflow_arg_area", "reg_save_area", "isa", "flags", "str", "length", ] # These fields are generated by GCC on AArch64, and have no location. self.__name_attrs_to_skip += [ "__stack", "__gr_top", "__vr_top", "__gr_offs", "__vr_offs", ] # With CastXML and clang some __va_list_tag declarations are # present in the tree # With llvm 3.9 there is a __NSConstantString(_tag) in the tree self.__declarations_to_skip = [ "__va_list_tag", "__va_list", "__NSConstantString_tag", "__NSConstantString" ] self.__xml_generator_from_xml_file = None @property def xml_generator_from_xml_file(self): """ Configuration object containing information about the xml generator read from the xml file. Returns: utils.xml_generators: configuration object """ return self.__xml_generator_from_xml_file def read(self): xml.sax.parse(self.xml_file, self) def _handle_comment(self, declaration): comm_decl = self.__comments.get(declaration.comment) if comm_decl: # First acquire file_name placeholder file_decl = comm_decl.location.file_name # If first encounter: # Find real name and read it into memory if file_decl not in self.__files_text: src_name = self.__files.get(file_decl) with open(src_name, "r") as file: line_list = file.readlines() self.__files_text[file_decl] = line_list comment_text = [] # Capture file text for parsing file_text = self.__files_text.get(file_decl) # Use lines and columns to capture only comment text for indx in range(comm_decl.begin_line - 1, comm_decl.end_line): # Col data only different on the last line end_idx = -1 strt_idx = comm_decl.begin_column - 1 if indx == comm_decl.end_line - 1: end_idx = comm_decl.end_column comm_line = file_text[indx] comm_line = comm_line[ strt_idx:end_idx ] # Remove newlines from end of string comm_line = comm_line.rstrip("\n") comment_text.append(comm_line) comm_decl.text = comment_text return comm_decl else: return declarations.comment.comment_t() def endDocument(self): # updating membership members_mapping = {} for gccxml_id, members in self.__members.items(): decl = self.__declarations.get(gccxml_id) if not decl or not isinstance(decl, declarations.scopedef_t): continue members_mapping[id(decl)] = members self.__members = members_mapping for gccxml_id, decl in self.__declarations.items(): if not isinstance(decl.comment, declarations.comment.comment_t): decl.comment = self._handle_comment(decl) if isinstance(decl, declarations.calldef_t) and decl.overrides: overrides_decl = self.__declarations.get(decl.overrides) decl.overrides = overrides_decl def declarations(self): return self.__declarations def calldefs(self): return self.__calldefs def enums(self): return self.__enums def types(self): return self.__types def files(self): return self.__files def access(self): return self.__access def members(self): return self.__members def startElement(self, name, attrs): try: if name not in self.__readers: return obj = self.__readers[name](attrs) if not obj: return # it means that we worked on internals # for example EnumValue of function argument if name in self.deep_declarations: self.__inst = obj self.__read_access(attrs) element_id = attrs.get(XML_AN_ID) if isinstance(obj, declarations.declaration_t): if obj.name in self.__declarations_to_skip: return self.__update_membership(attrs) self.__declarations[element_id] = obj if not isinstance(obj, declarations.namespace_t): self.__read_location(obj, attrs, self.__name_attrs_to_skip) if isinstance(obj, declarations.class_t): self.__read_bases(obj, attrs) self.__read_artificial(obj, attrs) self.__read_deprecation(obj, attrs) self.__read_mangled(obj, attrs) self.__read_attributes(obj, attrs) elif isinstance(obj, declarations.type_t): self.__types[element_id] = obj self.__read_byte_size(obj, attrs) self.__read_byte_align(obj, attrs) elif isinstance(obj, declarations.comment.comment_t): self.__comments[element_id] = obj self.__update_membership(attrs) self.__read_attributes(obj, attrs) elif isinstance(obj, str): self.__files[element_id] = os.path.normpath(obj) else: self.logger.warning( 'Unknown object type has been found.' + ' Please report this bug to pygccxml development team.') except Exception as error: msg = ( 'error occured, while parsing element with name "%s" ' + 'and attrs "%s".') msg = msg + os.linesep + 'Error: %s.' % str(error) self.logger.error(msg, name, pprint.pformat(list(attrs.keys()))) raise def endElement(self, name): if name in self.deep_declarations: self.__inst = None @staticmethod def __read_location(decl, attrs, to_skip): if "name" in attrs and attrs["name"] in to_skip: decl.location = declarations.location_t('', -1) else: if XML_AN_BEGIN_LINE in attrs: line_number = attrs[XML_AN_BEGIN_LINE] else: line_number = attrs[XML_AN_LINE] decl.location = declarations.location_t( file_name=attrs[XML_AN_FILE], line=int(line_number)) def __update_membership(self, attrs): parent = attrs.get(XML_AN_CONTEXT) if not parent: return if parent not in self.__members: self.__members[parent] = [] self.__members[parent].append(attrs[XML_AN_ID]) @staticmethod def __read_members(decl, attrs): decl.declarations = attrs.get(XML_AN_MEMBERS, "") @staticmethod def __read_bases(decl, attrs): decl.bases = attrs.get(XML_AN_BASES, "") @staticmethod def __read_artificial(decl, attrs): decl.is_artificial = attrs.get(XML_AN_ARTIFICIAL, False) def __read_mangled(self, decl, attrs): mangled = attrs.get(XML_AN_MANGLED) # the following patch is defined here for performance reasons if isinstance(mangled, bytes) and \ mangled.endswith(self.__mangled_suffix): mangled = mangled[:self.__mangled_suffix_len] decl.mangled = mangled def __read_deprecation(self, decl, attrs): deprecation = attrs.get(XML_AN_DEPRECATION) # the following patch is defined here for performance reasons if isinstance(deprecation, str): decl.deprecation = deprecation def __read_attributes(self, decl, attrs): attribute = attrs.get(XML_AN_ATTRIBUTES) if attribute is not None and \ self.config.compiler == "msvc" and \ "f2" not in self.config.flags: if attribute == "__thiscall__": return if "__thiscall__" in attribute: attribute = attribute.replace("__thiscall__ ", "") decl.attributes = attribute def __read_access(self, attrs): self.__access[attrs[XML_AN_ID]] = \ attrs.get(XML_AN_ACCESS, declarations.ACCESS_TYPES.PUBLIC) @staticmethod def __read_byte_size(decl, attrs): """Using duck typing to set the size instead of in constructor""" size = attrs.get(XML_AN_SIZE, 0) # Make sure the size is in bytes instead of bits decl.byte_size = int(size) / 8 @staticmethod def __read_byte_offset(decl, attrs): """Using duck typing to set the offset instead of in constructor""" offset = attrs.get(XML_AN_OFFSET, 0) # Make sure the size is in bytes instead of bits decl.byte_offset = int(offset) / 8 @staticmethod def __read_byte_align(decl, attrs): """Using duck typing to set the alignment""" align = attrs.get(XML_AN_ALIGN, 0) # Make sure the size is in bytes instead of bits decl.byte_align = int(align) / 8 def __read_root(self, attrs): pass @staticmethod def __read_file(attrs): return attrs.get(XML_AN_NAME, '') def __read_namespace(self, attrs): ns_name = attrs.get(XML_AN_NAME, '') if '.' in ns_name: # if '.' in namespace then this is mangled namespace # -> in c++ namespace{...} # that is almost true: gcc mangale name using top file name. # almost all files has '.' in name ns_name = '' decl = self.__decl_factory.create_namespace(name=ns_name) if attrs.get(XML_AN_COMMENT) is not None: decl.comment = attrs.get(XML_AN_COMMENT) return decl def __read_enumeration(self, attrs): enum_name = attrs.get(XML_AN_NAME, '') if '$_' in enum_name or '._' in enum_name: # it means that this is unnamed enum. in c++ enum{ x }; enum_name = '' decl = self.__decl_factory.create_enumeration(name=enum_name) if attrs.get(XML_AN_COMMENT) is not None: decl.comment = attrs.get(XML_AN_COMMENT) self.__read_byte_size(decl, attrs) self.__read_byte_align(decl, attrs) self.__enums.append(decl) return decl def __read_enumeration_value(self, attrs): name = attrs.get(XML_AN_NAME, '') num = int(attrs[XML_AN_INIT]) self.__inst.append_value(name, num) @staticmethod def __guess_int_value(value_as_str): # returns instance of int or None # if gcc compiled the code, than it is correct! numeric_suffix_letters = 'UuLlFf' for s in numeric_suffix_letters: value_as_str = value_as_str.replace(s, '') try: return int(value_as_str) except ValueError: try: return int(value_as_str, 16) except ValueError: return None def __read_array_type(self, attrs): type_ = attrs[XML_AN_TYPE] size = self.__guess_int_value(attrs.get(XML_AN_MAX, '')) if size is None: size = declarations.array_t.SIZE_UNKNOWN # The following warning is pretty useless, as it cant say what the # problematic declaration is. # msg = 'unable to find out array size from expression # "%s"' % attrs[ XML_AN_MAX ] # warnings.warn( msg ) return declarations.array_t(type_, size + 1) @staticmethod def __read_cv_qualified_type(attrs): if XML_AN_CONST in attrs and XML_AN_VOLATILE in attrs: return declarations.volatile_t( declarations.const_t(attrs[XML_AN_TYPE])) elif XML_AN_CONST in attrs: return declarations.const_t(attrs[XML_AN_TYPE]) elif XML_AN_VOLATILE in attrs: return declarations.volatile_t(attrs[XML_AN_TYPE]) elif XML_AN_RESTRICT in attrs: return declarations.restrict_t(attrs[XML_AN_TYPE]) else: assert 0 @staticmethod def __read_pointer_type(attrs): return declarations.pointer_t(attrs[XML_AN_TYPE]) @staticmethod def __read_reference_type(attrs): return declarations.reference_t(attrs[XML_AN_TYPE]) @staticmethod def __read_elaborated_type(attrs): return declarations.elaborated_t(attrs[XML_AN_TYPE]) @staticmethod def __read_fundamental_type(attrs): try: return declarations.FUNDAMENTAL_TYPES[attrs.get(XML_AN_NAME, '')] except KeyError: return None # This code chokes on atomic_int_type in Boost 1.54 # (and higher, probably). # It seems ok to just silently ignore this error. # raise RuntimeError(( # "pygccxml error: unable to find fundamental type with " + # "name '%s'.") % attrs.get( XML_AN_NAME, '' ) ) def __read_offset_type(self, attrs): base = attrs[XML_AN_BASE_TYPE] type_ = attrs[XML_AN_TYPE] return declarations.pointer_t( declarations.member_variable_type_t( class_inst=base, variable_type=type_)) def __read_argument(self, attrs): if isinstance(self.__inst, declarations.calldef_type_t): self.__inst.arguments_types.append(attrs[XML_AN_TYPE]) else: argument = declarations.argument_t() argument.name = attrs.get( XML_AN_NAME, 'arg%d' % len( self.__inst.arguments)) argument.decl_type = attrs.get( XML_AN_ORIGINAL_TYPE, attrs.get(XML_AN_TYPE) ) argument.default_value = attrs.get(XML_AN_DEFAULT) self.__read_attributes(argument, attrs) self.__inst.arguments.append(argument) def __read_ellipsis(self, attrs): if isinstance(self.__inst, declarations.calldef_type_t): self.__inst.arguments_types.append('...') else: argument = declarations.argument_t(decl_type='...') self.__inst.arguments.append(argument) def __read_calldef(self, calldef, attrs, is_declaration): # destructor for example doesn't have return type calldef.return_type = attrs.get(XML_AN_RETURNS) if is_declaration: self.__calldefs.append(calldef) calldef.name = attrs.get(XML_AN_NAME, '') calldef.has_extern = bool(attrs.get(XML_AN_EXTERN, False)) calldef.has_inline = bool(attrs.get(XML_AN_INLINE, False)) throw_stmt = attrs.get(XML_AN_THROW) if None is throw_stmt: calldef.does_throw = True calldef.exceptions = [] elif throw_stmt == "": calldef.does_throw = False calldef.exceptions = [] else: calldef.does_throw = True calldef.exceptions = throw_stmt.split() if attrs.get(XML_AN_COMMENT) is not None: calldef.comment = attrs.get(XML_AN_COMMENT) def __read_member_function(self, calldef, attrs, is_declaration): self.__read_calldef(calldef, attrs, is_declaration) calldef.has_const = bool(attrs.get(XML_AN_CONST, False)) if is_declaration: calldef.has_static = bool(attrs.get(XML_AN_STATIC, False)) if XML_AN_PURE_VIRTUAL in attrs: calldef.virtuality = declarations.VIRTUALITY_TYPES.PURE_VIRTUAL elif XML_AN_VIRTUAL in attrs: calldef.virtuality = declarations.VIRTUALITY_TYPES.VIRTUAL else: calldef.virtuality = declarations.VIRTUALITY_TYPES.NOT_VIRTUAL if XML_AN_OVERRIDES in attrs: calldef.overrides = attrs.get(XML_AN_OVERRIDES) else: calldef.class_inst = attrs[XML_AN_BASE_TYPE] def __read_function_type(self, attrs): answer = declarations.free_function_type_t() self.__read_calldef(answer, attrs, False) return answer def __read_method_type(self, attrs): answer = declarations.member_function_type_t() self.__read_member_function(answer, attrs, False) return answer def __read_typedef(self, attrs): return self.__decl_factory.create_typedef( name=attrs.get( XML_AN_NAME, ''), decl_type=attrs[XML_AN_TYPE]) def __read_variable(self, attrs): type_qualifiers = declarations.type_qualifiers_t() type_qualifiers.has_mutable = bool(attrs.get(XML_AN_MUTABLE, False)) type_qualifiers.has_static = bool(attrs.get(XML_AN_STATIC, False)) type_qualifiers.has_extern = bool(attrs.get(XML_AN_EXTERN, False)) bits = attrs.get(XML_AN_BITS) if bits: bits = int(bits) decl = self.__decl_factory.create_variable( name=attrs.get( XML_AN_NAME, ''), decl_type=attrs[XML_AN_TYPE], type_qualifiers=type_qualifiers, value=attrs.get( XML_AN_INIT), bits=bits) self.__read_byte_offset(decl, attrs) if attrs.get(XML_AN_COMMENT) is not None: decl.comment = attrs.get(XML_AN_COMMENT) return decl __read_field = __read_variable # just a synonym def __read_class_impl(self, class_type, attrs): name = attrs.get(XML_AN_NAME, '') if '$' in name or '.' in name: name = '' if "<" in name and " >" in name: # Name with template. In some rare cases there # is a space before > (and only there), so remove # it to be consistent with the other names that # have no space there name = name.replace(" >", ">") if XML_AN_INCOMPLETE in attrs: decl = self.__decl_factory.create_class_declaration(name=name) else: decl = self.__decl_factory.create_class( name=name, class_type=class_type) decl.is_abstract = bool(attrs.get(XML_AN_ABSTRACT, False)) self.__read_byte_size(decl, attrs) self.__read_byte_align(decl, attrs) if attrs.get(XML_AN_COMMENT) is not None: decl.comment = attrs.get(XML_AN_COMMENT) return decl def __read_class(self, attrs): return self.__read_class_impl(declarations.CLASS_TYPES.CLASS, attrs) def __read_struct(self, attrs): return self.__read_class_impl(declarations.CLASS_TYPES.STRUCT, attrs) def __read_union(self, attrs): return self.__read_class_impl(declarations.CLASS_TYPES.UNION, attrs) def __read_casting_operator(self, attrs): operator = self.__decl_factory.create_casting_operator() self.__read_member_function(operator, attrs, True) return operator def __read_comment(self, attrs): comment = self.__decl_factory.create_comment() comment.begin_line = int(attrs.get(XML_AN_BEGIN_LINE)) comment.end_line = int(attrs.get(XML_AN_END_LINE)) comment.begin_offset = int(attrs.get(XML_AN_BEGIN_OFFSET)) comment.end_offset = int(attrs.get(XML_AN_END_OFFSET)) comment.begin_column = int(attrs.get(XML_AN_BEGIN_COLUMN)) comment.end_column = int(attrs.get(XML_AN_END_COLUMN)) self.__read_location(comment, attrs, self.__name_attrs_to_skip) return comment def __read_constructor(self, attrs): constructor = self.__decl_factory.create_constructor() self.__read_member_function(constructor, attrs, True) constructor.explicit = attrs.get(XML_AN_EXPLICIT, False) return constructor def __read_function(self, attrs): gfunction = self.__decl_factory.create_free_function() self.__read_calldef(gfunction, attrs, True) return gfunction def __read_method(self, attrs): mfunction = self.__decl_factory.create_member_function() self.__read_member_function(mfunction, attrs, True) return mfunction def __read_destructor(self, attrs): destructor = self.__decl_factory.create_destructor() self.__read_member_function(destructor, attrs, True) destructor.name = '~' + destructor.name return destructor def __read_free_operator(self, attrs): operator = self.__decl_factory.create_free_operator() self.__read_member_function(operator, attrs, True) self.__update_operator_name(operator) return operator def __read_member_operator(self, attrs): operator = self.__decl_factory.create_member_operator() self.__read_member_function(operator, attrs, True) self.__update_operator_name(operator) return operator def __read_version(self, attrs): castxml_format = attrs.get(XML_AN_CASTXML_FORMAT) gccxml_cvs_revision = None if castxml_format is None: gccxml_cvs_revision = attrs.get(XML_AN_CVS_REVISION) xml_generator = utils.xml_generators( utils.loggers.cxx_parser, gccxml_cvs_revision, castxml_format) utils.xml_output_version = gccxml_cvs_revision self.__xml_generator_from_xml_file = xml_generator @staticmethod def __update_operator_name(operator): space = "" if "new" in operator.name or "delete" in operator.name: space = " " operator.name = "operator" + space + operator.name pygccxml-3.0.2/src/pygccxml/parser/source_reader.py000066400000000000000000000362471476564735400225100ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import platform import subprocess from pygccxml import declarations from . import linker from . import config from . import patcher from . import declarations_cache from . import declarations_joiner from .etree_scanner import ietree_scanner_t as scanner_t from .. import utils class source_reader_t(object): """ This class reads C++ source code and returns the declarations tree. This class is the only class that works directly with CastXML. It has only one responsibility: it calls CastXML with a source file specified by the user and creates declarations tree. The implementation of this class is split to two classes: 1. `scanner_t` - this class scans the "XML" file, generated by CastXML or CastXML and creates :mod:`pygccxml` declarations and types classes. After the XML file has been processed declarations and type class instances keeps references to each other using CastXML generated id's. 2. `linker_t` - this class contains logic for replacing CastXML generated ids with references to declarations or type class instances. """ def __init__(self, configuration, cache=None, decl_factory=None): """ :param configuration: Instance of :class:`xml_generator_configuration_t` class, that contains CastXML configuration. :param cache: Reference to cache object, that will be updated after a file has been parsed. :type cache: Instance of :class:`cache_base_t` class :param decl_factory: Declarations factory, if not given default declarations factory( :class:`decl_factory_t` ) will be used. """ self.logger = utils.loggers.cxx_parser self.__search_directories = [] self.__config = configuration self.__cxx_std = utils.cxx_standard(configuration.cflags) self.__search_directories.append(configuration.working_directory) self.__search_directories.extend(configuration.include_paths) if not cache: cache = declarations_cache.dummy_cache_t() self.__dcache = cache self.__config.raise_on_wrong_settings() self.__decl_factory = decl_factory if not decl_factory: self.__decl_factory = declarations.decl_factory_t() self.__xml_generator_from_xml_file = None @property def xml_generator_from_xml_file(self): """ Configuration object containing information about the xml generator read from the xml file. Returns: utils.xml_generators: configuration object """ return self.__xml_generator_from_xml_file def __create_command_line(self, source_file, xml_file): """ Generate the command line used to build xml files. """ return self.__create_command_line_castxml(source_file, xml_file) def __create_command_line_common(self): assert isinstance(self.__config, config.xml_generator_configuration_t) cmd = [] # Add xml generator executable (between "" for windows) cmd.append('"%s"' % os.path.normpath(self.__config.xml_generator_path)) # Add all passed cflags if self.__config.cflags != "": cmd.append(" %s " % self.__config.cflags) # Add additional includes directories dirs = self.__search_directories cmd.append(''.join([' -I"%s"' % search_dir for search_dir in dirs])) return cmd def __create_command_line_castxml(self, source_file, xmlfile): cmd = self.__create_command_line_common() # Clang option: -c Only run preprocess, compile, and assemble steps cmd.append("-c") # Clang option: make sure clang knows we want to parse c++ cmd.append("-x c++") # Always require a compiler path at this point if self.__config.compiler_path is None: raise (RuntimeError( "Please pass the compiler_path as argument to " + "your xml_generator_configuration_t(), or add it to your " + "pygccxml configuration file.")) # Platform specific options if platform.system() == 'Windows': compilers = ("mingw", "g++", "gcc") compiler_path = self.__config.compiler_path.lower() if any(compiler in compiler_path for compiler in compilers): # Look at the compiler path. This is a bad way # to find out if we are using mingw; but it # should probably work in most of the cases cmd.append('--castxml-cc-gnu ' + self.__config.compiler_path) else: # We are using msvc cmd.append('--castxml-cc-msvc ' + '"%s"' % self.__config.compiler_path) if self.__config.compiler == 'msvc9': cmd.append('"-D_HAS_TR1=0"') else: # On mac or linux, use gcc or clang (the flag is the same) cmd.append('--castxml-cc-gnu ') if self.__cxx_std.is_implicit: std_flag = '' else: std_flag = ' ' + self.__cxx_std.stdcxx + ' ' ccflags = self.__config.ccflags if std_flag: ccflags += std_flag if ccflags: all_cc_opts = self.__config.compiler_path + ' ' + ccflags cmd.append( '"(" ' + all_cc_opts + ' ")"') else: cmd.append(self.__config.compiler_path) if self.__config.castxml_epic_version is not None: if self.__config.castxml_epic_version != 1: raise RuntimeError( "The CastXML epic version can only be 1, " "but it was " + str(self.__config.castxml_epic_version)) # Tell castxml to output xml file with a specific epic version cmd.append( '--castxml-output=' + str(self.__config.castxml_epic_version)) else: # Tell castxml to output xml files that are backward compatible # with the format from gccxml cmd.append('--castxml-gccxml') # Add symbols cmd = self.__add_symbols(cmd) # The destination file cmd.append('-o %s' % xmlfile) # The source file cmd.append('%s' % source_file) # Where to start the parsing if self.__config.start_with_declarations: cmd.append( '--castxml-start "%s"' % ','.join(self.__config.start_with_declarations)) cmd_line = ' '.join(cmd) self.logger.debug('castxml cmd: %s', cmd_line) return cmd_line def __add_symbols(self, cmd): """ Add all additional defined and undefined symbols. """ if self.__config.define_symbols: symbols = self.__config.define_symbols cmd.append(''.join( [' -D"%s"' % def_symbol for def_symbol in symbols])) if self.__config.undefine_symbols: un_symbols = self.__config.undefine_symbols cmd.append(''.join( [' -U"%s"' % undef_symbol for undef_symbol in un_symbols])) return cmd def create_xml_file(self, source_file, destination=None): """ This method will generate a xml file using an external tool. The method will return the file path of the generated xml file. :param source_file: path to the source file that should be parsed. :type source_file: str :param destination: if given, will be used as target file path for the xml generator. :type destination: str :rtype: path to xml file. """ xml_file = destination # If file specified, remove it to start else create new file name if xml_file: utils.remove_file_no_raise(xml_file, self.__config) else: xml_file = utils.create_temp_file_name(suffix='.xml') ffname = source_file if not os.path.isabs(ffname): ffname = self.__file_full_name(source_file) command_line = self.__create_command_line(ffname, xml_file) process = subprocess.Popen( args=command_line, shell=True, stdout=subprocess.PIPE) try: results = [] while process.poll() is None: line = process.stdout.readline() if line.strip(): results.append(line.rstrip()) for line in process.stdout.readlines(): if line.strip(): results.append(line.rstrip()) exit_status = process.returncode msg = os.linesep.join([str(s) for s in results]) if self.__config.ignore_gccxml_output: if not os.path.isfile(xml_file): raise RuntimeError( "Error occurred while running " + self.__config.xml_generator.upper() + ": %s status:%s" % (msg, exit_status)) else: if msg or exit_status or not \ os.path.isfile(xml_file): if not os.path.isfile(xml_file): raise RuntimeError( "Error occurred while running " + self.__config.xml_generator.upper() + " xml file does not exist") else: raise RuntimeError( "Error occurred while running " + self.__config.xml_generator.upper() + ": %s status:%s" % (msg, exit_status)) except Exception: utils.remove_file_no_raise(xml_file, self.__config) raise finally: process.wait() process.stdout.close() return xml_file def create_xml_file_from_string(self, content, destination=None): """ Creates XML file from text. :param content: C++ source code :type content: str :param destination: file name for xml file :type destination: str :rtype: returns file name of xml file """ header_file = utils.create_temp_file_name(suffix='.h') try: with open(header_file, "w+") as header: header.write(content) xml_file = self.create_xml_file(header_file, destination) finally: utils.remove_file_no_raise(header_file, self.__config) return xml_file def read_file(self, source_file): return self.read_cpp_source_file(source_file) def read_cpp_source_file(self, source_file): """ Reads C++ source file and returns declarations tree :param source_file: path to C++ source file :type source_file: str """ xml_file = '' try: ffname = self.__file_full_name(source_file) self.logger.debug("Reading source file: [%s].", ffname) decls = self.__dcache.cached_value(ffname, self.__config) if not decls: self.logger.debug( "File has not been found in cache, parsing...") xml_file = self.create_xml_file(ffname) decls, files = self.__parse_xml_file(xml_file) self.__dcache.update( ffname, self.__config, decls, files) else: self.logger.debug(( "File has not been changed, reading declarations " + "from cache.")) except Exception: if xml_file: utils.remove_file_no_raise(xml_file, self.__config) raise if xml_file: utils.remove_file_no_raise(xml_file, self.__config) return decls def read_xml_file(self, xml_file): """ Read generated XML file. :param xml_file: path to xml file :type xml_file: str :rtype: declarations tree """ assert self.__config is not None ffname = self.__file_full_name(xml_file) self.logger.debug("Reading xml file: [%s]", xml_file) decls = self.__dcache.cached_value(ffname, self.__config) if not decls: self.logger.debug("File has not been found in cache, parsing...") decls, _ = self.__parse_xml_file(ffname) self.__dcache.update(ffname, self.__config, decls, []) else: self.logger.debug( "File has not been changed, reading declarations from cache.") return decls def read_string(self, content): """ Reads a Python string that contains C++ code, and return the declarations tree. """ header_file = utils.create_temp_file_name(suffix='.h') with open(header_file, "w+") as f: f.write(content) try: decls = self.read_file(header_file) except Exception: utils.remove_file_no_raise(header_file, self.__config) raise utils.remove_file_no_raise(header_file, self.__config) return decls def __file_full_name(self, file_): if os.path.isfile(file_): return file_ for path in self.__search_directories: file_path = os.path.join(path, file_) if os.path.isfile(file_path): return file_path raise RuntimeError("pygccxml error: file '%s' does not exist" % file_) def __parse_xml_file(self, xml_file): scanner_ = scanner_t(xml_file, self.__decl_factory, self.__config) scanner_.read() self.__xml_generator_from_xml_file = \ scanner_.xml_generator_from_xml_file decls = scanner_.declarations() types = scanner_.types() files = scanner_.files() linker_ = linker.linker_t( decls=decls, types=types, access=scanner_.access(), membership=scanner_.members(), files=files, xml_generator_from_xml_file=self.__xml_generator_from_xml_file) for type_ in list(types.values()): # I need this copy because internaly linker change types collection linker_.instance = type_ declarations.apply_visitor(linker_, type_) for decl in decls.values(): linker_.instance = decl declarations.apply_visitor(linker_, decl) declarations_joiner.bind_aliases(iter(decls.values())) # Patch the declarations tree if self.__xml_generator_from_xml_file.is_castxml: patcher.update_unnamed_class(decls.values()) patcher.fix_calldef_decls( scanner_.calldefs(), scanner_.enums(), self.__cxx_std) decls = [inst for inst in iter(decls.values()) if self.__check(inst)] return decls, list(files.values()) @staticmethod def __check(inst): return isinstance(inst, declarations.namespace_t) and not inst.parent pygccxml-3.0.2/src/pygccxml/utils/000077500000000000000000000000001476564735400171445ustar00rootroot00000000000000pygccxml-3.0.2/src/pygccxml/utils/__init__.py000066400000000000000000000011111476564735400212470ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """ The utils package contains tools used internally by pygccxml. """ from .utils import get_architecture from .utils import loggers from .utils import create_temp_file_name from .utils import remove_file_no_raise from .utils import normalize_path from .utils import find_xml_generator from .utils import get_tr1 from .utils import cxx_standard from .xml_generators import xml_generators pygccxml-3.0.2/src/pygccxml/utils/utils.py000066400000000000000000000236111476564735400206610ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt """Logger classes and a few convenience methods.""" import os import sys import logging import tempfile import shutil import warnings def find_xml_generator(name="castxml", search_path=None): """ Try to find a c++ parser (xml generator) Args: name (str): name of the c++ parser (e.g. castxml) search_path (str): helps finding castxml (for example in jupyter notebooks, use sys.path) Returns: path (str), name (str): path to the xml generator and it's name If no c++ parser is found the function raises an exception. pygccxml does currently only support castxml as c++ parser. """ path = shutil.which(name, path=search_path) if path == "" or path is None: raise Exception("No c++ parser found. Please install castxml.") return path.rstrip(), name def _create_logger_(name): """Implementation detail, creates a logger.""" logger = logging.getLogger(name) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(levelname)s %(message)s')) logger.addHandler(handler) logger.setLevel(logging.INFO) return logger class loggers(object): """Class-namespace, defines a few loggers classes, used in the project.""" cxx_parser = _create_logger_('pygccxml.cxx_parser') """ Logger for C++ parser functionality If you set this logger level to DEBUG, you will be able to see the exact command line, used to invoke GCC-XML and errors that occures during XML parsing """ pdb_reader = _create_logger_('pygccxml.pdb_reader') """ Logger for MS .pdb file reader functionality """ queries_engine = _create_logger_('pygccxml.queries_engine') """ Logger for query engine functionality. If you set this logger level to DEBUG, you will be able to see what queries you do against declarations tree, measure performance and may be even to improve it. Query engine reports queries and whether they are optimized or not. """ declarations_cache = _create_logger_('pygccxml.declarations_cache') """ Logger for declarations tree cache functionality If you set this logger level to DEBUG, you will be able to see what is exactly happens, when you read the declarations from cache file. You will be able to decide, whether it worse for you to use this or that cache strategy. """ root = logging.getLogger('pygccxml') """ Root logger exists for your convenience only. """ all_loggers = [ root, cxx_parser, queries_engine, declarations_cache, pdb_reader] """ Contains all logger classes, defined by the class. """ @staticmethod def set_level(level): """Set the same logging level for all the loggers at once.""" for logger in loggers.all_loggers: logger.setLevel(level) def remove_file_no_raise(file_name, config): """Removes file from disk if exception is raised.""" # The removal can be disabled by the config for debugging purposes. if config.keep_xml: return True try: if os.path.exists(file_name): os.remove(file_name) except IOError as error: loggers.root.error( "Error occurred while removing temporary created file('%s'): %s", file_name, str(error)) def create_temp_file_name(suffix, prefix=None, directory=None): """ Small convenience function that creates temporary files. This function is a wrapper around the Python built-in function tempfile.mkstemp. """ if not prefix: prefix = tempfile.gettempprefix() fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=directory) file_obj = os.fdopen(fd) file_obj.close() return name def normalize_path(some_path): """Return os.path.normpath(os.path.normcase(some_path)).""" return os.path.normpath(os.path.normcase(some_path)) def contains_parent_dir(fpath, dirs): """ Returns true if paths in dirs start with fpath. Precondition: dirs and fpath should be normalized before calling this function. """ # Note: this function is used nowhere in pygccxml but is used # at least by pypluplus; so it should stay here. return bool([x for x in dirs if _f(fpath, x)]) def _f(fpath, dir_): """Helper function for contains_parent_dir function.""" return fpath.startswith(dir_) def get_architecture(): """ Returns computer architecture: 32 or 64. The guess is based on maxint. """ if sys.maxsize == 2147483647: return 32 elif sys.maxsize == 9223372036854775807: return 64 else: raise RuntimeError("Unknown architecture") class cached(property): """Convert a method into a cached attribute.""" # The following code is cut-and-paste from this post: # http://groups.google.com/group/comp.lang.python/browse_thread/ # thread/5b71896c06bd0f76/ # Thanks to Michele Simionato def __init__(self, method): private = '_' + method.__name__ def fget(s): try: return getattr(s, private) except AttributeError: value = method(s) setattr(s, private, value) return value def fdel(s): del s.__dict__[private] super(cached, self).__init__(fget, fdel=fdel) def reset(self): cls = self.__class__ for name in dir(cls): attr = getattr(cls, name) if isinstance(attr, cached): delattr(self, name) def get_tr1(name): """In libstd++ the tr1 namespace needs special care. Return either an empty string or tr1::, useful for appending to search patterns. Args: name (str): the name of the declaration Returns: str: an empty string or "tr1::" """ tr1 = "" if "tr1" in name: tr1 = "tr1::" return tr1 class cxx_standard(object): """Helper class for parsing the C++ standard version. This class holds the C++ standard version the XML generator has been configured with, and provides helpers functions for querying C++ standard version related information. """ __STD_CXX = { '-std=c++98': 199711, '-std=gnu++98': 199711, '-std=c++03': 199711, '-std=gnu++03': 199711, '-std=c++0x': 201103, '-std=gnu++0x': 201103, '-std=c++11': 201103, '-std=gnu++11': 201103, '-std=c++1y': 201402, '-std=gnu++1y': 201402, '-std=c++14': 201402, '-std=gnu++14': 201402, '-std=c++1z': 201703, '-std=c++17': 201703, '-std=gnu++1z': 201703, '-std=gnu++17': 201703, '-std=c++2a': 202002, '-std=gnu++2a': 202002, '-std=c++20': 202002, '-std=gnu++20': 202002, '-std=c++23': float('inf'), '-std=gnu++23': float('inf'), } def __init__(self, cflags): """Class constructor that parses the XML generator's command line Args: cflags (str): cflags command line arguments passed to the XML generator """ super(cxx_standard, self).__init__() self._stdcxx = None self._is_implicit = False for key in cxx_standard.__STD_CXX: if key in cflags: self._stdcxx = key self._cplusplus = cxx_standard.__STD_CXX[key] if not self._stdcxx: if '-std=' in cflags: raise RuntimeError('Unknown -std=c++xx flag used') # Assume c++03 by default self._stdcxx = '-std=c++03' self._cplusplus = cxx_standard.__STD_CXX['-std=c++03'] self._is_implicit = True @property def stdcxx(self): """Returns the -std=c++xx option passed to the constructor""" return self._stdcxx @property def is_implicit(self): """Indicates whether a -std=c++xx was specified""" return self._is_implicit @property def is_cxx03(self): """Returns true if -std=c++03 is being used""" return self._cplusplus == cxx_standard.__STD_CXX['-std=c++03'] @property def is_cxx11(self): """Returns true if -std=c++11 is being used""" return self._cplusplus == cxx_standard.__STD_CXX['-std=c++11'] @property def is_cxx11_or_greater(self): """Returns true if -std=c++11 or a newer standard is being used""" return self._cplusplus >= cxx_standard.__STD_CXX['-std=c++11'] @property def is_cxx14(self): """Returns true if -std=c++14 is being used""" return self._cplusplus == cxx_standard.__STD_CXX['-std=c++14'] @property def is_cxx14_or_greater(self): """Returns true if -std=c++14 or a newer standard is being used""" return self._cplusplus >= cxx_standard.__STD_CXX['-std=c++14'] @property def is_cxx1z(self): """Returns true if -std=c++1z is being used""" return self._cplusplus == cxx_standard.__STD_CXX['-std=c++1z'] class DeprecationWrapper(object): """ A small wrapper class useful when deprecation classes. This class is not part of the public API. """ def __init__(self, new_target, old_name, new_name, version): self.new_target = new_target self.old_name = old_name self.new_name = new_name self.version = version def _warn(self): warnings.warn( self.old_name + " is deprecated. Please use " + self.new_name + " instead. This will be removed in version " + self.version, DeprecationWarning) def __call__(self, *args, **kwargs): self._warn() return self.new_target(*args, **kwargs) def __getattr__(self, attr): self._warn() return getattr(self.new_target, attr) pygccxml-3.0.2/src/pygccxml/utils/xml_generators.py000066400000000000000000000127231476564735400225540ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt class xml_generators(object): """ Helper class for the xml generator versions """ __gccxml_06 = "GCC-XML 0.6" __gccxml_07 = "GCC-XML 0.7" __gccxml_09 = "GCC-XML 0.9" __gccxml_09_buggy = "GCC-XML 0.9 BUGGY" __castxml = "CastXML (gccxml like)" __castxml1 = "CastXML (format version 1)" __separator = "@" def __init__(self, logger, gccxml_cvs_revision=None, castxml_format=None): """ Create a new xml_generators object. Args: logger (logging.Logger) : a logger for debugging output gccxml_cvs_revision (str|None): the xml output version castxml_format (str|None): the xml output version """ if castxml_format is not None and gccxml_cvs_revision is not None: raise RuntimeError("Setting both gccxml_cvs_revision and" "castxml_format is not allowed!") self._is_castxml1 = False self._is_castxml = False self._is_gccxml = False if castxml_format is not None: self._xml_generator_version = self.__castxml self._xml_output_version = castxml_format self._is_castxml = True self._is_castxml1 = True elif gccxml_cvs_revision is not None: self._xml_generator_version, self._xml_output_version = \ self.__extract_versions(logger, gccxml_cvs_revision) self._is_gccxml = "GCC-XML" in self._xml_generator_version self._is_castxml = "CastXML" in self._xml_generator_version else: raise RuntimeError("Either castxml_format or gccxml_cvs_revision" "need to be defined!") def __extract_versions(self, logger, xml_output_version): if xml_output_version is None or xml_output_version == "0.6": # It is not clear what gccxml 0.6 had as version (0.6 or None), # but both cases get caught here. logger.debug("GCCXML version - 0.6") xml_generator = self.__gccxml_06 xml_output_version = 0.6 else: xml_output_version = float(xml_output_version) if xml_output_version <= 1.114: logger.debug("GCCXML version - 0.7") xml_generator = self.__gccxml_07 elif 1.115 <= xml_output_version <= 1.126: logger.debug( "GCCXML version - 0.9 BUGGY ( %s )", xml_output_version) xml_generator = self.__gccxml_09_buggy elif 1.127 <= xml_output_version <= 1.135: logger.debug( "GCCXML version - 0.9 ( %s )", xml_output_version) xml_generator = self.__gccxml_09 else: # CastXML starts with revision 1.136, but still writes the # GCCXML tag and the 0.9 version number in the XML files # for backward compatibility. logger.debug( "CASTXML version - None ( %s )", xml_output_version) xml_generator = self.__castxml return xml_generator, str(xml_output_version) def get_string_repr(self): """ Get a string identifier for the current type of xml generator Returns: str: identifier """ return \ self._xml_generator_version + \ self.__separator + \ str(self._xml_output_version) @property def is_gccxml(self): """ Is the current xml generator gccxml? Returns: bool: is gccxml being used? """ return self._is_gccxml @property def is_castxml(self): """ Is the current xml generator castxml? Returns: bool: is castxml being used? """ return self._is_castxml @property def is_castxml1(self): """ Is the current xml generator castxml (with output format version 1)? Returns: bool: is castxml (with output format version 1) being used? """ return self._is_castxml1 @property def is_gccxml_06(self): """ Is the current xml generator gccxml (version 0.6)? Returns: bool: is gccxml 0.6 being used? """ return self._xml_generator_version == self.__gccxml_06 @property def is_gccxml_07(self): """ Is the current xml generator gccxml (version 0.7)? Returns: bool: is gccxml 0.7 being used? """ return self._xml_generator_version == self.__gccxml_07 @property def is_gccxml_09(self): """ Is the current xml generator gccxml (version 0.9)? Returns: bool: is gccxml 0.9 being used? """ return self._xml_generator_version == self.__gccxml_09 @property def is_gccxml_09_buggy(self): """ Is the current xml generator gccxml (version 0.9 - buggy)? Returns: bool: is gccxml 0.9 (buggy) being used? """ return self._xml_generator_version == self.__gccxml_09_buggy @property def xml_output_version(self): """ The current xml output version for the parsed file. Returns: str: the xml output version """ return self._xml_output_version pygccxml-3.0.2/tests/000077500000000000000000000000001476564735400145315ustar00rootroot00000000000000pygccxml-3.0.2/tests/__init__.py000066400000000000000000000000001476564735400166300ustar00rootroot00000000000000pygccxml-3.0.2/tests/autoconfig.py000066400000000000000000000035601476564735400172450ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import sys import logging import warnings import platform # Prevents copy.deepcopy RecursionError in some tests (Travis build) sys.setrecursionlimit(10000) this_module_dir_path = os.path.abspath( os.path.dirname(sys.modules[__name__].__file__)) data_directory = os.path.join(this_module_dir_path, 'data') build_directory = os.path.join(this_module_dir_path, 'temp') if not os.path.exists(build_directory): os.makedirs(build_directory) sys.path.insert(1, os.path.join(os.curdir, '..')) # The tests are run on the parent pygccxml directory, not the one # in site-packages. Insert the directory's path. sys.path.insert(1, "../src/pygccxml") from pygccxml import parser # nopep8 from pygccxml import utils # nopep8 # We want to make sure we throw an error for ALL the warnings during the # tests. This will allow us to be notified by the build bots, so that the # warnings can be fixed. warnings.simplefilter("error", Warning) # Set logging level utils.loggers.set_level(logging.CRITICAL) # Find out the c++ parser (gccxml or castxml) generator_path, generator_name = utils.find_xml_generator() class cxx_parsers_cfg(object): config = parser.load_xml_generator_configuration( os.path.normpath(this_module_dir_path + '/xml_generator.cfg'), xml_generator_path=generator_path, working_directory=data_directory, xml_generator=generator_name) if platform.system() == 'Windows': config.define_symbols.append('_HAS_EXCEPTIONS=0') if cxx_parsers_cfg.config.xml_generator: generator_name = cxx_parsers_cfg.config.xml_generator if cxx_parsers_cfg.config.xml_generator_path: generator_path = cxx_parsers_cfg.config.xml_generator_path pygccxml-3.0.2/tests/conftest.py000066400000000000000000000026221476564735400167320ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest class Helpers: @staticmethod def _test_type_composition(type_, expected_compound, expected_base): assert isinstance(type_, expected_compound) assert isinstance(type_.base, expected_base) @staticmethod def _test_calldef_args(calldef, expected_args): assert len(calldef.arguments) == len(expected_args) for i, expected_arg in enumerate(expected_args): arg = calldef.arguments[i] assert arg == expected_arg @staticmethod def _test_calldef_return_type(calldef, expected_type): assert isinstance(calldef.return_type, expected_type) @staticmethod def _test_calldef_exceptions(global_ns, calldef, exceptions): # exceptions is list of classes names exception_decls = [] for name in exceptions: exception_decl = global_ns.class_(name) assert exception_decl is not None exception_decls.append(exception_decl) exception_decls.sort() assert len(calldef.exceptions) == len(exception_decls) exceptions_indeed = sorted(calldef.exceptions[:]) assert exception_decls == exceptions_indeed @pytest.fixture def helpers(): return Helpers pygccxml-3.0.2/tests/data/000077500000000000000000000000001476564735400154425ustar00rootroot00000000000000pygccxml-3.0.2/tests/data/abstract_classes.hpp000066400000000000000000000010461476564735400214740ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __abstract_classes_hpp__ #define __abstract_classes_hpp__ namespace abstract_classes{ class abstract_i{ virtual int do_your_things() const = 0; }; class derived_abstract_i: public abstract_i{ }; class implementation : public abstract_i{ virtual int do_your_things() const { return 1; } }; } #endif//__abstract_classes_hpp__ pygccxml-3.0.2/tests/data/attributes_castxml.hpp000066400000000000000000000011021476564735400220660ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __attributes_castxml_hpp__ #define __attributes_castxml_hpp__ #define _out_ __attribute__ ((annotate ("out"))) #define _sealed_ __attribute__ ((annotate ("sealed"))) #define _no_throw_ __attribute__ ((annotate ("no throw"))) namespace attributes{ struct _sealed_ numeric_t{ _no_throw_ void do_nothing( _out_ int& x ){} }; } #endif//__attributes_castxml_hpp__ pygccxml-3.0.2/tests/data/attributes_gccxml.hpp000066400000000000000000000011161476564735400216750ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __attributes_hpp__ #define __attributes_hpp__ #ifdef __GCCXML__ #define _out_ __attribute( (gccxml( "out" ) ) ) #define _sealed_ __attribute( (gccxml( "sealed" ) ) ) #define _no_throw_ __attribute( (gccxml( "no throw" ) ) ) namespace attributes{ _sealed_ struct numeric_t{ _no_throw_ void do_nothing( _out_ int& x ){} }; } #endif//__GCCXML__ #endif//__attributes_hpp__ pygccxml-3.0.2/tests/data/better_templates_matcher_tester.hpp000066400000000000000000000012531476564735400246100ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include #include namespace Ogre{ struct PlaneBoundedVolume{}; struct Plane{}; std::vector do_smth(){ return std::vector(); } std::vector do_smth2(){ return std::vector(); } template< class X > struct Singleton{ }; struct PCZoneFactoryManager{}; Singleton do_smth3(){ return Singleton(); } } pygccxml-3.0.2/tests/data/binary_parsers/000077500000000000000000000000001476564735400204655ustar00rootroot00000000000000pygccxml-3.0.2/tests/data/binary_parsers/libconfig.h000066400000000000000000000010101476564735400225620ustar00rootroot00000000000000#if defined _WIN32 || defined __CYGWIN__ #define IMPORT_SYMBOL __declspec(dllimport) #define EXPORT_SYMBOL __declspec(dllexport) #define PRIVATE_SYMBOL #else #if __GNUC__ >= 4 #define IMPORT_SYMBOL __attribute__ ((visibility("default"))) #define EXPORT_SYMBOL __attribute__ ((visibility("default"))) #define PRIVATE_SYMBOL __attribute__ ((visibility("hidden"))) #else #define IMPORT_SYMBOL #define EXPORT_SYMBOL #define PRIVATE_SYMBOL #endif #endif pygccxml-3.0.2/tests/data/binary_parsers/mydll.cpp000066400000000000000000000047071476564735400223220ustar00rootroot00000000000000#include "mydll.h" #include number_t::number_t() : m_value(0) { // std::cout << "{C++} number_t( 0 )" << std::endl; } number_t::number_t(int value) : m_value(value) { // std::cout << "{C++} number_t( " << value << " )" << std::endl; } number_t::~number_t() { // std::cout << "{C++} ~number_t()" << std::endl; } void number_t::print_it() const { std::cout << "{C++} value: " << m_value << std::endl; } int number_t::get_value() const{ return m_value; } void number_t::set_value(int x){ m_value = x; } number_t number_t::clone() const{ return number_t(*this); } std::auto_ptr number_t::clone_ptr() const{ return std::auto_ptr( new number_t( *this ) ); } void do_smth( number_aptr_t& ){ } int myclass_t::my_static_member = 99; const int myclass_t::my_const_static_member = 10009; int my_global_int = 90; volatile int my_volatile_global_variable = 9; int my_global_array[10] = {0,1,2,3,4,5,6,7,8,9}; void* get_pvoid(void*){ return 0;} void** get_ppvoid(void){return 0;} int FA10_i_i(int a[10]){ return 0;} int FPi_i(int *a){ return 0;} int Fc_i(char bar){ return 0;} int Ff_i(float bar){ return 0;} int Fg_i(double bar){ return 0;} int Fi_i(int bar){ return 0;} int Fie_i(int bar, ...){ return 0;} int Fii_i(int bar, int goo){ return 0;} int Fiii_i(int bar, int goo, int hoo){ return 0;} void Fmxmx_v(myclass_t arg1, X arg2, myclass_t arg3, X arg4){} void Fmyclass_v(myclass_t m){} const int Fv_Ci(void){ return 0;} long double Fv_Lg(void){ return 0.0;} int& Fv_Ri(void){ return my_global_int;} signed char Fv_Sc(void){ return 0;} unsigned char Fv_Uc(void){ return 0;} unsigned int Fv_Ui(void){ return 0;} unsigned long Fv_Ul(void){ return 0;} unsigned short Fv_Us(void){ return 0;} volatile int Fv_Vi(void){ return 0;} char Fv_c(void){ return 0;} float Fv_f(void){ return 0.0;} double Fv_g(void){ return 0.0;} int Fv_i(void){ return 0;} long Fv_l(void){ return 0;} short Fv_s(void){ return 0;} void Fv_v(void){ return;} int identity( int i){ return i; } /* void __cdecl Fv_v_cdecl(void) void __fastcall Fv_v_fastcall(void) void __stdcall Fv_v_stdcall(void) int Fx_i(x fnptr) int Fxix_i(x fnptr, int i, x fnptr3) int Fxx_i(x fnptr, x fnptr2) int Fxxi_i(x fnptr, x fnptr2, x fnptr3, int i) int Fxxx_i(x fnptr, x fnptr2, x fnptr3) int Fxyxy_i(x fnptr, y fnptr2, x fnptr3, y fnptr4) void __cdecl myclass::Fv_v_cdecl(void) void __fastcall myclass::Fv_v_fastcall(void) void __stdcall myclass::Fv_v_stdcall(void) void* myclass::operator new(size_t size) */ pygccxml-3.0.2/tests/data/binary_parsers/mydll.h000066400000000000000000000056031476564735400217630ustar00rootroot00000000000000#pragma once #include "libconfig.h" #include #include #include class EXPORT_SYMBOL number_t{ public: number_t(); explicit number_t(int value); virtual ~number_t(); void print_it() const; int get_value() const; int get_value(){ return m_value; } void set_value(int x); number_t clone() const; std::auto_ptr clone_ptr() const; private: int m_value; }; template class EXPORT_SYMBOL std::auto_ptr< number_t >; typedef std::auto_ptr< number_t > number_aptr_t; enum{ auto_ptr_size = sizeof( number_aptr_t ) }; EXPORT_SYMBOL void do_smth( number_aptr_t& ); EXPORT_SYMBOL extern int my_global_int; typedef void(*do_smth_type)( number_aptr_t& ); EXPORT_SYMBOL extern volatile int my_volatile_global_variable; EXPORT_SYMBOL extern int my_global_array[10]; EXPORT_SYMBOL void* get_pvoid(void*); EXPORT_SYMBOL void** get_ppvoid(void); class EXPORT_SYMBOL myclass_t{ public: myclass_t(int x){} myclass_t(void){} virtual ~myclass_t(){} static int my_static_member; static const int my_const_static_member; volatile int my_volatile_member; do_smth_type* get_do_smth(){ return 0; } void set_do_smth(do_smth_type*){}; int Fi_i(int bar){ return 0; } static int Fis_i(int bar){ return 0; } myclass_t operator+(int x){ return myclass_t(); } myclass_t operator++(){ return myclass_t(); } myclass_t operator++(int){ return myclass_t(); } myclass_t& operator=(const myclass_t& from){ return *this;} struct nested{ nested(){} ~nested(){} int Fi_i(int bar){ return 0;} }; typedef std::vector< std::wstring > wstring_collection_t; wstring_collection_t create_wstring_collection(){ return wstring_collection_t(); } void fill_wstring_collection( wstring_collection_t& ){}; void print__wstring_collection( const wstring_collection_t& ){} }; struct EXPORT_SYMBOL X{}; EXPORT_SYMBOL int FA10_i_i(int a[10]); EXPORT_SYMBOL int FPi_i(int *a); EXPORT_SYMBOL int Fc_i(char bar); EXPORT_SYMBOL int Ff_i(float bar); EXPORT_SYMBOL int Fg_i(double bar); EXPORT_SYMBOL int Fi_i(int bar); EXPORT_SYMBOL int Fie_i(int bar, ...); EXPORT_SYMBOL int Fii_i(int bar, int goo); EXPORT_SYMBOL int Fiii_i(int bar, int goo, int hoo); EXPORT_SYMBOL void Fmxmx_v(myclass_t arg1, X arg2, myclass_t arg3, X arg4); EXPORT_SYMBOL void Fmyclass_v(myclass_t m); EXPORT_SYMBOL const int Fv_Ci(void); EXPORT_SYMBOL long double Fv_Lg(void); EXPORT_SYMBOL int& Fv_Ri(void); EXPORT_SYMBOL signed char Fv_Sc(void); EXPORT_SYMBOL unsigned char Fv_Uc(void); EXPORT_SYMBOL unsigned int Fv_Ui(void); EXPORT_SYMBOL unsigned long Fv_Ul(void); EXPORT_SYMBOL unsigned short Fv_Us(void); EXPORT_SYMBOL volatile int Fv_Vi(void); EXPORT_SYMBOL char Fv_c(void); EXPORT_SYMBOL float Fv_f(void); EXPORT_SYMBOL double Fv_g(void); EXPORT_SYMBOL int Fv_i(void); EXPORT_SYMBOL long Fv_l(void); EXPORT_SYMBOL short Fv_s(void); EXPORT_SYMBOL void Fv_v(void); extern "C"{ int EXPORT_SYMBOL identity( int ); } pygccxml-3.0.2/tests/data/binary_parsers/sconscript000066400000000000000000000002241476564735400225750ustar00rootroot00000000000000Import('*') target_name = 'mydll' shlib = env.SharedLibrary( target=target_name, source=[ target_name + '.cpp' ] ) env.Alias( target_name, shlib ) pygccxml-3.0.2/tests/data/binary_parsers/sconstruct000066400000000000000000000025141476564735400226210ustar00rootroot00000000000000import os import sys vars = Variables() if 'win32' in sys.platform: vars.Add( EnumVariable( 'msvc_compiler' , 'prefered msvc compiler' , 'msvc71' , ['msvc71', 'msvc80', 'msvc90'] ) ) env = Environment(variables=vars) if 'win32' in sys.platform: Help(opts.GenerateHelpText(env)) if env["msvc_compiler"] == "msvc71": env["MSVS"] = {"VERSION": "7.1"} env["MSVS_VERSION"] = "7.1" Tool("msvc")(env) elif env["msvc_compiler"] == "vc8": env["MSVS"] = {"VERSION": "8.0"} env["MSVS_VERSION"] = "8.0" Tool("msvc")(env) if os.path.exists( r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' ): env.Append( LIBPATH=[ r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' , r'E:\Program Files\Microsoft Visual Studio 9.0\VC\lib'] ) env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) if 'win32' in sys.platform: env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) SConscript( 'sconscript', variant_dir='#binaries', duplicate=0, exports=["env"] ) pygccxml-3.0.2/tests/data/bit_fields.hpp000066400000000000000000000006141476564735400202600ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __bit_fields_hpp__ #define __bit_fields_hpp__ namespace bit_fields{ struct fields_t{ unsigned int x : 1; unsigned int y : 7; unsigned int z; }; } #endif//__bit_fields_hpp__ pygccxml-3.0.2/tests/data/classes.hpp000066400000000000000000000007261476564735400176150ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __classes_hpp__ #define __classes_hpp__ struct cls{}; typedef struct {} cls2; typedef class { int i; } cls3; namespace ns{ struct nested_cls{}; typedef class {} nested_cls2; typedef struct nested_cls3 {} nested_cls3; } #endif//__classes_hpp__ pygccxml-3.0.2/tests/data/complex_types.hpp000066400000000000000000000005171476564735400210510ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __complex_types_hpp__ #define __complex_types_hpp__ #ifndef WIN32 #include #endif #endif//__complex_types_hpp__ pygccxml-3.0.2/tests/data/const_volatile_arg.hpp000066400000000000000000000005371476564735400220360ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __const_volatile_arg_hpp__ #define __const_volatile_arg_hpp__ void pygccxml_bug(int const volatile* icv); #endif//__const_volatile_arg_hpp__ pygccxml-3.0.2/tests/data/core_cache.hpp000066400000000000000000000011521476564735400202250ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_cache_hpp__ #define __core_cache_hpp__ #include "core_types.hpp" #include "core_diamand_hierarchy_base.hpp" #include "core_diamand_hierarchy_derived1.hpp" #include "core_diamand_hierarchy_derived2.hpp" #include "core_diamand_hierarchy_final_derived.hpp" #include "core_overloads_1.hpp" #include "core_overloads_2.hpp" namespace core{ namespace cache{ typedef int Int; } } #endif//__core_cache_hpp__ pygccxml-3.0.2/tests/data/core_class_hierarchy.hpp000066400000000000000000000012461476564735400223310ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_class_hierarchy_hpp__ #define __core_class_hierarchy_hpp__ namespace core{ namespace class_hierarchy{ class base_t{ public: virtual ~base_t(){}; }; class other_base_t{ }; class derived_public_t : public base_t{ }; class derived_protected_t : protected base_t{ }; class derived_private_t : private virtual base_t{ }; class multi_derived_t : derived_private_t, protected virtual base_t, private other_base_t{ }; } } #endif//__core_class_hierarchy_hpp__ pygccxml-3.0.2/tests/data/core_class_hierarchy.hpp.xml000066400000000000000000000261771476564735400231420ustar00rootroot00000000000000 pygccxml-3.0.2/tests/data/core_diamand_hierarchy_base.hpp000066400000000000000000000006211476564735400236070ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_diamand_hierarchy_base_hpp__ #define __core_diamand_hierarchy_base_hpp__ namespace core{ namespace diamand_hierarchy{ class base_t{ }; } } #endif//__core_diamand_hierarchy_base_hpp__ pygccxml-3.0.2/tests/data/core_diamand_hierarchy_derived1.hpp000066400000000000000000000007451476564735400244070ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_diamand_hierarchy_derived1_hpp__ #define __core_diamand_hierarchy_derived1_hpp__ #include "core_diamand_hierarchy_base.hpp" namespace core{ namespace diamand_hierarchy{ class derived1_t : public virtual base_t{ }; } } #endif//__core_diamand_hierarchy_derived1_hpp__ pygccxml-3.0.2/tests/data/core_diamand_hierarchy_derived2.hpp000066400000000000000000000007471476564735400244120ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_diamand_hierarchy_derived2_hpp__ #define __core_diamand_hierarchy_derived2_hpp__ #include "core_diamand_hierarchy_base.hpp" namespace core{ namespace diamand_hierarchy{ class derived2_t : public virtual base_t{ }; } } #endif//__core_diamand_hierarchy_derived2_hpp__ pygccxml-3.0.2/tests/data/core_diamand_hierarchy_final_derived.hpp000066400000000000000000000011131476564735400254650ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_diamand_hierarchy_final_derived_hpp__ #define __core_diamand_hierarchy_final_derived_hpp__ #include "core_diamand_hierarchy_derived1.hpp" #include "core_diamand_hierarchy_derived2.hpp" namespace core{ namespace diamand_hierarchy{ class final_derived_t : public virtual derived1_t, public virtual derived2_t{ }; } } #endif//__core_diamand_hierarchy_final_derived_hpp__ pygccxml-3.0.2/tests/data/core_membership.hpp000066400000000000000000000015061476564735400213200ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_membership_hpp__ #define __core_membership_hpp__ enum{ GLOBAL_NS_UNNAMED_ENUM = 18 }; enum EGlobal{ GLOBAL_NS }; namespace core{ namespace membership{ namespace enums_ns{ enum{ WITHIN_NS_UNNAMED_ENUM = 3 }; enum EWithin{ WITHIN_NS }; } namespace{//unnamed namespace enum{ WITHIN_UNNAMED_NS_UNNAMED_ENUM = 1977 }; enum EWithinUnnamed{ WITHIN_UNNAMED_NS }; } class class_for_nested_enums_t{ public: enum ENestedPublic{ nested_enum_public }; protected: enum ENestedProtected{ nested_enum_protected }; private: enum ENestedPrivate{ nested_enum_private }; }; } } #endif//__core_membership_hpp__ pygccxml-3.0.2/tests/data/core_ns_join_1.hpp000066400000000000000000000007011476564735400210400ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_ns_join_1_hpp__ #define __core_ns_join_1_hpp__ enum E11{ e11 }; namespace ns{ enum E12{ e12 }; namespace ns12{ enum E13{ e13 }; } namespace{ enum E14{ e14 }; } } #endif//__core_ns_join_1_hpp__ pygccxml-3.0.2/tests/data/core_ns_join_2.hpp000066400000000000000000000007011476564735400210410ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_ns_join_2_hpp__ #define __core_ns_join_2_hpp__ enum E21{ e21 }; namespace ns{ enum E22{ e22 }; namespace ns22{ enum E23{ e23 }; } namespace{ enum E24{ e24 }; } } #endif//__core_ns_join_2_hpp__ pygccxml-3.0.2/tests/data/core_ns_join_3.hpp000066400000000000000000000007011476564735400210420ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_ns_join_3_hpp__ #define __core_ns_join_3_hpp__ enum E31{ e31 }; namespace ns{ enum E32{ e32 }; namespace ns32{ enum E33{ e33 }; } namespace{ enum E34{ e34 }; } } #endif//__core_ns_join_3_hpp__ pygccxml-3.0.2/tests/data/core_overloads_1.hpp000066400000000000000000000006541476564735400214060ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_overloads_1_hpp__ #define __core_overloads_1_hpp__ #include namespace core{ namespace overloads{ void do_nothing( std::string ); void do_nothing( std::wstring ); } } #endif//__core_overloads_1_hpp__ pygccxml-3.0.2/tests/data/core_overloads_2.hpp000066400000000000000000000007211476564735400214020ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_overloads_2_hpp__ #define __core_overloads_2_hpp__ #include #include namespace core{ namespace overloads{ void do_nothing( std::set< std::string > ); void do_nothing( std::set< std::wstring > ); } } #endif//__core_overloads_2_hpp__ pygccxml-3.0.2/tests/data/core_types.hpp000066400000000000000000000037421476564735400203350ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __core_types_hpp__ #define __core_types_hpp__ #include #define USE_SYMBOL( X ) enum{ x##__LINE__ = sizeof(X) }; namespace core{ namespace types{ typedef void typedef_void; typedef char typedef_char; typedef signed char typedef_signed_char; typedef unsigned char typedef_unsigned_char; typedef wchar_t typedef_wchar_t; typedef short int typedef_short_int; typedef signed short int typedef_signed_short_int; typedef short unsigned int typedef_short_unsigned_int; typedef bool typedef_bool; typedef int typedef_int; typedef signed int typedef_signed_int; typedef unsigned int typedef_unsigned_int; typedef long int typedef_long_int; typedef long unsigned int typedef_long_unsigned_int; typedef long long int typedef_long_long_int; typedef long long unsigned int typedef_long_long_unsigned_int; typedef float typedef_float; typedef double typedef_double; typedef long double typedef_long_double; typedef const int typedef_const_int; USE_SYMBOL( typedef_const_int ); typedef int * typedef_pointer_int; typedef int& typedef_reference_int; typedef const unsigned int * const typedef_const_unsigned_int_const_pointer; typedef volatile int typedef_volatile_int; typedef const volatile int typedef_const_volatile_int; int array255[255]; enum EFavoriteDrinks{ WATER, MILK, GIN_BEEFEATER, LIQUEUR_IRISH_CREAM }; typedef EFavoriteDrinks typedef_EFavoriteDrinks; typedef int (*function_ptr)(int, double); struct members_pointers_t{ int some_function( double hi, int i ){ return 0; } int some_function( double hi) const { return 0; }; int m_some_const_member; int xxx; }; typedef int (members_pointers_t::*member_function_ptr_t)( double )const; typedef int (members_pointers_t::*member_variable_ptr_t); member_variable_ptr_t member_variable_ptr_ = 0; } } #endif//__core_types_hpp__ pygccxml-3.0.2/tests/data/covariant_returns.hpp000066400000000000000000000014471476564735400217310ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __bug_virtual_functions_overload_to_be_exported_hpp__ #define __bug_virtual_functions_overload_to_be_exported_hpp__ struct data_t { int i; }; struct more_data_t : public data_t{ }; struct algorithm_t{ algorithm_t(){}; virtual data_t* f(){ data_t* d = new data_t(); d->i = 0; return d; } }; class better_algorithm_t : public algorithm_t{ public: better_algorithm_t(){}; virtual more_data_t* f(){ more_data_t* d = new more_data_t(); d->i = 1; return d; } }; #endif//__bug_virtual_functions_overload_to_be_exported_hpp__ pygccxml-3.0.2/tests/data/cpp_standards.hpp000066400000000000000000000005261476564735400210030ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // A good test for different cpp standards. iostream is one of the first // things to fail when the wrong flags are used. #include pygccxml-3.0.2/tests/data/decl_cache_file1.txt000066400000000000000000000000631476564735400213140ustar00rootroot00000000000000// Line 1: Test file for declaration_cache testing pygccxml-3.0.2/tests/data/decl_cache_file1_duplicate.txt000066400000000000000000000000631476564735400233460ustar00rootroot00000000000000// Line 1: Test file for declaration_cache testing pygccxml-3.0.2/tests/data/decl_cache_file2.txt000066400000000000000000000000761476564735400213210ustar00rootroot00000000000000// Line 1: Test file for declaration_cache testing // Line 2: pygccxml-3.0.2/tests/data/declaration_string.hpp000066400000000000000000000006011476564735400220230ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt int myfunc (int a, int b) { int r; r=a+b; return r; } class Box { public: short myinternfunc() { return _x; } private: short _x; }; pygccxml-3.0.2/tests/data/declarations_calldef.hpp000066400000000000000000000027211476564735400222770ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __declarations_calldef_hpp__ #define __declarations_calldef_hpp__ namespace declarations{ namespace calldef{ class some_exception_t{}; class other_exception_t{}; void no_return_no_args(); int return_no_args(); void no_return_1_arg(int arg); int return_default_args( int arg=1, bool flag=false ); extern void static_call(); struct calldefs_t{ calldefs_t(); explicit calldefs_t(char); calldefs_t(some_exception_t); calldefs_t(int,double); calldefs_t(const calldefs_t&); virtual ~calldefs_t(); calldefs_t& operator=( const calldefs_t& ); bool operator==( const calldefs_t& ); operator char*() const; virtual operator double(); static void static_call(); inline int member_inline_call(int i){ return i;} virtual void member_virtual_call(); virtual void member_pure_virtual_call() = 0; void member_const_call() const; calldefs_t* do_smth(const calldefs_t& other); }; namespace std{ class iostream; } std::iostream& operator<<( std::iostream&, const calldefs_t& ); std::iostream& operator>>( std::iostream&, calldefs_t& ); namespace ellipsis_tester{ struct ellipsis{ void do_smth( int, ... ); }; void do_smth_else( int, ... ); }//ellipsis_tester } } #endif//__declarations_calldef_hpp__ pygccxml-3.0.2/tests/data/declarations_comparison.hpp000066400000000000000000000014501476564735400230550ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __declarations_comparison_hpp__ #define __declarations_comparison_hpp__ #include "core_ns_join_1.hpp" #include "core_ns_join_2.hpp" #include "core_ns_join_3.hpp" #include "core_membership.hpp" #include "core_class_hierarchy.hpp" #include "core_types.hpp" #include "core_diamand_hierarchy_base.hpp" #include "core_diamand_hierarchy_derived1.hpp" #include "core_diamand_hierarchy_derived2.hpp" #include "core_diamand_hierarchy_final_derived.hpp" #include "core_overloads_1.hpp" #include "core_overloads_2.hpp" #endif//__declarations_comparison_hpp__ pygccxml-3.0.2/tests/data/declarations_enums.hpp000066400000000000000000000011711476564735400220320ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __declarations_enums_hpp__ #define __declarations_enums_hpp__ namespace declarations{ namespace enums{ enum ENumbers{ e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 }; class data{ public: enum EColor{ red, green, blue, black, white }; private: enum EPrivColor{ priv_red, priv_green, priv_blue, priv_black, priv_white }; void do_smth(EPrivColor x){} EColor favorite_color; }; } } #endif//__declarations_enums_hpp__ pygccxml-3.0.2/tests/data/declarations_for_filtering.hpp000066400000000000000000000007511476564735400235370ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __declarations_for_filter_hpp__ #define __declarations_for_filter_hpp__ //those 2 includes wll bring a few declarations #include #include namespace declarations{ namespace filter{ enum color{ red, green, blue }; } } #endif//__declarations_for_filter_hpp__ pygccxml-3.0.2/tests/data/declarations_variables.hpp000066400000000000000000000013431476564735400226540ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __declarations_variables_hpp__ #define __declarations_variables_hpp__ namespace declarations{ namespace variables{ const long unsigned int initialized = 10122004; int array[255]; static int static_var; extern int extern_var; struct struct_variables_t{ mutable int m_mutable; }; struct struct_variables_holder_t{ struct_variables_t m_struct_variables; }; struct struct_static_variables_t{ static const int ssv_static_var; static const int ssv_static_var_value = 1; }; } } #endif//__declarations_variables_hpp__ pygccxml-3.0.2/tests/data/find_noncopyable_vars.hpp000066400000000000000000000004661476564735400225250ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt struct abstract{ virtual void do_smth() = 0; }; struct holder{ abstract* ptr1; abstract* const ptr2; }; pygccxml-3.0.2/tests/data/free_operators.hpp000066400000000000000000000020511476564735400211700ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __free_operators_to_be_exported_hpp__ #define __free_operators_to_be_exported_hpp__ namespace free_operators{ struct number{ int i; number operator*( int ii ) const { number n2 = { i * ii }; return n2; } }; struct rational{ int x, y; }; number operator+( const number& x, int y ){ number z; z.i = x.i + y; return z; } bool operator!( const number& x ){ return !x.i; } number operator*( const number& n, double i ){ number n2 = { static_cast(n.i * i) }; return n2; } number operator*( double i, const number& n ){ number n2 = { static_cast(n.i * i) }; return n2; } rational operator*( int i, const rational& r ){ rational rr = { r.x * i, r.y }; return rr; } bool operator!( const rational& x ){ return !x.x; } } #endif//__free_operators_to_be_exported_hpp__ pygccxml-3.0.2/tests/data/has_public_binary_operator_traits.hpp000066400000000000000000000020501476564735400251260ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include #include namespace binary_operator{ namespace yesequal{ typedef std::string yes1; struct trivial{ bool operator==(const trivial& other); }; typedef trivial yes2; struct external{ }; bool operator==( const external& left, const external& right ); typedef external yes3; } namespace noequal{ struct x1{ private: bool operator==( const x1& other ); }; typedef x1 no1; } namespace yesless{ typedef std::string yes1; struct trivial{ bool operator<(const trivial& other); }; typedef trivial yes2; struct external{ }; bool operator<( const external& left, const external& right ); typedef external yes3; } namespace noless{ struct x1{ private: bool operator<( const x1& other ); }; typedef x1 no1; } } pygccxml-3.0.2/tests/data/include_all.hpp000066400000000000000000000016001476564735400204230ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __include_all_hpp__ #define __include_all_hpp__ #include "core_cache.hpp" #include "core_class_hierarchy.hpp" #include "core_diamand_hierarchy_base.hpp" #include "core_diamand_hierarchy_derived1.hpp" #include "core_diamand_hierarchy_derived2.hpp" #include "core_diamand_hierarchy_final_derived.hpp" #include "core_membership.hpp" #include "core_ns_join_1.hpp" #include "core_ns_join_2.hpp" #include "core_ns_join_3.hpp" #include "core_overloads_1.hpp" #include "core_overloads_2.hpp" #include "core_types.hpp" #include "declarations_calldef.hpp" #include "declarations_comparison.hpp" #include "declarations_enums.hpp" #include "declarations_variables.hpp" #endif//__include_all_hpp__ pygccxml-3.0.2/tests/data/include_std.hpp000066400000000000000000000012151476564735400204470ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __include_std_hpp__ #define __include_std_hpp__ #include #include #include #include #include #include #include namespace instantiate{ std::string str_a; std::wstring str_w; std::set set_of_int; std::list list_of_int; std::vector vector_of_int; std::map< std::pair< std::wstring, std::string >, int > map_of_smth; } #endif//__include_std_hpp__ pygccxml-3.0.2/tests/data/indexing_suites2.hpp000066400000000000000000000041721476564735400214420ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __indexing_suites2_to_be_exported_hpp__ #define __indexing_suites2_to_be_exported_hpp__ #include #include #include #include namespace indexing_suites2 { typedef std::vector< std::string > strings_t; inline void do_nothing( const strings_t& ){} struct item_t{ item_t() : value( -1 ){} explicit item_t( int v) : value( v ){} bool operator==(item_t const& item) const { return value == item.value; } bool operator!=(item_t const& item) const { return value != item.value; } int value; }; typedef std::vector items_t; typedef std::vector items_ptr_t; inline items_ptr_t create_items_ptr(){ items_ptr_t items; items.push_back( new item_t(0) ); items.push_back( new item_t(1) ); items.push_back( new item_t(2) ); items.push_back( new item_t(3) ); items.push_back( new item_t(4) ); return items; } inline item_t get_value( const std::vector& vec, unsigned int index ){ return vec.at(index); } inline void set_value( std::vector& vec, unsigned int index, item_t value ){ vec.at(index); vec[index] = value; } typedef std::vector fvector; fvector empty_fvector(){ return fvector(); } typedef std::map< std::string, std::string > name2value_t; inline std::string get_first_name( name2value_t const * names ){ if( !names ){ return ""; } else{ return names->begin()->first; } } typedef std::multimap< int, int > multimap_ints_t; inline multimap_ints_t create_multimap_ints(){ return multimap_ints_t(); } typedef std::set< std::string > set_strings_t; inline set_strings_t create_set_strings(){ return set_strings_t(); } } namespace pyplusplus{ namespace aliases{ typedef std::vector items_ptr_t; }} namespace infinite_loop{ std::map< std::string, int > test_infinite_loop(); } #endif//__indexing_suites2_to_be_exported_hpp__ pygccxml-3.0.2/tests/data/inline_specifier.hpp000066400000000000000000000002651476564735400214650ustar00rootroot00000000000000struct text_t{ inline bool inlined() const { return true; } unsigned long not_inlined() const; }; inline bool inlined(text_t){ return true; } unsigned long not_inlined(text_t); pygccxml-3.0.2/tests/data/itkImage.xml000066400000000000000000155341171476564735400177370ustar00rootroot00000000000000 pygccxml-3.0.2/tests/data/merge_free_functions.hpp000066400000000000000000000010131476564735400223360ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __merge_free_functions_hpp__ #define __merge_free_functions_hpp__ #include /* namespace n1{ struct s1{}; struct s2{}; template bool has_facet(int i) throw(){ return false; } void do_smth(){ has_facet( 12 ); has_facet( 12 ); } } */ #endif//__merge_free_functions_hpp__ pygccxml-3.0.2/tests/data/msvc_build/000077500000000000000000000000001476564735400175715ustar00rootroot00000000000000pygccxml-3.0.2/tests/data/msvc_build/all.cpp000066400000000000000000000106251476564735400210510ustar00rootroot00000000000000#include #include "abstract_classes.hpp" #include "attributes.hpp" #include "bit_fields.hpp" #include "complex_types.hpp" #include "core_cache.hpp" #include "core_types.hpp" #include "core_class_hierarchy.hpp" #include "core_diamand_hierarchy_base.hpp" #include "core_diamand_hierarchy_derived1.hpp" #include "core_diamand_hierarchy_derived2.hpp" #include "core_diamand_hierarchy_final_derived.hpp" #include "core_membership.hpp" #include "core_ns_join_1.hpp" #include "core_ns_join_2.hpp" #include "core_ns_join_3.hpp" #include "core_overloads_1.hpp" #include "core_overloads_2.hpp" #include "core_types.hpp" #include "declarations_calldef.hpp" #include "declarations_comparison.hpp" #include "declarations_enums.hpp" #include "declarations_for_filtering.hpp" #include "declarations_variables.hpp" #include "demangled.hpp" #include "free_operators.hpp" #include "has_public_binary_operator_traits.hpp" #include "include_all.hpp" #include "include_std.hpp" #include "indexing_suites2.hpp" #include "noncopyable.hpp" #include "patcher.hpp" #include "remove_template_defaults.hpp" #include "string_traits.hpp" #include "type_as_exception_bug.h" #include "type_traits.hpp" #include "typedefs1.hpp" #include "typedefs2.hpp" #include "typedefs_base.hpp" #include "unnamed_classes.hpp" #include "unnamed_enums_bug1.hpp" #include "unnamed_enums_bug2.hpp" #include "unnamed_ns_bug.hpp" #include "vector_traits.hpp" #include "core_types.hpp" namespace core{ namespace overloads{ void do_nothing( std::string d){ std::cout << d; } void do_nothing( std::wstring d){ std::wcout << d; } void do_nothing( std::set< std::string > d ){ std::set< std::string >::size_type t = d.size(); } void do_nothing( std::set< std::wstring > d ){ std::set< std::wstring >::size_type t = d.size(); } } } namespace declarations{ namespace variables{ int static_var = 0; }} void use_decls(){ declarations::enums::ENumbers enumbers; declarations::enums::data::EColor ecolor; sizeof(core::types::exception ); } void use_core_overloads(){ namespace co = core::overloads; } void use_core_types(){ use_core_overloads(); core::types::members_pointers_t mem_ptrs; core::types::typedef_const_int typedef_const_int_ = 0; core::types::typedef_pointer_int typedef_pointer_int_ = 0; int i = 0; core::types::typedef_reference_int typedef_reference_int_ = i; unsigned int j = 0; core::types::typedef_const_unsigned_int_const_pointer typedef_const_unsigned_int_const_pointer_ = &j; core::types::typedef_void* typedef_void = 0; core::types::typedef_char typedef_char_; core::types::typedef_signed_char typedef_signed_char_; core::types::typedef_unsigned_char typedef_unsigned_char_; core::types::typedef_wchar_t typedef_wchar_t_; core::types::typedef_short_int typedef_short_int_; core::types::typedef_signed_short_int typedef_signed_short_int_; core::types::typedef_short_unsigned_int typedef_short_unsigned_int_; core::types::typedef_bool typedef_bool_; core::types::typedef_int typedef_int_; core::types::typedef_signed_int typedef_signed_int_; core::types::typedef_unsigned_int typedef_unsigned_int_; core::types::typedef_long_int typedef_long_int_; core::types::typedef_long_unsigned_int typedef_long_unsigned_int_; core::types::typedef_long_long_int typedef_long_long_int_; core::types::typedef_long_long_unsigned_int typedef_long_long_unsigned_int_; core::types::typedef_float typedef_float_; core::types::typedef_double typedef_double_; core::types::typedef_long_double typedef_long_double_; core::types::typedef_volatile_int typedef_volatile_int_; core::types::member_variable_ptr_t member_variable_ptr_ = 0; core::types::typedef_EFavoriteDrinks typedef_EFavoriteDrinks_; std::wstring hello_world; core::types::function_ptr function_ptr_ = 0; core::types::member_function_ptr_t member_function_ptr_ = 0; core::types::members_pointers_t members_pointers_inst; members_pointers_inst.some_function( 0.23 ); members_pointers_inst.some_function( 0.23, 11 ); } void use_core_ns_join_3(){ E31 e31_; ns::E32 e32_; ns::ns32::E33 e33_; ns::E34 e34_; E11 e11_; E21 e21_; ns::E12 e12_; ns::E22 e22_; ns::ns12::E13 e13_; ns::ns22::E23 e23_; } void use_coremembership(){ namespace cm = core::membership; int i = cm::enums_ns::WITHIN_NS_UNNAMED_ENUM; i += cm::enums_ns::WITHIN_NS; i += cm::WITHIN_UNNAMED_NS_UNNAMED_ENUM; i += cm::WITHIN_UNNAMED_NS; cm::class_for_nested_enums_t class_for_nested_enums_; i += ::GLOBAL_NS_UNNAMED_ENUM; EGlobal eglobal_; } pygccxml-3.0.2/tests/data/msvc_build/msvc_build.sln000066400000000000000000000015431476564735400224410ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msvc_build", "msvc_build.vcproj", "{FEC30A07-68D0-49A3-B7DE-431E5E3B9B6D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FEC30A07-68D0-49A3-B7DE-431E5E3B9B6D}.Debug|Win32.ActiveCfg = Debug|Win32 {FEC30A07-68D0-49A3-B7DE-431E5E3B9B6D}.Debug|Win32.Build.0 = Debug|Win32 {FEC30A07-68D0-49A3-B7DE-431E5E3B9B6D}.Release|Win32.ActiveCfg = Release|Win32 {FEC30A07-68D0-49A3-B7DE-431E5E3B9B6D}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal pygccxml-3.0.2/tests/data/msvc_build/msvc_build.vcproj000066400000000000000000000153611476564735400231530ustar00rootroot00000000000000 pygccxml-3.0.2/tests/data/non_copyable_classes.hpp000066400000000000000000000051041476564735400223400ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // A non copyable class, see: // http://stackoverflow.com/questions/2173746/how-do-i-make-this-c-object-non-copyable #ifndef __non_copyable_classes_hpp__ #define __non_copyable_classes_hpp__ namespace non_copyable{ // A first base class, which can not be copied class Foo1 { private: Foo1(); Foo1( const Foo1& ); // non construction-copyable Foo1& operator=( const Foo1& ); // non copyable protected: int var; public: void set_values (int a) { var=a; } }; class MainFoo1: public Foo1 { public: int get_var() { return var; } }; // ----------------------------------------------- // Foo2 is a base class, with a non copiable const // The constant is of type fundamental (int) class Foo2 { private: Foo2(); protected: const int var; }; // Use the base class class MainFoo2: public Foo2 { public: int get_var() { return var; } }; // ----------------------------------------------- // A class which does nothing class Something { public: int m_nValue; }; // Foo3 is a base class, with a non copiable const // The constant is a class // See http://www.learncpp.com/cpp-tutorial/810-const-class-objects-and-member-functions/ class Foo3 { private: Foo3(); protected: const Something cSomething; // calls default constructor }; // Use the base class class MainFoo3 : Foo3 { public: char b; }; // ----------------------------------------------- // Foo4 is a base class, with a non copiable const // The constant is an array class Foo4 { private: Foo4(); protected: const int foo [5]; }; // Use the base class class MainFoo4 : Foo4 { public: char b; }; // ----------------------------------------------- // Foo5 is a base class, with a variable foo of type Foo4, which is not // copyable class Foo5 { private: Foo5(); protected: const Foo4 foo; }; // Use the base class class MainFoo5 : Foo5 { public: char b; }; // ----------------------------------------------- Member with static qualifiers // Foo6 is a base class (with a static const variable foo) class Foo6 { private: Foo6(); protected: static const int foo1; }; // Use the base class: this class is copyable, it has a public ctor, and // the base class does not contain non-copyable members (because of the static // qualifier) class MainFoo6 : Foo6 { public: MainFoo6(); }; } #endif//__non_copyable_classes_hpp__ pygccxml-3.0.2/tests/data/noncopyable.hpp000066400000000000000000000017661476564735400204760ustar00rootroot00000000000000// Boost noncopyable.hpp header file --------------------------------------// // (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/utility for documentation. #ifndef BOOST_NONCOPYABLE_HPP_INCLUDED #define BOOST_NONCOPYABLE_HPP_INCLUDED namespace boost { // Private copy constructor and copy assignment ensure classes derived from // class noncopyable cannot be copied. // Contributed by Dave Abrahams namespace noncopyable_ // protection from unintended ADL { class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: // emphasize the following members are private noncopyable( const noncopyable& ); const noncopyable& operator=( const noncopyable& ); }; } typedef noncopyable_::noncopyable noncopyable; } // namespace boost #endif // BOOST_NONCOPYABLE_HPP_INCLUDED pygccxml-3.0.2/tests/data/null_comparison.hpp000066400000000000000000000004271476564735400213620ustar00rootroot00000000000000#include using namespace std; namespace ns{ class Test { public: string var; }; int TestFunction1(Test a, Test b) { return 0; } int TestFunction2(Test a, Test b=Test()) { return 0; } } pygccxml-3.0.2/tests/data/ogre.1.7.xml.bz2000066400000000000000000067602541476564735400201440ustar00rootroot00000000000000BZh91AY&SYf [߀`Quby/s}U"U((0}9ͽA*[\ A@h *C }T U@q:݌@ 4Wxz >6MP@UR$P.^ݼUk@5A@h@<<p<QS}cKU_m7Wmtt}{w}{+6CSSﳹa} ;Z9ZX!kp!tMd6(Ek#5ԑnƜ5{m|se C}xI;iwU.lb m4@`@y>+C<"ـ#LPFA(T7w@z)]J{* og"ckB2`*#mn(TspqKnM #m#l@g6 7Rf%L30m #ZF@R@X1k@uPي :0s){p 54(A@w@@ }D@Q@(n#m9JkJ4;ݹk 50SyB#+5`Y]woNbBʹ0g]6O7۟Rju9ުA1'|` fӒ=TϲVa"Jvr =6]x(<핱k!ҁL*L4 AB2)v5RU=X@ʀ@:Bz@N]LМUdxt$]DXN/ A]Taxi &HPhڞIMR$OM! i$J("*hd@ hhe< =L"42ji! P=@5lۯcw)A21@1DTP*( { 8sL0ݥ %U:UkI3p o`]1q•9/opRٵ׾S/GE 57`|Fǵ{p! [X>a)ay!<:.(jev-yrܾѼ M&ݱ'eǢ8e^ve]Ǯy}wܫEI/ x|z;=]M$Asdx1 c9RO&X]MҥL[JI$J+CtiB) ibT'LQ-)#+׫)XD"či@zҸ\mͰ@LJ>"$iNI$EonI0KK[EKm6Mzr6Kco[fIB$<]Ѩ)ڑH5$7D%emas mm6rI$I=$$vm$̹$&m!nINm㍷ <[nknI#nmT܉qI)$).H7$#z܍wsL26IH[Z="1N#|۶lLJI#`Q-I-IdbIjJMbDn[mJSm#DHRI$THvnrV3co[oKTomnmVm%I#m2÷!D$KmrHޤ޶I%$֒Pm7ܕ#mi#䍶nrV7#mII$L6QnMm:YJn7ͼ[o>mq[nI$I%II$R\6mmm$mMTtLKHl2F޶m!&FےHyQQERI' 6eNqxZmےI%A#m6nrbIi2I$I#ې*I$$nItJ2ݷԖI7q6-$mI(ځQ9\$|Ėlp$-$MMmI$Ip$*I.MImI-mrI$qRI$FmItvkR[vKI5%hM$soQWiJ:mx[mw9)$ORXsuvI5I$ӦmonkmnI$I6F$ʒIaےH$I$I$Nm)QmN.@\mnJI"z(\; zQmI"ZH$MSX#zI%#mnH@{Tta+7z옒ۜU+J6⒤IH\AZIr$5q/o\ܐ$oH5rg iagy\s$n$iqFI6ۍ>j-(._Ej2 "E·fpId&I#|IiF(q>ArG*cIb3 +m$m$ȣmrIm.Io7ZQ$kbS[jE) $5֮j%b#7ͳz/sʼnF[$E$Na*PJ8Knn6J[FWutd *"{Qj6܅mަ޶r=Iǯh7ijImmI+JjEo6F$ rI$;ēq STS[or!EdM$Ȧ݆ "h3mےG6ZۓG*I#em:7%%tm:7S$ƒ+jɧ[>oq$i$$$J-' MrLI!9JGi$JFm$I2H6$ĉ%4aD-FTpfarm܍ahěiQIU.F޵ vtIjK#mI)%I"qHDSM$nI$R[m͹Im^RFnFt $)&ʒI$6䯒ys[o7& \-ۍmnI#6f$=RtFp(;y$&XvU(uot4:ejıG&$RT:m\C0j6Owb'Rr[q-FIjM-ĒbHa(m dmQۊKvnk &޶$$&Gu9$p>m$$oo-8N\6m}G$BܒI  (jJ2es MRNIDZI&%f%,I)# mޞ9d$&l^$Mer6=*CJHh 1I$I'G&"eN.J4!DR4vL$ƔmiJ$Q\R6YK,HEj:m_(rû7$q$mnHR($rH1R%toIFR%9IK;#)@LVI.D䡹1 $I 95Mɭ,nclIFI$=KEl$4mMDPwͶmM.HFG8d&),J˛$ q*IzCBbQI'6tܑVIi$rdMx1HmrHd#m(%ԙz¥ͩ.Gv%7$I$zzۓ$Qm|KU PZcAˆEoI8۪=НZIP6mJ6 ުQo,]pț$JI$l mm"6F%jU;Qm%iizMM#I!6[m6aFRJ6mm䑋dFMƒ+mnFm16q:mnVyQ|RI$q6m#ό"(nI5!X@1$WZRI"t$b gu ˹s{qhm.ĮmLH\[;%.tq9JuKhDDEbnBݶީ6,3#H'vrȬhy\w3 U" 0֕x P (RUBTWv]UAr'Fmin`$6"0M#i!B) # ADlcLCtmiqԀأ&Ԓ$haMN$6 ImpU PRRD@dMqhHM&MtnqDD& IM0mG$2 L#MQBFF5%G$6U#`8#6㌔),T 䍶Sm2FQnhj&$iۃ鶚pNH*:N6ӑ&Qqi1DM4ۉDR5J8): ڎEmbcaPdciD$#)$QQPu* 19$R)`GQ ԉmFl\bv7d#"mlca TӒ Gh&&"i jM&$r2c*6@  FH'Q䍃M`jQ6J& ""i@9$j6 H5J6iDiHj586(lpRH M8 1 Ȉu$" 66)nTmp u"@C 26eF#@ӒH(GHmHbe6&mȠ(Sm PHp (r PQ%(H B li!]w4<ۼ+mGQڂDhh`6n9mD DTHBF܍:#l#ԑT6R#HbqR8R F)0cjJE$B$n6)&(P$6ct I4j )!rB6RD7p ؉QHD6@r ##nHRp(`MM j6#qM6q6mPJTu $CRE#l`܂#mh#j6@B`M)RHmEnPR9Jn4Mq&ntin :nTjFm#MbqD%0m Fqmۤ!EnAIF0 (D'QTn G@B :Hm(FM*UA߼t#E +!N"R 8LK(ISnZD2 D`1,f10P0a[RٮV8aH0aYfݥMrZSJ)͎0f*YK*8Ձf6.utlZ%뭕҉7ZMkm4]h+"&h(V A   %ZjU-JVKZB"$eVƕ*T)M 3K"HA-3(R"@,K-6(2lJY$)HʢL0E$$ Dli%ߑ".'# RPD"1J(D(<@`H% $MEQn*hԋP)J҂RK@ L"PD K !B@#4*3B"P@ ܋j?>p{hafdYg" X#j((ݑ5.K;R(. hQhq PW$.ЮqDD6e-!n PԎM#V\v,Q@C ˑӎ[HBKWbv-VKA.ܗ UQ+AqN BۃjIm&%Br%QVjAjɡrkٗGJ0DJg⅛9|֭S%ؗs"Xnb1Y掙gw`۽5Nuڭ{p]7϶iaHH*پ+ o~ί{M뾭+FYrxUr(IZrEyq_`Ռ՜S٭Ɣà?)8<{߼LE/ReR՚SgLەB1Ew݉RB.1 f.5;3q=nEJP*A):) &+ce)F2.̄}w(4ZYZƑ7]e',!v(G<+>7?.\b g hL_@}f ~L3`]T2гx$fɻcNz%l6r\;Q?ǧ{r QdV|N0sMαw,NkZ iw;o#ElkA\HiYMz둚7y[ʎsbGxm nrR6gp,5UQf䦰B>"I!V^kd4[nWnLJ[jVJn1W\zMi3{N9+AΛfu,̊V҈:ބZ=[[lx'AVbv ʙlx += $yRV̋+!b#7 r`ڽ*]ͼw1*,5rbúH"ιuՒ,nj5r6tq O4 mHvj85}jsV)NeU$:hɬwY^M&~y=;y9 ߙb˫obDzՊN+mǜ!8"ʫ}ñ%|J=qT0k^\sYPUQb/0]Te_;\67^ЕHeve%ztٚt8x<< &n]qSnu|T7~^!7o} x!Ş2GJ^XD#+q& G!z z4<\x0\NXkස*ۻºA\vY {_(G`*gUq3x%^Eb噛@g>ǂpE{8j`0-06_*:&(t62 &2 !d 8p0N4  ; aN[-МfFw..ՙɑF tJzbd2-8M#Ai20XRtĠ'g `91(PpcX0Z;fcgOhq6B pv@ݸf9xP{`:0tѳ9)2! i)44 ѓ.^aӀ.Cq20 aa4Ltreg3.4!idp&{;E آ lhÔm;1&33|O\&9rӁ/0g8q901lt i8hrn\4 t獍E  1Nݼ!t0 CAa:N,/' 9d3:̷Ee)FԝuIZ &ZrtS&Y|:)g m&ӥnq3AVII]!VÇF4:4Q rQP_g` ,GÍ%&iSprN B.hapnpGNh d: @snJ0 ;{Zdp-'a| "` xA)P{h|C]ķ\J 6,)4=D7'<'{= N#'8h΍82 88 müGm,z 9(6P1/N)lCN%C-: q85SӳX8Y(0 ٢Bp$ JrdZ.ź'pIЈ*!,_ v"o! 9RΩ׹=᣽>܍&)륜6eч@L2.nVi79ݵ֒΂q(hÒis8PU!U%I >cӳg!U߬oYL{ӛWn>f\3Lry?ΫEMn;\/A2h3%f"P硝^b#9?pM a/"O1{jjJR\6) !x;wvwf~ZdͨvpyPk#{Y * EonaČh%H+! GPH m(r,;"!h) Ɠi'r+t"7AC.kyIR`V% %(׭%O:pcSCGIȖ&S#P)Xk&,X(=D7pb4L7F ,V+FOqᗔPd`(Y!q(,s 8aA6f&i0J dl %@kL +{uJ5ڠif6郞A452h,m`e L ZDE sI!wH:݀ {{#bD U=Uo[HњuRSJ{|'6ى!fUj ǚNN*vloJ\MJ,F.*%8u$9uKk\N#{4F B0 #(07K̤7`GT4*tƝ6i 4刺HxʺLM0i%L, gI0cyi*Lntdĝ.m6IXnХ8=,JeZW*ufuIQ8ŤÔс]J7N*!%\$ńAӃ)JSg8HIqg.{<¯VR!lE:*f[;ۺ`Dꊙ ɛEimj) a/ (Q’i,Ó [icV&:mm5nmm/7ET&FX2KW,!A" "s3֜2t\ ZaaiT0p16 *1i19k p - &(m!uDJe\ʦR]' l&6l`F9rM )50CFE oCEEMjqX KHYaaez40! D蒓 0J:NfkY5APJitad nNQfsl0F8nCaKie ^tJ7g KNRm-"]6ITPbC&:V݆K.SE(Sto{ Y2 "i\ӬQA`QjjH0o8Y$X@v2LRCĠccf9I4GMwux[i\ u t@0:4J*jD eiҊn*Ku#B`峙 JUcwT5t$d %H%&BË `b4UX̶Ra4%HBM^^CQ(5Y7.SJG$1 1B;%A0# jLKkM>S)6_\Z>59eՖIwLbJaW1&# ٔ !*Fo[Ɵ& Zf/IfrI$M_?Fޏۣw.gI$.dSRBp$ۄ{֬e̒%\DK~˛@c {y{G/nf(Iq'(eϥːj;/\#.7yx1Fc<AvLeơ#hlwj\w)#r8Wyӻ m̩wv4h:ywvp#";F75yͰ@ݻ5 Afv1 >V[폲F69$bL ~3SKOݻmM6uhB@.M1F"H . vWTܻܻR\O5]# 2[hhc[Яj;; L Wrwbаl245\Nv=Sq m͒\cԐMV^nr ']iҒK_&+MHrC8&U[]10V1t!%/&+̻\wn.*kRJ!d(HB"E#lG -DևC533,'IӍ2rHZ[qWD7M;i5OR!3qؔE1YH ;[-]e^Wi-+m qt@ yn5 3=.[meM 8ܭ V#DHxIWHm7 _쑰)+eHzA7w #6y|^ cmyQ@m1%gO>} i v-3KGp]6ڍqÂI\w3WjjC0%P7$H$RS(d"Ḷ&qu^iUfONI9]$uuq.rYb7v]0;u&ڵˠ_OM yn GuseyxJ7k4 Wli 1&Jvࠃ_qG폷 cр/Dj' W PLI{5x$ Hi#nȔup4H!#IJㄏvݖCcƶ-Ÿ>4dӵ`Ohܵwwffawrm8IZWmi۲L Mc4%VĶ~?رd J cC@lc?tG?)f&4/?u#QMFK4\bȜh 6!s$MB){'~)t_d"r\~q 3j kB1 ?ûo)]bZ pM ȜC}Sne~x Q pbx.άC3»0l܄:!rfaHR{#Q/)o9|9NFbSbxꪫ@*!KE#"Q[;s34nMɎ^MuI ; "?[ c)moRCi6Lv5.='6S KVF6:joNG)S2H5ɽUgY#ZI M#YW/ \ntjOjڲ\M.&^12<}7ѴyֈOX?tYo9ܭȯuYoQj6qɂ3D~ez];g9m:r:wwqU?uW>;fOF$ J0;}VsZ()hl#92YTF@9 bR3 PnW]cIŵ+Esƹ*3x-$?z:NٓW9-qN.WeHɑfl=0]]ز$y85[W 345G)very.O.v^j=T#[&C(,G/5co,[WUXob< Urg70Y/xd:o5h2L ɨsyOe>_4bx󱦴f3l1;{]M@ʡ.+:vjєM+:4tWZx7B)PUZXjի6,' غ9̗-X]+*BE2'=km4{<*]-KoYvY|=k 5pѯťɶ]D7+RR]uE܋̬b!vd0+\Z3reӝT u[I;|8 >5Kh. 2MnvӶoh)Cx xjg4Wu$kuK5lZyĴkZzӮ`jزwGS7M6I^]eeٹYXDO6lNO^s3f^b3 fԻ4qXy]+ o!V= uPv/J Y&z&s7%uZNqֽ2rPsq pՐnhʺm:nTԫʸc7MnLPUv?A֩)꠮߹tkLJNP:Emmَe#5ŝڝ4cbJLYJtjV[u!sftoxLƧVnBq+hmWQe"X-nr"vr57sGTQequIΤG kZWtgvro:5zu;ú3 e-ý36Օ=J;)r(W wY`+c8V {tDYRB0wdŐZ|(lNez q[ON}w\"ÜJgIoRHm㻳/-[f 00{r𹫺4chk{3Z6fN*j5afKd1>{y)/ln;K 5u,s\ayUc U7[l.}]*IRKxҠ4, $nB&*[ו\Ut2sq R `6,FL6uv i@?a~YD8]vwl@׽=ȝhk0bE 82A0STJ Z RekJ&@qC{%ڟDc `6+ԌUE1䓊)"!8b祹x5w]̤X[ Yի-%m`ZR`mkXm"6vq 0F%NA%I8@hţ5U8m|Ҹ )28X/j~n61Zk~ٝT{ols_W;`I^ef/n~o\ {"#5( ]'[;  @J O0h_@uV=~/Ď߱wWekT[nQ׋Pa1pDžy 㷅:bs{7WM]~)ݺ{y.YCfb=HI$PH?nfGQ[˟8U$@QR;Y6@*S Q^i Ww{uC e|z (rM~9+OmlYshәa2o0*8c~vX4>Z3N9 PBUuȺs\nWu˷yPQ#^͸ߍ}"Uo5O7V/:tjěw\NGO=1WVsw]v4v.`0 _J]AP!WO"~_\wyys佒ퟎ%շfq>]Gs^9߷v]3ײ/Csoe_a0ϫn_ߌ7~=׽i>{v5q:xăaq;G~uO<'&/ן9bÕro-M:b]d;nOk.nXjo0G;@Ĕ(Jka _q4=ϳC3;r- {u:ݟU5vtzwVv"@.'. Տ,zITA8^եzgzg5ϕ6[xe\ۖ@=D{f8lx7\@X>\[fjN0WL9`/m^R2E&@ā6X䞸󜶕㌷wqeG9)ߖM//!yf ?q~TXE!R 3LX0o|O`'t6&H~f+wy00,D$ef&L)*јɴD|nr>[/-kٿG?@oͶ*9dxD=rI$`]tܿ 9;f\q q;v;x@Y2Md>pjU (}PԀf@#_O׏8oQ+\uw-Tm<*jH l2͵~8}\~qҠݩ%Krȁ?X}w *kbh&!۞%rKJ4h1$ 3JJTbɒȽ2KCޥg=ss/z|}X9w-jFޥoWgy|'~7.9@=1'Aݷ,q\H I$©+>#zZeAʤ%'FLv;H##!!T Ԩ~{v i$^ޒN&g{9"ӗqˇ׌mX099O'ZeI8EHZu8`4-%UTT ea8wǓ\תoy?s#vюMz]z)p{w[e奉BG1a)ۛOOf1FQ<%N*r2>?^&fW:}#GSpVgtI:~Y7M; NEA@*<\\SJ'Tf4iUI޹sߤƞ{;2/ዓcpA ;7 ,E||<1~iVގK\ݺ~zw.6 -@+*ufOP*4q} 4?~:TMpϦYP'y|jx,Ě{t^ .Ė\Y(3%oݾ5rAǯG1xN:ȎA'w!_o:F '<~{-OL>>1 -L?9Zx8|*"s,'~]l9{Yƫ!eвUwUU^ҕf#*Vfjt;ioa[hQǡ&WU|8Pƻ,s82mZ,s.a3YͧZ{, {Z|p;̳׹Vh=gzvmme2۽ytnƂ39Xޗ|H̾[4eYby%-ե׵mV> ۼdviNws*LrRTrei7Z>[\j?kăz--Gw؊O"uRͱJ`2>f<󶶅Xк}]%Q%Ԗ^ t;6[zi[ExNXʯgrn@s5L{Z;b!|/& c.geپǜ~o\ҹzI2~6gٟP'{F8Jز[޲me/s.Sα>ّ x)μ`c7$**e?,̰%ݛ ~M>gľ{ֲaqo n7pUB~}W]u|81wン>=ǖWrVJt=oߍ8GoZu"ǭm;愯?O9;_ZJY pJJ_`K1=16] sWo3-?/;{XFOwyOpOMߚ.wL~tecTY>ߋvX;?co|0+gjzQMV=|s:}]ݟro_l}9{>>?~{v,:Pu~_I3{:jX%8k~n\}jzP$d&ruwDIJ~Zdm>1K)MB GI1cH~<{ߏ}/VUi4T@*j[n1 ]t|Mt`:J^Ʃͽ O(4i+ͅ!5"tV`r_nP[G96!": Bu/%W:gsIy([xQXB*y7%dG׳a_o;myӍ>]=#7i}ojkjU%DE H% B |?(P\u(SJ_&0"U6Q )BWǼ~i<W-uK|x-} ?D(HH?-kT!wJZ]'J Bh-b+FRBFZ5mIPZTjEŵVZJV*qNՒ;tvvt)9AYҬ+JG;ұJyRc*gFӂbI.#dѼ$'wtĉ&(܍FtۏI %m$I;i(t4maIƒIGnnHdĔnI9mmH%r[aDbI&$ڍ͹q%s&qhMJ4IƶtBI26I-FI$#ukci9I$l6nG*H P2I$zz񬍓ut$HHLQ$䬖J7*. 1mF"aS-6B8#m-1dmIFnLe'\FmZH)ZIԒI.kkQ$*R6P$̍MF6ÓMDDЍTLFFQےI9:;ZUe6dLKJnH$D܍i'bX%scAF'JhdPK(P],LV їceO]hrwovvjEr$vH3^{QEwj7yHwv.J=c«RI"yo'G Cuުó\wY+wZI-nmx`vuUj$$]$#ɭ"$IfmJ椣mjΫ:LؕǶojfN4F:ˬRsr]u9>'BIfYo6ee]_[ChYX3R!#ֻ|;4$܇}I$Wr%UUYJ3p4ItUw #٘'z]ɷNu4-jK|y;"`'wwG9,I-J9LI,IF= Hi$hĺ7I'Msrg mǎI&g+oLp[5U]1`/q0;hWSUjS;5h7VyB݊LYW!uы[GT-`wWy'Wq$n`,XWHJ=` KQuJH3Ysc@TIr$7Ymw$=,~s8\i,m9%I2FDNR=HDmZIƓJXU s݅-x$_0/ NXbRX4GV4夡R*ZڳkBF<䓞viI%I$Wr'He[€lKK/%nՙuȓ^B#dzM$ҩj ͊H#kVu]PFk)vcVo+Q\6%PT5̒ux+$WwrT=gW+I%ݾ[]H$UXI$$hh){v$]݉xZ\ĔQɒlNLJ6mvЍݹr6m$m$oż7Wb_TuS'AI@5Ii؞.AVvQO Ç_Uv>>N+ҶN&ܻѼ {Ӡos$s 3Of-YډԹ=K*K"4a׼ rewF (wry$Yh$$( ]U %Ƿzkx5ogA~qr'5ڤ&j$$0˒6BIZ{I9m$w,<Ǣ w ^DBz/.LJQK^8 UKw\#-}W*Ȥ$u@*$I% K=˺YxRDH*1$ܱp+V嗚vB,=+p{mInJ 5mtc^(x-IiZxQxzYNW8]1immI&ڔ $m%޶vZAtTV ꠁCK}pSn+@P^@F/= ރ !~^xhwz/rӆp}ˑazRg3$`Xez3Ͷ$WHw]i.`v(åWEݷ@pWJԑ= 62m$y( UeWTREJ% 3kZhURnwEf m&cmLi$nImbtډ&f$mnF'f9 Lď j.F[aalL2l:#zzsa&|XWT2yp0bn1N WmN4Ήwws^ xg,;^!x(RʺKr+mPIqJxŤV{{yVXW{^ZZ4P۾%fZ[ēXI$rBw`7+49dQܓbV7(5M#tu}J1do[m#PN%$IRF$LDn6IFmKTm&jHtQaͶ4I&r$cIbIkmqIDxYfC#e$$m$ P)ˍ@tG{_2ґIrF-rII$[m݊9Umm$I#$Bmcӏi$v767m6$r$H$4 nHˤI $$YJ4IHmĢmpMU$$MM;6@So2F%gA:$Fܒ܄G=#m:j$T=̽Kk&6IJVe0F;ɏ KT[6km,LAlaQf1r&F'bNJ6Ē}$F9#m$$mTZR9#*XGY}}߆sMTTzM2!gPR2MJIۿW}ՙyFRIZ=pֺ뢫[㸹fmkǽK7i[rIn$7onjYVls!-\4GN̝&-43q12DbdlFaz06q/(GAKhCPۦq \cvu e-ArlXB6y=AT=!6L4epGAugSKa m86.l8n^9a,D+ |rwߟЁ&@q&! mZ49djHe  2H0eMI;Ca0 $YR =5 JǮ:Nj)Rʈ+}[^Z6"-j7_ZU5Ĕk~A*_pR\ [HjC*i\@58KHfaWӐ ^>Vٶߌ}{ή,D,DMDhøspʁκٔ(t5V#u 5UdN+2nҙ6{+nHee+U;|ü&2439ڝȴO|nִ*e*ZQ L]Emoֵwji7ŜYL* ُCua1D۩Nj\i>ѱ*b\hJ{ c}!xCEp\bAU8(qPoosN t2iJ0J1)n~rGI#-̒I6$JJ7$ɜV9ܾՓ R0ҖG'#O&vvl1rm2jprvi/*>K&J\POgҳTe x.%YqW|kZwS3U*P % @8(TH) 1ЊUמ3܇@׍wx0`ĦRE64 1!7Il}ffxuf|X|xsiTRU@1 0lH2e0,zf>2[T17I:MI "P'Bk&NUTԠ`J(h SrP &`\wٙI|L)OI7BLit&tIH&hYB_sWU1n3]r@wdNqSwyt: s0Z}^%}ﷵ ]sHdt4d @ ={\c& W HIAyQwkӉW;Ia"n&DDPT["$2555e<_B| KͶ}v?ef$&jkm$֔ԓmBGk\k?-IgͷMNn )c~;aGZ\mXR9KTEFt9V7[R|2% Yik2_ogj{?R-j!'WqӪwtnBeеKy}ٽk^XϹ^E331YKL 1ef B%RS x}ε:lQ*PJaTJ JH'CH.vMfgRbD lءaM[9DxҵƖib6nHw mt=GHbqډ!7X¡n5+*|,AO 4kSZU4:`,T^5^KXoWWb0fVW^*lve3H>/KewYthhBBCm6̌';^Zrs2:RT`⢓4!M!&P o{}rc%^i:T&$NPC@4}why64RS HYe4؅X6faX3r08F  `u3.s5&I  j7w>{q=#׍h&ڗ6ivaLu:nM7CCin_s_}k${ڈНu@f\tܓ;w﷙o>B}{EcICAl6.b* 8)JU@~wkMht&im6=llm " ]S{8@IZ,,)K RTZֵXkWkZhޤ$T\bLդg 98w:qy#cwpɗpp i34ұ+_UU*Gzַ}׮yqO~OIp$C&%#xZR֒[t/_7;s9IEO`;893Cv̝|}[ƶEVQ( T!PUo{7w@ tNʯWd _?`C9$"wJu:ֵY mɢ2R"zFg>DU=*iUPTlUJig;''Tt%}{~EwH4cdI$ZJ(R~~}ߵz^y̧j,HwV{tU_|y'-AV*iI;xz&RH Ϋg9|&J4Zuj vrd{78IzzH l wmHmI6}$zm$h"goWtPJNm$5cnK wWs2qKp?﷽kO|ﴚ`U'M*HԦY 6P8ТmZm#V':ґJQZʓxm&Fh$[7Fq~.mh~ڒ'rxK٧}],YaSw)W࣬8 QW'Vq8tQZL=' ~ݟ (9M2 &5i"b!DU4]uNԴ=  Iᄉli!Y U w{=vڥTI#=lyDdDNk}W0tVo#g V\($"+VA/x[9}vf|x{rIk󇇻{ڤ][<|W" 9ozֹ Xα ŐD$'}{ZֵuT0T5O'>3v)ozݱrD6ͷ&,Gsm9h"YZII.I$kcrKI%SEܝ}X7Fʼv13!>SL\ `7~jR]R߆ ˤoz}α]vY'+zߛD=uUT޽yoZvKj wUBxǎZֻ^sք gYyj%]U B:3|ߓ'dߏ'|yPwE7Ǽx{ϻI_ M^8; $B5I3$J}޵o~iѬ iXbCT"J_k_kyTD<6Sǯ>[֣u%#:m'};oRI$mOt266ۓ̪IEܴF޸$1g(Lc)A;Zu.fHٽm}^Uؿ>}mbW7rU4~yUSTHR k G\:5j*=s{33{I|"L UϾf}g;_&)kb-#jtUH=/Y2)U*nI/g$L&㷳_fޗ%LW 'ks')ёB>($rN\ NC~A34HhZЁ49 D HSjѡL$CVD/N!.e0eMI<6"EXe Q+,`PbIOamMƽUb:J%dY d@ Z<*/xj]uLԾe;wYINm$IHçtA!F^F($"ԕmm֥䍰J6IԒQq)&I$KR6 (=rb]%).I$II'I6taIFI2D5HyerLRL#mlҍ$I$uoIN#m$&tm9D$|QTM [&$IF-hT% 9$MӉ I#[쭻ݑ$I$G Q\mi+I*|mov1&mI0ȖY!Ns[v(’-Τ$L6a6L\+'7yop;]>xoRkm:Zs)K1"ɉ%+syi%dbD 6k-%o[o[&!pޒiII'KݖR\mTĔJFjSG ƹEV-|nTI#6ۦͨ7ve5lB f.ǮY; "\bvuǽ.ճ3zIu/fqnיv"U!)f#9/UwyV+\_Qbb/sSvcݘW>_ͫ萩fuRno fŬe"< ]3e]x㮰i{ _U/v\"iH2+vC }R ZjeOoQٿWagp\#R'W 'LCFT¦:P66+=;4 TwH qqv48U*i=lonw5l躖meA;˺ [%I핃C4:U#vpۿsmw-k'/rT[._$*il`2) oȫJRCHR{ܜg l;;-!BE|<~3ޟWwd߼|۟}wt5UXr@Կa籪|ozs[I I$-$4o~K9+17n6,zNG)>'WY+=cw`fm6q϶&<Ύ\?S \5N*(Pw";b˿u^f~PTۈȒI(|dwz;tJ~3ޡVk;E{{ _K9z RE12A>)`DљRl`( Qky5|wk3))&QV}l[ Bz|#"C9}޵s{`U,뮺Ys[ `QL֨>PޟJכUVے).I$܉xZq$vjO "Iph@$·yIQ}҅_jk-P"m:VRW"]P\T>3{߸d9{ɵnж j'Cz_^f{3>_*b=4b^Jwڰ!(!mv}Ξ7RQFFHe|ߨxU}rkobJP Jwf{[W̥"x* B]s׳=`"]HȌ;95|AF@cm"i\Oh0]WA rrAr2K3`qJϔJI$KRXR4{?ODU$\mm&E%u]@։(]_,Ƴxޏoret2\{%\EQ7G5~ L.H#1bơoo03Q%MOE0 Wy^^GY{ԹsZʤh s9wR |Q-j*FU{.}in~aoןj"W@ ^ᕕ't$וw̫czggӤ %4R@ Wks{޻$M?uwĴ-&PKzω ǤH,Pߗ*"T{3 BPd`̨.uj Zg }Ȟ1̒I)%6"wo5Y-Q'%i/zø6*_Gӫ}2nΝ4']ث6}lfI0/Qp5Z/6pt?g8Nu_oiZ5)6 e,&Bt>{}ߵO:F;ۺKTJ*{^'HH[lq**>}c;x4B!"PzSK\絀 U(W|$7s+HYi)miT{sUYoO>UR)QJ9@_k1;<Ѯ[٠Ґ[JM!~smIױvm!X B. g /E `+7SZ'`|:~9Ϟsқi(ݨIbbG!1$rNO'O=IjMhᣳȫMY>--օRzU,\yX>aP9=o{CׁKT}S1MUpcRCg/_h~@M}?|lxB%8:TĆQyy~JR{[B0QI.u{QW{+&PAMFP*}skZVk< f={<}^_oh 6{u?6[m`2L$ܑGgoltpG$dIKHB9ppMA:n8]:-8Ӈ;uW^LwßKC_^#Ó-]Y]wf˶Λ>+I;x0!R)4s}o.C16%J {1hyϏ5ۜ߷mݴ|sܒ6s>kWξI$$%1#']( b(rQ$%1zXv2mK`֐BDIVHF%AFcSFF,##dvOdo;C1ٶe)+ JJR@:lht!P )j6l %t6DMVSQQݙ(2W2L$ٝ,TͶ -܍jIlQP]#܌MMmm䑥ZQ$I$$IiT7$mD[HHI:I$ʒI$Tm'I1$q%՘Imے mԓdN$ỳlMMnwo6k$I7$sI)i-6l"mǭ!mҢKx2IIlےHm{1u] $,6)iI\[N.Ni$ى-H'Q.Gy"]r@)$$G_a16ttQH%zM5-$`C\Z1.Ql7iAƒ癍JM%'Ijl$Nnʨۖ4}m{I%'ZF%q1bVr! LnMK>lX\RI%@Haʦ$KFݤI-Au.H${ S۵2m1U&}"iZgI;OKӾUSQpkඍWs* vjgh멸kqȻk} Utlm8 ZT˩AUKqb=:6ԩ;aݔ)nr.B]|BT]:rz{/{B^"/%S#NkK:Ls5Dt7фZ܂"e^BG\)rl0d 00vttѓxNLtR8ni7T7l٤M'CGG &1_X1C`d&7q21!zCƮsNI֍۷-&:_{־( w27s ȯ"젓#L*[2SdTk6hBo0:"!k0 Jb.fV;CB@hg-ͼbe̅<꜉M9DqrfyHc@wW N,bP6ۑϟ?>s0@}u(4/wo~n|m$PUU) e6غ C j 1@BE9aMM<8jf} F܍щ%1FFBw2}-j} 1DZIFov83m33= 6ˬWחl|;yW3UomϷS[/K?M(i*Zn:MVKTAR~zּOI(oc3 ?O4[W }!}=O$+?zV[q$$ gs\)TbMЫf]LJMCICTӥ/m{#jW:ĬgC5Q ; 1j=,%,$e4iLmm$BPG_>JRsH"I:eq$S_2h?.c G?}y3<< WN{˱_ޙmU@]yԶtgNsu35?,_ﭚ=vCzᄍ=w;r=8\UP{fg,9i5M*޾%+x֥RK_Սc,-nnUQHĮ%PJ6S=sW^JTHCkT%%6{ߵo} EΊ B`JZ;緽}jWH9U|I(MSi`߼^yZ;]8JFRK) w3hDKﲪJ01B }ٟo=]VM$FmkQjKom6i!Gv6hz{{(el)*`+ %ăH$$@;*8;02hr_!={{vy(L̪ʹhV*"ǘ&p孼YxQqsf.А8 e%ۮ( P[Ǐyuʼ")Bwo{? ߼T(_?I?@ dz)BI{ΥzyST UUT2|14RiI{1biڴz_f&qmQe%PkW}$' /.}sZxNc3%Z8I@Xw׷y'rRZ.&{{Hvv =WyH220 zyĸ Bt`f{660vlN[)Q$6lm%G'IJ1sͲL5mI&۶K;ba^_vcxQ2Vja7Ln{8t~,~xue inFD}w~JGBH,5lu)wɰi$4tmwC?65M 6%T=kW=ܲHI 6 6UD}+;}>*ǨxnHեPEo{'GWvwX]u&gKT1 I|=g)٫W@$I`(z6L_xf;쪪ʯ{=Ͽ7$I$C%ݤIjJIͶQC~WΞrKmTmBP2(VzC ^@!|N՜6 r4[<޳#s7,| "+wrʺφx&w{7)uN__ϓwn}k}>O_T(Meo" 4ڶTBp;wZ- ( 4Sk )>;bit&AH׽M64ish}QNw5RC9{j |Rm9/ٝ'|5J .m%m`z??~L8HFnmjK#nN݃5&HSl4L \[s 0 v.p)3Jtgȭ׽F:/#=f=p~Vc[2ֲޫeƖfd{a ic@D}wE7>4Yw@X?#K`޷~Uo:2M( wu^=R#}kZ}bsfAr(o]߽kZ׻.zh -)@~{Zd 7?w^K&*@;5ԍ<Ԁs諾f*"P@r(*w}3Пo7wl6kQ>B$ڍd5Bl6Y/vQ VLWPUҧU|ַ,ì)( ٍ9TǞe=g 돊Ju~]Aq+e>YJ$̚RqI {ֵ ;rU 9HJ(wfozO~ģ@dy&euM@`A6)_(EG^M݉Su5|kE&Ēm$m {66$$&I$I$odI#aqIrI'6񴦥d5kbS[vo%GJؒ䜒Nn֥sR[om$Qܒ6[mIG$THʢI$[Ēzl>n6I0E$"{8pI6IDH[n0I)$IR6IF΋gEKXJ#D[TMERFivڅiGJI#mѪ6܆NtI$m%8$pm"NrI#$fLmrTqzBfPu$2Z[sdhI))%望 GU"a[rIl6)(QRNnʲbrI:I6I$\zl6‘RbX%qڣ-bI6).lmU '7$%# њjIm%dT$i$L?agm{ wn^ڡDPP cmā6uClXhЄHuo7Ix .H.:wsu4Z6\6 T*lYܤD/ 2T!ID^8 j8:M$Ryk"iǯgTB!j H7ؽ v"+4}[@8mNA]uWʷDkO#+)ұ6XP@Q0j9oЍ6pCN1 V ;4uxp4B 8zё&'lUlh8il(aӶ쭑i6幮DއIR=>|@`ǐhbsiEPLVuZ*=D1`)z @wԐEWLșIЁ ICMD2\iyF~2 9[gur-Qu#-yT^>:j=}y;vF吻Õ\h+`5)=RAsso{frP꾥|y_&]P*_@رUDxZVU[S*uRv|q w AsJakQl"1Hbف{ۊ_-wCl X&g7ZlݼNig{JNxܾ齹Cr]C~sڢ3GS*fHcy=&X>Z|}{"6yU[74,-Ǹc]fvZ[q,m7]Z8.W'#cue!3{etR"z-eW/uz_c|}|K]g~"2'&ldCUWJݮ>տgn[bW:ꍍKM2uv-W{xo+6K<ݼТf'h`P}B꯭kBG[DQ$9$rQȉnt %m~$|I此jh9([Q(50~ϣ"zG_~o93cS=竤uf^1-^wA2q&0jRH}}sZU.jkf깩{Y7rVQS`^db2u\}o{ߨo @9oֵJZmYb ~=fv#sӽ<;ޱ+`j$R{{^rN7"3Z=N.{_խ-썶nI$.TLQrI$iUBI #+T.JzK$Tx?*ձ_ g >w1Ŏ繉ZN ^'k\2Ke "tX^foWV߲pW{|ݥȀJ>}*/H`DKƻ~tS#*uaФr w;{޵5RB!zTR$T>~׽_HH DH wf]543 -Xs{/GRR#>TRH}Z׸ժwI )s{K0U[x__W7$0ܑ2$mowwbI,Emͥm|ݛ)3`PL.xk}_5^v _izm-:Ltq6oW!b;~1+쳝|=ݖWH'g'O]R's߻o{ OvyHJ@$R rUHK~ֵ+j0H~{\pqs|=kZT0BNqy{ZVzJ$*qDH'=wʫH *)Iϻ߽fm3 P[zo[\6SB$$sDPĊ*{{ZֽIKWrۖ;E)EJ߳|I+6R9RI$Nޥ $1RIGmG'6AXI#c̻|} +^/ٞdb;:x16Jl9_M VjA#/"fC'$}|Oڢ$Tq{;K}7Gur q&7*@=k>W}k7h% $⦓~u׽"X;kf+gyQ lmli=_{fVgJK>߶b%V*n`^;]嵆sڿE+ rHw{﷭k\YHKJWh !);wwrkKjZ.nO_7GOpwy"'Vu h^*(^EVeXN)s+̴8 3ǵWH_Y sԗI!:M%R@ 4;5{;{yv UZp'mh"'9#rB6ۍI|l|I#{}[{XP.c=\i$$xgҐ `~_?Ӧ?Jv}HխfWHjݭ.1bI(⢔*)I'~u~TޔO#0p9 w}{RZҖ>@(z~KyVf!Q@Ewgz˶QEPP啯Ok?_{uG#m{)rHbI"=$I2$i%]ǹW;?˜wfk4kfuYt)vwDr@b ?Ք}_3Ss4.Po[ݟUQ;k{QTT\mi1+(ﯻֿ}]$ $TwkYO$ùMd' r'w߯MIDkzTxHs|(>s~]W'],cn԰=k{/rfQ$P5wzwحUUUv*?wC_}ewFP!U@PʺY}/#3*Vi$5E)R\|ҧݤ@{7 |~JUi-!l"! joo{7M'K`&jw浯-Riٜquy8|9oSI7w`1"wg}JcH"܄pE9WHT,A5TkY7jU U_޿زO'$m܂I$=JbL&rHU$DvC}$0j31Lܶ%bF<{W%TGm(:M;II琈IJ⿖^iv;Ugq59FhS}_n^; 5={3{9^L {o]9:4S}҉ZU%H{wo\~\c+ͿДIϷEbUZR(9_{5sxT$'K}#Hln`@޵e.vkc! Iwu봵O]ģE1s\罛bݥ}򢔀"MoW浛~B/{#Ji?{$I)$If1([mGʹndsfےG*F7 {n~HV:svm-67٢8Lr(#ȕOzHv@wb9yzȾw皚-Oٰbڍ;.}Kzww oZyѢcGo(R .kZ~vQ1)5~gZ72E]i!77sz̾Z(\&ksȊݬrI9 yks1.^Rs{W.aB"@(R}{|b;՘RK6@n(P﫾gwMJm#̖ Y3 tQ7Пɷ_|i%6VRMdbUϘ#>6Ie:9zяFu k+zC>}wzsbE$)^;7grgukk{Κr G{{3z߽W+&Pjュs\+;Wi@IsBIʭi}k4& IHsۿwf\`\C V{37sKsR`EG9}]k/}'xueW+J/+ϣ43 Qt=&K.߳3YΗKիP{9%MwYEeRXRUUJI${ٝUgQ%ִsﯟsqk|R O{ww}U4I}\8\4# H 5 @ G$u{s׮k0Ekz&ƀ@G9g7}Msҽ]X{߿^wFm%$Hq5G IwH sd BK mB'(rE Le4/0A FcZ֣ @I?嶞QcRzڽRlݸX4w<-I2&i( Jm%ơ%,EV܎HKm#&BQm+JG,J7:I6I&$$SmӒI6`$QI(R%Lmq,I-mm $I(RI$0HmNFiu$ʚa&M{TF܆$RR8$'qLZzģĒԓ{$$7M$ %I$rvhIE$6F%иI4I&٪GVErMwsg$%ԗ$ƹ$iR E DI.6[e;[Ԗt1m=/Lh#$LRD% Yq&ܒFoWi8=y}|ɍehƚ7mmhQ66ۍ66}Ҵ._$q#͉IrI(I#II #W\J2ے"RJFmNd86 o9tRiGMcR-ڻub'9]P.͘խ Qpp;YQ}m;սnUB!:ƔDє2N|E8z CK:XLAZEX߅-ٙ,.HN]ёg9;N˅;S$\mSD]VmUڧ#(HhUց@8t^puQ<4)[i`0a6\RNpf]4 뮺ٜtctg %t:,O@4'~7 ~zOI!C +XtGEZMNv@6:#L] ^"@_gҾ|r, wm%Eo|q1VD ]J"DL8rtE $WAIT56[-ΛC[v! nØXBG(qQ5U/9׾_ka92Rxu9k+,Soym8"޼7pwd`ٗ\N&ӽTd(UvjzH[I-&IzrXnl@xM묵m-*ɋTWn H[p8*X=[+l9JmO5VuH^7y껕m힮7,G|*pr-;w4>dX+;mҏ\_t_ޔU _#k9>Ygo*W; ̇^|r‡wcN wcO*S/Wڭ"fb :unʕ:ˊe3q"9 B.5RI&$d\IFmܴjFܑɲOӣa|OK3V?7ybV?:eEiyp eSWw~Q c؇HMA)T9Ax wvVZ ],o_`_*D ;}>`|Q@B9;}C,Tj"[>75tV4Bsļj {}﻾s󼞮wv  ;[9"~zZޖЧW_ʚq,V H}-' ]OwַvLI/:*TI$w@KP% dI%$FM!)ͬ> 鿗TT?.o Mm30􉄣W[YZv9 ̶V2j"N^͡v6I zܽ_m%{0Ґ=y޹#`wg{k[־z؝G}Pq}kRUIߧTwRHRI;kYn֛ZH(e3\5}Sӡ~{7s}Tyo}z_kn̊=j;裎 KIm"nے6JbI51(mrmH$:6^bcY-}]`xô=S]o=c"#%NNw#ûW=m(ұ~]]ʡ쳸o/K}Ē׫jﺅP Xe^1O%?~ 壅 #k}oU[썸!kֹJn\ym;{4fHBIW3o[|w3"Bk5杒{*'i%I:BֵkZ]8 @owsoZQH~U,K ` k57ޝ嫾8֣mNIDbzwgRJT St#&)X!᧮Nocc|G׈Ch2<* !ät0@u%y[x,p7Nj@`-> 6'n\]ִZ{o@;oZܻSCB2I/}TcK喒$@"EHR Ͻ~}!)9'{}39u<*Zxz}#W]@Z浓m =}k|w~YX<;k\֯y}\ʭg%!} !+{~5kB8j´&@rV{A$|$FJR&֓Lҍmm\{ުR#N1 ;::u++u J "dkeY[X7]^Y3٤byU1\EY׫ gQh.Qu&y_NJ{H"EMҌDw߻׿>k>R__|zu-i5$ U︅|9$9HJNyW.Y&%(D~fg:޸,@wf|J֕jՀ/滭gϹZz3޿}kyz#TR;ۼ־N&.6UK` &f AU%[i 9o9+!JT.R m"frޟ}^v vs{kzfKU"5skַWf*URT2H >zִyr.ŭ @s[w޽j5HJJ ےE"FGc%o[XQrda6]{U-*}P @!eʎWg.լA#}۾~r^̱;sZ (TRp(G{kz<؀y5݄(?-z=9sL3$$m{$vIGirLRF ?}}|> fvz{<y7?O7;Zh: 8NmlYɞ/?E=ٙ}W{ozԀ"DH{\WMͮ70/)3ֳʭ77t^GL@oZ9TkytBwȐ;;kZequ"jө K{{Y׌ ֖֩i}{ffbv" 3ֹf5n5~fzs1IKmI->нtxUI"$Im6Ԁwzz>GZ";i{ZKIi,JVJ UW\Xйk_;7px UD2fwXc}T%Tz߷}?RK RYw޻iUo7"g{f/SIWu _owkx0 =7{ھ浿f{׽f}ڷ*K#_? w%EH~{5B`TYB#gk[2%6(U |3*^o_$I anSfDLs/ib&6)Fѽ4)O2_ ~}|sПzONW>D~>fѬ'_(Kw?̮|Y7jRDsַ|W˺8 5 H* $3Zֹs~K@dHH;k[{IE܀RT糾w 9ュk͡ (kZRڻQ+-Z{}w=$$$;}([s37g E $s׭4:<^d@]@ ĮCD"&CH B9Љ;Hhf"`~6= A_ n=]UL$c6rjVzwģ[V Ui7Z- oH"T\!765oIÆfsox6DD=nJm$m16$$RI!mLA.LILQčvHJ7Z$6m1m6ƑRtr9Lg[nkk )&6I$#m8nI$I$Fkk 6I'[ KhIݹ"R)#m6oxܒtlmrI$I%$䕒dHC n -IbI mG1 Q 9\N%3u2[| I ѿsڅ.[O_٬k}P{$j9VĠ;nk}ս„籰cY [dz[XMgin&RuFn:DŽ]xvΚQF#oEP +PKUGu֨doN6ݡNハvlUs2"mGǎjPx7q]ۗ.(ok3<^Փݙڳshz5@"Md48lL{K\m̠4_WOw;㗗zMwv:Xs0`aKӎpfuf*ZfiEhwWaـZMidwz"Y˵mžɟܞ z\ǸCLUćc 򨪇:.N7D9"Eܩ4׻\~D_ [%EWcb6y1vtzKΫe.DŽAhَe]غt[j.JIrA$$R6mv޶G$樒b0Ei$$I1$Rwn~'c0^Uع@Xw0:7fz2k^GV+wY=- 5vdրlmk9$X35ޠT<$Su hٕT) I'{ֵw'zI@=]n\v;H)$k^wZַҜB{]93,=@R}s>X[ϯZ;䊐={9y?$r #3׬׼I7D@H{g}fcBCK^ "Bw'|\o9_9kU$)$mI%nFݶS%mI(PI/$Rڭe<㜱<_UOW.p%"a Q \UYZIg~WGsҶN92b;B36I js{5뛚&k\oNU;%P,BꐔR粒sw+4_!)=;~KrEWHϾ|\5+ozI).w^]k\룴q;ɗ!U7W`]$IY'¬?j6ѥQ܉$M 1F;6ww@DlN3*n﷢]jPp٧(Dɷ%'/!IxɢWW=U5gfq|~6W#VX+*I'{yT N{{/'\t]i_uٜޭ*UzDwΓjWkgE5ChtSs{[ίR߻Wqm;ֵxOZ P9so~ ;9o{ޞf-/oYr&UUU_(}̝i(䍶m܌5]2M E(ι.Fe*i(?H|Yp(}xY9QAMic%!t@1P(("ߍ^'/zk׾=uxM>%^5rkk{Zt$7sk3ĴB} sXbH9'u{^s[m8$@{ZuUM0 9zo/`{[uyf5k~i|H+9,R}o{%\I{|ֵ뜍2uRXsѴգ&I-{"jRh9.bWt%Dy:wih}/7j1}kW( ϶jkXOm^s>wv{-ID꫺{|i6;Q@^޳5N"̼3{*+*քB"rIe{.UYr$ȱ}}<ԋjIkZ&meZ0;E' C|K-` }TR77wzڻq m3%~mmmm[m$).I#$I$[9ӯCR7EFOg/P'NmKDzپp1t&I#(R ʽɻx["nRBZznՇzXْq=3(o{jjo̭kg7k[֪$ͦ@ {ykS{iI*U@ @9uo';OyC!HH7;y.+S9o33g$=EH5ڒK; oz޳3yΪinVqe" _s5mHd$I&(#m); ĒVԒ$mI,+;g'~w}::*'l:y]âp_O,O_oLޗ d=qn)vwW""޵?'Υۿ}yWI.ӾŻ{zW5vԊht_3nV-8R({7^yȮs^kz{^j+PꪪEe0o&z{'*\Y`{ov#1mxm鶒 I$x׉)ВrKITmz7#&#}X C>^\.ҴBa_>m}m>~ys\\~g u{F&k_|E35zͧt E) ;ֵok}j)T%QI0 \0b)d7! eP 1:jyƭ$ӜHvʽcƱ)TnI$ :R>mi*J6r6$8qIm$)-ܑ͒I#dmI&I)Xm6aIID$mm.6fI&I$aIFۑIjKmmQF%%m9$mI͍ڍY$tǑ+IFzwr֫e$=ĘR\GͼIHzҘoomI$:ML$rJ4龙#mm '_n(JwsH(aۛs$DmW_A)M] n4XN62"-"60|ٴIЋymm mD(MۅQ$ܙ$d& ^a$FI$$I&8mM$iԣƎ1jej4ZImcm%j$FۑIq$zBj5ctZXrqLIi.fqi.St_z U,4)vrU6AW|]`+nl&vu{P64Syxw^o~isTWs~0{x=WWg{1Z&MLztNtG(&mbIa_wN{W6,o@nu0U]*g`z8[lB$.w@P߼ts;8iAAAI/s$^&8Кr'K:Nun@ Lm/'PX9D7DJ?{Fu4ǦpcN:Lto4:W {QIMh`pmlun:ssC!a"7T`^wʣ-,w:H1"FB! ^\MA) RLaC81,+⾯EXm PyRQYh3D7qۗ'uYZ,k]V.*ѴʽX)s3+o /j 59}r*px%E[Zw;vPx]tjhagptSa).; \T χ+܇>%:Y޽4jkqEh[ Ә3񩽶zz[-Wr˹چ:WvAnHf>c(P+n{I>گ12.ʱtq^A][{Wc nCtuZ,u ZZ|Sӵ~|Ƨvgu X{ $ҋf;ٚz~洠d]z?N&H$rH#mq1#5(1b2+]$]aw ~k] dްY9uWq1zrG.S`;1Xqk7B gnV'V5n^fMݮcL@UrR%K[n$h |䗝29ELf}TIUsuQw䊐@f{s`H̿o}]H^+c&E|3tJQV@VV7֤5&XPz }.U=9s{IrTmہ)!n6d={.I*F2{ZzvZ!V%ߴߐ~w}\W[5|^g@.d jq5/re58$﻾fw]sw[6АjXMФ IruX'PDH{www(|U g|rg{/2EBVX?~v$RE%IE̙ȒĒ֔I$,]tRImmOP`JDﳬ˝]^$R(=u!(^c=_/+W< .i71m4&H 5#sswg~O{˻ m Bu;i^+ǎ6zkZ7F!mzHTOiUn:o׸2:~!',P9Tʪ&ȱ ^5H|ViU{w.{z^dMjm;,~Y$*Ddim[d\b$lM!#$&`heW}G9 +g:{6˽[k{٥?xG 6Zc7zov5U?/N33;͗;*Bdw _}$4< 9݈@bX>X[@+ $"36ss3ZƼ+n 2H$<( ?RAIoy5ڑ{%eID vA%6ӶJD۟+UQ fXlg%aև)^ܯ|f=W;f#@-/U%ZKW/9k3=){* !$$Wg5k@,Aܷ K"qɻ'mꦸuݪ'wYJIt͙*0(9-Ϸw{@Oo$I&$6n6KIrIm7$MmͶ"B!;ugz3FY8xca?d0Ӿۛzc<g{t\r Hw@7|!B KPV+YQjNww}>vmO& |=w 'W>vz0 >C8zwwK{:C$$X6չA0LDFꀢ0o8+Tƌ1(7b'S( C2I NEC+2M:yHH \%[XAZSYһgyk3*m_=nے(]%wgnGͶۑ$%MA$r9Q-ܒI$m$(I$$$mmnI p6m)$$.I&$$VbĒmFےөnYgS8pUY˝*sVf>Zⷤ==.A=}Z[%uVѫk8eۗMVu^櫪dmn\cc.l+wѕo Qƾ$PzѴ* 'ӻw~^wZݪzs+ s섒fx{u};s웺8t.pר,mXw?r߆A\ӸƗ^j79zǯrw~qHq&XogI2I.*J$+We$$﮽xh]E7<^~v2=u |$Ԡ9|x y:9LIcav6]wh_}zY?,Qm $I i4m$4bXS$eK}$rI#'w2yVEi5^+\r6Ȼ (ug֌x;W}>$y<2N($-=j3u+OG'vR[ܚ䓤I$mi([HIEƎtoo"KR4%IIM=AR TP.;}{Ş4Ό e&|N8q}P߶}w~ }_ |0pљ݁DWt7|Œ{Nz G˒C 9I"_xx<{.m\^/zǰ"W($䁾"2Xqĉ$ }_|A@ gZմ9^FR2/ѷII9$JI"I$F]dR-NMk"s'I:uI'H5T,z{=/}C`/{Wg75_wקq/MEݹݼNԷ?,H}B O}wnnx$_յ}"s1bBEZAErIq$o>ߜ,̟ }.q]Iuo?+ImmdKK$JҋQ-NLx|Vϕjgni:M)NxTҷ5G󪬽]36ãU{D卬%DOb+WP9#d=V%Į(%ӝ%x]Ue~)%I߇r$IUoHĭP#y$O]e]{'ZoJ1#:_x _/*$Lm inIsƉi,f(mͻI%>KYg&/s@ 5&ǫ用B@+~KKo~C<=  }wooz.D$ s,&owK{mI opZ $Wf{Y9{5w4l@ S{UzţG6!С^qq01# iXe[VghRwi(Ħű+IJe7׿o!LZ>>?bCI3z=P6LzMh&G!YZ<@eQMȓe!]4CDiI4Lq=2K#t:B(փ[HZvPPNXIa`*44t(dK 4e125Eba5bu, B`EĶ M5rNqUƜ`h24a(\*C Ԭ+$[( 9+563$-RPd-UH,!ѼM@#nRqVXh4&ju1 !$L\Pw:ć"P]"74PnW#i y 1s7۵%jp[g:X7APoÐ;o85Dfx.rݺZTPpŔեJ pi$mh4@MJhi@S8Pbpv`m3FrղPTK,(fav%[.fQXHVZ]&%a 4Xj^  + 7V1.e%Y+5nV`NRV8Յ`2a`R6)ÂҸrpY06u^Æ޸k%6CA%.RLF8iv2dL%GINM%1#,1 h5D-i)kcn5ވA0a% 0R^7%ypk Icm5+okieΓ6ki5r6kEX[RݶXYC(`⥄xǚ ZaaiT0p Iq`Rn2PKKe1%HUdŰ˃Ň eqEa7+C(D10^wsfm0Yd`P:H0XQIoNRZSAe B `WyD#dM%#c;1&1 M.QL,UiPQJ,f 4Q4p6 heHG#;LJyd#&\44l8V ,(K 䲬J%Zk{A B65tiĴppe0Xn 7qGtMB0ۊH`aC lql)3N#;6`- U3 T` (,L05Ic 95e20d \22 UL$CKkzp@RPdN )&B8Ņ1E*fK%&MRP@p F@Yd0S!M),njɚh3pcNIl 0`N8i6``%0&i98$D ,նE%هUj8M91,6e$NK!!(!0W T EPDA 0;ັ=jD,UXZI[EQLdhaPl;8pdak R]jA*39 cCAnڰ)ݺ9(7eXFXx͖&B@aa`@Q3W+#em*IMY$YcQu1WI=Bڀ"V42RPi.evLfn-$hB/68abPBEa;(?Uʢ((((('%Uπ5TGkIe5DCJL *`myUq$DwB\ڹEc4hm1D$,rBM&Gqq 1T 10 *hM Z%W T1D0\TL0PI0S0SUpE0p L C1Er,PРT S D(QqS $D2J QD0D10P]H(H4K["&%JP P6ִlE@AFmcmm@m+iU\DDSpHj$4Pb#HbZ+r4J [&(FQ%*K&`1DQwvU2e5 ww]wrV)k:wVmr]9ַjէ']Μ;pqێq:w ໎]srw.㻐n:tV]swt9κspcmcmll`6@4;w&;p# nG9nkm;@ww;wsλwprH.wnw;#s;w.b]rq sw$]݉ڮwwsݛaCCm6Ƙusw;Μ\Ĝp]ȇSuwCrwr;sp0hE`6bvwswu9chlM6mw9wB۸s#;C.]ӻ;pwDD2QE1q`m-\E@h1`Ib 1EKE, ( LQAEbR4&A bXآc h &a1hfPFXX(`^nZ6HBQa&(4h(ňQQX )DAF4h,QPQQ$LM1 #hcb";!eY0hTbĻ+!w[L՚6,DT1rXZ#I-Qcb( Uf",a(بDDADEI(4%( V,bF,b b  `FV 4FA#bZuc#ED30'Wb10rKC pۥBNE&t )I"5L-3 ܭSqD[p !MpL1!<Β[r3 b]2C6uCT)V*LժڴF&Nv͊JwquXԫmVۆ$!swW:m Q5]j uĀڈKnUm]˓ h S hBi];C.2 2ַ.5\K[IĉMw]&$ں8D#2v;i5ZDev@r#fnRIγDa&DkS]+nK""(ʄI6l6#Ơ,Q`+ 6#0Vb6 V0m`1 VZ DV-@0@U-`DqRFbjZƬkjɵv@a ]E`P2@0UVZն[m@`-$*) *@ 2BBDI$BJ " B B BBM[`6TUfimJR[ij34Г0̂(1"H3"ɲkZY!&e6XI`fI)$J (ĴE]MUZslV&M̵ U()hZDo5 Q4̊IQ&55$Dh6fSl DȍV6!RcME(fĦ4XEѥY1liJ,d k&+S3MK&aMKLbƭbmm0I"̉lUcUF6֦4%JFfDV6%lTEd`TjKblcQhmͥLTYVi!TIkIK*`*K"5di)V5ŚMгRѰlcRPٕF(&*f5Mb2FR[ZiLʐFMFK1RhMZ-$la5d,ZMAjTi1&fض-cj@JfFSQ%3md4lQcE"bAEchѣF+[m_ 4LIf&(ȚfĄY&@L(#e MQ00f̐FKiS EbM 1H%BLf H4$LLIC H5 0ĆfH4cDf$ $3Rh2I$  6I(kA$h FeH0H0 J65dlȲL 2Da"$m\hd!LL&l&$`R41&0fIXh42BQ2%h1C! dđh̆i6S(JJT!A ,3 I@Yh$&%(1 2K1Ȣ`""YJHfFѶHTFh [F-hdآTƺXU\((6 kI&1QŊE BkIS2mdH%bj#lVъDZcF0!$"""HbL f$M ,H( @@$S|<9e>|i%絿)X{Iaj:Zry-MLpq"EWoK50SĊLtl1 :wPkF12'wj>w]? 28!8k{dل%VR@)vedf9\4ofAkt9zia)u>ӁL`D 8*TQT,#O氘3 GEC;?o\y5Fvyv_TTmfk:4߷qөڸ ң~Z`xAM;![EDH¿/7T N^iN0~菔C>>B;>6ba|B˰6˲[AdXFWa{$OHhDvaRZSA,>}v0(m@d< -)>u (=!Q+;8:N͜ F 4w*D!TtXP#gA.Cx8})>I,&{lgy߇ҫ@6G؋BkKIHof_y6`['(S ]/IaB an up1̤ IvrDĄJ_g]q@%bDo|!iT =E8*PFh%If 5f'~Y8 \wHBIgjG \d0E@<$6aPjPޢP1* ći"B~=O;8Bq_#_c}n%e!QQvTC*D 0{RQMMTY4HtC?O_)sIAI<9>'Hd !aqI]T'gȪ<=)2B@ͤ2 2Pc/SnMztܾ'x H;vXvQ6uA-s-Y.nm7u(vE 6 q)HT (;(qs?:eIyf;L9ϫ|4AoS}i'< R=" &ߨ'?dNǪ:~a |BBM>cIn<ߑČ!Uѵ\9ZD2ߡsz KU2bSҠLN\ڇOOo!g^jMOr˙WoANf" r&7u=I 6kNL2~kN㤎\QA ׃v{yWMueN.Ӡs~ j%:rUM]9 T(λ7G^߷w^D2zwkyŞמ4tAgjBAӋA),?AOE7@Vkbs]B0fPIW`ĹW&5wH@v5KHI$2e@Qg=^8~Qw7hiV2@0I5*2 %>#_ , 'OC~טsu|Zx]~<@=8tA08>a($&xyƿbL@~2 R%()oI?4M;6H0hHLbs pysQ|!??ܯGHujՓ=/ |7 (:4d0BMDS<2WvwIb=A-^[E+ *8B LKړg`i'o8T+:f{g!ul3;;Q#^.ʸ~8w8ߡ`1L|n#?#|M_0[y ؄]y;r~X}{PV˾$&BiBB & jV"T2{Ar))*5w O4_H.pPSlE)>pI7{O{S@Ā_ T@:{{{U?~>6 RM m3(-}3,ֵ[@~`0eD9CRᴴyèhO"ss1e݋;sLnngv.g :ݙtYӬ1ɦȬsy)i/ ;|{j !&* Wd8M:D( |hyn>}5T#P?v.m._{_BB|SF>7@G/3M@3^-3<};a"PC q'@MDNGЏc)8Huh'ǀ&/_*]WVK].xܞPMWxi3DоSSUtN `4MiJR?Um S*M"RF UNuҘ#rL< zH̰̱k|~OiLe kbAGuU+qtrHKH':eeK9?#.tG>nmΡD`pUK`XҐh4në[j-+k17$ PDMD?/՗We@M4 P8IÔi iE g}LE]@.P 8b@$K";̪@'7D>_{"1Q$'&R.@@HmgPqWU~:;mkDD5ԋQ4AވDǣå#~[5(\"c ,|<] S(HSTT%Xڻ'}_x$LdAUMzil {/`lp dw&\1LF[ϓAo'ׂTsGF>.lh{|[Uj>kua 8fkԓb6 ZqmCP0*!?kG1Yj 4l)x &ϵHnp2=NY_2 yRu_>0z`L?{;y=CYNNAPë }|s/?v/F#Z%3F h>^IZ5A:u%̓ |Ona; g/j*X,i($_|w?+$q _XOl AN?nҏ3#?Q.CPdȲ :*2w n3PPM6ٻT0 !t "CO?'pHב<1܂"| ?7AC8'IJO~nwT>t|ǻnd_ O 0V`T7eYLB",Dhpb?O4>SD=D3HJiw=ސAdTvGҍ~G/lt0SM`َNM64~VCf4Q96X7zgEF!= Qz<!ħGE IbQ>p\n?1S*Sɽn.͝scfP n_ξ3~aCb3i5_h"n[N\G k@ bi)IRZՆjݠmƋ%O#Ӱ"h}Ϲ $r4ƃѾ$o}/nfVxn͒6Ij`Kljoʜ9,Q @W~rM!܇|0G~/2)@ǒm. m"l?0B}@RRyZ~*8>fs!=zg0D=HY'a^Err!osHXD ̺a`&lsߔ^Ab4z,6'\Պ8꫊r jΓ=l\a;PPʚEыe|>bTAnxel崒K$fY3k!@H%8%ovL&: !r`ܼ?x|g`PN@xw|> H'ԏC~#@;y?w^{{a{a|2Pg_OC$s4/0 y)5=\+VCW, NU }fw|_6L$,тU3G'!Vt ԌipBׅaL8)8 I89=2o[ݩMG6to8C%}d*]24A9Og !'ޘCAZHg6='f^^!U?Ow%UZrPpLi+ۦ( &,I.0qv8!51]Z@KoA > z~_Pm .>D`IJ:%C|v ꘬ y42xPbVA+>˵š,;]@n JHiM t d 1d.tPVlV5o)W5fm})k*kW.KlJIIUG)M?U 9 LHT*6D%eN+v.5\N'OAGEMT8RL_|-Jo#;;A-PQRm.!1%^yHHw_]WqUAoERWt\x (1w-j8ͮ7 Pa0 :P @Sd*L |!;?yGg JL6( GAG;aK?fth6":O;@w<@]*c(/Ÿ uRWA-!GI)%Z!JC%L$)O)H`=@> QT'0.(ϒ@HȠp@5jzz{yN=hKHR?!<GG޷x @OARԞ׫sՍ4O=w<IH@ }tN〞{ao}&ܼih @SC'a>*F:"4c *>=^># P z.^ KLj⨟uUT#czTfDAǝY_5(P?w4 BP^_tGO.?v4{?3?dD06?ΛӠQD *A$ uW 5h%-9j;5vȂ28mfUS*(|uSˆzs`pͻhU0U_7y3~3;J9y>34YrseC<ɰZ L`!oA"c zRj:˒ /y:g9 @QQ"$d܀[ Hk`lIp)b}&Q#rX}rro`hwq kkxIA}_ :fkAJdf6 -4iZ(M&VYYp[ڢ53A >cgNh˛?(ʻ>+ JbB4[ܢ&N<| ο DOrTlotC@SǺp~q~u *fdO4Wb=2QAf&) xks4_!H"\ggf?f)vƺ-5 D!fSr&>dEdt}Pi[aV4)թ]]S'ӯ>e?$L&:4+E陞O_uw>_LqDqsȾ6{mdUޘ`.zR :Vc' +l3-Pd:۸ON<@v O f̾qޛTч:!iշ*ZDL3GDb_tX`|S{N`=q zp{ H@5=' y+`$`搱5:9C L$K |hƝҕw/6nR-<ĦʼsXD5cס@mEr6~ 6cOwzl G!Di; 6Q67Ѥ?2<CՁJcOw :4{i).˔PU=0$RQWrM!<˼5{%UUi'?CR}-'&5'TcB? vE;~G"P_OAwwUeJI>s~5O,$%n˲5E\ג+kE%fo&f6F7 fi;=`7sUC#*+rԤÐ&+b8P#Ӵ>cD'py$>ӫt`wFea={UGp b|!GX L@ήI>78's~?&}w!P~hrãϿT2OOag [sԘGS蟏1E@OSq8ҏU#(BCxG{Vd(< 0&x|ARwK5uzuro~#طg_tCMGA CymAA0>'!OSLڃ a Lr2aB]~r8"K4ז PB&.D"m߿P;UȈ& ?f溆(ϸЏjd71IqDPg fwECV uv=N͟ʠm| }?fz~2*CCLֹco#sIaUu/v|-i9`,d h]} >T~B X9E PZlvu|fh$!{IYh%72 s,%/QZXZ*٦OXpT˘X=0#^ fw(vnD(>RXiNv` ka8jTuK8'ô;V_-(a&c/\; Y){xOhW)r8Z£+]{mVZ¦LdnA}D7Dyς}_-#ma~ * `2)3X}rϣtےJn4'R^PR1h19Lr +10u&u ~ Z6_ސ4D|Rq7afBI6݉9 L׀s4'@_?e" (ϖ` 2j,X@`‚b`XJE` @D0 # @`A 0100b (`D0`7wA0dV ,@JDFX!P*lRMZѴ4ƠѢEm`֋Mbф֖KE6)mEh 1c(fch4&,J1E4TКPQci#`*#Rc"* )E 2MQAKbjQFFiEJh Iɍ6Mhؓc3bkf5,L%dj,Qɉ(fZCP͆lFETQ&4AlQR4lEmib4h1EiJ(T47Yƒ,̘Y"FXRRMhT! IE*DE&TEP4XH-%4Ml%PTE"hL(i(҉LF61c4(J(QH4bI T&H(Ѣ*RSM24‹ hhDbB%DQ`H!Il$T4EAh4ѴmiZ%Ih*Mj#h*#P4"TQchDT*PX6c4S l"ZKc`Ԙ-)cT%0ԖCPi-cF,e44*DTm2XF,%AEi 44QEZY3F63F)Q4(E!YZMFh45&h6FѴ͢Q*KAhlj-FѴi-1U(A%hZ6Ѵ"h ԊZ6%Ж,EKT%lcFК)4RIPMlm&XѣhKTE&62XFI4X)j Ef ,QbFlcAF%6,R4fQF66K,PmFbQ2Qd,Am,`(0 (1 KlAh0@yPb`` 60F10b`F#0@DT` -10 @:P b0b0ccT`@` `1@D  c0`  {ƃ@    `#wтQ   cj64c`0p +A5@ c` ``5` 1 m/80lA1( 1  0  ` ` 0000`` `@A@b1(J,j* R(0c*H%4iFDX(HZ-)Q1fZeMPEF&QaTRSPjjYE,Z(ҚBableFF jJc hcdŊjKE66Q ,lX4XhщAhI(ؤU6MF$Ҧ شm$hцlb* IEf,QF Zf5FRȤE5 Ɩ٣RFIh(TT4*QQQhʔچѱI ō%h55%2IQ*BE%26 AQEj1bѴj#h)TAhM؍jk,bSIc2ЖdZ-miAhFkV!T@hԥSFFѨ+le1dIi,b)hj&TdlcC6(360S6QRQ(EFţfDlc3%-S-6 T$lX)IRm2RfS3J4iHmPjMAFѴT5F3$"E%AE-Q4͌Z QfjBʆbƣhL1`QZ5h6H-1Fh1&[V&Ѵ$)ͤMF&-Ac5,Z5)ԚQiIM0Tmji6ٕ ll,6i41b KF&eRhjJ64hfc!b6HQlcc&hmEZ6i-FJLlfZ52hFjXK Ii6J**1VFQh͢*(͔ ѣdԙɨ5 i-**MhĖtCeh2BITE5%CQZ6jQhf4ETȱ@hjVmBm#4Ѱ`XE0D A en#F D @0PU,S,hI?|hU_Wv:)֬4NNU\5}].cc{o R˕u(p㞂l1}| +w׏ $+U*KsAq# n"DL:0b?'嚼B|iDzk-YX :vs f4h]U[ K~Cu) Veer08:V]do9.?a45=ftqSN8H?;A| _2Xї[#p#8G|W0G3kg # k 6 +UT4mW$~PAkkՃ{mp{=+x~qQl#u=9M|#+VYeߋ`Lg8oI\iB ~~M,ۀOP8]q1}ܶOdrlQsnB6=)Wԯzw}N8pD@9OYPF̀YlK P. @@Hdr$sŸ{bb f URD/24}X9c ށrV{}x8bb:05  D^~g{))HR>E!o?uyAT'E2:Sy2 pS#S<Q~=Su P{z_Nx_HeOMPkL{} bTb.!@}#{_wwĎdjm݌~b:ά_a?'VkQX fHMc)#]!EQ'Xʶ<i򶇈ʝa9mih `U>Td/xKG,(ucݴI6<(o(:蟭S!cSNlx ?0$|Oa~z<` fL6 -/EC7g ~|c[@LC/7-t@`*1SG&ɱ- SF.< ;*JFҧ`E -UX㣮:*󼽞/)^]yLf.d# #BG,AS|Ty "ILS (m4G$4`jZ ,ޯg?6G{׎|I>[AT>z~F  ('1)HAF yl##afڡ+D3F@ t,|x"4QH|?i )[FOw?@p9˜ aZS 32f:l3w|Nb߅z:=Ǩi}^6 V rfd0PcyJb;Fm؀R?O{WPh#@Ԕ5uݥe ap z crÃȔpb`|Q&Hɀ |W-5źk7jfErzESijD]EZJi Q3 FVC^jM$DW%4K22 Y]54[X6Z> %bEpKWq_hm#^*eA/<uSo@Ad4f]} :}h4M+ -/`͸~_9OS'$~!"pD<[J"S ܯ M4H}yww!@!HMPҴI2Ԟ| 74la!4LDI22Bd5cIȌI l`E`0r & Jb2D`Dᔨ"đ` b4W"Ka5PY(S4`hłߵY %^uYYQYgX.GNV K MI?5ObkkQb~Aؗ*/x":;A! Jtrp#7}c\;}\ ]o^OW9(h,h'&p摒Į7ADDr@.p iř bյPQ/;-&m_jkfݮsR%w6vjVq C@.ȁVpfb]FWHp"=y:}Yiltԑ w!%&䄠 HRҠҪ (*LثSm0U((Ȱ P!( 4(J  "")B!B$")B ªD**P-"L3H J"I4*- *A*!H"!2 ̠J n(eU*A( t硯sN2j)OZUڡ!n0)LhYyP/tRv3ytMXKMeE.*9G.%0yrDEXpGeb_|`VQUg*y{&͒CfY: ӧKXG]9C!Κg1W#@$"?`("cC .B>xxvS?09aNʟk [E=sZPoNL[tb2f~^8zo';jɊHa 43tBoWџp5<ڡk QKLyΎɲC .?Y0BԘ+ ^#'4Pz Ä A`0կ i4霡wX?Ju)}՛?I'1]G0#$;=ݞ<}OUw,"#H D(HI` F_za}y5uM1͍'Pk|(y>,G ٬(XuEQM3mhǤ­EXt={4>a>_AN|'9eÄ5=lbE>/ERzWdo(p[};]ǃ EPou{UѾ>P>= G *i^%D@0$vtٖ(sCx>1Uzq촍н?tuTz%ˮXn$HfjLQvv pٰtYNhGۺˠ*4E$Y62)>;&Lc5{dqVo? hv=CQKt7<8Lt{"7$V;y{I>=4_o3.K[gAh01lvJ)6O'aNa~ܕrnz𪎔KP?nk^Z9Q؂"TU^P3)PDph]LTŘ24Gv"dPmp6LޟTJa]' ;@>=‡DasHp`(_;y=kѬʨϙ\a{-\$GRD!;"   B|U%- %}CZ8),DK4 ,-%T)6 (K5n!.:=GAx]B>\ZQYٔ%$_ilk]u>\O"XMDYNb CCE0 EON㶸54?EHQpO d1yh4na3IH(%60cˣrA юF ! , [hYE(GSqE_<R$,!??t=9Ǵoܯi:m~Wx;>4؁$4 ;@B:)ޙ^ᜬeM(;8G) *aㆨA㒠UJ$?B*DT(xĤFl|P~MI[#؊ 3A  DM᛿ 4+sҳ{}灠Db8{ P z~K3$.Ypz*{gJ ( 5 B*Bԉ 8>(OJ ^j_!`M2"D>*}C{~W83Klh="E`n? Ui ߀+JUj̣d-* ]Ϲ=d>JDy/hL_/g}?Cu2#B3HC|3WBo!}o0UE;tܵ?gʀeM`haKĆts8g-xHDzY10 @ >ga,v;N T>w˱yNIKA؀r4 -)/o{>#p[ /3.؄q}#٣nX>в_ k%) y!RcD1)0szyt~ݓJ=ݾ^x߭wESO0F{9QxT srHoƲT1M4rY8Ǜ?$5A6edN'qMu)]VKS@(x`+D4+>P텙0<'xMgT<~zy;,ܸ|NF(Q? .B*-(!H@ RTUU[mcZUmFVQEB ViQ)AhBZB hEhDJJA6hZ5Fؑ)h)JAF(QTF)?n{PߣbO ͟Xm0]LJATDmtibX` G00S'?~|><wöMfާE;߭4k>%G X x,P_#m||^Hd|w yv(*lLS)"Cb7\J,c}p1`DɕQA#gےB1Ac^iq77C(c!q*)`FI5R^8Q}txd R in4E2&gS1=*8|X{mPPS*KET!J8znL ml"\m /̾(̏0~ R>{vWCfn>`>gz>!(a>o{{S?6 NWkl`9*}PTtd_pXTMRzo7] +ZTLr(K (! Gh\G0XXH@4¡`#*A#o̚->R((Usq! 10ݴ1B81_b̔&esVYX kȪL@cH_ZEumID&F P81rҼ%Z#?{KKi+hj!T̺E^b[=P@LU;BC*w"ym4@P E[V/9 :3L^J50l`$2Dv[eO\9qkˀ LK)I@Pj{<#{D:7` >VĴd%R@X1Xf!ԉ&ISAH~QxD=z>X,f‱Se=ߝ  g"oۑvҾD>aоREc>Rk Vj'k'ԇC"7pnw_ n"Yh`{X742̷ "QIx /(|Da OC,1H3>^^˯aUP]Mv>HxD(Dω~jLfSf swa?#o]V|I)Rl{IS.Ԓ.pGϷ#B'DSL\Raߋ`c*d'ܝƿj<=7]U~+[Ǘ,TKY@!*XX0/|@#BYJp PkDC~&8考x6_Jl"Жn:6LivMli59F#z )7;Z,2XPfHXaP5Z(m5ƃ&8CA ƃEF Cp *udO^snAo)N$MJJü|SWHD%YsPe|שOL0h4 iNi ۦz ``bto]"&3PD:T>#.ݎC܁!!{soCIgS-i1S<@A\ܘF`Yӡlb -H*'1\4\H8ꪚ#R͔䋡yӌcĨְOCڲ35A~[ nx"&!f*,O&ʣQ0r/?]&g_, bL:0Peb,Iکو/"'68@ k~υ`yݏ=p|a禎B>Z֋M="j3(~vP௏'TZu:!FFW?L<:'EHtf ʱcZ: d>O"OG=VG#V@x#l^"/w=~c?3$~20$}=>cdiP1)Z񬇶k9/"ѪKI!ieIF͖ڼ_˝XlqjPm= a窪cTb&xr7BeMPeB$"~0^[6kKH;A#sN`!յ\ǀUz%\("?>ت>5 c> ~9߹rrEZ슨fsQ"@=fl3'$+SDzxG=1j("lp/Ftw}b@o뚙"Fi55 C¸SXd@*h%E$V!IvWu?5e1 p=Sڏ0sժ) F^AI1:ń\ϗz95;o@sԄh~4 *aƊY/ܴ./$uD1*{⪬L\_%o;k\_Ԓkݲ9ĵUG:vAc}m"n#kjySVl* !u@S۰mѵ4 ,PwpsijjGi ?W/vHJmvQp4)jZxm!]zPhkP248πr\ӟ $AE*R"_C̡㾻9bm=)$+ևBÆTlgLC𨂞U腸X B50US E`If&^-#mZt}=}y>|}䦗kH@µB __~Rjg~}o7W*-AZ#Vƨ+[ETj[-UBBңH  Z5s 0J33YFA*kXmV* D)PB)A4ITcmQ!Ejɖdu7/#)4u'WAHU&Ld)$`WU 6 E'0#apYkK :meU:ŁfW.؂QӀ!)#YUt˖*SG !ynz{#RXSR 7SCфz*$'m,PmSgCt@Y`fW֠\sDAYYU^0(w mȡEPb9 ~LDEc<卼>(sq2Dg∋T|UU^fF1O:"R%"!1`4?OJ_+T@ꈻ}R\aN!!(.%$>B(U/ P<{?_ǞߞgPEN0?>ՙ`}C">Є1A)A4 9L.fGXuf]us.Bt0#؃m0T>I&7ڥ;LD£ \ g/Ci;P>CWf-ƳA1#Gǝffeג)P#gܩ)JfI bR.C-6L)&c4sO~\;'>= ա-QRвܚJ[m 6 JcTFȗ@0\p1ᦄɂYJ_(/B Mً5}3`D>|TAAUs z6W@%+v}y#A XI' Eryhx(Ct]$aY O6Rh0BhI$I$MI&I$I'4i$MI.d[IZI&I$i$I$I$mmmff$D$I$m$%MIm$$%HI6mwwklI%$mI$JHI$I$I$mI&I$hY%mmmi$I-&I$mmmH%Ii"DII$I=ɢK$M$%mZ\$DII4I&m$yDI)$fcmI$mI$mdO6III6I$MIZIwwwrI"Id-$m$]۩nmI=ͧI&lI%IZD$I$dͤmI$i$Dw4$i$Ii$I$I$I%$w2Ii$I$I6I$mI4$KK'MI֜r֝&"M$OjG$ TLJ"MyPƉMR%$B^eeAeB6`aɃ4iuKm5,qD?Y<嫲j CFJw1jY|м\2ͩ/BJTk{+MM][M_əK3H_l7f&:5|or47EvƯX&]`^x‹O8E'I׵eb\~{{xWw.<9;=#3r?ziPHx7MWޑu@w<]qciP]N嫥۸-nZɃ' gpwS f)|3kDz3WGx;Nbo.jS֒UWFJ[!q'Nm?iXA  \*4x\BںFk>:!s|Xt,6^FLXyjowٯR!eh!jrŁ T4қJ0Zַ[A?݇]&哑Me! /k{çhi4s>=z9}oL}>^U>NJe2|lD5.N ) [dzT|ZF1c)zrB #Rrh"V&e)8ADX0meA;s7ThY0B9mOCӌtSV/t{U NqVBFb^Za3wY8ģ+A{+3!:IMUr(p=gDRr&p#s$PW@fLa^od 0sH@C)0./m>{Id2o{WI2t;W?kƓ%?b)i)j*OȥO|XVogǣ3T)kSm% BEQglU8^С]|'k[j$/UvuoY匙*J۝U7\FʵS!۽~}RgQvu=zNzfs.RlmSQ;y `ث)qK =ۢGSw+ܻk/*ҍZeZBgo_5zћէF{Vd![s.Hr4]ȓrsj7YGv% w8t.vӯcv2ՕHN/.ӵuwJͅ0ƒxuǰGĺD)JkzQt) +e{$ wE ԋyt*Xv9LUX͠w877jYJRdP vvrfjqK5HdV4dlWnW 5ncrP91vtUqzO&/ഘ4`l6-tMw; |DӶ8m6iXu:4t͇SnIҏ mogzt%of vlѤlAAHZ{'SCРҎ Walpba/.̕[_o96=JZ:!HRx `MWXg`mGIhQ֌lÍl|v>x6{ SIË)fpķnC۴aaoNxaix){7S1UGڔ|<"Rdk] .d2][դZz/ŀ "\CBԦ{:GfX:yNikoiyIuzq/֜Mm|"zݮxZ Fbb@4!tJ | L vGÃ6i":[]݆C66X0,1m|lbCzh;KF8vQQ:|^Ul8 zP4D wŚ9Cblg[9mU'itF+X5uT:n,m5σ7o¨X9':tjBv= [5ǯ:84[gOvlV8Z{np ]=xpG|{7~289du 1: Hr׍8QG] 4yziAmEmFNyA:@pц#vkSF8Z%ه|X@Cb=ԮSii8x% yE:6z{7m&y4ee6_2?(^3} L+}!JTвtt PZc>+}uH8$Q;j뻉v^V9*>X#"H{OnSh.$@b@CkD CtQޠWPՈ3&1LZ`,ud(k `]XV dn[4SdKklB!C[rM2jV#au3[1JCх`QI  4;Kcē)08( hueՆBd.F4dBf ,flR ܺ6u6@y‚3e-S366(nRtlQp)DDA6!hCх:tA91H)M 2m%m:"@Z*@P4M$[XPu+wFѪceƃz/' xx %EsxOxOFA%:k itttF& vp7c>ކMPcP`ejODK& QGD5 莻vp0/Brޠ q(hcWl\svɠ{L SNUڅV4u5m4$NE!l)&˻J=nbNw4k,atwM /¯ьSwĖ_{5G*vWWa6z&q$KZ0IDo ڼI&ӛ Kw :, 6<(fmh0: `jUGA7A{PYh7uyki:A{c':5LI3Q6 p5,Ǥɤ4ޗiښ.T4Xc@nA81 JCHw$ onA4%40ĬBZ h;j,\[^4uPuH$Uvr dCܘPp4- nqCs0uFӔ㢃Mh8k!7vI H{)5I=G2lޡvbMiMD"AF{˚ CB8#dJhBLӣ@Pfؕa*ml,\$ x04FVj 92*<,p%W #XKK%5V˲]FKb&Df.0)o`/:̇0MDxhQ,fHMӺM!ATFYO &F ɩwteѫA3[Iafr2eA|eG 23/J pXr;Z D2([,ְj%n,Blþl3CHQ5 rP{I"hq[n{vŒM!C01tnGNA5\8I%,tSAmdhڻs+$B;:XѡtB;[JrS de8phnbM'U 2pMCPQ \`!.%7Kb DӍJn h)/RRHZ#!A&u| "h1 *,PqQX |70)(rZGC9)#@BFAݱHFF;7̀s\ IK,q \4)Il7Oo[fPF‚J I!UȌhY/xb1dA2i8Q{ 2RP@H̓:dBC*1EpLcLA"ytM컒ٹDe!Jk/Y:ܝ^l4n0Xo DtHr %zXXl(hu,'s"N %]̑ 60,dӡh;Ӓl]y剢.Pw7Ěv&iF| LݚD¨H!)]A͔|D`XZXpJK`~b>ե_&'⨽0X. >Z}5M Y'3~>JUE$>LS7D*1I~/ɚM0CzjNRXWaq)#2ReģDSuCX[IU(#ⅶjJ̰lI @dl@)o[F4ЁEH KoimDP*7#Ds2^)e[vڌ&s*VۡWzF5fu$ 0 *]UCJ`rPEAG4a Tg#rӟvf3N4 F(Os.9W-7dE5IL iZ$-ˠ m-?"M[RGϏ?U@5ضm[I/U@-[ l|w!ĴDI"RDhJHt皥vk[>-UU[mDQg/ipEW-)^~iNϞm45F۲ZyM?GJϹ?d?&{&f{| aKK3}gk3 kܼe5AJD!>{>ŏTlQ9˖QsѭkuYo0'r?7do<#o]@袛r#Q_B$!y@jo\s*kbf5?UTGЊ0J(I~ˏRIp?b%N- HE$AcQ$-<շ,s31̦c6ݹ 9¨!#?i~ZP2d#`l6a"aH@mI$I:Z_Bj0m{%?C# K__1ah dSoԿGHM$ӘѹmK˗I4I66iE68nܽ:sju͹el cHZ_5ebZae)5B6~7boAM_x<9UUD[hUe^wzV;VZ骩ճc.R5odղ e-runwզPr'1r8HEXq~i\sWWzڎ4#.#iw;_VUVڪ)*hڇ<d16֍BOVEJE Z6²t%q%` ̱QUR(T;4yZt\4fykFK_;=bSݭ%25l-WzQ؛tXBFõg[e٪vҪvo3)[DZlngElO#jtTeE&as*x\W9>ܸn m UKUu aՎεk"Ҡ*[7S rmʒjdt9,<+Ǹ)Smd&Ś3Υ{[/''Kl5w%ҍW5XhFsjRzPKtꢷ.厃k&ev"}ǻ8+w7%ܴY1yF*\K̾;]4R3xXe|>rُ5fWVVD荣spٚ(~z2GǛw7l-7VScWw`E'wgu@f{%*lٲcѦ:0k%fY)=pH)nԄ8hJGUxy^⤿Z-wSpoLJ m z Cs85q,SgY00bpM-))쌖kQ, А'G-IGGO4M|y!GS=Cc4SNL$ "Tep'j$h;4孒9m10KnoR nEtu3'TzZ%dg3y 1Hq$;2o2ZZM^UUUU#6/ĚR_}YhD_WֹsJ+DJyk&,u}|(#۲}]M7CX;ۯQ7N$'l'HxWgQ5<ԕT4{U':r Ѣc`"xP$o6H>wc=]#`um#3寻n3ĆA;CDXrfBIa]|Ƕ?&F n-?~ z*c}:?fc} 7i}7W4+5^&[w5|px7is0x~:3twG)}wOdv~~ я(}/|ak/}OLqש7ۦ4 êXxx[ aɇ/>㛇Wymӡc{-Zcӹ¹67oɻ. ܘcwgwjnOr`H>5vS?\Mq%nO?>oqޏw8vϿ8e㶾{c|no㬗wjegWr-u&m-)=7Zz_o9YM~m7tf~k؛gmyN_ޮ}'~֏rVܺ{{17|sM>I3aԷLgq&s۳ z:r㰻s]m۵S^xg^\Ysa\LItv\z>ᅥ@׺|)$?}}GN=>z|v۾^[=uƾjgS+l7d2u#옒NΊ ?'H'g8]+sbѾ2glEyj& ]={{&^#2m+/ uz͕LU>l?]>f^[mRJEΠ|6-M{iO# >"NRZ""йa>W,lϔA4϶iUTU'DÇw"!ku7p_ZΎ\Zg~.g }+zK'u9sWCQվ^r=6~Rw̹$stI.*쁷  ); $١LZ0Y,\Btji_VNhґß~F~pׯg{M{zx{Ss4|~gؒ݅;9|yz͕\٭h{ݜ{ت x?I5I(a>I*PxNLqA꟦=z-ٳ-eF6/޻uWwK]1ߺ[$ |V&C/Q:Hu~ja2 a'BFaXQ_7 ؑ`I3=^y<>ઓZ ɑbf뗖RP<.T=}s:5JOkEP~./g'ƾ˫9[a?%ŎO.l:N~lS|)=̝f;>NG~__G6Txya鷿kׄ>噀x~#{xpș`wH7 B[c*]c)ݕݧr7nẪD[BV{5N{q, }*UU($eM$yuȢM_ T6a1UFq w^54wXqQ[õJ9fZU:rЦMګWwU<:BarIz֝5ua$QRv/7Gn5rVQ5sÝ;㮬R/R5u/&ouZUVul3OzBH[U/88໖3ee<5]1jٌNeuf R^zڦ𮣵}6IC7~)n UY+x ʯK}:7j+}4on\u!r[s^U VmM&cO[Х6k5MJ%q^ {o{ nɻ+ 6C&gZξ@{R5ɹYdևrF| iũΗ7 ݻTts] #POCr"FkVuS74䞮gEƒncC}NXNܮ$7F-:;NM9|ꪫr:N9;i eǖpU}F_Vl :5XR|M9@TU*,1XYEm{k*adsm\@9~E_s/:`7K[\Foh\zŖmSs*{{IECY[5ٲiNEQܪ˼~Z=Q]5Uf9/{a6u:w+wIgww͝ƹ,oSB󶠥Q Cd*OSᄺ 뽜YʱmV++NsST_^:5tWs',]†kk55zmD7qi+)fع6њ̺jMSu*f[6t.l2;broqYfqէ)'Y{B YmVc;W֭5 Z=jEUTܙܗSQt:42ͽs3Zz vUY.WUXr£D޴UyJt= a<[Ĥ;b>:y]]v6Mko53.gŇ ʐpEaΐuN{}Q9=^U.WRj}B~~2~g۹]JW+'^4nֲ|ڒɠcm}C>Cjp_ -I) un|? M?tC˅Now1=?RBs'XjEﻵKϟZ]c=^]wzguQsH!F9W{rnvq>bvVS_Ws1O*ȡͬ¬ٟ.^KC]_-^J~u'΀㿃Rɬo,٢/ \<6:ENNZO-b%Z#'y^k D!SyS-!Z@Q\PdHO$J* Ŷ/48{oO,wG4,'}ό|2=WK $i8#a{).DQ*yoIípVyo:gϟ(;_)#Q.#DH<+EF3 W>_YsWoϽv^Fi(tB6H +ö&L9bP7Fc!}xHFza,(vX0 00 ,;"ńXe 4%d0 )TIC!F$A"1E! "3q >1U 'g&BNJNю;\3333 %UUFSy֍"e/*TNSB-^C@ [27$}-h9wb3&LAwyT*v%ROXJ)RU=BzIQw{ n#*ƝP)ZNa $:VfL̒x\Ø•#ᢏc\,!&)]w<曗xb xBI$gh"ڔ.Wo#];kdHS{AHo֍;s__H<,vD f꧈ '5E pIkQ̦]9Ea YEWr dUi$$檝4ys:/ Z s&yRw] 7J]sIׯ C8 2`q.U9k<֬Js56y;'Rv4p4 p#t!+ N. .BYz˱0F$DIdvD !{'3vZnm @"TxZ$R"De6KVQu:)ITeIJnDΪ'Iݑ噼̰HU|an*$ G2 g9bHHCeNsMD[B5DȐ "#DȐ+Mm#8DBS737JFDL ,փSA@3" To):]%CR^X}! $HHIP(bVZrV0֔]@dFp(J[@K"'A5#u 7l܄߈,$vN,!2ou]U\ `fN.II.(]f#WZדlHz M=\';UsUPm.KCs #sr';90 kkѸ05I(L3yxy]-9$&'.vbHD^9.| L  %I$oUf+n ;ʳ0 n.##c#`(Nh0zZwɋ&A;,ê5ФBQV~#N˜HAVjyhj 23 0e9B̻L̰4fnE͇M DPno$)30j`@ `DSi$muL@FdD7P)P$ʬ;Ma٩oSa8yA`Q9ゖUV AYz&4d*\xp Z xP9Gp Z artWf! ʝh۝3d;;epNs04$@̿s "%ԥi$I$5kvi]sZR35ݻ Q'Yg(B"a'HUJ5a5}k]Xy_P0>p ůP\sTzghwE3i!NY ְRWjlg>Sή$&.jWI$(/ƊM2r(1ӓ yG)ߪoh2_ F0]" Ӭ:G?Vmmr6/VEO-m5{|gÝx}iCaER{N}&Zr̝*L7MήBݍR>kMdWƣCJؔh e.3q`(2-oS07L׭g]wJѸƃ+Ax<%%׾*ȏ笽EUGg.>9FV(jz.Ӧ箸<]cbV10h#c_㐣'%y?ڶI ,'~yX1GuDb)HBPA(jR@vbbf?N HЪH u5D$DdD}586 m6نuٶֵkZֵ{Yxd7MSF=WvvY!^h uI`@4*D"T#mm'.w~ )=Hw;ᮂAؐu[ʕhxOZNx~ݳ "?W@OH6_tv\Ib)>sªi{>~yy'= CGk˟*{ /O{4,@L>#Ϩ|'=Hb@줁ﴝ0bPrjX}=3$-@? i 0]2۷]k^Zֽ]\'xwu6K8^L Z) p@cMF@r=E ?=6,76(L0V-"zDw>{;9i?~#O~ЇAf$7SWȱg3EQUt~'8f{j&;wiǓ4 ;xQ"$) wa߶cs"0/A~``#'J1#clMI2L#,zᦙ{ݻ*(Ex}&'S[5|X8^&贵Ө|m. j?^ԉ*&=Gŏub.9i+ӟGc:0$L1rA_ܚ7}3 f͓Ճ߾MXBٽ2zFawk~/~_Y45H05ajO`pr8ˈD@@ Z@I@pDY:@LU)51!igA1+TXaV $pGa ZaQkI&*p! -xw ྻ'8rͳY2|=\o5k4]G{ ݝp%5u"e{עzb'}hj0@#s=~ļ/Hi+3*hƑ6Rfp'S;Pxh@V9trRsZczv`Q4w`~@hQIO^lXN"q {@gRDנּ@\2Nٝ\`|1ÆG͞E8 겹iD8(9Xo䰲Bs P Ic\Z_M4ҵk[Zֵﰔ#Wd|芜a_HP_T.xڍNe!vV|Tr| כ{ H"v'n혠,3Y~Orx*`s&s78 gDztWT׾$H"tz^5<>ox G__C7 [ġ=_}&iHH$Uz ~ʿ~U@H|Ա?G\/ YM#K'$&`Dg&2EH!D!RP C(P0hbŁ ěBN1Zb`1[J ѦB[ ;|gf*) bcEV $2)Xd4_\}^^ӕ?{u=iM"I-2I?x#ʽR!h h2=JZ/Fҟl,eO)^wt͏u}y{ɧ[UԪSR%Wx^|n wt(HA*(z 7o\MW]%I&J9鈙nb:N}5< \b `qf%5/I쓟@xW ~q~#Ƶ2eqBX 320-_!z"w"o\!R|0fd6ʔC3X \;=az% J@7;RtMvH*]ЕT$pY+H$vV  ޤ[\$*U@RɴfAobPA*  : ޻1rv;T;boX$" }Hdׯ];ݤEp*@VA.k?pׯ>|_NRIoA{ͿW Jajlڳ+@PgGUUjesRRSɿ7- 17%!{fB[q "YH6UaoDkoݱ;6L 39sH-]t%{ֵ)iBе9:UNфZѣ4("*=w]QNw0Wu{pW]٬<~L[ғ~Vl&㦬zPAzdco͠(eYncgǼ;fI 6IW^!~‚{`I<Uu8gBu~P G\E^̒II$tˬ\mTp`"b/bhtG`gkD|;TuUkTwf(]}Cߕر5{?okgh)}p@{kltnHHgOIԪ!$t}DMBeq*ŧV?DP_z#dCޭOz 20J7nj_Mmp,p)]]^AŎH8e. 6֝6ĉ6/\J` 4Oykܮݥ}wmP`J;vB: !cφ!ߞu6 | rՏE 7K4؀M~Ʃ&D 'W8 ,tihP ;kQ&HM o=0.p"3422,kZ7Ao.]UsvւX !@"P);"3͎uG~ݣrKQl? pȤ "ݗDO*e'6Z 0ޱ+FH) [S ,d,@* _:&ɪ@t͸ }͟p?{6i3+P{H &gf}r`w"m9^þ+zlU뮳*)&Ch,a8rk$K|e@dTR,TT{dwz׸zg%2Xkftja{x aEXXPE,$DTQEXV1QAUUT+#"bU`Y+)g^s:iٱ}a$?9kvl/a ޫ66 HDz1)EsN^aLwW~}}}iMHӝyЍ'c*$J{a}/ I 1 _;gcޡUF {ލA>Csi$ x<- …*$ `wf P*K`2 d 0BDP HA*))+ h(dU8 A!GAaH#!(0HPd JPDBB0JFV *`!#\@#MpEQfPhAÞMh c`{6 $~31hTv;p׼Ն [v=Ә[ol$!!c0 `~ĉM.2`\1`G@iz^/9x3 \0rkIl#h)h]4A7a,neRi 3L4{Rr,oES~)J51II0k 2TNA6!+~>~Q~uQAU.}b_!b~2P~DH )Zrk{2m!g#ly6G@9矃8oiEDo4I&Rk;׻:~SO2iim!aáƢ% D}M'˄'`=[m-H%Ƿ+72ns1#Bض/NIDlV)*?lƈs(leIl,-lp=B[ -:6`U>AZJ}k{࢛PhpK8# AS[e0m |1BJ/f[N [-:El4"&.nE}G~}$mL]o"\{AFFkÁἲ$={pӌm[JLCÉ$Pjɋ WH^VUq=_< IpG-O<[}U&Oƨ=~a!HHGw p)> :#k0Egemy&a0Bp%C\wyR{?5JE%-P{$'"T={Vq}$s-CkΨȠ>#/o߿II%6rG0[I!=nuMchhbz/ȁ{p`#,;eÚ"zT~c7mV'?GB D̎'Ғ)-R~ }l\ [;oXq{a}\U1%UgoE\RE%5EU< rQ1 ;4RHhT& % ITo#c[ªx{Wmg@I˘J>v9@'yV,4}Fې>`b0dIdD,#"FZ?FE 0&$ ȲK9@:C$1[w*+d$B,BA/GtIRʩjSmmmI$IIi&I$M$m$mmmm$}̢NyM$-$m$I6hZMͦq5B&jn\ߓ ׃H f9y/\("BIuެes7;}TyC hY-ePWU 'Ajyzn<5xOՃ3Gݡ}i#Krӱ08]%kUI6c̙>yŵM UۦV2(g3kJꩶ R-gf)0 cIk8m68yZh#ms~4K\,o'fC{+x;^$5,,&]#a8a 3cÁUN;xl:ݓ= &z bt1rۓ:lD/n|0,`tMhup;F33#0Y cKV(n0﷚ěOPBPU0Qޜbq OQA"PHKou74 &6mc > qOB' *D`fLYAJ +w<$"KI _S?ܠg%%'b>@|[O "]t>闸Tqn=Q04 ~FN|}^vm/hP([̉w=̘>zw| ([iai)i~M~LR@e^4*W;B*}W粹9fcELQ0 ЀTU p>1#ϾcИAET-0+fw6c M3cYy{I,~[뜜+(٢@Z`jdr=r}U~S4'oRh0"^zEݭw&c&Ǜ7>(X[뮵@{<7K;k y$0i;riD5z@*w{QMH^ j>VM5DQJQ!ATO{׭}﹆rR*D ''}x>m^wsd_/͘' *WwE0*$DT#(83I1SR0's?m$IjD=k/' ~cـ Cy&9;-o>Ak|޸̈́NEU v~ _HPT P8 목"=WlPȭ4P='h}(hywߚP5'Bъ+Sl ,YYӑI%G`ȕ^(G!AK] N:Nm۲y"eW.8ЦT: UU,cŗJCy3;U@| >w/%@>}g*>ؐrUUFU'{114TL֖!S512YVEhrs6IS']poߜ:y6:r%%zg7:x-HҔ>^Mm*han*өz\6B݁צ~4AWǵB(ȪI"H$SG@#5ٜ]ZlP !'V{Z^DC~쿾yI$աNY@ߧ]w xTsLx9|PP>0k$ٿNq޻Gp*`x@z 5!u`z|LQ,'5~qi- cY]p/%- N|-~ߺsr:M-PĩSS+TesarLo2KHn`~q8{ɄY0$o4Y+z~ۿ~ilxZ;aajz?Cc̴aR,;Ժ}a|YϘސ<]{4M(ETUhхs@P*?~￉%%m`aL~#ڪ¾Ra-mZQloh@E>E D:{Fi\ry֖dLf{ <0;Te]|#D~+P?}x$5To* @sՁ ,?>֯sJ?}=D _{r==$28B@ ( ODi WD6%hՊ'f"{ LPMH`$II,0dtX~t-8Z:5$?N":9k_܃Y]'R[r'v<>$6—C)<ЌOgo m 71AO1EPH_e&PXQ3B@iD*s7w٬!$"{8@Nx`5F)U; #g/Sٴ/cUSf߿I$mnMc$qC^LS=#c@<NڷIsn;m*1E\55P"F_U4 /+uޣ!EP=~ Rpvp!~GxEn!purB)wO6mst2TO% =i.g{⿯lyG!0Mw$0h`> yh!B!_1WA>ʱ> :_ZDTTodfzEuVu#38:v^D~ O 4 +O}\>n3T$EPnY oH+TjZ՜ z Ox07u*TeoT=k+3OpQ0)o@1@H{sLb}\G BJd'd=7"/9'x{~5޾D R\}gA2`XiDeKeou-%'5mң>aǖmsé]3a{ajI*0a a4Y{DET oH?-b(B>LQ3#螁zvvZ{w|x{0"J .Y䇚T"Uʯ߬$Ezgwޣ^ ULtq QPG F)_1s  w?E;thM~)G+Vd fDD&ܙB"p{ ()n"xET 0U-2W"쭏aoCG}V~Xt^[^HAVdDc2" & EA1  D5" Z`(2* [Ȉb PF2$ۤ">ٹ$(vBDHzE5+cvnc$I$m[mI$m"I%HIi6I$lo_s$K[dKI$mmGimm=s-I$I'iPdTI"Zde7cA\,$Osq{@ESlUn*[ȨpzZB D o 8B!0+8`V9ޓ)48J]tXnR64 ̝dY#Znf1FFZteٳw.Vw:'k#>(v-gm|./tSi=Mkѭv <)XGœqe=üyCV[ a 0󰐡P:“V tMMe&+Xx:ӎ=}nΝwg<|N# юQ [=G-bQ MF5ٹ=EEquGU|/s/1CɹΝ/Z»!}T唺3{p/KN bUtayvG(6R**촔uDͻ7S;(Ы@|]w܁մe',%洛I$h[5I^ŻYwÖlN랣,ioW9W;dbu\w;*tkWJUPiGA~j~ž3_*{7S<"?Wf@T 4~>1QpК; {7LHd?_ ߠ&ExEE`jI8C=S;R3z:CW}mfr+9z)4O9(6<}8&}٢5?^&fSNC&/PM}1  ^Ip3m(!nu0~`~j{TNC,?2 }Dt?U}.j`?/b7E- q)}Q0QSbnʈ3H~_I6m'v7MbsLJz罿Ewٛ&ɨY+#Pvkyw"մt׬8ZjD6_{̒ZI7 " M:G4FAt 4,Pjm:`C"a[4V!6x#gfq`41TWbg_TDJZ~ٗx_TwyqbBej Q b"QUS5Mgs(j_&y73Tb) '|}O^5B(Б4%e Q"hDCG쇽゚2A$* 6I$D &X;0vV}{;/Hx檶0 rlHHo6?{7`kpfkc5d?~wn߻xmݾkZַiVyߘw ;&#| +^ZݻL͌bU%A?~.\)KyJ7?o pNs{/y9N-P{-~"ϳFOW`p||1K>$P0Oᄑp;Ͽ߄BMݠeT)TO{='9$]/_~g12*67 a?@n!VHD Gx[gZa:~/y6{6XH`_fp!,wTlE ׳Jws=T huz8$5nXg(}2~|[psz$NG+/:U@-DDNNK-Bv=0)a 4d"ʲ!{sdf[{|wr5? Ebêŕg˰> B~ P#AqaP޳g>=GАzTD}bZk1QAl"z<:B=@6$& * mHA.P !=Yk\afu5}@ ɪ>0@!$al=#u9Z3>L+o9 phLQ}$>M~}i7N׀f ZE=҄ U_dq=E)8bxm@fp#;;yuUL(Շ/wx +t6&f${d ~14>oJ']`l ){~?=܊u:[ 1#DP@_!u {:ߑwiǘF HrC2hHf{WprJ)d_<Vzn޹gƃ"D|~bDw?dCF^ZXQ\DEj Q")'(OlN&VE{ Τ.a,]:uړ&g}že2,gi6I$ZI$mm$'3܉)$%mmKww6G>dI$ZI$mm=̒[I$$ZM$I6mI$$ʫ $B] \:gX2vG*F1Е==IKc&OsFe AC ڿa]sGM!<8i5dHl|e꘭˳{{(mMPνuKք2w%!;Zu/g8̵rI:ɼV:^ @BywxwW^Kť:2XYOzl(8smy=^^:]`ut"PW Kmqu㧍> GT֌;:v+vF8a掜v|;t[₴kG376€Ĝ8MhSRKقYx:(15f8w%oU9(4vée;~H,  4Uz}{[fk}DFwXQYA>O=ࢰ9<]ܓB]o5Uz{3KVĮD%|H4,O:R|_'L6ZҬ!wr-DSv]8벷7yvۯ4H]lMZuYw2D1gZ9yUmas }>6Ÿ0,>q<];)Xx!s2nڛMvԊu9ӆ2ֶ8Đ%}yz;`byΚy@ԛ]lO%(0 K#B_'Wٿ띪2՘_S e.fMvzJM2L)upvBUCB^XUjV]nB3OnZS{ܬ6// ҫRV:hݼm9WjzQ3઻TZ$[Y.;_x{ыpuny ]SBWS GVMujNlw "r[~6^ɲR+Cn$SUQ1IS eo޼<7a8#_~oD0PwuL%ADą{]TXR o4%L髠$Ik+v n۽ʺA=>iPWqEzuP AC蓩+(K>m6c-lDL:uQ3,rlI& o.88? Hs̰+{ T+JfDm"`Y9#͆R2QO`=uǀtF~_%mQtOԃ5[&_u\')$:9ߍME~ލutW}VacꠡV*zz۳8l7,u9԰,ojUkaN̐{8sj1H&g6r3$!9/tۚڙ'@L{ߵ~QP>XLϽw4u]-FQB~3o߿4I$[,."c#>%vUrbCo o-,O|tZy  ǾSy5i-C&Xʵ0a1IT·iMH1$̬@se: s=gD?Ftk;ho8o41 ܺ);EpꝤ;2Gu=ف3"` w tMD#+3uG?CNoԿ9Lf񰐒"b4Zxd0^wY9FpXwCg(2jɢWuߒE}AT7@ӣ'e9.9~"Ug; Gr037ݎ"D'G] 3_]~ϾIn=yr?zuHStF>1p1fO2bs𯇒g.6f0Imj"ϙ>$taoHe~AO#w=G8NswI38N) RG۽Mo,H=F>yiIB|t(߾!#L =%1>?mE6bldy*\ S}k=y3ë9oEπާRn|w{ҞߦTPhON{J훕xm9D-[$PsFXFI1#{ƽ {u$x z`H~:yAABýe0x|MUzdH8/:{߃cm&j=[?}?wrm$~9i_I^]-McK9Ԥm|4:E262J&sERLhJ>>Ugs|z6Z (da{ﳆ۽.Ck.gCL`+f?Rǽ~޺z ekd']&)%&Y2 <=OUÄm.z a$j֊}Me}uim}?ۿlAL=~{B{s24K"H<꯱{wwwn=;l 1}g;N4^Sf l93$K ޹kk8;{Ko̲1qLP[UhK!y<n5>S?0CH_$ ޟ=86+jn0OGIݹz ?OEoƿcWvj-ȅ-U(hSMZeYq=2S)^$D=o$ZHLIDwr%I$I"'>ϙ%I$I"ZHDw.emI"$w"JmI"ZHOs$mmmHT3"ZA X#nZ:۴"ѐxPcUGƋ[+]\U~7l^);/VE5&[O.n7[BZ߀:?8OA'mZbUq ^4LwLLXIlp O 9a$CrӶbF_ TЀ^Tx>"sf:f$%WPTLOg{ĖI$yN/SfI|]]Shp>zztکth r4ʂEZ8B}̖NT߻U[⨙؎#IPBWq(Р>wE}տf3\^6&XS38f w @N}}v%H+HoAN@kߧ{I'ۘ鲴|[~t8]@BX-$O~zJ=C MD3S2$M*2V]=՛>#~c!cr$0&m]@%!${6 ܖ".G$w`^UR"J]M(D&$OGi&I=6D16 Ὓ1 @Q`GRP $z4<d(gjo>~$웧8{;o3_j{d4Fⅰ>X!wM~%y=ž[ZnW뮬%k!*++>/?!<|v$,{,@8F VW!ofn2Nc$/&=챞gw~mI$ zDXB=;;5]ԫb*fKNqܹ M50s&3~TkOٕ0$:Z3'~Ww}x 5 IurʙK} @1*N[`pWE@[WhF-Hf"]V US)}=quwoP6A>]ܒOw$9ncU;`PWG@4Ĭ4}{9^.bޕ06s0=qɭ:zZ\ $Pm" x2 ?e; TfNn':™KHːWO|†R}~O@{whBIbRH?TvH@ w&@iwnVjE)D6vӽz4] t%ܿ{{W+3:Vg#Z\mH JPG=2"cn">)!g'qg>@w^}5G="W 7$|(8N׾R"ClaIURQ[}, ,nI.Zq;I8$&$FX2-l)0TP_dPP{%{x,/n<&N;mmHhd[RWGi<$Zm"I%m$I'w^m$IK%KE-$HI-Dys$I$KH,K-$HdmiO2ZI6I"K[H8u.ЗLB,yh(9Ѹ [F lBL3sI< bP!td7#x'YP체s:q#w2%Gbq_;Դc_=rwn)3|]fO%g97ZbK8ӄv@qB08Mˈxzl(L  Z{ܭaJhCo t=-p] S{] ^qfIq-4M)K16aҽT6Z9axyKx5Aus;Å 'AcӜ{x6|߂Zt v! r6bEnҀD%nިL0*U*+:gW} Ӗ=ٷ}t7ͨ# pЋ$eRCFniE[m!UPN *'lpÖ QvD$Nh0UtQ̙EId6d5DH,/ģ^5"ua5;$HA==7 @# =×ngf]y;#u]nn%C!<|u976e1RAl< JX3KofgsH&hvleLUNG-UN/ [lTn)J]%ڝׯy:3s] :/ ٌ#cOE&*nL0ٴV ר*HOq=S/uT$<$dM[ڥi9m%+˳{ es.-5W l+^ N&Ŋ&_W{ƺ{N3yҜ;'G}\!qNGbfXi-[ ^R٣6dz:bLqU_`'X+wp1w-gseöRE$ȒZmY P:=,|`pdy${$>5oϒ]fKĻi4g L9qYbe_uC]n6Ƃ w;'.M^qh@T&?$^rFNO祯:E Is" bo#H@$M JQ?_IO$۲a~EkM ::O8h<^~>(xs'ߪӟ>a}gR@ۼ=9uHU"3{4a Kus3<9٨C,A(+P%WX4>tLö́d?~,O}cp{|.{=޿;sOjw2e=wkD9f7 3 0  $| &wUpW^#0%۸wm ӏfzf`gɼLG)@T\D%X0N`J&,vQ&={<ߏELyC0=>!PK,K $E߻}$$#zO fZstrq!$  \ r6a`)n)!S~*+V(և֫tlZK'(NgY‡CXI @hPbO &j"DSoW{݀{${ڂD;B ) 1C mvOP ɑ1&!*?-;I&I$roNQEF  pxA>> ׺+V_22 硌5ɐ"z?(MT T 7PnBH"PA^A5 Bs (P ,{\F  ߾#1#}TWBNݙwX {oiI-&uQzɆlOm4`j,>>`}ޑߦl]l۹څsԍF+ͳ&2;v ۹DUT@i &"6ŻlDb(WB SҤdҜw_4,2qsX'e a1 Ɖ>xdjK=i?D !y]]GC|/@ } 2 x(`oplH_VS)۬ya dJ$ ᅥu[JSx? _}~N_W aGh9x Ċ)r_ݿLp$ĊIHoPfF"ffgķ xD{m$%CVe\k;r"b? 0 B#"R!u{T/N@Z)]ᓹ+z(i> MOQ.Rm n~T P$FOD?@ A9gRs_bD}'E@ uJ$AJrP hu/l@=m{f@B^xyP@ F @g{{>w9K[ӋA!g="q{3PUI{soT8x1B' (o־Ĥ}nc @Kޫ@N$PtjE@_3";Mz$PIr6"v$TUUSmH@'?~I=ȴj۪cn7k=.m8:AiPGlsU?-Wg O uHNތџP;U>' $ +/53r|~uRUǧ{Yݥ5u l@i0$7lL"={IN$P So38Py+`Gwt66W#`);xL;gIWDUp{dg7`["x q- k2v/wKJ\d'<9H\жF0A! e 0B^hCI4&1fm9 BY2P"$i54ѱ(tk6;MQTA]EQ`[Id'i޶]\E(9 07 N  -Q(:ÇѲjVL %)Z'M-E5a T$(8k| õFl3cb'APd⑂šAMm2::0Ȉ(lcR4p%91HHaph":XmtEl貊i"ҵtk@oMJPK%Aakc;]RnsZ7)a5euq5lzt)7PLa9wh`tfF#E0Ǜ֟wV67ۚ  ;t<*ȕ 4CVåc$6ƃDaF㎎S@ٰQ͹m+ai৭1׷LqL4BSiH[ I\L žnl5Tmd Dl64C~xVQH `X@TW]Fh:=b; l;4CE/jnͧeM HPt6@iIT֎ ;It{M&iԻ M'g 6h4KAIih na IަKMz]jeMQai+p4;In.JCHuz.t,c JmM% JQVN,6nݴh );H-a,[ m q4nkE9 ,"%l$v80 8Zn2llҚ4iMD"AFhCb8#d4@Fi;B;@TP]t61 x0S)40!4&n HkG(xYL8t. :VMk{wCe-(,CA˱;)fWGq!;ɻ @IfSANCAJM[Eވ4Qz  ታeI/BKJKf[ )6Rp6meUJ%сEjCfĠ7QVHM@Q B)^Bi$M.;kcİa;6 3Alu#ٌ8Js8q:X頦r8cE yX"0 Ɛ˓LbS e i¡ѡ!V <.i(HnIM%&kFSںat-5VRѺ+^| DsKwD ,dFNs/|  gBҒ xCaaMaiY5fH:%,%{Ib;ql*tr&,iѫ5B(gAoZ.cA,((m ă:-/B#B{" D0(YAfh"@}1Z+ $fP!xc 3.LcJ ̊Hwfd#) Tyfhȇ]7W, ["Mj$NsN t$XXl(hueVߟuzS:5dd9`,%,& Aiݱu&@QӶ0n:D H'j Wh4m3e24_3hbGwtGw?*x ARwDHAPB#"E dAĐDDP H`1($R D,mJ"Z(EY#(hF EҕH4 R4TT(e%U )T(R H!R(%  -(d PH BBH !Q@ Rt*2ATĨ%d!+RPTj(, " H Ȃ 4 ȊȊȨH"(P , 0*""" BBE"@RX " 6KE("H"2*FAHX( RH$U E AEY$@VAT  ! `@A @",@("!DH"Ȍ A$I" ,UAY$ED("#$dQQQE" őE (Ȋ,UcXF1AAEF,Db(($TE"UTU$`@A2#,H)!PDQEb(**EUPF((*"DX1UUU"2( R(abQb(,T#TJ`*"bV- d*Q0Y- %* Xb*,E҂YbR 0X*,*,*,QQUUUQAQDEE*R1 UX,`*)QV,,UPUT ()ŊX" PQTYV,Q( H Pb"U"(@(( ,,TUY()AbPX,X"$ȫb0H*"Ȫ,U$V,UTUH**X*(H*EUU(EAQTm," bHTH(T$DAb E "UTȱE" *-db"T#QVK, " Q`2,PR,U#*b,H$P,TҬQdQA`#% %E*EbX*E,RT"$(,X( 2DQQb X` PAB,XD`#(F(1(U*HXTP* !hȲ"BRV*Ud,a$",AbEA`b`ATUDER,E`[IbPcaK E,@EFHQF@ATD6D ,*PV*[(a(*"EU( HI -R(dQEQERV0B QV U`)# ,Q iR0)TEAHX(*((*X(,RAE, ) E,` FEEX*b*T(@HB IAbV$dEXH @DA#UUUUY***EUUUU$ (UUUUUUTUUUPXUTR(VH"UUEUUH*H$U")JUATd*HX(E @FD!"0ZdQjTKDY,B" 2HADTBA$""*a$aUTDDDE@bB 0@TEUUUI$"B AUUBR F0R) T F0c"E1bT ""`b (E"b b"+ H+ *I I EaHF0QUB"JA`a H( , UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUA# HH?VB,b1Y@Ab (*Ȃ("AI"#@bA " 0P`1B1" "TF  #$F (AQPHŀ EX2DF ,PY#D@X+bB2 "*",`Tb1IUY$(EFA,QH#UE$UHĄU $XDE 0BF B  $AAR2#0I!EDAd"0F E+(HF @I` c  dDb""ERDVUF ȀVDbDDdb dTAd@Q D `$cA1*D 11 R"DD*,R"(DAQQQ@DdX @D*2 PD1DTb"Ea XbXF(*0("Ed`EH HE X "@$8U*"Ă DUEE"**E *1EF "( F,Db b("*TQcF1QFEUb* (UQHE "QF*""U*,ADTF"H"2#F )1TQUDPc"QbDE"*"(TA($EEXQUQȱ,AD`X( PTF"ȑTEDAXEDb *Ub F,bDEEF,@Qb"UEEQ` DADcQbEb"QD" *""DE`,PV(*V(cV("*,(UV,V VEQQTF*"1UUQ**F""+*(F**EEb,(D" QF1dYX"EEd#cEk$F ,dQETX***,QbX("H( bX E"**A`UUUH"UD@XTb0c"EQUF$Uł""**QT`UUUT`QUEUF""0Q EY R  "b1`#*bPETXTE`$L?!C'iTV{rՊ+,/;[M<˿Oc5LZcq vJP/hjLD rB_f x@eh}q}%{"ȿǪ-v/z],t:wGI])wʳDJ''3!1mA5Y~|o Ok=s*uj501#VzmJk!ALf#(: & dEOcNP-TD"hXC̵P`~ 2sxTZ;hrI$d^BH$Pqr$ f@= mq n/y !ˍVRD6PiIoy@E('Dp;$" ,@IE _!jC6M6sT{FE* A \5о莆 yTU)p'x&`WO!w&KGd7r`JUvn5ޘK^GP IFS=6%r]VEz-V;cM3vK#О_}G9ÂTNz^$\ bATrͳW*ٷ=Y8CaX9kެn3W2L2C=q8ZRߧ(mZh6>s?M=) %19~UT?JP RqpMﻋbP -g 4ciS%3O_־Dz{f=^iH޾BuMS)ͻ /]MwW#.|a@ac[{DɍAk%ſ(a<;uDT!Wk(6YƩ˛&֨䃕YS:m&/x@I+ DTr!'Jy>O?4s;UJ 0]'bavphd~l? +\ɣ#*. B F|9[b֪#r?C$d2 f+,XNpBl? ם3a:K9Sׅ 3PDM\)}sxby[=M2N#5lQd/~M@ZZb '6Jh+U$F.^axQc޴/(X"o?"cʗM)4ԃIJؼ>ڄB@}q=x'>}*M tRaw3P4yi~,G<ŶvgaB_S52BK>F $%!YMO/ݻRRաgu'߽mL8'YnǛs]'Libd]zw3"Tb?Nm"HFf?{Wյ}!؉"u<9"sY@ZYo9DDTwr桔ǔ1\rVn9$qs(2XaiL>Z۳m9)F&"in'rh[ldɱc6cݝ<J=[oq؛퓂8`yPd1/U/@?(Jw{gJӜ`;Q|7I$>AѠvCxXn10ց4i^g 'ʒ#e,Xвe#[XVPbر#UE,jKFd˃@ӏY HEDK,&LPˇ@Cn8ih[;eI$d:@b8'X{ wBnp Qڇ8tOT{^~eg x=!y;9$Y2`~ ErXrߙr"&V0$) ꚝ,p a fS8 9^q)%5V*Yt)XN`F ޏgQv/ XaB-(n~WM^'ʒ':p5V,㐁CNI*zp]0XF$|^!#0I쏏ff;ȌW佱%TC֌LOMV &OkUQ|CQT)"&>?ui+F‘-|3 K"O!RxIN܋ kNV? d|'.WV ,$I1rR dAb2b kdݲ샒ckj!`$|H ;49$=';pY3Ȳ $R,4cg4GU }RKaxa6|t;P! u-?uIB˕G{eW&<#&2gd?񯸀# $C1DK/fˉ2knajul4IsTx1^0јgC|HDuNxEKjoWfLy;AB.LFL6})lRdK; )vq.Gv0흷9 sFCk3h.b-!XBGxexTPwr3q:8s=vוrOj9M_+G4ETDdAUNg6$cH (2(3IObT}bbW'X \f$g Ȼ Ʌw ;hMp c2&뻳4caCFx?aD8mC\@?1{)2{! 9@Db D `HNb,݂ߓ\w yٝ7zsG{[^d{ xv7ꎹ.>>dI3q==(nω!>hq?ڕ -&[clhDe4lo:ýzðeapyec(~E* -4gЌ.ivBi}? {e8CbA'(!'I\931h- Ԗ ,^>&sh-~ pnvLp7pIzFح?fOf$w!9_` $M5Zyn(ۅ!Hx<)߾$.Fd$I @ْGJ]E9Ei 3}FfD'$7Q6o_s[ܰ{x|dhΆ^%u?*Sa+#2͖!wŜBQ͔ڇ;7]D[d>WKV1iM fhq ʀh/|r$єC &('PݶFMrT m' lmə_*Tci'4,ݤP-xռ^=-i}LQx{|tgw^c_8RR#/9q${73LXf9<_dzs?pbݷƨV]jT9qG3 rrF$.XwK܏AQ!+wq1im :IO"ZVso\/N`2)~3fa̡c9sTL@\k|~%)ua{ͧkT o+ a:ēğ؟sĩ$L'O+g|r k_ttT>0Ak+(">(Dl &a{Ͱi5Odf3;ر_?FYdt8?-?)Nm&ܩd&;XC|(d M8qo)a_k]+Où^vzTyS#Y^jPA(O:>Dv!L0ebLW%2f5h#i_MePJʀ&B[YV#y#\8KG(j JΒq7N@ w{H֘sʡ'+ @@ E90,0I2`G >'\@rH-À\beP$Q,R +Tcl-(0 !C!e+ %"HnP PR/bXDUTYeL JHe,;U$/N BVwgߝsK5Bp M*]5s\yӤU02qŠNͩeLgn21O `T|OXq OѾy?NsFU\oV]Kgdc,4b+Bw3!Hf C¶ =q3'?ms!(B,`Yر{㽛9 U&B|O0XP`"F*O?,[TJ~ϳh6 Ж?o%8O'?jiu:u?$NCdR("O*0HPw [uPyG| HF*ja<O҇PXBljiH=)R!%rm<aBng*I F,5hpR!}qY\4*&w A.W d5JT섌cZ]5RZw}n`f0!lp?m<{9-yo{r1I1 !!4oj/s,~W{'tA- VgGUT}ƦEgZQaQ?EX EhO4K6,$tZ?u*3.L ; XrL^z[C>ךe_'\&WY֡~ED\Lc! +!4RU:pͣ\Da/a,MO/_kp$EO0uѿVΏ5GejAKP&a&21Cj t\]C̲Bxf,O1 R]䌘p>䁗8ҚE#[Fؿ=|Izϼ;Oi===Q6+!``GeLYQ3od gϳ!B9-+ͧ5IR~G1?˃VucdoŞm;s4i,NjC RLU8Y:7H{)|1׭t<+o1ڻvLhc5ٙ[e0)[.' 0@Qٯy v l߶8Mc6]b;iw̆I+vS+a/qƔ_}=IGݵIBaM<0!sXjQUYmDFOa(j?7W+,f*-q0wAdzzxfbEͬY|Qh~L41|A%""Q,(G ''-.Z zLoZ~m:2Ăa-yAs S$PL9ˍ M8qBGnepsC#n(jֽkNɹ!upTXG-LYyRrG9I3B|uD݈ ,r llHܣ'iEl=\8"EX xXBP%ĉIù  *17sY)%촌>C7 < 0m5jּ uxWvֹ~3$>; !O^Fm;\A89٩:^y-sf-rPrZ?IYȼ\0q-s8q4`6ٖnS;o_|/sjn'{ws됻EW}S{7 SO{֭T̅z]k '_KK{DOq/ìުmv'@rJeB1{A N9 bVVѱ[VSZmTU!AAUw·O=P$P59ͯ^ gZUm 0)@`MnL{, 2}xć&~~XdžS"d]9\9hz)׬FR$TR$ Rg[NVD:sLJUַ qpcۨrS> -l[+G<}x~Rxp}g:"Z6A4'oחiW>hih_1 ,G*49 '6c!6sy)C8f{) L]^3/U6fcc3R'ߤ)H/bW2b@/=̂ 6V.E3~ۗىr[dv󛛤.[OL,o%Z8@QLC)0%f0TBS ҴAiʚU=寏M[l;DPo\[aC9 З6͞xmcALQcfXCh)v/f7v6^BuHx=ù. |%JP [l %B%Ld P"X$af'Xےh0ĩ $XrjYMIſuydĉC1?E;X G/YX"FƪW 0 "/&F !&iy Y4ٱX32,"Hjl lKBl02q |ye(zGN.Y@04bA*6 @7`:;SC޳* 0l 5R,=qX :y70E6ѾvM`[0$VrB &$:I㯽~ޝBsNf)R Ԏb59wupc$|zao[\,9߀HfFti졗;ު+uSE]Y|33gudfzj`W""IMiW&ؙ3j|4'd'iG}^FgܜYף\j8gܺp⍅1!q'sbaF,* ]#۟$Qɿ>n CH:qhCCc A{^^ 6T!`y K@_ !bA8'3$z@/Q̱_{m;B$ܰ/Ч|P 8[cI;AVK5c 9]z67Lʧ A C=A! r:4 d*B) 0|:/=iv31KH9Rp7Okű|_6?3Ԑ+r\&b?Ǭ'&[F%2ϏyjzxVKZr58NKJIޑb4߷xGsv|/9PRr3Ef!N~ms9m}D'99 }Z{R?ya䲸~j兘d$¸5fRz6$SȢīb_t6mkq$urGPw{SRGKhFd_Tc80|KSړx+pPѧ<]RǠoHn!FZm=mSLj*(a ̟TjLg v e#:nΩ1(hw̟lƞУ~1ab'zA 6"m(ttܩ2j/"7鵺T5Űjnp<$E$׶ {{)_XI:dbX`4A"qMM^;0բ3^TB17|$\)c! _\[֑TA.4+b7 &kvQN3sPS?I"Tyf`QTdE ZP@dARU@@?H$$ B)R,(E X @P" ` `H@PP#bPT $E#1Y@P1`D"Y$@PR,P$PF0D A AaX dD2#"Ă((EHŒ !H)FR$dD"R_ִYR VE$R#"adY "`AH  A,V "X $XE"BE"Ȉ )`R)`R#"H( 1"c0d)"( @PF 1"0H&" Y"P ((  $F,D@PX ,H"E I%$AEMU?U EP Tg__f,k!:3!EvLa!#7FR8rLOm38Z:mSݨ ).';jk3nI#o]HvÑj'uҡ!I>cm`~ą9UFv`2Ep[7 h$T4Bk$.\[[mHa:?v ]_POƩ7Ɖ%<ލs<97&/дodʷ]Jd%+> ̿$?%Q%KdN'C Y 5&68\(٫1^,dđ]G*8#5D"h&F[cM\IININJt)HP?S`Aj*A0Џ`skW\)d1b|0.1t@[76V]ӑ胁\FD͈ S9Uy"Ͽ!XHs6I[ C$m:zrs۟@L Yw];L ;D,?\RCmW&)շ& )&cUA0lwۮ>'6TyMV {W'Uϭ:cHy̓^kb|KWrҧ }NB izø &fN;_z4 3 \Mb(]JLi#z;Ib!P[Әm'TBNӲ7Y :H ;aY%{c|o%HCת{pˤ/Ύt$v#k;3 Ơ"ȪRHُ Cٲ2;Ѫ DsЗ.`P+ʪhݫŜkj5QK1CK b H)"`"@"I$A""1bO@>Θ HCbakJ^9(&mm4>RӓՉJ6[hfoĚ-xחV(Q88JС|1zm2֧r63 H _gڴ{l­\)BBhxPmk/'?sŠ9_f^4w20O돊*(J,3Ti?Y ՗&g1PW$=Ot)hk$As7ȔP#bs4c>vTlIlcWof{C.o=G  eb8ESTRT`B*>A^6p ár@"p1nVawI"W Čq3(ʺVgi+ߍp`C4tR|5-޷@\X rHϊP8DUU5y]2 -oh$ǩH3VȨ"@`$T(␱y*X%sćn7 "\I_ {IޞQ?PuAXMDU R|>I*ڇX8&q?:͗TJ԰[\ٸDxdGĀb&IQ(]Du7|{sTy$~ n(>*4~!OD|>xEX@ϥ9'쫦Hcg% +ز-`phY}~ؿGCV BOġ=OuM9bW4GZMCK>ee K'6=gE(N zb-R&SV>d5Ѥᤗ  fe}O0*KTaC>ϛc'cxY9?2X~_ v3-j>n%8\Fr 4<??m~|S\-;$AyzWs5Qb$ He \83nCN@ap12!dLSq=_d FA/$, iT`$to[v}H379|3|z!nޝs%CܣcV1a"슪hl7P缚цl  35}x,"FHB'AR-d@A>W8=WA2A YĮ\Ȫ]%RE5Y5BFM!n"u`1FGI/L88 "H*E&i#9!FpPVP~`PJT7穝\xz*8gc.%»wiDP(sl  )XCa!>h}h}bϱf 1a%_4TU=n$k" eÍש<1ROaա0L(WX\`"rBnlP?{ ލݪ%ڔ A$JL,! ;iWLG9=C }R(9RSAwe""f:Mfz2 r}IĢyjV[Uyq6d}A_ m.dB vbvy#2jX\¶h՝#ű @F dNȀBLņB~-Ôk8K٩ӫm,oVv˹e L˺(ݚ/--K*ygھg#aF0ĘjdQ$Hv%7d@XBPZUv+.Q [u=D t/ w Ԩ @>h_Wo5*rĹJ1mm"lˆP_+̗ucOb?T4@` H#s8A厈ЄR1 Y$ Y! 5(E)**EU"TEXEU+T"QTY1Q @QQUUc`AQDV2"(**1Q*EEb""DF QF* DEEUX0QbRw=+<\ݓK'ԪN6Z5XךRMwiYI~5xzD䲽. &В% 4dsxelFRp7+nq} n(J2qZJ p7"~I zQ ] LiA8qDզ<2 $.YnkB{y2)*zfv+N=ׄĐcAfIh5[6wFeqX ^6~x?Ӗt :RaA,:DJ-AB*1i/+@ @IE@ (`B D,(D "HX2+"H @b ) # ("H ,"""DȂB( "H ` 6'Ȁ"U@ U8CuP]ޯiR(gO6Fi'tE_)jDb'e+s )@̞@H?z R b/lp*V̮VƳS8MĴĬ@$dHh9gNrVŐBbGEBI˙{-sez|D3hÜ1aВjMZ8  &ԝNx›6Blz=QvC@^,oFb$,sSFQH\nخJ.=C,L5X3O=vGbNՖODgi8a3^=ak 뻯;/\zGˎhpCKL7+6B&|3h{h[fӍ5>9 "gθHX M&(%*ezCL 9/"v4ئ &b&Ώ ED(|YJ2璂E!RY ›FL:{0p,Z‹^A7G7*><҇̀H ) QT5c@WkG$D~uC=kąF$޽(o0 &o|W6!W~*~zXKj(9h͒D92KٕڌZ7[Ubkf@dA4LO Mf}gE8n`c^> ]bwr5M6VMe@gʅ2@ÚAf ԡbm<>Ϫw\^fOGή Y)8)߯GS9w^='gfb J3kF$S1db5!|Ⱦ dX똨%3l\9&%ڭNi#s/cPeT$& @T́Р=Eu,2OAZ*atn'@ys +@!$Gy®mHww7fwMn%ʛfhqlG"*s9nQdU+蘲 L/C H>e, Zj4AX1R-5 Jn< p(Sr,@n̪AEPTEbYIUV " bdEY 1dp ',,–sBM[jDb""UQEŅE,Uqb*1B^ d p0 'FDTaG9n= 03,!/N^I!|O /pCٸ,Fdi*Ps>0oLoFffgk;lsX_:/z\@]tu" Q>Y?5E1㹠-SO)9>Vj,D ueН+D vIRrr/; G T6@KpMÒBM~*n >oRL#!T9 nzxxY!Sv;ԩZ(rPفVvVmQ ـ(bɀRwI@Ǔ0҈QrӁ#$ֺ:wuxMI"hH[vTma+휰D`.0PII o5 1 !q(auBKn]ؒc+5bLb$S. Mj"Z,x'^~ @4WxRm`z!ycmC/PvWT?9}x*P ,>QD}q}zе"7]-wn$f)^? ~|,kި/uUDXHOMFGә|3,O"kRa4l[uZ T}2SmOBpd(}QQ?4L$؛[lakK=O1r>KvwCR!ĹPw냆Z`," )Ge il"> %Q{-6))jLJ_`TH I B-7~M'?;)Z"X H dUQ$]} .O J8.RL0F hY.؍kܽrQ>tS(6Ax;U(TJ&AT\P_Q=0 &Yz2c>m? H{ Rvd^]ߕ"o` tOD‚!A@Q_TD I VJR)D Z}' "BK*w>z%H\ yR?ihNGb]nAHޖ❎FmriAS73m Fr0lA j Vx3!|-.LF`>6p5! nTn.dD}^joAeW%>G"d* AB4ED G˙QB/82i8GkTP|?ٓ;̦CAP伵ć(ldÒ äSE!mO20CU acf.Zaشͮ?6ք!x&`/,\~̀lXP~z4! 6_wƙG{0ݱJڷ@p?906u _{!n6TG3S``wfPd 킠̹!k#< AA#`F!FAVF@8s>H{QWHIɘWOBvګÂ{BU}uKZ8=Grf8 ~540a7Hc,R1 2 2Cp s( + ƍ"oc1]L4Ѭ,l GRdP.XB$~Xq $G>0m'C6D(Rli-ê%Kao13T<"mz H Ŕl;B<iw7$HYek#h766"p`TU9tOPQYA ADIYBD $HH $H2# "HH ",(Ȅ"2* (H(HXPAI$,"HHH H "X B)UY`H H HH*ȫ"*Hv=o Ca3ץ*PxC[L>;7uͶ*ȉCA(dUT09 o?4;x}|YA.HNn# P!HԾ~ 'DĂ'AA `qOh7Š{s  t)AuEz YڍR»Jvyf:< @?SɠJ+F ?zPA9"[6d&fY]h l M؎9kUWt”́dI`&Q,."‹4fBۣN@H8jcHQ4[08g|r| #B( H B6BIRJ`áB`E jLT˙]bБr?xfn@ho3I r4(TNΞYć l;bXOr[b!5FDXϼ!E*C,%b4]#!D6xQD*[j&}4KZvAS! L韚w`2 MxG 7(itoKڼ!,-;yZ4\Zo.%Y9J ``lOڪ)bj:'FuE c7 31Cۢd65b H P] ݊` %HEҤ"UeNvДdGh]>h hRTqTÞ᨝l4/boBwFuҴH?|:!˛S< 066 \PnaDX, J ,$[e!ieVv1r]02La@.aaDUYuf5 bYNq@Ӌ_^QG j5f a24a  GOxNۡ"I@*0vq#0D-Y`ȃ(OOީHyx|,>D`AQ"D w)$$$~< o>-R5FՌR9(T]I NJC秨>6X @Y wz 4H\PXE!!Fdh>BO=HRXo+@=h&"HD@j- jDh"hd j! `VHV@ !?|HA=;r)N]7@7H(*0 ."{s'mbݷϛ;ЖÂԶfvZRY@! b/zUM-D^:>= 9dHk'9|Y¿=V`|P"xDlH$y<n SKꎛ*OkH JDv;Kb̨L*XM:J;M%`#LCl"l(`!gX<2zcd%`m+!TBJd]M%+9%C5d% 0d&m h@7iFC2 #6}'T "a!(1dĉ+'!%Ʋ+Avv Bef1}I11JodhF19K " 3* ZsAJ"8jTC kDfnY v;̝ȼ`X:s@IO2#HҤPӣ]ȴ8X2DU7G tO3zѠ X.-P6bNo89l5k*Ɋ|]=aϔhgnXU%$ BH(B LA*Xak< 鑨d`ĽHs*xkH$DB1pKDԛ?A~b v@(`aYAvnBq ÂkP֖F cIs͸d(4(&L1McSBDІ &FI~8dCiA !`(z-*)kF * (ATBSK7E>L)] @%& 1>-A "ϘIj*WlMdH'= k}rr'-Z 6=hwERHE\"8&g$BS %pI$Y!E|BpKIaRάciH&]FD%|Pjg?WE vxʂY{9^LZ9BߩR "+"`fώ>OP]#̣䀪k nvj9 éU-.b9* E׏ +w@p/HhP0 w@R 00$?KD85E {6.H )u=n * a W`V<Āy߹`yi|XO!X9 DS艫0D .c@7`b*6MF0$I$' c"_p<0n`R"Q" Qd8=<2z *防y,q܈TLvx0Ow-ֿ\L뇩G3ɃX`d[{Ei&r&gs4vYMaJ3bgdUUT,1>2UQ@Hz54}(,[27^ϭpvag>aNeӏduaORhT dE@B@BP@D"*p'{K8Ž-ϞxUvF#9!b! v(:g*go+ FHNńܨ)2BD&_sb޶wNi>n%1 LރD6ӝY.ִ|zGr8qz=PƼ\r[ڻeƾ>uiDֽs5A(hs>?IE7 P (#EQ ܀^rPB:q!:lDmiJFZFEE!I$ vzPtŵY 9U*3 eᗧ((k^U 5p4D0"[3Grvwb>|߇8O8Q JU/EQu9SFJ{Pw@rJ!"A&0a BttZF/+K!~[_] T|(9i4y}``h)7>D!3YoN0`uy Z xɞYIܧe3^8sXX(,E|RI]o=;ϧ3pe <)4:]x8\dַI>;" 3Q Vn3! ű׮\6`59 xxR<0 gQQt$B;GGӔSDT:NNM' )9E;Nm1*T:NQNiSR8E8NSI9M'bx&Ӥi>~qc"A ,Ϗ@Ka*UY,JsG󙌆4i ` K2t SVݖ01&YЮ!p$6(CLLHchBFpᯮ\ǡl]r> BDcA.YAv92c|͎s#rڻqwMCaA lއndq@TF&s":A)R*Bq- F}@ TCFh!!ʅJU>3 ~< l@$tUQHWjA_TT{A #7RD$H", "2 "2(HH J#iPX.zBTY`(b)$*Ȁ2 "H "!"b,Yn Jjˆ&MeY($L.CYU;5gwtӡIRRlE;5|?HICb! ֌ +%ꜯ7QGKÐCT@(R"\< INL<DBzKBP&BV9Nbս֝QYc-vf_xu "C!|R$`+Bb1I|FDSr|R{QE?n@쉑$ꀤxaV L0?*WjGhC; {)DXx-fB҈ }E  <eb3#Q73ÕK{t=zAa!Q}CEDOlJT$QjQT)t NUJ)>Iȋ# l;$8/t݃M-oڌ,7 UU5B Hi 8E?tuCYYTP*EETd8ͱb!!'+4-2 ~W)ڙEAYSaNH%8"u1CmM<!F A$rcAO#oDa̱D<_! 2)p}"MZObQRi?sb+5@&*Hɠ3FHjjYt&(SVƠ\%c&\'6d Zy4h)7zkP;m* !BJHҀdmr-g:k!.kK )r@rJx6[#a[U$W_~=|*z BAx ^qsӽ+gꂔ<+1 0}yO]Hs-VΓ`60}/:vw3`60-^|w>(yg@+ssWYu233h p>XsYv9}מepf`QwS#@+R:39.qIy!Hk-Ɏ5ʗ;QWq"q:Vǩy-7 A`;엓ut5LUhc1f ;[ VZ ZA2zP3 zFt(:z&wǮp@,z (`!+pPTM7iZP큹{om5M{K@ !j֊@@5Z ZVmat xQvH!4ak@b`m+(4Yh[#09  mͲa &Adb P+Md@iFYҠENAӡnZfU}ҳ0I&f6jGy׿>oPߧYwwYw&ɻR }wwmd/wv@>^U wZ>;^mm* >πT~?wATb/FB*D$DFI@RE ! "0PAG&_DDDOffb"fjkmʪ*m@UUU[llwwpm**e*ϟ><[lU;wmUU|*?VU ۹㹲m@V͐ssdm[wWUNݿmwqPUU@UP ۭګsmnsmVmUUnm[mVmUUnm[mVmUUnmmmm6jͶګsmm6jͶmͶ[msm6jͶګsmm6jͶګsmm6jͶګsmnsmVmUUnm[mVm[sjͶګsmm6jͶګsmm6jͶګsmm6jͶګsmͶsmm6jͶګsmm6jͶګsmmۜmUUnm[mVmUUnm[mVmUUnm[mVmUUUUUnm[mVmUUnm[mVmUU\w6*ʫ*ʫ*ʫ*ʫ*ʫ*ʫ*ʫ*ʫ*mUmPʨU[eT* lUU@*UmPʨUU@**VU lUU@*UmPʨU[eT;mJfmmmmmmmmmmmmmmmUUEUTeת[ww2z@mnQU|o`>mݱm*lͶ-EUvŷws(w7ݰ6ض~w[ww2}T6ضeW}̢v|obۻU_;ml[ww2s}mnQU|o`>mݱm*lͶ-EUvŷws(w7ݰ6ضeWUU>mݱm*lͶ-EU9mnQU|o`*ws(ʨUT͕UmP m**mmmmnQU|o`>mݱm*lUW߹EUU@*ws(ʨUTeyVrHp< A@(Rx@0EGvPkZ&ykDD8iJ#DVaDd.+e*Cq*6HjYAS]*@UD^*Նi -ti2ԶXҲlkk ŕTj-VRƪ-\DVTn[\XjWVPUjV*J9"9eZm1ȡZER[Jĥm,`2܅rF\SL9HpʩW`-Re[D[hL˔(卶RZ V+AUmj+*ԶZFTkR`X2l֕mhڥEXԢ(neXV6)YTKDDaYm-4iErˑLl0liV5[mZQe,TdlV1Jh6,mڵʹLpqerKZTQBYXTR-ԭZ FZQk 3)F\jmUITSDDA+e-)mTʕU(")R ۙO 3)mW(̒SK-i,U$U(30d/2`e PMJ)E*F*" Ԣ! @?=*&/%," $"H)IdEc$#"T+ JBD+Y(R$$@aX""H# `dB @D$FDDF0ak$AEV "D d#$DdA Q A!H $c (E*V" b @Ą"@EDR@ PDdQ1HIH@`H (,bHY 1ABVTtTvTiO)l P$dFVPXʈ$PDAa"H))@IF UY$A!1I@!ň@"@AE@DYDX@PdR ( ZHZH@IbXHG F c)-aRK%IEH(_JWg?jXmj̩kl7wuwy[o ַmVwm7\ߟa w}-rf\u˾l˸r㛺Ӹ76U޹oy㮶y=wAWy=\ʻdݩUbÕȶTo/6I)R))EuuN  &X,KJ% !WDV(쁈gURӫMS@`w_h٬zݹoƏH ,H]{x4YVv*oG"( <#B@H"wɁŮ˼s~yn+%}c x}Wu5QooC[-8}f3W}d$Ki"]_K'?U "yMj 袌!۱ݽ,(F2kh;s@xɐd.nR#ҧ9ߩnF8*.0h;^9hpy9—-@) dee5OP.@q應 j[ͮP,Vxat^SU޸2),[ (XͱÈXJ3Ċ o6>>Ex/![Vڎ^ o]/~>̭eΥ1 i#\i:R HA3*-LrA}fax,LPX*mK-+B/ ^>$B g*:AMfgCnI=X˟ESDH Fhg[8wO_b_Xk?km]ȕ]84tyswQAua}N# u6K2eU^<}X.h{r77Sr֊*RmQ9-ò򂝧jsB-:;=2z+Tt1<8F]bVh]*?_7Hṽn [Oz]Xuv>a9WZDݛa5i`Nǣ<'7}+,F6qǎx)l8x8z8eg ħZRpЉ<*bs{_k%v}6n{8%`Ax=0\(n(:&RI2io7w|{ 4wIieqI POr' L-Ug3^&7NU0Â7Ivst"SPh9H2.0$hJ .Siv HGCѰ̈́QJGtkY4k d -$ RPta! (KD!yXrNmi;7խYm'' US\J*E7TyAi+ /'kXj]a S<V4S[U# *\6Y!6JnY)޸,a`#g4v:jl"4i4h W| >>&`!IG7Xl~~\U .$]ݒhsUgLR67Wa4#uHwIP$L,Mr@;a[#ۡngN' Nag %Ħ2aaUPIEc^ ޚ*ѧTHRćHs4£!5RIp&i6X%&:[A ,(6JY3- `FIZP/V虆<+DJ]"Aqb]]-5Oor_1:iNµ%@ 5mԤ5N1vL ⠭a9 !C)PS59Xjn䣛8;d p6LӅD#AifcC&eZ׫^uMۡ FPF :)m$Hh4j9;ND9Ugf3:n]d1 /$Y2!@a w GtemUaõr)d6"dPSE Y T"nS$zŧaX e5@&!-=8X&ɦRQ4F:ˋ2\!\! 4KP%FwL0 m5r(kg8%XQxdZK V<,@mNKoeU^e8E,Yµ{A7s)][m`s@+# ?/=rR*&6%*YnSA4Zt6UF]@84>J*m ݤi6$v9>+j$H6H UL.5uѪo \ 6mXn6PY̹icuL'rvX )zT,$ MKDekt 4ЦW=[Fm`*UTi#T٤:fe,v4UJy揝Os;cpT`Me1-oٜ:ʹm1 $#/W/ʪz( K;[BDK3*061쾓9fFZWΑ]NZT].+f!bs*xTU3:Ѽ(u{y-8Υ\7Rٲi1*DYnj<ݫ d&m+[,ۄ /oBel˽y$hVAջۗH)q//;kFC:+e;˝LR 㴤,m*WjX+e"vʃaUJ]j챧dt3=:Yxy\Ne;+ktk}u^,2w9:'zg%w);2#K[d{qIV2f2wzE <Z(E_NG5d-jaUS}r3,c!oTyX0ŕDmj2l˪]}[{qCuok-n '^ӪoAՁw*\9B1qdetA] B]Q} y3qT~aq ve,'%nWv]\KU skM&'8U Su/'yy-_km/$.>a^I$?e,݇~7?d$ )"a$֊Iڬ]yvuhYi_cΝ?I[I $H/] sW/%et;)o:9CO6s )$I%뮞(KgO=;?_%~q.O旾]ߟQݣinպ[qwaQPy_,&ɮS]fW}]`Y_*|Fu}4w_<=ؙ1(,}LDs9kG?/O9aM4u z -Coã=<Ϫ$GZ$=3.?|g`H{z=m,Kw $vcgm߻N~\w.2ro6?#/wovQs eoӅd($<1ˣ#wqvs燯aog^My&&}fF;iWMv*6tx0=:wR]{uom|܎uy|gF8,9vmjEvu|0;O~L6ronee##ѷoYxѳ_ ]Q7F=zxyxpǖޮx|;4>W݇nqϫϟ>W #%?-s]^'/ww_ngχ>W4ozw:wDul3xy-;>>@tn;\>F}×_{ƽW^DӫCXQ#Ǧ߇юLw' &7;,c_Zn溧d=:=8[QM7?\i/XxyguZy\M~g݆iǏ׆YJ~j2f0G z:)i ZHCxQmׇr{|6gNχGtkW݆9Qaj%Ҧ6^/Ο65ѣggӾyNI$T!^k)xD%\(^ّۣ^OOF?MU2wY}w ^U}Zd:$b.ԅڽ$0‹b̛N6eve|VYw"z nأZOz{<;\Q<շ٣ ^J~}I-O06oӋ'N<3=8;hO<>/v08HJrI`ۆgoF_#ӧӿ^1ϥ;kXa# dӯ`pj_w99>:}==Zo5ǻˎ{xm¶ztv}^B[ ~8q5yԓFerէG/9ywʊ@~i| clkqҋ??饹ޢ(]t L o^rPmgu_.t}ޮǶD4VLr asnquVmi*T류kpCrZ#ΦT0Ӱ]JB/5V\1SEұMT>+-*j ʜa,⭷jlݙM{,)rwZiumBuĖF>Zw/:v ً.a:fn %CEO1z{XMJET͡b1#TwFBkNtȻl.uʢnڭ7vIf,K0#ufmUgo /W Ov);ώƜګ57clx臭VUSJ Ǧu(TFoV]aV\yz W3}=%oy-glZlmvMͭ֬~"v7Lg«HwuMA:dtN%#0PM>Xu]2]qه4K5SeEXr)gtRR{rɠٍ 27:JP|NfsHbuZwM$p1ٵR#H VX/]AT2͋8m$NhUu7`=xU>x62Ww.ĬfkxtV." j^cW>vNQ}=SfѡWܒasSwuJ\4eSc Uo>W{\ ڑqB_V&VI]}e|ҳeX˩aWΫ^;#j ƚ4:T3G͡oVઇ*n?߿*)%dX5~=,4}uP ϖ;ϯ}+~OVv{(QBYG·/){H,2Zꯋ>OT@|E5NߋH1"1v1/Dy\UrBn;y|Fv쿊>u1|H3ڂ' C\ş:1YnTNHg)Vl9mxΪY73W}}F{ @P?0Au  H6 HȈ*QE{OvHd8xPN) L^ A!L\A )JYƦUTֵH),9LP 0^'H}X~~pz@pAT3\Po[G^Yk\*4SwFQ00S{ 2uq7 &j藄 ):n\ʚC S>,&l8Bbl mCN`E-}f ]?`×e%0ȩ;[:r6ZA?ϗߔ~# :(OYVPza+ @2Wn{W[Nǐ @ʰEagvoN𻁰npb~~-Ebwh.ӽoPÀ|~'/Z%TvF;ciiӷÉzE%6lK &46c- km֏e߲}F[\sUUUUPjI$a/j%,c3,c\2A1☵bF-(`#Rۙ1# IQ()mmDS1Ug!iRmKaN3ȫ1#LHۘffb&LTfab$PgNm.@QEHOѝ:agWiB n8ƛD:ɏ|lMa X6#|`!O!XߧJG :SD50 hh]kkN{j741TA'q`iR:}3rÕNAJC(cc# (̫ZӯExO<{9&qm(a +LG.`L&HNI:惌ȁZVh ۆZ{&TkU+j*akzًCq?7TǡÃ,:6`hX_Іut?Vtjbe cE LMCsb~U:a? $*3@At?/iɐ:×v'?@AM̫`ІAeUp\Ȫ, (@P$P@X=gۮz寎? _ 5UsQURmy@~?oojتwsTUWUUmͲmUTmeUUPVs9s9sw~וmj*+mP ۸w6n㸳 nnnnmlUTUP UB|UTPUUJUPpٶU *UTUUAUU*UUӻRwRq+%R8_#Q+ h(v#v9;A {e/&}]۟W]U= ]VYFP+yӾT *J] {a:4ai/x{|{t~8 Kue'+W3b 9 o}Z .l{j=ve۬=]z| mמynwuUU*CwbvV[Sr_m%4Ѫ(YvgΩ<4woI8zɽhe]}%x $<nŃ*_fɤ:l{7J> B͐U=`Mu]: ypߗ^}.-lV*mex3 Ăs+h!u%n  %d]^oNGnI2cɻ,`w<$cǺot]ݙU |8#5M D2Nޒ]JI+?hğ *tw[ݳ mUI$vɷpjG @h'kg+ztǹ7tq8ZNY:uݮzKݑUpyL -V/᧳3wª;ӻ}{2<.+l+S@*U@UmW6nm^<ǟϞ:֙,/PP{y:9]ؽd( Mo{}{Mle|uUE7dd M͓^X>$`SoÇ2N x*\8@ !8xlRotOs2`2nڪA  ^y^yy9EQEQfٝ H$ H&b-m ͵׏<6նU@UU@*^>\UlQmL4c$7vztwݏ" ^8P R=yp_d='q7AU]|!wt to HJIOz.@$nmVQ$I$I:I[y]dI$I${.C$I$I)wN*I$I rW25Ҫuw=燙*ymʶlݶUU* $8xX x~h֧a|dnWibD2PPwaSU(ͫu *޻O'ƻ`*n97j^`E$ܒr׃xOUU@+m>۬ B$d^:Nr;fh`CP w [Z&lח4$!8B5vF] 5|M E`|3}TIyM5|!s;fDx.7$G΂76I5%n ̾ }}}=ϋBUTm6j$I$wt\IUpM-[ݒI]!=ITxxlRcxZ<)&Icrz 2?@ b`'K$Ìe)&EDt6SB62 iTZ`0B0fp2>@"]!$# Sc=j+jH?~ڀKK!@ToWm޻̼UYwUG2_vI$wkUUUmJ+jVۛ?mTUP 7777wueͶ UUYmlϿ~U]@mWywww;xm*ʶʨUUUPUUJUPpUUTUP@9UU*U@ mp UUeU@Ux=6|~Q9P/RY9U`לNڳ=|)ƿϖ YMVGz"¾T-4YC28w7|O.6L өO= eRX;)B0NM6kTx,7a:l۠q۾=O ͸oާk;uSDA& 9@5/F*!izIϘ:jTNEE)'ADUdT eI[jQkF"(GH -TU 11iQET:Hf' bCH(i1EDDDH X1DEb"#Z ""2 P7l 9ܨ`EXX!U$(XVRT] cCH {F3Knj_Vu_qMey q0{P;W 9/|* );]ƆB}_^ƾj5܅v&iXm.yG>l^#> @gܲqaLHxOSN M[uyb%"aV1)j_~~<}52`#4Ha~̕@%Ǽ hJ>{޽5@@+mڶ#޹{Գgz3K">xp.Sx Fw{b{ޡ C;5H,C %lA#49lr@"4Lf8\# 4,3 % Lu `@_4:(6[ E wII"9fL0f &+H´)o|}q׽K9?A [|324 ۜso}۝xah(B*WkrF/)q_?_om([ml m2|nh6Af~}" xyߩw=۔v;{xUvo.JOdW9wٮiGƳjĹ13-HZDN9~|ow<-:!P2cs;~oM{%2BKF%l87Krg_f٧b82`%. 6A >?"v~NkJb( z=~{LJġbE*%-lNoM8N[n2~&w?>~sgJZ2 ؝c2 qw $w{ Wno <<͋nmI$I$ b]swVGS vLk@u1"|}xx<,f`NϏ@Xt$]ՊWgrY;/yjnamFD#![eVe篜 Q @L,7νDK%!26׬y}sI4Ɋ( &%AL ٟ}-|Gx9>2Z7lKٻo!KDir1Vl޹~}SLī1>0@`(2I 3_LlG׻A`m0h2ws 0k?hQF Qw8E`=$P?ߞ{UUUUUT̀*mͶUWtI$*Id3 (w A@$ݹiKaTMT{};y1,J4) Lhy #YE Qw} j," .`{9~۽݄:'RC4&N0ݽχsW0nfh!-GZ3ﵯ~y̘'FKh؝yomFzQF]VMvsH&= p33@[r J#9cY IseA@$wA^/+)?(o~ (͹lI$I$OwxEwfn֛1 YKBb J$,UXcG#&k;f.C`|]Ѱ߾ٲ#@0=# &rC_Yi=C4ߢ;Rbٍ1X]`0ܸ'@A0(yUl}>7q$@|I>'}> $R⪚7k sXʜ̻y)uU8=܆W-qCLP\DxDEf5"`=rZKݻ`,M@~.wwUmUUUP I$%_bgs'^O4d?b@n;5~wʄ<0;Dm v]t{!7y^mέ  <Wߡ8X .7P-ĀFvۭD8 %3{տg|<F8}S<,M.^pIwv=˔/>+UKzZ~|I= W,f`|M?fF޸A@#C@҈~oG3UmͶwڪꪊI$I$Ny9"PV>W~[߇]գ=} 0y9K\O_[RA%<ثkw{0ּ̹K'R%:wsQ)k tc L4eeq24 4HWsNnl}L$sܽ w5mznU.fXBj %fvqX8.*g}d(k 5ٙT=U.6 @ Р:-l[lUTnʪ=}[u@Q$H`X x,]~ZgƟ~kvfͦQjÿwn|+gJD~=À!, 0@[1d}L|dq@Q/LO8Q"sBS^[˸B[P6t[(keb`~I{a: G^esaCx8` IFgO@`!2<92hq{l:10R^h}eD|/ % aSۧyZn}e< mmUQUU_~|޾z׷#bh @vaϯkz')vt4wLӗo.t&.3.uBw5w+ɴh|;6s5$GL{e} e{i ? y2>!Ƒ@v>E172 SF߷[FGzBC}^G7@D D b;$lٻm^nn6U˼ʪ*_}τ8zH?:I$X\ݕӳj$M'ycY}5|xB,> #U;>UD!"+3ݾ1ww*%Ȏ2e7o޷M;FDOј؅{6 .~ʸeVhpFx9u۶ᑘ !mmK$3Q@w1nƊ` dY0nB)>Ph*!ioHP@buKʐIȶ#PH6B #LtQ|Ȋ1PAV 'PfU%[|^JRx*%:r&S5UBMtlWsӻmxq6mͲ-wu* [nnm @[mʠ+n9s9s9V>QzV!fxf`÷[\|qL^Rs\uVn:WRVefeo2|{,+k,LͧS0a[N 6sqŴh ɒZK#Y%`)(0AрWy^"R _ es&A:N1{B>AU ^7_]+y j2GW[5u{E9L tvʽ=2o.Wܘ(Y*ԻU.χ?ـ=j_aM'@_o}xbn7[L7^4pȽKeVc̯rw*5ُ4f kQ꬧h~օNE*=d5RՑ?_˹Ek'>ͫ6'k:yb(nz7eArLn yk$A Tn@{t׽u7{ܝݻ6e[U[eRII'q,P&VW x5xh ^@MzD\?J~q2)\i68,HDݛ)< ^̏ompB">|۩KaK}UGl<h&ǀSV^FH780 7s*vR% ޮDew-%1ރҒQGh_w[|E88h/yTf61=R@9v{~3333UPlO7{f@pQa|o~Bw v <3,_Fgmcm'~0[w$_w4 zH[3@ HK_~ɨh=D D萐"My|ϣFtsZCĨ$K  B@  /}|>Co P|;i:/B@ ! $$H! DKgכNCgr17AH)R @ C(_cv> yX AdE# bAH >o$ތ@!7I/ BR~h?#~Kߟw~;'S131ڛw}%U@*{/EMb]]'抓^Li5n>40X|^_ÛMyQM^vfvȏ<(~H AH,o ! 87w'R AIR Aq0$<7;naR))(FϞ>|L`ٛW g&d {=rWIn +Vs|@#2R AH) P~R AH6Rz߾\/8z>R AH) C )#.5L D B@!<Dv27ZЏ!R AH,R AH)) ) {}5>AH) {%!R C:߷I} AH(AH)rh$A]p ӷ`cmٳf1qێywu@-emI^KFƀ ~r}J~u9}@*ںk~;'ߠR"?!y1R AI;o[< G'3`C"@ 2Ts|@p ,Y7w+Q`Us"4@ C"RH08 H?+|Kǰ=dP$X E`wu:6qO~" H,H){Ϲ^|>w^|A씅H) R =w[w>z( z dHk;.og>_A`d)@ٛ(cR7,댁30 H$Hχeq{35UUBe mww2$ջ8]8D Ids5!;v޾z)7s͙ť0 !Usq/w~O G>X n[޸ , ,2 );~q Xe#O7wv5W:Iդxy>`( A@PȤ:7z~͝s{ ,)@g}=oHT {^<% dXn Sl Ew@R萨 AH( C}x8޽dR X  6hNt̍|B@ `=R ?T(UVʳUU@O몪zR29k_[߽߱~3y}۷mAGD||>}7>>xɀbAH( A@P.!־_>Y(:}מstk'A@AH) AH) Ǟoz։>G R AdRou۷6Ϻ #1 |%!X]['6+ )H/]MzZ,rz B *Ct}#!wWR AII) mP.~;]ۚD$rKH$m!XߵC A`h 77) H~Iş__Ym2n_ffwn̛E[m 9^#D><w[6y{ci]Z״wn}u}:v@YH)H YWm1$H!H) yoy=$ĸH L0LC]FY >y#CBw{( ;|װ@;`)3A) ~~i AH)P Ad<=޻i#88b  dE `zk]AH) AH,Hq{[fBƕnm $@H!56I $5 E dBR "~Iϟ㿿m6ٹUU@{x0"^{|X[e{ 4t.Ɠ4v$|U UBUU@@9UU*U@ UBUU@UU6mTUTW?ן=﯋ϟ{楻\@̥hR]0 /P\5u;ni ^@8XE1v_ ުЖVYi:U'-SmA`+(`sݎX`G=ʣL]4M7aɗ.lUᣈmb)f01lǁk{ *oTi׎1IHxzzz:CB:@CFb;L̹h@7RtXI%g2R , M , B %},'ngJXb**s_-bTKeY5.j2N 1PCP_ZQ/ޡ5ܱwh rDdΪű}{Z\;VkҰFt77z&5{SѬ׵SSnwW ̔>oNNQtO֙k#+qr)Q,VwRC4MF‹]Õh.ma :95׮_UCx&WEQN¶axje燼>}ݻnIݻ͔w6U@ww{i24"n컕.lB T@7iշ/7~xvx< rF!HVE )!3}zld=܃hNm! 7 c`)[y !R "P0{}c{w/ hX=-Gۙ]@4:E,Sɖ~UUJn6@_"$J Rć8{ K 8 MO'W͡<k/?oL5Z?*\eymj F*YEKBڿf5G1haǰBf.`a /23084HײO`b ʽZ4 I` &(1y[2GU{M<%5#&d@ [rn@&JJ]BN:v^k ߿~Z2my9-!UU _=o6_7h`{ŽD?/w%ޯ^Dv:OhyI w}ֽsjn`nUw1sK"a!M\Hnu 1d kz:t&LZ!v-""+g<>ՐbaDlϫZ_;fmw1Q ?Z or1CbIC3ظ9ɫ̪ۻ[mwwMP]I 6U]{tY;WÆ$'tTz|I,ٯniY32&3Qgs|5C2eΧ:P5{vagd: 8-0 7DC/m]A BbmOI6Ϯڻ֬Q W|ۻyݶd`G;3#‰ӤVF&:﾿Vo|8zl giv]yoy]rGk"g=Mx`Z 6g4pk&.!g7v|]ZO}؍vhhaw/'i b$30͙w9M"s%M$>l3>*|DA ۸of@f>m/|Ay.wٟ־mM&kv"""#靘yٕmP*v@"]#tf|{z66S8^a ĿEYMp^j4Da׍PXwns=UA *tf~G^4js>㯷<&͔h Kn]|Q_.|ysNQ ɉv'k.Z| e %>owd>Z0t H¦(6{y4E?v{MW{pa!ۻ>&|?<v 5X`=:ۼP (ٻBθu hB&{ fno(̚(KL]f8ʉ^p:;A sW@0ww3f"""fffj="UUA$&/͝(@ 0?D]#ci_-3| CAq] nfuhYz܇2jT`OƎ^ɣt0{Cfv1dtl[Ν+m+;L #tFwԆPƽDyVPXTr'>Y3p弻{ YtīS#H˺/`;567._<~YUJ۹UP=v(*n,E~m@Q3w;r c S=ϜϺir$lKe=}ڈ#pxb{u3-lMY783jzO8IMy=H qo}yb@7cyݻf MИE+xڽzJ@H"ټ!p̜02;2g2 m <6@I$BuN1v 8Rɳ}cɊ r]0o`&LPs3*-atvoɂf{}qqѱEb(χQ6U84cDa؛xh& |u9I?\ %Ԡzb"*ff#m[w9mʪI$$`WL Ce00?`G $C(J7o(?@ Pe$6{WH@2b uϖf^b ,ˉ_Z955qbin\lR6O|!$[gvb"ow ff.:oz#Pb3}[{i@[] 8^mИ"}LDDELUU-$I;NT?mf bӱ3r35 bSV-qft{} ﻤ{\"W;twעW@0L !j#i@ K]4C #E{Đew73w9=F,Ȝ@ |viWdD{mRw ~߯NwaχB,$gQh}w>WnA[\(<eO{þf7Yםݓ9 *i?+Fݍݙ z,~ א{  Y{Bs,+;^&fjb""*fhVnnmG+s3&!K {C`/g "N]U^R |fn[v'ԉ$Dg}!d,ӵT$+561 ؀vLB&(n8${3jVf]vc{Yh.`õ]fz_ԑ6`ޗPUUBfUnj $i}fׅ/ }U̕°To R6*]Γ=w6mfgwQa '^k^Xfefs &Uwޙ/ٟ@!{ls۶#r ^72k8Az1 Wwsr3*sf7y0, GCM!X`Տ˼ə*ew6$I$$V{?}{OW~ҽgb-]u};}:]nn3BF/-1(v!hEfd%dp 3bUU݋"UP1 `-rs*0?0dX9.;k_sz;֜Ɣ̧;0;LPn^Mz.;V,53?NUveɻwww{w*33wPm {~w}߷#B#cP>>Fqł9Q 0S;(0'P4{u}9 x>s{133m@UU-mjaLO$QJǾ{ fץH$V@)oV;U {=ȶDb=ּ @Ew}e6 3/xz9 SH+PԙTR pe=:n@U]۽5fGv:b@2`ݮ7x yr7[r9)$@PK!|VyF D 7|pA7PPFFDq ( !NuWVF(,c,,9_n6zow6]ZUVy炪mT TUP qTUe[eT*W|ʶvvμ&Y 沬qC7{z)i6N@XqW}q:=&sOjÏy" Oq6o{A(Io~`z w$tPQ$詺quevT}#MqEV3wٛ;Ia8 1Gyy.:À̢}~f.$z4WY65}o|^m V @?\i̴lܮ{E õӻZJEFm\nܝ$mws/<6ڭiUT$=}fL,8O|yOQ@8/;K}{'|;|c&ӅSʞ)qX>f_2&.ۗC %ot1('܌LDbFFl- 30F0!ـ76 e탷 5Vecs `j>Uvo;^5np ֱ 0g5y;D+mmΒI$I$?a}^f۹{]x$QoF,Ͽ/h~* ሓ80l_wu ~u ߼l.1M>$Xq; {5v3-҃{[v3^{apbQ)%ew5V"b+à)#*wqz6Dnwjq%B,337Aw`$:ݽoH~ywwʭU[nx.m+ww6G~o6v^$|o:!NM۽?ĔI>Jt;LM}U$"3TBѕ3wUw9n4p!`C˙Ԃ[u3{5]h]̪|oHNεaFQ9wLML i]i$LwscFx}^.oUTV++mmUP㮎uCB,k x[0-Fxx\Ǚƶ++?E : z R6nvx@Uߞ_ Ddn̝@#xPj˻g&&vjځ"gP(!%8ӹUsZA n'{99 @TEgt!탟o7P_V**ͶnyeT߿~z_ٮuvf_&p&2XhUeL~$Atܓ$k{ !`Q CY83&(5+cq! ̻8D zxrٹ3HZ`@y Ylsm݉۸;/>yu;mmmTI$N@(>Ǿ:$|_{.{&'w/sSR{èy @7QO@.^eVfG{`Ags* ?*{@}kNn5@מU`"feVek,B` 쓨nۊ\f Qgk߶U+ymP*׿>ׯ๞ KE*w˯W!$<vu[&v ع|VɫGa@myk=иtAxٜ~@XZ͚!݄x,qf]Uۼ%LDUw @ 4jڭ뗐/ 5ތov0 /Y6A(0wnllc<:Ϳ}U*-w2UU?=?=v>%yk0 8?{*trr?s2  +2biNH$w} Ag0`=UY<4$Q_Xs8϶dkqP 13."OzQHͷ"9"0Ve^P<}۬c &0Cw)=U[m+7ws6k={?ϽꟚʴ6>T0bh(Kܫ{,x  }w3L ڈ=P0]۽s5UDUG8UU zbb̙,;DhF3.y< D JZB@BL>I7R>w3wYQ,g_ffjUT +mP_:wPz|#C M?*>S^>H-J:G{8ww3yxGz^"j2zO*lNh(<@sU{WNv3ýf b|͉ې1s1Jř5{H$3H@6۽~eX0tMpc?qA TV*j hdU>A{@C")(U)jR ^StN@fz˻6,,8kRou?јQwbq-!:o>w)UTTFP * ߻vUU@*sslm[nnnnnudm9s9s;)n߻jۭw6Ww<x*ws;qPmYVUT*m@}UU*UTP*ʪUTUUTUP@8p r*^|>}ϯuΫg)׼3{'77̢mQszDi$|0CBػ c,BhkYet(jNҮy]D,ˍJM+}v=m5]R ̠s8:b=U|p^Qtx>}I`@/;(UÃƂ/# (" 38aON~~UVʩUTn*WfȺ/3u0}B6mgljS֋wUSBA W0toMU<a f&9̚H]7E}h۽إ޽fLz{֑V,ٙUr7XV4AE'\Hۀ*EmwYF)+u.uXiоI$mGsڀ*I$I$bN?</MOr~ u{U;}tqyte mryZaϣӤ`whj2g1@ES%LU8y L{{"wwVA |f#kX{3'23m0%ӽ7o@Z{DqGohϿoۺٶ@*lmmUT~Xw0?ҁȣU}z= >tg>{ǝUU@unmUU@Jm_㶏֞Ճ x@wg{'ֲGܳ v'Ƃ@#UB吮gtxU x7dO| lEZ*_]7w#+1( x:nfNduTۄ:*{ΫsHcffnR=BICܻFhgJPfff*fffmUI$I$ ]qk({<4{=Jc>E-SڿqI%37{֮/9E)}y{}{u߃2ʠ@UUS8ff]VmM"ȍJI$ $fvi `A$U뿨2*{w=,㆝wu]޵ΔUUUߚ˼/R !$I3ahC+L`HR)I=9CF[)`,썂*Ilod++/,K2U &n^8|}߷. ߧyy盱Ͷ j*ssl*6mUT* ٶmPUPUU@*-ٖ/>w[mڨ<6m q̀6mnǞ^G;*ʶlUPmmeU*UU UU@UTUU*UU UJUJUUUUJW}z˦Iu{6UK: m+NYj}0rܘkpXrhث!#)d}LS^qe䨴atʹW!ĺj)7*Kɮd}뻾u\}y9۫:;we;Fs7i#^vXvsq1Krk3F>#9pWJZh7W.T{N1VHJ՛ě7I&wִ KAb삫<ۖxxlڎu@rm_ ݝPh5V7qiu+)pc.I$wu[*mmeUwwI$I$aFUh?uy Ǹ#0)$#qU;={4މa Q^cޕUEQVj=gx(y}gq'(g~^01UUU|x $I$=ڊ*_wx7xUEI%vƩs6R)I [z.؇@{4dI$F7npyd&UET_!ߚ}ϛwU(emUU;t3rsG~UTտT[^yb﫳 ۻCT I&ܻ$I$ ,˼ެ&TUUU~sUUbJ8{ߞ}yyַv*yUw}5{q[wOZvI E!9~σZPʪ߹s\I"I$z#њA$;'>uF3wwwnɻ*lwsdIؔ1g׹C_ ߟueԺŵsi#Iw{]U KAOMI?w9i$3`I-mڭxb7{I$I$I i͊;c22$I$Ibn5^&nUUUWw{~N8ꪊS*߾ftA}آ{wUTQUO/} ƊٕUTI'g)q87}DDELe@+mPnUI$&0;_Տgr!lZyc}:ɘ x BE>]-ܝ, V I$I1?bI%$K]|ݜy$NPٛw{ZI$Ikn{UUUW{fEUUWs{uϧ(sUEUI$>$I In6I$I$EV8#|@ ĒI$I$ռYUPw6Rۼww7{}~x=߿=~U3wae;n*.cyYяxUUUQWw{Z^*pw}߾NUEUUPy:<慩I$I!yWusm̪UP*0er޽mlZi%8zxh/K>#ݿVלmWNywic&vW$I$ '_wI$I$^ jJ*f뿾q3U.QWw83H@UQUTP_o^'~}cD{}fUUUUߦn)$I$I oL]D]I$J@igݻQ@D).U~޻N95ǚUUQUK{]ustʢܖWw{}㇎~eUUW~3h %{LL5bFݸD\ jD:DEu?yv >lT?f/9>54SӮPlG]CS:N|?<ߕ[jWs www[msP owmsl*mRUU@ ٶw7ys9s9slϯ<[mPUU;wwWwx;w[nnnnm*ʶʨ߿`UJUUUU@*UU UJUU@ $FN2\ܦyuUNw7ʢUeDJ;/>A1j]C }7!5VLݵ,!֥:SmR=;kj^*GAz{1^aՒk 4ΩiwDX] LR J moQ8Ӓy!Cј8_dw{of_ev x:Z~_}]_@22;7'vٲۼ˺EUUUwwI$ݝj,|`%Z7ּYpY֧4wY2OP$IN-sewy8UQUUi&nj"I$I$y;wzG}zZ$I${a/'~ID(/۪nrz|<8;r$Ͼ'1D~HdIn]*I$ $[;ۻT$I$H%\ٝc{I$I$fue6#UT^}V"RA HSUokLA|vE!TXbu=wߜ3رb$A @'&%UU_o}y'f@UUIfW;߽fxlm$I$I$}Jb~gP;l[I[] 3u]I$ܭe >՝UUUU|y}wy7ae[jI.n@$I$($w7x3BP$I$HVf'vz$I$[fm]i$U߾}svUTXM}s9 bXb1M~yZ,Xbŋ)K;v""2""*ffjUTUUՍ#Wcz!ONyw?BR͝>bŋ,X~=}@x}zάa5] {}zTQEU;IK_nrN GEI$ $I{2&s&I$ ^bnߢs+I$I6}$I$Afo2I$I?rwK8Wݪ޿?ߟ|߹U@+nseUmtJ]_V?OZxf}뾖uήU@.ry~WrmkkI$I%Z iUUUU=+Y犪QOWUWy)&f{RI$A$OUUH}vI$A s7omH$I$\.K4@v $Ihخ߷b"fv#m ͵UeUEΝOE{ni\~`w1`ϴJ^7̨{p esEnퟶhUUUUu߄֩I$I$J3w$q2 F%UUU|}={]syL42*~~n꫻2*f`uꪪșܽI$I$Juv-?I$I$ϫM}$|}|bjvVH} aή@UEI%ߪXwiaY#lHur ͒S/lmU6TJ6vI$~UmnnmWn߿oڿEUT76ʀUU@UUmͳeUUwwwRmmeUF۸w6m;wwx]@ U[eTUU UTUU*UU *TUUUTURUTUUJ~{}sǏe+s :3nx[3ծeW Sv靱Wjzy_BL tPrݞ˭.=Ow.3k-+yWh16 Y@~ zxp=5=K9 +A;EmTt5{FFz63ӗy ,чK/ꓩoe6׫UO$x[r߾_v+}l-K$Jyz}su=UUUUJ56UwI$H$R %=W|sC$H$I$ߪoƼ~$I$I&}:wdž|_xI$jmey RD4kT r {MUQU:i/ ϟt.i },K뿿;w򪊪 ~OpY~Ѣc@}l\7q^ʼ/C0OURt34got/쑉}C%gS՝qC=ڊ.u."ݙ>#wUW3R ^M}{((/|{}փ-(Ŋ(>kzν~7>ԛQEQE~u8㌞v(Ew5*UQE 7}7UK O7?~{mճѫmU@UU@}ˎfW~ 6;i~w}3.סA$r7n|-[TQEQEѯ9y߯pdUEPQx}}| qǺ=QEQEQuϺ;\i=_(eQUE{٭k<}qQEQE~oqz((^~{ NTG{E\EQEznw%E"H$ =k((nDTߧ3|ĚʨŊ(mVeKmͶҪm*={o>ݎTmnkEЁ WY޹H9p AAE]I_} A IKmgڊy=C\q(Ŋ(ww$NQEQE((]uמ}y"(({7k^A IMݓwfww@an  =}n^ۊUUmwVʍ nwH!SUV{CNhy梊((}[-]ު9LӍEstWm= AI 5OoK9֎Oe̜ȇK`FE;@zstk XrP#ΐKHN:,تcLvcxA;cth5S  L@RPPK9 Ph0@u  4%ԗIN^DCPۻ$#^k(h#R [7.3-QQ4k d -$ RPtPd'4t tT2' Ð|Zw7vYm%x#d lAg jfh[l9M`Va/EtO͐6bݎ(RF1 h)Sm)Bl/tY6d;EF[:MM:PhaN&i4UV{5ad qTp Hb.1wME}LS 6}GKt#IuHwPXM`Aj a-9ۡ%' Naep%Ħ5u0XWqj) Z6XP5M!EmPz#A0, )1 !֛iK B͍U%QAP9+칢&Ɨ{pj4WW{KMS6_1:iN­4Avf)4VMBMKOkl+ 4@ѨPZQvvld*4y1 p6OM,3 {گfcCl;SBymV/PF1`&iٖ7P~@ihȉ 05W d~EHzrF T5ӻ HC5xK~5/sP_@?9Q6߷OwK?Näy9{}c!!vo_qma.h/vGYhօZ¾ܐu4YՆ߾ϰfRϫ"UUUh]25w=jQP1?" Ou Ϙ6ChϞZ^ӴK}k_mdU1/'{WV#IG=7 +?~ϙ-⊣s;op`a&Ƴyqw}n]{Cb:SVtoTTUUUUTUUWdje*(cƭ%Hʓ0 FWm'9h47Pc=j`ۮE {&&3C;ѡvQ*y'i+U~=VDHzj5~C "Q [ .Ԑ/Mdf2&y?XnfcC(?}GO/EbV MVx`OzywejUǢVJ!U,b8K2%FFQAQP |O/m2Yz =/F_f*?sY9?fjֽ ]<.O~&48CFA0]_jEkyk%_Q~FÁ7AZ8љkɱ(3n A ٕ?`A bP^sF 1 .zb7yg'Rr״4g'x>̴VogԚr_.9s6:3/~G :0S ä &N`^vC&| QRVgGcC204IETI!JD2"x;vp0lVI`KƢ:o}I0/p38- 딬54+7]1ko6&um&+6&w0qPZ`X:ܪFUBTcz鄒|?~%~+ABI&\AT̙<D"f[mO_hP~.l!}>9YVh#+r9 H9~nsX5pAS!mo{ Z&uذ3&8kE;ؼzS2#fOQ <~N|C$/DUD-b(-I.J[.VU*I8<Vρ 2Jl>?.KTaa'do PS +XUJH$ϗ8c N!2339\d-m٤Y- "n7?>?*vP ?^9;Bٿeio*yJw]Oy~_sw?~UW87/xg{ꪧGT.ybݜW.ycO= B f xߢڇy'ƽ밀6qJYt30tC07"@ Ӵvvoj Zij{O0)Br&8*J<4S>FH/HҾR=,LA>&ъ˓rkL~۔O(Y_YY̰o(?uX6gXW$|== hG!>OǕWl{Ije]d~g NOkGdqMqʝQ a IL10 2"TˆEkN闯^k[q>b^K7?7u÷'2^_#Oz^xn(;BE[OvCaaaJ۬qׇmi! R8ֿF2 vDhl~ 8<,=[R7sLX :!`~ :Ng7;ljǴӎ&ޏ͗ґE p:1YHOfl |Χ?I!9$hwN#iIԽ=QL Uʪb**,bUEEUb#UU1UUAB***Pp;s>Q<=(T'5@;m*7[5}(H"+FNE=܌Rg Bz;ܧNfz<%MP$OVC-6sվSpyNLn%cf8-P ' 4>0>!w4

$:88X:>_ EaR?*b(ХFTlEl82GffƨD!KZ. ([EnfJj19 ;?UbZO.??7_ط\Sf $Ѐs?~-^q $s ,4wF~Y"`Q3 _ω6˩J7XfYQ\-YuVLG)m*6, ESVpt aeL (\1)rV[t[Kf#UALWyr-* HT"MIq`=F4X@37@0<)Vc;,U Vx0δGL :uy@ԁylv2uiBa;^ЮauBD7zi)=chSa I<̹5˳qj4m"ez!.\2V͋ KE&~9s7q5o?=Վ=ן>I!$/V8c71t%g>(3 BVZG ,mZߏ5 `v#@wbdwO7%)w$"y8cyӶoVI$z<;I8JpSI巠M@5O _PqH0'S/4v# ",? ):1ĐF9Iv㻵lCRqp8ikJm|?Yn&_a(;KrϬܟjzs9 pF<>Q݀i̢>'F q'\ .lܼ**#bd:+=᠐L`,+QEGF ߩ  7w33 ̫^fff` q0[ an?] #ᄬEmݱ%:eqc?hBjU@[C3>~Ύr`>vișO'+*vSC8}f,] pj&@6Ѻ#D$5@W&{LptlKt5R"چv6 ~3m3 P}V0h 7ká4~Y07aoJ@~=^~i>l<X@m?jQ_}!tlFԆ˻-Ps%zh/Á5n[.Ng{Z$݅]ggn膓u>%&߿} <e]17>'—{=xI{7CDN{ `$da& X1A*EdR" F$?hPA@N¦0#8D@TJ0@tuY%!eVȓE b F'="FO-D0J FV,6SXZu>v[1 $PL֚(C8x0w5V~Ĵ C -`Λ7iC%v 9tFQ"p) V5 C CImFڵ "Z1zTeBy$Z{j൵teI+ ̤Mwl]|nBF]av\0ϷTX}ذ`B x4|OQ($6ةA$TІPT )4E3Cb>Dv 3;] ~1` V:+E>n-J4oyqC*胙Rp GnۜvLh'addړs 󇁳.|@X-lޜ8`&]$6 d<|`On>H#"ԯobBYHݛ Y;"/r LI $@aY(I@%I4I4$0!@AJ6UKBY-XB RQUT%P"4hQB @eYP( D4,( #c#+FbT([,YHKBdDhHXP hKh,$(!j(D`#FX@A V"4ABi%hѠ @)FYl+ 20%KbJD#2 U2,3QMJO؟*e%iq "hydV?S>X/O,A(7''^}ZN;<>_a/i>`GQb#$ cRbUj?Q`rn[ ᆙޕbKYN w;yϵ ?^bV?b:jB3*uL?@O ?{(j0RRAHBdO!P?J% QT)[0QH!#z$B0 w /ϷA|d|mkVT}J2 ^uM9~Q~\1!G_N'E;TH~ PŠfs|vci Z^JhlI,c6.g뛫64yk@ԙ(tGׂsCYf!QR\ Œ\?OO~'V+k (ps"I HII$FD?<}vu[;InO=`>9%\AZy&~{ h`y !-`ЭI b6($N2 2f`^F_ @t:;kp] Ձщ<`ݨ5u qޯ]o km,il_6TlrGNU3sӞ~X}o..IX'H$$j&AH8/ .jmFJ"jBiLZ[jqƋǔվKC7YKn.ܙ @d [-W3hv?|?Ws"8 aᯘ<! ͼFixxau^qZZ!xf)lsv˪Mؖ S*G~`j7dyjL 8+z]Xm+M%]O)ѨHABt`SrH04ȀBa?&y傐QHE((Qb*TU`_.+"@X*I 'I5r6Q`/G$ѼA\ YucR`zZ=&gde>ti8/qXx#Fl,hǣ:D =#2 ;Z[qs !Ths7vb1 1? @' =xjcr20mf8K4D+S`K}H~;=O7.o^'rܥQ@ BeMp%R/_b64U&J~ߢ:ə Gc t?~ق^k۾YXnٯzBCWl1P1 S܎+J|C~?W\Ls2G "-Fn1 =vJRa@gb )?“@siWY݊y;[s7ozƒ:4x%RXDJG.j=!~+'R!vF{ cFN7$1۔1(_i)r~4hXi.Li$a1kvxmf&3gwZg<=2HI$ct7'3)ٗΧ˹$}>P\ g_I#dC<=`^>g܏wy ,6'n ,abk;ЀiPUǽ^p <^uUUUJSM4N=(̠{XUUUQp?C {ad (yʪOGA[/>W?A 4A˪ W#(x~; !!&ܡVsWW/@eީB{a7]4\$ iFK~oɆ͙ύѨvS*u[NpپkX 77\#kar/mwgIQt2yHa 2d m-O^PمG.?㡠7('O? PY@ ZXQ)(0 EBCXIAHPY,@F,$B) A"b AA@AdDB dVA$VA  !š$$$$$$$" H H H H H XAIII`E eR@QV AcH@`HR)F$T`R)"HR)`R)E"HR)FH0X `,X `(,@PX$ @E$Tdc X, `X(*`X, `Qb`X, `X, `X, `X, `X, , AV `X, X, ` `X(`X, `X, `X ,R,XbŌbŋ,Xbŋ,XU$H,Y$$XAdbHIXAaXAaA (`EEadR,",XEXEXEXEXE,"0aaB*dXEXEXEXEXEXEXEXEXEXEFA ,XEXE`ȤXEXEXEXEP",",",",aa`AEdYEEdYEdYEdPX,"Ȳ,"Ȳ,"Ȳ,"ŐREX`E Y $` ,HX ,P , J,P(((((((((((((((((((((((((((((("   #( "0" H,V(# +"" 0H0Ȁ*2 $"+WQH@I!R@"E"B(H(00 " "Eu" Q gz\(%=o'Y:5EJƅ' y˶>9?zxڴO'mxggǠUUUUUUUUUUUUUX! * X]|8M5@I粳,\Gņi٧5ʏD$&0ͯIJ tak&%jl=#<@4՘ **I'`,)Gj5:B:5uGb_YZOL0p[3MzY$ mc9i<'kq?Ԉ"QPHDDBR)DXUUUUU"Lt07GI@UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUUUUUUUUPU"zB5UUUUUUUUUUUUUQUUUUUUUUUUUUUUUUUUUUUUTUUUUUUUUQUX* !*Q Ԓg=@ z־_&ae^ZڪFH"H" "d@$, (A@RRHY"uO?{_*U z6c@VDBTa1?\~(ZIG/.q{Awγ ;QQQQo"1s3TTDUTUUkk.bb[f*.boikUUXG s4sfzFʷF[9rӹse!%+k`eX޾;o3;D!cU"ֽU &YB22 p() 1 X VJ! $E0Dj0y`ǣPJ9A`d9BEXBA)K$ddBD>E(ᗧOq!SJpD"Ν=<PٷG ~s">=a4OϼfOB1";>NiT @ Xn *j=cSP @XZ (lju qE?"莮 2*"* 2ylI $Lw@0լMWR)E*::( #׷e)Z jDl( mx nA XXC"Af  (@4BI@>A!p?3K翡gD Cd^_B ,b@nB::LESl`@#Wv4@zVh) 7]AQ VTx]('@yt2xX& * U o@b byDGXsUɧ*S 7"%M*$Wh+aALS* :Մ:U߫5P2UUa$Y a- П9Jyͻ&sv_z6(`C(O548Q Do@Zஜd= V*B1DQF4@*F 0 *_XEv$`Zq D39"0 A$A" HD $A" H HD  @A" " D$A" H  HD DDA$$A D $ $A" HD $A D  " dD$A$A"  A" HA$A" H$AD#"2 " D$"$"1F#bD"DFDDF">U0.>r}qwM[TxeNK?9e~՚HЈ8asI{ȟߡʧ@bm8ߋ4p,IhQR!38@'"Q;(@4$i tU+U!Qm +U[?f>sT!-rք-* yLI*(T3OGz6VܢH"}4vA-jA[eʟGf9wڐ/ȁ1D'g[q#N?!^ 9Oe%$QU!1QdH@I"* XD`)'h?gGX B#$D"( ( Db1t& ,a*d$d\)YRJ%oDBL1@DUXAEc}~ K I9aRH&~2FBDQ @4&/ URBDI*nݪMH#G6IAAfE T1 2B)Jr!][ 9?k ݏ8y G$r>Jh ń`!, $A5mB^!m"d 23CC2(N@n#F}iPA;R7HBOK E [gabg#ېPRLskɁ-1DKƜ0wS ,a;7 jZ E7 MhW4a@ȁQ'?UQ ("B:E/(˄lWyE!B'aD^hЯ9"B\7tY~f.H+Q^,*FIY&Y79/x=7̽_z$M߃/(i sɎ E 4\Q 8%rw }*yL?[OОM.ypQUmn.WEL!T,aJ*&R4J~p,c]J1ffVX5iݝ:vڮcʡ2of\2d*B*h 7L&AM!Y@y뮺g^>}{_7n˧>6lɂ$c_,q- 1K1Iz㧌cq8bNQtZbh!k^)[Rd@, X$Q4!FXB* hCР("(2 D B!T *F "$ " ,b H;OA*qsWOJSn]QFQF*Ӏ$gTaCr>gncb}!hb`;_"ۧt#"DdHHW U[۽OA\FHھ(-# ޢiZ2Jh~m`x&CEVklGcČ#9'QTRRO׋9~p?T҇z\[w= 3򈃑~Nφ kV G,R~U$t"{o?#&!tǕun Ҵo~D e_{|pHwݑ{X(< uG}7J=X ekTM X޾x0JppDz4iJ3-DH@(~%P*klE#iaB58FF9mo xlX*LݺPxϖ΋/~ !MP: & 8 CD;,Q 2 Q p\؛Q*}sN ';^XWȼP yl=7Twu2xHՂ*EU#",H嬀Pt#2? *亻:HXM57H6(Gh1:aD9O%(*ޯ wE0y1)+}(sʛBeSb=^(b7N* u+x!%%S`xu r)f]M zUbU3BDZ?KQ)kF>?Bո4jV["0@H:!Yul~M ,6ňh.:6sCH<0@"6i_>x:ļS 4è9ރӳQ/z< %Ya@k**0%)* cVL@X@#8l/`x U`F"$# #a$McAJ+T"4&U2`E\S 2IRB"VXLbFACZ(02"iPw+AZ:@cR*=wa<4pA:8 REU @?vK$A'rيdLP V((P<zD~^f `\ȉ, JT+ H"J )ڄGr~00B4—Vg;l[vE!#!?"DD,HUa]F!6;AU2qҡ n6`g2GH ?H@9i4h km^ [GkBFXq[FͺCJu,4 `q*b$L9j 4R[ X_LVuƲ>^c,20)prV+ȯ3[J*,ČIQK*("ȉe QB](D3eTMnhAK0Ge%C@# #ghPU$~D^QA &pMRB";qćċ ]? CyZQ0`d4S XgAІmH rq*Uu9qd) [ jr:g&H 9,%ĥS@\ ʄ$"H"R( $1(V(4NXGG엋_p@<E-dC b7fy13['eKcuM%Qz.9N]`͚{ MQC =0 h2rEQŰ霆8# n TSOqoLY !t!^FO6'ʍtE@}*L0)׉G) }%O'WIt0h"A+\H#&ma`2KA٣i5s3^;d`<9D1+ P4r~/sﲎ+3χ;ϷM9@LPZ*=wIC9IADX1* 1#{puQw$BBdD Y jʿFSUQQ[æwZCt !l =!|n?8b1#TUT(JJ+``$ઢo=nk"E&[eC=x' |hFV6A%cd"sKHD&D*0%2:a AkAMa#dn@kBg"łŋ"bbłŋ  ,QQQD BDA kD$A!=jEQ1G&fW 2H) Aa$QbVDAd@$D$$@I ,B , BHȲ(,BAAdE IdQBDUBAIUdTI dA@PdUU| :4mp*r9˅AD. YQ:@ns0*'ŞUD :CH'I"Bj`w ;fl2BCBXwB LP=@S@CQ `DCs4R?]'޹@ U"5~%&̸L%T0-*۸RDB MJTz4 os^ ^a =ϳ$iDҌQA `)d!0` E1 H1P#1@P1[POTZ0!#܉ F粏9a s  dP Uc‚ TiŪbS T+a)4RbblaX2 UP(JV!X($`B @u񖥅Nd{C(Ab1a1lFB2k?}h EmP RDVAD@QiWI>$D"Q{h{/]3%aA@]- m3҈cAeW,&@ir0{W ժyb`T`oc" BD "AJ@@R%E@BPP$?cjX0D(HDEd! DpʍYAؑ. !B MCFIZ~"4"(M*h 5_S%^߈ 93Ě`TpmkKvrZDDaQ>KXHNp-(?\B/ GSUDGB#@P*4AA{1a#!t92`?WDD IT1CT6HQ7O" mt K"ޮ ;a JiI9"9 $NjbD3Lq2a>Kdk@M 0@zp "EJ,Ed! PC)d' XV`b 3Ea! G\?*m8NC,6 kZ2KB("@B"(7K\;Z?v)_7Bl%?6)4kh,&ִ DZP * *z&QU5PR%v.gJhz)#c翏D;l *K@[BDpIpSSqD"vwu8 +" Ӆߧ'GDz =l=IGN;≞3 A01H  $ 5hD0$ v~; 8=EЂ?QE?H hF5C{}{*,Anb4 c L1[o:|Ш0.Hkd2.ˆfR4,DjA0&D) p0 %I#!FAxIA,[>>~΀Dw آNwUqug]BMaT`tD F D",4SW-D\qU@81ckH0D  [b#^H`P, .HvP"`zr79Q= ȓR`E捇@@,nH]b4@ד_mj[ɿ MgRtC^uұH\+&˳_~K((TBh8\*Q$!uWLPm1UFW,OcA$V!!r+Z``%Q,2Ld$`0HE` KFimQ!@&RPmm̭R#nN 9ñӀ* gݳ$7u4>A@H$`Cy;Φ" ¢0칖 R-bi ' 8JTiw-k%-"  IADD$1X ?)mXR TE0")C2ɤ xw Є6 ) ,YB$ E",  ȌET 4A" Zc5(\m}:/DHI$&ٴ=V1r~QȌEUYD H6 112CD:wIv]֣9O h$%[:wo`M(K6k`֦f='2mat[AMXIzIB(قX\wB6H 4a{ 3a9o.?&?ꪪ[ <7~2r8 _d8ߓT*@h@_b$R$1|">s62!h&n.P 1OIV&N:y{J7dN&c)X<ϛh+ejiؠ@ F "EQ0URb@@yK^TF4?(!(9(J!8RDFE@E!DBi$m[&٧\3~0.`Ub* )j<))Q"QV `U`(2@H C0` c c1c1c1bc1b cDV$c1Dc21c1b"""10H0`1c1Xc1dc1ccŌQDDDc1*"c1c1b#1c1 b1!$da#AV" UV   *,E`, EE" UQAR1@c !$A ObDH@fX)#",DQH"HńdX&MB`I!dRBD2mm-[mmm-mBҖ1b)5BDRRc*CCR&UB@ȥե԰H Ł#SpވڬIV 2BwАxukkEwggo)qR"$HIAk018`U,pץ;:!aQT,LHz1HF@xA P # 1F" P@bO$),#UL#$'yi*Z$J{@<A"{^X] -q"x|g@>8"W uR? p<IZ %W✋aY33 W4%ƃpZJR3HW1*irXinT.YH"B FPe,X`1B}" R5PB( @1ǾaIltp c֓@BLWBFjҼkYr1d01*-%! h0e@Ș yP ķg{ދaP jcD6@[Jȧ%,f(:J%%,IjBN&q(PR$(*(La66 )Ct$th*EP$UX@dFi5K "nZ*@DQAEMEHD@ɀI*Vu_+bx2zC5f+CBS9 f17K;kZU_8 ?,}䴔$sL+:h3B h[BPP),?rp>puʬV+UN K9gI/4upfRQUQVLI5w$CF}~eOb17 d,ʔwm>$ٱ4> ϯUK{f81L7ji/mM).meUXSO''"~׫4&B("i*Bhhp,'XsA:a%J?  6s` Xجnwfn^N~IPT4 l+ȕK (Иp;6Qko`r܍"B!ݱK!jO&MO UA18]$UGZ؈sDXڪ_$9?AFSsw @ F2<@~T!"I[!,%y I Ξ}SiD ($4 88kN0 nQ$AQ AT$PIB`cEfef %(2&"UTmYXbA "7R5m EYFDU$$@ I 8mBW-~PѪEUUcUU𨥈V&]cxݙ? Q]:wlL`؃3 bR B@QAI R ~]](L䃊6EE A6A`AI6W辎TA  @  4\}n@ktb TAl$A"Yg$8'I HT (E!#$A 0@ |ꀬ)T{,(Kt2P@`v*(73yAz*19'^})3C%$B FzTn+L+TNc*uEAGN‚R c`$b*FE`Zh,45B X`H z FLs4r."g˹$!HՑr'F Y**ոRYݭ;}6 $Dx*dc!2ځ(AH$!$ *$b +ČV1m(FAI)(%6H##"20s@vyCN_*z-bȧ)fyg̮S}ŀ҇X *(r*x^DgQB*I@|ۘZDK ǰ=g|]z🩢U>whEN-f6OTFB,_ڠw  YEQ)Fc8|a/6"zH%ؒvUH\W((jH2FIed 4ʓYREc 0!L$2Q Ѽ#T,*Q=I w8r@8@۾L?:I c^,k&+# {''&N=WӖd4c$S5Ce#X],o& i,BaPB D8tل3Bh:4{C V"pKhED$HPQP=$ZȺl0H2h8DD@PdA#PbH]1QBXѓC"5' UUY 1"8EF F\h;Ŗ}Yw 7o4龳0*"P .fz/(T#Y{"^) dS?决o1AY&SYŝv߀pQv?a1ẇw[QE=`7nqZ ).TP罀v4hTu۾O3Q#c&0Qf 0sv9 0`=Wfxfp)àݴtQM:{f{z},^@!{=J [d""p"! ""EP`!!"$$DEITTHJ>*HHrll `6|ԫS趓Xsl@6n`t .e"ۻJRQKJ͝:[A@UUUUv;'6Z풪Bj!#'Z%q;ąneR6!KmXvj* (m3EL&mj m(  h2v0s94n;7A$% Ȑ =MSh6 zi22=JS"bz4TPM&`a4biт0QQDTPLjRB# FD'Oj⧣SLOP@))"ChId(4|/\~\u?I@ I!>R?Sf]Mffffg5}ͅUGXy삞+O}a߷csyf{n&7gs/gW{3555z' F9Z{[D;}s?׮^z`}|IM*? V60bFYUЋ+5M,(Q_b'o__uURۜEUU@*92lUUKnseVU8*UU-qU[eT[s\llUUKnseVU8*߀~[s(Wڀ[s(ʨml[s(6ض9QUy7Ͱmͱmso`*9ʪʨUT9QUmP m}qUU-qU[eT[s(UPWURۜ@;PUUKnseVU8*UU-qU[eTͶ-qU^slUT9QUmP ms*URۜEUU@*92]UUUT>UVU+Umͱmso`*92lUUKnseVUmmnseW|UU-qU[eT[s(URۜEUU@*92ly6ŷ92qm8*URۜEUU@T|7QOsAbÚmn3#:tH5P4ۭO0x?qe#hƄ6&GhYp~rQr,z]Vx!2A^E)jZJ"'ԫŝsh2`0]I ^μ}0^P)$r`;E DæEt&i$.F$`*=I:dq%>s:RI+߼ $bbHH?~K12I %?]|MߓۈL[f3YGcmhQKmi)V6ڒՂuo>LYgfZBAUQn,|t伮ǢsZ ܹ'u3W3*z滯 b][;xf\֧ۙ^To5Y\̷\\Ms4g9{_pf.k]*|o\/ys˙6g*T˖s;ήh] ^}_d3I3aI{xN)=f$_y_y23sx^1c$q $.:|㗋rVɣ3\VaI3g`1hcm$lKkj7ytuPGOfmgWj%!ǽ136fjD,H%Ryll,$!d+$cc tk'ˉgruԬ82$?m9fwoCiG}B37::0^ &p←pa4{{un;%rI$I -JIEE\QAV4! jƚٳ4mqRBȷ$CCH֦Ў8#$*bAahNLv^؝ӆÈtGD^MvqU;vlٛv )))9_8Q?Q! &ՄAhco!Š6#"l1C!7bC,=2Wquq@#I ||L8BB&H $NHE!$P8E!R#+pN]4Tf$FOx2?,h_<}~=z ؖzٟ!w<^qjzg.̳b^+Ix}Hs.3~> r~y]t&\XVP}><}~=zr´6ƋQ;>>wFh6ĴĭOe zNYG9a8up$Bxĭy\2N<1PXh]-v"掎(\n/٫xvsMvke';Y.*k'9r` I9@9g}Vt}(A9fyx:Z-:cccB!B!B!B!B!B!B!B!B!B!B$!B!C+;q! $ $ccci '7315Ll$^a8B4V; !$#cZY !,#B1I !$$c%@c%BXI a! ! BXK N!Y5 $SS驤#B=!B`cx!!  I a$#lllllryǨ.Uvq[SZ QF7zs$s޾ ,66&dCb`bDŖlKKtW\ve6&Yq0B1)pR6Fwߜ}'6[awԑ+.33,c !# !P>z%wIlWNNNR \xȻ-̎.rM(kvN\#S EpcCSKe\e+*=wGû,b{d ,V5%-B4$%ԉlml5jհ8.1L eL,Xl:htVF+' Мb6%j4Zfmm+mUWPRq;*N_*˻ѤETWaNiwo/g[-[J[ev$M͵63P-l `Kl `[%U2Bhxux22 1 5E22 2"Z21&)q\~CRY]h,-&KFєjF@SN!plc`q\_^dP=U0(5 ?mm6lܕs4{͙޺>PC|4pIxy {bbgsɂϯ_ozfs?L34SXEw!"xs&M[_p?G?~qbꞮrV9f%wsQy*]1J&~Osjc+Yù|3׮8=rA,Ưs#|߳閵,s&G:1 3y%sw]ŜRw܈W?u}Y퓑ʮr8UwżMW285wqos|]ښ󸷛qvvww̾N.-#<%ySGh(G2_*wG:8MCŁyVZXʖ~ܫ*CGc:i.𦏄uNGz>v1|yUpx:iS9:4Yƞy4;ztǩ9: zLi8zGcc=gLvpGcW>1ԯO?ϑkHEBZ!PVDT-իB"nikc캕#;mvmfe\lfˋt,-KvD"*֑8pֳ[8mfefm]W)pHMuB"nm4jJrEB]JkkY嵬e9".h"*VB"ni[ZD"*DT%ԭEB]J!PV u.延ނ"%m]uӌٚ8ٚu]+RnIwnDT-խ" ukAPR9-ޑtnk[ZlpuZj,]ۣHEBZ!PV u.6DT%fI] NkYytٚ\MlZv]%$>==Wj[o"op8 &w*J+Pjj#2'mm!.*5vWJ]x+]G9%F*4ittS> ~yU/G O!y ygwRrr9z^w-oS+鷺k:b*٪ns|v(ID{ڲ!$,M/Q\c<UU@ sfYۮ3G]g???{ R 9s33>{fgGIR] B99SPwFBhP2ݵ _/>||m(muU̪|׿{kgM%L@ mB(Wt0,P`YYnBm7mBlB,W^!]|<@+mPUT[m5׺݄ݶ.&T {ffffef7S*g$Ln.fT]*ҍP'/FUTUU@UUUPy~翟93l V7T'TmMB *P31ިU|m׮]w}u ]+|}`UUEUTUUm{׿<Ɯm}z:}̤@P1f qBz׷`^ ^y9r{ޏtmf86:ٻ])р B*BP30 wt̰4ơ]`ZvҸIDD$"ff`MmUPUeUG|>'ulݭPww@0P@: B B B97kT+W[ڄ]h oơya]s;x UU@UU@u]u׮뤡\[7CӽWtn`]`ZmP`sn h X P ,w]:UPmTUUmf Ucтzꅷ[w`^y`^u믿y7kT*ހ`Zv" ze^0**ߦBe*{ϼcg{]PwWth h }ooT,l;bx(Wt w@lֵukփ8H] &FW*tbRSϿy.*k)=a}ݶۙUP*UUEURUUJUT*UUE߷WwUUUW UU@*UU UJ* UUUTٕTUUJmUTfUQUU* UU *UUVU[m*UTUVʶUle[*VʶUPURsΧW9ֵ!$- 2P5kĻ(Q<{xQ|P6{ܦv{3xIQۂW`뮿ڿmT}7ww[owtmJUWk'F[~ Dʅ).r?3 Woy^yy6!6&Uy?y^JTw{kT/% DFeP$~$/BumB0X  HlKg_7rߏo~uu<&@sUU mʪ{﮽n֨O6ٻz]P@0P@?PJBz{gn h`]`Z_/" ? UU9@UU@6m_3/wtơZm1FPBO0 .sZUn*(@0P@?!s,{{˯$}a{TǼ@<__m I_8tg5ӽB BBS)B̿{fwIa%XIa%%(S)BY[P09\KҥL}}kY7w3oA!k3={28 "Ų QE\J~[m@mUU@{߯^׿Jw?>}߳O؀~} Yff k333Z37s33>O5ֻfֳ3>fqϳ38zfg"2Uk^{|^Ϊ顫_DB{o&m+mPUm MѶmM5ho{kϳ38l{߷ހֻffqٙfw8!33j s{߳n>vf{+?w߿ mۢzS_|-W{WoXm *UPm&[9,{$$e9ֳ3>8 7ff}ր9{}0ֳ3>9fgs5@k33{2^.voZ{߻`fgٝfffffga/㯽(mUTUU^u~86uu\ͪ~fq{/" YffqD~sYϳn־{8 ֳ3>s{}k~fqno,6B?=7{FUPm* l{_uۨ"o}~eNk33"7ff}ր׽w̜aG&Offq7ff} D޵~fqfffffeJDGsgwmd ݧs|5wfwDg{߿&D?s=`Dֻ}>7gs۠D{="?u:w;ݻQ#|k}{uo@$+"w+ۜKѲr_uZBQ?_ojч9sϟ>>*UBUUmUUAaU_UT*U*UU UUUPUUBURUQUTUUEURUU@UP;UTUTUUUWUU@UU*URUQUUU[**ʭle[*Vnrٲlm*m mߟ:ֵ֝hs#I $Va*xjov={:s^{F9{nDwI>QF?[mmeUT*UMߞyЙ3?ǵ"33g75ϳ;5ϳ3=o~{3%#mDG7{yDwLʕ3337h؈{|m *Um~{ׯ^u8q332fTښmuDC~zs3rzww;݈"7wٙ`@_՜G[Ͽ@sffg{{G??u?im llUT bHQs03vVN={;3Z55j4Hěa齎8HpwZm쑶#mN2[z1IH޵lֹ޺3MsZg]Oٯ;fq9fm_~?}m V9*ug7޳vfffffeL̶;߳;`o7};wϻЀ۽~w8fgs۠wygٝ"zfgٙ`@nkYfwn@IͿsUTUTm۹"&3wUffw0 UL32{˿{@׽}hvwٝ۠ffgo9fgg{Azfgٙb33336q{{m*=z9}w;oYfd&k{ 35gٙymЀD ffN07ϳ3'@kgٝ@]gٙ9~k?3?s UU@UPUU@ `* r90s;g:{3332>kd32qmff}/fdD~k}6! ~̜ fgٝtB5s6g{r:{ ɖ[mĝ[*\SJpÂy}~hṏFܜ3ލU**UUUUpUURUU@UPUU@UUBbUUUUEUTUTUU@*UUUUUUPUTUJUEUTUT* qUUUP*Ule[*VʶUleU hmU_]uw_癏hxEEکnbu0OmU|[c{ǯd鳹!%j{\w_СDgiI  6e ` AѶۜ興DD(I߾'{M>kӏ}8~k#Y~;f {0k33 3>32qJ";zwFUT*TUTUT=<.zO|9͝sws nuhm9IQ;}ozчCDi9IIIIqr{ob"H!bl@ ]ֺz>"H"H"H"H"HXA@$/~yF{$$'~XA ԭ$$8|woZY !,%XKwqBY !,%X{2qai,%XK co{}Ǔa6d6Mtw̜zXK !$$XK?5ǽ{=ͽ,%BXK a,6ffw߳LXK $-]{'='2l&h6do{3dX[ !d%6}ǥXKJfPg{loUUUUP `mmUPO߿G~~mK a,%BHK bs{2XK a,%B33dXK a,,oFgzy:ޑl&ɺs&؅ZfޒXK a,%\fwM&Y4XK a,%MK46}dBY a,%{2q!,K a,gٷXK a%33^[!,%k}UR8*UT=~gs3sϦHI !d%YǥBI a,%{N=,%BHK a,s{K a,%XKfgN=,%lC`6،o{{뢽ɲl&ɵmFɻvw33ٙ8XK admh,noCb؆XI dog2q,%XY !ds{Fɲl&6G~ۜ - *[muy?゚ڹPRK a,%G9fcMd6Md6M5{fdBK a,%5{fdBY a,%Y{6Fɲl&ɲl'ms5kBHK a,%X~f{3'XK a,%9{ٙ8 d6Lɲl&{ٙ8BXK a%9{ٙ8ץI!d,*ʅ2L\{wm UP|W>^g;m(S*%9 %RXK g5k333ٿK4XI a,%k&ɴl6d6G9{{3'XK !d$={'_a,%6b q}u^d6Mdڶdg{,%Y !d,kXK `! 6hoZZ,ЂXK a,%FY{̜zK ,$I7篟~** +oeU6otVQV7nBww>f޲BXK a,%Nsy{̲i$%XK al޴BXK a,%{g3K K!d%XK9{HY !d%YϿuXI a,%owwzXK aid,YovMdmFѲl'7{fgX[ !d$9{{3ya,%im-n=ctqa#a{}Nz*|sHIDFNgy9s9UTUUURmUUBUJU@URUWfUQUU*UTVlU@ UP*UUEUTUTUU@UTUUJUU@*UPٕT׺UPP *UU pmAUUUTUle[*VʶU*mmnww{RJ"6k$u@$AKd(R!Dfwws:9Pt9[]M΅SU]U=O +{oǀ8yUU*UU@**sUT^|) ;*)BPR2L a,ffw},%XIa,%~kK a,%;߽䰖XK a,%s{fo=,%XK a,%zXK a,%XK3Y߽K a,%XK fٛK a,%XK g9{wܖXK a,%ﳹ}XK a,%eBPT#/<[6mnUUBUUWsO>S;߿w;wXK a,%Yo3;wK ,%K g9ٛK a,-BXK g9{{3~y,-XK )d={=Md6Md6M{뾖XK a,%g?XK a,lCb؆c}}ulCb,%XK g5{l&ɲl&ɲl{gXK a*PT.wmuPUPUUBUP=??泽XK a,%Yo333ٛK a,$XIg9{gXK a,%|okXK a,%>}Md6Md6N~Ͼd-,XK ad7fXK a,%BIo33$%XK !$,~~sa,%HI !,7{3ya,%BHI z]|ߌ *UU@UU/=wڹD6Mal&ɲsXK !$$Y{{3ya,BXK a,7wܖBHI ,%s~w'9ffwמwUC^~!]y`t~|TUPUU@mUTm]zL$#{>=6T,P` nJwN|IDGВi.p P[m(Wt0,P`X]mnڎʫ*UPsm޲s PmQ@0,WthknKs1,̰{ʮ4`X]7j)l:jNl`Y &P@ |^6ٷ{]y{*:מvx^y!]w|tڢMBW`z;>ns*U[*Tv}g;ka+э ]>%w[(Wt^Yt5j(Wt nڅwMB;7z;+U׮ws*Umml}z;ost]mt0,P[vWtc 3,{n,P`X<c} }v(Wy{ 9 z|9 6`X]"З!%*Qd%YBfXVG1{ )TP^r>V=9So4$/$ *Ooky:g{{;8, m`URUU*UUEURUU@UQUUUdmeU*UU@UP*UTUUl_j򢪩UTUTUU@UBUUUU@⪪UU*UU**Ule[*VʶUjm6mm6mmu`7]y{߯^EB&.!dK NmI7YкZ{΂ @ީ8yWu@w'W6pg?WUTKmUUEsmd$M9Ό泼t.f[vB0,I]%WCo^pf[T+mB!]yם]z`^w߷AUU6m'Yw/7,Wx,Pj6bJz۷ feo$H ?[v+h)l:~_j( mUPmU50I)3 ʤ*z2 ޶Wt(Wt0,K*= s{> Wt0,P`X_I.{x@mT* t7wX5 mw@ 4 Yu ;u<׮C^2x^{o(m*|UVSץu|ކjwCm=*>PWu f[mԕ bJP`XNf`sw>sʁUUyPUTm {_.<}ǯwt]n]y`u睂:םy߾yB+|YmTc s2 `f ~]UU * O~z}50j6`X]Bݵ fX7MBe ]`0,5ۄ5z믛{TmUPUUE\8Ͽhknkn^nѻjK`h(Wtj7Ym7MBmšNu~]u瀕׮<}sUUAUUUU@UQUU6m&yǯ餿׾|x^y!]y` cB,֨WuGZUx^y!㮺}UBUU@*UUG~nwsS+]]m\ o`X]š{}opP( ˟(\}| Wtuj , aP_S y޽;ax|0*UTUUUU@+mUTUPʪUUWꪨUU@UU*UT*UR*UUUP*UJUU UU8l8qUUUQUUpUURUU@ UUUPmp*e[*VʶUle[*m@UP `mAI(U.R|佘.%28Z{Y9];oL 3[Fz:Ügvsrd5۾UکUJw`罶0*[m-sd9*ɨ/;=twAΨTcar9}Bs,P2`7MBl +zWd%wCo[v_ӯ]u=-W*UU@n}9G_>WrWM+zV+` +(Y`7Z]bw@=mP +UPot{yhn֪Su[6 |r~ߟ(Wt6mB̦|{u睂:מ^^wa*m*ʾwۯ߿>uwR[umd%w@J׮C^Ww nڅ}N +Тm ۠ UU@*;$;%y%Wx, +MB,\і(Wtz>W}bwM(U> ٝVUUUUUFmUMW'Metfuӄ]6c.o[v+(Wt P K]<׮ UU[mwk:suBl2~|Xs2ݵ wNlT-m,PHMBz;Qﵗ7kT+mb:K]<׮CϾP=}W w2^T*fWt t!e\}׻(ms(6P L eM zhݸJC]u睂;nz着 P:m)yB}7b睂:מWu~{}@ VlU7^X۹P `]z;K]<,̰nwM(Wt0,P2׻z]c ή(xTe|ھ]U߿wky:ncw{v~UJUUUUEUT UQUV@8UJUPUW~ UT*WUTUU*UPUU*mUE2UT[m* UQUU*UU eUPUT*yVlU[*VʶUle[*smmmm~F_ZWc`Is^緾_=9q^iýw85֜fqn[ZxufO;ݥ^IDD(޳!ܶnUP79sUT=~]}}Pm̰7n!d7b P 9` ܋ 7`X]!XU *9UU@ UZ:!YBwM(Wt0,Wt6n"cY6jJm,P`XUݽPF )[mlY_ΏfjjwF˻]<׮juמwQ,̰n%wM~G)} s}XZD2С~Z?w߹UP m}MY_~G/}|n֥jTLz2 6!B4e%ga'twFXBhPa]}ϝMBe UUUTUUW_;wsG}yn֨Wu- ̰7mBP_7GwM'}gg7`w^} UUCmتϝoߟP /_$׽{=s{kT+WCmӈiJ !+(]+'&üр VlUTm: ]fz Bu^v wu망:ϟ<9 6Xx,aM%, s{fx7{?sIos~?~* m7mѷQswJYffg}Ms~ng{3>s5s={~~~{ߧk{g}99{ﻩߵ{}3s<ko mmTUUm l/˽~~T wffffffAsfngs3s< Mswٛo@{;\333N{}5sf|k~{fffffffr{=um6wuPUU l^z=z}￟ߟ}͹j}wٛX_ϳB\={jwC\{ݝ9 o9{736={u|kߜ73 Ne}m`UU@ ml2~~%Ky=uw;vwkffwٛ\={jw{Bk{Nkz~}?|5w{ٹ?w{{ o}}5{3s<sw߾n~UU@UUDUPsP{m#(5ߟ\cgZ{ٹ99{ﻩ^={fxk{pB5s3p5s3}P9g~sx%ܛO?UP UUm T0guuo33332\;߽s R\={w3)JR3= R)5}g}!JR'6333}!JR&{= R)5sfng)JBBԜ={{ Rٵ?Qo]\8jⶩT}Dv_ >.*^<]B|$eVD&2+KţΝy^+Kgf|fGLӱ]*wC>9nnHwʫa \,U}E䬎ITC(̊_a# ^n ^a+Xe"# "dJKoJ]!5eJVBX4 mEUEޔ>*bKy {%KG].\lQ4咥CH9s浭kZֵ@Y%d$#ZlwW9crٓhUn ڀ8silsgimlb8$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$I$4$1pٝM1,Ym @1b,c@4##ZّbŔBRV?ͫ ̚[J2lJYߜ:mm cHM79#J>c?nIBF8ܒG#J%DRI$I$I0|):vWiN WXX_r.z!^~Wʤw !AA$J*ԫRC@(K-lЯWڧIz}__{]߯_}83~V~ٓbJ_|duD*/l_w6Y5ۮv^b/m-y?)my;hB!B!B!B!B!B!B!B!B!B!B!B!B!B!M[,vb?$$tx_ȒHn?d,~OBltx^gVo8Gǁ=3o>?>wz!}HM$Ё_~I/1#|gOV23a ?-\C]p*dp~wm~.f]8~M[Cfkji?_ywmMch6mVmMch6mV6 !6&Ж~>Rgv7 G1'+ͯo }:ͽ}yoECLsŘp)PTA0~6_V}6$Ys1Pf)$6 f)$66 #-V\ijPXiؓgѦ1,ۉ:fltΚd/WEtIu׎sť۷Gb$ K٠G]xYN,,UXXQUK'4b^%t?/rD>uWYˁ,ʓ#^^r'/V?NJ!}6>ݾ㹥; F؏}H>K+_g39h;d)\ZBƜVҫWrʝVUa NZ҉T* TH- iBUm*[g9tCK:y7j/>FE\_޽{m6hAujպ@$%DA$ZjI R@ -DDAmKRIAo5FmAб_bG>fmf330jͭOG./gQa2`:Wĸ^iU3Zf4fM`֒%ji`YZ͛4Vj͚fefV5cXek5[ר^ɗ&/;u-֮.>F*ɴplg6,K6"V*ڵfh֚Ʋg7&s93qahl#wk):B\2`+?#3n H I RBBBBB$)!JHRBBBB$-$$$ Ҕ)I RBB@$$$$$$#ccckkccckk+dM0CG_}pp6 j䕧seڗSG޸.\gcr؋Q#܎Vppqn9$G#P0VHhbJۜ`aU{n3h`ĒI o?\_>w5h h~G[=j> YEGHQW_t;!>/@g&VxıK'wٟ+U~_DS҇7+6݁v#8/>XW_W|ЮI//*{|Ũ~m߲kڶ]rrlC7+4!_aڭ\8.Nig8}82y6WL`uͫˇ6XɠƖ+ì13 sXoխ]Bau]:WvqTg"K|,"%D@C6eeh1Z'ʾζ-m1]O?6km636mFV9+L,?FW72 &Z֎nIhbfW49qee\G2rG26U9`q6i[UW5Vq.*0dlW0̋Uu`壖M̍srV0l-NaG0lÕkMȪ̍rFF5\Xe\%f3"9ლ0sUW4ლV+0g9˜9e`` W2Z9-hNA03fW5\`櫕0.ZjYU+irSb9F26&s'Ľއ펒~ wUw>q3,4͛eOZky.zZ6Äe,%_JիmZlyjog#NmƧ['SctnNSeIR b,ibU5rm[Y.Һ7h>9U+|W1^+W_qn"x]mYWǯ_?n:u>9W8I:}?MG I#NG !҂L #rA4@x#gt^]קԹ+{g?=jo3]YWK>6}Yߎl@DI EV@mN|2NG;J_zC2_EpVz=;~<9}_qOȄre8!!bsO*(\H[ U*ՖI(lHК~RԒ2Ic a$6BBZBY1дZ*h0 BJeKITPD đD&T}$x 2Һ VF3fc50ɳfXiz+Y~v}q}(~_ԟ G2NT7w8z?<~9-8uͶcU|kcMk43L1ifc43c43Li31f[4f4ٷ8me][6mfզ_gܺ5~@q|<:_:zMh{VWu;QY`AC eQ(d;Oԟ9%" Kj Bd$$ @% m)JJJTJRJRR)IJJJRBR,%)JK!II)d)Q)JR)JR,).-jq"WUK밇 | rlSxϧLƾ ^qyX~O;e?$PھQ@( JՕLXU +UTUl.;9utHm$)SdM6Qf,[HCi-[Pm"Ei-[PlEeb-[PlEeb-[H6Jl)Sd[PmBڅi 6*lTةSb,[Hm"EEi-YYYYYQf"$$$$$$$$$$$$ BBBBBBBBBBB@$$$$$$$$$$$$ BBBBBBBBBBB@$$$$$$$$$$$$ BBBBBBBBBBB@$$$$$$$$$$$$ BBBBBBBBBBB@$$$$$$$$$$$$ h6h6h6h6-)Q,T*%l+aY6Ғel[-bM6$ؓbM6$ؓbM0vvb:qbHo/>:+`ݶm$ $YbH1aW/nO<fgs0qN1q8g..,a^|ݸ%ej5c+JFZlltqFBj"#cc!ю&V21 -$BM(pn/S*s6AQFp1qLi;[c!Lc mۇ0pJY.;ue婭z+.»NҺWS}\q?ta{DyzZJq`A s'0"'Zu&9O=m l@­-xfٺ=S I6MeX[ ,,,%XXXXK a,,,-e"Ke-ض-d-b-b66Qg66 ! %%TpǙOئK)?~ubE?Էo+ϵ_]y~GR|H$`Cdݶ{~^y=5tR.Q.ݑz3eue,VV%b VW@)-bMXҒ˔+1W&9+VcLbiKQɇ1t\sJ|pRt})?ޯ YWT?$\?|j?ȿDzG}?3[7Qxxؒ)TOO/ &`KGWeQW) G"KүH^V3+I󤮧pXWBg/GEpUݡOԗRUq )/|׵J>"BR=e\)툯#'{|6ʣg臫HxO#uT>{uؖ 9m6iG*'P+1aQ̵@6OG}ie]?{G]sons#ʤm^ }E_h|*?T8JįzO~V;V0`xri*/-TҊWP}72I,B@!Bf̆akmVf@x^J:v*=} ejD[DUUI0*tKF.D}(>ED|>+"J_T'/_v8ILIbp^ Q^C+IiX{j5"0*G`+}4HPCme{)+ItW"]37'wT9wzJZ"e}p5e<'+Gk{P{HSU?R$hDP" $O=sIbVcmllmMյYCbڛM>3!fkA*!M-kH ВҕXJKi 4Vmf6lSee6eض b6 eضfHKl,%,PHBIi(JYaֵj1I`q`7!X;KߟλSǜG:]$bØX1 Mہaq09L<2-ü7 "rG"rGqGۛbr튻GhhUw<'svNƧpw++sЋU,.j!̒Sӡ]4!pRpҪI%Z$9j˴+J lmQi6mDdVG(;RΠZGQ9MtaEgE2'gZwSTe{Ta^#ӵW+Rq+㴫/7>"B#%G'ܫ|* pW%CIҥwS쪪S _ޏAQȪKMc0٘6f33͍kFFMQ˖55i+<'gS؏d>BlԶHFmaVkd@WܯǨܨ}]qٵy$SUWĨt G Êeg>m [[[ )7"{6ʪ$+sMQ!ye1#Ut]žH׃jNQ_x$R_S*#Y5/*e_WP/f2˪/ I)N+߽Dz{b{j<*8lT`++}Tn 쒋WW"Q"7G*=$~t/:^r?QxҊHkK2O4>K} #hG*^1y"OmUN!& ꗢ \h|42Fb͡]\S*M#hrU}%_fВ"Bm CcjWu^oG_4J/>u }/Rs*At NOKSQeR96TmhKdQ&ʨVV6]/"#ܯ]l'#ͶfJd_4;e^]^A {7WAT{ m a!a B6lٳe-Yh(HYy]5/#˫8D͕1XX]QIxҞ' %֮Pd$ dhmm aY5M`BUSU6fى "!j-" " "fmfن6f4%6JJ< Qu~Į}~N z^u:+PGhIC3vnrUSeRL&RYZC[% mrVd#TYZ#`U\G `fjLMB6 N%4"a2YBRf JhMdԋl)h(QQЋTTk*ZN2j"Ȳj[e J!H@HD*U!̎SQ96XktswR,ORqxC ?)+JR"mf֒[,*SJ'%9BXWO3߫ꈾ^h/IR9 =Ԋ:WHkWƬ͛5ED"I X"Z!`!`Q(KV1UU%iE::.l͝k-M,!a e}Q۷SmnGxѣFMM4hZKFcFM&4jjhѣFFM4hѡQvcRa0X0hȋZZ!2dA.ظz0+52:bӖ0.Q<|{NVUF4tֺ9GiC)Veg+u-YYZE'QI׉w?zE{Z5,u\e'h|J#W}Q_4\ɰՆ5a 2ZͱI$Sݷ1;[nBJ{Qʣ0ʑ(+%-vm۪?,ղT P:짎6V]BB8Y(X{Q$HII Y%@HIؚBoz&޷jM MD؛މ7bhM  @ @ @ @ @ @ @ [$F#dH$llkZ&kZ MkDִ@5 MkDִMkDִ@5&kZ&kZ Mj6I$F$I$։hִMkDִMkDؚBoz&К{6&КBhM BhM[ecemY$F#dH$l6Ki$ m$$$m-@HBHII [i$ m$m-m[%:Tsqs2eebVYXr22snsŮs+YVcCᕌ\049XYZecJ'.seDjn ccZ5Z2ƴkSZ5Z6 KQ-----%----lllllll-RRRR9'4llllm2RRRRRRK)ii)iiii)i)i)))i)iii)iii)jEBRRRRRRRRRRRYKKKK*%-%-%%%-%--+i[Um2fm\k2p*sÕ5a XjՖe5aiƫ164ƚjƫaVXjVի,XcSj4ca Z-ZF cMV5Xcj5lLdΝ*vfp;njW9@kz& I6݉G6t:`6 63ڶ4Mjlԉal6 jڶal6+il6Kjl6 jm[ al6Vm[ al6l6I i)i$-$aڷeuS)l9al vVɋ+ȮUvl:U-g`~O*GK"cnDFI"HHO؄&J9+c}j}1Խhhr9Fú=r9Ua߄`ZV)U2 lL xi\$ƙn aGXxhlmbI4$ГJ֬, 5IkV5]գcӜݧ sVebrjJں83kwR^ tS N^ gUd,0ۡ6CkqLbвGq8"c5;1pGf-e3wø#X"&sn vL²$ڜ\qg:<'S *+ ٚ͋ 6fedlٚ%@IVAKREBJB"nkZkc\ֳ[9lDB"joB"-֭E"*-ZP"*R3ZڰqͶfe" i[Zͥ6fea;乳6:uNJ;1.flfGUNHn ѴmĪ-Z.G,}T<5P ȕdV+{RVU ҕP^jz  \cDu0p1N#9sX-cFPq7`U1#`Msd jUmn;3=n;ZQk-e6mqy=GFVڴ=zu!\2|ҁvON7ڵ&.eЩlfKl@lm*m0^r1*7]G"QU}H]Dj " ]!t@DDRY*իtYe:KkN:u6U[JXb%*_e02+(cU STJĉ^5!ch1cqGVr7 r?pVzTN3 S p"%~h%hOqGKޛ`QLD$=D>BJUgq/w_ /*=E]KUGɢFD{cuFRWSUWQ_U\G)_m>$q\,1YO 涶K%lYLYņVSXj(jٲ5jK-e -21x+E+W/ C]ؑ>7U=Ff{ȟFW> jPhMn@ $kycpM@P2%) [hBAC=ޕ@R Lш E!l` @ {d1`w>{{ 7{x{èwp( ۋ]vILklXXMl @;pl0f.4VQ6l-M}|EaFJPl[ aۀ8N;`>} F,0b=O,X:} ûxX! L6PceX%5hmaeA$6P h !Sl;u`ѱk,Z56J}“ X٬64Fbm&c`T5ϱ0딠vQaHv 8@r 48#4@!C(ѕ U@Mwul;w d *@ (! 3p D J@$! ((RP%:i@ " J"A*I 4BaM=AMC@ѠʧRS!`#!01&"zz*JJC6)HTOS`# 0CMd JP 4 4MO@IHhm&M#Mѐ ?O~wkZRꪪJ.ݹ]C抡$$k^I{Oo:'s;VUmWkjU:ThrI$3$Jt}o6I$gyRCw f#oFd)x;f;3}$/(w;gdKǹw7ӞnF@ɻM[\{9L~fII^DžRB5 l0wsv7 W9UQ 6Hfd@J;rh:1'\9DսI$I$I$I$I$I$1DX8cs!B- !cgR#\5-69Yr{ a$7YB:Uxaoj;9K>/m ҡ˯8ʦpV$FS?3_vs<.{_;ߙK&hێq6${߉/ns? mmxnH8_DcZI#Gsyl(:,; txT2| AeP V-ƗȽ_WZ _3=4k}8(zV>cipNc+uAU1(c$f+(g_|⏾McaM%?.\[R=s/oMUhxTB b**IYeݶkv۽f{RR_trw]Z=n 3ulug>4L046@Ɖ#wwGu0tNF]{>~1Q^ϟ"h+1X1F!E(wRjتc:]||\|ܪw[4ozuRjتc:]||\|ܪwJÍ6-槦þWL) 0)A4YF4pPt1QS{A$i@JOa=9~}|۫Vry>4l%Km9z;b]>)><]?^2)hdjZ;⣡b$UUU]d^Xt ȐUuM ~y@UM WIo!/ C]+:*c⪪ĂUUU6!U_>R b,WH;>O|U @ŀl|vᆰ}^y2u螊C9N8uWSF2Wʎ/%Nl9pr9rSU].\qjZf95 hZS!U`  c<pyE$?úWIZB^yvIRoχ`/u`$e5hʼy{{))))))))))))$hWIkwj]ƎK&Mv:Ͻ}ӽkjy{1RRVXh*1 i&`ZKIIl}J5:zZXHnULAg{[ۼ״ofOuWmi<yL½채 IRIƃA#,`%%u;[ۼڽ{[ۼ״oe)m^S]Ǝ%&di))))-5NRmIU$B$b.FՂ״k{w]潧{[ۼ״oe%eWM}h^k4}4u䤤'+ʥ줬RmI%i|ߔWy/ewJ綯g 5Z;I5^='DH"DHs\b^o=cb1nUsns8֠M{槳MMDDM"DH4CsFy珦|79˚VɵVnWmQ$DDDDh""(-y_l_UO3VC,ej y n&qaVeB2Z78"fE1 3EIr9e:1k)q-bck/9ݜιSg*LgyPK@0>_{??\.ճd/]Vl\/yιu7қ%feH}=U^w^c%zvrbax.u͜é^[mޔNlm?k |}}O_hSO|==߽ӣ'h)/a+\ntu<>}^uٳ!h tthAޏAz+_C?,t̛z>74H bo#} ZNY=XMI_x>)Oxb-to/-(KlK 3WN?NA~|>c:N}W:dX0ll4CC!`Ύ^kgúۣ𮃫76Jֵf<:fHx@d,GADZ4I(H=!8 A{!@4w'w^!d6CX3ѣNߧX8xOSկ}ĩe||f0L C+(IzgǪK ;NU.'xv: mǧVVGwLꐲ zYzs:rPBT"IV>J,C $Um׈IZ8#>0XT cIQfH =@t} vQGaFC V+MxT/M5J֕Eڵ軜k]]/Ju]e)a4Lhmeg=_L:jm;w{d! x\NX:G2V^3\D)jj{t{WD6p~c*t_'UyOu }j7WџG3W?[m a$ )/.vp <@|_PkQUUUry/7k8[9 Ғݭvʦy<|@IMx8 )+WwkhyO4xEV+R]]tfg.^x RSSwkp )+4L4vpRWg%v*iI]iI]U֝I! i|:=/\8k+w4;47U'_0[B Ёa P9|a=ӫhY4U1mN *]i,/>Ӹd &O=NLKVsSNOA{>] WRIժ]*jU~׷ FͶJѳz+:Γ i*Ό]ƚittE`bWWCzw1ƞ</1Q*tHT U*TtoGrJTfX0b!zaP66SI$I$I$I$I$I$I$I$I$1cm O^! k ÀECD|>QLUըxȏ!gl=QHg}~~?yË= H'fE{۶c,8Y"),Kf},FyuBRz=\u搒H? $ svv9>κv9ۓ^Uߪmlm_uU?lm**UT*-N{۶wUʠ UU@UP*UUUU@UUUPlUU*UU UU@UU@U[eTUTUU@m UPWzb*UUAUT[mUU jU@*UPUU@}Y@UU@*Vz%UlU[UP %]VUmRqdu۝meq!cvƖk1)rURo6y_9^Q!"]SsP-9&ok PL4r_ʮsUsrBJpѢB: Ԫum̪UUUVUTUU@UTUU@UM$Hml*l{մIRIuvjx09s8+$H,Y"Edo==9MԊEu ]HWR+ԂOr|m>ԊEu ]HWR+Ԃ{9y33-HXUQEUQt,WJE9\̶i'9⪊*(~ZUUUTeUUUU ܿ|w|q}mۙ$UQ`Uy˜\Q5x-2mDUEUU_ϳ>yys7Ho~*g\/9i%ߊ(Usys9mߊ(9smDUEUU\2fff2$犪(X]>9~䜄}⪊*(}2fe$犪,*];e3332UTUU@UUVlm*{G}"js*X-2mD=2f[mUAUAPWWyw[s>f(>9̼.[o犪( 8wwns@m*UU[m*VͶʀW{ 䇫7|ʒN7ު(9}o犪(9mx/go.[o9[x/\2r珛ߊ(>̶m~EbQUUQE7wmoXg﹟smo犪(-ȬT ,9m9EWz۫McFm$*UPUUUUUUUT U]{m^dQSi2Hm=E]+4,=3s-m +`&ҺWJM 7}}9s3<|7JX tҰB}9ܿom8]+4.ҺV /﹜\̶2mxX(}em:UEUUY=߾|UTUVmҪmʀosWr^DSM$rIo]EUUE{/[m9⪂AUUQE=3s-mUEUU_}oy.fe UQEUUE23{UEUU_~rmUUUTQ}ffxx/{msUUUTQ}3{sysmo犪(5>~~r`UmU@*mWxs333<|s*ss9sy⪊*(zs﹟om犪(}-m|s+/GzsmUU{Ҡ*UU|}Y&ogv9UUUUUE_smo犪V*{g\9UUUUQEZf^x.ϾϾ2nfgߑXӟ}˙33-~*]+TQ}sfffxx(}m||LEuIandqQ%yc۟UW9ʪj~zWk;\7~Z~I$l *U@ma o G[ 8ےISZ@I $"IAH"$cιs)ΐDAHAH 2 sx\9rs:$$$NJ"@U$Qcywι;{gB$DAH"I9(A$RAs:s9J&:$H!D$$D#xEIkcTB$DAH"IJITIԢ!ky|7s:B$II A II $$*H c>yy59s=@RH"II $$$EITF3bֳ7gXAH"IDAQv \w{ۮjt"II $$JII ӢsNO\m<}?>UU UPUPUU^絛2E3&f$/{A)$rQI )$ *`c}c|{9wuwUwu[]jgu&uι{뚾'%DAH"II $JHUQs3^m1تXX+=s-9Io]+ҺWA=w{mWb]+U 9g9ۙ]+bQ~m|UUUXT frȮұXҰB߾[m|qҺWJ]+TN||>ANzϯ^{UTUT *I$Fg+j\r6)Q/۶ۙbWJ]+ ${9m9UUUUQE>>2f\~UUUUQEݿ}mrUUUUU]}s9s1}=-m}UUUUQEw7o9}UUUUTQ}m7|UUUUU=]9?kZy{o3lmv%~Os|9`}I$g7ߞg޾=9s9sɺ#9$FmUPUU@I$ܪ{_svT׹&I%3=]~-mCϷ̶{B{=m+/8r~/ysJ}y{m7T!~;}o! sF~wJI.*[}7nwxC\ϛt6s9p$mm }E!/P!P( i}NOƏoO_7zֵ+meU *lUUJ[mmz\UUurm{Iffe!9mC{C9=7n[s30!{[m 7329f  fg9s333(B﹙ems+s|33I$I*T=m(π盻廼mWAԭ|/gI=r&`ď+׽{sUUUTVe@ $nU]sU̚ԙU&m$m{I$I*Tns9ym6bmm]uֵ-[mڼByfsmhBgfg2ff[W@39̶my p RI$]oI-9 ֦?_O!Z1^A4/S * ` UU^yy??7q\ b7滑 Mi133;mOxI$.I$I$]͠6ss9s|ٴ*9癙ems[mڼy!|[m|3mnI%IRIN 9$9ʭhcm67^0\Ἒcw@*Tl[nm^y|y翽|jdn^\V9y9s9˟*,}o8f ye9˙g˙mNp[ٰyns9s|USkI$I$zf6I4@w33?3npI|}Ͽ\}zߛ{zblTnIvm{ѶeP{*O=rd[wmm@̶m7s#ڮ$RI$/ca̶yfb@ėy9rmG333mHO333nffh>р#5$RIRIxNsIm}=G3y/׷dUU@UU mUPUTy_ϩU9UU*ބ$I-# yfsnfff7sm338=۾s뙛9v{˙mp=v9$m*I*JG{%^[!fsmns<߾s-a! P^aEGPx-}ҧ'!1LEʉE*l]7Rf^w5{se~Vo>m6m} **[wlmUU@UVUTUU@UUUU UP*ʪUleUUU UU@UTmUTUPUeU@UUUR mUPUP*UU@mU[* lUUm mTWWU[eTUTUTUPVTUTUU@*;߿~Ӭn U޶U[mUUI$I$Iu[UV*r0VMrswWrs$Fc6h6[Hb ZUm*!\m~?]~oo}kkr0r˓-/w9RjqǷmܑK*k'~%{*UP*UTUTUT^y^y?xO~N=\rH*I y癛[ms{{g73-973|~ԟ# m ԓ;߯\u`mm۴^Ŀ @Uu׎߬{9Zֵo9m6emUVmҪUTmLvNܮI6I$K_{ows9zZ֏2aZ}ϳワo{۽{a}wm< cr333+M5'{ހړ/?o90~mm<{9ss{;?kZ`s9sRkcm6ۿsW8I$I$ ׬I UUVl>|mPy]C յOr7@gffmy$mrmǜsr~۽?|v󙙙uﶀNej$Ҁw}/s-yzyg7IRIR_wk&Ͼxgg۽mX1m>Ue;|UTwlUU* UUUT$I$*k_?Mz~˾g{{my.g9͹sys9s[J j}w?|vmhffm!s-mZw?fff`o`}}ws2߹Ͼ 2fffw3m߁a n9~ck{ʁUU*UPI$I$mPyd̳{K]WlrI$w_{$g_;{9˙7|qܒwI$%Inwtp&bĸRTU;hrI$A$癟o33-8/933?y`ud>I$T$$y3p~\my=ԟ}ܿ{}嶂*UUUUme[*ٶP {}I$FmAd1ntP7s<9ʶ;۾^m9Ͼ|s>mem.fs9s9ss_*UVb癙ff>so]em= ?_JS3?}cI$!m$**eUUU@US+yOUwsdۥ5$s|m82@9ϰ߻!wh>ms9s9_>U<orf.39̶mzw$I$I[ۼc$!}[mm~UUTUٶmmeU*ws332I$y.s6rKܽϭ'rm^p1s3ym=s| bI$I$[$tv2[mnffc9>ms9s9}J7wo9s-?WsT $Iҹ]9\Uw3}YݵUUwm*mUU@[mmr]mΜ9kG;dVҫnYrWp MUܮsrW?#w2ORI$I$@x翷\/W~יѻ˻v}߾}U?yS(6mm`mUTUUmUU@U[eleUUU@UPUUUVUUUUUPUT*m@UPUU lUU@UU*eU[lUT WzlUUUU**UPUPWzlU޶UVʪ꫽m UU*`UPUT*׷lV߿~m@7&$"uls7?o8;y`B4ƩH!AZRQ~ɾw*C_~duW{x293tѧB^drH{WO{;߯]UTUU@UU@UUVlUTm 9igّJd^rM9$NTmm'J޷9$+mS#m:W)IҹM6ްҹM6޷$I'J/Śnf[I$^j UPuG_/spݯ߻U9G$ʮyyWmr޻ $_*} IӜ mҹNo[}+mmor=mW+ٛI$\K[!g[m *ʪUUJ[e/߾6o#rI'Np#ornX*WiUUyxWh9s; ]uz{Ќc`kɅwߟI$N\}t;$6ےH6mm)U[*UTmwOЭ}߮Ѷ} k@kff-ǔywo`y*9s9s9*(!e\3yۙ'rw9s9sԠ'[I$I$.z$@6m*e[**$r/SMڍzN_dd@>k9sssWh\8 ff-msW{9r7Ͼ|s9s9smgi@333mk\eyr[m|̓cF} I$Jw=i۽ڨm6*6lURUU@UPs|*ڪݽ~Dڧ6$xW33s3320 [m&` C{s3]\mfs.fffes337m̶m߻Ͷ~9ss:I%JO1$IUVʪm U@6mbYUUUmds.w6+999rUR̶m ߾3.fe幖ms>W9s9s9Uv s9kv}ٮdTIRzYs9s9ϯB?V}۽ʪUT UTUU@l!޿6ܒGT?{=_~g׎~vffe`z*|s9s9sUT|7yٽ2ev2[m@337t@m>W99sss]|߿}g9_wrm0~r UPe@u~uW9<]?R$m$`Vynffff_߾߷m ݼli$L3!ss331 ffffceR9s9s;hϾn\ku^Wm2GL**Nzwz0RV1wsgTl񆧹qIS酪߿yϻn*mm(m lUU￞*z뮾߿Ymm@UUV*UT*UU@ UUVʶUTUP[m@*U@UJUU@UU`UU@U]mUlUUUw*U@UU@V[UU@mUAmU[*U]mUWUT uU޶UU@߿{묀*[dUU uتUT{|_<{5oܐo|+NyTfsN\U^ʼkvt]Nپ>zHtyp:ko[ҝ#ے=nM[uk+g}9$ V۽lmTUPm#;ܼ窶rBFܶn-[mm mmra nc*ss9sqaUU9s998bp{s@{|̹{I$릩$â}4slUU@UQUUUU@Uo<>~}Wg{mms˵l.s9s9q ߮nf[m|@s31@9U>W9s9ss>| 3333<@-vffc@{9wnfenffcWvk?ۍ*UP *m Ϲ? /9ۖm mms1>W999s9^y9s9|\8̶m r`|9s9s|s9s9wJ<33-9s;y~]UUU[mUUPUU@| fVTWtI$m $ymm` >99ss]PM3)RIRTAmdEfQYWR_<{mms;+$Vj+5EfQ]H<{m33sYVj+5Eu"Һ{331;5EfQYWZWR+59Ͻ{e{5EfQ]HUH*EU̙뮷\7{@mMEfQYZH{wWy?Յ36au[lUT*UUjʨm޶UI#KW!m:ֻwZ6ܵN]ju{smgfMDiYPYVj{;9Sj]i]HVj+5Ns;mj+$WZWR+5EfQYS]i]HVj+5EfS|ܽ.fc٨Vj+5EfQYwwmEfPYVj+5N{{mk٨Vj$j$j+55y33~vj+kwuZF־{gfQ]HQYYVj+5=7}sv*mUTUP mI$Hmvzo}*Ts}Iy˙vj+5EfPY.Vj+5;{mgfֻwZvZwZwwmԊDEfjAfQ]H>y3s_Vj+5ԊEfYVj=<;ܽEu"QYVj+5Ef|s3Q]HWR+5EfQ]I{{sWR+5EfQYQY<{mmy٩Vj+5EfMEfMEf9;wff}~]kwuwZ-wuNy9{mk٨WR+5R 5j M߾{mo~_7}Mʀ*UUd**mI$$IN_~y2s32o|ɨuDEu"Q]HVj~߿~߭ms;5EfQ]HVj+5;̶kHVj+5EfY>}ffo|EfQYVj+};.ff7;5EfQ]HVj+m3YWR+5Ef&;{{9q٨j EfQY{mms;555EfkZjs;gDEfQYVj+5r;m\EfQYVj+5Ef:n7$FUJUUmUUWga[[RNI$}wW{Vj+5EfQ]I<{mms;5EfQYVj+5;̶k٨Vj+5EfQY>y3;nf}u"QYVj+5EfSyw{mo緿ɨ,Vj+555O?ffffcVj+5j+5j+5Ef|s333^@EfQYVj+5=sǜVj+5EfQYWRss{9ۙEfQYVj+5Ny9{mk٨Vj+5ԊEfNsq;T{iz躃 vt|)IQ 8s~K_9g9S&.[۷Zܓ^}U`URUJU@mm ` [m6mUVʪ*e[*mUTUm**UU UUUTU[*UAUUUʠ*[meU6mU]mUl*ʪUwUP*U޶UVʪUl*U@[lUTU޶jU@UU@-ٕl[u|]jpAtxes{m5+w4x+ϥٕ}<& [3.f+FNz4I2`?e%>yW{VWk=w}w߿[bm[*UeU@ UP j+=LI$I'^yVj+5EfQYwwmEfPY,Vj+5N{{nfffiVj+555Ef9~wnjfQ&j+5j+QYVj+5+$Vj+5w3QYWZVHVj+5G>~=ޯUY *ʀm_=Ͼ}օw}mmWZVHVj+5Af]m3QYVj+5Dj${{mk٨Vj$HPYPY}9mj+5++5EfQYy{mk"ҳQYVj+5ֻ{mgfQYVj+5֕+5w;m}3QYVj+5EfQY}m+5EfQY};wfgms{YVj+5Euu"Sϻm٨Vj+5DWUr{\QkQszCGF`mU@VlUPUU@H㇐iХ#~$Fyh٨I ҳQ&Q&QY}3iY"QYVj+5J<}wffc٨Vj+5EudEf{;߳;o97ofQYWZVj+5Ef{r3333=QY"ҳQYVj+5 j{ow5MlCb؆6HMO/~wffgrj+5EfAufQY}ۙ٨Vj++$I,I,Vj{Ϲ9gs9osw\ֹikֻwMOϻEfQYVi]HVjm}痗PUP[m ` ǽxxo:[mmEfQ]HVj+5O=wwmgfYfQYVj+9]jF|\7#Csr+fQYVHYno{s3ﳗEfQYVj+5Oosm3;5EfEfQY=ws}9{彚EfQ&Q&Q]i]I}m٨Vj+5j 5R +O{m|Vj+5Ԋ+5EfS|{~;msQ]HVj+5EfO=}o{s333K֕EfQYVH{\w=̑I$mUPUP m~WEfQYVj+5OϾnx󝚊EfQYVj+5Ow{s3}o}EfQYVj+5N}}߾w9s7{5EfQYVj+5}mEfQYVj+5O{{yrf{/fQYVj+5EfS{sff{9٨Vj+5AfQYg}{y˽;5EfQYVj+5s=^ffe٨Vj+5EfQY6뿽.USmUPUP U[*{{ݽAfQYVj+5EfwvjfMhYVj$j+5jzmgfMAfQYVj+5Oymw9EfQYVjVj+5gw333;}3QYVj+5EfsN;{V7LJF ote߼{Uֱwzy|oio/o+}UwCwfM~>qy}mUPm?mmlUU@UeUJ۽uzEmlV**ʪ [l*UmUeUU[mlUUU@**UUmUUU jU@UUAl jU@U]mUl**ڪUPmتUPUe]oVU*U@U]mUPUPmUwU*[l߻{dU[mUU m{ͪ]UBFgfqJtUU: ;rSv*UVVeҕzzHYئ2srYMh%^kMn9=}S;nd7ܰn+ez]r'o#mےIUT @UU9\y~~}ǒI$yVj+5EfQY=;fffvgfQYQYVj+5M{{yړ{Vj+5EfQYj{}Ϲ~9j+5EfQYVj$=sm;5j 5DEfMAfgs{|f8EfQYVj+5O=Ͼ{moLEfQYVj+5Ef}9sə٨Vj+5EfQYG{9m5EfQYVj+5gfwff[mə٨Vj+5EfQYwjlUU@mVe@ *[mϛߟҊ&ImAr+rEfQY,jy~ffffw&gfQYVj+5DO=w{}gi]krӺwZus;5EfQYVj+5=߻3333;5EfQYVj+5߻mNEXAfQYVj+5{߾~;ə"]HYVj++5ּ}n9ə٨Vj++5֕Ef=߹nrs֕EfQYj $WR}{3333sJEfQ]iYAu"MM/5UP*UU*UU*jWQsΥOcsdnI$_U˻wuZwZ\N1<ǚs9rκ UIUPUB*EUEc1m&gu"EfQYVj++5ֽw}fQYVj+5EfS=s2m3;5EfQYVj+5}mǾWz9s9s?~~Pns99s9n.XdUU@ I$I=+}߫K$@~\9s9sߧ!~m|o{̻Nygזۙ_<k9s9s9s9s>=`~˽f[m\~}זs33=sysr|U*U@UUUYUVmUUHlUU{O*A̒I$I/̀-m}03?~yۙ~mKmoUPUU*UU@*eUr9#~~メI$ m彶mC;s<  vcI$tI$I$K6۽9s99\UGo.9ff}˙0ow3$I$I$*I$[kr[m}|ff@ UP* *s~~xpj|ysss?g•Asnsbfrm\}Ͼ7\{/9ns9s9yUUP \[`Bmm޻7u%IRI$G$[l)&5#'u&җ'+2쓙V@pY׹o52:^q=Iz.d$^sUܹ$)$@UJU*m*mmm@mUlUTUUBUP6zTUʠUP VʶUP*Uw*UP*eUUU UU[*UeVʪ jU@UU@U]mUlmګ mUmJ*2TmU*{wmUU]Y| U6i$I%I%s2@$In-m$K\<$I#mۀURUTVU*~^w΁UAsw-33-`Bmm@&[n[IRIRTIH9s9s9|Usf_}vfcp%m[m{{]9s9s>zj[O@!y{gm UT[{lUUW~>s}Ϝ9ssm߽?sϾ7ϛ>W9s9s80s99s|mm0 ܻߗ@s>1s9s9s_~߾dUTm**U@I${m$Vacߢ+9s99s9s9ρ \}o9m@rmۇ8.fg-333P巕Ussԓ֤Zy<-330s9s~}nUU[*USmmwJm{㗙r)՛Il[$I 7<32m~w?ߛjȒI$*I%faI&麒I$&;% @=3o|z߳m\iU_69s9s;׾`| s33ps9s9Ͽ|/{U@ ۽zPUTU |[싳oI$I: mm~?~m o~ws2fg׳SSԹsm{?/߿gs333?_~@~m̶Ügfsffw/##$ T$TYUTmm*UQUUUTUP$I$I#`ʪW+UW+$rI$J/W9s9s9{Vf^}mwyŶ^s9?@w3333s!bs9鑽{{ys333+I$J*3fIqnI$ U@UUUU[mUTUPI#\U$Jrw69$rI$em`U\̮`o~~幖o3333?w_z3*s9s8b|ps3y9s8߷ܻmۜ9s9s@>|m[mmª  rI$.6mr[rnܝn[m9V*s9ssss9s{l cf^[wpsWh\9s9s_eW9s9s<|.I$I$KdI$t݀<-m09ss;]{뭪mʪUUU~;;+tZ<){9s9kU[moz_y~m{.y[|f1m_9s9ss-`U[s333Vymm`@KvdotJ$I${-m@zCpynRSޫۀx=sokUT$6ܒIT׹ͻWV:}~mߛߵn;޸ܞI 9nI$@m 6mm `m]u޶P*m@ʪ * UUUUU mUUUUU@UT6mm*UU@UUUTUT 6lUTUl*mT UPUWzmU[*6mU]mUUU[* Vw߿~ߟ>nUT-U*|yϟ<}<7R9o|֞zHH"B+5`HKfyi$#=2d/Z y)A @7̺gmm7-rz쿨ؼ}ٵH9\=co$zne}v3gj+߻ [m*mپ>*q99sysڱA^d!BU[nfff<B߷9m}!vm\!k9<9y80H%JIRC$6sd!'=}ۙs6ݼmי@>sUU@[mUTUUUVx㟽w||syss mmי@ܾyo׀ϵy9sss{ &I$RI*T$$I$6_-m`@mmיII mA$I$I-I$I$eNQ๤*۽J ߿~UT)ǝݧ#v \@! ~9̀By<-miB R3゚6rI$zI6fw~pJU[eR { u9s33nfff+<ܽms $+o{/9nomlV* EA sm;bXV* y~ܽ33 Bl!89miB.ffo|![mٽBx}_UUAUUۿ~^yϿ}|.[m +mI$VI$I%Jdm$$RI$RטGnv-m^p \2s31!ݰpku$RI$R;69-{;5"֤ 'I4I$I$RAm? ?MnkZ_IdtX*3jW gFѓ2KQ (QHKֵN.Ifҭk}湾ȅ;1'wW|@! \em8 c̹msBeqsJ$J)9%NpC8^9[j}wdUUUUJUUUTUmy$PI*TI*Tnh'8!W33miB}{f̹Bwym c(ۜ<9syʭ8!s7˼f[NpCܼ9wϾ~rmC'<̮mP UU6m6mVlI$I$1WDηAm%JI%J@I$sBm7@!}rܶp@!~y̶m ǘ۷66I*TI*TI% smf!sm>B}nn[m!0~ VUUU@{M*U@e$I$I$I#aUpV}?x{mnffa!ff6999ssڴG go|m>C盷mo`B sm!1s39ߧ~ m$IRIRo1I` ss9˙ 99?|Ͽv UUUUUTmmʀ_]9rmo\@!_<330<332I$VIRIRwaHېB{<ݼ˙o`B^\efgO@!_JzzN_^qNb,]/bWC팫Y_QW*:Sy^Sگd<1[R^O]?5C,A<<( f(a`(2F_Q&Ldɮw)‚ ?/?*l@?\/yyPҹ}|ntU{Iu{6&\/OW[@~;N6B5M:yuy2,MPPD$"cMttt:/~|>k_~  l={[2~Wo$$j57L] @5$!@0$f  D 6Vm><32_|k+Ғ)I-&ڵzzyL]Wxtʍ̅^T?tuۚ(yUU6mVDBHKmx޶cSmDA/oGˤ2W5U_jZ[FѪGM]θmY-z QTohvc mmY7x`tiURXma[֕Fr*9 9UԷ#DwhWI"1F)b%鷂ݷͣc1tMQg&fG*&]WV4Z+h5Pi:WswtJtS9E*YNZc]vQZ""("""/]""ko'wE#kϓp}^+{/LEnv1o|׷^uM;ncuUUT;HK7Zh3Lyc?=|<ߠC-šlja UEg-aAHk 9yo BV/:|u,t:%E˵w{mm׹5%IIg2%|2W~~!""%u;w沒@#zG0~$ɋIed5*˗uvuVosKܟ:aer{lٟ$w%RP*_(b@#V\%݊`(cێI"b-D e22ܟZSn)B(xGTWe?;^?! Kz 4}f)6ڛ7UeuA\Ǩ K/q~D;ҝw+xĩdY5}YU}Q.\%ӥti5)r3Hm,58vsPuYvMS3vڣJj6׫):5ۻ]*Vjj-EJno\EX0"mREʽVRVUk~vԫ[Rڗvh͵5BF2TE$}U#mlN_ ]֫oe6&fjߐs֡ VDKJJN;~vgUTiK4VKIj5;7HȈȈȈiem2YWͷ-UvM3N[nv.jn[nsWkwmnUksn54YX Hk;VT[ sI̮%KjXc2 mKkZ鬔i"%uշ6$IVRT-rviRvum ]wVڷ5cVmWJ*+]W9Zsmչnjj[kuMRr])sr.m[sqlikuط;[W9IU2jfӻX Hkë[vWJ6Uu q[iwsu,\vɵ)fl-MR)ݵYn[٭YT.ɛ829-mS|3kfն㛜{ xU:!}z.e|ϬϨϳ ^ e_e_ee;Z~bR[*lS?wW2_߲j.vZg7՗'[K^yW[מWjF^+͕kE-CMvٮo\s^cm-55mNiwnkUlkӷ=v:GB]R^Ւ/J>t>%^p.,_zǧ9"U&Du$דRMk^[Ͷ9Q ttBPXW FR,yq%tG}~BF1X# $Mm9r'$~~.; zb;z#qAǧ){z{G}=@8諡^dKܶKKY-^ih$Q<5o-ҟAͶVY+8'X#%*z#+ z79s9sދ_nX>}xz+ #?#I gb G#IXZл_eb谣"F q 0-Kg qlTBuH&M v]x d:T0;&&+GF()2f ]:2>T(&͍VjӧrBՂ6ڛTkQMoW.kv/ia2~#9h]Lj_r_Z;._} bqү/kuoݬ43ῩsWnU.2ifk4ffc311cffc):VDyLwLuuoZ>_o:-6lȈv҇wݭpFv$g-'g)3Vcӑg$5>wK_Mvwk]2*(SQQWw[Z([~-b1bƈ؊#mj#hc[F߭{֙K_T֯)Z)5wݪ]յW5~ZMfնTK|URd&?*OyE)?Uܾ'ٳf glUh6b5`+_O~&vKǙG{W3m6fb/Yŏm=~od,Oܿj8_a5Gt^Lq. VfmZI>>{äR}^ l{#xݕ-&Q79sbWP8/t丮#,{sTA{ɕu^/d}Nz9֯οɖi3JUZ珹kU':UyUh6YluD* ȼǗZZZZZZZZZZZZZZZZ$ؓbM6$ؓjTڦ6MڍͨEƱk4[Kim-kƱX--hSf4hѣF4hѣF4hѣF4hѣEFQFcF4hѣZ+j*1UV*XbUV*XbUV*XbUV*XbUV*XbUV*XbUV*XbUV*XbUV*XbUV*XbUV*͖,Xbŋ,Xbŋ,Xbŋ,XbŊ(((j1TjƬjƬjE[E[*VmjjjjjjDmFDmFDmFDmFDmAQQQQQQFDmFDmFDm&ѫQRjըDmFDm5j5j5j5j5j5jh6#h6#h6#h6#h64FDmFDmFDmFDmFDZZZZZc1c1c1c1c1cFѶƊ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEokQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5F6j6j4mFmFmFmFԍڍڍڍښڍڍڍڍڍڍڍڑQQQSQQQQQQQQPi%,YfhJKM@ J$I$IVVI$I$I$Z54UZ]m)mm_Ǔ/*PR|K44BԨ;4Q4@h|d f&nJnwqL^EGZCK9na4=Kt50}[-tRLΌL4 6ӭ^#0٦Codp!ɨIOv~4:8{}WyoJ_{~WԕԭtҒW{|,W/%׳ok˫ϗVJVR+kUZV {=(_@ZUK1 FJ R  wY'DmKWVU*ߺ6:UZI8$ģUWT<1wUUoj=+Ŧff}NJ,I t)z?"jUG(|Q4/[U#?~z[Um#jbՍF1lmP j[QmlmF %QmkcTj[ŬXV[IUM R)F21ey4PMM-:PG{ESS)JQ.b%M[RI)d*>NR_P# w<"'*GU}*rT/ xz$}JjJh|6[lڍ%^@QH|mmI0+92NT7Huɲlk3iӪnĸd c1\#T$`Vd,bl,U TUI.װ%ܪ.>_wo,{G2u%nUTA95TW?|*ޓvͶ` _Zs "W?ﶝ*W4}?sW/ΊWœy"5YTuP첺ť61L |(z-xڷA+JԈ"#`IRI)ZKLlJklmP^UګT:#ޛOP;|g2}4ڴQX6Z2pRzBzҤwh>N t]*ûm>p=U-kWnK!-KLҬhFg)(uQ.|RzfV.%X'JeOmIdxxs޲wC!Uc c / ڕ#*4:ښ]%UAi.# b.T:t)CV׵)GޏO6Z-ޤGIIazkk#W7v̀xԔK) ;|= }cW:^TX+);]|Q_wUooN[b x-ub1I]؋ѮQ]{.KV%m*ƺW^,Wn֮hʴGItW 8UKo-r"S0M:iMJIwu$]K#!\#Ux^]VUtPu hCC~|/Zby©/D2S)%.;-jRIIIM"$E%%%Y[nI"c cCRO:hu{9Wk)xv *>c*=7ۜVIPNdtgKZe;wٹ:#^@W !{$J_EE_g%J?EO"uD=R^G36ٶ2M+MїmRox{dUxJԪX5g++5 қ)2gM٦-EVSZ2j13YFmMQeUVVk7nWUmo- [6hr;/W];UKY6 :N?%?`yUUQ<A<§z?kǏ<J9NrrTDq>켑үErzdycJ"~tlJ_U@.TW#Ϊ@I0?:LǮЪV*?oZkM0%NƁaOmR'B_YJ= x"$\/m{oj׊6D*mR֡L:jjZ֚kz8t 쵴ז%l&C>ٴU%%m&ԚZѶMsQrWJ$5Ge/U_YHʿ$}wU|ȦA/^oQ'&I=Gn.Ǽdc11}IKェ#))P{~~;]:pヤkZֻ\9kXYru=R٬>LF,5Z+aTR){jGR?$_ j61EbX~kmFFQF4hmFMzOxT&tQS4*̠% ~d >RUUD9Ov41)@O6mwIvG*rrM)G}w;:K;6Um]mlӝbܮu VQK!cZUmOƲR5#X+1f%Vd!wwwxEAꗧl6&N81F[mj* 4-$ԘRRuԤwU*Tat*je##ѶmCگuo%Q1hcESYM,V^*5y uŰ٘ӕ?k5UyWjTRx;UTpҭ jl[X](ȇ@`].u԰'j1Ҏ]j8 ,ym_oktDj*"6DQ6SIdYlRZ(D6%S]ĘPڶ0 F`lJeZj4bS uRN'=ygss)Ut=&jF-Rnvڄ)vۤ֗Z$TDE%%L[WZlReVk]U~Tŵ4tGG!t$)ZVPf]{OA#G~BE9#Q][UkumUtkeHʑP/+U]o5:E/Pߜu+RO'Q;ک-65 ET)ܩ!xUu_VQ{JzP#x/I=£ƅw^8s]Fͪ#O‡SKz13MeF%_>~[U߸ҕv*K_҄;J'?Qt|QP?Kg)b>ۧJ;Ut)G߶x2{3iu׊RM!U6ե51]J L1L+H0V( &1a%af1*1# ,XŨTƨnDW)ˊTeMU&Vel梹5K+Ic8ҵ-ZW2W+mI5*nDQL؄Jf"5Wj嵷)I)ZVԭ7UuzS‡^jNO C 8J{;+P"+* ]Wy$=*4]dU؀v+jLl%uwv]Ҥ6MÜ9]]ꮧu˺Z]iIi,Ͳ\*yƜ *Qt.hQ]G]u]uuiWKM[^GIS~/{888-YeYel,eYiRYeVTYe5`VSEYY) β9NsVSyQ##&Qf-9(~Mf I2c,7LgKJƍZh2cXnW<\ة/te=US?t*Ժγns˝HʲȺ޺ Vi'*2U\a[dܮIZe˛aW0{CxNO(;JUJ MJh+H Yd`+Jz ɶiUsf3fڑ[RQwrtD4d}IN^(k\P΋Uv*bQEQEQQE{@̡jBRP䒪UT^ӼIHPk@ wDDA"xM=5^7P->˨qG(`ԬfLfe1WqUabp@"V3Je,U*JŪQUVY)XU,m*jKXSDNRZŕX̩jU1'uIJJO).JqU{4gJq2n3UFORSiv[m3Mw :g #{^AD" B!;p$APB!pt(!@d 2; ( KJhd:tt*Htl`U R)JR)JV1¥]08hT @qA!#V±PEI:j4m(Hj5T*bѰPm)M+13@$IԚ@F AomTQ @@)TDSҏH@i3SکT)j2 i L R#S 4dbMO5!i)%$ Ɠ&Ab4ɠ~?o~9̃5[R1Cy9\\%}*QW@/9YY@? 'ߞ>_cD G8"8QD 棖㉿Nѣ|dF5GcQ1?|ƣQ?Gj?G#G(;(c~"s9ȉcOM~?G|b*A%\dDz?N񑲣~ѨcS}$j?N8Mjf,o TUUUTmkmnUPwu6$I>B(W J(YlɥU eHb LL`}yׯ____ꪠ+n;*͐*㻙+n;*͐*㻙+n;*͐*㻙[wńUUUPUUUPUUUPUUUPUUUPUUUPUUxlVUP[wńUUUP[ ۼw6@wd ۼw6@wd ۼw6@wd sd x@ sd x@ ۼw6@wd x@ @>㹲[ws UU@m; Uw2m; Uw2UTUU@UTUU@UTV㹲[ws UU@m; Uw2UTUU@UTV㹲[ws UU@UTUU@UTUU@UTV㹲[ws UU@UTVoo ۼw6@wd sd x@ ۼw6@wd sd x@ sd x@ ۼw6@wd sd x@ ۼw6@wd sd x@sd x@ ۼw6@wd @V㹲[ws V㹲[ws V㹲[ws V㹲[ws UU@m; Uw2UTVUw2UTUU@UTV㹲[ws UU@m; Uw2m; Uw2UTV㹲[ws UU@UTUU@m; Uw2UTUU@m; Uw2UTV㹲[ws UU@m; Uw2UTV㹲[ws UU@m; Uw2UTV㹲[ws V㹲[ws UU@m; Uw2UTUU@m; Uw2UTV㹲[ws V}[ws UU@m; Uw2UTV㹲[ws UU@m; Uw2UTV㹲[ws V㹲[ws V㹲[ws UU@m; Uw2UTV㹲[ws UU@m; Uw2UTUU@m; Uw2UTV㹲[ws UU@UTV㹲[ws UUU[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmkmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmwwwwwwwwwwwwwwwwwwwUIrJƭƭjڥٱUsh`b=I+%}~/~aH}:08Spa06QaF1 43aΆDt4Sl: ”4h)F TA*@A8`hb {L|,,z_2\v-ZB:b[кv. v*&,h\DEAb(& ZQx||k3i{z.\+F:"y]UWgHj_[NNY*JMՐUkoN\r].^VU˗ mR۪CX*-wwvyIrknym7U;+yo-Ԯ=靛;~C*| ~ء?ZOQ?v-l!_mj6A/w|IߤGp*_U'0JIVӚW>]9vpYEN Nzɪw<Y:i~VzX#!w=Rnݫ$npq{c|w3Z wyZp$1-ջrxDc:v'{\].s2ympO{,s~b-e:Nv+cyBrʰٿWp[=>堼o/e(opѾ6OxzGd4C-ڦ-v<vߦ,gY%a Ke=XzZQ#v^,jK}S^xzXwYE9}sygwރ;r%BwnG_EWpOx{&M֮{޸n^w!2oOwt{癙wEwГ-|n>陘ޙ'N cɃ e2ixoa]Wy9Ԧz#ݺ=XM--mIׯy/#;u3ŏPB*^R:׫bxI+B//ٙ1^3_ǞG6wqsgǝW<.kchymI !%m$mm (PQm867ͦ͛qVkfKZցn`ݰF 2D28䆵ou_>_@σ >3@;_}~`E^!b q 4ϗ\y l_<+Z1;7Fm"1zzp:a! 8DH&HBDs8'4R* m静vtWg{n4iFƋ*ţ\f~y搂 =냞$w큦6z/Gzk 遦6zz=|Osy򞵅ۍi1^8u+߯<@C<߽psDsp`ihmƋQ`ihm@cE_">||2|'= ^ 1 4;ZY1=Ϙ^ 1&4;󮴮Cv{`hgGa@c |4>P@{4pgf=JidxVwFNz{桏B hAqYc}';Km-zk3-u%.feh_.(݋3Zֵiuǭ9+ Jr{jfz]ٻYY?m' 3$-2e^L fB6ܘ\22ۆeL.f cmhw0g]߼={.]ػyfL Vˎ\2roo07 -WO2 XwMW7bvIXػ>(`]ػwwb݋wv.]ػ`]ػfg,lwy#~]+V.Y.XxqLFg{odե-Km-Mոnn|x.]k͹9zgד4 HkuI!'kuk56eI;ۺ3 33333 33?gxI4OIo^fff$߬]DyIĈ3333 $s33$_D38˱wwv/ynIX7ֵ,mDžM-,;yaA$V=wynIc3-l[ Nfffffffffa#f^ffff%y<>[vY[33 Km-ey.RLYFޮ_a_ffaY`̻}-]$I$/QԒ6cxF2YacqQY'I$1I;m|cl,Hd28DӒI#I$FFHHI$S_xkp1{mQ$1oRY:-FvXI,I%7\6${v۹=yXa:ھɵMiO:rz}yi&=e=iͦOnuzڽjfI"\m+ bF+chojܞflSQI/wx8sҧ^V4T+^\t5N=rxWp3JjdPpw.=3̇ci>S ߮;g=86>_{wD ",lcCAoZz̓ۃ&lclkY|į!cF1.e 2T틇 6[m 0 2UI$````fA(`fbW2QqL0%J̃&SamL8ivفg/ 2e iYjmo0wmL2e L̾ͶamL2m0U9I.{)%;;i%zZq8bswr뜣L<6mm @2eV@@( 210  ` 2@ffc>fKLr28%=333 Rɔ̶kKm lXfaYFFdddXddQf2Qc&FFFddddddfFFFSf)QEFFFFFFFFa[l[l-l[ض-l[űl6iebضUl[űlbض[űmVűl[lal[űl 6ژre[TQ)XOHڮ=m5٬DiN2Tɸ1 rȺC=?b_2Y/N@$e*Wb#ffaGffaG%[MCiŽ'e2- _͙~]}mB?MW򟯡WλBr[tY_<dz5 =nk+/heP6cmzyr-o߼^U;Gq']}- ̻بD<~F&{tj.~-Me~ba^ڻ}g̹ v|y43::WyȻW+#_: 24Zߙwb-Qe~y_L/&]oε_;N^|V:mǖqbr1]e9 ˰J6}; 1@h g__A {/}m=z.!= 01>a>#8" a?pq|}OG({0 @0=b ǣ8Acfam91\1s30c.ffar]3 q<Xcffffffff33 xprYs30džgwltvma֛3 q1s3md5Ӄcfa38ffp//ϒIRR$g33 q1ǃľ0faGfeqmݶfa9ffffxm՘g33 q1s30ff30mc,{vV{2qqff㗇U9f͛< FaK )Ã=>1a,8=HaKOylU^x=0<Sc ǂW_V%O>$2e/>GCpP=>A0A]]JrYI%Cff0[MFS㙙<9 =hOI*_ۿ{;쾓'Go@?>|߿~U_Jw6e[*nlʪUT yˬnd U@ sm UAUU w6 n<UT /WګU*UBiUl[2T w6e[*Vs-T wwqlVUT;UU*%mnmUPwslsmT*m*U[lʶUPwsʪʶUPwslUnm*UP|ٱQ`/}<|;UTςd&I{utAѻݽ=~iÙ='wݞ=/L"B S߿/m6lUʢ"ٶyly(_>+32vAn9B{{̸F 'FۛnI:I$@G$nAn$P{.I%d$qVfۏ̛swwwcmےHuPUemH:E&W7Ѷ/ٖuU-ܒ8yPeoKE&GͶ9'wuBMBwvӻ1 6P>srwwtȅ2_ږ$UeUEUQUVUllۻPzޞ*^Ϛr׾w_qn9zIG$nCwwqMTwrHmBf{os2Lm,<۶I0z}{TU[eT l-.:smۻ΍7Pܒtmv:4MrsI7wrImBfzHmܒFxE $gےN7P=HNnI$UUTmn7[m wwωwmm{ܒFsUQ[Nۻͼ9$u wumP wvIѶ33'q^dmBm UAUUVUzzzߟBf:tm!CrBI7UVfyn| s{uUoB$u w.I͹&33ds[@y6nIפ%m6P[l-lw2뻻]o{2PvrnݒN5 $p"A"I}ݻA ""#9{>aE\;{>"""""9ww "x"A I$G#󏈈0w>}ߚsЪm]ۊ |qQ|=n󏈀3=IQ@$@$wdߟ"""#wyDDD\7w{>"""""9ww "ϻۻ3"""#}{盻{㈈{?www|QDDD_;{{USmsm=|ǜGRI9$(A I$I9߷Q9󏈈|s "8Ϝ7w7}DDQs绻qDDD\<{>""" #=vg""{wyDDGy}qU**smUU[+lUTz.#I%ےI7RA 9yDDEsqaFs9swDDDG{{" "9{8ϊ".sw{" " 9{󏈢(9s|7wQnaE|qk&,e+rc{.v^wqd]6?z$I$mmT{<VUT yϟ>|ϞyuU̪UU* V>;~Mԇ‚@!A PJUHWŶ{A  ANܓnMHfFa\9s 3wwf6^ T?y߿ƪl[lnmUVVwfm7]z>]{;""&h7wsw{|a`\;<*$I (TN<̑h >}}~|0 ,.s{`sa`9www3  009|<0wwmwyW)W +{W'w_$tmmQm۹JmU@AR=np[|ܓMQ$}wwEDdܹ'6v$hI&InvA;{dAwwww sw{`}sww[f9y盻ݽ`f{{ ,¬_ϒ}AChB {ϟUJVUU[elnfU;wG70 9nyn`9wwwf|F`s||3 3>y}p3 #wmͷ&&$I&wwrH`aaswww}p =w9wys{sw{9oyssyϑ{w߿w\6mЁ} i I}%zׯ_;UUV76 UUUUJ篟>>vo6$ N9II$sw{_HI$I$Lrd$\s9wwwwwI$I$]$@|{6gwߗշߠmYUe[efs-VUy'I5\6äI$I$9$DH$I# 9y盻ݽD=$ntI$I$n9$.;~ sw{9{y먀{{\m5i[w?:*h>m}eU w6UP*U>^]dUTwbU@ w6UUʥnmUUBͲ Uw2U@UUGo}UlV̫eU*!U[*U*UPwsʪU*UR͙VʪVUU@*yu[dUP* nmUSwwql*UU͙VʪU*mٕl*U@6 $I$I$I\4X hP`^+} $mm܏sT*Tإ<yqy޷{a}˰,Ś6Y{;&ŝoy]~{~ÙUU*UmU@UPzdldznI$I$9s99~9{yw{I&I2>m$I N9w}w}ps9s. DI$I$I&$I$I'[>_w_ۻvۺmBl[mYU lw积ǯ˫6<ٶ}hs绻W>|9s.H$I>Mxt@߿s~րܒ9$hjDI$I$$߿nsywyy{.|V_WBo$}FvʪUU@UUBnsmJ˒L^7_=|sQI$9{{9sww{@yo߀I$wd$5"I$ })I$I$N9IR$={s<ݳ3*Ϡ32ۼ|W~~zʫ7~[lURjV̭ͺ{}[s$ $I$I'ww$I$D $Iz9˟>9yw{n|sn9$EjDIIے>>s߿~ Ǚ$I$OwL9$܍mmrzd\*VmUUʕV*o_m<ێM}݂DI$I$qɻG~sȀ=߻{p9wws|y9MI$I$zHbwwW>|~?B@~ҟI$ImUUle6jͶ积_m^g`\9ww> 9s.|s9rI$A$Ot$rI&_s7w{\9wwπۻْL:I$H$wvp8$I$$on`ܓRs l*UUUUPUU_s:wwŻ~zBX ՗w:9m$Usp}$I273Fܒ{dQA{m. ^{~UYUJeUnl;m[-UV 9ݺ..=w$qɃ wy$KI$AC3=$nI2({wnHfdʬ[rI $䍷<~zww~]Ϟys+eUUT UUU[w`wH*2I9{;[wvd>qwJb$L(nܒ $m(>$̂n'6Jmʬb\BsA$ $ݾ\H32{www{2m[mYmPU[eT~z=7|'=@o{fw@$ͻrIH A$z}={3ߚAN$m3 $Ies|s9Ǜs{|}*feϙfUȝU!9ZT; ꟶϛˡǒ=&wvtmܒHo>>>UUBͲ(UsT*UUVlʪURysPUTfU[2T*ٕRUmJeUWߵUPwslV[dUP*"mTUPwslnϟ>|yeUnm*UP͙VʪnmeU w;ffmTUU@*"UAUU *UAUU*l*UvwtrHT(!C}!R˜|*0 rےI#mےIm:/_ٺfwH&K]S^9wbfm^\f}k~eP msn*[mۊ*w9H I }rHKDow{А 9yrFrBII$wvI$eV|А 7s$bn$5GtAI3$zI H$wuܒI$I >{m@UU@+lwwX w<$I$AɈZ V[eUʕ]ͻmneT뻻NޒI2BII$wvI$eW4$O=wwwߚ'9<7wt w|wdL $I$AI$m )߽w~H;ebd$H 8'~hHH \IMۯI$VeUT Enɑξs5w@12In{B@$vI9qBII$wvzl$O{{΄;w$ $;w$I3$A$Awn}$@ 9xHI&V(I I$ 9oUJʭfl UnwwumPm|ܞvͶ2II$q''trebH9}~t$Gwn9$5G$ $2{Ͷۛ4$O=wwwߚ $w\$I&۶} s߿|Ӝ ww{~}ׯUmUUUfs*UT+eU w׭G$q$A$AwnI#mb$H s$w"@$9߿~KmLAIݻI$4 9~΄ 2Io+$A$Awo6y$H I&Ub$H ۻ$I$I$I${UwlʪmUUUnΘ.\2[n36 $O9@8MZ?8mqoe;;%ʁWڭmUT lm*UmǯUV{=>LAIݻ}А 9y ~H]$nL $I$A;rIs+=Is7wwww~hH;w$I3$A;{wwM8%} I 抹 s;w2HrI$I$*Uʪ $ݑKus7LPANswww n{}߬@$9߿|NI ۻn6ەX$ $s۹=}$A$Avcbd s}ߝ nA7I$I$A]$L $I$Ar6wI'wwwImT[lmmel $I&G=ݏfv\wvV|'9<{37愀;vm$ $;~rH&$ $=%m7Hsy{B@$6I$f(I I4N$m3 so@"\FPAI{wwdU[m*UU[***z~o_mםrv'691BII$̒FەDI #{BIBNs}syI&b$H $b 9yА 7v6P $I$A˻mH}{}АA hB[HofdrI UeU@Ͳ*zSm${ޑ?ANsy} s$mH I {fa$I|o΄Dw$I3$A$A;w;sywܽ sI;L $I$AzX#mo*Um@ww|m| < }f=$;썷q@H$I={$'6n@ w6ʪUPUmUKmT뿻nv-΄Hs߿nLAwnI&V(I I$߼wwX@$w7w{ 9~r愀HFۓ1BII$wwGg 矼ﻻǾIw~B@$_z?Uzbeyu?#B?~]{'̯e۝o7` my|nAUU x@UU mUlU[wwuUU y]jnlʶUUmeJUnm*TwslU[*VUU w6[AUU w6 UPUUJw6*VUT w;mUmʪUPwsfUP*U*UJsjVUUJw6[dUR;UU w6ȪnmUP*l$HWA^mb_zߟ,UU@o<}#T(ޟgYTJ^⾹b{us'<;Llc|c~ k2Ў UeU@۸sfle@m77;LrI3$A$AwnI&Ub$H ܒI$P~HARL$m$A$Awvd6bd $%vd6bd$s4$9y{$f I $I$H I xfiΎImwnOf=$ $_{ӻ7$$O@yw~*-UQz޿;]L|n$I$A۶ms=А9}b~}$G{7瘙$ $#wm;(I sy﹞؂$s$1BII$wvzI$ay{B@$>{l+mUUlm̫*mo__黻:Dym $I$A̒HLAIrF3ߚ'9>f= ;盻ߚ'9ۛ9mQd$H q$ ϻH '߿~g8&7$ $I$A˹#IR'9no{:&f]ܒL0AH'3/\Y@$nwwwhHwVyZ)fy4&It#߿|k5<9 ؾ|UڪnlʩUT*Ͷ*[bUR-ٕTUAUU w6ȪVUU@*㻙UU*̩UT*ٕlV2UT*ٕlU-U wwqlV̫eU mȪ[ws VUT*㻙UT*l[̶UP w;l[2T-UJ[2TwwVʪ[bUUI$I$I$I(x`B =AmxW0^|tI$I$v2koW~ªUYVmmTUU@[翛IG3\eA$H ̶ۑH I ˹#n$O}߾w %ܓI I$f]ܒLƄI{b܎wt$I$AnIg8Fw{wք@nW$%ffdۍvfM϶*ʶʨV*ͷ|<$ΒI&I I$ ۜuQII${wsq$ O}ϟ~=b'Ͷ$A$A3.yE$|А =̻omI I$f_\3 {߿~$_k瞿]UPn6l*mqS޿ ݮw7rI0II$nw{cB@$ywքIy绻{ƄI~:7& 0Ah$q0H@$|{А =5[$H?P) }}OII99$@$I$I$I۲lʪ ۭږnmU@U Yg=H̗#}P "NAAAD7II0QBHP) *I !ABwvOo J1AADo{Զ<ǽH"H!!"HHHP)U}E($A lCCFk﮺OII99III !@(nda !A$(9IIr rZ;B}"H"H!ȓD) HP) sWlPITJ) UI!@A$(f6mkd$$$I4-W8w|rI$}۳76"mm 6,2wwv "RAD#wnϤuOhA%TBHP) !BvkW1A$'w&M]ܝ;7rnwn@$ !@TRBHPI !@7olTKw&Nܛrۿ}ࠒUE!@@$ !A%TR UJd߻|($ɻw&K߾y@J) $ER) ݝww&ϒϾ$ " 癒l|($BHP)  !@@("(|_=}Ͷ۠mªs*m*M*ݸ7tϻ wrwrnѻ#9k79Zw "R!A%T @}ݿ}_|(.w'wWw'w&Ms˿m|($D $$I!ȗϛoBHP) !A%@$ !@TR;:~}‚H"Hb$I6"H!@3<\mࠒI !@($п}I$nsnmUVUUU@UWz껚>yGζsrr$؂R"gv}nwt8(($($BHP) !Aogw}bӝx"H"H!ȓD " sfo9΄IIrBHPI  JsA$H!!"H"H"HP)U_wd;`)A$($D) "NAEs|eEdYEET}ӻ> $EBJ) Bwa센I!DCC) " AAmSA%THR)  !@J) >'>vl*mUP[׭6^UI!@(%@$jBwdyϔּ؉"M$A$$@$ݟOnj *R BHPI *R<}}I 7ʲmy2eU*zwwv7y\m)I !AMRHP) !Bwͷ5O *$(9r$9o~y~ JH"H"D(Bwg]t$AAD$99^ym()  !A%THR#@ZCb$9Iq *1wj J) rwtwpջi:⽵rRKe֑tD;Fr۝؋e[3sr;R̓m+(~w?s׏ݽ{n/_U*{UWҭͲ nmUU@ͲUmTUP;eU w6e[*Unm*U@*%URnw3}Ыwsln<UTwslUʠUAUU*"[mUT* *U@*me[*UUE2UU w6eʥ[mUUByZ[ws [dUU@m[mUPwdUTI$I;*CAm +1DWhGm$I$I$Foߎ}ޞ~o5:DD' "RAAAJݚmࠒI !@($@hݻ>nχɻwFRHP)U$QHP;o"R@$JH"HCSA%T I9IIIr r9mמw{{|뻓jwtlܛ͓'UI!@(BHP)U_wn|y'wGw ܛ;;;7u9g7כosrrBJ( ߾o>SCwɴn9k:Ĥ$ID( L‚JH!ȓD " Ғ]{wڪUJeTUPUUAUYeP:9sv|(ZB5E!@IP !A$(1O;wrnջr/g>M>$QHP)U$ @f|(%$$JH"HP&tI7TPIP HP)U$ UE!Bw;(;7unợd>nadYFadTeE<=~|ܢ,",s~"+#03 /߹ϝMalVɲl'||m߿@|ϟ߿UM m6mʨUO^;۝ &$@EʊȬ/=w{EdYEdYEϼ9߿~"Ȳ,"Ȳ,"˜<|Ȳ,"Ȳ$P$P$P$Pg}EEEdYEdY>yϟEdYEdYEss~~mdYEYEe绻wyϟՑdYEdYE99y"Ȳ,"Ȳ,"߷wwȲ,"Ȳ߾~ߢ*Ue@UP*ٶU@o<\so"P$P$P$P$P+"Ȳ,/=ۻ"Ȳ,"Ȳ,"|yȲ,"Ȳ,"Cb73YEdYEdYON7nImղT VUT=^iszm/=cm  "Ȳ,"Ȳ,yoߟEdYEdYEsy>mdYE! lCb7|ֵ<~I6 ,"Ȳ,"~EdYEdYEs߿oȲ,"Ȳ,Ȳnw9k","Ȳ,/{"Ȳ,"Ȳ,"˜7YYdY[w>mdYEdYEEZOo}$I$I$nmʶʲU[7w6#ANw_ssm7WYEdYEdY}9;{|"Ȳ,"Ȳ,؊oyu9]x! l؆ 73ǯ?I$I<%;}O*UO>w}ٕlUnm@U@wdUU@6ٖ*U[mUT* [mUU;UT xEU_oWvٕlV̪UT mVʪnmeU wwql[bU ;Vʪ[mUTwsl U@UUͲ V6mT͙UJV*UB͙VʪU[lmB͙mV̪U@׿_ޯ_ TVHS!XHG}UP gׯ^~zbI M=yg.wuX˓$VͶd*UT̹޿/_Wk| _."n˒8sU&{P{.[T$$u 3.HmByPrtmU{ϳX(gy&{}.rKV6nlUUlͶʀUU wwyq=.Ύ[@rlP 3-{˿I5ĴP72MqUU2g>mAfzIu 3-wv33w渖&9$B~~{~PVms+*Vٶm6̯k$ގoFTmnj,̹7mC3=wmq-6(?nI6f[\M(ow$eoKEߛ|szw~[m*w6UeUAUmoAM1qkޙI&fI;2Α3.I%;D(_.I9&f[{ͶUW{vKBf{w37ǻE@pqKwwI#m˼ͳmPm*mw3lEp9MfI6FB(,̶9$eܛ, ۶㍷5 ۻ9wnsI 䓣m!C3=wo5v$u ˍ$ۍm*eVm֪U@ l<(< mB}ouU,̷#5 q6(|vb=mɺߤI7P˻l2U)%9$B/އؒ$UsYUe[ell[eT^6z;޷ȅ$u 3$;@ ]9ĶRKsI$$uU,̹'9$PC3.HmBfyfdX(&ݹ9$UOm~~*d*j*UUϏ<;ɸ{&$܏_633wvl=$wf!Cv7_s@{ۻ};dB˷U-޹-Tw{^߁UQm92mڪUJͻTѹ|&܍ߗ\6BBHnL5Wwܻyڕ :smɺG$n9BI7P̓KyΒI7UVU_+Pss۵œS˕jH`جH? y?ny?|ǎh m_onmUP mUU*nmUU* nlʶUPwsf[l[bUP smU*VdUT* nmUU w6 UEUTwslnmUU@ meʡUnmJU@ xs-T*Ͷe[*[R* [mUU@wslU@UUJw6*AUU;=w|z^ +A\+Y[ #mےI'}}ߊF#~icüm鳎oy$5ļ]4>疸IKzߒUU*UY*m[lUlz=mU<*{n2{=u ә$pd6ۚG$nAn6ۚ[NS{wd 'FܛPT.U[ɕUUleVUlUI$I$A[ UT*|{6# ww$I$Bo{ onɘc=;xE &yrmAnɽf{731KhzIku]=z{meT*ʭYVVU[mTen<[rI&?wwlۨPnsni9I I2>mPwqM(-ܒN|m3=r%#{'I$>y|߿|mU@ms9eRly]뻹mt.2!Bv2nU^'FܛPffImRI"IIwt I7P'qޒdM( f^%I#mnHmneT7wwq*emPޞ6w|ϞF@w{뻻I&B2nC3=$r%z'F{fe9$Bww$b,̶9$ffGͥoI$BfLNrnmmmUU@7]﫞(_[6wFPnFTfx^=rw\wYf|mm~={I nfdȖ L^{;{U-U[*mn7w6Pޯ_m} ȅ 1Bf{731K@ Lm@ng$@nf\M~:6Bf{=95ĴP^&II1 %I$I$UUm@UU@]e4\n&=$檬'F6{P[rGB[NwqP̹'Fn<{u n|{ږlmUmP-ͶV[mzo*7q>BݒtmFo"33ٹsi`yo"7ow$ouU-n9$u 5wv33ٹ-=ʴ=~u{ nlVVUYU+m@$M Wwwn8Lp܎tm 5n$3=wqP[odou z(-$Pn$Pff6ocݝ UQkP{{_Uttit5S/*|=__ })_Dh3Q/ܲ,C)z*1e0 `dSB< ‡_5yT-Bz?|%tHdOL&%W>RRG4t*Z U TqmmUe1c1b1ccDDDDEXXXEXLSEXILXcXLDDXXX̳,43L3Scc1LE1LE1LbŌS1c1cc)3VjYifieim2՚3Lшb"",bbHɋYi3,2-X,R",fTb#%s. $$si ddluKGG<'^sn9zOdڇ?T|W_=\UWZJ^l!@1$!2JR>IrJM S*wI>'VW9zG;P+ {e.Z|u4'%i񦩚Or_ևA?r= LO,eK 25Nʫ*唤e͏>H?k&fYa33,e,1,ďyI[yBKo-0@o\B׬hu$Tq2NH7d$ɒI:~2OId$>Ge5tXLo-5u{R M̍q;K' Z7J_3 evF5hnI,L;m>[IˣYdˇHm%I䟴N$nI.48}kY'RlާCs.77ԔHݒɒ v$?跩Y'O[Rm+vҷm+vҒO–Җҷm)m)m+vҖ·m+.򙙘ccJ;a1fC2fC2fC2̙]ػWh].j vڻBWh]./zj vګ.j vڻB]v vڻB]vлWh].]ػv.]ػ{b0f]kW=. v݋.лWh]30f j + dBMI#rjht5I(F{~^G_xI&y6 =],yjm׮G_2'Γ=D _.|yjm=nzg}ugv3?}N|kz^qHc]f<~z#?|r$:~1a7]]M>Iͮ?\G ?{[8O#}geմ HGa &Ŷ~VLQjll>4}5X٦6|gXa5Pgь[!ƍ3LlC>՞u?,e1fRfY2fTf1=:Y̧orZvϧk}~O9ZoSR/Ӷ|zf|_k]eo]xyOW˒gɪwk>LGϒ܋\3g\9~a߹^V/o.rW}κ>gn+Ĵ=]߿Z/;[ fa/uc#Q ?.n$䐤D" 0ُWOM6W챘>sSc8*H[Ki 4F))z {>WS\2Sflٴ_f1՞F#RA )EA_:m6lٳ1ϊfLy">b즌?XSF 3(z?F3 >pA |0?@(#0K%YI6lYO6~H>\V|m+9>~7_RӖlBƜlBƜm;S Q[JNZBPڭVҫiUUm*)J_C;KG"A]3m63m Y+)K @$@,1L,@L@$ĩ@ X B@ T=M7$lmqe_01#d,imx/F|։|x_I|r%%K=G晦dsQ3Na֧ZV54KYJJP$Jlm{5.jfɗ3$2J^6zeLVa̹,se̳L116nisG2=e*Y*@X* lmF{)<<g*rK%pA8GJՌ掆)V1J{LC>J{_̂3LٵxY8gEw?{_WCI H89$rH !m03n9;ms95 -/z)>0hz]Z5|+xJx_/IX=G~ ȧO?)9}oA˯W~'[qV;^:ۮmaF`PLצ3;rKK~E^}ȝtCY³\G鵶C fjzKrqI;Ԟ^|e|d]q@NEqI8)a݆/Yl'U3|+q8U&4 ScVړz_+4kN#_-Yt~\S|r4dfܙ+f:1yYVC/K+WWW-_糞N=گ%<`+.j[[`,lNv/$ L JJ=$mRlC͚ٲmfٶ,L0da;[6m$ ,* 0XDSVY-EK!2&є2eʦ Keic*2VڌZY`,K,R V%Ka,abdɕXXM&&Y4f2i,%&+,,%X#&C# Wfmv _ާ?9:',k+Wqiioms漎`lVjeti-a3=/#/9e4e_ kƺ9#̲jY5iѬVFpqqrW{&R?W^-/\z'UWy+ή uuIVWN yt8_b`W_\ۻw;rww;s8fۻn懏VP_QOb,/~'/ /eY/xy~%eUaku͛3lHe%)JV>[6ٵY}%6_{yh9 ):>pk'?G$I$I$R 14JxNgʸ2L~{9G9G={/g{{xTa̱藱|7}'%j. `. < #G|/)1 SL 0%ϣo {KM6lؑ$TDDDDIIEaEIDK2&IDEDdQ%DEFFDEDDQdDdIQdQDE1E2fiz>W=XXXXVw-ef[-̲İK Ȱ,,ظ[,˝˚47-v[.;e[.r㜳..e4vmYijAW pW~ UK՗_!p]WA_ZUOݿ>6m8+0KLDLLɑ cX5c[X5cX5kƱkƱf5mcX5?eVRɆld3,ǣ6hƌ`G/L~ҜW9{ddz{|=ޕC.A~쇁j;B_ʻ\ GW<^:WrkӨ5cXحححححححححححQQQQ[[[[[[[[6j6j6j6j6+b+b+b+b+b+b+b+b&mFmFmFmFlVlVlVlVlVlVlVlVڍڍڍڍحححححححح؛QQQQ[[[[[[[[j6j6j6j6b+b+b+b+b+b+b+b+bmF؛QQQ[[[[[[[[6j6j6j6j6+b+b+b+b+b+b+b+b&mFmFmFmFlVlVlVlVlVlVlVlVڍڍڍڍحححححححح؛QQQQ[[[[[[[[j6j6j6j6b+b+b+b+b+b+b+b+bmFmFmFmFlVlVlVlVlVlVlVlVlMڍڍڍڍححححححححQQQQ[[[[[[[[6j6j6j6j6+b+b+b+b+b+b+b+b&mFmFmFmFlVlVlVlVlVlVlVlVڍڍڍڍححححٔfQFaEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESg3 K^2{2Yg~gi˶mvi5m?kׇvfڐPیo6nMeN ld;3ǟ.b0d8xv /[6n7cLi4wgG͎19 !d4,4 ةf80E=2eJV^dKB:& h^dt}1>φ~/ (S(fE=dq].T@ Kf$‡BA xa@fFpZ=!!hGBN\RD"`Uʯ~c^SY,_+a F 9I, cHXXec2ec,YS,1H,$*Rb$,#JfMKOPPrЇOҧ?',[[A]H=2+RGK̫T*ʶllٳf͛6maaaXael6-̓m6l[-i[&d-͛6-l-6F͕f͛flVaadYF%͋e`ٳblٶ`aY@YXɉ``$$J1YXI$I$I$PCU[ 6M2̌( ",(,,(")((2Ȣ(((,(Š"(*"(%U5b6) ,eM bA^B֟W GqD?:PR?d M]e%RHTTIu$CRFR+kD֋?T*fklve| (ƪmL[6s#BKezd^ګ5TLJ)%E b*?'QIU)d"}XQ0mRAvzm+[[[[DDDDDFJ)fa,DJYK3,`DD%2<Щ< m hl6mehe64I5_]N꧒'`*^yUU9DR],4$*Q>r*ʕO!rZ  QFL3 aL3  X3XiLeF,b1"aTVR01ifcX̬dWUQt, : yJC2*b2"yCUW@NJТpT%-x)j0iXZ]5OrHf ٳf˝w#yFׯ^,MkHyS6[Mb]O0m6K[/^fѴzשK6j6^y oXeS6[Mjv>Y^${i :}4[f4ķl6!"4H[{i23ƃl@V8 A~9zZ!=ƭٺ&MWnЄA)ǪTZCzMeMG.SXLʛ\iOLDdqqV#%:eid|5֮U>,f/V|uZdiiƃ->5Vq6ص$A$ +xkCk5g=C{z=C=z}*GńVTR5NT҇"qeU0QbbTa+/ &JWʒ:ȏ@*XM%ԮOE]?o\D fx{gg33rd#辴]=^p ؄6F#" dY[vkv; c`qXl0lᏇ>|D(CU}Wke:̓§K OWͶCf Y%%fdf,tqGˆUd1NWyC҇GQ=pD+}?_ ' kkf6l,u,Mh%^OHiWWD/Liiz@+R#lmIQeU]zT+HzJR5xPl%S#_uH?Q"?/ >|ϙaFe$3 (ϔ3>LDDDL3]c`N z1c.jZ x"ʼ2^{97kYg/<={,YK/+k6n qtmnsPr T!W#CeQ>S⢥ByWES`Q/(L\ OTG\?mf՚RRRRRRRRLQc331` >rJs5cf36feS KAcQ? 5ll ` e*eXh4mԍCr]JaJ_ER>~*_9> rV魭\W Q)I/%I}#/:'/36lԚ5ḃjHʑuY6Ilڔ5 4vՙh?՛m[G I>D- !+RTI-U? U?Ck,Ŋ?x~jccRi?|ETH|򖚳Pfg/m*TTK*D]e\ФI )sK|H>OD?dଇQ2JWALҿxRuG*]Rڀ%VWpP~#$1hS2mڶٲɕ1 fҬ5\Jx['6[Vk6[[,ͤ`v 63+2?]V(}>RIGqWTU !WTFV66Xj*} P^WceRHI"p" γVjYVz{<^5ffex{”kkjC쩤2JC#?,?4)WWTO rSΆ?S٦k6i_ݶ١۷ws0r\=UBx-n8#uA$b@"U4/Y])?JxOvT'|(|E̫IZNT%$0KMYK]I! TW +JG4VH"@:QJU xx/T'O?`UA>-VjXV*f-bZ̔*~){ ɛflkm>qBc2@*&%JBI-Ͷf3H?QdyNҡr])8~4<|faaDabQadf66`VJM '1lMefStySM> }=Vm6dℴ/$<хyCҽXyU :6lf='΢ ih 0̊̊JJR 2,mm*WH)BaMhYiR[l( §/"RJUB )UEWhIZJ4WRCa\MmYdVaFTTEU|W|02̨`6;6ڷY%$)")")e0 X#}AB&y)66#1P)Aj)](/eWOvc;5Jq(r eOjHR+VuQp]%tWrK*0I^i6%VN5VhG֬'@!֨0%0KT=;I)WUU# WԚ)TU܊?ieI`dʵ&жm-j$,Ci'Y,UFF,Y#r:R&,i5S#%e+=As,JbʭhZcBid詵 M`T)tG*-CCaf|aL$beTdBQTJef͛63T^+gVZbE~_EOfɶ kơ" RIȸK)2̬˖W ` a$$@@k[mmD, Ē`TIffJ$I$I$I*R VdTELc3U uE@d{ʾ%..rS"hE#Z)\R"):(sq6l0&&bX&bf&bVjY5f[oYݻv۳vY2fm6̳gcγaLaLd<:e)jE6yw9e|dHψȌȌٴ8Gs&?D~l0l͜^a1aca1a0a1aaIa1e-PJTXXXeC#JBtPRCεSflkR3 fgܥIY Ǐ ,,K%%,Qcdɉi-4 (+O3Ygܸpmͳ3U\1STJIeAG(h0|CUKK$/!b,41D+f{suٴ[JEPHm#meYX[aJ0"(H b#BA"rR(d-xzq1!kk4Gl4GР `+mcke5YVHYi*Ԇ3U;eY!fjCOZՈw23(lMT#30eKLLf 0)Irf=L&2jǚk( 4jlw)E0( `.0.<<=LJDZ8iG1%JI%J a330V5 mrc c{RĬ$dJx.Ͷ30Ѷg33 a333 02<=c/6c\i t/aRQ,a^֊LSZNS  RG(*\UܡW{ʽhG#<ݍ$ms-odfkSCiV½ @Y_s^ƲK?7yYmD3f 4i=@ZThʮ%W$CȫQEC6 U *ΓUIxs E%KUϟ DJdĥ3 $ ݮ]]]۱F1\xx^ ќaLmKm+86m,_QNPGfjm)cfT|D}JBCI_yKI+_TС?W0jF]6.C hI4c@{G&(~aHh 6bbL`,500Xd,2mZT4A*U>1 ?] /KU5*Q~rSw) %# Pꤧֆ K㥱[+b[+jm[F62--eɖef0q%S m6lmK56h6̚ECqR!$(02),L4 *_<03 Q^ PemJE7E6w}R_T=Sf@Ȁ<̀r $|| +ZF03@)m5Z|{g3b/oCE)J}w밠hڊi냨 rh(P(7{ z {{E(o :dDyu>@觶A^:4vd]NȄWly|@AgowW`:Sr9BA@RP:jJi]vdMDSCBE mWL&'p JT 2(4 Ǝ{/5 lDhiPЀHِV(h@J$d PaA,+eCWԀ%a6nI` i=#SҀ dB B{J$z$zCM$!QDzꇨ dI2%*y6&MA4@ JDɦ @Lђ!7z@DM&d h<~|>9M1g*\8))R']>w9םw\U3330UW{Wv3~kZ֝af>o|`9 kmVm_UB""""""""""""""""""""""""""&DDDDDDDDDDDDDDDDDGW嶉UaX˜`Lb,bUcHĔRJ=>>yo:6 fgﭱRmw$3;w]&kummmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmB ,j " eVC}h-#KkBZM a5 W 6JիT$& ޽q0D9p%B8HJ9pr!0%/<[Jl$.pr0a,&*9p%Л %hA-۾quͮB asHM ,&!!5 ˄M&!ur0 [mI zܳLV˥ц4 Hc*W.ѽKZFXV%I!$,c4Hq!IhƜ)39 MRU^ EUH 2KQ&ael"̢DZ,EEEE0⡬Lc^9 F KKQbn)&DR%Q(G,?'a8O7 L~M:"Gٝ4*['XnQY'l)h;v^dq##M8j*6vMbpAñzuaC:I9N0ӄlcñM9:GChΆ  6llaau:t6lu;ƍMh#Fv&^o~u`M4w::5~uZ\8$.Q3UG Tq3;=,~S_z>y$~p"^9;{uk88w)RDIHM%phJ* ݤI$RHI( %wi *Hwo 3z ;qo~}s"Hz>oAo߿;HڄBɯ5@P'( *iRҰ."$ݤM. (Q) Q$ %$4I$I$&@]݁urH J@)RHY$VQ9]$ `U @iQ蛵EF*Ui rN7RnӮ9ԛV"ٲ+9,@)UVjʑͷI$nsR7wk:tf$ݒJ$I%T$]s/1~1c1cc\c1c1ct1zm/m[|7s~kU\mUoW_P1c1c1c79c1~˟G~ߵu\uft"ghB]Cl"숻ͽws;݂''fp"'wwwvw{Evx&(F!ָx=￯>|_*s9Z⪷7{\]^vt3{$G qmuǾs9;z{{LHF^s8#333Dȉ;]w333Ȍ"v9333;P#33<\w9zq㻴FB7& bqy:k<UQ޸g)3330U]k pfվIyy3|:Ƶ87σ@c u3JǀTQ*¥^ڞ]ӱ75f[[YSLiG.g*Vm]Xc-[rl8``"F 4b 81F@bhV9ù5KkPC0ԜeevskMfsޑ%peyfhfa5[vKqW#dG9D;%[lc1g "i4d$etܓ7 ܍f!:M+z-WVSK'|c+zsݶ L&--MtY&X:Imx-6IezəRe+ c da 9d0i6vCtba& aهk4vb6,wca0va IᡇFaë0 4Y0>OM3.hAgwdc!!10d0 3 û"c߿'G0lL;2yF# fVa3N0ã&10]û# L8daёvG h~w~?Ҟ޿N_}. 71}ӻ;OώyW7=xwW-W{Ƿ~O~!~>J珂C?d/ JyBmTuͭ7]ϧzGDvF]I28w&| vRSfpmi};:$tṠ){g9wsyd֪+A~N.'tv]OϴUyٻ9onjw{< %%ܮۦREnwnI.[; uo37Q$woK= :>z*{ZsrLԉ5&ɡU[UYۻ337́޻*;G1u9umwu.wrnnimns+o=93>o<\!];쬚Jwp"vG&8-O;]Ww}|4zy94yN/ۇg#j*'*<]][mMCԮ Q]yrv+Cr"lOi= [[[YYu]W+rmN9r9mRiUvb/M]9tn:-& W].w \t EmEws9*\;*\ƽ眤d*Kd%%,TdJ%RRRU,JӹfKSٌ#,1 ʌʌQDhT E Iվ+ǏxaiҸ[0*[N@ BϾ۪[w÷Ջcî0/v}>׷@~~)800R0` *‰(L)$ҡI)LRaJ+kriJR N F111N '&+$FцRIT L00S 0)&R#)0 M0bQDHF) *ZTk'l"75rhr駢2UلGG:w6ۃ+'c[;U_ӻ>?uUq=8ߍO~oN<}Ooqc/||~K}9xDM_-t?KǧO{x~z}=}?S߇I$I$I$I$I$I$I$I$ncI$I$I$I$I$(I$I$I$q$I$I$I$I$I$!$}! t|j}pm9o5t{q3'˫ VOg;ϫjbĦ=cp{]˲wx6 :+ÇcMm4U -//Ýy;oYq9M^~EIGF~vSW{32$H"EDfh1)$IT^(uDPʁ>ߔ|M~/IXDu(F7h5{5]e-dQ*}2O+_B-`4 GVJ>9M^~E؀6DșW'qܗc'rGc%wUru:D1Fhx':xNQ:NrNN1*iXa0S bhBR)44ŶF (Lj0bdda:\a,e6أgECk[ $IHۯ=w*ɼgMm۶wvwws[33ggfJ+YmPB @Qb$D(;!5F4lr:$%wnѼ/mCQn0&mؽ䞽Hk\znۙE[2ܷK3mάa1",C#TYY`t_X3GrEXN3k\i"ԉۦ %31I"ԅ4wt,ZyDӞFfe<יݷׄÛ̊]z>6-k[nTҹ[enYڝ2믯FeHzv확Ms߅$ӣr7u5e ݫ􉼲4Y5@6*k`Pב̹% (%kݦ9.2lH@%" b6L@&+" ADʥUFf2s'm6<89< я4Wr[wK/,ʴ %PV0(J&@"(݄D=w}""" <͹o\Guw<7B3~=<wzvFVdPSue]Jl)Mv)RfI&&b.Nc&f&fc1#,5"dL2&E_=C{l6p7xAq"br(H553:]=ks-TJO&$I& I, BJ$V*` 3sqnI qc<=@ffffZs}0f[WrQ{Һ2h܋r7|-e5j{M&Hf $p@J&渓os ffff.8zֵָW=w5 2)&z4Swmw8n!H/ %eڈ]&DȐeBiQ*@+ ȁiRVU! ADE|GffbgZֺǯmqݥOLۛtu)"[޼nIA{ jVVn2III" L@:B!Lsεkyu=+/{c{DCݓX{m1x,L2&DRqL@Ib($DLDT1"fcWٻ%wwV< ]u S@pܗٕU K0H"fdL,\*Ң" xs+D 1 MRwƸĒDˆF)D*)m#?GC:ֹֿֿm~sɶo˧V{wUS9]Oɩ^y i8!C7E>SJ)TjX"b-` Mffs%a(HBArh~FcGH@kvNzƬM܇eAݶYg-A D^p/Q㜻U*i\-2jUmNٙu%kNktg]ݥ@&oLJ{xePK/ņ3"r.FM\&nT= 9sS }!u{2ZMsr>fw[yy>33Y\k_\kRD'ʧU&]ogng^>ݼb[my=:j| u֔U"uQ^zVϞVAl&@nH3+߿~ՖX~נ`=ww~9Ѥm9hPl?o㭉;{@#[`!n8Yޚg~ŀ<νyym7hA$L-Nj{"feHz1vFnw~ov<T;Cïlx۷nݻv6!A ,:&!06s=m9̂Ϟ6ȈvaK/Dh"gwpGj󕪫뮾X$"fg!b ڸ:Yb#IQׯ]rE c &hD*b3v;*dtXY=Ek9k5>_כ7 fff_\@$ lxȘEmZ"*wl3v""*RD7-"LHrLe̝I32gdYbTV*Xb\A:RNz׷GDlIUQ`BݱDUPlrL}L1"I&u'}s3/H&ΛzsVlsmy.>[n =kok9ֽ71:DÔlCA@]7wsvk{" Fw>3wvKto\ύmp^\82nŶEhwz# !EuB:E!vE`x-=5x/3<6 `0dgnݻ;veLbAޙqWy3$8rtV^PC`|+fXwTjn/k[i*v[uPBrMfr;+3&be^BAv%N˗+N[F7tM/M糹[7K2X(d"\MUu4z7\{; +uY㾵Q's36qM|8hVRJps+Z^^f_MH6YD)7~ ^fp)~Y؈@8}Kwws'o HVzJ4f_ z~@߮g23 Jnwrw5P-M '";s; ߂?PȐ#oO<~?%UY7\^u\q~"p[GdH[uyrT}\DffI.ٶwy@H-VRçdxЃ0Aqԟ))b+Pş,Y6ovnego0 gzyμ2*A%a* "6ht@ff~3,u$O$N? .~fffSq]k\kZֵsgQ_ @@D@}o՘)_q I Ocm4($J$I&&$Ƹ_ZZZns?~̷߰wu<@E@P}Uz=gmW{ٱsD`?EpIp$I$$@I$Jכ\\{|U1 "@& L@UVݪ@76 fc < ݼv";@31f ff (pUUUL5skVknoǿ~L}qݞb9s;[[XB$~~UUUU/,xT4 33`s* ff=oD=u mz UUUUUUU]uξֻk[ϿffeDJ "`X+ol^ݴeco^V|!:ל45un"d ވ;6#;p4؉ݠ{́<{ڪ7uu:y@`z2w7 2ͷqq @3+`Ηy}i6=z@AsM tC`l޽sNtL*NG$Tze^9yODaI1 8( 4\31NE+U.ksk\\|ֺ~rdi2*7ɍ淝ffc31պt[nm>MtU]<QWW~CΉ' N<)f O:wwpn"3"V#  ##bDf؆Z̽QSni&[E``0\^r'g\,&%0!#<_\fQg,f֎7UEkfhh(W]u]v zVM!R\wJ򲵳]52:FHU(K34:b,IBˠh!^N 2 5Ժ&&N^wj|k\qƳ|;}mR2pp{KuHv  ca@ym9 R~h8enݻ5Z y8~Uw^wj:C=.@ǐ#dcs6x 9m0m^D9n1"fm9=/_{3333\yqǜyZG"e(#y}oot)ȏ$Lo wtoɀ37T2n @mCm9N;O\;Ty-mk:kZkOz333YED M2" us[]x^o~~~PfpZ4uk:pL ݠ3z8l.bo!9dCxm_fϟ>| gqεεyDHwogwqo@ݴbHx NЭq1 ;{U蝨z=/\I:̪ee5 GpN"mB9".jDCӑ"l 9m@Y;kuƼ֯}翿~|VN*d g3p3]9y&DMvn| s{u UUTtw׮N|Lgoo7=:{{wwL 6~:@uo{߯rݭkul:3!?z_o@V::bFcM@s1&@ݡb6@B@`lLL3v nfj{d6 s3|o;]\~qǜMufGxU h{)!bm ۖ ff|#7 wwwq1&"Dwwnrmx{9ۍk?tzefffo מ>]oy{)n,LB@wP2DuSu91Y-1lM÷8nq݀P+83{u\~}{Ko,]nBjXb.ufcz"O5\B@ON{w{1T݋{ Ӫ,5I"ܭ۶6@HFV˜nݰ6DV`D;n@ݡn Ӧνuz$Lo ֑SNC05Q4zjhaܺk^ӓpw^\/G۶y([o%{HUU@fg7[n|ml66|mmfim"0"#EF@p`` `@Is~wn "41]װB\ n9st n3ܓ3"I#Nժތ3۩e }S$:"4Dl# u( (DeP##C<-u8nYsӌZJ 1r 97g^͹͝ɫ湞ޛ@*{g7:s\.M.gn"t::hݓv&Xaœv&ïL{wߞsҤmVIҮD/ 37գW{>lY {VO}޸Jͽsֹ>veh@x n.@^ww ޺/۫wJɭb-kD ׺CZ?#*EUUUU^!M=+}{7xڳ̈́u24b4G*&tgvM*ɓV$co2,b݌smCfXs[m@b0 ee3 @v'{ 33 ^ֵεֵ_3{b72gޮz0k@/wNL@t۴2@52p@Y#0 H gkDwvZYl@(NPE߾w?tdfM|:PYG"9⮷w :fJeh̿`An"'3 G1 r,LV6˜.),&a ,@.p@"?$ ؁2F")r0@k]ᄈ==ϟ\p:;g5# x7-xvFɺ(#Yyre&`#y2FXVRHH $aH %]-?QN[rVg+{+4uιֻvoKڎ;@7Eh~ %".lɶ$|#D~yx.Sdى>Y9~ %&fꍶ.$ "'H*Fמ|O}˹ޞmL@ SeDZ|Hz7{;\DYR33)"D̒n $$b/<^[]yx~q\;_<}}:m@$~y?LHMy<>3RR>elɹyڞ{تgÒμy-py瞼y}w^x<}~*mooĻs,arK'  9L Ǣ1"DDH|(znWYgow|UTgf[s33}[amxnmf{1UUU55v2Dpl&7]9ۻwwwF@dwwrJN#%7D[ E2#2 mij([ozߩ\]Uz^[^Fq<[{f^r6zX323*?DH1"g*s3323yEffa$I'_oڠ33}ssϾξk߇|J`AqUY7dMA~ffa$`#33>۽;dFݻMKl"ZoSo߻Vݼ1u;‘Sj:~x0(|l6f`3!fedb+3331Q&Lߟ=Y]wjP7%[ܻml^Ւ~ Rđ$dr%$H&{:}^|7f<]{e"zvԗ:' $$A$&,MGd{dz;mZrI*;;V(LhHk"$I6I'i $ݒ$|Vm>{=7#>&}~_{ Som {z7Nĕ$%333"fffdKmfg/vO>ۻ;yS%l+Cڵ-Lҧe*ez)bYk̬R$e*I2$ RH@uk]{ᄒn׭fc7YK8_Zx;H0ܹl+H2̈3)$ ݥ@^f3\30@382QL^fjsVb/eyݻo2 |GHUKĭ.d ELXBJXq:g2e`fs8ZAe": n2@"N21L?|m^͕/f"kzsV Nmyج)2$$ \T12s)RH@FJF Z?f|2 D<wnwww{EfWdOfNoi BXSs9y,%_f>bn!RJjIF XJ,*H{mE\Iㅒ&rw ̯EH7Mb6d@"ȁvZ-EhwmEhZ-^wyZ-EhZ-z{Z-EQj-EF9y^t-EhZZ-EhZ⦅M;Gwu=g5+Z@&D d@-Eks;hZ-ŧ\ŮߝhZ-EhwhZ-Eמtm^|Z-EhZ^_>|hZ-E׾>=翖EhZ-^>^whZ-EӻǮEhZ-E;hZ-S"ȁ2 P>SfwwۖMe[BvMСB_-ٯ9ʪ&\^"ȁ2 LZ-]ykEhZ-E]i-qhZ-E7xhZ-Ek:^Z-EhZwEhZ-E[rwhZ-E|xZ-EhZwxhZ-Eh=^yZ-6Md<$d> uvu˛xB D YJ $H@I$!(q%A$ Vk== Vf{wgZ;M.{S\wȘu/X"1/F ̈@7d̜u3:q9μ_]o|xgm8EH?8{Vzs9ml )D %hJD)B_/sN`h)@L$H@2D~D3@)$}!eb;u6o}\ðPEo1M}W]mRB%- HB*@ݠ.50F Q$B"ϯ>߿3fgg:t,"bѡBUptRNRٶb| "UUUP 84nѱvƄޠt@sH@h !fbȁx3/ *u>ꪪ^={ 9,ָo]y֚л$D%Fse)$@tyx1]DDDy}"""#yWcϟ>|1ǣwwnbdL&H"fw^ٙDDD>|~}___7b L2&DϣŞ޽sVo7ws3Y|#gٜ9D"hC4(1bv[vbooDDD|{{)$)e Q"ɀ331DHRQ0H x<\ ͺusk%+~?oW{#ÏO0@XD 4#,3aX" nQ1$H$\qNDIX`㙘tM%O$SE_t$Ky~ۯK:}K'~{>31nvmpm7M̾{Smm-nf[epT`#h!@` `Kww.úJx;qofb B$!"Di OU^-5Q ɞm$`@. ,`.$%MXnTYsU_f5|wޙ;!6IծgvO=њ5xew>9uNq۱ӗnKu:é]u]̐Qer 0*k=ZM_]k=]{WzwU6wwwsmwAS7"D[e <7flN&!*A+>D})3}g*2x@I@I@II! }}|9̪w{Y.bTפ^2# {<"TMDI b$JV(#@nq33L^1ݟ`y8Þ8shh?j+"D6'˭9ٞrx~{FK9 fffd@HI1vIbl@қunݝݧwww*m#%ɬ`yo^>yHW}m/ot&@IDlwFFFE6fqÓ'<9!-7www} |fxq~{uo.Y^ܛ7 w {i8 w#{r7nѫnwR5or$<|E7ۻw6ۗF@/F[+>zx'xj}ֻ}r lD_Fe $%PBNbQbF ID'7mDV`5B7HQ"gA8m={#}>m 2k%*1+c2*@*Be UәΞJp%}c !#r8 G#M%r%+湙Ja b#ABJ$0O'rU#+; Lp2 `!0^=x毳Oc7.W^t\D___V~ SO{n:wQPy<ޗwy=,ti'.rXz^0>C׫_?;=/7w<~k[??;o?׷m_QڨH0jm ؐE%K+%?؊}L;%?UÀ@d>暵@Lj#jQ$q#jұ6Fl[*ښqq1UɷYSj8pRq iSfbJ[BVEqf bK4 pf*,mKa.M Ʊh0FFk% -r@5kjnYڸ,EX0Hd2ܑ$t$*rZUضU64Fڷ5-ԓd\0Ul*.wK;1Mi ieF՚dkXe6@Ֆ2fSiVԲiZsp-5!fIl)ihD#DDDF#D4F""#Dc$DF"#đ9YP+5Enp2Re2L2LS4KJR)e+RM)e2cX5cAXUmske4)*He6YZj+XƫU*XeZ&L *jZd&Be e aVڪ9*QVkƱkS)e2LS)e2LS)m5cX5c,e/)ѴfI-()]U嶷\u8嶵qu=q9kk&j[2O{Lj2q,8q?6YeZr]k9醕^:εP'P(N띫/n?'`4<„CCl:<@4h/h p0(}:wpI'P$6 I.`w #:ߣ3?gВz'u}?4? e@ZJ PXVe33y}?DPkD'/G#< C>P(rA>@`z{P|1>dI?mvUAQ|_ &5RR)o@.beW.a([G~ƿ?5}MΝW۾o+:.fgG???N|]?^7gɧ9?uE/濧Y?uowoO</ގvx-5Xœ3UUwTM45]nj*| A(z@|#a 00Cw{=~o?h~A>~J]sF08%7>#8D`4:}j:*?Ƞ>rW=SI I"g_>ZM.n\,I/MWʻiK˕ם33#??߯?oOӺsk78Os5 ܎6㌺ƵXֲ 1!C1=C3f_~W_dѣ#{5og/~|>|?O*JiT *s?ډ)''W=<mie>n߫/~+ώU/ˏ$xP$}^>'k[| T='Oi<^/VVo{vI(/׬޻ nݧvO HOD{qm PB>{g'9rs7$ $I H&\ԃT,Ao{o5tjX|3hd,I"r >?xTvT|fr;N8:Z[[hb1$['rN(ik]M}Z4 NySsμ'k-V*m6[J̫~>彛+gnmcR A$N 99SPfSiWӭoVEYiCg-IuַyzijHV8ԑŚqq%#5Z${6jjE׵KacZiPJq::I:dFo{Dm&{bLN&19ʨZ6LD2,1Hq=Pi=s_IE) ?UUV=g첃}A 'W㽷gJsczz(UGPT,9)ZUT3o{͵|k3:w{>7~'}H(}>Ca9mUmwmQUiUikAk C!' {VQO0Ok5YOGaBa1MomU"LD_kCE_Hy.Q1?*`~=̟G۟)]؛W+[v&ͫ6m.kBhh4hi&~s}:}(;Q)POK'mOI¡Cܠ Ca1(<pwBI?)JJWUphT iJR@44MA,ֆ`$/SbϠOs}#骫Ec0&11e+8r|12XV2\fU0`dddOy=᩾.l;C>.z #Q*!% a>a:bvB?؇>4? rrO}=ޏg~ӫc{e$a= O?oĨE>$hJi0cF)IQIID:>~M̚M%cMjFԖi7Mi W}ֽ+ׯ]fZ }Hz <_dCҧ;WHv=aǭV)LWJmЦ)*JRV0bUJRRҴ1Z0vHC$@sN̲ts\8R0Y*&bJVa>At떣 +>s%1fuAA-H AAAAAAAAAAAd  AAAFAAAAA3f,"N2AU*V$ITHS ~\͛0ЦmVDzz'"a*߈PP(zRN9xQ'~Vas$IwjiXP`R?̗`j†?xϗļ]f#b-Z%x?[0Ŷ>P !9y ͇?øt @,!Ӑt}T 1qt}?((Q=?&W7U=4~(?߿d9kM6- &h6SCCn޵khJr:4IHN(#vF|G~! c'?~ `_֌c`I% $Fx=SGT§a((† } ut޾~{  M$`;=?!C?a.1F \6UO"´1UCpfVec8L\10a\,YET8`l D?Ɍ>c6Tt*J#Yc aɕaw>. c;.I C#A?h8G?`\X `A0T?Ipq*i1Ɔڑ'v 7b $Im򩺪ACPGiHF8)6ц& SF|b}YݻUTPÇ,ڪĶG `|'@`/>hC CLAb?l6O :<(v}K#ٶL̰("‘ǽQmo]J+`+ ,1T )JRR)F ` `1mfX`b&0ÁaŌb,E 0+ ,& V, 0a`b,10 Q0`ŋ 1Ł`ja0X1 a Xb,,Xb±XPM~g[l).[e5)[?O_p'dx h>ʲ UWo{f>`>;\G<?JܔGTzJ}&8\c, cD+e4SBLL>aJ&QSXb)E$R#c eS ޯ/}D8opAGgB?p*<?|Oj~С?Fsb˜Frrc|]\޿]޷_?cv':|/$ru0>_ gr>{ 8 xOL/ )&Ia J0r /|YOWP{Q} AQصX:iqh޴R_C  L p8u" 8I2 vC41$d=^r} ~jJʒhjP%ն>BI ~%NE{' DSe/Rb*pJ4~$y|F?V0 OŗN}ϣ $d# ;NѩW0.'TtzI'nMI7٩h׫z7WhNSsiߔ<jiI'7$xoP<OLc 7;NZMM3iI V?NJqV4ߋIżi#C[Oށ?xwwsͺfbb$h'ghA^SE^ah?pp^yo}_U_}dʓ7@|QO202QՒ̯,eqRebee}JW'|e~>P(# }}dh^? ;}|h#GQ&DByֺ>/Gs_٭7GE#:Js;m|mhܰSj~ Y*ղfX3,Y`e̙b(d1jc45^?3{Ύ•6V6Vq8/L;3NU"6w88'rmEH K%Uyt1:uJ51fX`Y׻=7c)1("Jٿh$GwKZQHD`//{c X:~jji74mݵ'qiM4?y?̙4iZkZ15ikMk]C$r<{w78gl?P; t?@C:`l0'`y&ÐΡ;ü8;0\I!{ @w % <F!̘$}_eWUWjyzϻs3&a(b'a00Ē`ڊx73'E?N aR|C\14Zֵh7Zֿo{9o_HzCqk܎( $Xu=8.Mcٲ:bկxh?`~ ߉&/:;W|}?"~ԃ"/[q$wd$1 of\J* 0cOZ&U`1HDDRiD·RYBa6W*jI*I)MY6,ZfIM1KQĉTfTjlZMY5Pj-bU]]nUUQEQEQEQEQEQER(((((((((((((((((((((((((((((((((((j5FdFQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5FQj5jMXبٵnqQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQj6Ũclm-clmTmfm&YaRj-fs 4-OWfJ$""/િvpHP@qZ2b@xΞ7Ixl=EfeK,R"334y8:pAzU\%m\g{e%ura_y5ra/;[USqpl{ֶ$Y7STeVK-̾gg%Űuׯdw{xZFTʵX9 u:Zzt XʙD|yW;ߺO<-qn"\^s3>|߿z*2UV&Upޯ~m닭sW5mӆ4huzddK&%=|wmWU[{gxddp d kwOtfx'ܞe2@8Œ8R$['m[{kwIMn&}Zy{{jTɹfl+m3[nmM6[. 0bD٠A I$w{{NV_so#!zڙu?0|zOz=JOA,iC&Ş哎n;g~gNQL?[SbHG3Y=??̄a@ɻ dD\~>Ynl;yi8nI#=w{|䭵I$I$I$I$I$I$I $I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$! $ysZUWyw{I` BUQ=r:u랸6ڮ=VڮpZۜzum. >{}M${_v`ʇrQ?QeJ^{}y\{'df(E (0PWeV( QIJR)J,`q181p±~gzC2z}.zN {dkk* MCR)A$I_Þ~?3_nt/wzsmsj{~ݾ/O/:k:kk78J}}(J*Q ^ʷòNbOhz,DZӭz %L]W>zЫR#*JiHN8::t$OQO}) M>Wę4yj"S<9KBs>/:$N]OO9}jH>=؛V}_IlE_rS潋 I߂*x/ci!^{Jx >K_md/JAy<]=9Z'-<632pLa80*ۖbe\ J*_g*obpV1c2R)JR)J1cc1b131c01c10c+1a11c,b1)JR)JRc1cc,1a1ac1ac13cJ333,c4ZCdI$LՌk4i*RBS}{.S{^{,Nw{?~;>ܦdώNοҐ$gxU=X11>rjkރ0{=>\'h"U"Dß1<^=uw_ݤ*&o+8]{t?'JUYU*}r׏Gڝ+JmQJŌe06m*6H\&^*t=oy+Oo5Xhhƶ+fT+ >i^U=ǏID&82yF䄝Qx;QH/2J+WwyR%{,JUB\PsDz'[ג269NqM;$C*Sx{JZ5FEQQ1h""X"bX֍X,h-AcQ1EDFb,Xj"1LA$|ױ8[cBScP2U`2L&aab*W`%iҝW/nIS}Q"t$t\4cUeC.O*&. wNGY>‘>ex OH)d蠾g+tOG?'猟Wvm;%?zݠxO~*chndI9a.֛k߾0:ď *s\ȫOgw4oц9d'ʨ0 =ɜ> e$LXA A XB@Ջ!cU%BڙFTj5DZŤ s2VFPZd,[S54V6Ջ!bڙFMjze;ð0˨X@B=w/wv(` DeYI6 HffdlLXWrMpdNGM$۶M S(Y"r(kChtsv:;Gice ''4aԥ8)6OQ"wՔ8eKw r28 ReH,HaC 8"W t)t.r0-D)EYIkȃV"VRʻ'N')Wg=ItII:pz_7ǿż3mٙ$HzI')]ݛːi\}=.G1B9*h jF{I H$@p4 &Offfc"8'zyЮq<;gRbNf9hYK* kA6ʓa<<:/l˓ߥI>~]$Q&!_I.<#]-K8뎫 zFMG~jq_nUO~O N p2d+ aw3 t&S%؟+Ws;w!O? ()L/Bbu'=)oѫ~j*E Jm.-W~{=_;5O+^boTU'HsO%^Ș Z} "Ɗ$〻{Pl|y}W>4%H~}Y,JM`ꫝ4cnt5"""%JeRE$l)QRD&i4!JHhPD8[m^ ZTLI'U+r?5]N;x`U]r*G!>*NE^Q;$cQES/]I)'uI^}%֨Д^A.AJ|ޮOW(Â*瞜p|ҫ$Yz&>)TU*cF0a)cUE͓T8zPNy'.TV+hbIO˲:Wnc)!pzhEI0_)iqYYԯĨģ:v2[X8*RmJo9twORBoLiwJȉ*QUuA8*9#4GbQL"Rl58jY6IOmИ#F TLLE|8N})aQ+ceeaf&bI}<7Uֵ`A+8jN"]D]0jT)RI@^ )֤NKઇWKܞWzON<=+Ȼԝψxjy㌑ڳ1c5YJR=HUW<.$&m&fbuc׽V )8m(xww"ڭ[Z_e@ +c _RGY{x:k5$ QLwYUЮJUuGXqU$pNQs6llئ1L2̖>iתgp5kr64$ mm6BAX`3c -R֤9b:;JV^JNtUU\M`Pw&SR:&IUU:wErX`d⩪YU.Sx~p<K)Dӕ)q <ܽ+{KwROPp`e 88H La =WJ;|~?w}'/>N)KOL 0bba xd*wgt  7ˇ$:p:.wJGECJ䏏%$>/1<ʙ*oỉ3hO0I?N8H#<' #ٍxuvOBJ <9UY>J.t_O"pWθ,Dr_o*UNĒ_Yɷvܭ,Q6Md6M*U*2ff\0Rc bbbI& Q2ūbbձRH5}R$,]wP=jjߟm[ʽU\L IBH Tq/S(GZP^?d7qѪYq-Yj YXcLlCӽ;#IIm475V"bQV5E \#6m0UbC5ȻN-0"8܏M3|BbF1J"wz;0*E-fD"ll*DJjsʪXreb&`XŘc d&d1"p,ʦYeeYM2Ve2,,7<0dƢ,895e,c0)JR)JR11c1-Yc1ce,)JR٥)J1cdd,c1,iˣfMۡIBX%EAHmUJDx 0ܲMCVVb5E WMtّ&2OԄwAvT/Lۘy+OύDDDDDDDDDDDDDDDDDDDDQբ_Z==3()*I`Xq. ~r2£F2bQTEg&uѓTuH\֖HdP""+6ZޙcY2c ckW \s+r$+Jʝ5ګEn8ܸFm,,YRŋE\kex*6% K%KmƲ:sG]n]Ess^s'\k#n]Es5ε.[ކe-Z[֋Fc٣)b8#jlS$ٳN F‘BnuUVTJH) THlV\*R@Y TB@-8rܵ$ r- ĕU,- RuW* @-.@RHSe0aIIM F)JwWD6VWTiXhlbYm]g )[ 's\U*ʥb8:R;5+=$,TS"yU ӈw\8ǁKmTy' < 6*8y-jz)'˭ܹa.\:48pfb˖W-˕w)m',=[tr)Fc'uWOC:]FXHo:yzv訩I]QÒp; c4RQqÒW)Խ|6ɭ?ɶMnlkw Ͳkwㆦ~5dYMn&p&p&pٶMnd kwl&pm[l&pm[l&p&p&pClÃléMnm[Qf5ǣ'iWX_W#/>!QX0&* X2RUZ,$,D3!2S)O2pTS$Tc$c4E D­SmWFH\, *ZR4O pm"=T(WQXL=]Vaa 6 1E^j@V_SE]>)ޢz=g:yQ*OrrO=KاRU%G|TСAF(®#p2*uOԗ3¯~O'OoII̧)4_I\c(cmCfeV*cWqbhaXj3Li0&`Dd̚3U3Rc W[j!}wԕ5\7y_7?N:OCk⪿Z+aO}OQ=]܊ E\~W!//ٓ~?ʲ')&5bN< ڞA7xqB<q=|$8Pfm?8;ӔkUbe)f7b6ڍFѱlZZUb(^XWn~jVhij:pI}QˣmWHc3 V]duDwe*ԧe5)P'W #= 7ERIEU!J$4P@>7|$R>CUAݮ:Ҁ < 9PE@S]ĖY w @k|||)M`% @l h)4db*{AY'pǔ]=}-hμ 7^mz7#pvϟ^7{q Ao`K`7޾;砮V 42L6LCiT4q>ځ|w߱}m` emy@*UPUPUUB6wUTYUPVUUU@ lUTUP*UTUTUTUTUTUTUTUTUTUYUPUP UU@ * * * * *U@ UU@UU[l*Ule[*VʶUle[*VʶUle[*mmUU@*UlUPmTUP*UUU*UUU^UYUP U@ ?WU*UU^UrUYm_~wyUU*UUUVUUUUUP*UUʠ*UT*UT ʪe[* VUݷͶ}`UT*T*eUUP[lU[eTvUUUUT* 6UUUTUPWݳPUU**ʪVUUϞxv*uU*eUUPUU@  _U}*ʪ]@UU@*TUPUTUUUUPUR[lUUUnUUhUUUPz@*UR*UU@*UTUTUUUmmlVeUUUBr UTUU@UPUPUU*UUUPmʪ oﭿ*~U[6*UmʡUUUU@UU*UP*UTUUJwWʨ*UTUVʪUmm[*mU{eU*UPUP eUUUU*lmU@UU@UU@UU@U~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU<<UUUPUU@*UU@UPUP[l6mmmmmUTUUUP  [lUxتllU[*+eUV*WͶwP*UU/nUU@UT UUUP *UUUT*lUeUJ*azv~b/RgyNN[t.* i=?WFޯi+cS~'p<_z8G/O\ݦ>/UU)J[iSt*:wiݎZnӆ<e|Znhӳ4鍕eUWg-77iM74{ۿNǃv6rj=Xݦ͞n}/>~(})dbQ`AcjJ*%j j:fQQQ(QRڥF@T`DQ5DfQAQ#QQEDQәTL(UTUQT**ZB$TU-+@aQ%D PDTEDTHl Q DTMDMDPQTBbaDL[*THmD %3"j"J2q*"J*%TUQQT Rj 1 J*& eQ-0DŨUMEQTKQTEDU̢ *%j$TEKJ*1RITdũD5 DP*ZUQ%DFbDDQ5THEQ ZTAQ-TMDk(j!"j*`S6U*ZU*1QTJF R0TU-F TbQ"*1RUR*"*"*&HbLbSF* *"QJEQ4,ʜN3 L[R(=ҦTQeC,[ ʷ [07b-qmAŊ5UIV[Z\6q-QaQCL&ŊLL\![i+*j`VJ[DŅET$.G1S 01mmK$6AIDpTV1@ED(J K"PTJ H +0($,HJBK@# (BB@@H"@LRB$@ВJlQ@4% BDL$CM2AH 14BI3! JD$5RH%0hHF!`(VRH(BRh "(( (FsqFh's'm&OE'R56qOjyKUj9b>>qA}|Gc-ː_uv))\jd@%B/]uz:`1zg4)h[rȐ&m@$ @*'@+1b`j̀H P ʼ.򪪪]]UUUM*U`JTJeUUUUV,1 &U H]wh@7Whrʫ,Z@+WVJ0 d2砹z& TRT(Rʻ. @*6wuV @5w@UH T7@LJ(@H WuT,@) 2e]X@3wuVݠvDe`[Tj$f@ JwwUUUV UW`]L݁u L*n@J@J@M$Y)%JfUU$MXlF&nULUUUUUUU*XŔ6Rf@ +*W L3WuUU`]ɵ6UUXUWH3W5SJfd T@"WXvI]Y k&)Jn @$Bd VTDU*Wh7Fh eM+)Y6h Jh DUvww`]2@2 U@WuT,tSH@H%fjꪪSU4 f@& }ݿ*whT%iP)敁3 L7wUUUVJR!)J@JRpRϓ.QkH5fߎv|2llm">|"'QAq-jgvġmUG J]L1t3I ,A*XWբԭHN9*stzW瀜ɥŽ:N4H,5)Vi ĞɑSN9PflO7  oU?jX;V!5,do(l!3SɩV&b l&Q;0HN;K"ĵxNw~k/LSx@4 .y]&&D34K. Ue+7w@U)BJ@5 M\5h]*l*l7@" hX%tU\5wUUVݠH@*%wU`LX T, SWjjrU66T6 ۀNbeVRS`@̠*ReUUdr͠WuF3wuU`$ M**ڪ]Pij7h Hڠ U]P@Xn4M4#BhdHV*I HCqn)ɦiiiik#&iiiikɦi2iik#&iiɦii2iiiiiiiiii2iiik#&iik2kDdM4M49h62iiiiiiiiiiiiiiiiiiiiiiiiiiLOVפe3zȪ\Icylsѻ]9uUn=!C ΰnuνmξAT籹מz^UUC:dA"&{wq[o$wq~"=`"%ى$K:xCmb.tF"f]m3t"F}!wtww}"&"[m2Ѕ9\#DR"fnFtGvfuFL$D؆؋$ACmB).vcy4}#;wvDwm7:m ζl9׿yϿxGvuTb=b.C!$n<{DP#Gs\ûFX}JwuO7×vLx:7822.* QUKKv!{R-b֓Vb.!DdGDUQgeIȉx#334Ffh8GarT۾ޡp{]:C[dB׼#"f]Ie 3ͶDmB@݈ݪ͡ &m ވwdAoD}9 (1ãt~myy[m@32k` lYJ }UԎud/Ldujŀ8qq1qѨGDq*1`mD P86h,:m1 ݱz#j"B*yB6lG]]Њ4G(;y!*mȉb.f=8!=˝UUuӮ]{^twv7 "g,"=9êsW[mνd7:wwhEUh|!v"$CnDN1=n؍uzuS|smwz#o$2UUuz#wwvUh2mKDnf#s:>s>{.uUwxAx#k:D͑Fmǻ"Mu|s< ζyΊ몠;]}I-"۱B3oUUdF7D!&!%Mȉv7;GwlCy3mo09"&qB)B*jPEވhBK;!$FfgF؆b.^:UV"DLwkwj\nms;ϹnulVȜ٭m558˲[eed\\GgdeTMe@/ ~u+R)~/YUujZ۪W6aG PIqoSw?Vz߳K>}k߶٭Ax㮨˶^ugjwm2 2RK.[nƱOȗ&dmo͵!s 0X+Æ419ε |UDD "'aI)).$ݖ)h&#vmfkHn:m>\mWMlRvY 7uc8*ɞ[6d\W-ot|h2id-X&_!s^;}]$'hT=F}nvӬdy%S6L̮2E:vkL<:̉zTY26֓f9juaƋ$PF  1M9vvW 8tM;:i9c4iUӳ͚rlvW,n٦8cp6V7t˖NΕ9i»4黆n\+8vUvcJcehMfV;;if+ܻ:bWg tv;1g*݆c+wv͚n8Ucec8iʰM˅bݦ4N9wiwfΕJUyj滱 :y>U5/2)RWU5,*Ǚ$0JCmS "Ֆ5ѴWc32fLnNj33&dtɷJ]L"˒OQ zmw4cuU(yޘ|L=XՌ<ه0a,0b02L9b0# IrHLû&2[F cׯ{7=[cVL=aٓabodsQ#cc&r 1vd0L7df0nɆ{vdûpûp,apɇvF,i9c tIaى pɆ0&2L7aL010vF0fF0dó&0l0zy=, }~ߚ>#Wᴳ_Exsx@s!Pw6? $( $&p !"j(VPZJZXh" " bR )EpEWoz{Oda [Kr"Ӫ Hȵ 2SZ9 eBH$e**lLE SlP0~gqueWrlokl9[w;|٭N:=D,a:99z+m]LN3չXy˭AK1K3sӥֵm23KU7yȣ9csֶE)]W͌;۫Zkh1ÚΓFٛuڏkZm3O6FY[I(k.rGM!;j,oeRg]Cq⻞H0ʾ͝ 'M=ԙY4{'j_sxJC\AinɽΚ7iɽ9'ŮeMctj1[(i9}궵b5;S[vkiz+gV˞\+vɧgqVt>M;rZC Ϋ9;82m摼xA!˹'xp!]+өc{A̧;ɝrAxT&rI[kUP9R$띡ru=x=u ev;YRfnqY:͟vg=9ΛfmN'%rJgnmO{S7:=R־9N &>ֳM"osCŊg%uG*M.Ǵ99vSt=Tifm&9o9kK;[3+W332ey3#\,C6i1T̊eMZ+ss7:Y{`dk̼93+Yݙw75lK2ufo-TݫN5KNsv3Ʊems\+fllUe1[2s{NF7r^ ˚$k,{[ɪ]׋f۽ٙZJ٬)Ww̒b,pԁ//9{վRUC.9s`=<Eyt߾fUb"_g;O fRP@2L lՊsE):n3)8vcLÈIHaM39lO°-yUMvKܘYyRHE8vjs5]j+҄[7( {kn[E)&m~صO4Jr1]gIYwA)ͪqBI?@q l!W}Z-Q ye2«pj҂u%z7oWW218\vmIuNfSnp ꁾ.l8tp DקlqgaƝuT<Oق9꒕N{Z`BNw<[nQ9K3zJ[`'ae=n.n1U6C܀Ho,g0OnG!t=L6Q^?- eL vDžh/4uc0j$7Xgkֈ~WHA?Mϧ+6۟\w[۩Mi@M@,7x$ҙT:0R\XIGuJyٲˀE܊,;'[7WNHI$Gzh^ߔ3Qړ\zv]\ #\ϳ3*Hj9$2BNf7wx%ș&Bjyjxi&b+0'ZYte{AIÀ%W׷[)LmVL!EYD%;k7{gwE]ltvrnQJsU^8Z9λPX NHBC)%`TB] }7%Y򩭙|/LйO*gfV<4f zՅrE ;U%sL_Ij9V'=s8LѝZdV+E*ԭݾUnFSYrջ 0^ Bys3r$V-mʬiM^e9L߯&viBs0t qgO'ʦefT3BIihS4.:TޑH_݉{'E7s%9FLiwu ϟ>zz9߮Q mnq۾o̚vn]ۧ3{S3NF%%̮mUn%\mcy4}lj0L;骖wwBmI"ZXZ2E)F{k7ym]`ת^;}(vi$vffiݤ9RhQǙCZ:F]EmI&ۦv8.wvREyOumߡϾ{yG@)MI%XwwXκpmmmUMI6șm'f;̩2;17363E4Fk̑mQ2By骠Z2gSIw$WwwY5YVIFzIuW*(e"6mO^z{yhm.ۜ6m۹[2s[{7uUVr3 $ ˫{ązF LxJu2@`8Ĭ gwHT Lݙqχ~ôm`# {@QE;j̪JUg*z%S5f {^dfG6=խvѽڦmZ'* ~z"MkX [>xQQo˖o˖pޣ|>?7mo.dОɠ{̈ٳ;8O_gxë-yn9-ݛ!4lgv7 v`H: {~w>wI(3# .>\@J,i]64l}&~UUUUZ"))UF1cf)TUi lI>A'I#ۜk5<2N[HcuU Hb&ő6iffId}szJx*T}GpV~wWfٻwN¨V\!^/7X(O7iJ/gtr=\#1?vv+u;ӧʪT۴tJtwv9iNcMݻѧf8i+fʪZnnӆniw; ʽcOv6y?8o}^mBFMW}-o:{/ W{kYe˝ZtUYe;-UVS-)/R2I. jrDeYpRzzWoӇjÖoO\9~WmpUZk\/ZI%]=M%%Iz%333{eeICZfy)ɗ5\4ɓTT^U^E4جIMM2ZP{T^ ԓ^ -(L$ʄ*&NIaUQ{TT/i+^tk J'VIBJiӬI25|DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDs݊""""""DLMiUUUUUUUUR"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$DDDDDDED_b/]2' G_L|ڭ6Hv:cH,H,?HB[b彼s-tis[*+ccv 2(l=N>rkSY;f9糞j7U_';XJb2]*­k5(J%(ZֵZֵjU;R kRYs a2[-i<.=`{4V혏$&9 9䥏bW$+?ƀ[cIEA?iqtQVMGUjQVV rjCyysާ9^}ߗ{P{ߎ[mU_*[lUUUUUO@6mUT m2ʀUz** mʪ(UmʪUUm~UT*yViUeUVUYUPUT߿~U<Wqn>\La媎qțNFΦuÓpv)ѣ$ )#8TD)BdJfdNg*곛%uޝ}ۏ7\K7k_u~:k2du&5X iU E Eqd w]eVڷ렬릊33) :k %bYdEMҵp($H3Et'޳aRzqfq1`8J:Tzf|*,ӕY/}\"2툴x#."D!Fiw1xM[/waB"wD`%Muws5{`Q#IjAʵlFRK]9HXWq".2[+mW|",{^ Rqԝlvʶ-si 6$nȰĉ8X(0 ( bF ,h`C9UW7:wP$@P NL& y1˼ǭF-=ơ﮹1@Ԕ[qAi]hFe֞Ӳ8{ۻwS !f{unޭ1z1D jFB dnТt 9{ʴ@)c#v-cّrm$mk{;[f PDyz $fH$ eG3*_tp$@3yNP$ЙU+'t6k<3ŷO/ƴimӣo]mr73ǭFEo`"LE^okn hݚ#HH$ m.۽ͽݝdD#wkl쌢 $HH$-|#3r `Inmͬ 0I1-kPH0O;׏[lm UUmml=e˥ ݃k{q9vNyS# ݓ4ZC I0E{0^81mkeiot XH$ F7ZyQEXs֟6VSz/z dz F o. H,@m͒Dl6n UUUUUT;9@&:\ɬά\:_eA=ô8/k4L%ms,y A8 [}u5qn!RE7{]orE@^͈:D!EQGZsk9'HSXK&` HH$Z}1Y`H'L`0˜BEQ;ֹsѭ\vtE A {$\ @owfI5[mNef7;xͶVUTU|s9+(CB'p;bbDA'EgsJ.J/xfdLxq)Ys܆@.FΜ-zhݥ[[gwddE" @A H"7Da 17W[`ͬ0 [ǭx@+D [o3vEQEQLs:_6U AӔf}UmP9WWW>zf<$2-La nrFZ8#2$Dᝑ430}`iy j[DT#xZ[.vv^o=F^=[3= DVmZ cz#V#QF!5ε|]P @vnǭ[` ݬ-z13P C 0mgfrvsePUP* l޺smmf}9Ѳ-؊sh$L͢C.ֹI7]fD$κ;<Vo>1W 4TU޹h5tEQTPUSZ\ =LRDTUs޹wI I A$Iw8wJFsAI I$cw\G%QRdH$A$ugf Y2I!TUn9z9TUEI"<ǚ݋ &A$I+ $Sk 6#Tvp E:HP cR/?+tJ߃TFR}zu7tdB"y}6@yUU@UT VʶUPq#D!Ϯnn!il*e4Yaֽ2ϪP*B$44!C 41^ft.#Ēb2e?1EnޒC3ZvM8pE?4w.=<7Trpm7vx (h!D!5%NfLFmï'8ԂV۵v}MQ,a֎_ ޙʽVҥSNF x icg8*`z3sC/m[ޙu5_vq9V{-eO- m۽{̩Oto4&I6E3B3?H/8p@ -3 ȑuַ݀N0)I:$P=^)Fkf^[ _?χ]XF&zUdihLjIih;0IZŽrb0"a6!SĘI m(v!|Y*cƮd둄C#b ׷U2L=9i/Zڜؑێo$q`"}:w{}|} [mo< m @fVXb8GPR8FZlG?W"ŋUU(aW*|{N3IWRjWLjͽߧg'jD4[Bii`Zi9=?~C?dz=T%xLUUR$\`UV}~~<{j\ d úOE ozW9tVhiDETsU^{?~OT<(2EU2mI*rc pIT_:1|kVk^b׫ h&HsUUUͪ1RA+bֱTY+jj\20 HX֍kZjuZHW&sUTsUU0LUUUW}=~k[|j&ȪŠ *1*{s|xzyRQFӄUU"LPITè7Ƶ\нi\WYkKnFֵkYj._XBBLG|9r)K.kZֵUTUUEUTs9\s}ɲ#!HO"1L/i).dLlg ? +Ti-EQN*1~o>ky5UEQ%I"H ~﷿8wbd+KQTl뇿ok}7; **0*?~=߹! 5  $II$I*dbKzZJV\ Z:UUUqj WZ$`b/UDO+#W{CX*3$C1+[ZiS!xОxKUUtH`)vEUϟ}o_:!wJ}+FJ m-_:"<~߹:1**2E1Uޡ_7fHU'?~oߝr yUP6m i&hxɂy :O)"75(,1q#E6U# zGf|[3{"qN)gn2Ĥ a:֨CZkU`=jAhdH',lSkfPX9C-hEUkZ$%!Jq$2{Fjj_vpxN!8Qd"y`ExAI)%$!RR!D3`P)$D ykX?7d*DII%(%)$ $Qo7d4JE[!K`[@&H0y<~z޶{?3QTV *a-[4@ "@jBĀ6 ,9$IfJLm+[mZ@l\mӥUWzQwtQ. `sWNuRԥ)JV mUJ7\ss[>"}S®H # gjeszV 2#j?Oso 6I$I$NZ{/oNڴj}jkY3PP6gA!xAp-ֹw) D_< 111@---߽<?َsG鮯BBB$m!iH_d2C8)M{~<|woZR!XJ0`=~:vtBBBBҐ`[HTH[HZk9[fʺ@RIR&HGpHFݻiK|)ڵʪ=UTUUs]\AN}w;18l0."TZ/RfD:&!"f|4J_s_NujM[^Q)+,m?`ۤunЉos]x&Bo۷ny3##Ɉfb%m iH[Ho?~ys~yZ/dBBBҐ(o?~ys!_{!m!|&C" @pD<DDD~޼< i?ąd(--) hC0`C3**Eg3k"25CW i mT@ 㘐 m߾:~3N[HZX$B!m$ġ ߽y/ --)0P C߾y!] [H%I-cB m m?~ys~)*s--,[` 66g~߼rC [a lm!iHw`TBC~}OԕD_{^~!Y(-, iH[B[a-(Bk-kW-}X ѐ0 萶U,KJ hӁ}{zӳ-hV\HRȄ*H7ISmQ73f))KjjֵkZ֪UUo|~wyUWUUW}jv;Ģz 3bYHB?~~W#ԒI$K2LE@ֵ֛$ ;ڪUUuy7~;!H g2I$$I$b(ZֳdNlɚJCD4CD4CD4CD4CDh%)$û2@*3;_Ү n5r(QZ5>:py^-Zey֥yZ/K9_ҪUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU၈"A(iZngqdܛw gRԓVtꙙYJ^C *Y"H}Ϟϟ~ (UYmT*UUVm@ UUl m_jm^yxQUU UUUW[mʪU[f+*ʪd UP]ͶmT @P7ˍmѹ:%D7pqNPsGF 'FcM v960lv:0tN3L8{ʥ/,59Vڲ8q20%ƘL\c ](#G^MIX"vF: r^۷p7V( vX4gVZۋ$2*.m+QAŕ+18Ems9jq &1l, 2Z634:9~9̬U-eŘE3 YPug&G,v"\Vfc̚=)vUDu{pFӱ!pz,-t؈i5*f` Hb,b6ws&c}*‘U'SsTfohYY Zs'G3:?v+%zJAԄv9Zbqh6@ҹpZvcg-+sv:vW|i)mعs).8/g X rt[lG[灼khze&2K"R, 2vtlّOl^;)dى$$鐒k]3fS,r4zkV-m.ؤhꝧnz1RoK\qjتϷ/-U[ Ul W$SZZ0HIPhĭ$*[Kij}g=-V:$D$  UU@w0ͱ|V8$^dZ-^{~s~='gѽcUGy_ءdPI^7 [<5kjֻl*m.u\qlђ(A4If xHβ{S.o[Y#ӚjԦwkxL矿|˹m @@;+{rUH&0Xyu:REUyͯK;Z(1!=[{c}ntH; IA>xaժ "d>x@0 &A矽~u;/}yձ1A A{?~g0yf1"Dߛ|" 5_OOQEQG,^U6UmmUU@LA Mw'er&98=[1g|Nܭ]+^󢜈A4u)J%lPdPt%sPmt'^ιy֢UT}q+xpY. ݀UB(2E1B^oεspһr))9<Ϻ߰uum&1m\Ds߳~v^D*kQTiv {bUm fKDc2tkjNV",%~Ͼ߿z4N8N_/*޵mcmmtA}jDw J$Memmm޺'M>zx^kmml'}}B'j@O\t~ꪠUU@ʨUww6m  k.\vӑ や >y~ա-:k R5s{}݈d&u/*\ Hk}Lhۭ-aP5=ozL \/yִ0Hfb; իMk "ּ @\ Zyͯ|s3Z3336ݙ9LC8+%u3S{?2;!"TpR߿y~?!:sB(;  D?}wmm۪UmPmm0 $*g}z"?C(oK[˧/n*rUWHŧhoݾ胛ˣ#"-{ "Ȇ?y5F1Ҕq tj$/{Δq' dZPU&YkJg9 A@Tjg5k3[6!ks]>mw9{~>-;%R m#mviJR3ֵkV}s}uusf3&{ ƨM6#TA X 2{WTx^noYHNwf `7@<$KJZRҖ-){uҖ%Җ-)߾y!wd败-)iKJZRλ7Ϟ9'Dm~陙 _/ο f@|Om}sî߾RR[m1߾kv<􆷃d1߿}ξ"5GM3,@JUȨ#4ndw^ӃCSFissewu  (As?cJ}Synη!@I;oޞ{~ߺ "DL^ܼ>j{~7Ͽ~` wt`=߾< ͝.Axs[CnjF}liJR:֠ l&% &p X w-m#c[@;ДLdEBaQVdxnnm<|>^ JSl!DѼ 4QhPFĩi&ZP@> S(J*D44tMQ #;ҧ1w6mm\UP*Ule[*UVʪ<UTUUUTUT*e[+lUU@mUʨX ٶ@[mmUU [l; *m9uùMsN!;pඇaуGGFE:tv80hSlr#pP ԐvmJ H7[kyuJ,؅R#l栚T_|1; l qsTg)؉5R"_1 ÅDeX/;19݋%EAY9gEd77kSXu!!D0{)b7WU}]v =#S'T gfwi@CL8`0PBE ;3Q[SU!NՆ+5a(M|sud) YDyՊ1  ?߀AѠ &WH/mffKUWy.^7GXE};=ɛ߷v ^L`Da{0'*Hsߺ.b7~߾bɓw}]gft@{ۛɃ:Tl+L3dNy>xD\:s翳~?{~"+\N1X$Jl&"Hc9fx>UU@lt0ïHHO4oܒya!XT!Y'0"Aށ1@@kpdN#,P"ċ,]͋Cmr^m/5#Y;xrrNeD@1D|E 2dI'aҕk[g&<4zhٻcwo mnȁ{ݽf@7~! yw>03=yȏ{wc#A2N{ww׭ pl rhU$̒_@9 ,HR ۍp RRwEUllUP}s9s䰈&'Zգ`Vy2—6y btK[{{0qHũZc6@W"AiSs[3j,?݈01$Ltsuw n}f1x` 0o{{~{}Y So3uo!??~~*92 ̈960)4Dfq*Dh5zw7=YϹ{'죽5\7|uhF/{wnzb N-mT ;~81yJ-{ۛ󷺂Lɓf׾7}QEQESjw@6o7[ڷvnki |ܨo>y;?[-VUTURځhdQ5xxA@&sߞOl40  0''I^W.7|؁>"@8`r߼}ifooDxw{dI_v 7@L$D!΢>fffG<߾t#7ﶭG&ffff`g}6^s=w=%e%%} 99o<Uo{9s@Ye(sAb9y1${hi{ ̈ nu* {ymo\ g}Έ@>d{}^;^y+y366mT>Vʪ뛜.qn~}1y!W;.!3+Hз}ʜ%O15d񟅛9^` 3$ vibٻ!Gsg OgTܓ4Nb(@_,N/}/nA$ux];ɲ~Ͼ@͗| O7y8|"fffff>ۻmm܂r;!8x6H o嶷wyUPUUUP]r!AS ޳M;1s(;'8M"Exb}ʺ֪k. A_){=\<&_wݗȅK z:{tBZ`t!Y)7saffe}~łmn/5 8uyo4 כ}~q'z&x(D7{U;tI 4p4&d\m*9:?]rY$t;Pϟ @L];pw:ôL<}O}7oڟX \^nyy8 Snu>{p}<)yۈy ckﵽ\ `{sw޺6l@m{og Yɜ`'soz?>_UUT*m݂ (_0byɎy3:8G[zJ%k$ͤé-ݝ:\uMx2XUNx?{ygDm|N{{mI}payڈr.>>{G;]g_ߠg' ﻷ~̜wvΆd̋M}L*#@L$ĝ&$FrgJR`- UPu=s3L^ ^.tJ2Șev]ȑO.ux73p,@晀091~}~O&w}ٻc~8M}sw>;>@}ڙ͐2JCrBsӦqb 6XED#5'(szg ,ꑗ"-jSn"3_&Dw?7c7֦ffffffff$w_wݳUYUeU@mlʪz)d6IH2LL9uG7TD1cGڹ?}{{-7R=:{mcě? {~8 So7uAyȓw=Tl؁Rw^nbr$I$I $I$I&ow[g2$I$I /wlIUUUu|k~kPڪCIA|3ַk<*mm:羽p  W U)g `e{O Z"Rm6|ϙfU"Iْfmk.J-%{ͽBvmEI$dIۛ5 IBI$I$?ckeD$I$I$I)$}}_oWa>I$I^wWa$I$I!sD".; /7~ݟW{ٗ3ĒI$I$/7~#̒I!R *R$W_D}o8o"I$I~?wUI$OI /3{} &sz{ $G $I$I$oo{ʏa$I$I!;m9 q$I!$I$K>S.uOI${[׾N<Ҫ9߮s~~[oUPmwwwX wsQd.`̬@^hy;ys9?l~#߶rr)Qr$ XDzόnN^>b<wsp>dI$I$]^!I$IG"I$Hۼ8DUTJI$  $G ޯI$I'&O#vЏyC:I$tBI$I%:.ﰜԒT$K2S}o'FUUUTYwI$I$K*7[~s{ I$I$ѯw~3]vI*BN>޲kZ^TUʪmu9믽{(PCo˞yu0i4r"o}ϵkjMw2$S UUMp}{w?_I$I!~ߛ}֪!z[{fCҊZu^yzY5ڪ]z9"p]y7m[jcλ]9UUUU;m׽<<$I$"|^n$I$I4[oI*yֹk]*$?{sI  *LH(UUYId񓘰'p:^fyl'vwd=ێy<ps_Ba@8+mn}9ބD!ѯtuw޵sj{'[eQͺF߿_= UPmUU@ lUmyVʶUP**eUs} UUUT*}UUUTUTUeUJVe@>mUT>|UT[m FDÁP ! Ĉ؆63 N  @@ h @"5u*l9v2XZa:̿/^me]i);;QȀfdW)Mkd Id6KpF: αn;ܑ7N4T!ީ;$j"vDW2diJivf gjkzՂ]X"EM<ɖunvB4B"b\h /cS?-_.6W<>ǵƎ0P$ F(PcƫC>8~*d<!JDMۃ2ya1֯NIVN ĝNUux P98iݧewtӺrzv>NYTX(SS=7-oׂu_oNhmMtOVrJ:oCrr*ɼ̩9ҭ貹s4볷 b}y{A)f활5mLX*ɺ0F;s*UjŒљ9w/R8ȝIdH]PjoC`߮s9u]M87U84*I.4`쯳R35yMsfL;~{cUUUU_޹ws'|ت^)I$dKPBI$I)s~ߘsdI$RI%@"?O~ytBH$ A$I$&mVH>$$ {̟? z!I$I%$IB_|~}e$I$I$I'~wE;9&*yϸ@7C$!$I$II$6:~yoЪeUV*mwtqĀ@( /*_{y3gKCϨou ͒W{R6 I$I$*w[ao]D$I$I)I!$~?@{@jU~UUTo5oo%0I$I$ټ>>zI'D  $I$JI}~:UUUTy{A**m|׆UUU>yy2{.̇4b}}zҫUUU}fqy<UUUmPD*G!YcIo*|g6 Habt`=}O~k+xDA^ƶEbx~}f{$Z'swS6zp5{_LI$Ho~>!$I$I$II$co~wqj޷}ycc@=$I$I$U?}>K^m$ꪥ$I$?kozi{UU~O{|!yMqUUUUL{޷{ }<ύ{UUUU91wyUP*}maB=$Ѳ=t05}@H6%0dN4gf|oi~UUUO[R{6s{沖hZy{5 jν'UXyy}oW6 $I$Hn[`2ksI$I*RIlO?{:9[KcUUaֻy'_}*UU@:@p{]81o9 3y:=AI#1{G<$osP"53$FU{:{fmoI$I%JJfR?}@͡{|2 I54I$|~~m^I$I$Tq{ᄋﺢZ ,B$I)E~RI$pwDOwx'$I'~o .$I?BI$?|uM W_TML@"I$H~37|I/&  $I$Gm|!+$I)$I'ž?}wdCp9:U$I$'G4Qwuw{mmUUUUUUC^랹˞|zyHtTR7X0>޻T(Rg;=ìc[_j}; $LT iYDG1oP$I&I$;יI$A$I?ݽZ|z޼~A"kUU^Ì*#מs2pa$K$Ij7[շI*^kzsUUUPݾD6ꞓ$3$I* y^y!uUwj\voWa$I$M=o﷞x*m UT9S醱0u&׹Jr, 2{~眴 ic^䛱}ݬy|[_"BtfD#ճg7iUUZ9Z޽{o;U_1$ (88U< ΞI$I$W2 UUUU֮wo{=Iu$J-&ޒI$G $߷*uNޒI$$JmշASwX$3$I*w~y'W$UUU=[מs`vBB k;sUUUmgmZߨUʠUUw]sQiM4t"Mh΋7Dg $>BW2^ sT?$I)$I$@A9b,zI$I$O+DozI$I$M~}xƒI?L$}1UI$I%s] {33mlT*UYUPm͹ H#LTԃ=}Yw}O}V"(FWpb I7xX;x I$I$D? ^I$I'$^1݇a$?I$I$I$ߏ-[mUTUU@@ |!{3J+ؕa4n _ut^WcxbNd;?9Ϳ{HB;$|׾N0 H/ H$o~Fbg$I$I$I?}We~e$I$I$"H36EI$JD$I$^ߢXH sjfv]I$I$uߛAWhPI$I$m޽m:.UUUU_|}cNt@UUsgv I$I'>pR$I?~I$J~o~qWUI$I$H`:7sxUT[my嶠w=szqzPN~Y'4p˲s2+/9vȉ& $H]d&>M~쁖mz\Y r@^m @. e4T`@é 0yۏTi9ݰ Hȱ+l7fLkZiCN s ̊uo^suޱ^UUUU:[8$0o{ާcUUI$mfK,EI%%Uo5:[UUUU_~[ٝߞI$I$ٝ}4{=);=jI$I'~of}$ *s};q\ڪPoo ル޶=~}Eo/uV$I$Iͪ~77kI$I${`{>$I$I'ﷹ͒.oqUUU:{93ZuڪIow{[bnI$I$w{[d$I$I'uW6UPm9ϼr 0j1owmf3N?JBBh!!("Dvm,7rE9/I$5tM=u^=I$I'2H7u{d2I$I&]n[$IS$^n7ڪkk឵t$IInQI$I$z9 >{d+U~UWY5ߴ~symUUUU5}xW>ݪ-UUU9>}4*~EUTUU7`@ȅ{UF#It-6$z zm#;k3S} lW=<BrmOOI3x^`>2<ֆxJ-k-7E&;+*n$uκ^{p*Ν9aF\үX>L ND3 3pB25DaI.soy9IZUUUWuo^ï{6*KU~{MyUUbȠw3yUUUO~}$>MEUbyA! $pHI$I$w=3&e$RI'ozwwE EU}7~I$I$I/߳[x}9fRI$I$?A1&VGU{껾owwsmVٶʂoˎ@  Ш/N4}k3*dH34&l\wտu{ }Wo32Emn3[y#wUB,"λ=Z߼Ҫvuo~Lg* m[VH$|#$(*B0L%`NmO{d1EQT^sֹc:]t*I$|!$>ި59C$IJ(QJI$ { ZyV>I$I$H ouB(As<^y̺.t((9߾y߿??>~??* UU@ P08  w*d9r|=F$]4~[Vv_KR\+k\չ<||Ix/yUU_al˕7߾aG"I$I$II%@">{|#$osRII%@"E}souYҔP!$ I'o;=*jy:ַ;XAEU^yU6V޷{=ЧzߧS*{O^߼ҪO}[u|o"X߼U{1UU<mª6mb(@ 1JS烻衡zo{G=w{3W[ J*kZֹ}{߽VETI?ϧ}xG|{$!$I$I$S~ϳD@E$I)$ $RI#\߾}{椒I$I$I*RIu}i=#"[UUUUo/kYJ=kz|'޷̝j*)|׼g[I'fA I'~O~}(E"QUOoӏ_[mUTUU*{߮?.rv }(PUJ ""coz~VKev#YZiH}S]on" I$I$$I$Ly3^Abz5={߼Ҫַ}OC'v(EPX)}Wo(|{=5nyڊ((޷}}xEV*O*I0~g meͲs΃rBv (`2 a_UNnT+0~x dH;vw1<;Y2EW{V}b $UT_u޷|߽o{TUQb|Z޽y浮WV 3wy{ѶH$I0 LLX[~$I$I'=dI$I$kss[?~=$IUU_}z޽tE˽ozI$H$Iy!798QUdR )~|߯} UU@UPUU@www` X#߶#"hGGuB@@$zR2lj' Q?:Uwj(fo"; $I$Iwbfn$I$$wݲU)uk\&ukURI$Ky[&I$Ho[מsDZUU|$߽<Î$I I$ n I$H$z  UU^εs&ƺjdA$M2嬻* U}]u͍ ']8u/y vF,~/'9 >:u483]7F[I$I$=wڪB]|ּ ޷{ )y= ?۶2$InyrkpA" A%m6oF dA Hyڽ II{[76nk`a8n Uʂ*.s/j?o'o Hb=ZA:&lSKܣsi2x$]z{|# 1fg;,=8F-|": ؍;d^y^U^ka#m?~;[坽};lsi2P \ؚJt:ַ fQ`$Y3#{LF0{/:.Ѣktq/@a5se(  05 )JR`ndSm^'@sN8mbܚ˄RNuLsm~ߣlUU*U[*UUUU@UPUTUUUd *UUPUT UPUPUU@- *TUPUP UVUYUeU@UJUTUVW6UU@l:u6H6E H7I7QXnMq۱cr Mƅ664tllPl8 ;g77Đ;.0Ը1rI$3֨6欬KxEN;Mu:r7Ƌl]5.z1g0"0t&QKӄY28pE̩I&'j"b {9j.1q\5\5gKx`먆"h}4FUQ5ZsgXDuzSTDNnB[ѬDcccb`ЍFs|Q)n.ٺQ7GS+X#,BNlF.y,30z֌m(]^*Y LXPLL000 (X#G XS;ƳYw[uXC)/T7,L` vLv7ε(CxY0F GXn˔7i80ӳ$ﬓMVsw>g/gn^4%jr˻:M깱BQ$>գ]nҹ.gN#n7Y]+ek;)ɳ7*iY봆 Xgy7]I8cYvVsԔvB{A"LIb] 9EWwIעC/2nn*~Xƫ.y!>oKўUWӼwVݑ6ad4q窏{\oN/3:-[5 .*OIXu2KwٴLE/_||mͶm[m¡UVUTmmlˆᣨ* A2=pS\_.1ksloDdT=|XB wwM><%v~OSi{?gf̻vKoȀ|~  Oym/p3us#noؼ?@8>A6ﻃ [^C y/p@ 0 ۛ?D @΅0- R4#Bд+k-?_?>{_޶@*n/]xeg :t';Cab,^ 'D@EP|ֵy!1pC|7ٽE)"(E XNkzslE)ZVhZquӎ}:oNP% BP%"PBּI{S~R AH) RZkyψ) PHE$ko_}'dߘOUhZiZs~|N|HAaIdp5s_ggX4-)@д#J9۷>}9v7=;">%aRDDDl`O{~l*UPUlۜs !(pw!޻g. x= `)Bێ̟vx&aW'B7/̑}׭1t3!R AH) 1zs!8l4r% BP% BP"gמy%sӯ) PAH) Zךߞy'^z BP% BP%/wMoy5 R AH)!|מxp[(% BP% BRm˯zOyR AH) R~z} o AH) R C־}cR AH) R}k}k|AH) R AHi]u׾߀UUu~Vxkh^|aH~۹ or&{U=K!w-׭R AH) 7μBP% BP%)D>o}Ͻ>I[R AH) k^rQ(J(J(Nw9kX~R AH) Rk~oMwg) R AH)<޷<'"3R AH(JR AH)ܦs AH) R Bw߄9i X Ad!z^}I;g^R AH) R xs]uUT*UU[(g1,eTZ*No C=h)KoY6|<<;_V^>MWf[/>qtm^0^oT ;   R AHk>w<;~R AH) Rǚ<޵k AH) R B^yֵ߄R Aa0 ׮n8㨔% BP% BI!k:50CZք% ht:Zք- B{u:]xAH) E) g<ѭ^ AH) Ry^yɿ".LΡR AH;&HBI $ "   ~~흽;D(J(JuOz^o}mTʩUUUUUUsmmBosjDxG%&YA?1Tÿ.ͼ➕]84Nsxvt(J(JzO[_}I]ns AH) R CϾ[zgНxB)J(J}͐My5 R AH)!;5xAH)R(J:8˯^% BP% BP% wy痮 R AH) 1s }Qc ) }*AH) ܓS\ AH) R CϾ{wu{s AH) R Cr~}eY UU@|9b෸d$hVBH@+X8h:~{g*JR[ss!' wLU5?s}ַ795R A0L10CAHg) R AH)>zZ句S) R AH)kyzZ BP% BRvhM$߻36o$DDR AH)|Z=9(J(JHy{μ̻[ R AH) 5{9σ'<'^z% f % BP% k{_}oR AH) Ro}k> (J(J;ϗv<UU=*m mzf9LEx6 H6)b}Sunz靣sI/d ^8mmk% BP% BP%@oﵾ}޷> R AH) >kx{}߽؄! $ $BI $ " { R AH)!wN  BP% BPzyuMQ(J(J(O<]<2Bw; R AH) 7w  R AH)!g[ɀN)(J(Nߎ:gy)(J(J[@!)/V\UObʼnr٧=O؟uLs1!J;aq2 emoeRaS 0kof|w4pR)G':UmRGQwOw|=y~|V-mzUVʶUTVfʶURUT mm m m6mUU@<<UTUU~mߗUPyy*RUUͶUT UUwwsmo06{DtX,ʺMM⒘tln4phѱMf٣f}X.szZrT׶T:LL 6 da";;uH8T"Den_sb/;q *NFoDf}ݵN:!"3lR4 tt{+lA$BnD!eW=KySE%2xJ ?&e oHZBB01$P(`B4w\33l3gw`I H{خ"@y!UeNiۈUC]t٣,NµfӦ1I`n}]m[Sj6wjssi)s'%уTT}O]åѱ{t*uuEx_wqÛi3y^wG;QvUՎھ93{ۗYwێ 'S6LU䍪9r-H*b^!d;{0g}S& Q"h$ ,UtF,%u#F?MS+rٽR4gzjX%M_d[n }3+4 [iX!uҸxwvUe.\ۮ**xr{*UP}uU]muλ^=4QKS|{C@HcEUvF[7;eN%$`_\wx>n?""" R C_}(J(JooR AH) R w5(J(J-r[Ik[AH) R AHc^yko AH)R AH)!﷼1[R AH) u޼|5AH) R AH>ֵ.J(J(E!}:{R AH) S&^w9UU*η]{{չ-A /\Y.-S A[mjvUulw~5R AH) {׾%삐R AH) kn=ɽ_H) R AH)wiZ룄R AH) yotOP BP% BP% Bt^|̝ A!R AH@I!$ ;nX nn#I $ $BI $ $ff~wPHfo?~mmm㿾>S;tmmmm~zwdmmmn[$(pX333333i)?}jF*ff@}+;@7ټFhU߳`@1JF+߿{U[lUTʫvD^:3x~%1I\"n/`b31fbЏͫ+#gӓwo_)j=uز=$ w]cl@;yu~6fmwp@1ogv};z@"DNݽnŁH$jRֵkX ܺz=fn3Zx2$HƊџ]hW< ,̷CT; *{xndY߾~w~߾ oo޾q=yg*:`>oƒ ^ݽ}wn=|5d7ݲm}ַI{'_po^~wzmU@cUU@UU@+vB,@@*Z QV9t#jLO]+ 7pHValOy9Ӝ<K\6ú;ﳻ7qD1:S,cLb)[Esw޾qǻtJKmm3332} wf}ono}{ A?A(n#^UTsVtW k6Bk6LyE H* A}wD3Ɍ0~jԊ~x~gQSk꺪]/l΍ kk{Խ+kIZik iJ7Ad⵮fN7k\ފ4ؒ!yΗ+Nt J/R),M`V)mUr%F43P@+ Q0_{>/!< V~66C^k{ 려?mg'y矗oҧw.m8Wnt[cv1yl9tMxXӅJN6~#frݳg~I͂L/hDҤFKBz{vm{z}R]IS rËfXY G|]kY])U[ũ(j 3:?!JFEv+pDGTK?I'2_P ٔ<^RFZIYWz 3a8@H34$ΕʫxXݻN>N_u|1vZi8|cf1Nÿ<y{r)Q{z{Wޕ<[^Ç *& ̰MT5Ԕ5k8HRwi&y'ȵwi]M,1RyO2^JK]~ghf2cfSLzO-i_xj6,uETAPAJ*dX &%PZ"AP?J( ?"g2~!+JHQ*,al@O6! Z*ЪnPPU)pj"URPJbeBH @!H@ R  VHRdB&Y !a  dLdi(TbK98MQ%+$@+(f:D&H$d) 0‚E$"Dh*"Q%YVeI&FQahS.bJSpAR2TI f"a)D"`%bF H`!&e% %"D"V$HF!A`eU! TPHiQ (QHHiRE)DAd!P 2H24(H$ʬ&( ! P!%JAhJDʼn"R%)A0L$,BC +, H1"Iap IBXE2ʁZ\!!YPC%qlpg* q`\W%PĕF1H%!!Qe$Y!YHL$@ń%e!X@R0% IC%1$EEPBA  cYaa$"Lۗ*0"0 S 0@R-Umhm(ɊEX)e,Ye)9&1" "daBKl!0R`XQJk32IֵP2DXeC%K,Id)E-pbId0 aPbP*F[f& VF%C`Ye.*qB m$k"$ ,vq3u)èM,Rˋb-`aRLR*&cļdT(ZFDDD" a iZ!rPBT Q%PXIT)$l` FHRPAI R"C$L `I!B HLŠ((((()h)(("(b((()(J( ((h( b(b((((QEQEQEQEbR(()h"))((((("(h(((("("(("(("((((hh(("b(((!+Pd #IIQhU&AhQYpX1(aYbd!W`& `& `& `& & d& `&` `& `& &Y`& `& `f `& d& `& `& & `& `& `& `& `& H& d& `& `& `& `& `& H& `& `& d& `& & dT& a& & `@ T7TEa*""fb *b&j$V $ a XE J $T!PeT!H P@( $I&dea@!Y$aZRIJ(PbX(Uj* !`YeeRT"T PBE*$!B$dhQ V"&jI*"aEYET YIJUIeY@M+*.F@R\Ha%H& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `& `&I`& `& `& `RJRyxƁְD{ h$*bVI$J"h B*b(@bRIJY%@ (*( R)  )i)@@y-D%% ]0&)Djm U"5 keAZahQXT(PJڔ-JXVЪR@DEFVKQ[yҪUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUi e[FcUIfY(;@ cIKb6T6(FRҨdTQ@JFƨk[Kh A,)RZw}O}O8}o>ʞ.p;8"?wzG­b ,T3Ǩzv:8"7Fbygu{ӌ-֍-)JSx-i%?z?Ӽs@ $`# o8FA6Νdr1,~$}}BA&ۘ_Hs@33WBv{] ؉' 7X:O.A8Hn`z&,}7P={CN.WwC]s%Nm* a> "R8S7347g}y[)}zIe}n, --ylM"!aߩ4Aɟ}ܞw<( ûדA|u )I~cc!ۋGt|H?g~G۹/>){ X rËfYXG|]kY߾)U[ũ(j 3:?8HRwi&y'ȵ>Ӊ鮨\e&s%UR]2 ˭M3?[zkI+7cJPA&l8X|HȴfTnټ+ˎ nKúǝx[\$32x:;JZJ-ICPIֹ V $4Wr2-kؑ}s4ܸ4Q|f$N.-w\8;qBJטc<α~?جY" \sD֕+ Q*A 1]Պ[Y?֎?/7==7ȿLnKWpJ3,G@+k;"*x% A&gZIh r2-k]GTK?2JO9hLe̦[zkI+7cJPA&l8X? QLrUc[YG2ff 1Muh.Ⱊr*}$m(Sbh"D f"ml10qC4@^O6 ,<6oeE % X>P:Ơb.j Ap,oGˬLUU[E$>=w/m%E5B֐ɽXJL2}DHlwsm ~ߋ7337&gf8\"0!o4翇`N?`H Ǽ$PHhXM궹` Z3  F>xq&xxwvg^ GHnퟪx%8bUg!eY6CII6D 6 |7{};Hj;:̟nwp2'sk, k`x3 Qg-3C%#~`lZ@_a~'F8 F- Dbbbbc!r9nA>8'xMpyt?|@"|)lI@DELUH"!Bryo ^ lU{A׻<\}3``P>I?T."O[C>A'C`lsYU8;aף8?w=;mF녉P!ά! %&UNdpD݇9u 0 Q&KA2i@0#7I߫7u{$s{9QjH$V!hIyp ~qpԇC<(r~"I$ ~ޱ/믻r<Pd7N;z]o5F\r85Z#ϑ9dMs 1M8bY#lּ ᅣN4Y#B9qq T lr6N(tA; A;1&ϰ- "*dM\EyEDUU[o=?I_PL?p$״dk:ʼ% yxi,d۸h ''T|#ޟ_SL<{-)=i u&@sw՛ :.q`?l皴(a !<Lq ݡ?n"# JռP}a|tOA$ H95jCI@Qbd,v~[փ?JԶZM:;v&?A64RI A$J$XF"<cQUV$B8 WxeUUX C5;x}H='䇲m=f"[emp05~AAu4QD;/4=Ji  7qq%7}sO,}sof>,$Ԕʊ-Aejb(騿cVlt[k4 (V d{~,6ocj_J$HI$(bZV,XFVFYYQTU:Bm] ~L{FAIH:  f?pПuCu}\Vpf=bn3ulϻBD?HE^_;⣼w!o⹀y_.&Mk&}?RU?dLK%?u22nMbKd_;RZEI eZBK@%PUF)JeWTMMPMKd+ 1B.197n@)l0Z[ 2IkI-\60.Pjhb޶iCrqAO JJ)I!h(Z``h%ᩚ`)v ,: $Gv"o0n`4c~-]jD6b ,ZZ(qlZ1}Y3L-jU+?,du⭍{2Lb(V,L h PMD "!@wFI*]Ćb"h B @B(Y R0LUaav>{lazkWf<ЦАN$"=|$y-s {DDP,?ֵ3?_?* +,B? ߂Eu$'A[T~p#y$0.߃mho$ܒh% h7MBKZȘP)2Qϧ?XƢYSifR?JoKT_33T@6%t%mg;~M-t[  iٳM-ٛm"SFt!f eg!m㾴fm9I8ȓYq2#FYI-Jж-o1XUX@` 9GdO%xw )x!Absi7 ;b I<hRUZjը]!yČ'P}CƜ3?WeT"dJ `y5!?wpPӳ= 2$&12m$3x!O0y't ?@PЫ e T5B-[h)lC(e!&[SŨV% fP`Y 3Xxfz5穝$xO_[u`ޖ|X f:`q-\u?F21  ZdA ÿٛŮ6LZ s E )Kf_7D7{ "̿nA#8w.4S͘p %ӈaV6X_8w&1?k['m,s O_ގW3'I-n cyG s7Mu}?n&톛>y~7V=kfMo鷧iZHU8z+Zb sr`d2ܮpdLnW)D2+ !(xQ E~dTT;7Ȫpmڴ4pV4q&06'O[=;nקGOe.TjI= {`$ۮCOeVee "Nu>awCV$Ox: |ݯ05} 7$}>9Iߺ7`=ܷwpf 8ul|)DC4"Eٙ:DQ/~`aUxr?%0iq/9R<@Mh+9K0(42s3o@b`LDw>ffjiiO1o(UUUUUUUZ)yeY֛0&6:4wEn+ʟ÷VoÏ{A>c@ݸ d, 30_qQ'D ϷݐiQ?sf;C}vܼ/bz{}l}SoZaleF{߹<m}h]mpI|'cOAC :p^{ó;| " %U?%0O1 M8:vqٙӎ٘2((w7$ƨZ:x)*vVݍ̑u2Xb琈q[ s:Ev=2\b3+`4"ń""[jg=w JS1UִkZM4Zփ+mZmk $S5UTMA}$<ݮ103$UefV(iے, s+mYOß438b̡3=zit@ :pD7-ܱdYUKVZk`֝C=ƣd+3H6YeUMUvf }bI3Umã?8 j dyNѱhR<"xnl؅Y(MD;H " @na34 LT"Ƙ¢#ZkQ54ifdkMk@ֲ5#3#ZkR325F$3DUUU@ P%CA,A*5Z3ķ/;`70;` àOu$H@!oC;h/=h;I 6mY _{=Hx,yE`:lʪj(9}W`Gm8 yzPKt:rt<{|m~t l6n;]nx! @=+ik9ԓtEtH2ym!'!(Z7.GB$x`))_ *w6?blHT9 !?B? pxN C? v?7D $z#< vA G61Tb182HhxPqĎa?~w?! \H c=h#ôS_ۼ'>5 " ؛$w (HF@Oi-O>O-xJ|D rD$1r\֪ ʪNmIuJl&G xL ?01qc?&oC Cњ8\s~W\7K_|_&~0Xd}  f LKs{> 8SF'<$1~,~!D}1?X(~06MGhCE'fѣFy}>}MnzRu}Іku(2rͳen8̢qslc[$y'?0/D@C_mD!P^t=x6NDtG.O]p!ɍnb^λ~OyGҿ{9 oTs 6_JM4{}.`H =~О@0`7`*?KFKVWAjOwi8~v I_ˬϔ)KaK* `V`VZ>@IPhcp<Tta!I7 h0.Dl2C""{~3"RJ>«'ZhXqQ2L 0iiE 4JP $03R( b1( 80K* 8bTb()()ZQhFQ(( Ubh`Z @QVb%LBDRP8sEāVBU8pPXW$QRWRp\e!'f 穎@GKKD,;ؐ(hfU  Vn4!*t!2܄!EYI BIP`T%AP(RTbH L  J!BX( iZJ(`DiZViZViiV)GFiFFiFiFiFi V)hhhhhhhhhhhhhhhhhhhhhhhh)BBJJ(ih JZZ)h)ZB @ @ id%VV%iJJ) J@J)h)QhJ(T)i T )ZZZPJh( F((B)ZZE hi EJAAJJJZhR@aUJZFiiJAR()) V)(i EZP(Q`hFhihZT)((()(RZBZ PiF(JQiRU((ZPBJRBZJ(() Jh(iH(PeJFZ@ iZVaԭ+JҴ+JҴ+JҴ+JҴ++JҴPRЄ%(R4(R+AIAAAAAAAAAAB@J4HJХSPB4% "B(ЀRR B4H%P !B RIKIB4%,ДPN'\?qݩ ͙52kk::bIUUUVLViZ̚M&֢IBIBIBIB8@0;;F?2kkyvV5?Mkۃ}Gk.Ym鷆||b"u 8){NPO "q}cuW7ׄz|ny?Z>Qjڿ,z秭8yg]ٓ[\>fMmp:#~.wO`vs:p{ v|n۽ԹnlɭI1#kiQMEZZjի^!__>݃`{x7?3h *EP9pNy7i/ԞDRـFcW ±{adĩE4ɫ]JiY5sW&j0L鋦u7S 5lɭG") *K}p,Z?g|q/w3{ٓ[\>Sm̚'k{3ob|s{̿MLdl2u`;L/ \6r`8"ym7=#S&Ӊg.0`fffffffffffffw}}lcUUUֵk@mISSim8&hҴݻ$H@ЫG+  Vb9YX e`(f#VVb9YX  4:| }t&poٓ[\>fMmp2kkٓ[\:6d&rlɭ3>ߋ'>S|v<>ů w)Gs=e*UpplŁ r}λ\>ɳ&w7}B\/^vI󞞷ôw zwS{lɭy&l{/>yj?GC󞞷ٴߨ˯'}2dYm)Kmmznoև|&<×dVKcmmphL?'.i&{ 5cfMmp<~.a6po>Uvs:pͷ}̚&l{>wxg3&}gݩ 5lɭ% wjmñ&lwyDpo8o86d{;qu}?n/ę"f"m`cfMmp>y7Ǿ{4׫֘L5?(PR $"RBRw 3p7yLS1$wGpf#*,~IEtq\m͵Xn{q̘ h#XgIUUZ{NgmCw#__ Nx,ZOzq9͙5cY6xO{7VI7Zϭ36ڳzz>$IOY}/x. 7+X|!/ń=^~0~J6_?4]_˥x[\$32w:;JZJ-ICPIֹㄅ+wx|g+{\Z7 G,zk%I'*).w˭M3?Q~֒Vnƕ⡪Lp;>?i5?ߑtg3!'ĐĢz{TE0 ,A  )0ĀEeGq,5HA~޳rod.>m$}0~ۤ숒NfMl@t .ۋ ryDݙg|Đߜ"+p3J+ R0;~yY$O;wx@ _ڦ*V/;YjJjK;@r#ݶz$Aᩋkf%(f$(2>EeT˟fh۾!&WL_݀ހJkcv >:3D[V%7 hҘ0E 9$3a#m`y)w)$= EX~?x @$ >o{g|zȓܑ{HN5T{yjZBKSՍk3&14hjΤ|&> :q|=:'H!"6BY"$%>[xk2&,T̞)c"N e*^`XՄDRqޢ+"Jf+%I͌SL$AHLDJe=׎= a%%(444%45E4SJRRR%% M5IKCE CAH@QB4PSCM!E4%QM-AE AM5CM4KM%EPAE44SM4U)M QM44 @MIMRIAKCATURE@PQI@AKHPQERRSAMTQER-5DPRP5AIKE %QM R4 EЅ%!HRM 5AMM44A@SCERSTPKKCMRRQE%SIE!M44SIEQE- E!CME RSCb"k;L瑫L-,X'STtyt~'4)d8Y""Yv$ě('}Iq\>c3oYHiZJlur 7xƘAquN13\vGWvV4)@vae7cԓb$➨׉a jul"a:ٴ߅G#dWݘv1UUUt= qȗpGO;ΦKgx=%+қ3/+VxVgzs~~yH2@1tXcqWЀ +@@_ߺů^e٫ oJT̮BA{:qLY%ܚ_"~%aA E +fb2( lJTx3eLW~٠fnlXb4c@j,5*=MЪ2iEq@@CR)@@R TBYHVeV)J@")@i$ P" eF!TX(%)P* %F(BRiE !(HA(BFPT!$DhQHFI!efTJDI B%IVQQ (**=UdbkYn2p@p97MlQ9wkS")Kw MCC_tsI'^/E&B!"A%(% Lw}݆,L77JBǩn|=Np,gQqBJmlir Piy=@ydI9rD&!́ZdvJQNSNLLD\C6M ݮDc-K6dnݷ0Ƨb)%C'ْ/JLL [HsNJΏY ciP m"̈́EAD:TA)aȕ O{Nv/mE]`ӐVj4$3TIl>CNϰ??~~pM!*"'|> zbzO}QPt*>8vWԓ5|v)6r_seCzy)>z*+L: ݾ}5#}߇'+Вm'BpH@﹩{y{Y̐n$_r'_ \?PDWV66cr91QqhAhZ6mpe_ )`a_DH>O>U{#"Ճ0@ ?S=_G"L|RHAM nrWwĢ/adeNH(J +,p!fmn3*ok[nuɾ7Y۠&C5}M"L22jDCnG:Nm$MMImpY $Tò!$:)򊂦hT=:|]<"==ڈ5U_ o7G8Cyb 8r9Od3[ք~ĉ- $EE"Kf?0;ˇ=Iܜ!MTSc 1Q;>j$wg{OpSˑj}z<txNb  ** Z@4 B ߂?`C}^Ogxy~ o3y/EKE#fD$'<>S#nJv4OGIvj.O_6D)آ)9t9燢zQXT~:"wBUy}gڽF%zOX|'G:sI}gܱ?_{<1k( )fd* d"M@ J@2(-d~)'tt?o"L?Wc||D$n[y?t0~*x@/`9.@ X6v MB]zȳf^CZ"e van_a$ZB ؆v|b5~=LĈ>[v|?;6Ʈk+_g׹KNokEp)y;mmۺ=1Љ{ӭeHϓ$%}~)'ZNOLb˘T״U?4SbQ*TOB ;ҭVː/IDd RnvHrIH" EHh i iii$ZJ@F U((@)VBؐKR!} }9fyƣy$hOY3g$ *TЎ x'< *5W<q7=^H{8 Bdy/PA!ĭ4vxW/gFx;WARB`N=޻ K!QzkPw3O>h=h ן0䙺ӓ.;7RjUHwX?{|=]4!5z!$<`C@"Izz03 N1n&Z[H zlt#bLV,NZl壎wxNϔ<*;D^{YfS Mq@@ M͵78ۉy[v306kUƑ]P:(4"lb:SI $F#Y5~) 9mʐ(;G`]ذID2[, Qh@V@0;iDT wMw8.쬟,2y,Z@N;M/y4{˄;E-LJE-(H" s!FMLr7#4 !nF?4E6d 8W0kY 34YkTRHMoPS3 dasv N6 &zҋ^`r'I>Jqw*??GHr0ҔHUP`KVwS?JAcokn d3)Ou{ g"{ 2@⩯}R#yzat+Qxp7,μ5Me),@+[Pd N WU#f(;ːd@`ɩq@3*+Ǵ@fxR4"H$nKPd͇᜼gIÿna"'2/ukH)M;2(ȇBAs rUW$}{12<ߤ 0?aǒXAY1~clQWr'.8yoE'H{GNDB&vs_WC}lDA` yI( $]IĂUOe$s'}nmgdsɭ"X]0&J vcr9P9L <5qynUlY<i1Ue GdzP$?XoV#4` q=T}0llɭlɭlɭ2kk̚ᱳ&nlɭٓ[\?ٓ[\?&ٳ&ٓhz,Z c- K1%C!e gF&zhl2Y8,ZK1aLdhh2Y< c- K1edht,ZK1̚ѳ&tlɭlɌ6,Z%Cf22Y< c-%Cdhh2Y; c- K1f2dhvtbgC%Cf22Y< c- K1ef2dhd2Y< c- K1C%Cf22Y: c- K1aedhz,Z c-C%Cf22Y92Y>13Cf2ˆ%C dhz,Z c-%Cf22Y< c/؂,\dhx,Z c-ef2dh|,ZK1C%CAedhd2Y2,ZK1ef2sfMmp}h{E$ďJ!B4)/>W+"il!J8@3&0dOt2$]xʼn[\Ld3K598$%GD OhM<.WB ԱYf7xH?Dd@Po璜gkrN"ZRhR@ȏfm أK8JCUAI!$ZIJDYF@q٦s35+lLZQ1Tf49"5np.d?R(ĕAEPȏ۝QH>"<"R̽j1""""""**UR"" "PZPRJ8 ((: ̍Bh T`eWH`C eȉӷA'a>ttFQi-$pzq߳ h.l"DI2Ol+djEX8(̱3,% j% 1aYaE`>~~I=/Z@7|}{amټe%'B#Dd~>H;""F?~Jsg^sKjU}Z꿶O\44J.#DH&t=5SMc:J 'E/,%u} ؈Y}NC^2IRe Ib n{Xx, ?0yI:NdTTeWv)ZDhH%'MsҾds<t@s;<&^7䋯ӸQkn d㓰 37:'>KR@bB!T `Yy/H';DXF(e50,M'WUo8 !d^̥( >4PP @|>)@P( Q@  ’ 4>5^({a>Lbx (B${4`#R^ p@Ov(7 3kWGtQ񭚼[[ͭogޛgL{gש}/{S@go=x 2>ܷ7ukAS6ܫ/G F}JX* ۩pٙ:w4U]xC7T탣/3s7w-BsuҺqm;;]5mB5àއXwm97jGzȧcD8-|e:=ˮs(ݩU ^#U5`; 7*2 NRI<Su{t6NĶ:fpZ$g*%tRwȒk#w }Ż9\7nTMk2Y Pi*H  *5}^zmi:4t@75lc{m:P} tt΄|]@{ h +HWC{U*!kIVRGODzvgnz}ctwyۣSb޻: D9kC˩N ,lws}UPzk{Qwa@yNi@PщHD Ȏr#y6H6FIƯlxXyTX8HgInrlt`l|O ahpbnSoQrnq&s#q03Ѳsj54hvp8yz:NN\avM9FҎP(2JE#hdnpIqsZqeiw6Ӕ6(m\/La#R' l ɼCvvNImnrĹr\f9B]i]m_8\L%vؓc5՗rlp88(s70lQɂ͍0YGƎ  9794rrh97,`ࣃG''& ,ssa0lY& 4dQNFN hdɃc& 8(qcFLrQf948,ѓscs 2`rlhPɃ 4hp`Y&NL,2hcccc(ɣ7(0992de 4l`Ep`c K782lpp70phdpnpp`nd&N 4Q&ƌpdɢnp`cF 2dѱe90Q̕&Y,[:R;;nt,J* !3YZ'k+"UGDIo6˵N8cžԄ冤wbt[ɱ7}M zv;n~ݺ-[~}2鍶|[}%1|7%KzxhMM|76xn[6m锷~[ŷ7o:> }X{ǶN=[:mfZX[徖_w/ݻ{\-|7eKLGLeP>rݦ_ ߳Oٻumqض~ݻoz2.{ohۅm&[վ-}̾CWq7]ӶGѽ z6?s/ -ߋ{~ Yc݌[}~o|22>~?}e-[7o=Y e5_wuڙz5v7oYo_-q՗ٗxexoVo+cnje˦ʛ[䷏fٮ/YkvF۷mvٳoշ~ 1kvoo[~xۭ6?V|õq-ռ[vX[[%޶~,LF_s)c[{{m>_}}[ihoo-ߖ?FoOwD[ ۟,˦N~~eٗܶVS|7>Znnw޹oiYHI?FЬ> tz][/O}Ϥώ:z(ب! E4T%ljDnIUI6m= &+ĂR KրmՁt$ vݶI$I&T;n-I$Wi6][Zv0 msQTVlYwVU * i3ut$$I$I%UuFL3V`]:V &Dm՛I&I I[t$-I$I$`K.i6nId`I& w`[)M$I&nhFHT$wF[. -nJҺ`馒I& RMjZJMDZWz%:`-I0.hJ%t#IR`5@QM&Sm%UI$I$ٻt`$U@m"[5i$M[-+zR`Z*ڴmI&M  2`[)$I$j neI$ hI& զjL m0 .f` U@VP@*X,vmj[@m4I$mvvݠ j li$IXt Zi$T&Sm@7mI$d`4@" Vݤ )Z@'fNIN@$ n@4$餩]]-M$I$I0*i$5i$KRHi8$%$ִPIr$L4MViV 'M$I4UUmvIm;@]ZltUmV[ hbxI M0 WjI$J`QӰ?G݁`nI&jjI;idvL @U6I$*L t ݶI&xHZNI@*I$mR`];Pii$+I]%IRI0 jʤWI$I| ̰.( nһ ]P$H!ĥ%L j% i M`;nI%IRL I 6I0m`4i$I$J`;iUuڼJ]IK i$I$ I4I0* vI$ST7JvI0+IM$ l@>,s1)tjˤM0 M6 l&L +h ([. Iwv i0)[6I$I$:`6IT$%{Jjw`\NۜRIbI$M`2UeI$V@$L۫[)$JMRI$%$`Y i5L@$Ā`6  I%J+F0IH T]$\Opip?'Y#A:^1c1c1c1c1\1vҶ_no c1c1c1c9s1c1c1c1c1c1˘cr.r1c:\.c1c1c1\1\1c1c1c1r1c1c1c1c1tc}˘.c0cwv؏NMNZK9nc1c1c1c1c1c1c1c1cޝ1c1c1c1c1c1M4M4ә?3sG~*M3~zGI+Xy8/aUL 5wvCLI$ZwwwRI$IHiI$IHl0-RG.CLoy2st=TܐzI$aθg2wQٙu"I; wzI@hI$H$ RI>IH2H'c|ŻAjzt)K39337wPzH`󓻻{}=Y6UQ fđ I$l! Rf\3ZwHjj JRPe3p΃$I%abm!e$$Km=$hJ1wCnҐd7Ic6fp 6k mI)"I`6GxGwwww1$ I$IDBI$ŻH$p6ffa)$I$Iwww!w?x2Nj5AnU:U\vm=YtjڲڮUZU>U3:Rq4Ւ6E0NVchfMqR[ 8%l׊mUixI(,jK$6櫓Ust8R fV*{^+ ˢ/w*GІܲvaK4×-m9e,r ˆe 2ӕ)v9iÖ8ij[\4٥Zn+inS-af-fZ[Y`0Tlʚi)NV, e6i 7S\4vem7[fin2,ev\)*iÆn0,4ݥ2e4LlfiFln lkYN6piM4ݳXnR0pr˜eg,8pu6p[`尵2˗-2À ?'dW2}*yb@U Pď5^:ڥ-SUx஋.3rUjV ̺GownwiU)IC3WP+2n+nmne+rnBx^T_\lhj.J2d,"]̩C1 VצFؒQI-yZ,J4uS5f!3kKU 3hR lbj8u `+ֵ6,4Sm :2 ^ |S,*o&jI.3] DU+3 ri 3_v1e5Β,swc\fqMjerq++Tugm4ާwQj\Vmb+1šcANPR@ʊV fU]-AɎj#]iGVܥYW$[U)r8xfQU.wZ K*VTȽ3TuaY/^Ew1MjYݻ {T\7;,=ӷ:/הxv:Y1-[]jǺUoZ aWu&c3]މ/IU|jvG(SfRWŢU;wmQ;RTTY^$$s{]hKf&=X霡V9b{7nwJk6ﰶVksXܻ7)ӻGeTxgnT9f> p˨FUj=EJ3tIy}{S=uoCqsޭfeu]\ Åھx!٧"<ūա3zw%ҚNNBŊTBf1pC6rJrv»wlɊIډԲv{T*:ٲH]SYw*odV;|7vY}uTw;/u+suJPh5g/ux.VY7-F%w.mU6twhQUQt.iz"3ZZVnGי;v.Kz|KlUVͪJD+3v墪3Uͷ.a5$uxfq'nIͽ{o#7̊u컚ouպd{Vf.ܝ-A"3w%UΞĸ/_w[YD@WY3KGY(C9'I7FNW-Nټ̺W4ʙE)mq`yuR'm˾T{k_fmoSCtni,eKl䷺:6v[+u3[K{{ +2 iVY)a֋;yU@K鋤7(pY/{+'{`]r)̔[s*bq\xVTm.UHmMr܆gJެ)+V/\{J]M״={ˆ]nPNJdr;${2MV;Uy'/iVd{m w3:Y(z9, U&b~u}1twM]GzMb.sS̽+{f.\wvx\z+FNɝ2wZn=lˬWK7';+2U7.V^zUmlK:ksxtri5VV)]b;ŕ^fʲ]׶;rJ\%óOkwy'ڪzcu9c=2He',l2'UC&Ys+uT;mUq콽Z{žEn>w6$U263{8c+^xȸʪ=UI]piԮFף7F C}+q\[M!ОD` 3@UIpIDݧpx}=Xe{LvVڎm+*arYzhJfe@u]x>$+"pgw)CNrkZC˚#u\ڍvɗ ^ VcCNG]j0J@p+֯Z҄r>ֵe`Go;&7Zl^v՘i5mjD6Zí]7dzcTjeas;(Ȃ&"<-јf .gҝ բ 4.EsRƝzn67zZS:nej3RI5$IHԔ`,[HҼM2͋ MEZzO)hj('Zk V({邎u{&٘[Xj*3+˪Xw݋sTucTv-44뷢'gC ֓QEMC}hM[Dm iZkۉxovAֲe6(ED&.tH o@4mzNzLBlڗ-]Y3W K][!c}aFE-UݗM"Y8IfωT6 馺"hĆS4 LMK2F]_>jpuĺ.x*)B+}bj&W)^$MX74qװ@6BT׹eb `+*5n[yU %םP";,ez+Cpn edf]cmpV**\j1Su}ýi`=vmٸ'e*rV=]j:EdzRt-:Yp+oP]SJXcnD ʒ ~xvӇvp>g|ą~/v*F8C@@?hq_g{ޙ>?|;OWf+ޅO3\OLquC??w߯3_и_< p!|G@Sy!97Z!0vf9tEpC3ѯ!5R9Ҧߙ\S@|Xˆ:""_3$8!uU1;#1pC|Ieo}eWyb Cw{r7<%^_~\w܍xvfwW\ݗDgڥ_=WhybtQ>ap6j-:QĈ 2߯!ߕu^;|ogq?2Hn7ŎU[D8~r2S{zJQ/4=/+ZTT2j|*D?s {u=iqH;Mޚ0Oup"ʇSY}f ζm,os?lZ9^|ѧjFio0]?cNI y㿸=GWT~ߎx=fG`A^sϻ*;ӍpAǀ˫=g?uZ OX g"޿PEc{`xOSb׏sTW3ӝ}e?c~v=DNg>Ee`_XYGٙ0Yu+񯮪c/ʕ\㧺γ'jƫN[ۏ]տ=uה㻮8ן>VVSڛ;'=OA_Y_eAE~#~kǛe˻C䫘g{S swN2GbTmGscagb|@f /¾c/]aYxyVǸ= \̫AvJX>v¥'0#yr׎KTl^7+˾ܭ%Z3.۝Ż$ZUbRn=uB)̧[o(-7ۛpA,oܛE*ק%Ufa9CL"^j +_ ݐrvb ێJ9=`=ʤ6\ʾtd -Wl*^b}C >{ך-xjMVg-Y IAI۲OUV,&ۡXϮd!_aBuf|^qɹ $]⫝zrUP:hv/2%N2DHV!`VJ]ي`$"QQs5\2'`:5:YκI$J]@UI$m٢4¤(""mk&$\URI$$徾F1wJ ΢hۈOOJE$feDdbI%Q5TKMJ+wlSt[T.I<9%4I$I$}z31SI$wI$m%I$ $JI$I$I$ &&],$)g32%-.%L\]K;!m윒I$I$Q33* )ə̛ԕ͝n#$Vku mL}eo9ryĒ)*Ie;ҒISZU3),3I)6I33:Fr8]ݵ[$9 17norI$I\̤$U)I' zm4_W[aJos3 CBI$H&nbI$9$$$JI$I$pv%+'n쓪ޭa.JMrHDw>9dr%)A&F$39I$I*LUUV3Ie:Jk`N-$RI$EݬHLV%$ڨ9URI$I$zrIwRI,˻+^cm<$D7%8ag+#,ԧ%5I=]j`I}Ԓ$uPKffcK5FWvxVw;hw$ݴl"I'ѮMnm$N$RKB:Y#m31Jwy7n껽ݒI'wM}UBnI)$I$fUUV,.dHJ$;i%UMwt)$UUn$b I)$II$I$IQ0J-M9B pr'7I$I$/rkE H|K?ͫں~l4Dxه7Br@;QP¯ؘ²O4+ EE`II_{4g? ?Eтܤr:9i-8UVMFa,nnlˇ-ܧE;2iFZtaNzoy<#sÆLx8pSU[wxz{oc.OlrOj:F{l2kt{]?Y6alZԶSGGͦ)MJ44Ll[ӖO7z])R 0]2w2G=l:?ZL;ZlNoK}w~7=^Wxxxz'?o>>o>ׇ.|>{oGsgS{=GG>=^~O<9ϩOGz>OWpys>?>>>O/X}nx}gs~=ޏGS>C>`gx[xysϱ79O/?=%mu]{-edy/_eVY|N^>_z>O>yo>_S~<,,d0͝$<͒aft|Q䣇 4x6YWsWaN4I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$EI$I$I$I$I$I$I$I$I$RKĖ SI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$EU?ǘ"ZH\h(Wy3P9?y #6QDc>bʟє^ $hM ִ!k RgQ_"Gan67WI$I$I$I$$JI$$I)$I$I$I$I$I$I$Xٙ$II$I$ 1(&,"3-l52ơ撙F%lh22&Q% ,s& 0nnY͍4hKX"uƛ3("q)ɛ 3'LĶބW90˻QRr_t4֊7MzMZMih.Vѩ:B555޵Nr zw ]gH[ִk7kT$ID Zx>!m6V؇MƈHs]A &nh5dj iƣRJrK]tTNOB5$$Tn 2PiI3A,YG6Wяm<񦵓%p{2MfʪfLɛ,lwplӔ譥Mzy.EA$A I< i Rv<%~%i BúbC&fu;#m\i<$Kvuot%4QQ M;wD` ;;wwo^@ qi{aWPnLanܾ*b$:'ޖy"3KL@|=uz'ĂEQEwZ3yQRQ\ys^:}_QӶ/+2_Oi\hw}0._,)U1$&̳^pB5?ufB8꣆/vu3ǨsB-.8 cUtӥ> "Ə4pw9TQͩ-`|C.}Qw װ|H@Π;d]A8n:5kv@X'u߸ϑ<3)!* 0`>RDUThm @ wcjǏTЮC]@PP!t7Wevg3-oT7>τl]Y|'kpIIHR YO׿>|NĽ}{U9ĸRK9ZC@(rLJk)}y˹3f܄ml!#mkC T2k5qr N&"!"6l!3ThSY$m$5M%AEBC@Mq3;6lI%;I$I$I;BK,2̬:~yaxel!T6mSTlc8Y UUUYUCfUUaTEpvk|ns[W=fppj3*26;uw{_dp9׿DI5UTi}̩=@f!pS-x3\oxc*f>Ahw߼?{[Ń6LVjj:{5bx MjҬ,37M,ht*fskk79##0awY`wuwl@y i`@:7pf 20pk<9~N^0pj3+0p`wwp]n ,,\==/=q˭;6>=s^`*]tߕySm;[`pVfUa,*"t(iM?wϏ>Q3*6p e=S6YUsΰuyy>[6lѲ7w41 0$s809XuZWiRZÏUSNQ]\]uӪw;{o[k;0ށ`wֻg|ꪱ" g=k;Zʪ 6 MHT*o7{yl*,ɯ*]k{ wv;ⷋxEߟ8:wPYQYY$uJt sGZ:=̆ߛGL9X>||C̪^/PXL@??V @'ߦG> J3C3k0 Pv;4*Li4vyUŨ sxչ az@yf>La#suӰp8Tn hJh>g;ߜ|>֒ȮCUUZ}H87H+dQEy=(+ߛ_}t UWpy}a;XYc`X;k͛<GCTEp5ߧy礒T0,H"$zZLX$fC"1lJ]"P *ljQu_1=8{ߊė4ٞmwLDDC%7a2C|0āLp0\j)x`0 *N A6=|!Ɋ*>z1M%* С< *W2zz-/wߎMUQ5,p Et=x ѹ }3^&Kͽ1M90ڦ<;s2t xA'L89 ȹ+}}}u+>ܠ< $9>wb:A%4Q]w˾E*zM_ JvCR w{{uWɽ;kET<&zyjTf(GgEl@C m:&p{ zɼm+ZiG嫳՚ٵ]`6p9Bzv}9xuyPNFYpppðtRVŐvoIۿwNy9.*k;ԾH:A2ͮ< }mRت\ d@C znqz(J(B|wHP%!JP% H^νߛ(JtII"$*BNmRgMW*-EhZ-qyӯ;9(J(J(Kq=&ud$0'\~#o|<(J(Jw޽O(J(J7y.(JB(Jns]yQ`\sz뾒JpD 962`QP*,q79}Ta"}y O<]uֺB(J(J뮺㞳hJF)RZ뮻^uɧ@4QG~r#u簟}I#3=nv$PgpEp6~>r/E'sםhC ·6Xn+I,u[rE*w$ 6Nzwv绞y9sؙQe JJ Q4`QV4l`CINè-vc!kf '28"]gޟ9ѬC{p@dj:M1\yjD>wy91q%Ph Րny>GgMzx ,x|o4z\7,PwX4=w(he>RcS  JJ1f/Ǿa;ͻVQ.0)UTV\"+MPM.'oH*"!ۘǰs4̀8^K` ø&_;\`|{}(#^{מ[5;Ov 7^:]~C`e΃lG~T+ﲫcYt-[Q&z  <˓EfWmxgpC/Qd.:|z D@* |('vGӻ94Q0 }uu痭~*T~(FU\V}~;=KUА9 'I <\s̹ c9~|^#ϟ8y$H7Cv{1h\29C<<wȊ氵[ߠ1~ES_Gs^ӤLʥI@᧜8^mX°Y^VHL!'6ȗŒN*g360.E&d?8խGR@ 1)jz`6q]d@ ` o3?I*~RH0gM9#ǘWUT]{u4i ?W Kׁ~l9>|_n+>suWϟ0cq 3333}y_+>zh[JMg8D Q8]ۇp֫}ͭZP%R{W7Ut-DDO@NyBf3` 9\fpɘNzCϙ^=L#{J,p,%ڧ#o=hP"o9`x hB x+hsYwjJ%4b wW.8P8뎵C;"ј;y],8m9뮖?;qԨ]I | vp {́C 7u؈s;f=uҶ8ltso8-0< XPh#)oSz펻 PJwk[wåy$I$;)$$JI$$III$I$II$I$I"I$I$eԒI$I$I$I)YC3jSt 7:G$rR8wbxv$c'"*Ks64l`hF ̙(ѓ&980rQg&dU]4D[fv%2&±{e*2㭕l$4VdɗnJy%T_{\1[Ђf[f8ag,u9r.[`#EjDnJ n;Nze0-aÅ)M,yB,. (XXܺ;:97,{թiS1:Wn,s3-vL)JGAwD p=,+#Q%](.Ϸr~sez\mbmlZWO  m8qMLwCxTvw{3qyw= Dh;P8oad"mkblu]wto 6.SZRZf 1C*MVWnH$Fu yƸ7~@9DwNuJN͇pev'fDͭY{TͺOodްnԦ]菒ř2EbƋr3:ջ|mmtJy}mwj%M2$Q2JxnZ4v#ۚ3.F`\zq%.0iTw>VɗZpA  #_03s̭yFur9-@  .v8G.p$)# 󽿳TgXC60}04 2`dO7']u wqQgcWy{"@ 3o,tC9,X ؊9yW8__~w<9oO?wXwX(uzϲ4 _ H H @+!ϖ:mV.I"<<+g9φI~\r,0̣רvvov7^svBAチ^4;޻uӀK]öfv۳{ v=l3`;9:`Xv!#>1b\n;79fԵ݅aװ=wIA$I/}`x  ;29/翏OOT̪ER?*9qsyW Vp!jN7A{UH-vf $ĻjKN9| \Φ]2;Iݙp.UL 7yTRR@=UVjqERIרjI7'M$zҤ~rb[Ut8 ǵ,;; :Cng匶fó3xFKv$g(gg(5np<_o}.&0!5 Aߜ2z07W馭 Z+nj |2j'1땗Os&N[JN`JwQq <\f{<{84#2 qqpp,{$wF͉]lyz홳"<6vz.bC$yof1ϑ߮7 Tm?U! cN~}߹}YϾ}W΀ 箹~+9vBrKssp&C $ x!̢-Po!)(uVmj !wƕsX&5nTj$Nh\[oc,mO{^&~yP{~K%sj-efO<^|hhIr(Bz}ޏp$IuzOyIUY޵#cK0SʭW:_K[b \U:|/$S|WSK3~M/b1 WÜ+7if}IF DJҥ%_v]>OMUU=fYk P I i%:ZXYG~8~W<!I%~yq?4N5plrTIHUAQyP֨Na)yN,X]ݠ>׆1|aɐU.}/cRO2r95,/vt 4ۦrX0f;28Λ6&{/! <;><8UV|bU@z` gˍC1Sϟ>ܕxW P=g44mZk8"4pfA^hI&Չb#$fj Hu !]$#Һٻ36 VCj{uYojR[M4{3{&".;:띾T *0l(3=)W2 + W(g3K"1s}h0Ȣ,/}^q@fبBeH:뮺㫥뮺@I-nx}ζD uwhyפֿץ4RPh>p` !`W߶FWK T/.TxoC}% ^4LEvq}`ٰ|H.Si d^C<p`0{_{ү&ҧy%Z^|-fvf.rtg 7~Is#$vmBs(7nG88FU(QGf HP ((Ŏ<2PBvgz=f=I$$I)$$JI$$I)$I$I$$ĒI$I$I$DIHJ+ksoI$JI$LMOWNΟHM'&_KZq%pn`ɱg&MK,eYGU hÆɵ-2ib ,܃%K6>Tފw3[Z27oZ* rwrM Www+km!i5bJ4HtiIqIq)$(ƛntmtvav(aN6r5libQiwtM$6 @'=г{*ܒEV*YQ+ͬf u- YQwcͽڵz=2gH3I]; 1!UaQ˂jHl1h0pRyXPzv= i [W N^<.*v$.Ļ1^Zy\Ɯ7Kޚ<2laKZNNS.0 C0p]buU~ӇQ[qǗ[5 O_ ԽvZnNrrvX B pۋ% rJ2jUfk:wXv1{&cBw%jAY:))Swxhned*zO};?KxD™C_| BgUwb8D;lv(;V`S|rK&3OEaW<ȞXp݇%,`ַĹTJU1%&fM;fe2Iv n@LT*\2`wrr…0ዀOJ\/vFـp DJ?9Fjq3QfhK#RsmlПU6PwiWT;:Vvskv2HÒy9.ðҀҍ bY,3N٠͠:bg<=s'Oq ' Ʒ gs9\{ }=Jx<|X%L50w ! XfxIL̐(2&Q Y|o}:nS} fqyמuuT*bU#{ܛ%]HN!Cc a x5UM)7npQ[רbXo.K\ *4Aѫ7_^V*b B"( W4Eaf'kb!w3|r줱V*ʈ9垝R^jze\o暯**R@YR7I tn0dxdq !P`03?/̒r*J%*ޝV5w0<ɪ bl߼{kޗ>evq8wԊ|˻;8,%9^nn4!Pm.ik,)m*j٭,K%!k9dX]Ҽ*Ą! VUffY 2` "BR83')P^WUU_~uϿ;&'TD廊*DzVPCw@A g7wUmT}-x_M3D BI | Wo4t6;po>}U >y?^򪪪߾{ym`f*MI$OwLI$OD÷{;$I'džv47eZk||.sߚ몪̫,ʲN%PT ;NԄ70; u4WɊ 3ORx.2u Q!BT$wmzǏ7\?I$Z\I$I%$II$I$I$I$I$I$I$II$I%gowRLII$I$I)[L͖hnn H87$qƶ`lGNYƌ,4Yɓss"N,KZU_nS9HB`"=0$QH[*UhVG_'^֡vDdEe 9Urp1;,A3f̜&50IါVj4 pI ݢ XRuAxyuYUY=2ǖ<ǘ[;fu\7[y 6׵ce}Åe6ln74 X``Gjܼͼ(frhx24 Tle) IH` GqTQ*6pᅲÞlӗ Rlٹʥl˝4 XT#l6 OEMN鱜#]՞[7raenXb5c^>ެ{7/_!inr=1OU4,n1Ⳛa>S,/V*O:ݖEy]4fYY26bm,U\iXNNGQm *)Zkh}JWsЈ+ UxUSvk~^eP6mߵzʃmpI$2@V޵MSm,sc1vf\THw&wEN9ߐU=W}337\0443X0|#ك<$,ph%Ιe`843PpݡhpxR-+H]4JTIiZV op}\ WDOG~I}x,7B[rZu`Ts ͛CVDBe|c ̮7Um]b ó'<逞򛆸n,aUIfbC`g6ͳt,V3[:fIˉquÔ/|z׉$\z^[x yZ/.3~vx2U*NJ$҉NMLQ85}JǪ` J0XC'jf/Gp\ 2`z2=|dkoc,̸x:Wuh9QEݎ28X |z2ܻ(KP!܆Y5Bc0z!kC5Jط{O܄w&Luq$ `ur΢: 7ئppL{ꗃ6z, B -?b(oھ-K=Pw\(][؛O] Ao~. "dT2zX@ &jJ̑$EfKNWD l\y5$"CH8,/yԳXZ 4JHBCR<@I Q65q*%["]M=b̔* [€fY7u^o{$I-H$JI$$I)$I$$uI%$I$$wQ$&&II$I$I$I3tK0681$\8 i;[֨BJĠ9on#eP' xݑ<` *Fo>uQ$j̪Ny<ﺪ2{|'rI$I${ g-ߕ mT @fw5]T}I%.3Cx%F f 'SBU`tU|k˖޳2tMjH8:6.[thn`acvΎssj㻮 ;7n<9*{"#*Ey^Ā|y8`#{v8S: |r{b1Fe'L:~eRxr])ka<_|jC(Ⴧc; k 7 5BK 1o.03\vLOX| 8vr٭d$LڊL;}\.]xIevj0pk:C0;θ$9]J'.X ,X#Ԡ]ϧzZW.2Q &#uqkj|*x;sT1qfHk}ٚw[žǥh,]Sdq;s<<ӄ!~XQ@ԣ+B4zvm93wllN^c ={;xgGz[H~C٤T-2sl@E]P`̭xO7^qO'Ƿ83k Uam%Zw9Aٰ-<N:P$-rO}nBzwwwwsQ{K*nvD1ve&-Mǿ ޣHiڪg9jg9jg9~m޹&]:}^[=97l!̚4i|7#|q;Yvmg~f)@d3S}+BV7=1ynW`_1bSljho`nQL UKoko)Wr`DOGfo&= W@c-lXP< 4eUnM&Agwwwumn!.Èh^$M0*)b=wILrQ5.uWܾUtrsmNQ2ǶSu +rsMeM-jjk_b=svU*t7na0dZXQ359JVq3X )NV"f,ކp 8?fp2;TaMD:WJd KEltE@n1ϸU?P%lQ8i9vwGbuH&nZ '6>m+Cujf76r<! ZvH$/3N Twa L_@s'it9γ9 jNA~s=wwJBBSZ\jj i05 bW4#\U۸LC&@>76E.\zsg,uu.GGWAH_+x4pV%[lzv(xp!o6`e$9LR[qK=,zꍚq9I;ɃڔJѳ U:3f^!L[YNkj7j-LACQH!5Nnݱ9[NXZ9 &Ƶw5 Qjb iR#HeJi4ƛ6n*m$(bō14lei8:ue*Va5WٵF3g(Tp;͍\βSYjUtX!ԣ[^ϓ 鬕 %){^} osi۫m^] MW ƫS{:\K],vnf)ZrŻzosYJ:xEu j8}Whm32`F륪^yNύֽ~Y8JVF0'}u[Jav6%URw qAЬ}^˳Yfv;yުs&-5 ʗFnyg y Grڸ*=N3!e$(B&+/1$Ur4YfMyr U4@4Us\Vai>hYKhP铆3` J!v$UUUz;7:~|sEL3lf^.@4& 8S0D w^o&dXpy7O]p@.4T`ea޿S{p]b 0m!@i ҲZ}t}{1 v0muCfo/ $ۣpy7ke5Wa!7wW@C0YwbXoY|T*mnX}nLUl֏@*L%lvMpwMVۑS8Rn5#٬{4Z40BBRu{ZȌNΫn캪oy)gr"@bkC{xI3-~ewRA%Vhv>yawU,0°̪z;;<CIX!Y$`-@nF69w hh zgUU;c3׆9ɜ`ik3}x`%Tʾʐl+ubZ-*fFsJMI% ӆhݛ$tlhڂʍ#haL#2p8\ 5@P["`7Q ^3lM^ 6&(\I*ffp a=sdN9oWPiCw:ͳ}Sf#:u,l&0dI=Ӈ$nE|Ѩ>"L"4MPinZBZ;  'f!'O;tUUHk>.V0jzVȰ CD@nFruN5g.}]tD{]yuw;CvAqÇ~];<퀩IfR:/yYHYT0K]uUU_7}] UUTj\yڨmR֜EKf99Urz$UP NSp40/< Cyy2ᾛRCl"DD`c67ScQF/0P*li٩$^λGR8+ޭ$Ԩ*w7V5jyps8[1;퀬莳Fi빦`gs7yM3:9k0!C,l\2#hxR$̻i``Y(@+&=gZnԉ$]"x&J>9؟MXw˙ɜs\`U2sl3a9&EfL)cg=C@a["%=@$]{j}w/H]mdO7-s"!"vk7h36\[H\{2ʾHi}ڭZ*VZQ{\T$4wʳZmY bfig:tIc־To#H` 5k$2ݭz^1ftA: .NLefð`2)7T H7|(w kY{{*ģ@1zcUh nIP 7X$i&k02'ww/žkI;y ̍$3 ,kI5l$t`b)bI$9x p`I0dɱAgZ} w*W0H1 p*<^W^:Us\6j*Q߮j~jrʼF6:}VoJ%]/suZ'>(N󳞻!(J(J(Nםߜqv% BP% BP% ޻9N(J(J;x;ݜ{% BP% BP'y}{% BP% BP&s"[߼6b%*RHI"$*RHI"{=OEhZ-B(J(J;ჅWUݥΒJXP vJ$҉J]3 =U4P}?]n{0^C jdnj'/ɞn%xp0w P% BP<מY=^ BP% BP% Bg~.s^xs% BP% BP&x\oMyz% BPQ5hMkZ!(J~?ל_3> BP% 5!(J\4s\_/kﴺ=|I"$JI)T*$*$$Ү}s5=9UMҦtDI)%$I*I*I)WϗϪI*R$$I)$$$URIfC7]vCi:F觎i kHZҺִ+4 BwPaϞ)5ZiFZVAσ߾k씪c0`\2A`{G!k/>u`󽋑y= T+iV%_jϟ=~kZV=BZI)$TREKqY}}REJI)$TREJI fd0 :whGEdKPu)$TQRE)$TREJI)$Twεy)$Zքֵ5hL(J;>u=^ BP%)JP+Hw޵\+~JZ:ִ#4#J=q=#@4 H)ǎ8w'v+@4#@д+㓰hZRg8/4 &xrkǎ.q$8C5 }Y3pZ|  /+m7V]xyxk' k\7nrm@i N }0{ s9r < 4.w3{oƩ>Sʝߍ/{{|,Ul&s[sٿ{^PHj{W5׻KAMK_;w]:!t/%s‰&;0 A~g>hrPrFURMڽWoʳ}T1@=ڹ^Q4(3p[W̤`4Z330xgz Y0g@+2` `ϼ" (x@@{=J<^`6k4Xay Ǎ qp%j>Bł 4UqofD޾IwmY> Y7weW54vqr΅L9Z@ 7 8 "қA٭ͭ 4araJT9pݥ3[rV%VpKz"TY1K5,EwWE"rh4Y,J,E]Tr cbJeE&Ҥj`;% D@A V #@9 Y R85S@fKt Bcc\qUA +ֵ6,4Sc45US`&$` T4p"laJUM|\)7cUUXY׽S'FeFYaX&H3\/ PЕ_Kؘo7Pn1i],.PZ^LY|`ib] ,*S߾OvA֚`GFklaE)ajXz2``9aOSʞٳ ;\*S*d{^6Zۛ8[̬ٕ(eYaùML-FMdwoٽБ޾[;|-ǫߣ#=Z-uߦ5:qg֗ǯ:"*z}9y IP29֕NL_.@ DE?DH~T PXTO "I"H"  bq% jDh(Z Q)P&@HQVdII$R FfARX қRJZeؤVfL+SZ9έTR5)cm$HbL P2 L&)5%RfMXJ  H-(B* ,ְ AY)(V,E TeBT(QZU P4T6ՕYa(RP(JJPdIPhD`I(!RD$I@$pJYaQ aRdsX@)R`U$d%"VimLS)e2LS)e2LS)mJefi0B*J$)(! +!d1nּEmQP%"R4ґ*-*!HRffffffffb* !BB@#@Ҵ*- *B+T*Ш8f(8a$ BURR``IFYlj)$1( (JK P(A (J"BD *3( H "2ifڦmIVJҒ*ҀP4#@ҐB!2°)I@ʐ" 21 !* 1E%`a!ViRk2֖hXD HT ahSjũXSkMh1%Q!)@($` dDIHpHaF@D*ҴAb"J""""""""""1DI1DDDF1DQ$DDDIDDDDDDb""H"ɈDDDDDb"""""""#"$H#$b"""""&b1DDI#DDIIDDDb""""""""&DDDDDDDDF"""""&DDDDDDDDDDDDDDM3M2LS)e2LR3LS)e2LS+5e2SJe2LSJe2LS)e2JS)S)e3Liifi2LS)ejRLʙLS)LS)-Je3LS)2e2L)e5)e2LS)e2Lie2LS)e5e2LS)e2LS)e2LS)̦e2LkmVc(e2fS))LD*0 (@ HU"Ȭ@[Cmm-lMʀ00B 2 54-6Ye(JQ*(B PB @ ´UJUUU 5 * $ ,0MLS)e2LS)e2LS)e2LS)YS)e2LS)e2LS)e2LS)e2LS)e2L)S)e2LS)e2LS)e2LS)e2LS)e2LS)e22H#,GXxIRV&% ,T,kFT??>&vݫZx;( #i구*9cPP*m9.k~a>5a_+OS (hۡӏ :}zgON'Im.4ه.a8ZtaՆY|,| A;tK}/N;+MtBp.݃vn݆)ʖ%/N}`(pa !\dOss1h13UUZ/}4y<ӗ.v:v2FM'\9Q앙 (`$*P% ?P^`%TJ /Xvƻxc¸+^tS$XPPv "`yI>}AI Bb'p}t˘H:7~A0 U~m]Wi R D<Ԓ\ V7kwUgy?g3Xe 4>w}v5]]`\A=4 > d2>`Xp4JPvZ*)JwQŵ-K,Y%*R*p \LfeRQ=RBNC? &DPbJ 1TU%]+\[rmtH4CbwpNIyz$<@"#?r9?o oy}:g}WU3ur[ؿn6#rU+$߶J.֚gz׺ݎx^ Ϋ&d _xCv+!TL ӭu>C,fddF& \',TjZ]Z.wk]xXmY$+'y zêa|7C7^C?ss#Dz@r;TyǙ;뽮GuUR^pߪOZ_?[g]:Vtg?jNN:~o~ǿM=8jtϭ/_|x9wW_}~::ޯ>VU|.&Ÿ+~͐S&|tDU;}#Fe;UInÞq\Ê>c3U>p `= T:kz"I=P= t$L0А;IR]YsSM!i)s]\RHE ui,DDJjE dSxp `%tl [ryECH?MW{j5K[^(@Flpc'~=u"$AHGآ?# C 03 fL4i1UIf8f*ĀZ B\I."DO URI C&BPWs&&[ B5BB9#B9__ڽ~ISJsw?w[TO#<eWwxMWWkۏn+R89?O>>:ꪊ&޽I#sS~n^t{X#;G5C_}Бz?sl|}!o[WW}%*\pRal#1/_Ma='~GO?[o-ÿM=8jtϭ/_o|pe|iwjל8z.PM`pȔTJ*EQTU!hBP4$)$RH:Yd0pI6 2HP2[SmJOHH?/UJ? &$(>)$6 t'¿ Κ`UwuWΫPX;"PZ CfI,I&1c;^!PbI(I* c+??¿j}9꙽]?ڻ-38ÚO}QʿʾI.?]+uUSUOӾ?vշkpl=\O~/J֔fY?57Ghӆ=0ӎ=o$N:RX`;WAMxUxTJS*RS}u]]TX4'Qa( .$:<f0>f*# SlT iB! HBQx ^o8V/V/xG@j=/{U1EVHpؔIC\M$}Q(*'*'TK p./뙓sս`RJ(Š}S.KRԺج=Tp(1#T}G!HttJy(1PxU]UT AQ#lQ'pˆD s*jT̿?W`i`A$eË6qmI3UU\fqzk-Vp6ΛVp IUPXt a&0BdKK͒;\\]WIW99 NPXbIAZ|AAAA K  R`5KU}LɉT 4i VsZ'l 3C!i (.H'eyݛtsts9eFY~{aaFAu~cUa8#?տg0LaAN_XM?cM$$ʷ}?BI$w8c']~ĪWo\'$!.?d%?Pi$'ңD*PT?p=ji! jX$I~2PZI%}S%N $ &J D{%=_^ڑ$9?\m1}׏vym_=^6zCg81NI?VV~|a``>ay5g'&YfmVy\jϤR~Z(4K3QY4gBg aViְ jڨkv(;ݧw}Y'plgyfɕf4Ϊ\j;Y+Yes7>vq7dhUT|XG)2)""-O4*"=;|CN;̮c5g13cMr6ެ2՜p!~>9^*<;I;}ػrwoOV}?mzO' rHd?\"fOk֫UUxfd` ETXR*T}oW䭘aUeW =wĜ:̲?<~,;Hz=(IȐA0|jY"M3c5&G= e-刣(ӕT @w$L_O-vO#l~zaaC38pIˆ8ve٫Ꝫ;=bnÆfK"A` `q}}x=7ftΗ]9syq?}`;{~>>4EL ؚt"Bl#i  lp 0C hcC_}oKIZ)А!4 $ꋗ)A640BJVM##DR#I$"I褒C*PQ <` dI2O  2I`@]u !i*NWTwqR{3& ]-5_uWU*o}31 Z*ZuWi R pn@{H'=&!p,!!GtTjc&y x~_k$#v?=zqww:+qmgǫz{G~$B'GfO)+|Ujd$"R"Xy}HF@$npAإe)Iv|~/ZCpuS[bZ\ĿK4Ѳ80٬՚P0Ѳ1Ͷjz!TTR)J?Xret@X:^x^*Wbt!ϣ fq 8h0թ0Y5 05`oL^*Ua3ԪoA6 !lAI;i%+IE$DDOOVj$;MI@WrIWUuyY")4z c5fO==!QRXJ0!@U0̐$xU^izOMt=a|Հ;'x|@x`d'@A2 0/WUM! w~sWOӉ>/sοm_^?<퟾kfx뉆P :WX3[dz?~+;п?w{؏㖚(} ,K}Q? uI"P0$l̇0zz C:XI N IOza2 A&yo^;5CI?TJ!hDb0D<#1QNcT趡k+fz-ه}3wL8(# (SDG ?00GY&$ pX%PD\6$Nu' h?A0`IBS4Lu8~?@(0GwMDxW{mi$W7Jp>' I L'wnO*  RO0f;d:H 'e}wT]լה^ڳ_7ݝu+Vɴhq`TQ)L,)Y?fUhv~?ڧ%$"T$'v޺o,~[k?^ ~*~-ER*Vk/5WofL?UZm$RDDD󶰯?D*6T~F+jkT_2`Qwԉnv'PA+?Wˌ$<-U+vo̘$ʮu_J{U@ d3$J?P'yFO)ڇA~+,f,fі3Y62k'a!hPa2^B@0ר;$I@T?m~={`;uwv~^WO$<1yOO^W߭Wof b/7nՈxAݚO/.}/|˿:^1!6/:[k)JPK)Z̲O].JZ0b.]/KȪ"Y$RW\t,`ĥµWA&B`}((*l EQrvU}SL&[1thѪ*% pJxx2%7E@P ~TQRJ(*BI)$RO%ikv 7A((BPTNLj)}CS$dDGU[tTAS02P;Ma&C2J ' D\K H"0I$ y$,) JN6! ) :<@Ɉ*IAPTMpK C a 86 OJRYda4e6fR$I$JY$a0L*RuRi#N$aY:F`FS F E˥7ƿ-ko߶ݏ3ҿצWww'<y.d :w,ſ[hO_RyVnz~=y벩Jt|?'}i/GG/tΙۧ[Y52lgg莡t0 @i(v,@m0k96PRuU]sW;ZwR~L`xܷs,4[cfO6k|[ B_OF!bP! Vby̶< NBP4RH]Ǒ/jNUJUU]%݇A(9 xLԏII$YHl `r䝂p{虈 ̪;wWqwAqT;LPxW$pR@*vžګ7IHMIt*I@Ċ A(Vb-mYD?Z4EUUV6dDDDJTgo5$ pyI,%zà` (+ry1.fa.Taldg7YۆFz3,E QE.zڇ!3,E QE.?@"<yy;332 9eUk-,kMg99rs {~Xd"I'@)pJhxCph6AHh"(B)BmTI>HϿ\o{6ӏVj/~>~W_c;qT RkU֮6d܇G~dxw>wUHkQ~IÍeۜk?,sE|v٭w]o/~o[,0aOlJFJlۃˈL={;xg3]9[s #+e )aQSTKj}edDjVj{YKeekCdDj!E+M4֐M5!-%.6#T\g#F8:v 9r,ds?[cmɜ3&s$>" M} $UUUIݛY)~}vށ-%.nuҦT1czU{Z_=4IRWvKw%UQ$ƼIE4!6 4ݚi@U*a rAlQpĝ"`7 8wY:j$ jIAUg"*p]la0+0 `@` ``Ca6F ` ,, TQ&R*&B7h"h&? XL@ گ+I`ƍ<|U|UyJ%HU+Z03]C~Pd0 =:jUzUګoi *+@0;ZK=t U.֪])v@c ]z X`5k2'DJ$}ހ@,$6 v:*S:D!B5QBD&j(Fj(MYKUx4QcUzuW1 ꧯ6?W}A}_17P+@(CC@`?B3=샸'Bx=?p5JĎ̓`B7 HM%E%RS M4}~5 y%os_O6mc-?GJL|U"|OYP|Qz=CjI"@6 5_Wm{YfR$j MUayDe)J}'|?zw}{//g_XJ{fk.wfc~z} ſEaG6>|v>8?L#oN_Aձnr;r]T<(xq~tyӨɿt|er-0Sgrʝ;G:GW8,h!Ƈ0H80P|=xsN&mݶ~P}ln^kÞ<6dߦ]L'߇8|g;t2o]T6O2z;lt5XP0D`JwfL=j*Rp3>UW;W5ym}'og{]~7W7w? ߫o_lWo///Ǫz|FXGח'꤁`xa{1$D(0|}Vԗ.TTso*n8p˩uWjԷKtv] :rr@?>WL}BI?Z$0R)1²Og`1 d##$@ifL5Rd*뗄EWAy%4 _F V%DQ7P DAԨR!Fr fQ&UfE&@f `TfA&E&Eff]`#oV iA) TQlZ[bZQj-EZQj-EZjبjkƱkƱTҴCH24 BR @"R"R"R4#H ʤ@ԂL-%lc[PV RP:G??c+Yc5g2՞G(qgN0A:Փ 4F1@jcP#9VzB|6fkj\j+Y2՜\j̙\j͎=x?sV~wx|z۴"(M ƒHIk]M{=!`!˝{U_;3$$ }q{mmV{̮c5gxY;7jmYfɕfes4es< c5gCǗWZ/1 XpoY;L|fXd9 r,|U=[k Huyx7eFLDDGQA,<.b-lJ+S a$I$I$H&QEBlI'M$k_Н:i}o2iQygY2ՙ2՟9fxě޷>=cTU*vrνinF8ѣ k-LESmZjRI$I$I$RV˥Ӝ]9s9u}U˫RrqY\jm13rd'fsҬ\j+Y<LLbgUf&uV{ c5g3Vu2՞FW1c:poY> ͍ٙ\giUlPrTͥ31.fTLYS93XXRYeL3Ymh*ѴUhFF78ky*YRxuYITJ@ U&W1f\jaf̮c5E\j̮c5Qf\k KYKtQfes>u$1tl[f:Yރ-OCSRT˧O.8Óg$ttt=f#$W1s4ΪHiW,%c5es>OA:x$$&b@JD<ӭu>"(=aS~*ϔv{(7jmYLc5gΫ KY2ՙ(uVzLc5fW1'=3[U\jaFOzx!bIWeӢ0B :=PPpoY2ՙ2՟)fq%6J{񙻮⫠|ȟ׵Y3Vy*E! 6 J5}}lN1133V{OzU&&q^; c5G8ANig%I(6bkj3Vo2՟!lgJJRUTDD:2GgCA&u^E16ߊes`z2vgf\j̙\jϘ3Vz̮c5gRʓtvuVles:\j̮c5fLc5gp~:m$ wW12՞4Ϊ+Y\jZbgUgfѕf2ՙ2՞G~Yf2՝iUW13Vnes;c5g'ăLLaoI涮J>tDέGgEb|~~Fփ?Wr4=?;JGz]ޱ~yUtk:8ݪ~{OON8K?Lj|peC??lou5?o^p` @$D@03_nv?o?q=;};q7W쎿fB|Gy3"ޞ헑0ğ)oڮOvP?x`?| xgu*>J6ԓ=%$;M#+t]|~#ϽW۳,$D{xBD* w~>2~6ȇ<SS û'$Ab.k,Iqj>¼HpC45F MIC?ïN_Ep K#('JFFl2Fg>'&ǽv{ɪ=ң.i">:nlfRKl4+L>WH$ªR Ch:1_>CVETTSCJL?UMAq"MH,8G.T*HDxJISN+}%JODsxl|w_t#vI׵:R5-dW+D( H"I#${Hѳ4<|^{NG^zԊSꞨ=?Jvrf F햨*? '<$ZovQqHf"?9̒>BIlUU%~nRy۱ F=?R"?_?k1Yx-\ѻN;#x(@@ÀUJ!pteL4k p験;9^;*eR1\_ZPF4/Ro*@THP ,c '.fgdzLRf<#f *蔩IJI'ȏ!״"G"]7i(*?q4Q)z)tGb2>I0I~JG r*m"KBI4=5%-jL ?F`Sl|=Wqɍ`14dU@!*S Fu{J^V2a 1>*Z4b"1A(ыh#-kchcF,AEAhōѨ EQUF11Xj1hŶ Պ,E1hhѢ#X#DUchDAXƋQ4j1h,h PEQPQ#mccF6(j(h( -cEF`k"QXQ4X-Q4Z-F#Q@V"4V5+ bňXQh T`ثb0bQXDm-ch 0XmzՁ) YŲ͆*nynufbk\2svg1m3F[Skik1J* *Msi86F l#plf (,uʣ%$e>5x%Їi$Os~J)tC禶7[v =7R㵵u_zNۋ_ s]bnVpXwf.MN|?o h+L&|6FM%W".6*`<^2u!a$yD;\Xdl6?Ǔ96jX {YV5ȧ~TQnqm5[)zFSI lES~p{螴>SŠMv直O?|u=DoJcy+oSS'X]2'>(P#A$:^b>?t4 i[K= z|[+>[hף=8U-E??˖m\XD٫۷} 5l((E=f< s.GIA^] 0"0JBvBߌ~='Z6?sjlH@<^,Hl'r=:G;骿b,wtHHn3U$<2'|kk"$$$${3ۈv)j4| % H f43}a;oboLGBII6vM' ;6=JRU>ԉ{/tBHI18SbE=Rt>2X$?ްF-rM}39mw* )[1-^:|Ł_GO8!ʿbнjH'fb1] ȨC۔oG^ꥮ7˵)AA$*h T!1밓J rf}˱ bRUb}u#1&k:]x$"B*9BoW)8?* 6hAlGjԫJ7'vuˬ9!q?Cj^z*‚C.k!';OWjZN"F!J^0rFv!)"**"ٙ/!dG<(JZ f?`O1QBx2"O5rxFM}a*HM{)8(4I7 brߍ~[jRRXzs,j]>H^.EOU)A (~gjMW'0G>$AKoLfGE+ Ԭ Uz:>]c2ayē/9Hԑ N {~:VQ{HJ):Ԛf)-V?L2%R0w;6LHO{)<>Te_Wvc O'r`>U$|ISMMUa6>z>0%l|]=OAs q& ]v\7Z 9cvF}~F`AmMN} Jw~;8ӱLmOڠe"HH-^y )w%eV12m3APCQɆnE0R?" je?$@yGoF`;)QIJhO}>K ?rPk:7v0ɛ]\&(1|jYK4S16\o1L[5s33n[*mSfmS,Jqc 6TI[ne♉&l1It>)9b3#$(HEE@aPuh~)D95w2(H~( 踀na ȨR4\R}CĄI><$:ϠJS]?nAhc>P6!.h KSL{jE}R>$b$ TwѲPyupp`ou\Y.FȻ\1mmUy7e fPU{_`ꏣwfC(;җ΍k4NY&,ѶLLGth1  7ތ.ȅR#ƥQ|I?!Db0K",6wzw#xyHd) d4`I3ң^CS#%9v*рpA~>I^J#|[Ҵ?AId*B'P ?TRG/SSUU_g(,*z!}(D|>>PEX1/~NI|7KrDڦ Iu .D$dL8IGHʐo3~?D,V ?B_jETt!g59=v|G?68"Z+c.?BH H-1Ĉ*wNɲ`sTz=9֦'T:M\YGmjmqU%<)U1|mITjk3,m_I"O.=j]Y'{r$X( )*;*.W]uֆ).1Cv͕3몬'o2Z&Rd-;ƝbkJsGOw- #DTOaƥ(q'_!xwF-p5-&=?")(zQE'=ZS}鷟{󺪷=rڤ)IxSf.k\"`f䃉k &3ft (m\C &$<&˾.'zCf<5~Oz^xg40?>] z]̆=vu` ``y뭞 hsIwea0T $ %%=F+==Y\j̙\j3Vh3V+Y+Y 4Ϊ͌c5fW1&W1c+Y&W1c5g\j c5ges72՟es72ՙ2՝c5fW13+YZbgUges:\j̙\j͌c5fW1FW1FW13Vres;c5%أɕfes2es;\j̙\jΆW1+Y+Yfes2es72՝ c5gW13Vles;\jΆW1fɕf2՝W1&W13Vw\jLc5fLc5gS+Yf3Vles4es4es2es;c5fKEKb]JRؕhoIhlKZ*[-(JibZE^v2ՙ2՛\jLc5fLc5gS+Yes72-q+EKbZJRؗRT%Lf֘Yes72ՙ2՝W1&W1FW1&W1+Y3Vv2՗Rؖ֔VIJ-Ϊ̙\jW1+Yfes92՛\j+Yf3VlkLL2՝ c5g&W1fes82՝Lc5g&W1&W1G|IDO1슞~I(J#iP>]^sF0i 0kX ٨ހ1cd0ܳU 福Ow]1f+ |AN/?(*?CCJPk2BzRߪ ,Ok=($9kx4I ]LcUNvHQmTzjaf͚tˠA R&+ iai2mco-u?5L 4~)~g 4QjK—JF< ;vE H*%;빈)JRZ$MkDKf*J`. )0B*#ח8OT3(Hw2T!RyJ0hQdi7U&!!(ÐL<ٶchEFB'y)(xJ.t%ryR+ =A.=mВD*$Ԁz^Җ]._QHRU gh|< w0 Rq>,ժʵLIXąI d[/OYUzµ$|RS[9r 7ь~ a^ښz‘.UOf;AIQfĈN>TU M=>'|d_Y5x*;GR?>Tr:Mb8z Ĺ?I$sT) }a S$f4Iik T3sk۱''Ra#?a?X}"x3O5wNn[:qq~c=mٛu%_5FZQOÆ55iHU';C%UE`IBWpm"i(9{^=Sj3mU6%|/yO$gTadL$O 2TUEL%RD 0PeǵtqGwvvJ' BPVIVV_X8xh=yo8tn=ֵ0P&f+>GU[[@Ax]À<69!(UQJDӕ\J9]$)Rѥ)ۮ{zZm6Ѷ>Nݷ{h#{۫nOmu&t=o[}{wkw{ u]mSh(vݶfU+׻j<ۻkM[vWmJ}UvjRK*^k7Â@xcq n}-f@z,f Ţ Yln})=eP\lA`= Wk dPh@-}ʞ*" \6ȯ4ZxdK3ٗC]rh4j4S4#ԏS P1 0 $DJM 64I=&MC OU TmGԤIѪoD'zMA=&dIH@MLhh&M6zCM4i3K)=_+H~_G/J:'TTTTTTTTTTTTTTTTTTTTTTTTTT5~1/3^>[EXw87]{9}֯Wwwos;w~A H#H_kckhVe%DDDc7W_1F(Qeo ߻ׯoǼ{0Q((DDZj6܂zm.fmsKkDޒ[\ Qw:+$w:+$A]%΢ I-uWzImsKkDޒ[\ Qw:+$A]%΢ I-uWzIms -u~^<[\ Tޒ[\ꂻKkDޒ[\ꂻKkPWzIm2`3DΜt\}㺣;mvXmcmk;mvXmcmk;mvXmcmk;mvXmcmk;%nKܖ9,srXc3%nKܖ9#2Aܓ'Z\۶.Klqy]WzûvQR)2m62U8s=MaHy\#*4EZƦ5Jm-*ȬFUZ"5mf(hY]҆@+UI.kU%h 6UkƱl&ɲl&ɲl&ɲl&ɲl&kfN*&!pBϮ~~7_ֱoͩ%vnmmm[mmmmgjd$@"VMoZnukﳶ{2I$I$G$̒I2II$I$I$I$I$ė6%{|U%{}A;mJ5i)w{{'w^Rwy{'w^Rwy{'w^Rwy{b4G=Oyzz߅j {'t'i='t='i={N{'yzx!jCx= c3>_ }W_+|W#8#lY i0a10ƵksEl_؛|]vڛ{ʛ,{ț/xe790H6 2k]#&Ms$eI F)sScs}s6znS{;)v=qo;.<ԞD}z,;9ؐ$׻ٜOrѡds 52!1&+wy/<H#Iϝ& Lq7G,8$R 9͘ $x#1\< k=6",čDgmw'E8ۏgG*XuF6^<|N!k6Am9< cy{۽mtMa+"GC+c%J17HlI#0ĆN!8~_UjXHmگmڬ$S{mW{mV)jj ^U^UvگmگmE;mW{m[ŹCS/<{8{B:3.)Bd ^r#׫LYH?WQ9*Q36.=eDD MЏP؞%+)3ٜ.oRH>wi/kP_~|;9 lIxM 2" D,_d~d)TJ*)Vma7wywwwcUjZVUjZVUjZVUjZV:ʋQ]gXyEļ 70c?@ wBn} ֑ZBHUZƅ4qz0BJ/Zv,b9.lelIt6DRxyy<-94`<ЮRNXX0;ޥwTNpOCwKj\:å.',)avXJ]۲R٠uK,]wr6/_')wY\ȳG'nItpLt5[P¹gK5-q9pȝnr'.pWN+'\b3:'5L۞)v-}q;btbuzp.qʫ  ޸0vc 2D,DiO>$_S쉩vF>ȚϟS3VE p! 07 Sc s7(P014`sA@`t܀2,afxg9$ m( "@`n@Nd(w׼o#e afI&Yk8rI$3%1cp pGTC \†hJ Z YޘDM&n("M,Mb0QHEXź`-6(5tE!ZlQbk邊B((k:5`n7qڎA4My_s3x, (D̴>* 0s9 Bsr$Fn׆@B+ " xl07IM1f MD R쐘'D18LL~w̾mwww| @ٙm@m"$̥xmFxmٙm3;ymwww}!$e/4Kύڪ##<_+(}( "@bDH FF4\<\<\<\<\<_owf0TU 4fu3#`Τ<;q7]ӌ(:*Ѷ|31B#l5\MOLuǹ9mTXċf&YXUV5jXPL0z\⵭\c1c1c1c1ϯI$mUngOruW$mڪ8kԒImVnMmUnLzVo]$mVI$mU9$mU[SI$mU8nMmUn*ĒI%jr'zy]KI$mVyԒ^yVyoRI'ͶU[I$K[mVyI6mU{I$mUn ԥ$mU[|nn͎9YMW۩$mV-nI$mUn1S\o+f{u$mU8nMmUn7IIkmڪܜo7RI&m3heF^a7r$MowO9N)JR)JR)JR.m-mm4VTRI-mUZsjg*ԒI.m]xmۙmmm|y[N޺mwIkmڪY5sZ|杶>|ϟ>|'1Nv޾}{nݻv۷nݻowwW.X$mڪޥ]$mڪSV$mڪfwyoq>Loov-[y{ew5k+R[:Sjym޷-达<;XcMW5m8_]Syv̺ui]ͶU[;ki=Uow4:ܮJ׽>nw[ԟ%ԻzssR3q RywwkݝݼS5[ jZIkmڪܽ;tL٫/ / ə/ f[١jɭ傯'Wu$mڪܛR3C5rnuN$1\mOC-!intf'\^7MrK}<77u]nSkhyǥ^k|Zuc+p=ym<ΕxkNrFy$smVh˻)NҪo77?~ _\>_Ǐ5Yn۠nq[ft_?}'$I$I$I$I$I$I$I$I$I$I$I$I$I'3@^6iTD?9 CD@׋G{4pwѻwqqx< H$ 66669Ӥ m?:/<$2L$2L$2L$2L$2L$2L$'z>+nEݝ5ݯ x0` 0` 0` 1m6 ~?O/9.DVH#fEԊ !y<l018~[mmmgV||#V H~~><~o^W{΀_s33&'wy;fgb1c=Ç8cpG ekkkCLZtkvs  [?Iȿ?Vu_g&$IH7$~$pI{ =L$A6 A^{wW$pIyA^{wW$pIyA^{wW$pIa=x0>(Ç8pÇ8pÇ8k/~ݒI^X?a)4$8`gr.nOHQz:q18Ǧ}:{tǛ.539߹Δ'2 |O̵LEYXjؗ20cbQnCXT1*5I'(7A$Lș3y&[wdw7nɗB   ?PV*@4 { $fasjsswV@`0ÏwX Rf S˛=u˹~]}OM"l$;)M]˹~]}OM"l$;)M]˹~]}3Bٳ$FeKzl΋ݻ[3wn۵:.vl΋ݻ[3wnSZ.vl΋ݻ[3wn۵:.vl΋ݻ[3wn۵:.vl΋ݻ[3wn۵:.vl΋ݻ[3wn۵:.vl΋ݻ[3wnfܐC($2K2|o`~umWtə隁@fffdfdfd]=mmmB:!\]7Rd-lxd+[!^2 WBe-lxd+[!^2 WBe-$7d7d7d5-lxd+[!^2 w7s'`wuefffffffffffffffffffeBL[g7s9]99]oxOd`R_ei'EI*{iKpEqSWL|VH$F1FLjhyD`3DF s9D`3D`3D`3D`3PD 0 478/OϬ#F/u/mzٸƄAuxz5s7x!LJ& S^`&*n-n<{A4V 7pZq a9ֵ׌55s7ss7ss7xZof⽕>ݗ׌89.5ǯqsƸ0.5ǯqs#X+2"1s7y)3ws7y)3w"#9n"0Sf Z~C1^},Wer{ ~v]K^+׭ON'DD/;{xϠuwﯻ'<`=ܷۛF~2 2 2 2 2 2 2Kˮˮˮˮ˨2828282828'<'<'<'<'2rBGGGGBI;l4,W&o>r>=f~{\a6@CEj|``@R{־]RԴ/>9nq8|#|NW l`2b]p!AawˣsWp@a 0!\GwKRԴ&+-DpffffI$I$I$O yvb߈5=n7=V:D=X˜\0;c apvc apvc apvc aqv;p5gy18a :Lgp1)Νw-n6qmӘ7rc7=ybc apv*U)ثS V0baL.X˜\q3ˁaL.X˜\0;9ӽnS'x>7=yxapwV|gy+ty5wΣ%cD_ 5kG@0_hיIč##Hzrô8p+^xm|dI$I$I$I=g B^B/ BoB0qˌ;O.im ".O 4I̭OKhsU2Ƽ3V&L;jQįQ jk &|ھ`dT@6$L!2LA&"!&Ye Yj(-K -I 4ux8NֳZux$F,'R(Kl1&F L-/o^n $-kˠPMB8taRW'@xQ'Eh.@ H[ԉ9'`f0`|JUJ>/={I!0`sCU dPhBFw׍<6jkb-Wk"wnCʲl$qI5naFkۭF90Rq,'V-?tҞ{uiU ca{ \MURހ Lw1o3[y $I΁`D@&~x(F^%1c술(|sle߀[mڒ_CL<󁡠CpKW!<8o7REӀBTV=\Zs+Oүgt^8j=O7lf H#t~ ~_ϸ[Mᘳ9|f1S(Yw T< 3e  9 7yB˻`4mWr43w+Jh Zn]'G|E_|=VW\5?ӢKPpI{~Ϲ*Of)o٩ux5@/!T0ջ "s)b`X4 DkXw`Pi~½_7fq>޼ѽr>~Y+4ݧd 1 _ {@ ?p9@!\B pv`h&4,7v`JxxV;_j>j/r DȈV?u?RQPM X,Tmnwgjڳ=݂Jh-haԖ%whV -@֘lj@пq)OYk^ދJ[u{ ϭ;y;> 8} IUbhb+PUb`zw<+e8Xݵ!1'l%EPf&~b3^sr:_9Kڈeo @lGI;%R>߿us6fHI$I$I$;O Wxyyz +zc#<` 8YAףӡ򁙥^7C3Kmxx)yz^330[HUǼ@` `#ϜV-$"Bb1$+EthՃ.$4ї`*Vu)0K&+mČSwtZ "v`ЭoehX2k%NIz(9v.S.W>gG0NI'Kyl" ~6C0 4bP zmϓ,e%.g"Bsy;tϾ46 `6EQEQEQF1EQEumuwI=scᇟP<~/7ر& L "%ԮpjN蚭u73Fwn X:Pd|ɻysCvՁuƺqaO*N`zF>/;ӵ׀ =r?tNqN+nyTB玎'Usjɍ.Fp r75գͽ^-z`8EiD']NvKie:I&S,@@$G 1v羴m=ޙf Jl#dl'Vl&ɲ&ɲmS'9PnrhFhZZɝ .VedLEj9j-aMd6Kd}&3XZ-EZ9l[Bl&6ɲiqilZZ-)h^{-h-bY{KU{~iMUgT*K*sp#b-QhZ-Eį쮼&ɲmɴhZxZihZeZ-,Vq\kbkƳkƱV+ƱY+-bڛSjmM;+suF-ŴűmMd.edMeEZ-EhZqhZ5mɲl&|S=z9y Liw',܀2ٚٙ&ɲl&6xwMdM,&2lS]mw{XѰ؉ Ͻ@ OgrהwoQ3@ D櫝sbmN̓ p.戁<{WY)| ' ^g:w^6r΃T3 X޲a t'= SXw9w~aĞ}">Rm6;`yبv=묦K{({OKԸX, ąOAޞ~jG)w7xc$H@iCs&m-2n6k.+ۑ['o{XKȯG (`GȆU-UUUUUUWofo*.,xa-7 5qMU˾xCU˭[m0'Ǒ:/8pvR<2LI$I$I$I$}p9z,d&HfOs0MDeў 4WE\}E$c'kZ3AFggBYt۳S w`eom 4 :em|þ{=}{<۽xE@EIh.e<~M6~B1*}21Ab \slDI=>'(!~{Jo:m*i4D=@%v)o<]"^|J#wsOr{w˹*g.Pt"b0 ckMmqAoX2 fD 0 0O{;Sn_>(_q '[`hM6K!$߀-$ t@"jc~Rۮ|i=>*>Ɠe \4'3hMԞ4,JYZJǸ^i{<{|ޥ6Yf0gmxSr]M\MHM֗ nb-\%iy[uwy&x+Gȝy|~{뼙X">D"Q0KvKNV둔qwpn.Ń ]8mTx^h{ZHفm6?K wA1l[`DRbb] ndyyɮ O~|Ϛ7O51 6؍maLzj0.˜[ztjm-ڮ@ v1:]1.dq;x\53Osly%%dW>C|gþcyg]!}"Ky!A̅0=9EsmS᳗j r]UUUU`|MUHl$zCxey/B'yA/ YKWk.גhX.T/ HB{}^b:"GMؚ ):ojE%'w41gF;^6TS/ {EY㦷S#Fي5ow+0o'Utܞi.ir]5rNf^]C DĞuUUUUUU#|amamanelN7ϯx_>~$ XZ|ħuxZ7)DD?v ض}<ضM^|輗MWh얘$DoߧG\bRF#gBdEr`2A=0 塣w}>̒d#$$O,m/"FA"}_{8X Vpcڻ&fWe}裁$ܴκNZQ$=T I&I*VIXsPNI,7/6\{ &#`**>;ILJ/y_p":p /֭`TZb@Ҁ)pQi[$ғ"JI!HJK 1+RdIQ >aZ•Ku:}P,n^<-h}8&\{OzwU4UUUU|F}p8K/W%XFķ-5u{ucker5ViӜأp;8WdM:buck3P =AzGy#-H^$/IBl|C 6 ` AC( t$25 J (m (N·[`</c Ì4 t(::G';Vr?j݌:*WR3g|wzfv4`O:X`zP` z6~r4u/$.Ԗ%Ԗ%憤)KKp^XwĖ%KÉ,Kf$9ٽ  UF4Ą. E'ϞlFWՀ0ľ75p.$ < 0fТ$BIz@" Xrm2ݔD$E hQb8%uY bZbH@ PO)X7SR"P zUO`l Yi 1;j`5wiknywDE DHns}*X?\gS.! BIc>dyw[oH? $S*A 7X=lI4I{ B9#W瞜O(b6 DŽ@ӛ^{,$%Li. I{:q^)׆]Ե"}ˀ DCm ;R;-L@|ADpP*ׅ% p >s.rAm o )AHLTtpWEYq<_>74&yedU$ Vllll""#vvksmSX$ߝ{p Ck}0$c|8_@G]c1=OSsB N~q!t )HV0'x{y C -JUR﮽x=="r=W`D4hѐ{JBY$4 gppqF;EB纪'أFjD GZcΑHn%"abdHOj&oƣ'G0tH u7[|T*&SyUøkFg7{0۽ͻ&āy"b&!Ǐ "CX {9ޫ'" ! ~"yW~'%@cmp 'h؏mŀ /-;狴<}I$I$0}T'03 @ȁy{xGxJR7tR? ur{3ٴ$Gŀ_04 ߛ[U^r}` .r?ϓ&f~UP&$@2zG_Jez{ zTL"f@m@ahRA{sp~zΞ0'&I'=*'9\>2-2dY194yᮣ]xn;rH 30A,{M/=soJqfb`zLI~CTm mL~~|+{$;ŠRR6?﯎$F|4ώ {!J}@ -d8ҡQ4HI}G}mfl36|/{5xŬYg{yx~ꪪ9όv).yyyuhf(œ+ ./.GәpZΞD9^qEĄ]:b .cmR,\M!j6熆( D|ݾzwp mo.H(%Dl5dI$I$I$I}Tby[8Cݸ5x4+LuaPFݺk[w"L9H2df /kaN/B˖lڧR=`5$ݑ&U] {{۫Wn:s23r C^m[^-筷 aBC|<7Kڝ{@nMCi ~Agą;wl9"d"f@K,Ӷ$V̆uzǧN<'&I"f@$I(ص!0LH_S a{90D{s=BffIfI1<‚~ }ox3??*QAVBV~t't׾>J̟yOMg?0( 3330 h)UV*6}ѷM+:vT$=LDaȸ!#@Fgn -XBdI$N`K<:kK8xzy[u1:r l@hǛҪbUmፏUsXg1i%Jުbo61\//nw[^U|BpWW^E÷WEA_uq"RR>+/Ω}ܿ!7+V/՛D4C0,fa$Q8 rvkNh PFA hB Fϻ{ϫr^}'x+`]KQSWdax0 CFF|] ̴xX۠,Mp(Lj_pVBS]=jɥȍ꫗&C:&N!386i){mj';؉$mjzXml;xI$MfR[|}żb "*XE@Xշ.jm}s{ǿp¹2fbgf`@2N{Ns+; ND$OdA G G;>׃ſq%r.p';'gXҖM{E$۩/Wgb?πD3!30B\Ih7hOMݲI${b9 7@͝{4E/fI'L1&I$ȍ4 8KDtgK7>Of~!I%&(F[-IQ-݋u/??o?#"b@(f"M/yٟm99AYrJm2|@>h\ 7 j 7n%>s;z<ߵIf;<M` b#.m95O %-%@ RY%HN\"?_jcXmx~gOjo}UUUUUUYDб !@(-Qjfm3H)Ї OϏ{~*fDsܒI)% 4"GP&EuO6(f Y3 7ʯׂx 1]7vw#XF](P*UݴLFs+zݳYջ$PaO:ھl곫 nP׫V#Cw;L-2ܴrh[UUUUUUUUUUUUS332%$v" ,Ms|tlmu-_C3Ԑ;}5{;ٺ0@1 9ɒCCwuEmwwn[j=Ya;7#$OIfem4j 慷Qhn1%unn@G ."1@Fb"S;%n>j|h;}maw -@C@hj2 m w4*7v楧l+tKuL9ܮӌ#b ۻ7we۰7%fC%wXj l )P(T@HmnXƁG=d]]HM]Y۰Dk^tݸvo79RKR*Y>ysٗ9/x{gLɇ-I-[Ģ$ID )e$%Ё|tbiWBĕuLHAɃD?0Z.[l$4` h+Ž}>oo/S嗑u0ۥ.5C#4M rj^Evůw.xع]GxN:]Ý_OtUن7 ָ0vc 2DUdP5Q0}g!ic 40)~݈w]q f6\U[UeREpfhm[\qhm6rsэ 9,fcS"̋2,۶vșvm6bK]{tGx0ךzKZ6(1Zd[fW*-ߗ)^ZNpQ؊Q5" 1bc(04,MF566-RUl@LmUUUUUUUUUUUUUUUUUUUAP9s'TTTTTTTTTTTTTTTTTTTTTTTTTTS`P{fU /.?03 03 03 03 03 03 fٛf]¦C[rksR|#;Q:䫦 LAA6i 4mDF, śQTUmmUs FFԛEjS2qq'ԓ˒U$ֳimiZŲ.l0DG"9HElE-[DDV Q"9HEl"9HElE-[DDV Q"9HElE-[DDV Q"9HElE-[DDV Q"9\hHElE-[El"9HEl"8DPmp3 03 03 0IRT%IRT%IRT%IRT%IRTh6irmM6m9g8[rN.9P-&ʬLL`%X4m6Qj*8jjjj8}͍R+&a9G0bW"\4Ѧ4iMhF4Ѧ4iMhF4ѦeMSMM54SMDlFim62,Yh4)ʕ@]\+@2"MQ TBLիl$MLSTEl;(Ґs$ dI$$BI $$BI $$BI $$BI $$BI $$ $$B#[n mX ERXY,l,ɰ&6J)RcŢh5ibMJ1͖5ɬZd-43,k+,k"cZYebe3mDjZ[m9Ü\ɴIUaPm\qqē$2L$2L$2L$2L$2L$2L*#8s+ciS489sT Flm*fZb63H4E 4ZPiCE 4ZPiCE 4ZPiCE 4ZPiCE 4ZPiCE 4ZPiCE 4ZPKȀCkj(US4S/?_Z'C-Eym$@ !-MjkP۵U^> lf8WZjV(ebV(bV({DIy'K ||_%='{d'Y<n>ӯG_)yeTDogLDG}}޾ H xq燇Z"*",UQTx2㱗 QC#kUUUZ֪,XUUQUFԊhѢ"n1|­8h,X3睪 l'uxyv c/~7cϏPUUUl>_}d脤T [bi BoM<^0 BppUN?a2PbJ{>'ҳkJbZ%jbZ%jbZ%jbZ%jbZ%jbZ%jbXmhYX-a 15*k Tj-Zjڋmm¶E*eMΏ'"R+yGTsqeC4jZ}눟Φ^YQQڢ((((((((jJzҘ M>WdJ+eHF6m#iHFH%m#iHؖ6%ִђÊڌsV6F6ئ6B+d+dkislKs6m#e lKu<_ @{z~o&5yA*1%X8fRHSl\\spvdȇS|whz .UMW?⢢e,`gfffffffffffffffffffffffffff=1<T.d.^ R:GUKb^z*qFg*ȕLmFu+0RȓWrI,>Ň%S ԧOb|9ʠm/#CErW콃Wpx ^{^A.O&WyRamW/9/#߯dzq֑!$z;%KNMV'X4Փ"ɵ k&+%KfdYY66>}}j2ZYX/#f[ jɑedmKZ}p}TJ^$xMZͣjf(Ժܩ SbA&ĂMM 56$jlH$ؐI SbA&ĂMM 56$jlH$ؐI SbA&ĂMM 56$jlH$ؐI M(D8KV_1{{IсmEm__@5GWOȪN'ta#ZMoV'TW5)|?<ٳf1c1b#MTbٵ+З UyOJ:&Rư| lU m*EJw??JU&oH^mG+QQQWjڊڛh  -HlNOv%V!ED2~ yHznsߓ:*"$eSDKCrp0*k;)v2P_T>K:ءy*1|F8d.Y?P\cuGb}$C')Q3mZ-Zֶ͚͛6 X#IiFiFiFiSH4#HҚF4)iFC%d,diSHѤiSHXF*XPʴ`kUARcKɳf/Om[|/μW1Ox?C=5G*ʺ%t`G c335>o/]UMCRS U}{m??KSe=!6=`?!cCcxtǛ:}_S缾>RyxwԊ=@}!P Ѭۅ5G4#PTp ĉJ6#IP_ZܦH!r}G*ߓjվ~`,-YA.Rr:GHE/R%(1hhU| z_S[ al-[ al-UV*XbUٶ*`QVVGj*B_p+ܩ(=*i(/~7O)j^x"b>'X}/K뼩J%l /zX,͛}s}s1szں.͛׸ڜ󽋳^jZQVUjZVUjZQQ[w jkWK%B9 Rw7 "dL|]}i=`MW!)I$I$I$E$"KI%A32RjYdĒI,XI,E$)$$)I$IZv$I$I$I$I$I%36II$I$YwwI$$Tɺ3'95&"jj\B4GE=A<2ʇ(ʩ:\S)U)j+Tvx{HI^ !GF$%%d'Kp1Tûߥ""I$I$3$@ݝz$)I+JRI;Aݝՠnw7gujI$I$IZRVI$)I$I$I$I$I$I$I$I$I$I$JE -ϯ |]V{^+^jҭ{խַiz.TvU'-rWڹrW@ g"I"3ABR?TB^T*%9}>Q'}baK+_~[[[sp!ԶmK* 8`>߷]/Д y5 ] =Ii1:n333>}dOyW‰}/?y|;!WĞuS ffͥcG~ȴ::mr(蓥K^C(%yXJQDh*"6Ʉ$Z%*ߥUpIWqy\/}_y*O(J`K!"]]@ĺ]/zR~xOw)AHb_z~Owu?O׊U#䮯+@vQRVڮB]!yH^:IJ臦ϧޒ_WB"%9( K<U;ĕW!WH{US?M/V5-lqH(**=ȅ:2SJkj=jm_~JxK;>+檑>i }/y K  aS-Qr&iKY ]jdu<=f~ri)<+𯙀?֏Ou/{M(*kf[[ֵlWa,(T{ 'CU~xݿ6nW\]~F1n s[;xf!|/^wye}3337E=0({wD츏ZZUU>=>N=Ǯ*yxs[Cm"jݨ]a6ljP_,)hWG@ɉthUCv~=UpD JpO_tG5mZGI#G.muCOpZkW^|= O?Z#e6[UI6$ٲT .hg~?%%y m~y8,QfOϪ؅E$읩xty+JMdP;j/U}avb5".ٙիV2i{WB^bq#tgjZȉY*k@~rjM ζSљH" VMrAآkO OtRofL5[jU*[vr[YDdD)ɔ)4EV{WE ڧF1O W Ȟ@f͛6lh 'oRxIjTF1I|*{ozt%%-r QT= T|DE!Ifmmhb[SdؒhLime$㴌TiJ4b'~B^WI~|AmffEc9G*"m#*XS K?JSB?ʻWT+TjLmII"+"*o(Vxk4ƴQf)fT̉ 4Q",Q'礫O~|:k)ΥQGB_?pOU} 8'VEdP+A|y>=5{X>~Ow}[v+ĝ<|)Kޕ!{?KBFP=~$?T^Ӡٱ>tX rNޞQ$ᅱ}=nW/!=>mץ,o71mN9χ~/_J7SRaCˣN*(a1c1c1cTRSuV+%`YxUNQZCPErVrQN]rR'"ڪh%:N5˜蝓NJ&MTXT iPZ JmJX`K(1 ]*$KyeRC=Gy%y #ԒKhdW9C?œ)ΎpYz*"-8O}\Wo$}4+?SJ>#Wȣ FI }/ezm$qrq77761QcJ45%_F18ɘm4Yi/jTd,;a)[)lSiHJ ?ww卞8mN469x/}"RQXTI WOzӧӧ.oU G"nگȑ#A?ܣGKa1~S2#mb| rqmQT'6oxÆ,yñaϯm=% Ns_?[((Tg%_yW'˜mږڴٶ@]mqAc`iJRmuOGq}#\p3L43LM&Ii4M&Ii4M&Ii4Mr0X ő& ,0AH1anVJ٨VVVVVVVVVVVVVVVVVVVVVъъъъsVQ[FmljVlmEʦЛKj&m[ڶaSiCb2c*[Y6pcM„rRܥJJJJJJJXf31qź٩GUKO2Q;a[TU-[}n1c1c1c11Mk["v /ߍW**Z;wVUUZZU[? پ~UGɽ>lUVqvqWB%zWoe<8UUU, UUKTREVSx18Q|L" s)UVԵV8抵,UjZִ+Lň"L]ˋ"8jUUIFR:Z\,Z㦪1]¦v*rp +H1!=' URd&BL UV 4:Akݢ {EQEv!˨w;EX(((Q]\kM=k.^{< (!KBу9)G;J5llllEZ/ШNA(snZjԪj@ R)\O#"k&k&k&k&k&k&k&k&iɬɬɬɬ6-L38چc>2mk\ uGp8r((((l;fKRw}^-W06dnqWGIY7 !'<;5Z&P.!Y : aDʲk Q R0smQPm^^:$U%O~Ngૢb'i/{%",/|^?Mm5+ 9*lKcŚmPG*N"#X1Ŕ(hD(ThJPܱg 2ەbfٛyD| >Q2T}&5|,~1'."/O_/:?O<>oԫJW0cMt]ul)t* aIA9\_he]/Kߨr*d/\:$/m{~.E)@c4ʀ-5u*{}$@րP1:'J`X$(C\D.f+ffffdI @? =ys79)UVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUiUVZUl&ۚac1c1c1bEssX]vjv+ͻخW?ַ<ߊkv+ʻGb\`uڹخW;X]vvb\`uڹs;jkv+W]]v[ aҀ$ZXIM@2KmC`KmB[l dd $ %!-AIm@2KmB[l dd $ $ %!-AIm@2KmB[l ddd $ $ %!-AIm@2KmB[l dd $ %!-A I-AIm@2KmB[l dd & ֫&T`ņ$# f`e.$\B7 *&sQ-mKapd %ڱ)҉JD.J?2(rM;njs(.mdQ6IYYMb-a5m$dɒɓ&L2ddɒYIKf(YIPjX 7__sV%UQgr}/pS}E`U{^b{z佞;oi={cvh A c ~Jyvg{I$sfW4|'3 -nfp'9h݀݀݀݀݀݀p̜ 7wwwv.wwwL333.@ ܈!9YfЛbdv/(C:^* B<`(3r:f% _xCTOe -pl5ABgYe.㹴7)i,5Az(jCڡ{³!?YGQ7e]C3;J>q۔4mBxC8]D…~>}(i >P~]CTϕ_t!!>ͳl6|{柣~G-K?h1c1c1c1ops4ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*ҫJ*Fe1c1c1c1c1c1c1c1c1c1c1c1c1c1{uk2܌i˸6nlZh_GV5pjAc#gX%#u˗y^tƍ4hѣF4hѣFO?ggݍʓvnhU_  E6޵ 9~vݺUUbýy|/v?9 Р՗ny׿_g"2{H`QTaTԐC:ԩVٯ/u7}UN}ӵ@C0iS!(yCP=!HzC<DAރ䃄4:4'!}eMA`,]20Q6@A:h ttoޥFxB Dbx]KKG3=uHh$+*Nش!YGw 'jEKY/)쟷yjlGf!UuP` 2b!~ 0 -$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I(ww\9=Ɉ̓ U'۲Wܝ3d~nBi$G=UҸ['';[sm>x:?:WU~_@>J\$$eI'¨^ϻ_ޒM$I/Ͽ>I$ܟwrI$]ܒD_II%>|$Rwr}$IwwrI~PBPo|K,>9N7z1LܞFDFκ7N3ޱ?@/htJ(hHdDY/G{~dN-~_$“Z⥋C1c1c1c1c1c1c1c1c1c1c1c1c1c1VE $ ?H" 󿄒I?$II$ܒI$m$JI$I$I$I$I$I$I$I$I$I$I$I$I$I$|SXI$I$I%oۛ,^\\ߵ$O%rHI'ܤI$icY{>I$Iw\$Iw);$I-msI$wrK$OI$Imm&\}#'۳$-I%[Wا\ݩy-Oi$I$I$u]u]u]u]u]u]t,>M$I$I%'w$I$I$I$I%{ܒI$I$I$6dI$[-I$u"I$wrI$Íi$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$JMI$I$I$I$I$I$I$I$I$I$I$I$I$H>;߉$c3e731ܤK[b߭cv=g/ej GWzo$I$)fI׏FCvq{'nj=uOv6sv,ڭ+bmQ9[T9Ҧo&3 ‹صg9BtwŘ &/^ss5޹oYђӻH8[m$Idx=g3"ݜ٣5r.kϪ'۳{H8[m$Ie{ӹKY۝ mj{&Z7O{wx[өp|zqUdd\ddePsw_ZmݨbQ1@}~N'/02p y~n_z*<*#ӓf6rb2s$kdv<2g;goN oZҸ c/N]:} _{٥i%Ll_=}O Fi)9%hau~?Ç,?9>5G?$CHÎLÜ7:=x}yo_|$R+S ֮Z \]$.(Zjt V,].IAh\ ` (T{=Njhe-5L:Gާ|_h4h0Obe 8_~,iTTih֖Er"㋎.8"""""..8"."".8""`\\qpqqr"8"㈈""DDDDD_֫ĴAnphZl>Ӝ˝vF+b\}W\'gK9_+~>>xQڅBŜ  |8RХ) G~ 0hG{ H!|Q+t:u*NwuJ]]R_Ǘ_~\8r8ss?_U5^+۠L?zvF7K?Ĵ3 k$bZiu3~ʤ  bDF+UUHҐ:o*"H{;Q5Q5Q5G]GUu9y>9߯}9ۜsշ~ߞ?7G/15$G ܾ5!5[u[xn<{!iyd^zcx{wj$d'|]wo:yr|)>[js9sWڀѵUB>vv ~9xu /K(eIJ.İ 1*Ȱ 3ZM>qޜՀqw\v]Ǘ9&.ۛhX.İ gD=_mRӮbY䤽:NJ=k*f:^.y~{oÿzΝ^.C}1r?M?:49ytu/sV}%+Nx,.rHaA0$6a >?B|! ?x,1/׌OJ'ȇmF}qDO]+G˴SyHm7]yi ?s:ë./zZ׮2{t.Slן -3~גp2aVz-ܻn;wxu9;S/ƬN&&Hɑ2hWjFN@xpr\ Yh@ IJ%,DԴ`AKKKO 8@ U6pv+9*G)}wiGӶjtXq2ZՖ:998rrpLi5]m.4ƘcM4:GU6̝ qtYaٓl.+-Yj998i2ҵcL\:4ƘKY[mdtpcY*\[.SUtu14-\\\GUٓm.SLi14ƘcLi2CqrC2Xre-]..̝ e FL%"FD3)+V4WSʮLu98i1998PÊaͳ'C9]-Yaͳ'C9\].'PN9Fe6؝/reN%vrSԫĝ™tBYaNѓ+ɶN.ĻZ$Ƙ-')]KT+ÉX2hjU8M#-}n]z?_:wz^߽ba\x͛kn؏&g߿WKY_buCG.Q__xm~t0kf̚|ߥ<~VJ~!׏K|I;}'%5?^}v)W]V`ӱfnCALVI&U[#w7B7:\fFKS,uɘTgIXV"R?3p^ZԹWU}mp@>)064MK1KncMH҆uM:rwNNM:NMN ɉNd=xtgv}&z<>vyS4:) œ;0Gp;;g_.+Wkr@ʿ; ;>4CN 'CÇi>8w7~2hc~]1v$//2hc~]1v$//Y`41?.阻;aMi!uy}a?4q nόP $I/[y\ݕ %Kw=](;+o!pʅ+y*{QvVBݕ %KVc'u:!тh#A4^iӻ~O~w-rZ؆Օkv_3C_x}/}]pE/ g޻5N>jojͼ~u x((htI2y'yꎣoGGHc*m_u;\o^uuvt嗱eܸt{W *8+qxYy/.x^Kz.˥Qp/%ttk.dp,^keE8=<*잩'pa{ǁC =xt;p}#/9.T\OhK]CK,,Z##G V 40ɇ(a dËdd&0qeYa L+8_ҽgvK❂,6=W$8֛t].ױwU 1{XYzq|WwKڹOҚ4=֛jvY6M><)5S 2{Sb< <. ]AG<q<{;18NL8C2:82pdu Eֵk[-9 &@aKaKj]IպmO(G?'=Q8MfI$I$I>~ޒI$I$I$I$I$I$]Rmumu !Tʙc-HL&ı)ʢ"7w{$.RXw[g@00ko+k}}7|[{ד'] 2R"I$<4" $C$%Lsmy?gExZǼuhsU90, KM߮޹5g%fMa'V`7!őY j=@}5Iorvgp?@FP^%*zxHOb1/RG~3Mu];ߏ&j3NdlI$ $I>{\HrI$I$I$I#ROgٳ0a:2Iү4~2f㤛5GRu\UOI8'N>)z.\]jlTӶA) a,/l:qFyt4haiXeX|A 5ƍ>45ƍ au Ws5q|㱍v$<\hyêBW@T,z+@Qn6,)TvgNWU ʯ_ݒ{s]wulwf9Ѷۀ%|9ݽYVOfaQLg9NYeYeYeYe]c{vyϦn ˿2Y7pS\DdoA<'Z4Sr}-]>~ޑPӴ[:_GۆVJ5%wI2\IeB/B룛$%kI^w>|:]~lkzqWw/~[Yc{k_snc^hIQ湒)DG2w2S JW+be:fkuunugQQC㆟ܟ&*UP~oq_=}h"ѱso7s2J.a,vIA2tse^BH{2^wa[זYe*ϭP32gM})I32VE;wϸ }#C $I$I$I$vI$I$I$I$Hm$pumuuzu*: (p\*z'}N^gs o5e=Dfƨ9O;9Zvv~%ABCP{; C w4Nw$rH3q2fe7w|{ՒNI.}c+ɒk+tsYʷ=m/9Osbcj;IBd'swqr$n]&9}0˙QRuk5W\LVŘ_Fn~ʙs=iK>=4afOw3sE I ;2mŹ`fUEa0A4sWI$LؚWǽT{""|I)yvmCps F/~!g.^e ꤒWP xUa$ 9Oȿo{WX њl| Gڦ,'uۧ(^3y Q🌧(rOBIjT#=_ek^=.ԙr]uЀ'/ѫ{$I$I$I#m$$VkaC)eL2 5%)ZRUUUDp!$al9w_m#uOnq)$33&dЙ$]vu!zP(P( Y;&hUM|#~"ocd3Fn6d>G\w.˻ {{3<iͯoww+%Okbo+ool,,,,$nb[Q9/|3;@xVܾlTLĸRQKoa%wb ν; ^$i_F?=[O@ꪅ@v_8,vN,FŘ_+lU ׈AYag3|}V-y\\fxwXaT `3?.b[ 3sE xR /~` Cg@\^$@b+9_n{;,ϙ?o,f\7K18&dKNP V@wv`~Lg+* {o΅Z6f|V`s1y5]fո'/7)ڙ\>@;c/O€M }CL/}(؛ ^_A7fp̔qvJ8946Jd~2ڻ}>Gvިz.}Wh{f~}o;G7;30@au< 3s4c $brb2bI":ـ W1 .W}$I$I$I$I$I•ukOOw콗׼;xP?bY31xAqwss-1ql5SbPY I zNjv0%cRaBKH_v%*qVWs(e_:3KlRIev9׷|"thwwwwwwwI$I=tI$I$I$I$I$$uJ:JzXeLVd&JRͻ vdE7;4\,SYi#l5kCtnߢ+w~4k+JmPmJttxI pGqqAfᾛ&{ffg7Ew{#ܷ4L2 4A&!'d+Qj#rr*+@n35=$9o=3kp97DeYeYeYeYeFQ37342\[{!wX9zjgï7t`kf]zz& fyzx]}.p}#$@]]] lƙF<{ao ѹz(Ic./& 49@p2may['Z)oYiђ>y{1tb4Wgh}쩉y{!uЂHNy9𐐐An˾yߐA:w؂!^^{a!/qR J[yέWhg^0^-=YܞW(6!}vdЂ\}yxHHHH^}Ay7qxlHsv!!!!y*޻A;ʾ{z sǽw$HH [w-w]ZC&;~5sss_ ׁ?\$$$/?<$$Au] }^{~ވHHHuy;D']{ w M}֮>>| u{מHHHH'207s5:Nn<]>;zzsa$l޽" τ@~{sμ>uo}!Ir@I AH'“٩f &Mw HI<O-/_>_L!:}߻mnX,А;ia? 6vl9žɢAZ_đK->篞y B4wwK>ANպoAydOm}A=v{$!BA"A.B'Ń{'yu=I $H$n~sAu#뜀^>soDAmg׷ ^ވ {'u fHAUn:Ut"MΟo>]x~?sK5@@+IPb++-0:`mКGuWaT2f簾d>!s@w+wf6I$mmmm]WRumupBPPt n.Nb$a.t.3|㧽hff߆`ȤhEp]wjD5S!0ᪿ_cIOowݼ uPkRCÞn0m;)fX9=733߻$՜^PtgS3;n˗[8OTnwA V* :gIWRZP^h4@* _|e̹:gCCZW [5Ύ9̃fDOl{ÍA TR1W ^!(1Igpy'{98>w֯s!$:sӘngQϸ !PE/Rd0SBi;ӜpsBjߍP\jDB^y0c&s6HC脐ܞ@xo~(PU7jx)W^]v0f2I:L.RRn& T uAHTݱAV*`e`SlPb%j zPa{|>(]eOd<; n,Mfߝf47NW8Lt&pFPB S`Ss9 ,4<ݻ<>Il>G|֛_hk=ò&o fi7.솓ޯ3TPB"֜Ð:$γBw=e {JA@`yNP@ 'biyN H ( 3:&p'L49yp 7p&r@fFiȞr-%L\kwg$ꂈM.dJI)JS8`tfhnnfd338HcmhаǷ(f$ٟ{?DJ{B?jT1mE01 Hi3  CI7 ᄇd9ù D '+]TOW'|ǃũB_N$s?᠀~vzoz$mmmmI|*++*S3C!qMZX%WUKnȴʅsqKf0m +>۸so{޾cnRǽ7̊ S)P B u L{V|0}/f+.g+ErwowwhMT+fVD@ns&V̛Ͳ,,,,(YVyx#䭚wcEߧqLWw^==AxpCn:i-% W{9\h6M;\P5{*P'h$Mt.rg/$7dD Co4$=˺tUjU+',睇)TX7I840O/ntȦ|k"@38f!>s03Ya}p a$h1GwdžM}@4;Kyys$spps $a"&fJ, ;07ܾtvhCmN̸{23 33  >f넘n]4C,47[e} ;{ynļM$8I\I7w +ssI;sI$i&n>@::҇%F?yN7|pGΰG8H&f8H8Ha%qLs  8ndfI(Ya޷GMt;9 ɝ Nㄋc&eI$IT"8 Ya} ~s|ֿ3|_=bV đRE@[CV]%^'Oǯ܇^R^cSF tUH0 6t;OX>t ZRыd'L]װ 1 X$3wjmmmmڪ몛m0!XRZJ/k "9ɝ޺I$bmc@9tGnk f>;.ۙ)z;<.0{*)@`e-HyQvzx< ORi̙&k6pz3jBYSn(I[4:]+ :u8u:99XfQzʼ9˿wܾ.w}&.P._`u\c.n6.>h]ټgoDfRY sdG6%dk=ƀIۿ?J!=9߿oL[ l5]M$#d|e =:ZB&F-y(]dAUeeDf,{y{ vxl)mV ihs@et/ "d~~u[s{_ qH 6H;h@-xg_OE-o9%pI*P*EduI&eBZ/!_}f۞sӾo_a*@*u B@*nfcE$u'fM L ;?̼ٿQ&wox$O m)l:oE 5 ?46 - + IVz!mۋ.G ӡ*>O_ 7$5[5g I$I$I$L~I$I$I$I$I$I$+(ӮzxYv{.%{z[3wn@w3.DŽ9'6cL3fv&Wle]x*UmAڰu [W332fd6#.L ߽gW-m`\xg9YQY[`nfeeIy38U=sd͜ T̗u7nK,,,,,W;pۛoMÉgGZ#e_lD[ss4UfVОwK†swx 9݈<|2VLփu bfKr h?js/Ξuu8&_: VRa[m`aV }g߼ u =3μfgwȇꥰc1IoV![lNbh~ /~g;oKm,ݷނA=!rW[S-~]_>Z&V.Rþ޲9xt Hs Ia`*-gP,XEq4 g2m=Ta@_埔B`I BIpbX 3 )6&}r_}+8Y 7=o_D@a2*drr3 Vpg`Rs0 FaU=ߞ{yS=}#4AJ[m9- )Ig[~ s^W=RZ@j=6c"@2te ~AL Mjӏ'ä3WX5v3Ϊ#I;v.,qXct'g \&68ֵוsQm#HKIi2da!I>iϻ3i֠4Ӕ:%1\bd0%I:1Ɍg-ƽԐւrt]ˁ:tT,q%ia1kZ$<hr9A˹qC!ГPmEǽ{#;MD_RaY5+dvB jm孼f@('tVBҲDQW3m, IE&BdZ2EYd 2UUֱ0A#43bij2L+ZSjkfU|Wpqqqqqqqqrakka bnJՎqrf؛&q$ĖlngZUtU w al6 -a)PWKO%z/bRQw!лU~➊.c%>8*ʷu_5_7, &CeYeUʕ*ppjuM[E[[OΒ\bcc$j~}G!Gچ]E_tC/'i]ՃX>V-U 0ץG£JuU/^J| 29w_mYoo5nYa,%UUw-?'LmڲɌwBWJ>U_{Iz!Os'fafbffff\ęI[m~+焱ʕݻvgrwߨ~Nh4mQ[WZIFm]u)5)RlBd=~}?UBߖ Bl hBi:=,<8n"3qo~^jbj[_^+oRz)|^W6#k|Ȳ1UD$Um [ZXС9aVs6Mͧ}A0 p nCӔ7 Ʀg2pJqHOON]v <|wmJO2e 3Lė{>/l㎺_~FZg#NhW0rFLl\ږ\m35$XRHYH`5ZM;鵷]qT\R}Cۊqz8>{up;ww}}_fӯ׏oszS*#]{${UU3:>?-:J_#]ĺ|gu|Z-Ϩ=Bu])|_GǞu2UTϴ<[PzS*=|=wei~VҪd1fq ԇtn7_ZO=}ymX[Ml^iO=ߍγ{Cv[!nݷVoUUUxOપc<#s|m\>w̷şy8eb{D w؆ s6]!H }ay42{zshZhZ})8JO;UUUxO'O^~D jlU2Gz}ˮ7qy<^;˥8hѣF?p{/wF_qW*ߋ`,h,|WVf!?t}~u˝^˂#ؿ?d=vŜeb0(Q1F(? >Bp$.ԓxK~[{Usnl$Bl B YeJM0!6&R*`CeY10 U:wmRx+^AޫW2x˼qS4#^i:}yٚ{ ؽ (1acX _*Sy.,e˕J)[ep'.'88aˇq`8aË,<(TqE2VVYUw:8p!Hڔ[6'<;Ŝ2]*8b2U|OO'U]mwwi)0 CC {讣K eD~ e^WΏ|,?r,OEG#q'ฎQ.$~RJY=T~'G2ثYuseskE1}+eWN朧6ѓe/)~'rJWE!LH$ $ BDM&`@a)GGZ_\?i=_GWT)#]"9/#Z%EQTma+SU ޺qj_+1X\8bc&,ecWpp1,+V,02Z/]/Cpa #`*SOޣ`:We\\]]F4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hͦeT.!WR?T<.rF&@ 5WkO>MMkKS UW$ҘKF6V%QQQQ`e-GѨr1a|ztŐYF# da1j22XW%VX-424 -M#SH]u]B0ddYYsIJ&6TŨŨ³F6&#%XhՉh!L,AGWkm6F\\m%~+#\Gd}_j/R?΍ֶq8z{%K*"GŌd,2X,8,8X,8Xp`ܱXb,.0c,b,qaHz{G/>#޾O 5_a TmY)) %kZԕ+P)R$@BN \kZ9Zַz׷?N|_y|Ծ'J_};;\Wa]{֪߫J/k-ˇNӼWq{vK>U>k_MK, e|}~ZK)+ȥ/簗W%;wʣU?E|dzUjkE+kj%J@kUjde:>%Yi{'$UUU?'*#_j͛6l?Vlٳf`UFZ?/-o$>ff33:뮪u<-L6(IOߝ|B!3!3!3!3!;T/F^ehm1"n꫹8׏jWURb;-U9h]/tّx&t,͸:]#:리3qbi-G%vwquINDzkm/aNi9#孶e|e|ih4*?Lpr`z輥jj`cT~]v2/}1 U.d:] Ydb|a%;bVhڙ̩cY(Yy"Y~]0]ܻ]ש)qq_};>¾_iҟԾ36lٙ)CBIdcja5OtWץI~sW$Bl@,꫕rU\oUtr.U~c餉R5ekK-@5uW|$fdɓ&L@I"3o0xo /8\p\\\p }/Ns=p.뜹fjww;cN>]5CG>ʪ⹘U{4;d,݋̲꿆'Ж+30]Y$a;%[I'?PPY/ J(26,?O_ڜnx2y_I/&(9K`R & eR'DRm&ƅѪy#}$ȿ{: LmjnS[m?H5=9y5Wy~o?/,ɫn7s3g˙%PdmT( Dg}w; C@ڡZ(h ݪJiD@92Biw7bDhWv ʮ\<<^26YJA:].oxDaLU!(O dА Ї{Prq'.|~0?Hyf|GJ/Kʞw];|pX`WRy^պ+zzw~5jn Aء}isvC\7$RA='K9s?%/riėIkhAQDhMk-TEz[6~oHac 1Q-b?R9,Sf` ۀ I'd22` a–'C0Ha `8ʳ,,)f,9fQ'',kʑ/)GzDԤʫ Iem \*^GJȅg$)IW(&ȿW qQ j_|+E}}jA8wA%TO*_|HJG!LW#½y{J1G폽bbaG͋mٴ,`JIO/Բfc969,pe,Cٳbj0QbBFfğQ/f0qq>24.;N/>s[}g/,qu\CFīT/ԧ婅;$+/_ܓg24%'3W[bŀ"(B{I}/>-sIW{^wՙΟ_vy?{>|o;_7ijG}[|>+JӦ1?UqW%O߇T (2օ򪊻ü4;?T7(k{BШJiJeTW# +!>^@Q9RyT$W) 'Re] %:t.Ta#b9}D;U"NW%J|_R{xKeGbVmw]."$yNz 0}춼:ۯ/(r {sf[5$2I$I&[5<ԧz9KD UC4 T&Dڨ(- jљ%h fVgJ/.::=> $˻Q.I9iG,UHT"tN)GãÂxZ"ɡ'N;;;AuxF`F`FDBu <>9lɨ\}w{^ERBKt/ 켗z/5漨^^<'dji;w4zҡhpaNv\Ut$.QdX.&QԔ:A#$%H=|QQQQQf$ j$6$R\)9Ǐv^iUw<'p!ruW\{cb&0{THrį:];Tih:HzG^˴9WbW_ #C' h|y62!UbT >A>t0ZawUmFCb|6{֭UԈ,m:vCU_{~߷>~ ʣzdO ?ڛlyCCZ|{p}J}D"#,m_Iv._}|A,&"7"'K\2bbL,p:};#Qv::#p' ]kui^my 1ef""&Ȟ jTU{j[#K"Z"J!Q#]*}%v~F%V ~G d}2(8jG4J(E}$))j$`\X8F!T*:Eخi$RH/\C~QXٛmjd1CRvvGr$H ~|P_qݎ^;f1::vUqV༰:Ȟj{ԡRlب{aЋp|R{~?-sm8Ç>/O8э-6P^z!Q^,BJ٩mm \kmS RYj4;tpv\;.й{͛6-VmYDDYZ*<<}v_ݶU8|CؓBO)u}J+"/y>D~cbAwpb]Tx.*aGD^\'=RNz<.(pRJ@]*WWu+!#* ^WBɠUh_*4{)KCEc/CJo _776~֣fߥ C}|d}iEd?}"/DS֣JLL+5SmlV5%0ņIaB>+蘿5CTzm6FiOf͙K V2,{E\ H(a~^?ԕ{IZ׻Ʃjjm0cJ'Ƒ+J#Sr?~:ֵkZєCO)QQP[Sw$ JN;#$D}s8ez4Z2=U 2?x%kTׯ;b#`"1PFE jYKY \+PAU=R}KE_HSBOJG.Y&LLo\[p.-Fy˙˙LWvGU8җqA>G3_w:_RʣI*S␿1|B%E_FlZcXZ4UjTm[-F4cF-1jeO~x/BeRXğGޠ!tMߧ} TO}_ozcラ|ECtJS_|yҫ.C{4ڲʎ /T Т$h_'?jjɪL1c*b`_OZ Xʮ:mj2m4S'jU^)rJCCʟe_A`K8!j/kA{N̖xU7R}J̱cm[Yb1ԪN1jÆuxA666C?TNʎC9!i䳼I.TQm/A尐XTi`ujUC/rWh:C pGa|{@ڂ#䘱(WhlQxxɉF%iSZ!z 'xzzm֤y{, +#qu"_U_!q=^(e"2U+%*9ffk43I,H\W"в>t;b:|VJSR< Xkm(pU$Ƭl-c_lD_Y'M$?Tr'>IwQZ}u#jMcjT}9OU~Q@q)WI5SϹsWdb_S/{*)XI*ʫ$~9R>z"~*L:(j2hbd2>_8?y0V1|^ .8jĥ'_$;~QjʝښCDzmVZ%ryyJ'.>^e3(.|?WϷaUnsr?^wq}揍HWޫ~ݱfDI$I\W:m̖Z`EINw&A2j4+&$eIq9$bhX ]V #%K#K*d5eF!v*颶 حpNMZK.aSFR02tnemRťm$DF#5*R.%уC# QVMUguNeBĚ*D vJ+F+S)so窓VM+KAj$|— k.KDqQҬ%{W^lBƭkjmWuoj_pUH)R04M0Z+"D(BG rC֠8*>(ꗬN5cfkFAЖM*RKXadd.%KB[mVYV CMry% 365]N߿as1f,ŘF0ŘbY bYF Y4bWkUE)Ʉ`4a&fcYUv4Fp:MUvC 5Vx~JU."Gag/smI^gYȱ)jeaÈX,HJWb=nNοó~C\ګEeG{i/Gݶt㭷ICD_yws߷]>8[_*0j?zϘW}rdE~[D|yu^ Xd`2̆,D])>讶V|ەV kSXpN>yu^'tF@4jwuU^%%%%%%%%%%%%%%%%%%%%%%%%%%%&dY,K%dY,K%dY,K%dY,K%dY,K%dY,K%dY,K%dY+2̳,8f3RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRW[W,m,Xbŋ,X,XclTjbŋ,X,Xbبڋm,XV,jQbŋ,Xbŋ-XbŊرbŋ*ŋ,XbŋleP mSF*,X-%KbnHN8LSS2l62fQRZKIi-%TTTQQQQ[fTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTZj****al6,G.FڍFQj5FQmkFQj5F5hj5FQj5hj5FQj5mFQj55(5\jn,K%dY,K%dY-U.#SjQS d 9IP){^~?cնճmf?""""""""""""""""""""""""""""""""""""""""""""""""""""""""4QEQEQEQEb")""""""""""""""""""""""""""""""""#j5mPdVVv]~.9{ k؜9nKi۰L={¼j.;_>s1u~ ܼ*o9tHԽѶ7gN0%kZ0UPVT)&S0LS0L iRY!i [jd1Zg.\;Օae*.Uepd2|%,%CtJ;Qvy?p6[6 : (Q><܄HS 4ۚ7l7fݳLmTnN)J*Rs9^# 0, W WXv,a;QvqɅHɆ&VL222UYi,:\P&-S,bbd+&MWbpY0tN, '%psm)ʙR*Ԉ{%N.1,A= ,Ts(k*܎mEGVkcbUK/1h] K?0"|"OֵkZ'a:'Z* BV@9T$@^K,\\.,b,2X 88=|0mXc/#GLzCHI|cCm ;N85)j}uNpԲ}7>6sy ET6]!az(/b"ql͒eQm؎^Bb2м􊖇G{ {>QTx)VڮUsQEsYY-3\qq2m\0., BI UUP %'VWT ,Tֶo5GU7._{J#D24diVPiZbUFq , rq%pXTb#]s{ He(\i >p?5&"TT ~ Ge=YmllԭԠX1c)^jOqh :(U|){PC>eJq\MMUJӪtVN/ COG~ CT{#{_н/՚_ۊ9Ã2dsmpcRM-\M2-WM.N>l@*^Y:*_|K }(>H4? I_O8F_Oƿ{.?)>Ҿ~z-_wv¿g鋜_?rG)rKIaU}:BT§OHOΩj6 Պ$Y5U6eRʖ*5Xk6 i w;C'xğ OHMSFLFE]k(}u#(+$k$zOKJW,ø<5zҏAA@\>Z ¨@kkI |{=୓׎wdöik_@0uzd^0"(ڭu]ﵘfͷ);iw6]4w{zti PU7PT k/ݶ jzݴОP M)& ﷲ{tR_0APpۀpqzzd34U.yYlk{ I햛[{1<[5@JCģ Xuꑺ|x*MPAFV SNMuCDTQ H(uBU0{CgL! @5HH*i=Ph"4B"SPS@ 2H"hQԙz@BA LO(ш4jRDȚmMT&OҞ5@h~! JH@@L@#&! 2hچ~QC) C()o~o7آ[ׯ/^kUjc1?9sEEEEEEEEEEEEEEEEC_¿((m6o__wwmmͶ31momfcmmwwww6mmmm}o)^)'O>7;o^]XbUV?wc6}#)gYc1f3c1f3O,mKZּֿپ7oMޛ[zoM{\k]k^k_>#P-O~.j>oK?T;Week{IJzU/y7KY6RY9LXe=<̔ʕpS=|R++*^<6=S_E!z݁zi*P Px󎪀n:{dzntdžuD2ɸu>q~w(ӕ)M#OrS lxn<@K՛05R Kwv̒`՚)ڽ5~ewUR/얿˵>fb|+|>|_33|R/?ZH,[f/"-s^ 31Wϕ"%˵>fb|+|>|_33|R#/괼cfwO׭7}\}lccyVf%5ĵcqDg)q-zmyZޮ[ĩg~1vޞ:Jߴ.qx^zz{l{6u-O|6,^J9y M)w>e?|)RNUVl~~_Ѷ ,qg ] ꨽nY:(nY:(nY:(nY:(nY:(nY:(nY:(nY:(nY:(nY:.7$ɓ&L2dɓ&L2dɓ&L2dɓ&L<}?/ȟMPz}6mۿN <ίy:yW^s<@ y^tq333333333333333333{m=SU\mz6kmZnF'_|>}_N_<׿?~Uoo>9n;%ۢ.چ~'lO=*<'plI$I$I$I$$@@wׯ~} ]}~"";ϔ}WMIe}LB+_SWjjKr&d!웤}wk{e>=ݬ{#Fw~JD+DJ>giD{"=I$/Q}Ͽ~.s9Ig>_\G#ϜQ $q 1!lP0=DHb37dI$JmKRI-J$*@ԩKRI-J`P<@|KsP6IIwwwww> H;^R &=7o^s%wu,׻1fj[E1U"ķuJi]?.kvueA eio]WWR^߫{s7.ԺxJf1dec#6ёZ3,LeeML,*jfYfSS24ʖ1eeML,*kDj1c1c1cͦi??$Hܒw}w߯ߛmSyy盻UU6ljUMۙnuTm꩷UM$$SmJUTm꩷UM$$Sm[U?{I$$Hz̙I$I$I$IUU{|lyz߯wǹ߿I$I$I$I/wnt.YUmIMU6owv]U6oLL]=I$-u)UؤyMi\﷙$HI${YܓI$3333154{ni"ӛyY[+o2knnlkrV>?{r!!B!B!BޒI$I$I$sUʹedLnmnUWʪx$I$I$IN4ꦓ}Fs1D[[a/uI$I$I$K;}ݒI$I$I$q6f9nQ۶=/jRug/ \榛sSMXTW՚{I$I$I.I$I%wI$nI$:'wz,6YtwwO^eYe}}wwwwwwYeYe`ANI ^`?7w}~⯻u%_wSjjr*{>]}3}Co@pᲯk}񼪪8޿o^69U)!e:nuI9>ym٠RIZBE!6||H[G^ܘn6]f 33,327tan dwY-LpK%̻Ajfg[Y/&fen S3:y33.wFZw۾wS3 $+ $$<#rIHܒF7$$$nI#rIHܒF7$$$nI#rIHܒjAc# #<ҷJu9}>x-hhhzy)̱m m2 $$HI$$I $BI!$HI$$I $9&I $BI!$HI$$MDDDDDDDDDDDDDDᄐw}vw33.9%$fff\rKIq.9%$s2qۘ%vMػۃ8u[7bo$η3wWb۽:;fݷw.iwh]n\}lћvԹݣ7uv.ܹI߿DR#)DJ"}0|-UURU9UH^sFC:x?} !Α?(X12aBJ)+8 g3LL&p;=92P m"9LhJP,n< ̰C`!`)|,:iFOGsLJgUrft"pa)OVw|țghb3akXqCkX8c b+bD%V*Xb3a f6lFV"aKVbb#"͆l91H$F-Xs.Ó. f6dZ (==iҮGt-L2/bqYTt;Pt0,J f2#Y6M+&mӱ"k{J6$C5!4%f; )!ˮK]ys~EBc&LYPՉed2SEj(*XɌJCJ(,D?0/'>[~pӯ}ߐ?/\?^s<+3,̬̳22K2gVA4wLUdGtVA4wLUdGwUT[[7UTmU_~vp9[4 5]ŊU}Z|Xt2knYqθWq>bdV1⵳ 11W@pIeZ`^ cQõi8+paj꺵JQDAΝu͕_D|]痜se^^&?r>sh# )SZA߆:B2 (f?iEg/Ns޼yz(EbEэQE%QEQEQFM1FhQEQEQQEQdEQQEhQFQ`aa EEdfN4:vPd1["1d3]^ׇVIPBCχ8ܥ72̍Y#q 8Q(|vJPq[RTP(9h %Z BCP(9h %]Aջ%%A %Z BCPNqKdnpqՎE(|vJŇp_>_k-ξgQnN(^yw˻Т` `5`(5ݫR#DnrfcuA2,gPOy3y"y>yCc&0pst+ӄÜmXӖaL `XKUNvdq2aDsc)jBg᭭B:CRw\S/rˈ|˂wJ_5:/Dh/JvwUUUUUUUUUUUUs% =V_*Jջv_PSC˼t0 +,ˬ+&E B%KJZ-J#E;EDB%KKvoq0zv1zG.ff͛6 #>@Ddw/Lw盰7l^2`*IqIr $%:Pǰ)`;2DTǽQ ({+mo7`Z$jxqllp}_U1۬S牜J;`hX,%W l)/ ߥUyXt>݀t@hF*  A+jmwwu+$@00\X As:[zQU{їWQCG؏mHD~L~@#UΔߜUT:s>=UUymmIb] E\#ח7ndXĀ8wn~)5$ŵprxvp%FsywwhZ-I,Đ^J^Jyy97HV4I@ ޻"dpRxwwx#X,P3 XQ=2S>z9BLc&9g8::Ytnçy+@U2&eHAC{.'WٞtU0sp؊69U]v<,6PHL}{ۗ9T@@V Rw`<ý|& $ o}_yߖ&k)\,lVms$}׿y駯nސù}| o*n>OM@RN E\|? $]UYwp .XPlMOH1=\ß}}D.kz:t@𒪠EVUhκ]|G~ث^o#Q>9;|v.$`$U NJw8nsMcћQ7Y|!OU.e;E4RڙJ\}ǵevP70k6¢:{5Hꯚ/_=u]u]uw|Kw_DBCbI5a=yLzD"v7놟. w_`"JBY A$G l(6$X~ԾLK|p 8xrb_)>D"#E|6+|> )Ei{M9¯/9ەtHL#$ff;U]B.(]찪6גɶ=׵{%0~r|jWq:f `e]^[$*$]ȿ?3!UEU/`E~[rrk^;7&]$>Urʶq݅.84EE%jWx8r物}YَAL,[wvGRXʶWe}4s"àt&P {_5 U8 #%UN2 } B?A !0G _=+>er~CP1wwJsT-Th#"Kp>O <x>;O州5UwV[wutAѮ6t^ % :3OK[mm~"KBoUzWtHOUX%_60}̯S.ؐYwu_jhfC=n]WF~ßܺrUKvL]HDUo;" d>z\̠>}U_ݜsb\iwn& |ӿh_= % z(jj LV. 8 LYUhuw| ѹ>p]yy[-B˻UŷXaDM՗+"@4 "B1Nc-Ln5 1iu>6z].˪3 zfRu虴w9ffff[u+܌Ni.$8Uk$ yǚ쬞xiLuVU}-n!]]ʶ7``_بHTtu>ORjW>NJKP$/$5JVS333332㫍  ,,5bw{))6}UChH2RsT h |x7ҞnU~_ܽUUUUUNw'E]W`hH/VJ| "j /*G/!Tn0`,30uu|yE"gFb+I]{[#ϩ4e"hz{ r~ߟ?>='yi  UwUP||*߿~\ǒ8H }p7RK=ૠUVM@`fyf4'à@Tː0_߷$mZK_N&{U~3A z]g@ΕX2ts7/F@XR^R`2@UUV.TmIZbN_h|ɏq}BKnN$MQNľ@3cUܸ9l@AנK<4,`6'캺0|ԓNUTR@<VTPjH%OV4ѿ,l>` S sm䮿S=sltvU0*\I@Ȝ& ĺyKTKcMʗwtq\333v8ˎNb:<f0Ds\/rE#E³5Tmú|]Z\CTw.ms̹xgg*⣛$Xˑ75S6歅k;m9'rϲ1Hu%> 'ZbA_>kgvL+*ʪhLW:V"Hnp#_`ʰ|E6՝ "tUO@8mBx8ԸPyF"gM\H^'aLeLs/oQ{3$n m]wN ilHCi* ]]ĈIi/a"Er@OBYu[Qg6w=M=nx$RAw (I`[//G#i-W0 JI`X}f|MUUUUUP s332bvo}=zhZ4X@WWyy-▋ &"jK44v.v /(:jy1RlM^ޞm\ݢhZZFBt;$xH <&mTpcG1VL"rCo9TmUw\3Wc̻[}+:{"o\ەs.{lY~mN,^z;UUUUStUyԱ-JfEѠ@^^^fywX/01GW<+z5_-^.`qnpU}np俷GcCdg2K,ɉX"_'a:K]⼇^@G6 \$OK*p4 3333,1>~yuVT+.&ïwOVK=٧4k}^g+YoeSo3^,yuݹe9TEno34N۩Zlox\%3P02\wmxK=wڎzU>o;]v#mb]0%(JEr_J2&D@AReZp^xuWuiO\QDH*(LA>y90E'Ͷmfc Pt0fd܂D0X2Q R$$*D.4B 3.40̺BcMq۵*JKBJ,IG i%r%@G!DyH FAPcxĔru"(-π_Hahҁ8lDE!,DCx#(I`#2FPBJA\D.H"Ly$1%MіwN;Ѵmh1h6^r7__5s,+ CG'fuf "!("&u5m7NVnW~kߟ 4j64hiÜAv4δȳlE[˷&BlYznBK0WHTKܣ\햓/;~V3sw[ r$]_ߴ\ҧ,}}AJ䛯97o۲QCa%73#.fLWwv"{ւ?-Ny,l.]݁u~=!Le_ %?b` ˟b haڣZ_"4!DjEnߌ\TE 5oK]݂K.XKuwuuR%y.[eD϶8ā\H~}_Թ;ߜwyzh7U w-߮` $ }KKRH $T40 mFs\_}CP`#۝ * %%)yxR]]).[.).}SC+>A Jn逋[Y9iyIneyQJ)̙%ȂR,skڂr P~# ~)ϲ@ 󻟤kV@[^L qٔ$JƑFe %s촂J][E }j h`̪fp9<\V猪-*oqݼ,sGO:$`#Oy}1j} i>`9aWn#L1*dZTү%>Uf%޲\dTX&Kt8 N Cj]v.va.`½:`ҝ%y쬧/JL1SGnsSU&m1`Э%,&^ ?$W#YECWecGؾt2һ8luYI- X*jΘK%X3C6:ASөqU#*YdiUxyy&IRG)05fX/]sIytj'RK򤚪15(ʫC@L$ Z$fYJr *҂9r*K4>]vɒd&Id&Id&Id&Id&Id&Id8+1p320000jLZV2xGE]:Y,K#`MddmR1hՁjm%M9#%pjTm-"())))))).@]h+JY*K&dY,MK%dY)-jebl 3MY)ɴ%IRTlED[lE[lE[lE[[lE[lE[m\+cElhh4VƊ4VƊ[+cElh4V*0tiXΝ[ 9 %: g LkgŰYӠ&pl8ql*0t4 $a[ 9 %: g v3¬NC gNC-39ɭ˄+6%lRpc%2Xc%2Xc%2Xc%2Xc%,D[k,8bUfiRVQfQfQfQfdcj؈"""""""""""""""""&Ii4M&Ii4M&IdF $ȉ"dDD1BhE#A#A#Adm5m]$Wre(EYEX Y[j-EjՊhєG!:U(ʣɡ^'΅}m3 Vi`eVLj6emmH1aR2ZRֵ_\jj XkXrnmp.nsse6dl،͔ZXKb2C6QiclFHf-,m E!(miMiMiMiMiMiMiMiMiMiMbUUUU@*m[tjUK,Xbŋ,XbŋO6 K\s+.es%̮d~?mEc;ߦ~~_UU UX *0xo-_*_MK*~ڝh_ +Bh_+BR_](zSWznWU_ }u/czZc2{O>~uWk2řḇfXZelD.TjS &)?g)==9{RH_>Wϟ>|cޚH|0~fWmL˕)Oo^{._ =jվXˎ~~{{={_!#XmV:NS[ alU01l|jƃxo qN>[Ux};.9uLS>?// w0$b"1mY,U  Q0V*1XE0**8Y0ȑQEb$hXUVÏv ?ܿ}LzMʑ˗e&{ ^Bk5JM'3+{ث\_ '_1:Z۞ZY5Y5MdMdMdMdL,,,cdثb*ثclV-UTf lFlFlFUTU'}$ƒ}rK\Ut\m*:99rw.-Ke/D$WuSN듒_e4hѣF4hѣF4hѣE@چj l6چԫb\ky}l#d9T.Pmllے WtP>3mΩ#Y7x[\W8bf)e9T 2Dc1V6Ќbs' 3LXsWiVh,i &dS&ENl6&#[U`Mv*08Ɂkh[#)ơ))9YqN2FS(2r9\fS}?$E 9_G!v>>Mw4}~ G8`Ũj\Դe-FZ ,,R2FHۤUOm .G,]$rQyv2܆P "- 3- - -X E[a6bmX^qCCޏO/cK{LI?a#{d?)^kվR[l[VM,%?~J4έ}-_SQrRi~#T~'Rq/֮EzzOS::/ZQk>`[zmZڵkj)zjl6:vRvmn 2yN5WjjsӿP @^\1O\{} OgX)pR1hE,\,=bb! ,٭dLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLIdLL)RR-t((((6667^Eαљљсo<7jst@h6" &@h6" &@h6" &@h6" &@h6" &,IP"M"L4D lf']L̬[J[k?T7TXzI>>{K(f HUPmm|Jҿ) Bhz*OͶͶmb1٭Uv6K'Q/ʯt-+NA+į=!qp.Gr_Qʖi_5ta;R}kw?os R9~V{?8Eecf]Smcccgq7ҺII_=M[иaFCM<| gm6Cmjm֌m!:#㎪BtGTc: uR\`hP`_Y6}mݷvmݷv<=xu]uG]*z%U_@MɂK˜^+4)U)D/3v]J%Z2[F 3-"lL-4eʑi5ʪ>y'8NȜ+>D䛥q^p>f3>e_:;z31ĩBTVȻ5nnMznL3$Y5_j/Inn#MjFuVպ[`"inn66 f KI+B.ڸ$-PH""!!" HH""!!" P%+b-.C;$RKPQK_S#_$C|RG I4WqU'ʸFV,'ﬣVKV# ҫ*Sv3=0z~UUW9s\^C(Uiұ22N%8fMV$<}!2j|tOT|Օ5,jU6mt+. FS)e2LE-EҍFhVh4Y-#TLQKR MC?#=$J*_?qCA> 쏠w&fffffff|ӵpKUWp8APk APTs9+)~~}\PMQC_xOh VG5N\8F"-d>Ģl;~;!e5hZST,C ?:)N`3SJK=JW =Ge,Δ@UZk%GʇUSM#p  <Pv_X#Q6I)'s'+_DDDDDDDDDDDDEڍjMmCY d5CZ.QPu(t)cov\PA.ԥ "»G]QZD v]OxJN⽅$>%=җ>REZd_dGQ׊]v0};R>MYe:R*뮺st^S0wGQnڦjn0k-ZShP=C=k3]QEG}QQQQQ\qŰ\~<9o=wxxxxtןȋ5UT5V9x&HLYx&<ɏ32c̘3&<ɏ32eUdwWfdǙ2I&Kuy2^L(Ҍ+-+ջwC[͙5fuߐE]EE.H/a/Ef)m+и'+A]K]ʑ"w2ʤ9MAP"Beh^Q8yjy WhaOy)Q,ԗUQ蒕EUQz/EpԀ\v=TJ$PtrTp{ (,$PLl q{;|̬ͽ杣E;Gl:vt[{[{[{[yYyYybέݾj_X{U|{fRZۚ<{+OXy  :ޞK[} lשXGjOth)JOOa)}D?U _\TFD>NsD|H֥=GPȤ&P8p ?5fXO}`]b}ꏰ*OBO^H~yWT{w+аHx ^{C??oj(}yC;@)}Ov^=HE{+P8_ʾm m5NmrPdm T/'"s T/8V_< A_G$ҋWԃE)ȧ=ǽE*NʷSB{ SDrJhʎ"(Y+(ŐőM䭑:rJڧP=?"ǚO0WD) PKT/`A]I,1|1\$p{G!ء'R!{ )~Rf+OBf'Αj#W( w__(0QGWJA^a%>2U</{5?lٳh2?p}>=+"xTOr* ^j,DO?:U'iYٺ8%ҧ #I>=^e+%S??^>_?uӜ_)>Jh?hD7۪UVc0Z({CWrQ(B=R!W)Y)*?fʭ_ND_U4^P ܿ32m4)tvmXUK>WeB!(/eXSJ~TH -M&–6,Ajmmy#w o󿈏QQ*^=򫺿eU> S .^! H*,V!|J;R}H/_H+ʁy,)R]^:9A]U`9UՕ"=G~PS-Vyrm]R"d\蜨ѱܨWWE*avGj 0?t**)#4EAQPTTؚd7dqYefYcrF >خYaЮF<8T98h qDd!\3kmi롗UC5lٙ1FZ>x2jG()hV~\Wעz@~a\8[6YppJm}@e JSFUal6 h䢱Ʃ~^bz}jvW)­ؑ] UW򨾄vH#ɨa$T_U~t(ȶJG0ڪdC2TQ5HA} >iz>\K/O@c>OZF#G$CA;%r)WƄU"ҲO@*)؞t?) ɴoWeO'*tO^<~o`y-*t2@t=EzI|R{$R>=D:k& snUDT""5g[0Kū, ,R*Ƙ䜜4Ƙh-1M14214ƘcLSLT\90Ҵ-81 1TLF[`vQkq3h겺&VAUҸ9hhc )ZYZ,F+\KtG:"""HJHJHb"""""%,ERDQ$Q2DIDDDDDE#SmV"JJJ"J"$""""$"""""""$""$"""""ڪ\F25X1c((:8.Qи%0C8*f±&( jV=D}~ayy_/5Ah2I$I/}uZ/HfQFXEG<>#0ǩJ5ZGE# j|i=iͶKOp,| @mw0A{п du(~`I_P%Zkoz~ zWΒ{>*| SHuB'RIENq32-l&ҍ07M6pNJO]D\>>q)0ja`¨Ԩ`! "d&UjZ5m?lVlVl|tC2L66ll%ҡ2).桩E2djeZ  ~mr'9<;é'Tt] A S\>~$Ò^QR}P]~;mm~zWΫS@yWVUZvTV%&D=m-j-.+쁀Q=?31fWm˔K%d2̳,ˊeP%dY,K%dY,j].mV1V1V1V5 qVif`Km:cgLl鍝0dVvh 5Fj3Qf5Fj3Qf5Fj:\ikbE,X+bŋ,X[1 [-[Uj-\p\rfYik'frpi4ܵkIi4ik3L4ÚiTTTT[Rm"6 l99p-(-bҀ)i&Fuhچ5mj5qjs`\ 5969[F5Ѩj.c. FrNR`Hd8RxD|~)r[_jj߇"""""""""""""""""""""""""""""")1c1c1b"""""""""""""""""1F1cƶ+MU{~[~>~Gɓ*dp8?Pv]ֈn{gBI!$03 03 ÜӎRƵePZZpl8{t|z~gPy>LqsqAE=.mmž QQ+t۟80H˶7( " @mZ&Oɓw33w[K2\)EYS a UChF'C&82xNdw/C־STxV.6Md6Md6Md6Md6Md1Ė[Im%Țj`hl aT!z/v;udUUUUUOvWjZ ng78H8Śm rokV5(|wTN+ei\%j#ג Iܒ +E:#,2G:E;U$}*Դ 2S' ^u |!UоvlJ FJV` L HXGO`oEvQ.-&F88 -TATQ䁡J0G mO/έzv`^ɛh>KtNTj sb/EKIJ5$d5pp!~SE|`>}%<@X{觚JWKR|!](p}+C%4SZ:sW?:X?U)>hPpF*U4 ?\}=!>%?X|}i?*~R^P*xq\쥔?Z?:=I Pd}dW͠o֗U/vK~k ZOmw)U֝W +B)~C= jUͺ۰Uي1c1c1cœ1c35%c1c1c1c%c1c1c+n\8ٳ8\ R'nٴ؝ vK%2X2Y,c1c%c1c11c%c1c4wmfOU=jފj! vRhq%?1AY&SYb_@Qt?п`^|^׿[X1af͛6lپJ)~??o$I I$nI$7wtI$$I I$I$@ww@$I $IU=z$~jY|_Ws٪+:uӝj-0-L.ܴ-L.ܴ-L.ܿ ŅQTe9[(;:XC<8볈dvGxʇ~-mՈ $ 1]A]qhhq-1և_m YXsq=hx#/ 48->‰k!YNVߟ>u|FuCl_.viGqVvg]X^?{?^|S oPo%\Pdy{{eI #|||4 jt搼f2D~ Ѥ%_T%?=2/%ki v}> Ѥ%I3a?7vs'm`ZWӹPP_Myk6&/߰)$%_S~;g} m!ks!*mb6ş;vB׷_NrLo諸_Im~0P$'_FĚB_ޣ7HؒRFĚBWQ SClIPEw`bMU!+$TQ8̸9i;Q&tF PT*Q](ؓUHJ:#thm*(lI%uCT46ĕ Wv 6$R!bJJ+j ]GDn i;uG#59bJJ+j ]GDn sU77:\k4Ηv 6$R!bJJ+j ]GDn %B݂5T7HjؒRFĚBWQ5CC|Ӿ\q;s]sq.s:ww'28qSU~vW^s<@ y^y</9ux <ίy:yW^s{ގ_7A{SI ?PrHZ>(/Ͼzԟ߳|{罹o9{ݟJ>B >|ϝ@~@~7w43@~_=7/~2\2yrfoy9TT_Ͽ=w߭Oy~{[_~K>~>}{m}}/}_7o3~(}smo\}>2vnʫ>{3>]U|4,?oEzsn^qnꮫ{=[Ě( }Rjv@"޾>_[+C??Qg}zL}>vU (&N>J⮾~~ϥqM]߽,k@i=@vHV|4PnmI AM$,fPRT-~Ldec#+XFV22deldec#+XFV22JfYfSS24ʚYT̲2ei53,LeeML,*jfYfSS24ʚYLjfYfSS24ʚYT̲2ei53,L@! B|>?yY1 !B6ߗchQfdH3%Β@IfmnIfZK$66()>'s3ݑ6.ve]8LeH@Y_tu`$5 tuv,]FNzl%i.K3q, ,/IIfm̀}ͦ̒gv ./̶/̙ڵB2%ylo0;^vQ$w&35aשuE ,[0%Kh.1)%%I ,/IIfK2Zp" $٦4MB6:D(!HBn&kK3wh.$-%@YK2i!HBn*mGIfnZ ⮒Z<]kCε720ʫK̴ o[IB6[='vMKс7ۼK3^OV4M4d#mvlIfn#!B6V|'4"@fZ7IeΈYW رoӪT+oB54];9N!BBq7XIfl{uԝAY|ber/RvF{5󝝽# 뼊0YﹴY IfjsB! Cm6iL_\2|wY@N}$~_DDDDDDDDm]W~ukR{h2 mZ&FٷjИHfBa DmxV mZ&FٷjИHfBa DmxV mZ&FٷjИHl70p&FYjИHl70Ca^ہ4naW6M$K/urӫ-:rӫ-:rӫ-:rӫ-:rӫ-:rӫ-:rӫ-:rӫ-:me$I$IU^QDQEQO\QESޫMڽ$$mUU^CUTf^wyBFUQ{: UUFew{Wꪸ>$$mUU^CUTf^wyBFUQ{: UUFew{Wꪸ>$$mUU^CUTf^wyBFUQ{: UUFew{Wꪸ>$$mUU^CUTf^wyBFUQ{: UT{{n==jÙMMMM----6`I$Km$.9TBIHzrOz%Г0]֩n03Z3j/3٘(LwZfU&`Ve{360]֫2= ƻVe{360]֫2=EpE.UY *LwZf]0Tn0+,wZʢf vn{3%$Xwuf:+0Tss٘f7ٻ|U:OSrIT#젿b0U쟉|??]Тs .˰.ĥ :BWw(V ]cn@;)BPtK[JP+uwrnPTwev]wev]wev]wev]wev]wev]wbRJtVY c*˹BWw(V.)B@;)BPtK %vݗ`]vݗ`]ؕ$]`]v݉JuwrnhH ݀˰.DA.ݺK-unNLsmEBB@K)BPէv]$݈H:hHH v%(QՈv]wev]weܡGWcXle! %vݛx$I"M$m1rI$ m#m$6mm$I$I$I:1$JI$Im$II$IrI$I$1 BD! RFܒIRF1I$I$Ir$mT_ `^snx 33 LJ s% ]C!C톆!p!5*WT\!茎8!mm$I $$|?xdf<Nj1s=R$*coDǩ,ku^te։];nZԯYW%Q|+=ɚZc}Ō9Wf܋(XNώ)R8qH#G)R8qH#G[Hg5xf6wj^F{ocq48kHPz̏m㮺 du<3=C=Qhq UUU[kUɦ U'"dViBI%Ъ>$~tONI|fl3IT:l]1YRn7Zkwe7HAVr5n,p< ٔU,eyWo-x9VUۜ9sI$|HII$8I$I&PUFn|G)$ "Û,P(P$s#1:#7isC4:!Mt϶U҈OLP@"ܴQ_;;Ny@e//;]'PC;:CCr;]îw]svw]u|aK믟G^J]Õ߷L@}ùu#s;CCF.\!PhvupEOQW7×s7篤>4;CvZCǎhw/ Hhux9 +a@*c ( .muC!>u@gmOρ@eP;}tMþpᄀu:}Dx]s}D>"""""""+?du7ﶀ( WqGw@a@]i_>}Ïpgs^OҀ@w鹍@9sWVjI$]%GP~|DJ26J};hYAvW@}@cfKaJ\/ -o_ ͔B/.yuKߨ}R(kAN mQE@]ʡypp:}]߻s̾x}>|@z .P.\;w;xa2b;ns1!)U_22!iKϯ$FmJW|,ϟ=VWQvI]5AŜ4 (+ݴt J A( I$I$(,(,(,(uC;Cx<{~]n]IaA(59۬Y#er*UN{͖ԣټw rVcԌ' ncd^JKFr ~$3xkk5wͻwwwwwww@6Uʵwr]nfdWw*ʵwr]ܫWw*ʵwp-]ܫWw*wp-].A9Zp{ջNwk{W]t =e^:>R|{غ1 4FImPOHQР8}πsQ_( {{sٯhi*(OA 2I$ oP=%P͞uP;m$wr'|2*Luw}CޒHۄI$ $meUPQG|+㒤9Sﺍ*(BHoJDqaURGMU|b!w{w|ݙE#0(-4ہDi[ (!G_*ay^>`p^"Imm'0W;m$ST]}_;]{ՏҀh ʪ]p-4nU8 $*I p"| GmW>sMv"*@(I :W}wWvVe%IIQICr{? $HI$m6oϟ=~Gk)4d>P)_ʭu"*ސt &&LqJ2 Gvp9 (? ʢQF6PI+ {z){|ﻋ=yV77ڝT+ٵw6[]%y Z]&I/*SKj7-lo~}Zֈ!!!!!!!!vI$I$I$I&]2I$I$I$B(&{|9罻Ϣv'} :뮔\ZtuꋮSB(J*#(*Is>jD ";E|PT*8imMsEQJX@2Qv.@|*7aQƛ*:"i$r)@E'8Pv*}s}|=*ʹ߀!7};yPW%*|sNt"FE#*9$tT(TN$sfVw3sU&2wWUQ[mI$m¨*Cּw7wo^vV criL67vUtBtLc:士2]˶mlcTQHP/8qTT@ۧ$'*s4klYnV1e^CՈd*~4:]ܿ?_d $HFۗu@iT֘UQN2\6#;2گn -8UM/g{X$*I%ʒIr\$*I%ʒIr\$*I%ʒIr\$*I%ʒIr]=v0]Èt=C:'{xyyyGdr$ۃkwwuIۼ{ǫ{/=]$K*WUozU g楻y)u2-LM*kOrߩUVws34iB;PS#G)R8qH#G)R8qH( @0 j{PS@efk6Hs9>rh;[%-8ȾMMZϞ>w^"/r3MڵZ\T8҈mMmLM-TX'k Ng.Ywwwx^W._@TeU\n*g7{35CM6|( "m]v 9ڪ ]!' ;sOuw&O&Ut8 ~UAZ4H=;zvYe2vW9ÕPTI8UmU;C~{ywEtmmTD%=o=8SO$z!{OW)dqH6$Uյo[|qJTJ篞>zϞwww{\ڱ4 m }wp +-{[o^|@JsMkqffVYwqZ,gN\=m HI$*^[J R5{s\cFu]_MyWc 7gsįMbАb#6竴g}wok)^YV(P9@`PZ\I$ G$I$5I$mm$ۦx;7{q|ҀwcNJ79i;=M^d*[tbJI`z.N lJNZ.̬0CmqH#G)R8qH#G)R8Tr"<ڠ_Uɾrה1Ŕe J*]w@\( y€%W7>ڝxmQwD20**66UT~D #s9g({m@~( w@Js ~~X?CssIH4mm6W -Z|h woh@;x6hlkŵgz2*E ѵAN'p PF imƆ~ƒ{}˾s{CM 44Zt14:MtY@vr+_-׾ I RBI(@}( @]V]$B8O}Rߛ};mo4l j;.˜+LCH8_Ϸe}/<@mUMh V*AMy0>1 0hs!mPR95h%TFdL*뭺3!6U;.(~IU._7毻tR ( "u̜;wX3uW72sy8˜>s_}ChHHӛ66=}dW{ޯ|_ן}K>|~}ze@f M'׼v-&˔ڼ^Npr=nx{_>u]彷KIo| ҅{ @(%I$I$B(!@r+Wzm[յ=@$I$I-^H9M:R~ts/5!lّZL*㭔^q.쮼ה-40ξ%rMQݽY/xswΩ׬~7cˆ#RąV*(Zj嫻Zj嫻Zj嫻Zj嫻Zﺒ@s=z߮v6s{׼9` / Im;v:e0޿ws:saVPI*)U \ޒ wwWwJ&NF6"PM$sxVE}w}}xq)* l}ڐLwR_Ό E 7}޾}w]߻W>$i*Bo7J=ZRg3fE$%E$MLnV+WOh AAw2}羞( I%BI$^ Չ~os)10eԎi$3J\neuwI%mi$t^v5]yw/s]jM$I$ݼ~KšWtm ~]@e Tk 9xtpp6t ت1$/" S ŋ.EBPlFfw4:ZC!@] Lw^IzW{|溪]n:feٛǫiKd $*d/{rWn]-T2Dl]PюeևI//+9w˖~""""""""3Uݪ;*)Clea=׽jBB@%I% J( $˿o=[X:Fq{uw=~lIP%HBH]j=ߞׯ=Klg}e<yCy/g>usAskRR@j; HI$/@~ܪSeeogy8z8H\&"o *O8;"Im6鴒}*"ifrnI*'}P^|(:#R7TZS$#DN]9U(]}ҀaH`"Q |_E3o6j44$%,H,*MaQF̼EШ xFezWǻUW9Imm6z{Mm޶o[oi]ݼmm6z{Mm޶o[m!h{=0;@t$YjTUHW9<:}w}~R+ͦIҰxoss=4Wt՛'f{4(M1EWaQ#n:z._e̠9tJ۾(Z11)9KHc1sY쫘rVCnsq4 ZWb z>!%@ $Q(i/wvbT4 P n Ԓ15.GI.q=yǸrq -jZ1s* *BE m+&6ѭrhk[&4;[&ɲejd6Ns6Kim-jm-tlhZ46194bSE5}_J T?bWE˜>z&l[Jl>V9Mlf|##BTIhTOhI~cY?{ggWt[[4ٻJtq8ug>dr3xL% %F>Pay>]p9l9|#G|GuNdVɲlH}ǧTI/` (YTCHJj-R eES }"*} Q>b)k X-`Zk!Zk$_5P_%YE§bb榦F*C!ԥU1YVjmWg Qa" F1I)))))))))))))))).KTZk5mMMQT2*J*J ]֧kAˌ.ggSL­eŶvjZvu:],*˗u٩k-tvYqm]N2K eu٩k-tvYqm]N2K eu٩k-tvYqm]N2K eu٩k-t.\[mfgk 46ێfggSLʗmԵuireˋmԵuiYR]N2.]ʗmԵuirTmfgg8wKL˗tvYqmnt)ѣn222222222222-%diudaEF20dm&hM 4&К `bńHd*@AIeQXC"4KC?UFPѣm6Ffc1cI$I$I$I$MYj5Kjּ6yDDDDDDDFչlFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFHZerIv .evK%]v .lWإ_V%"|\(_~$Q-(T? ꋪ.Wx'ܐxx嬶ZY,e2řḇfX,YfX,Y,e3FݫktQhj-WkF0a3*S5ԕ"QQTEITԕ)(*"IELS5XRԕ)%3QA%I%QPTE EL$(ĔT%4%ITE EDQQTcIRU$QQTa5E3QBQPT%3QBQSRUQX%EbY*UV+XV+ITQZ)*bXV+lbZ)*bV++EcBY,FA,c,b6Jlc1i-eT[dKim¶MaZj&+a[RlIm&bfU}M-p)\qzv]]~_,mnfܲM^7r6Yz/TۛeHW.n嗪mܲM^7rAܲM^7r6Yx5\^" }p3^]upg:+su{1a6ślbͶ1fmY,cm6ślbͶ1fIq6ظ㎹quW!*mQ!HCG_N>s \ 'ac,qp7\9By.k0mrp|8ͮNyXo68>s \ "h(}oZ$$I@ @kT$$@0@ m֭_mVDP? CH_*h6ڃj 6ڃj 6UmEPmAʎ;aE_  /!?Y,hpRE.#(AAHP Pچ6 mCjPچ6 lUV蹈؍؍؍؍؍؍؍؍/ !/!ҋ!!pC? Sr/ۨl6چj l6چj l6TV*6ڢ6چj*ꪮCBIA_MotTۅ+!mʋc*_ΐ}!_i!X,U+QER}r(֪U뱶,ڛdRE5Lj֯mV%jejke}ʹYk*"RJIHJD!R!B!B!B"R!B)!BwvmI H H~mߛK%cY1c1&1c1cœ1&1c1å.Y1ffjRI$)I$I$I$$I$I$I$I)I$I$$I$iCU$V^UgFKhͶ[|Yz<p!!!wC!S!!!!P9hr!rEB\8Q|~\>C1oQp9C<Ô\> Ϧ[}_o_>C*BC'*?ļr8rp?,?hl6—|[t~zJj SU!I%,_5+ <ÕCRAU/?*A|E?}ĕIz/Qf!eLYXƇ*H2A—!H~ d?D?ΠOt=H jq"8%DzeSJFWe^egUʖUՕvʾ U慨ZQa|8K)IxH>/T/QOxqTI $KBZ /j"?L?Dt?:|9 $I$I$IH?H?ʲ*(PB (P (P(P*VBJT(T(PB (PB ̲~yQ}Q %^_| $URD=^a ޏ4~1J!%9EҊGHh~EKr/Y d5CY d5CY d5CY d5CZE_$KuA8}t_JHEP;DH8R:"9E܂|ᨿL4{Q~S=t:')$I$I$I$k$I$I$I$I/綫y~s{F*U1TbQF*MՊѹp9ˁ. %z֖Ffљe5S52h+Ma5E EFSXME3XMa5L6FM&ѓhh̴fZ3-Fe2Ye-e5EFM)V2f5&ђљh3$ͣ3h5&Q3-%IhщKEFZ3ME3QFfJZ*4bњj(fZ3-Fbj(Z*4bљhfު=Cc0w/D!B!B+kmQvjIHW!Ou&PMS OIU(}Q&Dz[ڽ˜"-En۲ʽ&RnEQEQEQE9jժ}DDDDLٳf͛|# $vC^yGqRu"_ArI<($C?U eDA_ h{Q~H~~|E]!9 $I$I$K栞_bAH;!*V +ܥ_mUNC8CAW~JRI$I$I$I$KZ~{*a,* `W(Pj_URD~t?w>. vW$Ae-*C| b(8aaXސx<{ʣ+Q{CQ{JUZ@4:H8~ԃhx{)+ʈ(%#` zd?:A}8"R_x!CR/B*~CEڋPE!z_*j<WDDDDAbB)} WAC!QEQFoVk[VX"0,_)UJz>ԫ"EOH?C!I}3~zlc1c1 %R~i*@Q C$(|UmWmZ=?N_ү@)/:H|)~%B ~"?$!~(~ RZ)GO_؇*$?$;Oh_4!VWP9ZZXu*.!j._Tr$Tw(( Ƥ(PA !B!B!B!B!B!B!B(B!ZWDQEjZER)%dY,K%dYef8US $hUQhJ!)<gW9.Fr6 8\m#npsۜ.Fr6 8\m"۪~5_6j41 _:BS${EJWC+|1 ꃵ/!/̔P~ ?C)l6 al6 alZE$DU*_̐vuQ"S(~~i'_(aRZUOQ|Q~JYuTzR {Q?* 8CrTI%% ~"D?ZֽZ_ڵ]~m= B%Qx)}+8ٴDDDDDDDDDDDAm[X'ȑZ)K)w!b8PU8Rm{mmW-Wv'P$Ol@5*)K$I$I$I$Kk|[ij[m[;|CQh~%#UBj?!s[m=TCC_T^:յVT6+a[[[lmkFqDDC3c0]Dx!*#1 C0CBzZ2)쇴QʟlWꊫ|On٭!T_}ʓJZ*r_[VT R'ʕ?R>DgYʬb3ʬb3ʬb3ʬb3ʬaZpjԭv5jV\,b3ʬb3ʬb3kRթZpjԭv5jV\+] hnѝ3Fvۣ;tgnѝ3Fw3FvVinpT0-UXmX \nʧvnU;rݛNܪwfS7*ٹTʧvnU.-rݛNܪwfS7*وeeupjBVBU|/c1c1E쎑GtHh_ިA~Gfafafafafafafaf|CCҠ}//$i#8qCSA?")}vm[kkk?-SUW@@ km\,VU?rx)%ګTU_dMfl]~IEBł|y|{X<G_"J7֒fS9T8/`ٱ*Վ\>p Sܻ|_O{aNFO @QCoRUKoV)ܔg&#s>7U|}0ԕ:;l]n'r4|%RB Cp0zGy]k{p4SA@ ph (HՁ@H"I5/xAǨU*5F44@ 0HRjP 4$(mP  =THPe hdh%(@4&䌚!I4U6P@+).Q z))/o|=]zs䠊jV1c1c$HIϟ?}}9UUUU^UjUUU^UnUUU_ys9$I? BG? je52KLfSS)ԿUޮEljt:G.\9\n#W#TYQrE-) !T\QvH;jULJ(^?QٿlnƼ)mnUzxzWD!GϟhqH$`{>|J{7RG߂$X~30uWGB$X:/| [4}{}O/$N~,[I0DPyq|&+_B N>Λ_~H':Xxϼ~^Kʹh(HR;yWߘp A _4t 6'Q ;=`Љ,r>4|Abq{ayjfisim[>Y3^}}_03i>=B$XL?~x6 i$ Eoy$X|W9^~{g~eyߎg̯Ρl4[sU}Ϝ:ֺ~_~Up|Nic?Ãk5xH1#帼nzeɟ3ϷƮ125SJ }| A98%~4{ 7|#? "5W/a~a$s>_iQ {ks+rgNsw|o5u;:wk{|>+G#599 3}F% BHp,)9l\\\k4Ν:#ˍqs$(Lư4p"@fHiQ `iaD$4Ν:#ˍqsp- G0f5#.s:ww'28u:#&cXXB8 Ip$);s]sq.s:wt뜎6G{ks.5rgNsuueƸCL}Ӯr8̸9i;uG#4etD4κ~~~:yWy</9ux <ίy:yW^s<@ y^y</9ux <ίy:yW^smUH(((, ܄`1PrB{A{h2 pu!|:þQvÈ9;AAAAAw =2;7ptzC`z0`` (PA4l:x8P~d>$}=|'.|ߟ7tԮy3i+ 5VYw[A5s=~~&"(DG}nh5,V A\~~DG{߃D>~{= 9s9}U^+h>`y׹s~>o7;Í&w; H,3|v>MDpƪ7lDGjlDGc`6Dv> lDGc`7G}"#>DGx/{C Ľ|wt7û(=} .bk"#jͻk }[> P=~s\{ξ~b~DD.w̱BP#{2ﻀ"#1?OӾtVYZ,̯r2*.+~*)D֖ dec#+XFV22ddёdec#+X3,LeeML,*jfYfSS24ʚYT̲2ei53,L)eeM6fYfSS24ʚYT̲2eeYR(6?_2\""" UP[~([j!UT $%{Er@&pDjݹy@+{{n_WM.nnffnU@*EHg=]UE"];+wuT UP&BdUdۻT [ @6wUd=Un=P&{ۙ#dzR"""""""5]zuu޾Ftdl(:m( [6єlkht65ek`:2 cm@ZƱ-lCcXFPm%`= 2 cm@ZƱm@Zdl(:%aEg58VH+$N' d²DY"p8VH+$N' d²DY"I$I$H꺽*((1ownCC啡>!~I<8<.>=ѯBB(0^saB,G@Az t1T= P2A0g" #ZZƮq8uCF " L@ Rm{mm׶^o϶~ڳ:~dyIJRTJJJJJJJo9sZ^Um Wj9s?}WUWw?WDyIٻBI>mKh7$Ajy@/s32z2,ٙ_fedY38 UȲffq~Ij[DѾ${7}I'ͩm`vfgAjy@/s32z2,ٙ_fedY38 UȲffq~יd733-W3"nffZ^fE;33 ̵^̋ vfgA$6MtM:|xz||@n-MMMMhhhip$`ο޷im6~U&gTURK8IfY3[ɽ\q$\Ms_ZZZZZZZZZZUUUUUӟOq)mJFVĦnq)mJfwĦnq)mJfw۸ն%3umL[nS7V۸ն%0$I-Mjlƌ01DZ9 CC8C E+\  :T\U[_U_}C՛j_@r(E1ȠF9"5 &0#pf@\[8@L8a0B8@p`L 8a17"d@r(E1ȠF9"P6@ڒEjI"P#L90ɂ "0#nE1ȠMC 7"5 &0!rnE1ȠF9"S"DZRHF9"5 & r(E1ȠA2A!&& b2AP&0DZRHA2AP&@r(E1ȠF9 a3 .@-nE1ȠF91ȠF9hb[]zuvڕ;jJ)`cQn쪛U4hU=SUNSUMU:Ȉ"2z*=hFTjSTZe EҪjUMQjT\ށuV1c1{mmKUDZmEvNTTU=S*^͌c11I:TVPU;`*.S(_WH}g}g^G׳i*ETtm"t8/\ZPUo@vmmmmmmm޵uh4H:@Azvwss8$y$mx߁YX}OvwwVNZs৳wS5{מwKn5Ɲwwz6Ozg7]UV?ڑaڸh;$I _?=w-[Lm2ei#4)-[Lm2;2@DF+\=~p{3km-,UW8{怂u}5ـ"nb87 3!-X&X--<X^swaq悫VndWYt1y1 J<ߌC !݃ZC}d>X[%\ ^^>HK =<~m[m:>^LO2[zgnV;߯Oawgk~n/zw/h/ʭz2{}naI:;FĐ30/5mmmmn#mmm>R4 g>w{槶If  lPPf 4H?VQPnE!^Lܮ9 ??)^A__ǾoyQh3?Ptn Po{gI*,*uAI[%KZr ZΩwH5SV 7&d{~>1oZkuw9}E̙ Xb77H$)*Ơ ,IV Hm&bH5la3: mUUD? }w]^i#`AM7`AWZ]A4u[nA5:JA:po+i{zml"""""6ojfwNl?p~g5hZ_|kk$f#3Aq)j?>wx^{=<b3110Zd7uj[32f#5>CPL޺ߝg<ρ|xk[dh6 Ab \Ff$f# oqx}w}h=FZ\fb2"7ՐdHMU|g<[ p}C}uHuCv7Ѹ5n pm%ktN 8dO?~k㮿zֿ9}k6Ym-U*##rNn7l}ryߞGSl4hѨjkZֵlA9p{ֻ/x$$mmmmmm6m! ?}{W~sVjR3`/ߏ׽|D$#3rlTkQ9UN(%Gg܇ְ ƕusW5;D]A3ܨ78s啭$fba-pY~`y<_?.~P~Ă""h+ۭu`qϚ{ӄNN `@f9&z_sW}ξZb-ޮW5ujtϞ|{޹6 FH=B!5}" d`޽]sW~uǯΟ=jrp>y}\zj|s=sF-V :|`6}޽{~u[KiT#Txuxߏ5};o8w<TQ#{@^::I9wz6G} 0 0 0 0 0 0ۧwwnݨ L{psn A;Ptp8ava\"A;fafu$y@׺I$$za$4-Ib$H ~滃Iܜͳ ;[f0>*sټkPF{ @c/xˀ|m2ei-[Lm2ei-[L`:|{H$H$mJl4I) #49NywB8[N]̙ ϿzKQ\y%nFE,` fdfdeޕ]+w{ {=X2uN Bhcv5.^=}z=O j 2\1u{ynJJE[Lc8ңMeYxс.bK6h$-9O<*,-fw~{ϯ~s]X $Mmhޏec_>\5Yb!$Qiǃy}>}u,`jMix3=ܸ9nscߗIO4AmB xGB%AD*&BDyHf }01:6bL+ػҹ7{W8m窱W{6*u}Vz76->kIwoU[ﻸ<۹D[S֙m2ei-[Lm2ei-[O 2GLywrRT}{-u Ajw6֠^h6{7 ĄdԳ+o:sϽ{Y{Զ}֍s3m# 2>ō޿9?7λ][mUKd?]ŷi Ƨ>�~y}7թm-Vj߾vZ>I>;߁փ2PeZ}Bi${c u|~sϼ2(Amh5>|-F1{=~wמs@b\\#.*>oZ Ŷ`h5_.ys޹=׏;qZŶL1P5R20TD48eW*sOOljڕMizU4ruV8y{ۻM5:ZYnK\m !}K*Fm}zU{=N2 p:H|kY=kp =&=[mm}{~z=Fnomн|[g{m7%6yw[smvnkU_/Mo,/&.~J>|յn.j⹀g=wwo8*8N`$kVU۠fB|Y |<ۿ:<CZZ[4 ׿;HOLX1ymߡ3Kj۩&u*_ϫjnBPx>s=9mm|$8տ*yOѪZJ>k=mV[o$'N޽޹׿=|Uw}s l{ə&מw߾m&hZ7uij3}s|wNy31CjuwkU mzw:oHEkKCXWu{BӒI$Ϙ>ospyM6m)!1`_ ׿>o{m3Zwys^$gN ejO+2ڶɵ*ƪe%|v.u]󖥞nu׺4hѨjkZֵ @Bw42( &N[mnp6>ƞ%te`m]wI.W[Mwgdәwݕ.oʭnW/>+-<|^ʖ`xG &0@n $p2G $p2G $p2G $pI$III$'3)$@}].SڜZ\oI$$Ih0{zy$I$IX#&Q9zcH,@' o Y A:wtwI1ϝUg<{}|U]IH^{;sl3}z߽wAvUW?fKZ{|_zmu޼I3&rw]u]|twνu߽ʪRXyn69I$I˷{{}.m$Zj՚}\u!:B:xp0; ,b@CaI47_sF@@V۩mͫ6xwi, YfI>BSu$$Pw~vϩ;/ ܧמּZúsMaWIvh:Nqis]xsz~~t@ 4 b"""""<.gF\`ǂ}s̀I.fikSf5$b$F mey߁={{} -a4%JĦO$#0 ̐hƁgX)ӳ׽1zz̖ioUyݷ;r{;{;{;{;{;{;{;{;{;{;{;{;{y< dAap8wzնz/~9n^pgK9}#ëENS6W(܍IvգG*}wn{d WWo{֮OsA-j`D\DE?EO0DGOg2}>r.kam:s/X|s|{W=Cm-o2332NV!z^JHB+m8$ey ;W}&3eYM\Fy5~ ozk34ֵտ9/oP`b ؿKuw|saoKJ+'.r3>y}{=ߜpfB1ɘffg'A(3B% (]OrڡrHN-*%S`Qj,BYURe TLTEU(E_z1B*iS5T%fjfe fj}`Y /X~-/eU|^ڽ{^I$I-I!$UlI$Dm4pFC!,]n2teuі-F[]n2ߟ-{R^ejӫa<~C?:@H< ?f+bY/WWVbZtNv].NtNtNw{:s;.g:s:s:s;NwΜΜ˥ΜΜΜ]Μw9Ӝ˕+.V\i~wX|_<Qg >EǪv n\zb >EǪv n\zb >EǪv n\zb >EǪv ݐ &q.r<y L ܋TA[ȸN}ޛf~w<׌ΛfH'G/eJljRT.!+C^eH~>T,C1Q#CE=qtPmAPmAқPmA6P;!> ]G)kIaf4MOE;"ܔ|(ҋ%j/}t||Xb*ثb*ثb*ثbFlFlFlFlFlFlFlFu/C/qr$2 D ?|D:ڢj*6ڢj*6F6FTTm l6] |}2Q~JJD[l߾2$bsr8q[r9`xùQa \),FbN{jZ^v Rkee4ٚnWmP R>SOM2fLeƍhѣF4hi4hѣF4XѣF-&4hi4hcFm6M(:<oSI$ HHw~ۈI 7I ZH9et!EtV5YBi%rgrM:NgI$]Uv뮮ym<Bd0QcEmù.0Qb1RiҐzII 'Dh"t!TGRNN8!Cv^m$؈4`$؈4`$؈4`$؈4`$؈4`$؈4`$؈4`$؈4`$؈4L4DFё"@h6" &@h6" &@h6" &@h6" &@h6" & @h6" M}5w =(bԐtPykU~͵Ukjo?`]k[*($:?[6l_N:lV_\b}mbj%ܝw'|kr]5cv+jǖ+j翧,{mb}[XֱmVݏ-V՚ݏ-[;]]k.>j!iڦmG]'NvA$I+ &ZMebއz!{a8!^骽%\^p%zM6t?S|亍oz44mmf66muڌc c@ f! d{Mmf+Hm7m BA $ L/ mGڏ#h@ x1 /$AI&d A 2 0FAIr6$ @c@ BLdH2 2AI $9A0 AH$^#j1Fx9hb"mi7]FkX߄$zPC:Ð=22 AuAu n 2 2 00?AAddGl/;p]ωۼ\] |O\9Cmi^^ӽ:}ucTѡx!1Dh}-*"L ;!hdPJKaR!OBWc$A2ƃ!UTw"w)"xSUUpl0h{R|E`U_-jU(OBa /;!GQBr$  $X04>.}5%JCiC뇜Wx>}Aʕ_ؒI$I$K33333<}UU!/B(PB (PaB R ;(PB (PBO:W~;a|J+%JKE m6@I@$$$lKJKjd>$<܁TT^М)%vwCR,!y4444444444444441% * *.ЪZҥ9UpJC]I4//ƃ҇C333331$I$RMĒI$I$I$I?jU橿~8[mಆd&dTeQFUTeQFUUU:mWC b6-6[`ڣ`6 `ڄQ&[-6D$<`p0+*9sB!B1Ԓm!(Q몵jձ$DQ%$E%$DEJ")"((b"$""J""J"ٳf͙;*STJIIQ~$T!%H"DVZfcX]#mEW-QEQEQERRQQ%%%%%>DDDDDٳfzR*zIh5`쐇o(~'H=HJr "N9X!TC(!pv!}Q:p0`I$I$I$33H;yS_̔x;$=ؐp8H9SSSR$I$I$UUUUU^``X9&!Ғ'>4>zQR%UTi[Z[Z_ 3$@mmzHp Q'jR/"R$J |Ԫ}A!DU!ڕS|;RdIBv ܓQz!tJ%45U),wp} %!ʈ_TQTPWJ +$D2?ؕ%"a^0AڃA𪪺+܃/xU/! }A!!^r|^D=rA҄{Pv͈1- Czzx"ʐz⪹-jk[?OD{:mVm~vT]RSLfDDDDDDDDDDDDDDb#m[w*-UҐu9 BSU %$вmڪVݭTH5$tXp 9EFmm[ KMKJRJI$I$I$I%|mml6x )*@t$T!U%9 'VխnK+T$=*mmŵĝd/1 Dz/ƪTZh2b SҫbJl{2fKK "D !ȤRd'jG'UZZZ~UUkm?pmmݐhE)aQO<4`պMURj*?ԪS3rpb3ʬb3ʬb3ʬb3ʬb3ʬb3ʬb3cUm&1V1V1V1V1V5 rV۱g-9mn[vr۳]g-9mnsqZfۤ\mV*UTm-nAsIsnjvnjvnjvnmeګs5V;sUc5V;sUnsZG!D̒&,|TT*j1c1ck`zyR|f~` CݢmmmmmmmmmmmmmI([h0:AI%Ȯm[ H d@ $d! LmEI<^Uxm+ґf5T8:UM@2wUNTʩUOdiA/U(|tPvS2̦e3)LfS2̦e3)MGr_2AJ?p z]Z_t!B!B6*Q !t2R/$L'h`h2!餉I/BR/$^8q.;HC2AQ<<{%)EDA%Wp]NA}K |#؆ 'jA H?އPVCQ^ PS*@D*{_}pw!EB=yP"vRPIb!`j jnW46Y$W]wUօQ~4(!$Xj{(+$k3Ɔk J.,K糆JJ @`3;q}g'; GGl>s}S{G( CV]̷5*[w[tr[[^Ϝ8ַX;|]UuJ.Zi}}7"d[e(w^Z):SꐁS)TD,bu :o6 2l"D( "b 9AW3f6DGA@mH%pv H"bJx5oO@A1錡..!"H4rJܒ GbϮV$L B X*jfxh$TE]C@L 25?L̏T4~y9?8I CϽbf^XO7$S5 ?h$t' {S3xW ( I> 5O?8pA1DK̽SAscBW^{?8H&=46|>NT du p[s3cA76=}>SH&8V+2wW n&@͒A5і_Ãgz+?h#;^wesri=zO;#vW7.ׯT9=o;^wesri=zO;#vW7.ׯT9=o;^wesri=zO;#vW7.וΝ=o;F^5ȆׯT9=o;^weri=zO;#v\.ׯT9=o;^weri=zO;#v\.ׯT9=o;^weri=zO;#v\.ׯT9=o;^weri=zO;#ex܈i=zO;#ex܈i=z]͑y2ӮUmW<װ {؀mmmE[imVmjUmڻmm/}߿/b^߿~^~{~{mmmE[im @ {؀ߗWﻻv=|?^_>|ͱh8>>fo.kwNm˻6ri\r\rkwrē6 mFamѶhl4m6 mFamѶhl4m;mmmm5]""""""""~ZگHd2 CC:p!^!P(rd:p!P{ d2!CpqWEpCtw"`w^NUmͯD>OG@G7Η77t;6Q7:|0.f;:{=^ק>!+rݛ{2>s^UfNx1R:؀ 3xJ ʽ)Ҁh7tyxΝ=ͼTxNf*HQ/ZE6Q8E]U3*'UTsE]U3(4ӽ2ӳNsvdi(rttasfsz:fgNӶ:v3\;̢Etp)Œ֑\s*2Vf;&k2u%mU;Tx6W}UGL洊:g5UUQ9"/UQ;"[ݪ֓䒪nݰ[Tt֑[wVM$^zxY:{w^uDvp)+}Dv껙Bdޭ|{fi}Z.I*ׯ^n="g%i[TOj[UUkuV8ZHs*2UM$3TpHM54z޲xjmXzFnn^m60@x;I$I$DDDDDDDEz仐$["RHR#m.־+wWҬu%H$rE֬oE@]jȪGA#*.eKx*VUjmYRpՕ-H YR!Yϒ*VT"\.eKx*VT"\.eVjR: =4rM#ܓH$=4rM#ܓH$=4rM#ܓH$=4rM#{U+(((xs/:㽻KE܍R9HGHݑT ~•-ʍ j辂/Ӑ!%Z0Tǜ2:H@5bE*!so s["x并U苫q}6m66M@DUvS]g^g:W.nѮ$MLZh$OX0ɒ(#B0#B0gd &I~.$X2 G`C8\: G~hr1`C8'T}F@|t~t}S1$b3 g]sgbAb931 ېA˰!\: G~; H.b931 r1 Ϫr@#"41C?R$I$I$I$I #ǞfbYemm~[om"A$_癙fL} ARRVJJJJJJJZUwq@:V^wwwwyzWUUQwnI%M`$q]IuSy/FI8nd]Tf ѭN7u$U7kDvI%M`$q]IuSy/FI8nd\Ƚ$q]IuSy/FI8nd]Tf ѭN7u$U7kDvI%M`$q]IuSy/FI8nd]Tf ѭN7u$U7kDvI%M`$q]IuSy/FI8nd]Tf Ѫqg_m__=-[E[E[EYmmmm ~z~wa$I$33ளOT2tMPpNfNwWBQߡb4zۏϟ=== nU=̝"jU7VYjIUQk1&3(UVeQ-U=̝=wWBTm꧹n|=wN~rB}=m}$ Ҿwo[h =\<zfUSuEoě̡UY'MIjUW:%<@DDUʼ4 #*ݻ⟩=|hޘFV*FV2[Qr71vꎻ:uݨQvG]ڎ;#sr71r71r71r71r71ݻk2IvE]ڋwj:uݨFwE\\\uݨQvnbngtncqRquu֤N7]jKwjwF7#snԗ#swj.F.F.F.F.F:qR\\_HQbK$I*JIU/$=ߜ<MMKVfffa$I%{m YاKwٹsINe6GVn7Ɯwyw7cw3֍7^8:8YPwA)ygϠsN]9]t4޼z9|uߜ皲ӏʧN5jݻ9;mvc'4N'wz^GV]jѪ׻yXo3o/z{7:k6vf},mUy+z\I,;>I |@>fbK1Es:DDFm+u|J.Cwɹwv P3U/wpp7w:pkG!}Ex;URx'p!Ͽ~yu 6CꆇO_flّDDDjKWO{_J'~f H]6>-; L   {=uNsnE<>Tb# n؀<s+q;C[vyC9> C! Qx@"`~?!~[J G9ͽn3{<]uE;I!$I!$I/2 K}5]jJm.kA6 ;ex߀tuv:%θͶ*/Gm[oYm- I&.}^hXǓ6g(.%f>=y? ė`f`!y(%#:C;Cx%.IM&bz0Ǵ #&cs}y>Ijqd'r_ML޵7g#TQᴜ2{չ1mj=K*x[Z/w[Ȥ$I$I$I$I$I$I$I$I$I${sJ9!lVI2I&G$29! HdrC#y2h%K^}Z|y|u}ߗ$<}.ʾNȹˀ2@r~uuÏgVދ=nsnZWZHDD34}uwPw__@p I2"g=$Ѐ?pG0& @5?>ߞW}u֪ڵU~_Wyﯮwu](m`$LnyJфn 4Ogun[/y~ *o,MȀGeҚ-/SʹzK{l7bz˱m-e~A]QuxNߏ0*bکضG[m/kvZ->w}?;&IْIْI ݌gW>0&뚜}w;vC]*ثdɵ8s˫k]=:G 8nh;Egͻ1c/;ctvyٙ^̻36n6;!CO~~~?_?__@H,@!5J4N^;{xs%tHND2vloae`'T^wΎ]uKw*{\sVKb=\mrY9]yKӽfbrvRO{žyon^* b"""""""~i/&$O:Iux7֜đ'}{}KK#1!FTEr۶;bp9u)9dōQqIjD T@50$CMڬP07IzyT]ÍۼPPȀL@N)5[5|Zs8[-E-EkEmZ5hZ-m/$V bhZZ-hemCd6ON'^!0~ G>"2|~&ɲlU6I[bkEѶlmQhyhZ-ƶEvShZ-jݮEhZ-msk&ɥd6LmݵEhZ-5bhZ-F]hQhZ-E~_>]~>>EEhZ-\uZ5EEhZ-{ǖEhiδZ׏9:9کζsδZm.YsxY6fku7kle-qMܫlHwxFb1Hɵ6mVniWw_moZ5Ū(6^sCeM׷˻ /bɈKͣhV69V2` 1ٙ7m" ,[dklf756oU!|l~׿^=y=#Nna6N[zg]qxmb][]mVޫ +[/W}^ߔɚ19g!Lr&Rc;1s2zbEȚN,ϻ>ϻ>ϻ>ϻ>))/V$j.:C:OP0P^ʬ͞9{oztZ%<ݯ^axee/oyevr엶5lE*SkmNChjszfnrX'ͳ`A &,:+ `@LJPy^ãl~<{lLȐ $Z&nmsS{K~\NpٰKT߷πߏ~׮w׭bO$>EUTҋM H_z+Kzwwo#. IlRr&Ɉ'F37wM7[yߛ*@7*m2!{90kf(|I:Gs}kk|S!nn^Km>hutkB`eṔ^7vw2]uF_U%~ P^zo,Iq=\[[z^BWoj3$#؈:wmlېu{azW緽{ `"=@A q6 =z2@ys2rC}y|xx+9{Cb>}a )ZC}|x_o:^׶)1™d `7"faCv x_37=@)'/vhxIyvv Nt0@/ 2faܑە[_'Cy/+sw'; n<2NPݛ}=dֺsc]]*tv!IlaPU F , oz\5d:굓eyyگ/w]I$I$@jw _>zSy<<@"SOPA p0DsuNU"$I #`o|w~Qe24LM'RO>[{f׶|[/{//Y{㽻kwMz[jWbɸ^Ifxn$3 0BtHt;Qy/4!̂$D}&e$I$ԃuNV,kkjҪelؚ7%fvjەuw6or˚NTtqQ۝K^s6gߏod<ۓ9!HG$#rB9!HG$#rC=yjޓpjus"6'כj;Sz-Hi;$I$I$SxaeQZZaW<*dd  A"0 UB|WsrzH jwWjՕ~_ZQh5y~w}}im$T֖˾o?t:t89.hF; i(=)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+)+I+(@<è{Iy/$ct h>P;ٙ J4ٙ[<'JvNNξJif򰛤o_mږvrm ܜZMvg]:UwpZF@.XI QAQ$*=r yz˜\Tf@B Dr`ysU_r~]3\&5>mS;xP($$a0LfzlUrSvmh>$?8~Vzjt볛ڷ0T=/LL$@ż/O4Zmى/bJV>Ĕm* `@"/RbI|yIdfI$Y$1dj9HHP ď_nbY(%lUB\̏0N̓ĘFD@#ܭmݾa$d@g*NQ 6nۙdE ՎV nە{l]eG!cؘi皼;}`p3"d<||s9;hu{ ^|ݚ3 |xO}u76Pcǧ_BSQP(*Qa%bIFLTSPdIPbBHTPBB X-`ZZk XT֊D_) !_t?LajajajajajajajajajajajajajajajajdJD>bvNʁZH:$Ja0!>)3mcF1ƒRRRRRRRRRRRRRRR[:Jj(6& Ub`1%IRT%IRT%mM6͖ZCvYqm]N2K*]R3;u,v5Z2N2.]\Qm]u-riٹR.\.u٩kҧceivnn[\u:\wK*]R3զZ˺YR]N2.]¬]s+Ksun]iٹR.kUs+Ksun\wK*]R3զZ˺YR]*vۮK\pVk.eKٛ64.!ia I"Z-,̢̢̩YYYYYY$v# 20## 20$eQda26٢ŋ(ŋ 6[-m $UܢVBUDdBeP:,1Tٰ kSTc1c1ՒI$I$I$I$MSTTֵklUDDDDDDDFVQiclFHf-,m E!(#$3e6dl،͔ZX1Kb2C6QiclFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFH]ZlllCU?UJ~r+rIqE=EJ.轒i .eN;řḇfX,YbřḇfX,Y,e,X%ЋCQd_*hIl-&bje64lƤѱcERQhQF5KRcRhjeFlhآѩ4lhjM564lhhIlhhbjM4lZ5&^j鵛6VbY#+%0rƭ6%jv'n5utuwY%j v,؎n;uZMud&FvtmMwFjQY;uuv:ۮ5uZVpW9yZGWJWNgC9[j·us:)wX3bNgC9t;RwX3b5J)^f}bKŹվF4njq]uλ]vݷwz`7tkmmպݶۻ;ݘ_β,q6ślbͶ1fmY,cm9q6ślauN8OM2&ű~RJ$?{iĆ!!~?\tMZЅM^ P׬4a P hF0ׯXhF1 P hF0ц4z^ц4a h-Bh4a hF1 P hGXhF3;Ǟw^H$  m!CEE~; EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR EaR E׳җ/TV2@$`XOץ]i HUko[oիko? R:Ir6ڃj 6ڃj mA66NJ mj$2A  I2̐&6ڪjE~ !/!^8q‹M+l[G$*Tqx!P^)!Wt_%eH5%_*ثjPچ6 mCjPچ6 i9؍؍؍؍؍؍؍؍wEP_bI?C>RC C Cj l6چTmQQEFTF6Pک 6PA\QEF1T#(?iQ~ HE?̬⨎ (XTۅ+GnNM2MmK7)C(\Vܨ(_|>|/QY C!dereV+elI)ڶ޽j*Yk5YTmKhյMz_\6m~hO{\T?%rc1)(tDDDDDDDDDDDDDCf͛6lEC>ǸJ}Zwq.=u^/>_KԞBzϯƽ O]xסtKKԞ}xf|]_wORԇ>c>v:<}{Ҙ*bPLɶM(zCq!e/X_aykϟ7<'=Oqλ]vݻNgnێuݙRDQD,i4I1LIdwi8qӵw۾VRLS"bVk GHiȡ1RLij(QE&I<ǂcM,kbȤLIdRDE#դƞcI1LGI<ǂbjZ4$RLS"bȤE#դƚX E2)&)Hi1RDR)&4ԊI<ǂb۾}ݻqλVẇE!Qr9xp89"pr8~_ϰQ!r?}dH$  +Ug1~|>C톉E+NOCQwQC>ƒT 9.C!y%Xqff&fY꿲Q`ښlM~eT'CESSJ%L ē J4CϏ0qՃ,U#$C̐{SQ#'hTfl-+ V#+UqE*+!P"CI@*‹LDU} *ЙVUʾrwwwwwUp6ʺ<~WId_W/J02TV!hd4>.`yCR%!TCÐvfffbI$I$I$_U H}@ѳ=P (P` nI`B LbP (PB (PBeeU_=o_fg~Q~**}T,H U%ʧ~)8~p|U)^% ]Ihu0Q*b-5*+T~CY d5CY d5CY d5CY+48P8Q<% 'UR;N/4TR2AաaЊ"OH=z:PCCuSI$$I$߾I$I$I,=xwqpʦkF*UF*M*UEeyD*rc9ÎpDDDDDDDM7D!B!B:6)r̨ʞԕ=hf{ RzҪ5'(,!ADE[m_wwD]".tDE"f{f͋1n͢(((_BI$$I@ @ժv"Az3e4=H>Rq IJl1x *>A}t_"~"WHuCAI$I$I$fffffg'ЀC؉ZQSTJCjH5Smlٳ`I$I$I ܇HyRMUW)#w. 瑊ԇ!ăޓFҞP#UC)+ =PbU4TꊇU!(@|CGb \qA?܇_W(KP{y!UA?~ziO}({~󨴂hbW~pQ4*z""dF-Cڋک%yA T?j^#jeEkL ~Sd _S򿞐~4_ vmf`YV1cF1OB34)$$I!!26Ͷ߸tCUBrQq 8W?h'!mlSmmm?R(_*OrAH?CPT?'@d>WިDjA%_]DҔtއCJTPEPe)C_뇋'DƊj[Uôbēd45!Uq]EQEQDăVJ33.UʽZB!B(B(B*   FTml("(ٲٲ$Y,K%dY,K%,kRdI+UU*lJ/ !T(-lsѷqtm]wFѷqtm]wFѷqtm]wFѷqtm]wFVjUZjj~t(PzRJ9 *"XtR)t@ P'EWl6 al6 a2b_W?rT}( T SPIO_!0 `+I??EER9RAEo|^Xe- - (}R)]!?BCbvZ_̢ͥuͶf-_{VkUWm[q/NCH~0/VI(J[6ߋfb|VZ^8^VڷjmnD?"򢧤}Ѷmֶ_C8UԤ IhQUMU0,`XBU0,`Z X*XBʦ_[ 'ɵNR |rRVVAb!mRJ<Ih#ʕo֪{0]kOuZVUmmj`<խo-RV[ U!>(rrpjԭv5jV\+] X5jԭvb3ʬb3ʬb5թZpjԭv5b3ʬjj5bv;;tgnѝ3FYۣ;tgnѝ3FvηS[n*J;lUEUb6m*Ar s[;rݛNܪwfS7T]ٹTʧvnU;rݛNܪwfS7iSr@tTن1c1cZa>!_QkUMT_ DJEP9ݳwe^{e^W!B!B(_E=T2S)OA(Obd;JOh{!jIy(K U|@@ @  k5TI&!!HJR5R5Ή |HzD/t j/j'J ֢R% ?zA~zT!+!P5V)SZ-ҫ/؇CQP X#8΋ }_ҋQvJ[_ĕTvU\浍1ͶG:jJ/RxjPAbH+!(+$k; 3 J.,cs X/ M6mJk>{I8x{sd2>v 8<` x>ǀ3;giþp>Z)z pR. wg/{}x95}tp:z_xZiz8jjھ P} *W"C2($<z6DPhVl ;qHKqɅ!HBE k#3`4zQ&4ɠ eQTzhdhh$T*I SRy=)# JQM SS M4`dM!HbHhd@=~Ev(N]{==t~ҊA/c1c3+mz#1Gww~_m6l;<<<<<¥y(_)`S$X퀱F7 ,Qb n@IF57 ,Q FjPk1ԕRDUUI4nlՊG{*ՙXٱQtE-͵TSmm^>0=#F\U'UYW*9SUžS6O5|H٫|c~įS[_2m}w|V:<=ջr#~;Sm:OjI8uku^^Q{OV&5ߗ[w3?DDR (D|8}%[4V#6cmlaxkWT6}=UR{S/^guupW MdotۧΗTV2]WӮzuJ\_]RyX}uz~Z7_T^oN=ïWTh}[$JV/=b^=ջ4F?΀km~zI-[Hy!{mh{w` qCL}Ӯr8̮79i;uG#599 3}Ndw2\\!t9l\\\k4Ν:#ˍqsӾ\q;s]sq.s:wt뜎6G{ks.5rgNsuueƸCL}Ӯr8̸9i;uG#599 3}Ndw2\\!w;n7vi;uG#599 3}Ndw2\\!tsr8n.tƜu_UQ/㟷~׀:yW^s<^y</9ux:yW^s<^^s<@ y^y<yW^s<@ y^y<󫺯׎rB@9^9/\yVHR(ѹ#* i%\69p۶PmS::::::::{]u]u]uׯ@}q>U*( `LX6#axa@ 4p;aAAP<@P.APupy\w$p8PG4  0``6AxاJ:ʮm9);EbI*6آ˻՟D~ވݿDoDDmnߢ7"6wo[舏jv}O""κRtU@ DDw"""?1}ޡ`7yyU|^{]#x~6?{W}>U|;Cuگ}CP}y߼{֡`yY tU@ ߚxߞy;9_K?Ou}"?DD]%?~>Kt=ֳj{{g{$/_>eWs9DFQs.s@PDꝹ}DDwS?YO|Isy _;Ҭ:,"!^#vEsWWV;}P:뮵}JBJXFV22dec#+XFV22dec#,̲2ei53,LeeML,*jfYfSS24ʚYT̲2ei53,LeeML,*jfYfSS24ʚYT!Ʃ/@;x1U c6V.ќ:{.g>Ii=Է@mc7~ϝnv>s-5!/De8E1y$dHA[KATKЉ7]Lm ffeh@;nKA=8#=ܓgOuՖC4VEں{'Ξ]:{ܻ9.۫ h>ܖ  bLϋ¹|> 䃀 H@4`h,,4/ϝUP1cdvG3vmcELz1cٯ(`I{wќ#303/}We0s$n(zƐ1ce;$J/Yo8,,65[*cHc16@ v}gJ_41c)[ z>MHc>FîkѾYf1Ya0473u43$޴ m:f_41c/mAO\:1."#""/Y.t~HWW";^]u]y sE@rU$T *OP. >E@rU$T *OP. >E@.ZTA#<&^Hɯ$dג2k5䌚FMy#&^Hɯ$dג2k5䌚GJ ;{}|?ݖ۽kMjeo2{o{9rĖx/7?3V^|T yQJ=~kK8/F"xE9q:~^u﫧μu~uh \_?l[wժ0Ij汌F0#B0#B0a*Tm JjI;ۦ+w*N]}-^jrʖJʓucRwݷRw*N/v7*Mͻo¥XT7R)_XT=}roXT7R)_XTۦ+ՎI{veKWܩ;o]_3o~_-_/]Sr~^[[]m9mosm>/KV\RRRRRRRRRVUwW-~䄁!#WU}x9s9stV:UwJ];m$U7n%I$UMd[jI`yISyᚒXllETfEf-$U7n%I$UMd[jI`yISyᚒXllETfEf-$U7n%I$UMd[jI`yISyᚒXllETfEf-$U7n%I$UMd[jI`yISyᚒXllETfE{U嫔5)$smmmmmmmmsz |ʮzzy!ogykz{wyӻB^duuT$KUSUTXC̖j ̨ʴ:KSJj+KQU5QUA\wU2ZBZto{އ};-UMTUPPddou}͒@w|mCYtXJ ~!_ 9:tlٳkaF D1DDDDDDFDDDDbA"#D]m>uu۾5W_%s֭]PuCu֌f5ul:Fj3Quc6u5Fj2îyT:]PuCuT:]PuYhFl:]h͇]eFj3C:]PelfuCf4:Cu3hu:Y,uՇ]C:Fj3FmPћT:]Puչ&m6k$2A  I2̐6ٳ[nOUi7v&_[ms]s&wrJiS5QQw/).R]-m-5XѭƱh֍cX5cFkƱkƱkLX4kѢ-ccX6b5b5mFZj Z5Qj5Fh5cX֍nUNUNT쪙TU4JU5TTZ̐ ڭ]\PsTX 4b[ Q5Q5Q5Q5Q5Q5#j1F"Q TZd(biS Jґ 2j4!=Ah8AAAS9KK ZW+c+]VhvZEkm+]VhvZEk\^>[ng8o1s>[ng8o1s>[ng8o1?Lߛ3~n^cy7랼;MnmLLs'SIIޫ_UX0;W0`XXL aA@P0$I} 9g9rZZZ[jv֭wmjv֭O UYw6zFwmjv֭h]ZBX=#VkkVkkWVKm-ym-ym-ym-ym-ym-ym-ym-ym-ym-ym-ym-ym-c&5*jUTҪkkWshJ[jm bdjWv֭h]K^[K^[KZZҭEd%i:ݵZ6Ww6זn@-un= USZ TU4פfQT#A6=#VuYIZN6Fh5V[jm ^[K^[K^[K^[K`Z+4sm-y#31LĖ>pR9(ZҶZکqB).ꩪuTuTs"&ͪkMQj-U5E SƪqESJF@Iרg1c1c/% (]]INAjU֪rT;eNPm6՛m{c1cڳӦ1[n*UTUUm[k_ӿwy<_[@׭/zQms7\VsE˚uK9ffffffffftlU}|垺8qI7lm)ov{EԄ+tfwtƖnU9;=YL6rٜ5ywrꪹnyU:[r[<ֵۡ4wv}| f8sA f4h3A 1fjųI-Xy/9$K[bI`4F;UHҩwoG˻ɰI)2@ K gJBo+;p< ]&yUyUn*WǾ lO1^+MvlDD91SuA2frzw1yPPM!$[Zޤצ5S338[OM|՗rn#7O[mĆ {M;eII`4 3-uu}D@Á`K s\;u`qU*pzk:jyU{GPBv;²6ffe&L1y&J^ZBbn(F-fyTyވJK;[Z"de&KKރb&mBf[TldW7s!>$-u'1"yUlzہPʐ=]AU 5ROil0*3vT*^yւ!.AtuԃC5z A`x$IkO/m*yvU]".\QT=菦6r|ʵEku{uK[uy'/jgʧ3Eaդwwt]-n*fO﫽p@}~*YH K)7 33]sVU"""""""6s|wT([_yߙA~07G`U$IUAee}6$_5:>U]p*Un^uU9k2UTIUV 6 ?2ꪹ}/ Ϡξs}s]<XexFɘpfd*\3 '_*U|>~|ﮮ}` AREpc2 ( .6Q~xz9E zϛ|:&lH^⶯Q#]L=pL>JycF8u31F#33333333h@ue򪨀 ux9ܣї9ŠZqUtμ!V7v'f";.Ϻ*o=3ET53N껖Z'gHsutIRf7ُ+ I$I$I$I$I$I$I$I$I$ĖɲC& $2lɲAI$ɲNLٓdM6IɗmM6H%6HdԒ57;޺ZII.Nu{ֻsΛ K䃬Ԣ&ER)ξk\f㿁;ҢtqEQΚjouֺZ\J%'kltB_}^s<7MHQI $9Υ"{מGodD&4w{7vUz+(&!Ӽ5#ct׺ٻ(^MGDDBsR:뻭yyPXd(%P{q̥=I=]V9A%Q$z[zssĄIqjMǎu~FW~Ru:KN#׫cާ|^S˛ h4 w$8DU^UUVi I$!rwoGQJyXao[z۝ջB.SuA:RuNUۣkw:ΝU"pY3{V=A阞Q"""""""rIv$<ǝ_u$k^nW}^_B&A*-uitJ̶I]ʰz^o׼  *X+W tjC e׾Dl=Ҫj,%PU5^ nwoߜyߖ ;[^{μ$iH"R.֊dR̙2fNbq2fff'2"!kܿ:{w\y!MTF9F&&wҡ\4jc^w߾r<_**5)EV\\UjZ8PqS;hו+7qy~k)rTI)G+ɌYߕEA=Ϟ~ן}>Zm-U5kQsҲn.mL/FRz^rERt{suGǜn$i4o331xmi4o333m6ƛm\9sh<h,`l#;ap<*EfbF.n-ŷ[*Ҁ^-'<:VnۓSM~~Oaoy&bm-mb~N3?6癭]iHɘGLF^`32AwhukEBT_}ϾϾ}Ϟukˮu|]rH֪Ẑ1e=( "TBQP9^# I\ZU-|o{H贝fR kXHJ`!){$6D@3=77?Ye*Z뻌|Wq|\cUæ=1ӛp<|bk\n_\}6)狀ϯUUW /]R+YU4\ 6n}}7{;]Mw ^׮3Hb'N˫yK;ٳsך۬uKe3p6؄Z»\׫HҊ':rQy b2f"VE5ERQHSZЋ.jw~Wy{7#'&kHkH_8soѱG'_ߋFVQsJjIo5aC>f#&f#&f#&f# 6un{^s9]c~# bԒ531&4|kkXF5Uifb38 my?p"ia%YϿ4Vf.]NymT_?z \Qi>׾ז{z[`I6mbmκ^u랹c:ί׽oWS+Uصgi|E8ǭzVm߮""=^Ӹՠ"#Z} xvU-|>~"bawa3WިD>ua*UT\;ѽaj:RI$$IuMzUL<.[a"JR;=Zg3$ITy$WDCz(\5^~_=מyO6Ym-*Z֫[Nvrm*oVݦJՕ/=]I`Ġj-7{inT  `0 ;wVUq;;8Izs9^k}z-TXM ڝ{zN͔WV 3"][ʦßoUjK)o Ujr;uJwZInl$& Bl$& Bl$& Bl$;w}|߾;keHߚ^y]qÝ}m}=ZдWq%\dCxQ57ߛ{Z"ehvд-ql5_?O_:;潯ݾ{<9ͨS /BP$ZVת*w=uaB7=$TUf^`PPJf7O|*J*疙,%:|κϽ=|hu:2IAP/9굞⪿AfJRV9<矞|Mx+]稑DTT(oJI$I" R߯w>} jJ=>s/3uUUUUT6Ym-U*Z5hڞy\q-J{1MZ'\\RMkUIصUb܋ۯJkHJUimE;Yb LP`P0A.<]URӿ33ʅ^*b69] r7mZ׮NWF{gd!daҮ϶\^|W=9U5^K仅 d}{7}>j9Us\~}ۯn|bF+&"""qtA9\JI+W`ܵwo:]o<,+m=ڵmͮUtR߽wߜ}ʥUK~6um[:w]/|jŇwꉅA舏bI,> Cߗ-@Ny>Q7H;d؄ID$)ITHM[;e* }~}޺}rסq!5umW;9*Oŭs]֫T`F W_}{?>zׯn~Ym-U*Z}Yz: Ƀ1FAAZݵkwowvݽ[vݵkwowvݽ[vݵkwu]uIaAaArð`va8Iyl{LImv6JUάk׺E3c7&Ne3Z]Kީ޾ڻ{ݔg)|7vUqwoj[%ܭ4[0e֦n=pvFFvM9SuZ_9^|u "vHKV:ҝy߽]>~5u[s+I )jAZG}wz뷟oE^]"X( mKZL{77dI$~ssOuӄ|yԵĒff %ݮԯ''VaERB{^fyZ C^ uv=_9B(̤WTDiBeTXTV(bӁ 0}S(X0Q1jfjfjfLS1UUOTU,`aHpQe~ajajajajajajajajajajajajajajajdyʪu@$jt)2yomEDDDDDDFRRRRRRRRRRRRRRR]Unmڭ,IT%HT%H3 03 4[CL2[Zg''8Msh9qnV,hNm3 ijծg''8qbg-s\.iM ͷ&7geeu]4kZwrvMjVnvijծerrsim&r5ᖙМqbg-s\.ihNwrvMY]nM4ZCsM9MZ\28n9Lk-hڭ;;uk2999Мqbg-sfmJvijݻep)fՔYYYYY,,,,,,,,,pYdaF2,P# 20"$daE E l[`Ģ RQT`EU誃`FlVR1c1c I$I$I$I%0aX5m[MgXsUKb2C6QiclFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFHf-,m E!(#$3e6dl،͔ZX*moM]t[UmsUmUV[G4[UmsUmUVpP8:BT]UwD#`L pIܒM ^[,Y,e2řḇfX,Y,e2řb̳-]` X}9l61f JƣFjJ*,ZJThQbFEFFFFjJFƱbE*5,TXhci-IQbE*5%d,TXhQѨƣcFƣQEUY-̛űfRMQXڍEb&ѵJXV+Q+Z+cj4bcEbm* =2ZfK5F[K1,-YFZɬ-cX5bMbKXkƱk25XcY jM[[ӎ89V{֧^fn?,R6,R6,R6,SrsNCNis)9r9!X49朇9b%.l!Xl!X49W6,R6,RIu,Izݩ+hmmݲFmwwwwvۓvn~eƪ%[[]n2teuі-y/2ܥܴkeLTf՘Y:"$A9̼Z&BhZ&h1j4-BB!4h3A f4h3APѠh3A f4h3A f4M f4-BF4h3A f4DX}K@!|C`ׇ?:K\gK묋_'w"ilCȸ[kbwr.&=~؝܋_'w"ilCȸ[kbwr.&=~؝܋_'w"ilCȸ[kbwr.&=~؝܋_'w"ilCȸJw` ^ DwZ+a'8A2I[JIS u >dSsԵ""*'ͷ=@uu^SKܭq$^T9JsIuTIbM73sw*JUU*o.;{\Ny?3;~/S8άz8r仓]5ع.Mv.K;]Ntb仗:=b仗Z _?k ^5\r_kع.ݯ.߻՞?9 =ns'{f>)|NuӮD(HMlFee4+@?{Op8 a,<Gz=ݯ4" BqU#R z4؃8K8?w,Oklh͋UG!A`p_R\22 UovÆmިdT^$<) B8ȘVV0WWDQ 'x;¯UAഡG_0h,` ?@~=?:H;I:=A?`L>J%x;(1F #(X2`X?0^л;#KXp0` I$I$I$Y?9*>JCV*XB(P PaB B (PB )QQU_:=fcݮ !S>uUT UENS2I=;wEvUUI$I$I$QTR w䔗gJ{*gZZZZI$I$I,ΒTx@ENLx_vJÀ ? J-!Ȫ@@ xTQGxP*),AJJpL}#QTu 'úUEQJʝh]}aZ`_[;.J@HGTCCސ|j¾vT T {\H)I0AjઽB/[lff6ٳdZԪp :ܮ*.ThiU_x 0mu[U&0mٵmK1cyH>QK b!<ÀP?? ??Ƕ@mVmjj/$U%xWVJD >`JتE X>GiB{dLQb(bQ/p;A 'DJ0WBh1 A(?PAx( ;А`{+U*?U{UZw``rDʪ UG@덂(((>$9ZBWk.Ѕ P P(PBPS"-+KJ"$Y,K%d[2̳,2p P4 R]6M-ŢhV6(R̥+*T2# (~~ m#npsێwlwKc]vt;ݱ.wl#npuU_VU*Uڶ*J.R8ee `eDT^8~``jmlm6clm[U[U0U``|yWևUQ֪͵ymmگWm?5_oW+k[2ʥ,Q4oVU_b "Pv(AL!WG(:+)!'9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UFs9UCM-.[vr۳ݜg-9mn[vr۳sqX7n+]%LV*UX5l jJ.s\XUXUXUXUйnAs܂5SEʩ.sZ*bbU)…v߽Uc1c*WU_Wk6տU,$POZVڭVڭVڭVڭVڭVUUUUUUUU%]jC;p"]XEUNi_Z|UwU}P{YZw{{nLhn`0Zx`!- - `0`04脚 1LaŠ3t33 #TU:UNjW5U5(U2J4KbED|(ڧLfS2̦e3)LfS2̦e28ХE><8ݶ=$$I@ @kU}vꯕ!B!BkU*v;Z;p}tQ"z'T;,CSBʓJ)Qx )%F )U VPB% d B⅒ Cԉ) ^>0_ƘTSQRa* Aމ ~p]]b p&:)/ Z9UUUq\"2Q*}@P=*_hC; Bb AI>`_ڬWU]sPjV֪6WVnP:P `}*PVI[vvI(]?/X(ߞ(jp +wi8pE`(9p9ۻ>_{r^>V@|}|=HVم7 n(]mnu-TVeózZ,e21aJm;×^ַ׷y\yݺ6*P ׬UHUsbbos@ҀUh}Q/@|0ŲX@\XqֻPhՀ&Rk24dţR6[ Y3kws.Ak($hi2iPSjMzbA#&M@I?UIL"Q@IDjDȦ 4RjizL5&zd=@ )))=2dB6A(MOW !O'"T.+Wsfͱc1cj I]JsG3G3G3G3CSSSSWSjiRJWW4l$ҭyki֧035]ŸHB"SBUY Ke޵G*DWUƏs^J^ޑojyi⼘W6^q6y0;lm姊a\-\h5otnU Ϋa\7x4O¸<W6^5]׃ f9Zx&x͗sM^L+wn5ájUqӌ: +/px3i+TrƶaG!x͛16y1zTXR%Cԓ EEr% C1 *RP(R?'oUUo333mm331m9mnmmffcmymfff6mmffcmzh,FgYvgtuөڋX\E.v]b"E4Ym331mmo333mm331mmo333mm331mmo.rλmm331mmow3.n-o31-mmmmmm{mh `zpA<WUv%. uK]'QRSA Ho?p5+& fDr]$E)RI{ 1r| zęIy X /uh\ #(O3jU' @M 1'n x )ȗI! 4>ܪ.k&5s77vZd͚?HD$ , d*I'r*` +9KmH&  3TQK%"A |` ("epP0AU UܼphDc#IA򘠲RXVX.$Fhz5O]J"> HudhRŻwqsמyNw99 3<#5s+rg{Srw#ߏn%SUԩQEK*ҫ${_ߐ 3­b K*{3 ~d~} G­~`OI(6Zi%T@N%xIE9t*-J(@W  %6|2gؖQ%TVY%TؽxM:,C#Ǐ\[QSh&,J(MjYQSԳI(wD5fQENkR$֥IE;)?aO>~mSǾ5,G $TI90$e~B]?;`$wMt>-GJ$tS>%SUX)Jt@Ҽ9<" Wř3g2߷qxqfL*yWWxs;{RUEq\s*: Wyy焰/n_y#^1W.{U@GE_OTYXFV22dec#+XFV22dec#+CS24ʚYT̲2ei53,LeeML,*jfYfSS24ʚYT̲2ei53,LeeML,*jfYfSS24'}7^ownoyQENy(MQEKu%T+T%T,2yI=vIE$$v)Izw- {{|Ͻ}e:M^QEN=)I˴*{Ej$8$3=峾6VJ(x +}<'4{$WdQS}U (3kdQRSDQRux ۺyL- {yy8*s933;y$bIڙwyVv33f蒏ws+M[QS[k8yc6k82jTMޞ n_w}7[zH!=u8- BU[}:l:oso^>m6V޽zzN%Ts%TV<&fe*S`%]}k7RU4Ӵ WdQS@dWDDDDDDDDm^mKE+;ԯ HR#J+;J+?m6m'{ŕ-*VJH YRpՕ-H YRpՕ-H YUڲ u*[VUjoE@]jʖ$T ֬mYUڲUeVn%)ۤ}I{iG&I{iG&I{iG&I{iG&mmZZm2r4_d(1ԇ*W CCj.*#!CpU UO\7}K[jV嶥n[jV嶥n[jV嶥n[jV嶥n[jV嶥n[jV嶫UUUn[jV嶫Un55Tm[m3޶ռr.\p.̒rpp.\ [jv %\S:nUUUUVKVKVKVEUKUUTZ "ijijijijh׫mmmmm+UUUUUUUUUUUUUSZ˕f˗ VKVDVmV[mZmmmm@EjjjjjjjkնննmVmV-UUPjUKUUT*ZVKVDV-UUP׫m+UUUU^qqs㋎8,B\!tt*W\qqcS\f35Sd- sB̅nY uBˠ.]r$oVU9:.ciʋUMJs0.S:MTyXU<Uy1ccfͮrW %R .rAth# 1U]ధ`^*!|_>+,ZU*сC06 A/$-KEsQ毽%5+~뮺뮺=!x# 7@ |HP ڜ}ە%9&fkfSsmRw ]yٹd޵َeg]bnՆeTݕg}5ޗ}_6^{_.y6M4a hFho&0ц4abW.%ߺ{wx蹡Ølllr8nn۾*8rq.Z˯.pv6$:PPQA0 ^#o[uoV @L evuq;FyǏ}\[U-(=ZJQc1B F@B}4b`@ F66` B7xn6 P@#(F7g[/u#`0@ uthyq""q{/^u " DW}>Ѳ"LJkA@""8&Ѝ` "! 0-ֹռכl/W^ZչkZl[IU5kW {dF0ȺqϤ(n܇ 5n9|jͲ;|GZ65~G5fP%֣dھU{dҋ7O}{Nj6=tM!C!449rT\;嵵""#jUv~{pc@/z[L~#-q\r.@  +LK 0ȱ-K*zts(&yyׯ1^h  Du;C37)}8s<~{ǽ>bm%|a]Qxp뾪{}zI$I$  <˽r{;5|ߟ:]uud{zCHN9Hxj}p曥|}})z=}?TEmim0Jֿm_aPB0?_0g}H'^U_[<ė1F  01%$ėht!vPhyFgO}ȚuĚ,F3Xh5doVqօsxuګtue^lnv{n]=w{/)8{vrf'wO5k=[7÷4s̮!Zٞ6I$I$I$I$I$I$I$I$I$I$V$H)#䂒I$I$G$}U$I$RI8l`Kζ:|&$sϵ>6mm$\ }Vo%{,0O@(:67ʝat(p#[U<ΗP>tnIo*$rTIÚm7h_?=ae_fη\*,H$`T9sYǿ^θJN\ߞ|>v ,LmfҢO󽜌*9s},$H0O@!yHsL#\m=FwD`Y ($K-J782s|Nu$@Խgmd$IQ$r9{s; @k:甁t<7(9qm=w@ ࡹ[dT6vm;d>]#PtSo@Ye VI'5quon$0v46 X2`uô;=Ӑ.ŋ5Aa=t.9$ 1OwU;-]quS5=U]ϓO%_ML۪r_r]h7uZjr1ur7n}wsݲ\DDDDDDMiʼn}1$I ^vdcvjBB" $  jܱm,+vV>e+%DDBJUÛ}^zfKD/IL%Mr9Ρwzz ~QG1~.\p*ww壻򾶩gĒ $LI@DBJݲOztp@HIBD v`!f2ovӗj|֭kkǚSŢtu҉qD:먇9CsNgPfc2 yiW<_VHf@I@6EjhժVD9D9D;uI-< `LǗ H$H!"Pae^u[ĒnssatJ߭k֮jYe SZk_矔Ng].Li{<뎝&0 CȀHU =6$EVn̼9xs32feϻ>ϻ>ϻ>pzQw!t Od{#؏dyG]/%ؒZ3ŋ (Z 5cW%ݻS]մd%7nfŻ[O 9{snp[}){e_V]en߻ޠˋwwrIfLI51ɣ hF0ц4a hF0ц4a)jW+UUw~Osw~B9sֹoЂL(Reżd`Ip(BD$@fM$ceS$@d@D x@, FHw;Ip;su\5^7u\ڻ,wmJ  B %RK6A)I9kn5sUX'{yI$)&H ٮm`u\Z`A=$#vW}@0 wZ를$I$I{ɯgZ]nsmu <_NO5׷7987Q'A1C%חQ[Y~Ye SZk_Wxǥ\ck{ϩu0LQ: 8FI*!HãmfM.z~{{wG||j||jyZp,@u蒮zI(/7]rl%6TcۗY.)NK|*^vkdveSjzfwwNWr{c=~<0ц4a hF0ц4a hF3Ş;A=ϗymgH$II&\7#bv:tF:u:Gj]*DBWz7}@ZwWZOĒX&`  W+q$x$OfD Ç!-!)%1e*tNuΟ8|#xxNS g꿧L|뾑۝q\"zNus7:tF:_+U9s)$DV=ܹz D,ollлɎO>}9m;@/ɪo2i$ #nݣwߧ7 BfLsf;揙u7;lv{pǏKAbC3k^Bb.$ĕo[6D$@^g/ojyX(I$H;\-wt#C31=Ո֍f1ŻQ:mMR7#Ut@)0A&|NZkx ؼy(Imxm7]pO7 AbILj)%NkW{ͮ'{_wy|ݪH *J9UӜrҸ+3}={JW7D B3x @,Mhs&z5q'za!#i4 ggܱ <1F  0$!bHX1,zսmpv<=z眑JH1{ړ_W*9j^N:qYLfn}jfwUۻKܓs\x9#z2rI6xA6A b4q. Px$rB9!HG$#rB9!HG$#yyn|>w(Dtsm 蝱a6,QXb-fYL1f*/5cMbTߟO;/)ؤ,F #X`,BXb!b1L&f" JI!fIڹ L_+،L]bIdI.1&yub1]bdC;{]d@) fE@-XgI1\жT-qk\Z4ѻ=#Qb7w^^|ϯ=kڭ P- \Z $u D uvyj{{-qhSsM'^}w:CϏo&r*׊sJ" $?"*W^x- BҋB16{F ji9hZ곴 @8pz3okJu+qk<дr9KZϰTr[>ାn!$AHD8+_uA>|}${WϷt{} =K_>_ZKL˪ R-j`A4JL@(Be\^_~=|ھ[$.lyst{#G5{XC p"zH?l)AwJoO^jiN1Txݫ)$I-⋮C۳lAl!DA߼}r{um:*nqNssrA@ʝ}$~D)D몪뮹s>ᄀ[l|~y/{{pI#=$H>CD@3/޽O>!{9 ԟuHoQ'ڥ,}Q BP_"K"Qi)i%4R!,Rw$-`Z`ZkւI_n/"5 J$u#/F?;P"2T(hU4!hČ١`IIIIIIIIIIIIIIIIIIwMk6ZlkZiJ&0blLKdYh*R%IRS03&m 20ۑjծ6š&ێk9k-]]ӻVnʸerrs9ZvVW[MUw'ntݝtEi۫]7geNZ;+ NNq4'6sX\jVnUܝvvVW[MUw.k9kpLBpr+Kܵ[Z\Y۫]7geNLk\qbg-s\BwwZҺ6SMI$$K;HYYYYY,ʑE tdaFd2FH# 2CbQcdE b(ZղٕiT`Ap%W:*%Hi0TY1c1c I$I$I$Y1);DDDDDDDDVZE!(#$3e6dl،͔ZXKb2C6QiclFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFHf-,m E!(-Mmm`6 `6 `6 `6 ^TRzG w.jB?R$AОT_K܇(DYKKA=dx|eZfe,Y,e2řḇbŋ,Xbŋ,X}ZַvZEE{K1LU&PTjUFJMlX*+d*Tkb f`3*ت4jT`66caQ[%RU%M]Y%d]SIUTu"®EgNNNRNUL]ԋ ꘰+ өөөsmUtC V 0aaaa 0ajeaa0aMh 0U 5Z[ZmjFMVa`ɦ6Xl1©[n89[ަY'X3b·us:)wX3bcYNgC9!b;SNgC.<wX5)wXMs;RǟSsVѹMHƆOOOO1sVԤ!@nmJkmnsu_5jf[]n2te~u+:{KfSEXsuӮttӣHBB  !!@  @@ @   @@ o$,IQi1= $$I@ @~$I$$@w|I$HII d>AI_ƒE=zxv[ћnؠ: dH mbfl[():nF΅bfl[():nF΅bfl[():nF΅bfl[():nF΅bfl[():nF΅bfl[():nF΅bfl[()`G!CKH2U+YB aUTO?9TP(I>椶ڃj 6ڃj mh@6 tUGp ΃I4Ye6#`kIY8I?yU;P?YB4KڄH=N EL䇒B !:PaqB) mCjPچ6 mCjPچ[mO.b6#b6#b6#b6#b6#b6#b6#b6#b6T{_XEʃܪRAW l6چjj*6ڢҤrDzR35 Z!Iͭ5RI9Ͳ7"Rʥ\-fnR ff(q\ܨ$jspff(pfnRD~ } У>C 1?ܰZF[%6K| >HQ JJS6і-܆Uݫ}8m"Grr< ʻWNtSVNf͛7w)ӽWjWs7K^^^|ģ4<ͮ%M%m0Y#rfx]_zg|̱m(G$ "$=NĀaQ׶ͶeL4DFL4DFL4DFL4DFL4DFL4DFL4DFL4DFL4DFL4DE& @h6" M0lDA`%$؈)4JDIRib"( &DIP"M"vխj#bK>jj[6m|WDsUoڵ^m.,C!I|=GGAċq (h<$uӮD_ӝG:u8_gYv3u뷜3ϻ߉r^Kk\y˭x.K<ּ%便_B;g_|3n(狶s=FnhE (B܀7f|]ϯQl;)'QE{3{>K|ƍnyy||{Ib 1 D{#GT8{-_2/_"ҵy^^W{y˙p㋇\LLR˲22,ԲL쌌3t,;'L)22222t;#'R˲2222tβ#'LLLL쌌3}m5IYeRRiIJhfia&$ĘRR$لifi3L$ٚdifVYil3L$ٖil-"h|!Ckrkk}/_së}}Gڏ(9C=.C.2;ޅwz<^^CERʨ)ʐFRC$OTx!Ê}asUU͵mWjfv~g_jX ZҠ0moʴMjrQb?ĖUHXEZJJj6 4qB?QRHI OK$Vb**W)hh}EOU!*AK9pիՇ~*_Y'C$%(H2 rMJ1Hhb4:~dz(G!aG# I$I$I$P |8PB;(B (PY (PB (P@9'Do_{ Q/G)TҝTq)EO?}=HxO*ItHY d5CY d5CY d5CY d5CXeH|]äHG֔+QT;)T:UqD>t'*~ /UEO#C?I-?Y$I$Iz}rL$2L79wwwwww}FUv*22TeZs)|mMA*hk*lX5bPm*ƍ*4m6FFѣhѵ3m5bk`ڌTUFFѬITUhQhѱ؍mE-lEb-Q`ՍFFѣh[DPڭӌ=Bz|W)%""K)s˒"Hw]uwoB!B'[kկwwp˜6չ[K7&`A$H mZl0,G4.hX)] M+(X \I |0U_dd*ҢLQ^Rb+܇[־DDEȋN!wH_YӧN:ujqEPllln!=pֶ .K/ ]HE!e/Y_yWPrG$>'ڐ!z#H:ޢEHa:Eaa#qI$I$I%ZbAjREHd~`yD*;ACsVM4I$I$I$I$ra<<#E1/hLC'G?%H+Ȃ J TT"!(C)tJ 'VU~1c1(j&`I Vm[Z$$  -+U _*Kdd)/*Jv勞JQ?d? TIC!p#%KQ#$Ok3Tb /D?=ꐓUvEM/TP+U ~?֑YWU*I;Z4e/z?r |R_E*.t*SK/S!EZ{#(G{C9 OQJW?:y[VVCr %Q$Pi.*I:A(((UQ:z׭j!B!B!B!B!BB--ju]uw]ջ,"("4K%dY,K%dY,JQSQXVP{$.B%?j:CC(*(~*j_퍹m#npvt;ݱr6 8\m#npsۜ.Fr-ZmUZd1V!} +E4ruBD9E)?"j5H솅l6 al6 aB)5CH>}x 9/\OZ%U=ʪEsVqI~'GJ/FJʪ5 ,EE,(Q~U=^SC%hbhd4W9WDJߋWW_*U*/S͛6l"*0X}[VyQET^\2>W+WAAœ)R*u 4\äpC!h9Hj!Xa4լUwvUGh9BbA#w]C'H;Vտffi$I$I$I$I/|mlщhjOC УGGHGJ"ъ|(Y ꒵2%T_m/~~+a_SWU#GGD>J_ *~kjȎ*҅Ҵ}DOJAUzУ_0 S%MET:RB:H?r)sBX,d,`Y+*XBC /h*JI_I:!ب$G,)$i&!G܇ޠW_T%Or(^?U6T֫۶/v"){ UM k[5AOB}:CRh/R39UFs9UFs9U[&1V1V1V1V1V1V5 qV5 qV5 qV5 qV5 qV5 qV5 qV5 6ضg-:۳ݜn9lrٸqs[[fۜfۡ*rA.eSd-jmPEmVۚ9ۚۚ*vnjvnjvs 41c1c5Gu?T>WsUr9sB!BqCEҥaU"Y(FC) yG:IUU$KPU$AtAzCЎDJ!d4H?>?bA'RʊHp#@T: US%ENRQe}O ؔ ¥+!d<^RÛ(BZGz!>T_ENwAGEU_ /҇u2 K(UFMW5]mVfa-\W|ڷWmm;aJ;+DdMgr T'~IEBł}{;3TQ4( ;DbxNf@2uT>WBG p8\NW织oi&M_OJ} f8Ooyޛ+f:}83ժty× Ѫ6N<Oz}ˎ_yrWRPD}dEx=oHpIi}₼z5;AB[0 +ePB H&3|@D|@RS&j4@L&BOP6 hi@~(id =T &4@ II &DhMODR jd~Q!Hhh@|/zҕAOI=z޿yc1cǣKI{~g!}_g]wwww2]wwwwwvww`wvU%?ߗW㬺14 yp<ƃ8ƑIj5SRk57Ԑ- 5SQH+Ro 3iI B TZPRRH ԧ۹muW[ҸID:SezXIʵ:XID:xzW=MyU*2Ž,rN5Z^U2xכz]U-\h6L^U2Ž,rN$ZS,[$L^U2Ž,rN5Z^U1Ƽ-OoJG"j:SeyctTN-IR&Cʵ:X9'E䐐eJ2@MRÀ`L#0K`ȭ"+)dƑ!ґlaFy(ބ}w?~6yߺ ^^^;OS*tI:H#ԏRg/cyE` ,|_~.b@=!ؿ\,XB@I}yjxI(tDҁO~9Q Fs_w|Naq}W_~ZJHΝz? xZȿnx XL?9 4E݀33e`H'~$$(s7K"A9 }xJ{@Dճ>{({Np>_ ~>^"A8 {pB$,~߱~{]ΐL $m_`H':X`aV>j*-ɫW =x6"AGѿy#.s599 3}Ndpͦan[{[nf۽27&ܷ7l\\\k4Ν:#ˍqsӾ\q;s]sq.s:wt뜎6G{ks.5rgNsuueƸCLn3mp͛anG 2@ HakKG!$ ܷ7ͷ{e6nM]hY5Vf-WYޓr8̸9i;uG#599 3ͷ{e6nM3}Ndw挮U^U_?@ y^<ίy:yW^s<^^s<^^s<@ y^y</9ux:`<ί yWy<5yUUSgOۦYӮۥUS::ugE)K'S'Rtttm:J*Rt7նT[e$U $$]su:]su:]s6$$d[LKiIm2I-I$I+mmmmm[miZI$I$W:"""""""}C!d0ߎ^L[ߕ)>zOUjRw@_:GZ~<ΞWx;fnGlfn¼ɻLݳ?ni~ul_K8=$6 a߾C{=ߡ5Ξi?sϹsmJOvOUjRw殫ԤCwy׿37:#`f4I#`f4I#`f4I#`f4I#`f:=y߾2OI8>Om9g ϋW=ʔ>^6km.k[{,)ϝm.^6Y(Pso<} #ޏ$>&n~y%_w̽wn+2p:f)mw˻=>|wqw}uڵ;oj~U@ږJFV22dec#+XFV22dec#4Me3,LeeML,*jfYfSS24ʚYT̲2ei53,LeeML,*j1e1eeML,*jfYKQae*XvǮ>~c[ު}iilL}3vͩ&nfgt 7.͙$ٛ}U콽TnpF toF5rpUB2q2%fώf7/@wwwp(330@ wY8nٵ1S]ht80ۘf66&wu݆Ӧn*hD _qwkmeNw7}ۖm jtQ"b@7#t\mmYeYeYeSFiiiY1kj6n*@ pmw#gG"_qiiiq9_wqwu^a/3v{spa[u݆HYiii;nI%ΰ&l{7w=YeYeYeqsȎ 4M4M4MS}˪ 4GszpauThd@L.t7;2_iݕRf M4M4M5e^+(K;Flqz0W/$/ol=s ;[l*ku݆FM4M4M4Y{à 3U>rہU^i%q3v~$ȈW6wz@y cwFhѳFtblX4[lV.Vz3@UdX,єdX,єblX4[lV.Vz`FS@z`FS@z`FS@z`FS@zN' d²DY"p8VH+$N' d²DY"p8VH[$Iv^W9%sSQEQE)j_ ]csX;]b58 B_gB@C?QBpkh( *ú#Ca dR@l15'w_ߍ ~FP &ճz4JR&i4֚ U_~?>E '}Ijn_pnDAU7h"0=nIjn_pw}o$6F"#ۦqUMbZ8n} $7tJ/I;eВOSwD`{t."" WGBI>mMNo$($vBI>mMt*1^DFM >mMNo$(D`{t."" WG}}=Uw|}x>5[E[EZllllmn|z߿J UU[FNûUAYFN*UA^"úɥ2 y.6 y=]Im}'{~jΪ72v*UPWAGuQ#6㽝~~&{~#6ϊwU-RaTndUMR,;wU)m̟wCi^\und5$`tJD= E{$2A  C2@A+Gu\Ӷ@H C"@H!Hry̸uPKr I7{kAvjR!Au *IeC% :μW8uw}˾I$_$sp>;':EeܖnzSs!s uOm탺V^oC}7oL8o4j&/f?|{;Z], ޶mImmmmn#m0` ~νp;;#b,AA`ֲ *  f kA(8AP$>~l? 5?]s\}0:kZ Va aִ jDnA"n4 ]!<?$&Hv~y9O,(jeA n%%CI l4l\ u|?>ŏ} jm_7gn]{<(i!6]CJM$&]b#CPFƃ8h6 #bn4NkZ 2 A ? k}^?}4~~JCZ4փAh4 5NM*ZW戈V[71.[mkAc*[؃=g9:<ϡ4-7Uw][0fd~H~D{>oB{v翙_|>>3Yf}63Vo+7_t2xִ kAִ?$$ NaZӯϷz~6V.#^p98Ah4փəd?I y%y%^^g}f?}ûϾw ,*b,FTHj96U50MD_Ottr>@^W| 4ƵihѣSIi5kZּ 007UuUWU^^{@vs^s[ߟx QwvEĦkw6kN*ł?Z0 gX ŷS3%̗?SZ>o{HNj}d&Df|ϯ}~oPbNojf\D5jkIm-& 0=vs$n1u3.KHNZqyt_r=ISRslźSiʪC~ 3p3\[mLnrL\>$'&=HFF~wsHA-)*ͮjh }eHBY'OْRO6淯^OΜAo> $@0FI$I$M ߐf.$I$mp̶z 8﯏}׾{1u˘փ_ ی̙$'sSp01tf{ֻgל0F#wsYK///$jȮcߛoϽtlJSZ cw:gh^f߻o}0ŚDqhR<Ol6 Aԓ@"5!2Ynٖmwq{_.r{2(AqRkZ=Mpsڮܻ0U MdZu{PϪkkKQ6&koW;\R^J}mmm$mmlmmY3Ǡ d1q[n{v$J)t1 )$f@zAriz4M[@rmUs\,#} ;/93o<=MfT"㜫8m5ʬqUs翯9V^||!:+z{}<=cI$M;9;g2{￟>x~.`־ClRT5ckAe,;,׾{/[³m 4*>x)t-sPsRI$EE"HG{y6h}>{U>LY4%߾(餒M+lO*Ϝ(伒ZB6 iZB31!fMkB#MkI$32H wyL{K~vCMkDC3Fք)ޤH,m! uK9Tbvw@v{m}3p{j݊(jlIFؾ0h۴mm6vmMݦnmi۶mm6vmM@a: a<Cp#<uP{Pmyl@#w' @ۙeLttyȝz ]$ k-ӊTKU=LuscVkz9OgVF:|ٲ :<-[Lm2ei-[Lm2eֳ]$-_ uzu99ϝVmm|yeꭳTkZ ']c&:4w;^z/~zhh0` ,^{ǾAlkqg{/ܠH31*EʮqUǟyxju$/z[xTEJIB[shUp4~zi5ks-,όxz4Tmמϟn8Aso8|1`kSw}MMLsY]k5u ?$=*z" /㮺si lz:u7:W>ˏkK./w^y3p$p#tl!j)|v]n>jUh4 By_;ހ9pwǘ;,Ѝ@oZ_ Kof }rM˨|֋>jY]ܕ]XCi$I$RI$fp9 X7ߟ}sDQKf}d@IbffX˙Q#'ϡ1 >ߣ}&4[oyoLN>xP`bK}]w~D(c>7Zmnl,k]-lƵ{￷7ﺾ փ2Z kߞYa~޼~FU-} o2%Pڮs}^}s~=fKbߡ5m5Ѓ  Dz~=}}uן{߉ 'qkytGRtyBcgOGaY'rJA`l!{!γD4ca&K5@J[==ܷηB;eG;gm;_O5wOz}uQMȵם۲xizz{x{CңUs9@I:HI$$yD^ [ۼI޹m_3VmPi}>~^g4=I'kVmPk]Wx}ZZ|um`jm]A֠}frՖϽ>W*( []kj@A"!B(0zRTIxd )$fbJb<VM/3 ݼLp.33d&fem\}?}~|m}k 4DJiuXEOy/yTҎg'9W9G#^*@=^^wSݠE!@ \f`ֵf#GHW${Ib|6wslm,Z-'!sG^l7Rrna-N,XWrUjw&79g~uoT[73+kZ֚i54M&ZֵkHANwVo*. 8uǞD*_};{|gvA.ՙYe#l%B ̠*v#imsz}][#jwݾz42vig3A aհ $p2G $p2G $p2G $p2xI$I&$I%.dIp1zowǿ=U{`G#svCf{W@}+Ʊ6ţXhB(Ay :s=zEQT>|纯{`R=]μuVAAԶZמ}x?;^ߺ4BMR~RlftGz#1ߟsz>U=^ǿunA\Cmlb1LC"^7sm興l[H *Zjow7>`AL@P$ Z8 VC!oq\ ܊ b {; `mRKҤ>G7^{OKe7 mZ3g׮.:]}7g3eScFnGk Ӻ̘]v$ԕ$9U]6Nm%{4.I!yWL,X,Ʌ,dD-4"{7޳s}{߯zl-GLȒX^Q !ywp/I_E Ds6Nsm)v`b2sXx5KQ|^ם{ d-I-EחXPWuμ繾u;4Qj-EITu3܋`lpm{'7;сNd8dکxl+zU4^ԭ1sM&ɲl8Û ވ^̍ewrIPk`{hZ-h8'0{WuzMd4&ɆM$Z^=6 <{߹9o~H-EEb-G1)ENv!*zPMvozzߞ}6Ym*,EtיԳˣCق~9`qtaۍmp۶۸mm6vw mݶnnmpnnm999 Pth< tn&uUo,$ M,FC4:hX~t{Xnz$^\]ݑ/38;Ͳ+&6O{qP0)ނXNW5.l/xy{]gGT<]&Y6ML"Z#ޯ|aq}w:ߟ7~o|$E%K$%NKS l%Ka-[ l%Ks\[Q6˙6MdoX񻽇+ ߞs^߽kuu}w|탁"Lkkf6yt'.k4I6{wg^^s{]txZM&ރF-G3 2fcN;0?(D}߿{߽uyGS1\DKR6E Tw;uXO=W VʏJδ:uјc`Ga 7ۭu}3EYĶ>?Vk ̰oΠkX'goܚ>?zo;oH)$rL?kz7kZ]ky#$/tGH{,B'L,hRRP%K֢U1BRf5TU3ULS5TU3ULS5TU3ULYFjQ ʦE]e L-L-L-L-L-L-L-L-L-L-L-L-L-L-LY@{WAiUWIMPJ\mm60X DA$ 9n  [!V2,`j3 03 03 0IRVKS)u5pSNNSm3 &ێk9kpLBsm5perrs9Z\2999Мqbg-s\.ijrm5peq5CsM9MZ\28n9Lk-3M ͷ&r5ᖙ&ێk9kpLT7kAˌ.fr)fT74Ӕn9Lk-3rrm5peq5CNNSm3 &imMn\.k9YUٔYYYYYYYYYYYY&K[,XFcA caFda20Ȱ$dڵDUTA:$"~bcef٘#1c1cՒI$I$I$I$U*U*׍A"""""""ֵclFHf-,m E!(#$3e6dl،͔ZXKb2C6QiclFHf-,m E!(#$3e6dl،͔ZXKb26֬lmUNUV[UmUVIsUmUV'4sIUV? U~UVWު`7@ݴnIsssͶmh www@hlh-Z Z4̙I$I ԒH 7wwR@t [wwwmww@fRe C W%+ UU.h&Nl8e,Y,e2řḇfX,Y,e,e2ŊiE U)}۩ef ffjbdJQQb%6ll6bmhبب*6mQblXIm%dXIl[&6ڭ]!íN!6+XfIMem-VefVՋY+cX5-el[űmd6[cX5YYlV iYWjN3p*jnM@_&c݂Rvc`);v K۰J]݂Rvc`؈q%.n70۰J]݂n8%.n4?5. ;ĒI7@@hjZΚZ󦥼V|oik:j[jjZΚZ󦥼V|oik:j[jjZΚZyo1Z󦥼V|oik:j[jjZΚZ+=E_Bw$@RzHP2 ?k͍Z7]t{ӕ?̬VbǕ\rw'|kr6jVՍX;~Xmb>zՍXߟk]V7mbvk.K_.\rw˦ VX[Yaj(?",uSƘw7476;]UR!p%/fMF i4V2jR)Q-V5[ fM&A`P`?h89/yb=p.*/|]Wk˱zc]M17Ě4i6in3#;wg{,),bIdL 2!E$f1$2 &AH^HHG1  d$H$$YޑwHgnIgn$pB%)$ $eU' ԗbU`"$}R̥'x RI$I$IEJ ,!B  $XTd*(PB  (P8s'W~~qa)UPKU5S"_8tH?wSEEN껨^N:|?A$ăq {jOYYYYYYYYYYYYYYY KB(_pTIS,AکGdq%O9^ rAS%C] 'ڎI$I$_I$I$I$I/کʥ[nGc,&d̊QkF*F*U1Sg2<VӓMbIlm**lZ)-Th6lXhEE-clmZR6شQh-*clEcXشmƢƢɶMkbԁ[ hmZ6- ZţFm6ƒ)6EZy Qa02Zjիn۶n۹B!BfgjΖeaҞ*Ƴ4Pj UO:4P& LTO5FQF,I?Pwd$/U=KU־֯|EDDD٘[ݒQEEQEM/B!C(zlٰ""֪YhT}U%DO{Q80 $)NES`]UO8:Ix}TA334I$I$I%SށX/C~uUOimխU+Usm $,@)I$I$I$H샲$ EbH _UOK$O}D|ؐ|%/d ':)I%uU%UwH ؇+?쨏5O2/~j0j0e ${!axx !'%U'RG}aJ`+_Q$_p`vUyw8w$*?K A?XWU"(^KUm~U`DF fͨ00vQx$wJ*vԇԇ!ҥUU(UK _iH/T_jooWUK1c1"OH>K~B  W\T5[k?ROQ}H}a)R!0=WDdy }ʔ}wH R/z~xRF'! $J!J: zh}p/I%RG!/U*9Z+kYZ0 ($QEQEr[\A"}Q &![ !B!B !B!  ڪqEIIVYYeIID[)RrY,K%dY,2̳,tƐeN!^(wl[LرbŋTXX%CUL U2r# AO%x?֩NH1r6 8\m#npsۜ.Fr6 8\m#npsȶ꪿[jommP`H{BT 8p9U]K|DȪT0U[U[V6clm6E`| w$0QUKRE,A/>`v;U`ҕ`/pA L"E UJGE?W۪{_`tWym`A{}^!+Qx6mͶ-ZՔ.ʃ*J8C !d[UmRjʵ\VUwVW{kt((ZU[ߐ$YeHi$I$II$I$}[Jʬy{U?i *M*; Jv(}!Up{CUTp}0Z:ڪz+H;[Vm$)ꊣD2,bUyG*.1Uu*bUYU2ddUMJN[Vm)6Q14Em]ڵ 0Ca CԪԪQx~sS" 5TĘ<)UG.(mmj-m/ʯ߹Vm~6٭K$J{leJտmVD08C)TSurrrrrrrrrrr5YV1V1V1V5 qW9Zk7n+\VsqZk9[VsqZhuͫkmŭ6h6mVm­ nAs܂5kr 9#sYU沫 eV35nAsܨs[\洓,ܵ+Zc1c1j 줔bLI[)%$RJIK'*,r*-Q}a|)קCItnѻ7Ftn,řfbY1ff,řfcssZֿpN*  !;óTTWxn mʽ=9sTS TZjU4qB.UOT]2GޥI8Hqw)LfS2̦e3)LfS2A/z{=9pʶfYeʯ/B!B!6e;4SŠ(V=J`tmtAA!(D xEU*.H!  ~0}%HCiG^؂QUES_E# J: \|`+$!H gبnTF% Uht*T@_cV)lJUA/thz֮Ër;X˻[1{e$Immmwl{.v&Dwާw8ٶSsZto{}ylkλb]W{"76vuϺ}>+vZݺ®ݺU\rj[nu+K_^遮]fnڻџ}4hi_m@#PAe2ganpiJ>wxy=$@R tn ,3,y^ZCd@3hТ4 P: #*h@[M ݀rUN0{?ODysַ65DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDJ-ԿwnjҪnbe)O)Je)JR333379¥"ʪwwwwfffwwwwpUUwwfIU|mw[nE S;OTURaA!`!̬U6V?Hnq: ͗6wBMVz8X{d                                                           "7/o|ͮGuвHj5}fx5]W4 "]mX٬$_Hdj?zwPgZyޱz"A5_]۾gtDH)ZqyTI֊m$M_P`g pQL=4iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Gggge4444iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Gggge4444iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Gggge4444iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Gggge4444iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Gggge4444iiii 8888(qqqqP(LLLLQƙƙƙƙ@3332Ggggex"E$Zd,LFuWt7w?0՛ff&쑿Yyf9Yᒄ ׯ?gLT'| Qhh =X‹" ?Z-jPi>/CuOYkPDֈc;WsJnI!*`@-,SLado~Dc1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c17t뜎6G{k2EKl, RL,`R .̕pf~Vt/`_BO?k^wZ_g_ו UFT?,e,d?~?tzU|< CQJDD` 0` 7_w럯ۯwm %~/o׿Ǎg_~=uzyWy>ue5 MXCɄ1`xx adI-I'z` N໹f2'gܠUUuq;w;g WmX$.sgin'fId9Na:Nq;JͦC aqtLiaSt1r͊Rs 'M6tIuNn9MMJöӶ!äUlNR8t᳗NݻaӇ8n4UJ`h6nvaDu0m&wKL筎fZz9ccjRkgC:*sI5wB !Wr^eׇ'-&v'FrN,N~qe1z[[$d=iG)U++ӗ׼ݷ;IvmD0Jw<7VfA$ɨ3v Sz,5[,NS%jPKjhL1)ReBJD9g"V+" DK;,H@2M@5wrvr[Gm.rBc!W\ 9rkFMfYN¬o[%*f26S5 c1gQt.K!&%2Z8435-K`tp Nw)1I;zijg2WotɩY2sZ%YYԲ=;NK9P8O}v 3poes;tU5+z4X^x*Vԩ 1[^UwFO^p]9ή[IrS 2ئUκV} RGM ^yUy;P)"}^nƚy}^Ǫ0ADy]$J( 6A'T+g5|[ٛ{xRK+}zygմ"^%иwk@ ']\d)Q]8'W4:a*yzf_^D_9o|rgs*+vv. fn%NޓgUW&YKfwjEonwi'xob{o$ӥKTwTu|ܒI$I$I$I$I$I$I$I$I$I$rIrI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$LU$I$I$I$I$I$I$I$I$I$I&I%$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I2›)aZ/<+]⶞n~ŶԫߟԒیddirV!VIkYeѭeMW.Ms[߬Yu.s\z-kBsqhI$(I$kq﯇^I$I$I=I'S}j]s{3VmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmI$I$I$I$I'<9&]U3J2uݽPJw.z[PFfig)Añ[UV+oz"M83L̈Z"M4|ɋ{OA$w99F(u}(4ӸiG$wtURn'wjޙ3|BI$dBI $I.COL9=avwn7ǖ)'Aifs|,ڊݚM-i v@c:;*PԽҭk},ɛ>_mlY?wh,9 K$,]`.lFAa_Cvr*8UH$<%k+[n{bBN,[e.b~u|Vt/MǏǛ8_uwwSdOcS~班k#J5d&V\N>6}^9EՎlURbA@=ScwTaaNifurݒT 6O=~1e_:Nrߠm< n fC!rk}e+Vj>_o'J>J$̷331W}O:hy{uk&8OWzm|~$~>MK9HRI%~][ҕ`[RKt {mg[bsA$k_ؿBv}=S֨@ "@ڠ^jN މ&fs3OR%0)ɘU+J=}FJ nZ֔kAܵ(.^Pyi PbX/XěXoc&{G $kK-v_x540qXϟիVYǫelmr嫗-Uf3UNlٮ7MY-OoUKLW4޻O h{?Yw_Pz=$j(`{?SԮh{ 8ƨj Y,$ۯ÷ҋ8@jOV/ CZ&!( #WѪ Ԟ}Xhl&;kGP ߩ9 {4H +H\Gz4>{pn)?2Eۿp$|\G<_Boǣɼ;a)m^"v)KBCw?>iR[m^ xfPޗ]϶cpy^=zdnJ#/0잱wF;fӟ:g-*Km~pHpWfPޗ]>68@ST y(Cw5Ŗʟ^[޶xT}}4EeOZ[n$I^[j[UR*UmחV*+kZܕ[UTmmDE89p9 @$!uuYr^W.Ri=׈O-4<ᗫu ks/WGelϗϿA]x Ӫ* +h8@ |/I C=ϿA $z46GJ" |CPs_FKղBRK6 +Iveb{o|WU--hOY-<Il0HN| D-@hN]5OhY${4˟,i*~;1^ynæ$~ᚷ$$&y|m6y Bx C$EH 'f?/A7NK∸x}r<|>0^\ )ZIZ|Zq$$),뭾Z5Tq9U;WEqH"l|~\541(sODMctAm7z wv.@X.(tf׎uI#($JImm*5`iSW)P$MkV{Cr+ͪ;[zMF!Y<)ஒQxY|etWV:&30FT;W繓b$rL >*O3?}禧3zUCqIWzuY#vd {_6~ ֽejI럛߫: OJVb˼f&yʞ$6p+Q Ϋ1j07$~Ͻ?UUUUUUU9I$RI= Y #ٜZ uXQ LJ/~QWޏ;aX}=fjCRé`rY#;{VМ94cvue1Fu,)@)e^u;y†ݫlI#Q[ӫWDuݵk[{yիY_=}]WWǷ<˒P+F~>\<=?:l'2@tNy {SuWdm&gIvGsCncI&b^nzܻbm `1cפ\kX;cRס ^|wz#zEh.@J08G>:W "aZ~DoRQ Fg0{]#&oC@|W_DM=MiՀ QqI$JC^=9޶ i$5!촃%1c|(xs;8SI!D<ݖc=~Ϟ}Ns[Bq i$5ОȞЇ pǵMyww7{(V y`}1`#rX ">|7j+Fr# __-MALiuTy6*U^W~lٵuZV%$:͘jݳcKY_]ji8F_fܪա]`5b+B 갮 cVy-cWW]sj~""rܷT۞UҺrml=UWbQRYo.&l y~^n uo-痘0y^uWuYy$OHn0[*tB5n|m~>I$Q(|O#AN"1?gM_(齫wwwT"36m0:ܝmeX] >$Jtu =zpco^rxcqrVd]\mmezW=OF^}T}l9lKe> > $)zgң|kW/4A%Y~_5J!f4HU)e $'+)e IABfXacph޵p_J8/5z1^1޻ᅨ/5elGSM40ТR[>qLb/UU_ŀveK˕ k(;<֬&PɡxQ4 CMhBe`Dꮅ`]=/^zz}njWqzkz/\^c}JW楴N򝻖n4﮵{pd)_\ݝ2YY$HBPPt h2Mfe H*JZwM #ܩ=)vߥ|mUU^I`5ZbeWJt(k% ֲ2hJ4D4% V\2uj t59)> #s)?8&e_V% ʩ(rt UhZ4.X(`3Pwv=Po򪪾а ;PzՁPлwAU%t,K bВ)(f)%<$>jb6 *R)m~[\ɗ)2dUuumthܧ#cGg'F`0 P.g(p'47#X6;ݎwc#d;!vd;!vEwcv;ݎwcvd;!vC[p뙙n7k]oԎ$y9901SNN:ߧ X@bEʠ Dt8,irF]%%p ̾y8,myVM|۹7{3blckt3Bp%*$uɠjUWu DI$@ W\Һߞ޿ ^g}w|s[B(#6X}  t1Ж.]$tnO _Ty}$ e >j'JC( µCm!뾒}B~ NJS{{g<״)}A=~;=Iq. c% _ ӿ i[mӁ:z6vFDjM#~7r3)$_TB(x1:0u>|UUNm--m/`&xtP!7Ü$7@5D `x|]יz756'SnBHPaa$0:RI'Qkݙ=S3^ eb4;||;I ۛ1ziiM3)Jkm & MIK\)^P$c;{UUff{@{HOr$u &uPf۔XIEv{`xI;sߏ|gNd3zΝ$޲Ik|-/ ogǔCrcRZd*v򪪼U3;nRΎOp &܀I9&ԥNG[kuz҆^wvftˬ9loI I$QA!@IBOxuUUjft٬Cd;#!m+_u\N،Q,0|*2v_)g֮H9IK_O:*II)Jĩ+KssѱN4,c00ȑF/Fx۹ojxN59e9N%r7MfҮI$S9Z]*5oi,dev7.ڣwwwtTd֯t]1זSRDu|噢-l96oj1`j3pAmBuvI,-#SwJ-7&<;ϏH:11)0 z^9YSk_ K[UU;>|Oz-Od`V6&^0ןNyߥ`T4Ur~^^g},mExۈfhe:P?ǵUT(;q\ֹZH6OBVQz }]'Jz\$]ݙۼY7*=+R:(LH$ m*4X8UV6ywe7)<:ti6(IAaH<P_iJg/<< >Z.^r{G]Zܧ~CzI_H{j3X\$ 11I$Sz x@!{$$Dyyߏ}&=LͲ!DD@L̦VVUV8w =Y׬|򪪽=bdr9+[3Vջ]vGU\pƼM8c|dP>\ɴH|uGի z3RZѹцge;9)цンCfe˗.]M)uil8Xpjw~K2>qz擑I;o݃arݳm^y0&N`ɿꪪrgoY%Q:*aTWrÇ { 73J,LZ fb*OJ49烿]y$>x+I(Q DBIBI-I9>Nѱ)kXHL$@!$'`N},tߏϟugĩ'K#ѰyUU{"LNw0nyPHco{߮Lj'^g-u{fgu_ Fl("S 1bd_&K.I}0ٰ,l cm U*]!27gJ7:w7CdKE~6ȿ&iA,@_^]sώq؆@UHI%$ Xa.!ux;}]g}+޳7i  +m{sT_Hlϡm|6M4Т""G̳3BM`% I-%XYmfZeěhv!>`ŵ[U] ?pсJbE L:F:O:_?'?7@9*I BZ%:\rTv67{N.YɮzɶDH1<39CZI5w6JTͷs,ntӣ\ݶ Zɹ!TtnU=U7www@5Rw'fwwذ5tٗu(˾֯'qF⻭;u5Nki #sk<{v=m *P *:(5|\BQ 34ʁ1 M Lmmb :N&P mvaw6M5!5jA6ml@&&6 2&務:Pɝ^xy>@v_3pS5Р)ؠ)^X\<'’Nݻb؁6؁0 ؆6;/ w,Nu*Rϊ. Ңe2`6|l*!g1nγ)9z, ^\6ΝVͤ#|/xIayg^zm lGp8  Cމ$+p; ?Y/g]rlCZblй8n,lm6okמm6clm~^yclm6cm<6Ս;33@t/[VU|vclUF֊vƱh-5Eb}kV1&XJٶD7}Ip㍛k*N[h+h۷nիne[LuD $F!4mp3ogI923)e*fHogtC6؆66؃iAz6)`aI4^:<=i2ݣ::Lϙ{YՂlhM0R5V%,S9V+"H 'FsN]Qd뫃+ԅZd*!Vrr*٣ Yk't;\;e1ub˴1gQt.!&%d+G馦Uw.ٝwO]2uer֮Մ=դՕ`Wb:jjH蒁EJԪڭԭIwW O&H:VCV*+P_X++^U޺jV5~V/BK2Qڦ$.m.[:YjVV)hբN"ReMz%SWL֦vvdsmiRw6MôDDDbVZ '=\]~y 鬔#Iv V͍DiY2I8ǨsHI~y ʖXhlZ4ԡbYVjƤ9~UQj>CyN<Z1._UMUBDZI%fa1CbdɻDqZ"ڊ:*mf aV ցr䪹ˆ6յU[Ҫa6j@Rhj61cjƋ$}-u`mWM\lmhHumZ6HQ(RXQjrm5pe8&XJVhs\" 1m•jmlmd[&Nԫ(E nU%DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE\DDDDDDDDD\DDDDDDDDDDDDDDDDDDDDDDDDDDDDFC2\ 66n Xs*6E8rerj섧Kl&ZUV d[jBUIbE]cb*^ڪQؕѵa6f)4jmmI#dlC".89sUUUUUUUUUUZZ9m9ٴmq% E!(#$.j#s\Vq2lhKlR)ǀ /GsIUmNe/^5E^T?=ޟpu!?xT*UW$_QDw~ôjLWu<Εqkh@ o)j`GOz?SWے?Su-˕+(W̧K~RxYrO jƯW5cWFܦQ_i易ΟڞIN TW藇#і \VS) XָRnKgko6f͛sle;~R~AM%o^mnٶfWdcD=uB%N^Zm_Zk\km t-VJ۶lnpnj.mS]X rÅHÅ$(}Rms?_ <ٲCY)I,mtkP6@VlbА3jO%?33s.xL >~)S7ӥDI#Ē}xywϨy촎_]YI$/+_?I~ޟe|4<K #`1;B^_w?X׍#ϵ{-#溲H_A?;,*?F*gK=S7/Ww{hiup-p}ƔH>)69FdԌo~!|Okl{$,`d >uLŶaa??O3 /YGZݍ1m> 'ϰ@4ޡYMbƉBG fkIo >G>x}ݎ`L}阶fOg _oP_b=I$qHi{ǟy@_GHcGd *ъV_{sڻ—[:O 7ՖX ׷ׯ۾o۴5Hsr${ڞU-Uotzh,U8}iϗ8. R+LO@;((y;ve0-U4V+RjNޞݑ;vλjjYpɳ@lygdBysId8{=&DgS[[.AӆS KiG[<ΉkmtkZ:Nȧ9]W/ADy ndوf+2?+536~ﯺ>˄s)V{~~KC}4HW:{:5&tk?_I$;uuֹO#ϴj]iSM]e\i4]uӣ!z5}GO7oj߲MsoM޿ n 6 @ @ @ @ AB f$Vm:vIod~Oe?a{+͍36d1kmO=g+W 'bKINWytSUK-pUŊ ..2O#h+;mEb_1FJwDOHtxhC$T9nTYW5_ͦyuxIyqa2Os5'ڥUToHsk$]mE9'2imÜScWbyzlI|l/cƠh*$\ѧGWiJئң$8xSʽ_SNyϵ+ڧvdwBa3"ECa$a2K2! 0ȣ2~T2AN$anxjc0HyWjOxS./%zO1nnm޵ܶԯ2qWՏDr‡苕xWy/=5 *ZVYKJm5MhSZ2M CblFʳhm BΥI'a|cWiG8pLac bńcŌLba&.mW)ZRc1Xv>Sy)C #7 'El͇aF',[CB *:m0 j$Uå/9ƆlTMCb6m h5 ejG${6`ikչߗ`+כ~[b ѭmH\[^ ̿դ64V͖͑LYvZͪo^#PԥͦZ-ZMZLʸƌkeՖaf,hMYZ &RZLUjՂjիV\⸭KeȦ,ٲ[6m &Ujի+$Vl[rJbMLY٪mUFҪؓ!B!Wq>1>1Cͼ+2_yd~ۇr65,lkc5cN61pcXPr4aJhS G`ccX cE`70ѩNKf9Orܚ5pSyv5|9A,Od'+*ܹr+Zv׶uծt0a^rGr}T)޾ޜ%NW$0!S+T(J,j+TunzO(=;5z̯/ͲحllLo>AKT\^%}artΘík5| #5}Xҽmu-w+MXrq_X9J^bzNtjb^W*rz$ OUUUUUUUO៪ )~?PfqL9MbQLƌw6F4W^Ԭ!lM)*F(,bm`|=-nYÜ1hlZ5IM)mly]+&)^[2tD5ͮˈƻ' '-ߴܷUXe>r~"6~JDסQ*1XZ)fmUjM_+W5?*u^_=4j~r]_WI\jIĽr6ˑS+8~2YK>d|4%CKQr3bv21 zO/.INlv*;d 6 ´Ƙ46b2YSiK)P"M#I DIi-*[FpveGüNm3n寪MpQʟU7v6lٳ3͌2I|QQKӽ})꾛\ Urlk|)ڽ'G+5te}+2$WՏޙU D]U~;}g~k֪[|=ğN蟒yRTYOgsUV:O? B2 8JOߝEENI9&Od^;W*j[__Nps.sp.9ussu˜˯}E˅jkmMmmFemϛOKmHKdNI/rLHdI$8w]sAI)ݫ$Ι-Na$ݬlĉ$߿fI?ʾA տb$/>wVo ۉ9E2-},T-b}:=ߥ~Gc,HhsR!>pMbW-Xls=q+g͏)^uOlnXJk)y nє11Y?EHAYlfr<㋩D_M ,MFJ&efT>IU\ǵ蒜Q)Uą]./1$zL>WZgz%UM5-"X뢖R$B0A&@F"sO8hu C^z ] &yug8 TvdUp*i[7Uzx)ST<(HUYU ~娏TdOb50-LrFRa?ڟS)SJ=UW;Tj ^/=&cyQK8J RO *x/u9s؃\/оѩWN(J^V]m uKOj>OL*_m;{g|ٳf7\qrdɃAfmsi&$BƶSTx.J`)^U*GvA}lߌ鲾z 9i|x~Ge>ejUSUSKG]C¿A33>B_B}4Ү"֕B,ger* "* 't@iFFIA'=2,H{"HI׏4h/WyT%yZ|`tR\PX-%{E5:F>>i5MmI$I$I$I$6̪-h6ݯ{{nDP0ҤZVbЦ{ά 8R5"݃)R$UZvS;Xᇚx'ST +YCm mZjyC S|WjB~7(vGrA^{MFSS#*Ǎ}$O?6|5/hSnOVjUVK7oƳVyɳxpsFUZZ&δCoZ=^,eUC^U]Ul!7WM1H-Ax9G71IQR$p$pD/,y|qd뜜qeu͒l]ܲMMwr6@Gkͽ}odušX  HC|ս\-l )ónp)ԯ8z& yt_1 ڧ)4񧮥o)=4z=<'ٙ*R{kS맳骏DU.JT 55O|#?_-} {>e}s5+Rک[8Ph[x,ɸrn,E6&"ѢjLK9CIjNg59%%Zj*S9e5]ZD ru^[]iR#Q^x*?$յݭU犌e<ŨMD2Pz%O~fj4샪D}:'OJzdyHRBxCƟ걷)$"I)#c19討V5f0tҝX9syU7ET"%5~?T;TF~<Ҫ҄>ц R)jk[Ma}}HzA诖25}ZůhP_AUV͛[MWuֻ|6R.VO ezwWWd rnjF4nSq(jߝry mwgg^xSM5jOWڻתVm6S%|*%lI| ŲWTN~cT@PyLR8r{|Q&JJ'v߹Uծ㦸4}GTiO"])gSNWw:x9E=iOԋDx?m.S쯹קF=T}~ϢeG!%v~WST+Fjxwo7c~=r jj_MC+1|%=^Oc?ѭ^)nXrOdP<E^}U W>Zt'OGOaE?hx'اVHsm#YCTUB߿n3a:<&OGm|6/ƌ`6m6Htv+[^澊yA_݌jON }z/E]=4>14ew{0W_"5'uoNMKW[ 664҇!{R {N<?❪_,s (y\3%+R1,)}^mL\#9OBvSj퐔Jx׺UMZHňcHʝOjw}9ն`kjwmjpQnl$H$m~Vj[<)ҏuoI%o4ʙj#3i3Y2sDz^<^/t*<*^"]As˗/**B{%zNε=?Q>;vSE>W]:It0jxZ'OmmyHA kgUL+DDDDDDiV_^m@ՑVcLUWzv'h\˳s9i E̷**4FŴ(RF4hZ5+b1-Ur͆ADF#aTl-- 2 4stU>Nsjn-rAF8X:jvSH)ZN[+Rޞc>[3p]leGpQ\U<9 -U:n*sw=QzȘ[mۤfdhIdYfTj!W/~ |9r44*#y(LS_awwQOMEW)䒜A6q~[wzOGA#)YFZeUྋMaBjV@c[j UZ ap D$( όOp|ܪU*i'#;g*Qg*ItsqXծrŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ.l,-ŋ,Xbseŋ,Xbŋ,Xbŋ,Y͹-ŋ,Xbŋ,XbŜۖŋ.l,Xbŋ,Xbŋ,\G9bŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbmqbmqbŋ,Xbŋ,Xg6帱bŋ,Xseqbܸڧ2ܮ.en'2l,Xbŋk̷!̷\jr-ŋ,XfV1 CUI' pcsR+I[l$qYĈHČ..W..$ŬIҔ1# HHɉKa%I 6'\\u5iK45 YUqԝ+*¼Qz9r#ӎk9TQrZ'+_D~?:{½,]#MMPZ #6jdnbwJ'>Whdɽ6֭5j֛%%2vg67m崶UtîUihBə" ˾@!`64+,!sqca([US+x+ tS@D wb" i=JI^'NR:HQp"6d , M$.!qi%T܆H`(!$Z&w ŶmߋmJF[p**!T&CEY1CV"'%tr"J,I fl, +u UeWD?JT䇶P9<ާ2Z)Fu\UFlxХv/MD?)^/ 8_cϞ |1t}N` };t(|<{}|Fw/ &ޏw+םkgo/_m[}罍]`x::J6Q@7ŨyjSckﭸ%}Sz׾WbX7osulάO gנ[gѵ{z( oTs;zm\Fܸ` \*=yh ({eܻB P*h9sѹ8E(@Zz8 md5 jXzEw:ZЪP4JIR 2OHd@ $DE!4= zDi =RP&ORh54SC@ijR PBi'' 4@4z 0'L&!i{vٵ%GjI^({!KRB:w]%rrrrrrrrrrrr[VԢz/>k6K9krfn\l\l‹ .t(덚Y,'.e}6lvM9TXKѣᶚr8c9JNFʶj:4tj5,v~F㴸hяFֶmƆe!rL̒7$J%$TEḨ#٦Ői 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!CL 2d4i!>6h4[VxvjݯAXm[ho,6h4ջ^ ]ڷkջ^ ]ڷkkVx4 vjݯAXm[h5 v ; U$XM!SCkB2X @M,2 @"ɕU$;ℴe,#A2*Jow?so" " !xx ?˻ٕ3+f\̩y Y̝S2Ԯbﲢ<)9n;v/Qz nz[feo9wv92sDDD8ݽGwww;UzN콗e轗_ eWȮEw+Wq_"Wq^:qۏrt><>3[[SySC 760[ێ>3sOoo<Ϗ>=3<3÷O.-^./TZόVzk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fYk5fY;9rcwc/17cu̲u1vcylrds^7lyum&>r\ѧ5sy.᝷7gd d $ sc[|90L|<&1Ü=iyvBd:OǡuBt 﫦 64's˝0c>iH`m%<;f1 g{FccMB0o{s;L08!.w7lc znyL2zOV$t͐ q?X?3S167N|H0ƒ|33ʾg&LHxlihOܶyM4c!Fo$tFɆ8Яvwӆcϝ7癏/,#dhW~o 3O)嘑0{\w|r6L1ƅ<`5U}c~_#*Xu;?5 6wo׺?ǀ#'׀}x@of<3 ǀ =x F4<:ONڹ]ؚ`x=`gs'?!:1>2<^z;u:M0|@mx wו]>W~]]^ O ';a <~v`z?54?^^m67?׫7[L맛1c1c1c1c1c1c1c1c1c1c1c1c1c1 Ψ,cf&f2213E1lFPڣf&h19T`L`1s3Cj 6nb`c#(mQ34YLde 0&bf0cٹFLf c710s16,cf&f2213E$vSޫz[I&f2213E1lFPڣf&h1cuהr|%-|>;soχπo7ϟ oϟ>>/>|=>|y_>|{||| |7χπo7ϟoϟ>>/>|=>|y}ivNd277{{DDDDDDi67h  fafB{&m&m&m&m&m&m&m&Kdmdmdmdmdbj,T^ E119yzfp{vۧ:L'=<$hEuTC=xN'xOi=yNӤ=Ri8+'$IzL4N&M&|L2dɓIIwIҪ&Nh\ "q;SDݷ4 [mii 8ґUfH--KZ$KXXPZ4Zi)jOgL&ر52E$I)$RJAmʐjy$q H\Bi hM X!̽:{/7#mɄ+~!< 7^[\BxΙӚws+cƲWv2uy3||o'6 xz= 2nʅ+*d7|#mɄ+T)TUM9DA];_H_#ϟ-mmmmmmmmmmmmmmmmmmmmmmmmmmI H_C;#^":&v}hNy}m3ыwy8=Dk̨w*{ /&" ywȈ옙]ouԒLV643-K)K)K)K)K)K)K)K)K)K)-1c1c1c1c1c1c1c1c1c1c1c1c1cݝݝݍ=3韓[VXjݻ~YS35fSJj*:3/#@_E^wwq%oݠ Ӻt^Lը*խ +35j,Dѱ&fh;in֨Y35w{tva}}:^] ջS3Xn֥SOuq7tU}4YU <ۯtݒK }$EV<aaaaaaaaaaaaaaaaaaaaaaaaaamLGb̙ݗ{TXO{},ݧyX#޿{mUn33]ggzwIt{v{7q[s=l)9]tvw)I%9xY-K[3=e]QtweWMAfewg8v٤3Q|qs\\dsOL]UIJVn$|I)[-g1R[q&coMJ9mě9rۉ6s%+|l>JVn$|I7vDN ?ʹ˜w6?JC!9a7i_oCa^={z{vId˶Id˶Id˶Idˬ9v#l9v#l;[D_DD]."."""""":"":"""""":"C""""""軺".tDDDDDEtE$&!1 N'3?3Y5yO2/-Y/]őn-on܄/sA-շA&$'>OF?$G#aD ?$F}'䘈O1#Db#O;wO=xwq3iKwwm}ڬRg+afafa}r}Y~/KvW oI$I$I$I$I$I$s9y93^NL31rc22rc+'&1rc+8y938y93.YpI %I$I$I$I$I$I'ZB-/1k/;SY^>xZMd?Uz|k5UeTCWϞ;SY^>xZMd?Uz|k5UeTCWϞ;SY^>xZMd?Uz|k5UeTCWL̓Z啶۸핶۸핶[kwwjllllmdY.KNw`" ﯟ>|}}z/}x敻:׆fEfT]bAԲuĪʝzwq*\u⻸]K.w^]Mw#X%Pu,zwq*\u⻸]K.w^]J;]x!|sgzwr<,@IE*JB~2eJRT}αf͟k:"l*TI =[߭%04cJ1$ьcJƌуF0hю^1 uxaE΅smٻ;x3mK~://F oraev,˅JWUle0"U(%R*) )I$ܘY]2ep̸Yf\,.lw&Y ,˅eVWjUeVWjUڬmXWjU!0)+Y]Vep̸Y]˜ڬ.Y +Y]2epUڬ.WjUڬ.WjUڬUER̸Y]TcuکH [Go\RRJSjժl-::}wSW9wRb蠂 bYx/]办ky@qpOMםs\\\Жig"^\yd"EɧWs4Kk]Kĺ]/軋|K,b E`X/ ˋq^zaK}Ǫڽ}8djV[tƘc&&4e&[铋WK'I:cLi14ƘsWVSuK1WVrj]w4iÓcLi975wiu:WVScLeMcGKW1;R)9Xoc-2-0"ݧ$\/Ĵ0/^;Np45:I/,I'ewrE..zkxz^kBjr9,cqcUҙ:&4'Q8s#tɓ~mfg&(owt#YO??>|~ gfNt̓ 0 1g'x Ul9h)ִ"9&ZGI\{]mm`ݗ.mYVPRAĐYom`ѹoH}̾}~۹uk慑].kM8:6226 1ff^^ڧ՘_cJSo;}o9{gmusv]sܽ=4˻mee{@[sݝl&u5]^;MLə/)3$%m!T RĢ"mV\yT!%m;E}5͆LbĪ"@D!D1Fd]ut뮎\-$m}s-Bb@>y翿<Z-wUݻ߰wQ]ͶM&~Ɛߍ|'s'bЮ]ӦU};h@ae/[mM6z\t̛*fj#c`Zs|o_կ}y3$MRcspun6~Ep_V۶ۀ fF];6Kj[Wߛlhla *BZKΙf&W<4:4~K Y{yŬk ٕ֕3&?.9뺭w$Nun}s;NI2x9^hKy׮ڃ^>?B+l?}*ϟ~RuI_OYUr;x;];OYNU59NSxwQt#Oi|Ği >bL)?{g|לJO_,J Ă%%nv ] * +qy*&T7\LSxN&bװ8bK*^U6׫ M|mݗow?_ $/ V-0ZLZU)P*EPTZFnT+jAP[._yyouCi5֌-''|N{{{ |\LxQ2\TъBHU)bfb _ eBvI$əӼDG?9>rm/Dpi̖|r]Yo+\篜78 ]i=BGűU}}?<~;}z[d`]UЄ_̔2[o^o=BFw$ ϩ[ 66<5un﷗HKnz|v-z֓32gݹyܹs}kF(_-Ylbcy Q2ģNH#351b#Gp{ ^^Sj xyK)Nɭ$>O{"~7ùezDI30CXCXFfUhn DK`_RM! $%?}H<30G+b$!y30DTVDI?AROJDU-mީJUkZo?_ `t̒C 0k 74ؙ$7Zbw{TW7)= h%rmmmmmmmj/mm;] d':óǓ|<3yi1cfhŢ.X# $*K؁11m/koL̔2c?Y{|Dx}d ,R0,\C`BI{ChCip|sĆ-AwKj<1pFԦgb_wϦkB- iDI WrDvpm-0BHA? .in~o:..3%LZ OMشEF[qK`Vb♛3|v&9>Vs")1 "'nQ|9ȵޮrH"R\ZZn@i]7rܢ_p?R9q L˷?}v~]_gJ{TbTvm!$*vm-P4 l_K!}IF|$1~yye#;rDLL@Ϛ%xөKcU }䈌_]YrugPK|"۔E*m4\}\_` Wխ4iXj%o.yHz"\  0_ 8jK ky_oml$0 M0 +`JV1[}Z޽w[ߖݻmǕyOD^x'$yf'dkt]tw|)!w;L0V`+7w';226栋#fe@`;r5~{8%^wiM|o]1U* Nu#4uV^Wu<9s5F&ej/УY72kdɦQg{.{wx=D$&H!*MZM%K`6T Iz .4*{y;'=.y Dd$AC$H%-%@"Bђ5Z9p+M&NV@єu/Usn:O{Y2q6Ux,f^L32Ke#=DYbA Jau @ %4(G`hw tE,lk=K .\Do_}ng;s&thc`64vFb`6< d#PC*tDKDRH"IBH#IwڅPgç>;m'O5IܤV4BHbm$Cl/POfD.4ӻMx #z2nęU'[`IԤDRnC$$P8.d%~!`/Z{ϝ<< /Ո^KHDvm!$*R3i3օ&s糾՗Ξ{r8#ɹKc&nv˖Wޞ%cs13[LaLaYGM)] uօW]T$&܆L̐y2d3;[ R\̽7:=cV1*AcTC;ާ.5{wy<̲!2;&vd!ak8\;GmbwvN1bl]ևP=~SW|16 D0Bns~w^p/kx뺀#|ްZPH5y%'g9̻Ιwݞ7]wnGKmKrXI'9>]n`}8|"ǝ3WMū#vz7ww7@ݜ U53}4q\.+63)f=Jv&u׆^_^xjծx/Y׿mzE2jBxS1*f"&LJ ŏ0YТӻ%N{wWv+4׼j&%!)3DB( RAHߟPKϔcc֌鯻&IEm0LI _ צkA2܈oP$ 7sU<^ Ϫw"|uW\xO)k5$Z $ BT/7p&1Lg<1\>y_}徴 :ŗYzu՗ ܙ}^_M6y=Y H0( Ih&$ D&#N"ԐsGnDoh+̛R^fȞ7}Tyu 腂P!f%|Kۂux^};瞿%8g`Ȕ\)&%63DcBIF\EqԒu,T㖹8=afhe)ߊz+w' TÇAA]$QwBt]? QzZdbE||||vϏokkkk"#ӑ^Y݋[̞Kh1c#~fkw{Ϯ$qP*yV [. ʅ&`grȬ׾{ ŗݼAoOE3sjy"# #feP=gVZ~'N+;4W͋o|fǾ]BfLo}U 1'-B Q$BFԻ3OwmlmwJdɿVgi3u H$Q~ì=l5{"LmƄq46O_Pg\BhQ`߿>srx-3>}D*IH~%@[G{!矆_PccU #_7x̙y})̟ z4);s/k{9ݟPvK333P s, 1Բ^u9$[dy{{;~T/_D/lB>:| ͓ Z[3T/Li0B3'w;y;_SIBfmDF3noз]~|zlu^6su_~W֥V쓻NYE\ Z63*B޼kF;u1YKM|dTͭozNyf)y8Q¬^&T1#E'L6'fLY/;~"2ɾՠ̡2Nɝ;3:fHaa  xfüaΘt}A)9}sTg?Vl2mۅ|dOO3 r^Θ''.'Ǯ{FaJ#̛&U #j!ݗ/\D nn켙5Lɱz*8r̛&hXV^uߝ<]Ͻ'V/Vy fT*![jHI ϩfF$%g>>w=\ f7nQ $Bl|Kr߻'>yy•H4 M,X bÔwd1e cg_?>wyFߣLi/ĐdcmLpD{iq3$TK4~?rM $0 l0 LM+VIk|Hƭs[zEoHWMkŭO k;宿{ܕmmoo 'w;NU<'iWK3M X۾>y|=yռmMlmA um\Vc.:ԝ3u4 |wtӧwwae}yf bNߙ3 69mXψ_D)"Rkcf=>۾;mm0c+-SKZ\f= @'HgalaYot=擥|a71Ø6yL|ag[swvY7Ru_euFFFGAjМx'*d͛OU0V6x8;dC9 o]ʩ"+ʵ Lb^\m۸mm6Vl$$U9SDȶfpm1 $Z(Rs=LLB|FsOg?;N6LxXlcIurd.;t/*/CW>}sss\f$0Hxy,}m4,B%~ LIfX:ssjMgi᦯Ҁq( }ٟKygswK3Y!["IEe4sf$-\U2__P*QPa"<~@ˊoy~fyU4b Ɔȃ1GЭms_o!BIBR&6ӌџM,_7발'tɾdټɤYY`X%|ģ @pBgs>Ϸ_WI l1#1A#1J):UQvj_Q{bɇ+'mwwgeܾHVm-'gaajTn1,Q0sQNo5 ]T^!FL53&.P*(xwGmMwUݠu}NMQ;xj]#1AF,/flp33nvj6{n }S1I+-Tntb7($1$/'G9翞NfU_Qtlٟi4RLߣ&Y$`!TĹ$I% ,K3$DBS}ٜgw|;+ekhsZD1'ޞ: <!jYq,K3Ģ ؅Ry<ij1/L.^wd }?;;0ٲ"!V[-E^ZӴ2IgL)EZr9kC^S }®nF'#)"K>cgcmz?<-?3wθz{|έ륺2KQij4kѸ1 uS|;|=ibߑ,1Ȕ1EӾm㛿NsggmR6%>~Wb H*VZ$ PBTbRHJHRQ$JPRm_'6˽=~}{MɩWgА+-m@T-UH R *TR *V$(& WA1{=%r5?$ H̡%j%k%KXK,Tk(-JhdDľRP~Ң'*rZ(#%RCB얈,BP8KP% NKDdZ5RdbZ $eU`@FddԋPR*@=R?LBM&hLɨ6MheŒUfXbŋ֒bŋ,,Xbŋ,Xbŋ,XbbUŋ,Xbŋ,Xbŋ,Xbō+,Xbŋ,Xbŋ,XbXckEkBXK a,%XK a,&ZjERs?9syZ'6lٳK 0iL`4 0iZVͳ6݌c1c1c1c1c1c1c1c1c1c1c1cf͛6lٳFWjJJ LT?fFdfFdfFdfFhfFdfFd ,Xbŋ,XV-DThZZ+Z+$h2Y4fљRjMI5&ԛ"U?2 rNZ֜ e"[,"*M4ҢZMF\ˎ+9vtuJ%Zu۷[20rI8ۭKu(junn[DSvtq\cf..32"U]uInۥq˗qp.Xm-i%mQhZ-Bl&ɲlQ(Qr\+Bu;$FUHӐKȎ* B?dBI k+5-c1c֬-afafafaZDLɚ֫XɲbhA"#]]]BA H$ MdvuV9s9:JcBA%΢XАIs4$\)* :JcBA%΢XАIs4$\)* :JcBA%΢XАIs4$\)* :JcBuۊv][n/'>hKN]n(ue]QQ$-]B*y|~ʖY`Zy!ꧨGE_z.^T|#Kwҩ5GƊ>KRU{jBU|>@k52dɓ&LUjʢKyu]sJuUJmV4Ɛ1MH뮻?'m4mTTEQF6QEVT|殌 UmfO~筤؃dݓABllF7b vCRHlbMom{$HHk[ʾH666h0a?*U44!9ݯ?2EVi1fabV̩Q&KЁ(`Popmék)P+\svwwsfw7Vk7o[m'6I$I4? LO2xO}'ͽt߹YGCc~}gۦOa߹}_n> ?nO{Pܟ>um}ʹv}}]_______{5o]oGm vA\!۷w9|bh9Wr7vn9Fmww;zt#9ޝ'y8iHwx3INR3 ww;zt#9ޝ'y8iHwx3INR3 ww;zt#78NrpґgoN4g;Ӥ' )r=B8DHE$ $,IW]tR/󗪕X#zImqT\Zm $@@e`Mdٲdfd&d!H16k i'=UCmC~KiC6YaƜxxKK;|ٚGʰ8QKrK)naX?X NWp. 9!ˇET}bV%Kb ቡGK>xD\eTD;C/"ycЬyC\+T0L&!9)'Y(IدIOb`YYNɏl?(ujODWʸL*??{Kx=f%ԺI~CK4;ԽD#_25#[25,lKb[ؖĶ%-lKb[ؖ7[k-fEXbUl-[#Tv(^K4G|~#c taO]i>SW ьp_諨ppx1SনN)d/5L [][nm*;K;Jkme!(c!ڮco5bMGۅM2d. \22XҗۅMZXʓ lL6SdGۊVĭQӌm¦G9PKQ8*lՉLM,TӌlSieqT)i6Sd#Jd c&E) <.Wr]/Y=?/}'x#8pÅZK }a\ǡ10t`0a0ccW_T#UUCK_pj1 £rtDz$xj 9 ..&8pG)U}mC4!3srC,quܫw9 sr [3JͶdU_[[ƚMn@-m YC}}Z\;%=R~R@6ڛS@(Qhj"SLc͛^Zjs]|]wwua}mƦk[[[[[=zqzz/E (H(8D yslpw]˳N:'6lٳd.Gc˜lx(!h4s`AA lko1 `q&o]HLͲʨtɬM2Us5$SW_0cr }仏;ڒ<} aVXqS,cьcT(ճ6ٚ5lͶf[3mcEy%1~> ",m ",m]DE$clH6clH6ؐ ",m DXb@(6ĀQclm"6ovcRU`>24J] _H._WEľK1mMYϯ׮`c c1?sQbΎf=Wzqs8{{׹Nn])[׹N[{ҝ=)~SՋNn1((}%^\USd^fT\6GOB P* BUKNv;wya&2cQ(ՄU;N>8ێ<8+P!WI9"vL=墪UKraF`20 Œe(`AP2,PFc# R0iH  APUB*mTRQ T,#+X*j FWUB*a^RU 1dx83 G2UNhex9KT-VڡHFWE)ex;M.D.:ʦlwx#5]`@]G8B#lT=č5Yc8\8G ̗yø иRpSW)8q>OppRN軯Kxx>uNIp *CTꤜ$Nʖ*^b]v.*TbZm^kvhYk%GJRm e~jUoO%._DDDDDFmk_Ŷm,b,YV,#8 2,#aa0cp0+ *Gmh*De Oԝ ɩ}`BUj UGATW*? dHWi{u/HK_IG{^1VU*a~N**{.%%|YEZXD} Oe+ʤ!S'!r=|aKij%%Kꗤƣpԣ_Q$^eDCd+C)JY+&TXjU]>_diNR%Kk6DDDDDD𖓲^以ٙ$I$I/UzD|*:"G7N8>K)qW; Cp36lQ#m5B U!5_id }5K = eQp_QCt}/z'Ԓ0S ~T^cB}J5;(]ʸ*KYtO|^DŽO`qʈ#\+_#tE_ǺfkٻZnVUfkٻZnVUfkٻZnVҭz4/$յ+򵗹࢈DD{O+kvoV~^V,fe3&bfWYlڦE-,lkuHF۫KW2lW.ΠlL]NNL*z'tQ_9L3$̓2L3$̓2Nu9SO[ں>W沵^^{PM#WmvV%`M$H$@ zI:޼#334 tөU\u1]Hu94xi9}'r/sO^&;B%`xz (RАh;SGCc F-01ҏJ}wwyn[m_`$@@ afСm[m/> Ghz&=xdrds-mjU.OQo0&ʴYQrZC^r@9xx5] __Pa|)D+UwCֽJ' ={BR%BKKJiBCԽRC~2e;JCK%-3YI$I$HASRGMR놉Q>{*><{IՔ>s͛6t\tֻQʷ%\\,Yv.0ijK]wBwqf=En\m~C!axG"|%KňBeԾ(Oxv!!!ԪV|iU?QOH7PXT.xC*3c1V,XRp5'O8( %D^ mmUQlCN%r _yT>z‰ԼHzh?¯'CU= DRjRܥ5^K|U꾩h2/j^"K`K%_\O:ڧU#M )K!?Z_/K?zZ22>X&ZrS -3!QOT=_|WK}QMZ}j)#K F}zUOXphwYJ=p79Üی~d;h/5XøwKC1-JdbBa2ԝ /`$mm– Oؚr8UWti!Hr_Į{%>jSDuO®J'e]TCvB:'}SP_)xЉ넞B}$_)*(Bė˭[mڶD{Q"('T U>.v\w 엺XBW$.  RҗPi-&<%/=Q=NiWBU>|c1b{ovͷZ""""!1hI] bcf͛6_A{(666IjjCmbX#\%:vIwATCtURGws, CƋr ZP-M i d*_$IxdW%U~V߾?fNIy6񪶷~[|A^$,ND.::DVDlԦZ{aԗ%WTjFV*|>/DT> U2 5-)f͛6lٳf͛$I=]<%reG+}NCZA+%r;DRLjU %ĸGJV+QO$#ҕ_(,iw,9/wHz@;?δұ~ڏ'ti>|? $^+TtUG ) b5^j5MWc1c1c1RLgZmaOSJ_IW~|eJ'Bo%`yym_ڷVկTR/˾|\kvlElo2)cTr2 Ah4ÊRѨY-Vd$LdHF1E.厥kB 2ˈ)BZ+u)J^ximj""IWÒ\(255Ա\]+'اH< NGz% }qwqR%4:%'*_m@e ]%%:K% Vۭv<5%G${c C J2vOJ_}UGI/8Kf̈́DDDDMmM5FD%^BrLĶRDhDDDFMM1""#kikijʲԖ&5( ќfkeZiéScLi2ZV4ƘcLi1LiLi1hiXES &FdX#-TiNKvUJ 0;JLa,Xb~p\+Wp!W'/?癶mEӴw8W+e|zH|'̨!G|='h{}^{mw"""""~.K9mU%.HuQGQBA*,+kk[[^$"H$"H$"H'UV6mKk@ ,JS!p8Ҋ?lmhh8f3c⋤ZARJ j-ڢlJ6 *6Yeebŋ,XdXbŒ-E-!5f-Zvlmۍۮ͒vT]nemU[d1\r9\cIڶkv]$[vvdfauٲNշn7n6Iڶ4լnvi"[7]HJ]IZ鍜(Zq%2kId8YeEZ@%y} q}3f͢""""""""""""""""""""""""""""""""""""""""""""""""""""""ŋ,Xbŋ*@6|NO韣ۓpdF2\8r_'pIfL2dɓ&L2-UWRzATt޶H]ϋy)ݻ[w=^ٳK+uI§R8]P\K݌c1cmV۶mM$D(fd&d!H1sBcRXcRXcY-ZB{Ǖ[ES%w"ӓ✚w5N፣UF4w2\4Ʀ,\Z85aWP\+ YZ:MG&4&91*ɍ8+өrrxKM]T20jPR1*RBЛmRkm'XŖ,e,YbXŖ,k&d!UJK=P䇔wCy 5x>x Nii53 x/~I_b9¿:D}oy=ևQ#~Iipݙ6JІX\Zhem\j5Z<6ml*_/I%VI=U PVIk@i_/X4/| /=. P";2E(4Q@uݧ;3 {/ݐ p!hzo^nYL;k;ܵ/wr ҹe*nۧ[mViVom[ԶTs1"mמu{=̢٣}vJ)Bkwa7UU=;mU{JQ>>sizslOݺk t` dڶ<Q{5RXJp 2z=(k4 XwTePJXJ ^v#L)V5Y+Yif)Ftkm\EU[NniҢLډhjQM)OԞ2@2%! hB 4h4 U$Dڍh@ =R A$zM 4d4RCPdѤ=DOIICiRR!4HSکiEOI52=F@JIE[( RUUޕE_Wǿ>_ܿDDDDDDDK._...Irr$..........\\I$\\Z@""Km3-II߷~R>E)W8?u!l\t8u!l\t8u@[u.:BظwC b-t:ظq bC--t:(GlXǮ/H}aL϶[lzfاknXm[ho,6h4|5anס7 v ]ڷkkVx4 vjݯGެ64=5anס7 v ]ڷkkVxvjݯEyan׃A^oVVz yan׃Ao,6h4[w2JIV*]%ZkMui-5EHZ6ݮkXN*c 2 X*c 2 X*c 2 X*c ))įIƒ3% -S (3mFV*ʱꜨm̢aMCQX'I)+(?h T%jZՊkV5DUhՒJJL1are|zG1"?O?mwwww6mͶmwwwsmۯmmm*0* ļ Ļw.ܼŐ* T@qbD:!mmmmom}]mvmmmomoZO:yݻwwmwnd&Ld&Ld&Ld&zyw6mܨI$I$I$mommm䓻mi$mI$mI&mI6mImMmmm$mob" q=SsϰǟR7wB0oM՘Uaq.p(J7Wp?6pـF+.re `PU 3܊xߩ6?)Ϲ_76\A #.{vM?mѮR3"gux "g AcgH;#+0vUdLH1ldefʰ,)1"`Jgpݓ9\r "f$L;*&p6tD(G9G({t{Uy^W{_\^{^{]/> z<OgvpُxQt(W((4j5G(F(]FQj2FQ+r+qG:j:QFxa<C.a>=5DBa<&CKGE]1h$ȨݽmL c =8\Xn".x=CRyWIUuWBz#.:9\ShKR)[("*عX-k.R9W'97Tiۋ֧Zg3*'. uf8n\5:8f5ZaFZV$bKm$8hiFԣe(|ȟEj5ho_>{Mg'J߿{mImI$@ݶGA߽h$i$J \I$UU)I%$%Uy / fM$S$^"wHͶ<޷@>ă }www"4cg>^#C_$!D s!Cy`h@ 0d A =}Y~$@ yIz zU8/j{5*O˙D@Yk~ؤs4ā H/nmMH_?[ETj5GGᅰx{h$"D{h$OI)e/~oIz $S$^w@>I$Iw@I%332I$Im$mAڤ>s4|I$ffRU2R=2iSzeow$S33)LI$N U&x˙{mImI$Im$Rq`o޴^==:Ϧ\}"6I$I$I$˗S;P}">n~y~߶}ϋ{kw=~ !@UR4O P{A%yWX )p}ͤ0Sm !e6 ,.IH)h$ j1[h$XrvUAmh$wxh$}΅Uq*TRJ*TI$\$ UmBmA$'5<uo7'mdlm $4hѡwbŋ')-5Jmh$M6J4NfdJ2r_6H=s37[UOmЪ $mI[mTu=HSǏh$mI@MmܲI,Xaݒ,XwR$ѡwbŋ&pTV6,*mA$:;wwA$4ŶmCiH [s3&JFJMr˗Nd7v$I*˪۪uTSwUN$몮U\| !wxh$-;;4Ȼh$mIm6h$mI IR˗.\VMʒ^EVr\܌oA$3I'g''''e˗.Usr$04pavHb0mm0Sm u\*+ow_6HBm*USmI ˙&ɲl%dY/3&d' ə-\]Um@yH<WL̚IBn$ӎ[$v@!Uы&ܠo^$RQ*\E?>ׯ^zנmI]6ma$I$IA$Y322-lm6m mz[i[o$-7'nC!Ðp8rY)%Y)%ŻzJC!Ðp9ۜ~~>C'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1'1%1}ɉ?#$;C%PD^ =;=I &Ae`|l@Y P1`P"5m9@~Id˶Id˶Id˶Id˶Id˶II G.$rG.$rG.$rBݴS~?>DDDDDDNk׷ڟ_ Ehכ{=>뮟veNgt9Ӻs;~Ngts;s;~Ngt64w9ӿP;wNs;|;{~uJ[imRKm-Km-p?Howwwx6'ˁ_bՀl`E̶X3a=`Ca?z<9g񇡈#1?=`㇬Cj6\ϟl=`ϟl=`\8ΆkwyrI^O/4O_r  &A}}>r~ `1 afaf03 2v}zdHI[',-{zMpycʖI^9o,yR<<*Y'xyK$^7ycʖI^9o,yR<<*Y'xyK$^oO~eg!D|'^yyl<^Yol$Iį =(GG(QG>98i̜4Ns' 9dep2Y\,>| ZB@a2cCB]ќdeyHdep2,VW]mbd4FW #+1) J$i-۶%yuy/A1gz眼x^wp^&B[eb2Y\,,65m[edep2l[\,FW #dep:2c @2Y\,-,6єcR[eb2Y]uYlm+c+[edep2l[\,FWSU4Q[edeq+#+<';񏽎csgM 4bW+rW+rW+rW+rW+v81qLlq[ۜ8{jN%0MP6Jm%7%6JoJn)ңESP5껮*L[83cskK!t?a=8NZ~~@6da AU@ۛ~&{! 1Ul #+#A0Kb{^ϢF]Ѷo>6I=D {H= dV8íom$I {P׾Kb3.%vI$\͵mmwtRbnq[μMZ;^MʚO]2=7̪={w{sV^d}S,ޜ}rzkwB9g{ʾ]r5AS/W=ŲsxSv2NԉH *^\6Й;w<>H> FzVT $eHV&)` ' $d}|/z>v=Z$I$B* eI$m$VsӍ> >(t $LorQǽ!sN`V}oʫ}EBmJ!ШB-B$BBMhE&*C=Ӌ0 @nrIНuԓsNsMrIrI3Nsn|kѡ$`L۾cᖕ.7AB.j!d!9 N1?0YVc>KcZl@L6faTqƠh{ zI#n$H'8'9"J^Ϛ:Gq]EuD(" {,[cԛjmlUglXL̙HI `4#Fzı2"",i(ʽ{21U YםlmmL*&" “XmeKӗ:799g 7|VVi{MyVm{WR*(Q Ay#يo\zIo~;Fi5YqS4|q/O>j9;̝׮Ox>rNpua㜛Ni1|4|wO pD 0@b뻻㾪A^zQ+QQ(QGG:oo~7ןg_5<1Q$$$w%Om$I$Gm經{eFoq9er׽tKi'W.O'kOfnrstNKfvgwE73Nf6r󻺞ԏd[NJv2Mn>nt`գ.3@y=wçdsvλoRV,[,ǯ u/]lװ p4D3s5ᶹh,@~~":Tx']uS;ha $V"Hd˒ $|H9 iw$>~p?'ͯTs~^~~bi ؈](AQXTI$0Npc;QnwQ%!)_?LeD}߯~O~?`Cj|C`s^QG}U;bv'8O,=11;/IHA%zuEz({{y^^O9u?ىyk>{⪤* ;*ar\wrAJ#$ 䩒 2AR jAcD Q)~<7فҩ`V qD+|aǏ>: Gҋ ؊T%,q "!/Ku v<}~>*>d GL1ЂM܈Q#o$8fBA^86y݄RpQ+H >(2TdgՋZvPkh}uԴKq-X+`$wv !%4@ i}!IDD'+kmaa\Ǻv=Kچ^/j۵~WUG ]EHADQ Ƞk5( (Q3z!d1[4% U/ĒI$I$I$I$I$I$mmmmm|/ImOp>^[WŶҏ*>(GUMU=Q{^3ۿ8ahS[d;{(Vb5T(ٲIUT*[dOV[d${wۛ4-N9sj.^u/ U܊YO{Eu96ڼXz]l˯oޛ5sJ|PERf*Φm[UFum($Dr ϯTz3f͛66ش%K y?O#Lp 'izy_Nx/4X#J$ŷSo $E>`R*ݗ$5?'SkȚ\f"fA}eI$] $hPE;Qw rO}tQꎨuGבbG99b0bsfy-Y Pwrw¸ItEpc/$4%>?~ɑ6Dhb[G=Lki-_uZ'Fߑ|}@ I X"0N6߈B/Q ~P䏜߬j0 #*&K.-Oh~! ̐rIУؕ{Cu؈@S$lm#ޢ"%;3|=+_]E^R ='ן@AoHH yG1|:Xv+ʞ^z|yOOoK4w ⌣<{@x H(x`߮ލ0e4*FkyY$I<̉FVwy3ض3qL8],77|û5gviܤUnL=J;"fbY;Y盻S{6s.3nH79Υ8Ptv.$Ipz{mID!3Gtr\NgϮ~}wI|H>$#Ip)#>Є_zwR& X^p3vĂi}6/jA֍fx꾞wU5u

dmD /87P9$I$Є|bw/|o}a l#wX6H8;`$PvHrȏ!= 2ѫ}Xv j b !GEI#|yK >}\nQ'Tx @ |ԫuW1,RkGcm8)5ΣD@LK4<~6S6-9Nd%%MInQEx|<{w> 7Q|Y  >:댜Mf,Dc1$˿\|+E |}xz5t#*ヂ;q.h"ٿU]]Z[\ UmbHG &z()9|{]@I|[mܲvzd.G!#g*I"&HKM39ѩz}{(9FV8Cgs")qd@0B x_NݶMmۤ틯[vmwi$I$H̤eL۾-泓:xU.yS/zf.ms`ٷjɻ3]5ŝThrivwҩl.W7y쑫{z+㗫ngeO4TQR2dǬ@@3!dI4̄#ѼjKH=F5f74p ؏`|z'5;뮬ŰB҃#(49"0<c'@Z@L@|n}$pv}/Lba{͘0lm Ousc~;+++B61%h}}s?3M1e1al}BϟxDH8 |#3w*mw瞾&O\'Hm65j;Qv&ɲl(+EZZ-FZ-biδZ-[`l&ɓޮ=(`DI!}Nw9vN u shZ-)Md;ﮓdMCd6Md죿Q-mLQhZ-wZ6Eh&ɓ9κV6M-F[uUE6MdM^{ Eh+ETZٽEѬZ-^wZ-Fԥk6HlCb8{EDwWzן/A(}$CbMj6V6Md:㉡j4ɲl!kF[QhZ-]k[EhZ^yyhZ-Bl&QMd6Md6Mך=q۽j۽EhZ-=Z-EhZyyhZ-JSdՓd}v&թz>.xi]ֹQm]} UXf(b>;9ٔ4>/4翗}ӡqS5 cjsU0w_Wv^U>@ )q<݋bض.8\MT 2TϢbLWy ]ǃ{_=A"$Drq4*ؑ$Hnj!!8Uɥ_ESEzօ)O?^`m6m"?ADmcޞw{<cclK韏 LuJh@3E E7Kdguw׃޵^||m^[^^*u>9@r\IX.8d؈mmUR$nyA|H6UUJ I$JRݭU<ޢZ5Ҷ*FZMWt7*E 5ڻU嫺㏨sZm,:vwsvsGݺoOS]{R@!(u o]go=&Tnv/UsLOh"<&WgeՕ[" "D"3ՀUVMF%.EwJ2x0:3 O"& p!\yϘ<%6A}#& g lQ J*#z~$djEjSLA@" D0>}-n^w1hH8M4ZQ0cm G ɴ4kLF~ 2@OgLݘ+_j7'46㮪rȓi#9 x6kXmZ=b bm/e9{fyg͙2_c>D~|,u 1U"/֠a#L\øA@޼#h<4J)`7ŲEXhBp{{xߧGҏ_Q8NllƖ74X)MuyꏵKQ$O /f"B8Vil---31>Y3'k`D"H*"R(!qoѼ(aDb,pWcݫh"LDA+!"DJ@P d$[6#wůrA~ ϩa$r3>B4## _EJjSm_ڭ]>mv=z<kպdUD1$#|=|),pcFB.Bq)!vДGHؙ# 68'payI Cf s*mmmmmmm$y#@Ľmm=VպZ*y>(GRz˱Y1FD@i|zUN9UlVȒL޻TTI$I%Vm}swnݺm&fddIuCY=mz~E H'wHm$H6I 7K3 &фQ<>a.aoGQUIA)!$H6=F/e\ΛS G!$$H1H-I$ 3%8 Bvqռ|8_S H.ĒHI>䃄@ 5UUCeOùgv_sGBܯD  vwwBm[l*;mVE|; !P$u٘Ы?@,g8<Ę5f0?gn=IWA~&d@3ڽ;rA,*uչ9|Tx?"'䦉mm~~++*DEE $yggƔ,vY =5_=sIWҙ|"ų端:,jcm&O<IO\ǤuGKGj3$ H*A"(h,D YKl9G$)+|><&H36F2Îe#rs^?)|jB@jdə&h5URdr9JBH|/=||ߦRu5U5&dɐd 2$q}~eyz*jffd5@̓4"< CD<0r wzu㿯)IF06`LV/ 8Dn`o<.0՜! a1ytpfkcf$ ,`FI$U4"1$F 8WӼOVmů{׀ m,ʏЙp4Ow[mkxͯ[׶lpp-=O~{{$QHbB,bc9~=>z>4D|=FNko={_${jҏz [ן2J;]ݒfp\.I$I%UUUUwwvMUUUUUVfn̶E̱=z[fCӭz6yee73)ݡhFԎuuU:d<^XTܶ'wovs*zO_=m< ˵c Cjowd|ϯo[^yzK~ϝǏSw[ۯ[!zKWGǏ ~Oϟ<>}F>$A3f*J1d/^@=$8RD @Ss_;SdUW؉>V] =Ė{{w " 'e{a:l^s $d4AEx`1E/I*Nם;yzl)luVpyoi)>ľqYb+WӜ+UBT&m$MR%DZVA M ł QD e_srCO|v$RZ uIBRRZBDZ/HEPmx}ûxh]A)ĶO$nG*= }ȇt: oKן]üQ}odHa-=K;Ƿ]sZNCLL2dAULc9I{-~GDDDDs9ϱjI C‡K}nQ}#O=7),skΙAoH;u… Tf@#޽=9DDDDDsDsͷ!|=<ƼQkY}x>BH$W$ 3KR9Ǵ:ן'7`=11V@h{}k3ꟴWlnfI3}$XcrD=1fW]ʑ_w5RޖI$I$ID"VW+º O=Dy܆i!7~ {*W'Qs}.m7 1ɀH؀&'"dpsB5?>ωfaW08|"Hpw nvIfIۭQ5J{S)ef'{]b?+쭯ֶ85|H't+T-$ղF?=w~|5o HqII#bl ?~4~SIK&Qg)9Gb,Db9*eCbGc#XZŬHADq$%A@b$N8t5T851\prUn9nUI1'FV\bKf֔mJ6QO4Q{c0"-Z1`0DL`cDL````ccj0X"|*IRJ!hX* ?i,TԖ2eG*M UjKPЯa\d<+qX〉*Ȭ^6֡ٻP-Rb!zzԂ)Ũ Ek"(5Y,mXX2alJlVِXK a,%XK a,f[f[f[f_։/%%b@?m_\Zp4 0iL`4 0iL`4Ri4fњ3Fh49s9sն-jV4@Z$m#alKbSeFڑZQ"E11JXU\T lř̌̌̌̌̎닪rZ-IjKR#23#㙡 ۡbŋ,XbƺukR,Xbƺv1c1j1df35Hr)iRjMI5&ԚRlP&jMI60Fhэ4hѢunnW7rf\q\I2"TM*%e"*M%nJ:nI-la9r3.82%Zu۷[뭺Q*qqWلn8UJiD4M$dET%nJ:nI,jiIdșt.T*UU[0qqWلn8rf\q\Hq˗qqF\ˎ+l7rĚiD4M$dETK*) `C iVYRd֬eRE(Z-(E-E-EfYefi&LDDDDDD6lٳUb:i$K e@YEZ(kYLڠ&'tpQuJ-*vfY~,X( ]7jmJjٵc1c1baZkd jafafafafaed̙2fjf6i6i6i6i-kchL(дBys9ÜA H$ A H$08냀m][Zٶ .uƄKE%@ QIP,hH$RT  .uƄKE%@ QIP,hH$RT  .v4ƄKE%@ QIP,hH$RT  .uƄKE%@ QIP,hH$RT  .uƄKE%@ QIP,hI DJMd32ε]\.v.2.2..imW,X},Xbm6Mi߉#?SJ$>exaW̕2<#!z+~=Gy-Km-Km-xy甶Km-#ܓDEvHpumZIY{LDc̀6$;_ynz^z[DDDGyy/W^L1Fbebynz^z[=^јf(Q=^מVWuպ3 1պynz^z[0Q^z[=^מVWuպynz^z[=^מVWuպynz^z[O^=xzמ<ǧպynz^z[=^מVWuպyo@.V$RE$!EQD(QQEJ(((((()ID?2>U˩;Sw.t]NhI|~_?y  !]p!뎺lGZU1W뼥E2ϳ{ne#1·+(F+rXBͼjѢ+(rUW=CLhFm#VX,!D.UW=CLpa #6Fܬ3oha #6Fܬ3oha #6Fܬ3oha #6Fܬ3oha #6FܬiXBͼjѢ+(ۨvUUEUP4 ܬ3oha ? @܊ңgoZl6]!iV'/QihW9C9Qu: *h,JW`tNDNXXXմx'(y#UrGK/F] 㒭YKE?:W.:H(*Z0hCW@藤W ~tĶ%-lKb[ؖĶ%-lKb[ؖĶ iP P P l&IdjV5JVV*XbUV"[ al-ʖ[f1cW{V++CҲQZB9C)\ mC$Utv:꒽D>4.!p¯FQUʤ%KB؟cn6TpSN1MmF8ܐm@ӌm¦'5NN1S)LmH\,mT.iX['ۅMCN1 %4uS)LmENd1]9t*m"-[$Z-")Snl_HlS p?J>AF25I)}V64=z99ԇqjӹ~ $/ԕJֶ.C N!3srC9g9 !3m+:rC9g9 !M.l;(ەn[Nrg5ȅXҽt<'}P Jj>RJv CzH|(yKGz讽/E^-bض-bض-CڪeLp1l[ſO3; nmc&rն{Vy_ 'mmml}=T+*.ÝWtDD^x_>^JA"$Q0X"4[ YHOTm34fO*}#vNqGZ#-C##5k6*_׾4 DXb@(6ĀQclm"DE$clH6ؐ ",m DXb@(6$clH6ؐDQclb"DE $Ib@(6ĀQclmIX4%I"ض"{[nѵAUWD:1m5mU7ɓ&L2d$2dHIկI(Wx'/ptq~D(0ךժS?x|~ཿN:68Dqgmߛ翇Z<^v|Jtou)S].ҝ.ҝ:ܸ`\88(0p|.g N.ҝ=콥:utO^Jto)_ߝYUI>D:}>On2#0`##la#=J<42,jaS)j3xLuE<{N'pN +#(Qԥ|ެe~wZ}}쑑Zƙ}SReBReMI5$R(5!R`œq &0a`Y3mƙդdmkfbcLc,ƙbcLj1#)F  c##m26##la#)F  c##kX6ڴ$&4Ͷ##m263mH۶bcL11wwqLisgvbcLj26##nǃI$I$I{׈͒263mHa 1c1mc1m6ڴ 1 d̳+4,'s9}rIx' G(<+:ы]AzW IuRss񧙓\8㮉4rC\+W* W 'q.—(G4>Sz{Î\]mv}:N}YrQN VU<@8OD8OD>$9G퍽m]mmF2eW@_m`-Q?WLi,OL^ߊ"""""""""ZZu=r ezMkwuW)'T_J2@Pܕ޼v/Oأ_Wd?FֿQ52 N{`z&U1W*}E SVc~RUJ;Q$UkhM04ơ;++ *m߀P 6l @0+JemHH  V2ApE`Rijb+үZ)澻kkxK_^ ڎEs͛6lّ?=wVմsp/U9](*:QtĒI$I$I%lTI݂J~_?>۷n<_s{s~[!—Y)T*?i?/ mZĜ(ԧ*W 8U?'C~i_ >ͲVe_FBwG?G| WM BC_pIhAjJETk$IY&Md5k$IY&Md5k$MkbX,mDDDDDDDQ +WDHbT1$iTvQ*9Ru@: 1G) nk6gW;IGSRQU>{<[yߖK =/ \C.}{>˟^eϯt2׺s \C.}{>˟^eϯt2׺s kwuM#+/&'Z٭dQW<hmf $2mmҮɊ;aFUayM]:q+77 \nu9SNu9SNu9S\s{o{[|~_?f>mm6`Ir'U<%<%>D:HPi J䅈ZBԅ_C'TSlR*eE66DPhp*YJ@\1biHl}잽lAJ}QQ*>(Ey~7#~_h授:QuFQ_$I$I$~ROPHPϟWQ]eQfcm6Xj} +;Tٳft>}(Q*(4Qi)>/5!YxFA}Bމ> <H/RJ$`+о)+"UEO%x UHf OڠO$WwֹWe r[2GU,):r%hE⪄UOGokko%M;j[Wշ֯~[O5\t5T8rtNq].=mD^T!:!}2>UW*R_r?iGΨ~@G?UO*$Et׆{_qjX}R_lE)p%UuJ1&|E_C _;B/Wҗ+$ZA_8>ܯvЪ"AW2AE认qGQM55OʔW怇2D =' 0XVZ%Sԏ^T^|QK{D0[د_$GQ(`GT#%GK;DK9_`+RP@eJ9+DO.ggkD1[_1c-蟙ߟ2k洗"""""6lٳfDԮ"Tº;͛6l""""""'QEQEQEVccTk~2~oK5*V$2E}WO} )G;'R\c1c4͌bhc&eRhCĪ1bC1cAhF1I&c1c1f6lٳbb, 5@mx(א֪yKUo_m$6mm۔6m9s+?MU#DDDDDDDDAXmiGTRY`R-+2%lJaFdF4pb-HU{8U_-ʟH+1c1ٳjڿ:ԗ+Hi2=WJS>$~vC? "?W:)Taj1AhHZy(F6 ֍FYTĨ?WE_KVUXԇb_{%__<zEkVr?: $=]9yv~@u]?9)S1c1c1c1c1Tmc?mU@Dj+pQ_3K||ub[m[Cʾ6^&>ߗmmmns9Ü9GTrQp~+P9bj5Ҽh*mmmnIRȉ IA9BfkKkVRe\,֥T8=ZS(E\"ԑ*%ڕJU4ʾwL2J/\WxTʿZZھeUW_e@EmZ>hAҎ~j8;Q5T'=ٵ}Xk*hI?D*W]WBT >""@V5~ͫ_["""""""""mVYF+)Tz joU[K[j$@@ !tUtjƫ XjVՆ5ra09jt.."R"Q"x±N1^7ϟ=WfV{5p m>(zАi@wP4)F)(){ǯ]|0ZEWnN^/n_>J ;b]۸Y""-0o{=wޫ Ű]@@1Iׯu ׮;;ҭ\2A@#aI&wpooWR(Rimhٴ(հ%6lm0D#g3BIZTURzL )@ҙhFd1&i @@h$RJxCj=FzzR@1242h)Hd  z4E?7y4@=Mzޯ^IU}'9J*jT)Uϛ6I){ʔ?SjDDDDDDDDDDDDDDDHDDH E"HS!$@)VME̙2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2dɓ&L2d9ˏ􊪯%Sz{zsӧN}ztӧN@">+ِd/%{٘?؉a&YWOf]ڍp"1IbcvÝʵiwj!MaPh\cRnY9INjU0&&&Dbi40dVɑJ4UadڌiZV[kmlmmm'YAUd\3lcKllfvӈjջ+^#o WSlY\@"E(P@"E(P@"E(P@"E(PG"8g,ܭ^ΘĎI(R8Y2Dmݻ5.멍fR jRT5\C2̥ƨkT jR jRT5\C2̥3)q.!KP֩q \jKP֩q \jKP֩q jRT5\C2Re.5CZƨkT jRT5\jKP֩q \C2̥ƨkTe.!KP֩q \C2RT5\jKP֩q \C2RT5\C2̥ƨkTe.7CZ3)q \nKP֩q \C2֩q \C2RT5\jKP֩q \jKP֩q.!KfRe Ab"""""""""""""""""""""""""""""".V\Yu!!쪅mm,Է-i 檱Q2J2ڛ\8T+rhIPXiSQX渭kMK 5l櫈dCY)f((fUB̙)Q%-TJ2edݐHZڑ5խ\Ě%&TUeSK85>m=kZM̑l@ 4s$LVq-8s9s9yUUUU*3ݾ3ing^;UUuϔ>߼m]zUUToEUUU*UUU@ mUUUPmUUToEUUU*UUU@ mUUUPmUUToEUUU*UUU@ mUUUPmUUToEUUU*UUU@ mUUUPy~wwwwwwwl=[UUUUUUUX"ܵnմmes24dcgGgGgG'MMge 69+W5m]k+oY\WZںWڸZ++q\jUڵY\j[5q[Wuo[Jo\WָWuʲVָzZtt#^9< '&͜Jhѳ"X cu#[epFG1x^/x^/x^/x^.ϯ>_+{W꺮껯z^+u[u]Uw^⺮x溯n^+x溮꺮nWUs^k]ך꺯ך]W]qy"eb<6iAc߿S=ώW?{>c>=G~7x7x7x7xz_{{s4lH YdIN)&kg gC&UAaLcs0>/ -lm=ΧOi>TW;3Isv9sS^Yʤ.k>Ջz!B.b)b/Tj.b,ZtsKb,[TXXKTuKb.ibK&cQ\^x_[痞s}|mS}/4M1}u|imOL׫REyUԔ^p#˹uSr?Y?$ m2=v<.Kb=S8ߗi1Z-f*!u`2q5B*GMֈӛV"kU)֋S#dM;*{is/Ig<#3$d[S7 ]m]^\*}FrWSؠrHFeyT!ldOm `˼̞d6ճoZNlCml& sRKЎXu+f=.{ͽ;]B6.,1뢒YO*RK{ 8B'VL J}ofDY6[HGF*jP=ȎuB5m8GZaN)`ޡo03qBr2w* ۜ=d6Yӈ}LraprB7DZͭ]N!I`Tvzd [o'%SĈ):[C\D32ú!eH'SB3:Cޒc b;+a\ZmNUZ*UsS7+Qޡ@`(bT <2brKl"(FAt{Pbaξ" Z'Z6gV+UD\*/ ".Ei vtbM,ܱ" hǥ̔!7lO(EP7Y]4D4y5z#&^a;B(3+h4eqH!.OU04A[C8%۶z[7lW# u:勴7&șԺ3&*fpFffgo#Y=浪;oD;綼9dL)3y+@.D@[lͺs+ y8Ix*,`Ůt6"b&$H:g *49Pt4"V\`{;a(_[=qw cc ;b1˷.]<ݧ6aUslDI'I:s$I̓'RNI:u$Iԓ"DDtDGDD(dL ;ynK4dP0 33"cfE5dؠ4!X-h#e-8ULέU_~G~7X/01K$@D-I=^3d%_57u<~|}W?I$I$I$fI$I$I$I$2O]v$u@zDV؈ڹ$GԊ8PI: %&G$:fXLO|نN1Ik3:CoeΗ/XzWz FT2ZYi`%YiVqVOZ}E|ZX*⒬3\EAz#yK-,`&$5x@rK$`E&]*^,J+$YZIA-\lcFjh2&X˕6\|ysZϾqkffa$I$I$n-ɫG˦ٹ+gy[y7.Kչpn&sX9XtY}(mHdqΕݓva [|K[s.4I$I5BZ.fI$T(ٲn(.PzinwW۬WVfe6U6I$I$I$I$I$I$I$I;I$I$I$I|`/4QfOy&_;gYs+lOv[u,{n"sН˝f/3Unp=l}sVR!f1ϔj<˟~[y7cͽۭsgs7+s{Ǽ=========vOdOdOdGOV|W1W]֜v^{w~\D[Z(W1WvrޙZ]3TYrܾwۡ0pkC۶'*W-镩s5NU!}5rBat/ևyxy%={7.ow=ڮ|UK&0݊]\P柼f[<=.rܻɽ1r\wovs߷w?8ٙzwVqGkf9f뗊J[rUE۳G7)swm[+SKjb.[W.we}(kkC۽dޮOZO1gJZL3"ԒΧ*{Fؕ "u0nw-wm+tꕕTɑB'HĜ뻾-I$ݻwI$[}w˺R$v<}w}wINuw͖{|Yx;o}}񼷖񼱼ogsx[}w;w7|o};7kYZ<#3.yfaheƙ{<>yѻwqox|ǝys4gY37ĻeHN&yn]wKj9U/hNMP'?/}.9l>=joJlQ@o?}y;@  D $RHK_?o~٭Wy'g?g]Qxq¹ҽhjAi4˸(}ʗ B$ !uaTTChrqs\˜k!9$i@_id bRu/31hZ_|v{jǯ>|J|rT2RW]u΢"""#b"""4EƌDDDQF1c1cqq1!bccqr~-\Kq^c\q9[QF1Db]nF11F#cP(gY|SŻ<=GvI!M𰺟'\8Uqk =?O^nN;_~*q.H,>Ĵ+b@lXTrjMn(9}>_M>8>,yYB=m{N|RZϾ3՟ |L">E?*:wra)VܥRUu)nv7xu襗c󢝳]-;*Cņ69H{Ws332DAٱ!ٞ+nFybY{"f~J}32G^w{Nٰ<~bkg]'2WWM){Op N"!CFux9 @NP# @舏@[K + Nn^l5TF7Ԉ+>=o*ݍ*ř .xyyۿ{{g@- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@-o_- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@- mtmg@- mt߭w~mg@- mtmg@-o_- mtmg@- mtmg@- mtmg@- mtm4@NiaWI$ DD@"j$UKI?.iJoE]<<%~W.rL 3#.~f'Lb~~m4XET1Q)QWm?%`S(Ug@1!):ѭslnk8|wQ9zq/ҏԕEW\owX߾I[U#hfq /6f`z$GtKMzׂ^zu|]-7oz*>5\'SwDZ]ɑ7(G_G?~_Ld~>o\ssˮ7KaXǽ\Y|k\4)Of؜piF XfF{"IuN׮xքGq]?f+ LLLb1 <&JFqⵉۋ88brlMEm뛓'Y:"+v\o'.Yc"?Ŷtbm :VUs\7&9Bkn[qRn|r*22Y)z!޵FMՌf-XHpiUKV Jiq-VɾO)f I+[؄ČH 8uV$䤒.2\,"1ZkJI8Djąy!p~}{w\׍>F'Dki$_7|5󷯝xoHff́!캖O5Ƴٺ/s9s[k?wǽ~Wm{ۮ^Ǥzoݻ}ӷ_⸱kjy߉4-[[eZHqUksI2~'NiYe]~$PI,XA@AdVWKQək@aɄLQ8Rfuˌr+s]ǎݔI$IK3"uyΒuuη\[W2=wոo\3K"$sŦI7LM&ݥ:|$tۆv٣N~ pM}_VݺvƘӖNL?# "ű""L}"` z$P]G)}b~Ϗ2|x;ʹ>!$8"<4=*x8{^fo5MW=An{Ud=q9p9sh*_Bˊ$R?e_ s~il~R"$ǽk}׺+LVzc滎ȳu pb~)߯srHQKm LY50̚&d3&3$a,ZгDͼp"VehC!RLHbF!FU-KO}Hƒs]W*[Ue/Gl'OtԓæT^rUGxxbwy3E<Qy$#[XZEb[YW*ߊ8ѨFGyƣdp##j5qy$vpzQoFc2;|F&F&F&F'%ŤbjMFF&(dI+#%dbjMFQΒZܕ3f5##KR1`ZLLLLLLLLLRԮ#hشLLLMF&KQ궩bdbdbde, Q}*&,#pғjӖ!rQpFIU\6eT]I2VLz]+79iV9*m֬~r[ֵ ,F*XU,ZGbF-52#uej\G0uFѵr 1UvF*h8GVGdvƑdq#q#4bde(٩[G UC(15LMF4Dؾv׈m2!f-j2 H/?g~_<Ͽ~mo뺪v߿~cuUֹ:]kt9 oowi$LȐE@b<xR2 @aϙyC7jϖm3eޞw1R80K^Y|S9+ZpK5rm:tUQDrv*F Y1@/Z6X A޵mWs/T@,IoiqꤒUPcyfffelH&f@fVIJ I;//{7geRޫ|JtRU3e>G5ޓUe-7\I׵y읞=g9{{{v9۝S*{<ɲ$ym;::hVw3mgɿQ^d,8Ǿ'=)!LdӶP|U &#J-t3cHFԧ=S_yAhe5?/,Txr2%aYHԄ&*ٸRw/ 3{""Qb4-0ލmi-*ݟ4j3s!b& Hw&'8#r'6@"9vE`릮RoV؞*ql,$(D<9D`BA + +lDDH@as!8\s'$%o!8\:I;l™WVb"^lއ[CU""#*iZM6ޑsMMfqI[hNlqn s<9-I!<`H@5zN)$fUYb\UUؐ5'pL *z]bs38 Ou3ȜOqS8p{ʤ38ބȜ>b}}DОz؟:؜wS S&^v'9ʝބȟq>"vSکLpN'9}OSoM󉺖yKDPu:@yx_X0k4p\s*:u*q˦Y+lH]qtLl7wT%UګeP wv|H޾ =x33.".7Y>OpK{fe&p+y3;W.GhfJInfⴡ}}Oui7[_xY*޶zvXmK͞깽s=3ݝ`ң<7]Va(r\&[XmjÜO2OO\"69@osgPۈ[FNnj[ŭ۞@ myD\S;gsY{&\ n}G/ݑ{iwӵ?@f@v*9r=R97Sn8J&aC1Cˎzy.JT1w\yg]hx.{7XZR>κNО&?~߸H hae~8J||n|γqI;l|<8=q߇tǨª2Fm\s$8DGzz랸sfݓMv랷:KR9;O*8k|iG LpC9ϙ&exy>4쭉Nzk-%Sz$S7s7ojQ[!I po@xvĉ7s 7$)ʀ?ċc:Ԗˎ9"j|I(j^WZ[w~5#'H/19F|ܧ3;8-N""$D }j[ F+?Ln̗|;3 fj݊|?)()v`c12qNX`%v;8=7ƞ|>BR׶|s~}*}yɎ&~pj቗tv|,|"uW2DQ,F(FG"@830@@,Q1ۉV(ı#q OSzN8ruӒDg^3^^vvdy3ݣH{(D,G&gDifSā L1: naN.o\oe5 =nq)Ujq;76YH3598%vH=|( CzR/f3333 Gv{6TzofŪ[KUkWa筽:$=ͼmMmmmmmmmmmmmmmmmݪ4.*#bCQ8 \DCOM= rSW E]Vfغ[d; P4Gx*;X؉i HQ Gw{ŊrpW(` L1 =`p SϢ'Ebz׮giΊ*CWzѻ,:7kY蚢zޢOEQ^O$'xG˟8FC?P")@dD!U/B<wȈ"y-?m")ēdFk.R μ')OׯOM'=[+c ضY/v5e/3DuՋd;Iol!M#33m׼\k}oρpqo7P?*(0ϝ4UnRcU"ױ~q"A630/`<8D 9H'2G#O"@ݜyߥ˟E~$P$_Xciwiz?t7`9⟄@P`e^f1R(,VFP|k 3n{x{BSɿ~U.] GHnuлiָq2mI̅0"rx9V@ &BՉDB`f "b>19Aisy(}?#}%nϤW8NB &HpOMډn0 30"-kUIվuK׍'=-KQ.pL_衣;aכ]i\Ml%8D㍎!<s&v1MЙCO2&'ܩDBI1Đ91H @DX韢< b# N {UCFR"tp@W"bg s}5)sm&o[Ey2y*0HJґ0À#0dx㉻xNG:H[VDzh֌j_Cn7s>ϟڋi5 m߯߻mo}mmmmmmmmmmmI$I$I?ڪR]+UֺZ[Uׯ]ռv ]‚zx %% 2Fu󛘦og/G;{шQsIx7rѐ [[Ѣ(,5tDF\ [/qgL& 3vyh!S33 6f`` _no9e.9v>sD|rѫ ,sy[:wUwi+gJHSĭim"9̙{sޗ̾4c.w3v=uorVQjz.y.w13SQ9{<> fffdmZe6ξ E)A Ce$ɭKtI 4 a@Z`(( S3!@?BAUfDm!2[*2gYFmà=}(D`X*o~Mܻ'y7Q c阑KX /+\  9d4h@d)"pzŀdFL`: 9X;v꟠( Qb/;G}}]XVJwuy _DPJ48 ɘ,Kd6Ɓ"'`bJd((v$TșBtN%,#XHB&<7DFM~ ] ?מJg1wÐ"#̀#=_`RHF%5,JFfnљRˀ#$fEذY8m|ݹG;g{"`ޫEP|cDFX9YA'(@@fF7@~zBPH@?\|썃Þ_~Ҟ_# p,X@7!X Q7рZI8s^O. 7E.<n%iv;7B\GZ{I 2ȋ$ub&1Ql$ʈX4*_)DpI|گf;"3@"/|8@1 e  fO#"( FiF="@܉76>?n0^["IU7VDÜCl#s3=  h [`%[n8qYBFuh(H)Q3=O)I^~|QhyU畵UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnuUUW@@,&"FDlFtGD0{k;hLɣTٹ{섦;g-[UuSg]9rObI3:{o'xUYC'rg:UNfUݡԦĄ"OzemYF ƕӴˬ5ύ<&ܒq7ҬpTM!pX5y\ueoHLG0 3uX7}թ"';s33- Nu[컙:U[Ļɝo#5H:jv=Ͳ)]뵕-Sv֖wzT}\KkRr3K\nv9~]ۏ{߻>޹[vx$FrӅfm(XețRsFxo71r I$I$bbl8$^* L^Hԋ,;r5xup-h~⒓W~(V+PzU߀> $*X#@7RTSw;>P*:` CK+7CKIQq*P!5 :qƶ"]5$nZd;󻳔GO.yfs.Oh#1{]MW` S_ ϙoՖFi2v4"u3ZЎ(3Z+Z$x;m FB@}U.'Zm5ߙ~7}=Et OU5p l{v_zZW57;nK-܉#jb-W#^IWYH fDI ҟ>{xO@#3*s3^a%TmmmmmmmmmmmmmmmmUU[р`TD(:!DtF Hy,w."z9$|szZgqwEv"'AQY&Xفs3LHBSv$Hg)'+Nb9qs3Uan+ydԜY:ub22D۫L$L 5]F5\:$IXdC*H GcF  Affflm33^m1L@!ZjVRL{ٽxMg|^o}Ǖ8gt󬛢b|ʦnwBAK֕IÃ]~ussgwap=% bLy΁?+c{P]f'rjEr!s^x|S۫Ӌ^I'v{!^^\C2FfӷS\ޓ?9M~z.갽E}7r@='#CσG+1 9@kz{6Mpׯf_@;g߱J>X0K"}uU֞:H~ ,IbX? (  \o{J#;[87D OZ "N闵$L) 5b$"fXDNb0)13"L`R&bf;JW:Cy\N#5O{̕Ѿ*I5!$39~v G::P @i`DL`]ﶞ虉y\ĤH39V"">@ol&59;q'h ‡;"f&Fd@ԽaO99w;ۖdh[sq )!a)2Q" m123 GȊ,9 [ݸl12YD{*DŃ^I6sGu3_ʭݾU/_pヒy*f}Hr&.R9\qh5SFcZGneZD́w&b][[\uƜq*ki!LW)a;XKɮmomKono08fei&mmmmmmmmmmmmmmm۵UUEm0hnntu\uuȰ lT`Di+H;;%,"du ss2u %h2v9%ܽS*wYyn;BFvc&ZYMQKw30atM̀ X :DEfh (EP F`-ӚwqB#.+I$(FW 1^UPO^^]q￝ݬ^xwpzph)yGΌD]s\]U;eIIewm;ow=ێW$9^iA5frzѲZt3ٸwKUmOmWwO9kƠ.ާw=Msɸ8jܲ@ @$@@dLHH=ڐ7/$,x^-ó]༽ !yuv1״b+Bm8 DP$$38 fX"șrvpӽdLzg\CW+ғZM*fB'8"Ղ L&& `ffQ@=S᯶6 YHw4ەx<z¦hZ5kh2H".V2DȂ3#,u­FF#6C3&" A~~#Åu6_XNc\6,ˍiEɪ$oxm4+2DD̓U&kSS5ZM oG9%6$N> }sCM{^ N ث"Uĝ ZQ%-MclZğ~,[3Oq7MTRS\X j=$\coǦG P2wzJ̼[O#x 8DQKSX$-]ĖR@8¬B)B/@^# 6fD0ĸB02$iBT`J b8@1 w/ex?@ DA""=-3x @UfC?x=oiRy&&#DxTK=+,c` P< $*Qi-ʯ8//gJçR@ ]h[^yFvp1+v ^n PVLU؁ Y"XX3 2S0r]|+yR,K_#&ώ8Y48zt~G̪_H-UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU|Ϟ~~űesҺW*]+ ۟3̡C74.tȱ".W ʭ*C5kf*@3][m9:G*uWUU\m̒k\Ձun,Jɐ$Z&vF- xoMxpL"8"Xu0p&@D ,0I3 8𐺦 %l`7^/l+5= 2&D 2&D=O4e3No啯*Z3NW=n}MںOYiFenR/pnjH߽}|o]ߎ{&wVܰggjym:IWiry[w7.Y*[uqsGk9{|s=yjf޾{:]X8Pߖ.Lǹɼ깋M4!i-'UUWyn>KZG @AˉSZXbj14m.q*ʲ{p55Ru-Mcgs~/e xy=sl>/wWEjSRˉ1ռq5cDL`{ì-lD %{*j9!j;!3>fhev91'x;MbK2ǙjKjl@9fU3(&>l+UmDZG9Bc%[긗4~Ҭ!y鶚OBv+g\8w+~ud+$!UDȘo Z*+Za.bk791KYd3"+\`N@"b1tuH>P;`ߚ7|35} 5,@HHu7qIUrT#\͸פ8s&Dș*jqDHn7& Qj࿾\A=dBu=_>/}i㾼:gw=z 'Wżuw刄'yמ '^n y˝AANsC\^MqID"iifՏvww-^ix7Ǹ6R#k^uס]<$ s<[s '^ynס}:ך)'b @Dqt AP R^i'j$EDK's3333I?S$)@l$sX}HL_>L>}iwĒZֵmnwo}ʯo*UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\< HJ[Q[||80[UG5#D"yxŌJŗrqJsD{7/d]BZ[a8X[G^q d@g,$X X f< t8vhx|㖻ޛ0j1L4$̣E) "+$P ) -T.V%h5"#(De".0DYB @$Is)ɱ/ir)RJb;Ǚe'C {rԧ%}sV^V^so{iq6k[5 f>5k9T{qG;w7^{c9]N/1~_xܛgu,=}fsNjtpRںO\snt jTNNylSq§2+#C2N8|ss3FEOXs$dMsî BqƺI'JȐ"^qqAH I$RTыJl#KRiv|wu]̑$Nj^z1wzׯ@.$wy)""szwH"^1qߞiE/;λkww|=l5۵saǝD.l\e{aƼ5]t*ʮG86n(Ḓo*+""L&"5^D¬@ *ƢCz4N\W}$T H-i7i9نM5DV3*⬗feW%Ì[}SzFFWo^ R3Ѹygiw8#»/ eaU\Llfˬ`/hZEbR 1 @`u_@ R6˼ழg @4uًN3EJYUSb S2^ڋYyv(ݚ̬̀&#=1,qyy=/O ,rݛ N0MM0M$oɩ3WTt&f:WWYJ,Xf`a&X$VWѢe(DBAU&NV.0De"-"-"1D\f 5Ma&a&a&&00ƛV ^`3|@2ĶnlO:֖>rGC2-̪I$rMv2 ۋbB  kd֒u\*\g.-in2iLŕYZ F,*XqQ.4RP@AC(%Dr4Ԭ#pZ9BLby`9$"q#)0K1R&I2$ L&Ȓ=tv=aTb5JQcLLLi:J65M%`X*jddތRM%2YJ21%a2 WS$ՐL\jȅBR2T,*Q(LR1[dƘk%)7f-%LUbHQs*T%L(ڌeڛr y+4b $ k$2+3JH\f S띑kz9iSJNW8٥m[8ť[Iy.b3T}ܓRE>Vd*Q֦֑jkTj5i5Ij5FQj5FQj5ѨmcQj5FQj5Flj5FQj+cQmFQj5FQj5EljKZZŠ5ĩa*UAU/*j >%]f?ԓ.Z}~Kcͮ#-snNZW2Ĥ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*ЄI%WWkkAn8jm,0XbfJLdke1&2#UIZ,Zrūsm3) fdRSL(SV%KLjRYfRZDblU, F$1 kRHZ--[Ҵ[&ش2e0FEf3".jֲhR%KU%mY-dZmY6mY-dKY6%Zk%kVJڒKY+jKY+jM$0QK1,e1,bXPŖ0kF&$LLȲՓ[h-Z(""4T$DDFVmH$I"I$I1$DIDD$HVh$I$III$DI$DIII$I$I$I$DDDDDDDDDDDDDDDDZU5VjP#lY$dFVV01&(L+ ʐʐʪʪC$Y"ă ̴USFCzQavwqY'bcQeZBdcZj-d ICS+khLUeֵovs87).8!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B8888q$Oj4I&E1bjIK3"7-N-9rQII@ˑ(r5ĸuʭ--MtTjQ5FTjQ5FTjQ5FTjQ5FTjQ5FTjQ5FTjQ5FTjQ5FTjQ5FTjQ5Fd3) GIOSq6i~I// A5CHF+󂫤[qGY.ü^mk~{$ M"ұ/Wf}[N_S3vIJF $rY~xJZgb2ı.~=5G]eAH4DG-31}7Ȏ5OyOa4Evԧz<(㧯l߷g<݋ڍ{wQ?KmVڮUԒI?wYJ+u0k%պK5L%E2 H0I$DL$&D(6"""6k_şѿͦɴMk߄xOymmm6omߎ@  Ϸ*'!"8"<:tE4Y^yՓ/'_<<*άy8"VyWudhOa?Smm msW5* SjH @ڒ-6ٵ@i6kj^m_ٵ~=WַH"ԶmZ*蹎`dOȲ(k>y{j>EhmX2#S0z'!ʼo\JW'25&J*Jhdaa 9X#UYYM*oX I0Rh& nʍna\j]+j}IICh] W3+\$Mr#imHh\BMF҉!?#qF&V~uUYYG[' +G9G%V *Ue*ڗBM#LVb?$Cq+bz[aB.<ǚ>IOv8E.JqG_/^`yWQ#U0-ɪ7ܚ]>exYFW#=[ڣκ_wffbʌ ldE&Ʃ6ЖUk;m4Uhe1$$M MQE>s/i^[hFVQh_5eUo񭁸e}UX2ebFhڲjaVWSjINVUҵ[Iֵ[M>AEֶ]Nlb3dIȒbf2456ϷޏU e2efYYUed+)L&, MJia224,)ߔiblY 55Km4&QʦڥZT,e#iA2)ZidK,Zb K(ŋ Z4 (2XlQbb11abd2YF efYLYVF(ŋ,4IuPԇj]Q |k@GzVW>G&˩}&vK+ VYXb°VJjҺV敆WZ2VVVVWXV*Xb޵]jjM벏Ҳ^`}5G*=%H9ݵm]STĻLK!!'Sff1kZfDj2Zn˒,8*%]Z~UVRf2ŤSX6)k!əUUk[=~kZֶR wQYKlڹjߢRjjp9YKj-_ɷ㵺}+dUbWaQsI]Qd[a_S٦m}~)~O*WmJjUSkm6κe{^_ $LDA$b" Ioo)iUT[d}IĒy'ZMM5Im( TUeTCOToʹV&*\f8\Uc1nVm2Cym~@yCWٶڳ%iGMWWj(u+%Յx"'Q*2_9YOyiG^ixIKt≁GD+m-hRY ZF[֤յfUYV,zyj% ʲ7}o[ _5qZd5DhѳJb(cXS&L,$]wfWXME]m[Wvu^`aG֏ {QAIMpKJ==K6.cQ=Jf ⩸tA7EFQZ]*/EMhK1UFQ &p0BS_?׹\_8q$D+}~r@I$u 5"'|"'.`^c=|UջϜo{뻮h276e{0 P2fe& ~fw~/|ۿ>îI5dI$֭dMjNwvzoU <ZtaCUҰ&V5XU+$VW ^޶BfVef,Xd >o ldnV4QU>QY/lhO&nOtɉ{Hb˫513gHr w.\<8XYm9.xQ]3:sY^=-]spj||*ˇ}:{뮡kS*c&U :ygp!w;\I'I:\8Za硦QB 9gLMyVUqV#oRjjPM;=0?mܲs/V> )aFOATBw(qxq#N.Zwv([rŌ]dNz5T'B뛜a&f&I8SM!Jj5*bj%R:  ٥ReK}_/M,vfff`}ݪ4M[rhfA,̒V2KL)8mIN9LN\V晱qrsY)2RY$kPAu?y2_KRY^[W[Rՠktx?Іu?-m|u׳3 ΡU>nfYeR/!UmO^'SgjݡÉpq~If3UR$rߑni YW46Ғ $ ŵmkkG]\`%\kq:sn$]uws[13$EjU. U8akCbJԹX(C[ EK_c3}myeUU>zsI*_Bo}?˹% zʕPWm jڠm5q_ýJkV,Hjڦ,M(|Rl-wĮ{>lgR;ΩNٟ yYVRmC`֗8eW7(rKlj{tV* #q˖䜻lxUawl;ܑ)4@s>$}׻e/333Ԋ"FW_f=lk$2JkMURzfJ.{6Ecg#j?#w/ޝ>:ƻ4_-Ux]kk@߫V[Umj͖VUoE&Q&#RTeeYRE&= VԪ|?(2]mmf!D9`/Ƶ^LJ iٛ|wY$\q6V[mf~yV䩨eW"|>o-5Zֹ9ң/IX,Vb_Tl=1KN_OĞ$/d3rS2;GCmWϙ-p?2%)_箼oVia`jSR#.ݲ=#ʎFe%c}Wlq\KPUXd"|u&t#LY(Ve9l*jjW5t)*#.U_1fTj-1LXd¾Ny/\z#kziAǭx hRO=p^Oba[Po$YUVUN5ݽ%co,E֥XJS $ʩF :b(mʛ_־ʋ55i-Q`JVVDr¤M6߮]N 5̜j6U.Tޤ Tr.n6[qYaϟ4\MJXYU, `la&d9oIHIN瘔VTt2+'/t)؎qNY}~0ޝOr ޼w1g ?s9 a|CQ,|y\Qrˇv)$e(ʧM٫S͝>=xΞ8XޚBWseI"Ȉ% /vh878r9#m6k/}r08kfL4kTjIݡ\t:wnk٭>"9JۻP@b9uCi (̜&0ɘɘ’Kd\MI={N|_lS5Ӝ 5VkԊWs!oJMf̸"ʲLőew77$8n4C)ZU=&&$,RۤƖQ7ds]uQ- d,!TaILFe&V.FɊڙIEZŒf,X`1B*V%k.(Z残ݐC0*021!L ʄtI%ڗiWdrC2kpgblRʩeTĒItymn#LF|IA$I$I{o2Oy':;W5*# $jjl[n[mZ8"z MI {ZU{j-6u$]"ĴKR.B3hRn2ֵ[JʩGBgS޿[Wꔿ0TiOUNԗ rJJA m*IwTqPĹ4z^X]W>^lK`$=I~ ,jKR^O_;;TT|+jþ=tfV9=1kv*C*]AU1k љFZȚȉ-X2gx#E_4^OWR|7xDb&ܹjQF7W9\Y%+rէmt5YLe d"mwUζz"' Kfs""/<A6Uv]UHrTVWw_K.$Ʌ21,L蝡S-%Hl}ĤF}޺RJ|DGr?}#5%NU{S)()(hfح>kJ:|{h%R "]G/_;o+I>yIJ@\5&,V-_}vJU~OqI ?)/w}n(^U{o[ͳ5+x;,J`iy*OK>xf~ vPU\nkHrmfUpK_׭H)&R-|y*XUWªdQGZ4ޗKe+ցsKRʁZ׿ZUNʧo<'^`$BRoF[J6=^0=3HU$u-JS36Km(Ķ9XWO7_H=Xfc32Bdz~OQGs\T4{ZGJT2}TRhFW{%m6Ý>V_EWч=rJ'u|o'ʂc0(0zs0+ܔ!O7?_ؘifVmj4̣ia#)dal-P)K?[+TEU%H,jSVZheBKş%oM ~S*[j;UvjQ9xk_ZZZֵ_R_MzJ>H0e~ U}Y1KکjM_}*d///0s?wAa* uwO=rdzs50p{j?}׋#3 f[k RY?ѕⷭaJ+}V}X(ҫc(֕vjշo[VWյwZݶщI6ͫ\)wa.W;eH{N!Cd[U9^Z.l'XFVl866cpYHK,.7(y~Bߕ]J:JsO=U){&EF#DQ,Tcb1hƍ-Q6"j*1QQ##lhE4cEUAbF4mQTAUьQh؍Em6-֍F(m[I&m~[~Mk )̑?LȗՏu(KV {/dÀvd"e/`x]6E32P Ci/KZ_;%-Z1V%nx־;J2G}PwQaUloY($95?='לbߕ۬ mʻQX\+3 ]IXB@SlSff%/〪цfVr{.rhCtX [I(J]IAcŅYSZVHk$$fT2d`E"$Ykjj[Y"f2VUʐ' ?,d2hr Vݶ@':wvlϣ'q3ZJ]pPoDԁ*ڨn=q UMl$Vjm,km-[םnme+h+%USW5)15VYzDjvxĒԚg)~Me%Ѭ% ꖪ5UeAg4>I憯mk{@K/b[%yI?9f)1SB=)y*LK0U({Kz&w$dW(2 VL0%]K *6U0V}]WGFT1UTULY@XijUgOE_% VQXAvT 0t}vXhwFHz |6%nTwB`22edgWߥLmf?O*K {_cֺ[bH[ﴛ2T}kRQ̤*]I"uO2lQKIM6 Jmq9%/mlYk^PzVlKU'V8ݒdHj2dd?U涓"eJC$?+{]gTIԓofϱ}<8ziy`]Z[lmvQJ旨/RRĠV8JR{hU3TrGDL ^^xeFWϒ LTVB[Ԣ5RN21k&Q4F4rns8l,#%22-U`-ZQۗ#Dh4F[\n_ϟ}wߟgzkK:COvvvoXYJg-mozMWm7!s<';A2JTfS0 )Sr~w;8uRu;~hUAKuTYI'JyYbVSY?^џe?HĽ_n@I֪ڼ]I2[l`.u]_9Wjݭ3Zm6rtk6/! \r~k=7|m]g{h|~wfpPO-gI'^oh)NwFǃRZ)ULSJeQ%fUu@ ')6Pu[[k ڜ֤$+jQ ({Imш2*)N Rey{,ϜEjbTX)VJCJTJJJJJJJJK&jM%rX65bűbm,jŋbŋ,XՍXbY0)T,klśٶԛjJek&Mͩ*rlRj6MJZV21e,"%c# LKRZJd6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6Md6MdۛW.l4ь1TYؖAFQ S~Ie#r5nk}}jz߮|1DŽ$*"{v02ŷ232˂@fFRD`mťfj[Vm#FRbQRjŢJDiL^Vs{y^Nq[Ťܫ,~Tb)R1\6ܖԻ&eYdGʉ尙+RW,3XŹ4MCpKiaFBÄLLDj-˗CI  )o,c0L'L# F&F*YBj2Qd*,*2 "V.f31.XYm6MDijFVh[F%1&TZX*HWG6k_H,T#1TFffU 운֖VbfK( ,Ydi7۵[mWV6Ze4"o7GϏ|od4{Id|yxuͶR %iZo]j!B#MuGQރh@ M@wVUJ^[ՒXfY&q ]^33A@裝U/.{uۧ[m+H#)Y&TOj\**C|CCCˮ;),Ĵ$2b"+MT6*ʪĽ%wJ.rz>F1O3Q/h=3uJar#HyytTz̓9k[kdg.@1U5+u]lm6[mUumU6\U󟷟_ok)!L"2e"(ʕUMTGz[mXLCd HB[m`pj5^}<,EhT^#,n ,Ij=T|8(5b^U$zR-%>o}fk[65)m*?a/eDOQ?޿j=[mZK b[5-mCADorTYTMYUKgU_FaJT5zba,Jbe1̍)b֪,,喲S ĨUFUd1dCFU _취,_"LDWm ?X fZW(S#}9*R|2}?C%'?}F%<|s=mfވU$4l^G̵tw-i$lO/>xڮ-ckmʛ۟W3wT~fa&e'YdeՔ9XT5UKNNv>Hq!7,aj[ c023%nXUʊ9\5FQHm7Kt%'h*]>\ LHdrwy)/oO_gJbLY׿$~y}q@p=O>0B8&t t 8g=0ݦ#(R4ahL}zxܼyzHSp3-uʵ3w^լ==ϳ|ϙ[[J)NOCK ٮϹ_v;}2|R /_[[mڝϪ{owݝ{T&Ou_N3Q5{o)0yVY5øw@@z'eHtwTUO8R4UB+xgw(, *$4S):T dfC!FA$87  kl j HQ=5LLFL0FMJI h&RRMd FOU"H I1z@ MJDM!OSedbz hFA4ЙMOzOw'OBġ# gJ_̈́DAs{uq&L2dɓ%K丹)!$HI!$HI!$HI!$HI!$HI!s8g׺%}>|ϟ>{Z+Mbx' ?U`[,d ă+yӬ^|˾Ţp_~WmCH*|@.G"Ȗ,c^*$4" ]2H,%+~lUy"$4"ؽDw Xb%BH)ܢH%aXlUA (A(|@>gw$G,Hɮ vPD> ^#,Y$oWj1CH)|@;~=Ĉd"'pNB$4"}Ԉ- $~*YADvzn`R$Hxq{04.џ[Un!Yxv,V6xUk$$"#0]&1RdD H/2/vMK*EH E= UE l,@&ہB|NڽW,ddT;^`al}ZY(DḴx3ġ"!Y~ _vGK LhE. =:L;߷ߖ&1Q4H@R *F/[Mng~]xWz(J(JMٝV"HE>yux"lsŃȼROy|d^)<>\`/Sw.xwYB);ϗyux"lsŃȼROy|d^)<>\`/Sw.xwYB);ϗyux"l<>\`/Sw.xwYB);ϗyux"lsŃȼROy|d^)矗s[nu9μWsP+U dJdݓI#5-tk%[;dךKvӹ4 Ltk%S'l;Ip'N\%2vӹ4 Ltk%S'l;Ip'N\%2vӹ4 Ltk%S'l;Ip'N\%2vӹ4 Ltk%S'l;Ip'N\%2vӹ4 Ltk%S'l;Ip'N\%2vӹ4 cl;xIp'N\%2vӹݣ=:'dOw~`m&^Ix' Os|mnJP mam l6mam l6mam l6mx [/o}ĒEPBxRKЪD螉hG=QzG>Q|JW W]У_ O><D螉eKtLLMx{'K¥R[ײSzGzǤ|WzW|W|W|W|W{$B\P( v!Fn6kmM` S!0,pC 1ÇRKJ(PFP[9R:޷dKdQ:D(:333<ork\Bos326b|!% ҅ J"")%}23~ffeW1E%)DJQmws32?lOP9uk [uB6+=ٙϪI}{=ّffeW 3s32ym|Q <7L3# ʮ?" ?Z!ED(TB7 [mm߱ >ɉ15>>|WD&' bbpϟ>ys? YT);Ńﻻs?U Gkü[m|QGk/yXm>O 87Mo5˾<33 lk~/mOiU?Uvgx<1 9O|@BJPm s5[{ u~Y\ST~o ߴW7Pс! F؆W_!2I?`0:/7Um34l fhXѰ&`Mc3Ff5k634l fhXѰ&`Mc3Ff5k634l fhXѰ&`KQ`Mc3Ff5k634l fhU $ ]zOS)fd$$fffDIНԤF9- #ץ z:ffI.I.}~$$:IrIw=ݓ33RI9 /fmvffNKKɲIrIw\z߯ffOI%%_z7w$$NsP{Qf\IѾx1ffbJI'+F{m߳31%$ѿvjp&q)>\HIrIwÙy:I.I.|s31%$p]ٙ=$$}q{33'$$yff6me]wm33"JI$JDn90qՍ}vXAw'ay~o;w33']IrI{=ww7bKyCIrI~XgIYfnwiwIrIwיI$s޻nif5ꮹ};̪.ߞxX_fffd\쾾1>s32}$$~|Y~}[m8l؉1cO%qC?zxxWc;[]ZmĶe߻33&Θ`cQ@>ݫ|}d>Y$3-;I-Lw~$$볓%]sݙdֱfnKKkC˻ĔHpbk;oNI{I$̒I$wzzvxmݼn7o{x7ovxݮ{x;ݧ$|muƛ:kG[HcZ}~I-[Lm2ei-[Lm2ei-[L3333333333333333337y?o\7\7\37\7\7A F Y0 %f,0`Vb Y0 %f,0`Vb Y0 %f,0`Vb Y0 %f,0`Vb Y0 %f,0`Vb Y0 %f,0`Vb Y0 %y>k><̒ $I H$ $I H$ $I H$ $I H$ $I H$ $I H$ }'{:osۭ߳1<+֫M}/oo@&WI' ~o'q rw׊1b8SxžO{  HPAD"Kؠ"Hb8SO'G y=b8SxžO{{(pF#<1)QO'G y=b8SxžO{D$( "'aA 0E""#p {E#R1H(Je\S d elST) elST)}R[*j3zr|_ϧ^@koD_L!0L!0L!0L!0L!0L!0L!0dV+뾘|_#3:nl>wֿKhD !%&L2ddYk5fI}ok~mo[sx~|=,̳<9c̳<9c̳<832G,y2G,y2G,y2G,y2G,y2G,y2G,y2E@<ɗg#yr<Ǚg#yr<Ǚg"^g!>$I$ImmmmmmmmmmmmmV`U~P7fGw!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸r!۸roUuW\zV[lPQ$bI׉$Lai \׭331{mcmff1os33mxmcm7'wf&mUw}mo25eUkmʫlyWwٺv̪ջuWw5eUkmʫlyWw٭*ﭳ[m%wsUȔݛ⭹~}w<ʫlyWw٭*ﭳ[mU][f̪mUw}mo25eU^Twd봮z m'2 m'~}ϟ>y#HDp!B/-JW/s>O@EbbXbR1 1f,Ř%#CU'[4`[4P@ &hX5V՚ аj۫q>;Mu>FʪD]X/| WU @pC|cm'ϒ<;{q&+NkQi7zm'>X[Io*R" PhUڡiU".ǜxv|ǫi=\yLJh՚ аj۫4`[)PU"%hCBUA Uuf4,vhX5Vh`5X՚ аj۫4`[Vh3BlX(4cC аv|w6HxHЀGnfUnY j׎Ht^^c3C P4 jTBز) Ub4v8O|q аj"hCCǎfUnY ݺA U`A+i>|ĸz#|cm'ϒ<;{v"1-! CD^k!nh2IbA xf,~W]]=׾AW,O1pevUڔ4(Lҏ_VuuZ\#=P,Z9.qP.&ⴸp?Uw-L+/+RM%C'%E.Է#'% k/П'11>D螉=䞉'N>>D~%k>mmmmmmmmmmmmcI$Y!Mh-6Mh=wO]t=wO]t-6Mh-6Mh-6M ֒'( sbvNnrFjFjFjFjFjFjFjFjFeGî'K!=Y+˨'DBtNdMGTdNQ_x'beKskhb6n=:;qӶgncY2cqaD":.AD":.AD":Q#B#B#B#B#nq_[ou% H  #r !r !r !s7ḤOp'!A<#2B#<"x|ޑGC3(yFe#2fQ2Dt\3(D":.AD":.AD":.aL          $ GBB   $ GBB 0t&QQQyFe(GE(GE(GE(GE(GE(GE<#2(GE·fQ2Dt] #=;fQ2Dt] GEՉB :.E'a؍7cr )+wD~ `a y $ GBB nD Gc~#nZ_E{R0>t@MNv@;}w~mn6&iКt& BiКt& t& BiКt& B:Nӡ~l&pM:Nӡ4M:o5Wz핥˒`o`ot Vt l |8 (UȘ.v_\/|RQy.+skkkkkhlٳl_r2JTa`Ẫjbhj<8xWs]WNkU`  yzc!bxw ª(<`RePwzϊz]=vqL g6;ot, |1"T&^rI 0YepL֝oݧ݇=sG> 's֓Lq3}HWw|ayj,gsÜM3 Vfm RKLf|̶RD%h|BŵBUBs[{ǿ/<{"F*1o^4aneېT=rhy;īA4 ("R2nP(6ءb94M 6"AA %k"QPzNs<]mAcqww{񇻌I@PI+)-^+VosݧD&4 Zf4hTk:뭭--]tV13$lFβGY#d6H#d6H#zutF$lF$lFd6H-G8DU:EAء}~3/uT2PmB $&c1wqxB(]@1M1쾇oמݲU"〚 bM:(9# }.Ӯ='>/VlNځxy3=c@  }Bȏ{1<'^0;\ؠbm `X@Ю.^9%nWV5uK-?c輑$t<1c}g1q 6 lPhLe@T=nh fz(&ؠbm (xI bm 6M–e.` I?QU>{9b񷍾{oCxx^\Vymt%|F 2LvנyRkFe#-WGYfS0Yyr[F<ⶼh{Ѥj\'|6Gg8]FG`q߽~jOd|&'ȝDDTP(K1c >$bM![,77GwlC$bJww>ZzZnOc7}_hHRh)Ot=k_љ׋+ZwSG]J{J5$"e8iUU*N4_^mmmmmmmmmmmcҾUI$XBW}[ӷ"fP?ܢH#  Q:5ukk>zO*\xǑl)EQ[Sb*lyI䮲>y7|^|8TPQ4%۫.hԼBs_Ɨz|'ۼ{ W{X_g'XBAGȄsλo=˜_=*]r Ɯ +lndϮdAL2~;׌eL ]wWv6R!7[/c۳yXMD_14hTbMܢ}Yϑ D(J=UKy_W|(OPtݪ;G&,rg=ݓ-^7 9\^YŲl 璺QTu:ׁfEʗ9Nn~N_ÿWɽypڏȠz~Da%*\cv,TY"e{13,{nΛb=N\TP |#ʗ> |"{|ve?gG=?X^w-x w>|v:s[}?$=>yg#ǻ̠_@T.[e ,4AF jBuuNsQK;X|>dn.u>Y~\;*S3%R)UD' pWݰ*}B{UJcS1ڵϯZB_>f)ۻ`*Bܰ.]vܹ$+*~ Π?`?nO߅}<(/y]ܻG$IntF14_o.v)JJ!*z+s ں&ڽK4\Z`;)0PNJ ;P@_usZߞhu[Zv>v`UUUTUKU4TUUWჍۍm*⮇<.맗W9.F%uT(P.Y>h.]V[T)^T*^TOJ>|gS.=y=B15,i wNs=<{ v JxCbmJSWfc2_[.-g @jy;&o,)W'q18FnŽDg4 /f{Ng߇o%\5x(6zbeeلy&Y88o/4 U:YT+,J_{y;yk9{π\UUm3UUUZIUCx|}&ז>mZ+/q> 6]U4I:+T Pq꫸j ʕuHW{;sy;I"##u;ǎxu]q]\^Zך({w|yvE|^v$M;3JF~jEWҹJq9+xW|¼Chg}c:Uyԣ:૎Uw:}/О~ z_>;Ol9Ѵ'ڼ\?r4%**i2Tr <KK\:p~G>\fJW.!J.]At TJ4bE{Xg/̳ XӼ׫̈+._R$JlܪDiybcpqs=0}}o .}*0_sq9ײw_׶ݣ%Inq6vX?_ioТj7>6OWkv<{ly0[>ǽq92Gvq  e{q-'J1JIPTs>yM~}~>o둻#Pdj7G{ ѽ6qʅ#nssG_/}D_wڼ~)ڧZ{  &єedY*Lf'1תcJ)hR4q }{6X, UUURU-UUU`74w!u]սzsmϹo:EI "4X]eA卶mmmmmmmmmmmmv(QP4z;螪W|W9|HWG&Tj"I:*IV'-"xO&w.s̞LݖevjK-E:˼'ar=,>Soi92ӛc7fKoO;:7_<[ _b>0\>m+$W@X4:[mJ߿<PI$ I4 zp/riuv LXffW`q7l6GZycˈQ/;~Jy @bmbl lPm(Gی!f $$Iv;7I<(kp aw2"8 (&؄Q"8Pvf"oԼ$;0GY%1z/tr^w9VMļ#:t{՛ݺqK0˷諴oyQ8}׾@jRZQjT*P[[,Q57%a/~U 55V2}n/ϸߡX5F8~0{mwUۙ.n|iyH3Ξ^n_ ݋ )Qą %Blj5[M =?L{rj>'uf @,UAL`:` rW^^@ |uU&A? o>WPF|sݛwDz"҈}M?A ـZ@'…Upr?'|?JN?ꏗ]mm).꣜o2Wo=_DF'<}7{l/WvJ ω% j{yKBxQs(/h]{-v뮂qdR뾉)\z`VIi'*I_0'}4.^ɓ`[RۖVׇp*~f͛^3'˗.\Y%OOY˗)Ζ?>۲r}oGܴy)+e$Ն#Ca_Q|SKovPED;} 2VXi$ `ƟdCj6[c}67c/{w?gĻ,\O^>߻tU/)$Nwp`T` \"@]npE#п7cDFƃU~׎^yʵp"RQ(J* mb*ٿ ދs#=sշVJ Ipt<_/:/ݼ Ii~بۘj=}țJ#z2nN®sʜJ!WV8Q usWn{;$fܷ>TQ;t=Zdf?jmc"MR|r&7QIn ];>`.sbř5='vG{9}o8v޲>M;h oOu0Ӫpd+C7l⻖{7ƙYyysA1TNewPI,ʹxT<'Nc</w{k=-!3+6٫ݙWI*JR@$%uBS~*#K * W`ˋ]QĚzMOS/֪󜮮}뮉}n[\׈yCm/b \o}QMRT4Y;cq;㻰nwE_ 'dkyßgo3R+kP9Bfݏ' ,SɪIU>!G&x6dB{uBS(~plUں'8tNs2o|IŒhv)D)UR_ɒTVPT+\O:NVL]wo.U*6~ $J ]`o4I +P"}==wf+2ʙoڿ=#zuz-\}qfU]?XB͚_+w_vThVmQW%|1~}[}/V c~u8{ޜ6AVnky:@ex&I$oYjn9In(TuBH`]\NvNv~2WNCoUF6ott]*osnjsh5A HAK)CO@'s}wlO)>Pqw}{R}ߜg@˫:uG9GbvNȪM $- H@cG$m5 ,u"`#i 7‡q m/d6=oqv=Z8 Nv E~/Wq{8'fF7-ixݍQLaΊe7=zR":t;xϵvxmnnum|5~+o '& 9x|]Jn~T*U Ne )%@KCT*aA$A$Blo8? |(N=zT话Wz:*jm^'Ftz U#akP];az}7207/]uӯg OLy9{~=N2}9pTmߘBt~Qɺct{M$g6Sn'\UUUUUUUUUUUUUUUUUUUUUUUUW*UUUUUUUUUUUUUUUU$I$Ip@X3u{徛^>|})F*AWPoB5T`U ;M:f@*hDF>qbw`A;s6M|޺qK3=6$H$I 8 {]n1c㈈\DDDDGDDDKΝ AH5Q{=ryoK|{Ǎð"8.""""#"""\&DB) %APPBI 0L8#|xxvE1&a]?7wV*[ؠlb*DG"VP |1dqwf10DE;wF$ ;Q>'{~ 윸N*_+ @ й(I|F;mwok e 90!@*/{ޒ\]t6Sbڦ6&ع]+blMd׏uκ=U_d*]iθusO9jK$;R=Wx=U&MP}![R)FjY e!1X R&u\r&LmKhN4c=K`(*>(?$ꉢe3N%djXh!2+TS,a2:'3jY)sUNBNJ0qJ˔Ap%θRBP/Z"VԲmMl[[ŲD/낏%U~VZk1!!!!!!!!!66gsjfجf+1YVbf+1YVbf+1YkQ/%S>uMV"2J\+%6TU&Y㙚I+%ʋkW-""#"$))))))))))%$JI$I)%5ZZ Ɩ56V56V5EFMMEEEEDjŴjŴjŴjŴ)[)[)[)[)m)))e%%%%%%%%%%%%%%$d6Lk5fՙFiQK2J$8r*[c8Y bAB Y bA0bB Y bMPn'v$B؄C&Yaf*J*J*J*J*J*J,Xbŋ,Xbŋ,XbƂŋ4ՒI6mDDDDDDDDDILXѣF4hэ4h((э4helC%1U]di$XdQm"[aFLr8PEHģ윰VH.rZ-[keMlifeLjXZ6eEQhZ-EhZ-EEKmX֖ڶAffffffffeZԜȋk\\ pF\%\IIB.hbs4RRPD(" AD‚ ,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbrѭȈ5Fm 6(LQW~G+=d/$aKWG%` @ `aBBdImmmm$II$$I$K:Q쐴Om(]R{NKLX#I`%Z)_|THǑ?!x\B"?~gT^vP3M6$ծ䎖xK[%qg_׷IugNY.,ĶKd#'cwCOyWy-%}KKd]x7kXXXuktiV}xۮR)1c=c?>mr6^>=sߏ?k *7w*Jm>;c⺻wrl8ETO?T?(yRY޻'<'$xO3I=x$'!CxHO BO'BCBxHBg̒y<ϙ$y2I>d |' !Cy2I>d |'O'B>d |'O<'$N<$'! |'O<'$xO3Id |'O<'$xO3Id!;9/"/ApAptrwG'trwG'AqwG'trwG'trwG'trwG'trwG'trwG'U|NNNN8C[~U}||Zusfp:뎹kwJ*]oҚizͷ/:ӧ]:t 0a 6a l0a 0a 6a l0a 0a 6a qqq>Ń**   ![A fۃmΩv$/~_wAKI?``CÃCa`͂ s 6 <84=lxph{,<,0XyX!``CÃCa`͂ s 6 <84=lxph{,<,0XyX!``CÃCa`͂ s 6 <84=lxph{,<,0XyX!``CÃCa`B5Vε[I $$@ $@@ $ $$@ &HA"@ H HI$&`l$Bf Ͷ$ $66~ʫW$DAƻhXlͳl'K8CXq%K EN A84~qr -r_<<`v?ޯr'.)x%7#I`Gw!x'p﫱OݸN[4 UUb B;WJGܒ=𞔴j_"KA'B@ ~[lԑmFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFamFjlmQXѬh4k5ƍcFXѬh4k5ƍcFXѬh4k5ƍcFXѬhmo ڟ}F4I\INq'$Ii,?%KR\}[ê#T=|?t$]J?ؿ9**Nc5˒.*98888888888UqӀ**88889YsWVqrUp\`ֶX[mHwJ5qUg5p rUQp-#c5˕W"}_h_>?_cܥ*T}HYhY!!hYhYhYh"BQVDeeeefe S%EEEYgmٟ33$$$$3$$$$33333$$3333$$3333$$33333333333333333<37_BGd,ԿmؚKO\4 Ah4 Ah4 JTR*JAhMA lmFk$aQ/+4_FBR}gu?w%վ/Hͧ}#_#6 QQQQQQQQQQQQSykj˦x`n+ 9zꊘ4GiĜyVu#W8-[+(h X)lRntUܹY-I韽NTI|?KE#/!}=0p5}d}/z5.._@a{T!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DF!DFa "4l "4l "4l "4l "4l "4l "4lVZљkOjԬc|K'eA}+ߟU}5ހHH`fHI d66-߼HI  G/GC}р_#c333Y|RxR<* ʪPWU].*QK NEQW𿕹$K?ROʾ}W?O{_mW|UJ訨^+ot]EKQQWG!akྸ_үtJY3+b].t.HKt/KxxEк]"].t.Iм/ ;Bt ^ ;BttNxO] м/KtEк]"].} Da()-ULO'' CND]rc cM{ڌ(*3;:!42IRJ\䔬PnT%%*$&A ΔBL(N7 QBqJVJR$bp'JeHBhD$mF i83 gqŰΔBL(*3-PTgJ (*3TPnpłڌڌaqTi+ڹlJ (*3qn;q+ܭʂGw;d3 gqёxu:áftGJ/x'D?"iSqRKx_(OpUG6ے;~7GGʹOМ)z^j0r_="{)x#8N+p'i/Mꂸ*^%>pIp'J/U K)j\Cqq$4uU'q(T+!qc_ԏlȈllmkHK/ |i]OzMprp4Yek F9B(dB$$]充U k0_"b|_B}W/ԟhFک4mI $$@ ֪Ob!'LV`PHFI__X_jB\+H_ʪП (\OC Eԅ?Җ2~MtOJ# UjrCG_JRE}/h>WTLKDGuVᵿn-H"!j_^– _!|%+i%$jV@ՠj5h ZV@ՠj5h Z)@Ք5h ZV@ժYjY#R!~ru Ϊ/k~6j""""""""""""f_F%~/cDrjUOoNbb$I$I$I$I$I$Ffgku ^ޓt:Ӌ?wo'TOg~ פ'BFVi}jUHiU[l5)~ETԇ߂58u+|MQAFʤN?9!v=$+.U.R3=ݶJG,JY DZ(>CX54,гB 4,гB 4,гB 4,гB 4,гB 4,гB 4T!.Y Ht(QH"]$p"S_1)Өx^hG"r)/KԐ 8˝*~ݷ̮ʾ1]7ֶ_B =s\B'Hߊr9/N{oP I@> @I!3ݭ6>OWpߑ<ʼn^?/(€ ,(€ ,9r̲y]a@XPa@9YX*B+B(y]aa@Ra@Ks,WzXPa@9YO+,(€ ,(€ ,(ËбZ€ ,8a0XZour& ,9r̲y]a@XPa@9YOxpw9YY<,V<]4XLa@b" -b`<0<2\i-eNj Jؽ%=cd$f'+ت!A=JPyBxIqB-y ^@@X*BhB!!VP ,! B!R+B( `HB `HB `HB a@@XP ,( a@@XP ,( `HB\O&fe͵)ݵmZϰ+ou|%OT%O}"/ 'i1^j6hCW뽷U쿾CCi4OԔPVEIuEN>|W)\  $/CH|򞪩5*bp]BgJz^}?_ )'كAJZ6-Umm$.wKr4QWj_R䨾(?0G!P)})G$~2}d'%}hGq:)/O0[Y Om)Kš=SJDiSO%/.I_#%K#HHs']'#IAEu%R73)ȦGT(RS4K5/{d/{'T.$}~O+){ԿzJ} <!k\MG B8⤬vT(Os?5Q)UHԟ‰>TA@vGUI>~Rп~WNU ?i_R~H'EgU~%HO!}G¨$`#>ڟI@?GIOZa~tOBeAU5j """"""""""$y?sw:>iomWkݛZ KگjGlOU窖Զ~/*|n!E4hѣF4hѣF6ѣF2G|V RIhO'$.H  "?U~QʯW?ʔv/jL:.V:_ /J=PTꯦ O씇$m={'OڎO,Q}QDtHυ=w5P:y-U ސi$ZIeq$ID}z^Ԥ^WxTYEejWyD>?lٳfͱc1c1g>@mm'4MG Ȝ""""""""""""'/[m"%wK6lٰQE * * * * * * #N-v2$s޲I +e?OiwT{B5PIH^rJ.1jbC^R 2#J|v jPDKD"wTu0DЇ&J}%Nq*MiS"~EO5kd?1E&X?9uT%O}ϾR}R__>T'?DzIm!hO%~?z?ܯW?Ur)[[vߚ߻k}k骕r{~U4mlKܥutqmoj׿mԥ?)&GA:UO>r!1⨟w]&{> B| 4LWE.݄*?stt6L&ɲl&ԵW!tyLuixzH%z ILLNc{VZ.,l)SKtE껪w0Ԝ.)jBG=#BrO}zG' ڊWVmm8dDmJ#$$П+]{mͭ6+[Vmn]YH_a{>O| c1f&tg2mbŋ,Xbŋ,Xbŋ,X\0 lj`6`6`6e X8qr83 0D@D@D0]5A PjTLgk)jmjbI3$̓2L3$̓2L3$̓2L3$̓2L3(̓2L3$̓2L3$̓ҫ_b&&| lٰ((F"ŋ,Xbŋ,Xbŋ,XbŊRmfԔt;'O^<1_w?mrZj>۫k~uPqlY|WQ?JR{|06\qTs@ ꪪVS *Qp"JaSܞy|<˃g>>ꔣKXU}inzj.vףwys>yg>ړ'dWݼ}@f>m.NWj>|Uzx.FTGoJ:ڂp` hҀjER?4M&FDѢh4h4M&FDѢh\ qr\\%qrMF4FD}B 򙙟{ffyA A `??o<:ˀۚz|zY'=OA>LEC/L߽I^r#7zey`GzL#kDzzfL < ݹGsOs _HG碗_Tn[]Jtb=*-xזܷ^[«r En[ٷzv.#SUnEn[.[t.#nAۥV15*-xזܷ^[«r En[Un[v*-шmҫrpܷF"ݷJtb>漷V]Jtb v*-\ tb v*-ыmKDp%l%8*Y)XK da-)X2 bTAvRԠjU=?Oﻻwwww{wwwwwwww{@ 2G>GH q@&'{7wwwwwwww{wwwwwwww{wwwwwwv.333;3cݝۙٙ>̻GwvowwwwnvffWUUm^SWJwuWTDtwwwwwnwwwwwwwwwvwwwwwwwwwnwwwwwwwwwvwwwwwwwwwnu&8 KOMt{ q>c=Ǩ=!Cy{=;=â|0IŁ8Y >i !h4XY0qqhBZaŝ˪WFlyeժUk$ W%+J QCIU@}$ PZWeժUǿ V]zժJmjA_T(S !4.SRl5SjfCaM\ˆa h JS IA ˥ mBrmW> (ٸ yImrUcP)%'`r!! @ wvm&f=M# RM˺ЋKGUH69#6@ FN A>@+7tO%CN RA>@/}6)%bi&::0NTA5^= *@` PiG ͡*P!?$!HB KEs,ࠒ)  &RP&)HCj1Nw([hؚ XN]HCj3s0Kh3KDM}@&[Q _绺6i@*A-BahwyBBX&-ˆ6s m)w8 JY  ^`V/Rc#]'D$!}y療AA?%cS 0 @.6XT*֐&)&ZN3v&Ķ`T)%cR6:Jw2ƶ1!JMSS _ RWbBX{G<#_.{] j"V>Y==Mfѿ5w[;U۬e%/gnR\o_}1o_wyJbܥʸ+߉ $ `w?=͛{8z%J <쥙򯂻&73v ̿pWyOk9tٷws!\꿶m : 6ZY*+Nl;_Zq6$I@%IoK33ʼohe%Oyo۔3>UWqOԾQVUfvRv,U]A?oRwGw[;U۬e%/gnR\o_}}=}Vrfk5[+c\Ϗ|u/Vcm34l fhXѰ&`Mc3Ff5k634l fhXѰ&`Mc3Ff5mc3Ff5k634l Q`Mc3Ff5k634l fhX!"RI#:/9{_3}b4m8̑*m:gn64@ۘ@;.ko/N+gf~74'N}x;n{3zGO70} ov?^׺g2Fl뙎݋uu#6z:LAuz"~v[j7/fU]j7/fjn_,͇3 +*n_,͇Nc{b]l]s͝s1۱{}s.f͊Uj'ww?T: շ$'N}μٻM载[9\3g9yip='Ouzocz\k܉|3w nz @ٗb7{mz8,Ccy1ߦh>ɮgf~}=;nzoa &vX^ywTw*uۗ3cuuI,%>mz|M7c齕ۦHN7c齄=gnɎ4,AkfiuZwX{VbZ7}mz4vvV̛ٻ}Snuzoe_o4}'h>Sǽ og2FlͮW}|67wuzoe&uzodB[B^_Sw^o{b^t-ܬWy|6"Fz$כv;w6ٻM[ܷ{~wy}yn޽Fvg<LsxͶw擧uzogٻMfIov?^}WEKrz[;%zuoѠCPahBU!0h!*~`Hj -J‘ ;0BPa@D A"A $%% FCPahBUZ4_pn*I$"\qr%q\rW d2i4FM#&Hɤd2i4FM#&H&Hɤd2i 0iL IdyKoϖFL2dɒɓ&M&L2dɓ&L2Y2_}[~뭻ﹼmKH\GS!#rIKH\GS L$$u0BGS L$$u.I#$u.I#:HHa!#:$Թ$:HHa!# }ryv:{y=ܼݎ^ekxnOw/27cZ̭o Vtr+[v:{y=ܼݎ^ekxnOw/27cZ̭o Vtr+[v:{y=ܼݎ^ekxnOw/27cZ̭o VYVULf]*̗2c2VdSJ%̬̺U.eeTe @>5Ϡmmm9sZp9s9DI$dD~w;F7US*ػnE[9S-d䊶r[lL9*٪nnU2NnwzK{o%o;yyLNYnnUwuMToww]US.2br̻N_.w7˼eG&Il]SuU7"o~n97w.w7&LNZXd??7=zK{^\;|+Z-lK7 l0  *0m_TA?ٟWބ#s#< <>N}#/XyzǼ~+=ǽ~+=SK'7b{Oq!c \ySK'7b{Oq!/`q!/`q!c \ySK'7b{Oq!/`q!/`q!/`q!/`q!/`q!/`q!/d>! ׬@{ϰ@{ϰ@{0@008x1PXq9#~!y||>!y||>!  B@|<xX(M,8݈}?Uǐ N0%p}> _WB^_' {ޏ}q! >N}{ޟUǐ N0%p}M,8݈}?Uǐ|>N}{ޟUǐ|>N}{ޟUǐ<>N}{ޟUǐ<>N}{ޟUǐ|>N}{ޟUǐ N0%p}NN*!{cdV%|Ua_Z EcWzW{ ^yzUVNnBH?ǁBia_Z 6 5X>"#Lc2IQs06u[`DAmtR`GPB4(B0AUWUd{xGZ8ԏh42=#?{m 谺,. 谺,. 谺,. 谺,. 谺,.tX]E`VP+(#8`>lo͖ߛeYo[L4L4L4L4L4L4L4L4 0 36aaaa}}|%Жm#H䌍#vFduG!pFGs>gd}q-Ru+}Λ7Mljo2HRL!Tm ,̴0$Ъ9D* *t2 9HHn/|RbbM 46!7wM`fH!F Mb2A ;*n&M*n&M*lmScm $B&IID*mScm $B bhHJ(M*nЅHI F6ЩM`b72HRL!Tm hT"IauSaFM ٌDs2A Im8,X>qg $O3/"S,?_??''E_@_4* !&&(R)*._k$ $66|j}ARvd?}A~gqRqmx˚.k28ɪiZiZ,vjVjVjVjiq5\B8r[n7+IIIZ09;_`s`o 6M7n}6#`oQo7Rڪ M,2#6vkK,}߱k"Ȳ`2`ijZ%K'/u?I c@]8@8I0A: &%nmK"sRsYݒJ9$I%X!9Qrʮ]}AXb]tm6V7nvz ׷ ҪRP7MkmӚr9^R؛]X'$I,(dc\k'bbHy+}.>,$ r{&FI$I$]cD 9ܺ\l5^M1ѳ7`h@X@%" AJ P]Ǯ{zRCU+V mC@C(uGUr]I$H$&DJ2A8A2 NpXB|F$nmU "NIAHЍY[}pV׮|DO]lDA,"/H%bHIR Ss=mskg9ko֭tϏ dYL!4-KPrں^k~kW.>OW9'2OS+L>9NZe@V[}m` GuhzG}}+gG <.22BKq$I^GnV=w#c9T'moI:z*qΝmFBy2@Y'#w>~mo?薑Usķ8yFۈ薑OݪO.6^A :ZGYG)"{sT%k~i< H<~?^ŗ?Z9*$W89'9jF28:9#ǎ+C?kϟH.#̽Y:DR$}l}ן\&j+c "qn86ܹ?)/{bDg)_~ D$A/Esp:뎓?:ҏP~ 侏`_?>>ejI `bYsT']q9II{À ,$>`؜7cj`_KKd ~A5W0`.|m;]yԲ{ꀡ Ci6>62Ժ% lYKm;[ݵ}\$& C7sp,ϮO7u78+FquK4? .:Yf%WX%Y׻C ߾z&^y.9ˮwW\eκ::J92'9~$C_z<*JY2I&" 6b A#K8my#~êQP"`1, gWum͛^:˼lݜwo}eBF a}Doz{ns[W Ng{sfcncq+ پ|t wejְ#;,^w "y11+ȢdI bu=˧x\rkvl-.9^DȊ_IKʰ5J^N K@ H@ %J` ?5$?:N*  Aᇄ$IpEQ]|_ow`|o&A&AV,UؕͩRGӖQ$k+*Q.T*T%*!S׻T\@S^y(ٰmfn]ܵ*j}jj*'w+jwr6pܑ[_.W,VS˝fMO$@ AU@&f jROO^x#^yGnﴎマW(WzVA4 8Ӿ#WU瞼JzHbKVbWav5D3|Mʤ(^}_} J99ph061 nmKj[h#O#qcw.A7;]iz  1 @ ( tEλC8;dyVv[Ew(31DL @9;v*{EwU{ҝzRwtsyr߈q ckv]NbeQm6be- CղimU|V#ֆ߽k32{' A8aP`>K_}|l KRH&8~ys_qʺQO$LJMDDDCpӄ] @@'9[̒ AweZLwL]\-{ڣ&m:Q L6mNJ:qGP;^|Ko[ϼ|;2LjK}jMڤ_?főd6j[R& XWvcvVb!`CPkS6ZJR{O 0ïQ8Jm -e-ި(##ЗyG.>|Ws}ױd$OKoyۻi$.5oGr9o(A)׼?ve𾻔 m$ HbO7r_6-6Wqo [a$l&I:xJ2춮]wnZ @ >im܂LL@:`q@e WWvmK3ٹq#8tI!t^%m<hn'Ӿn:DCm7I$DBl&I 3 d|>@QخUDx+G}DL1d!l\V!wKiM6 h&pH 44I @ .onc(A= `knk0=[,%Oo7.VX݀A2K$LĴ7۹:izR,lYeDdҽ>Nl OȲ,%jZԶܯ]ƾmWEmٶVD(‹^Uy˗Ȣ׶-oF6A_769ko(#>Q®o<{|l𬵀_cmtX]AK$D`It-q6ylq KD 8n&%̴ 0A{D:}}JO pmda$8 n tI$A$J_sxef1[/t0&c-AP-0I0DmWo;λrt0!Bh s,H) 4%?xs)όNJ Kml^_Gn[cL/QOK⫗'Lw*VճnQ9(>?jRI$'^Tؚm1@CB[]0H93ޗ+:-a >"$#W}PKmٷTs8sU>Sr@$|A> ;6u W/\o|9dYU\U!9OY'yrJ>+n#2<##KTu% 3V4!%1ٖJrb8K˧Ko7z]FuN*pԳnvUnڃlm{ղWxF_7DީyV0q_K7;n9@s@m ~^ q$Bg'_H[[hs(#Gݶ$Ns^(!L n HJ !~<+gb{$E`A$HEA`-P !XQҶϧEhIH؝&[ٙG IH,!,+/Jt5Z Í\b_tˮmٻ֤XA ` @06e6n&!(mp[?qAz@)m&\HIJ=Og\A(\}yR ߄ɤ&߾,exA(NK. Mzbෝ_ I" $9ͶNs9J|28D$56g8t'-Ieygn-ŪZiϲt{tzԕL }DN^m(A8MtzNt~wCMs{wmY$A^"~4}ebJ {zᬚȖl -Ե-mKo:(* I$iփ{={zAAAAAAAG͖Yom[e(9PЗ֛L5s(%.fD9ꙙxqJ1ul86_wzܝq+jeԕ[=k:dc<.T2B<&5}r(*/:&{> I  {tmoX'R(1geeg^qZKlfm#ӿ.qe]6:☈c;]xJa"I2S%-4P !UOws&0H 0i$&Ji$H (?|#ªIm$mM<ヒ;HҒ%6 G b'pC߫kˮu@D0D%6 &%p>]uO^y"%䔄 ;Sb_E$[Htz1yށbH"H$'-Npx%w[ ,I`1:l6l Hm $LFk/LrnskoB ng<̞ۚ$oI n3lJ|k|oN^䯙[mKx}_ J nR\sd}űڗPu% _K]GJB+IRB5 G!t`G*Zĥ2+$*ʋ_aJ`l bUK>_/Qf+1YVbf+1YVbf+1YVbf+2?}bP]JjH#*ISjUȈ&JJJJJJJJJJJJJJJJJL%%%%%%%fJ`lLbƦō,0c1Ʀ515ZbƗRʆqn'919c658f3,rfƠpSqqP̑'$919c8f3!c8r)6jq8gX8͍A'919c658f3,rqqNmn'*8f3,rpSqqN3Ö9N1JqqLfم(6,եIRT%IRT 3 03 1%IRIRT%IRT%Iŋ,Xbŋ,Xbŋbŋ ,i6QF4hƍ4lhѣF4cFj6ڪDwdE,mP`SZ~_m40ԭJƣQ5EhZ-FQhZ-FQhZ"5`Ic0f3jRsM)(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\s~m[*_)N_K x?TOI2|$/U'ޥ:%a|mZ{I $$@ -krjm< ȸˌ.k.2B.0sr5.kqs RISJEldM$ZEke$Y+VV$ZEe6ہ\hr3Ng5Dַ{ڹ-Umll ד?.pj@psJW{pNݥ޷j'Q1??ÿ]dD(QE!E!$$Q (QD(QHI !$$BHI B(BHI !$$Q (RBHI !$$D(QHI !$$BHI !$$BHI !$$BHI !$$BHI !$$BE!EsoBr<%)MbHJ(kVBQH\BD(D&Ej$%%)#q H\B<%)MbHJ)KRG丅$y.!HkVBQH\B<%)#q EXG丅$y.!IKRG丅$y.!IKRG丅$y.!IKRG$%)#qG$%IK<% bQZ EwOjիVӸӸ:w:w`wwwwwwvڍ۷/^$H ^ֵJ8zmwމwwȋ T 趒_A~B!@ B!B!@ B!B!!B!@ B$AC\AACܸ ÚÛ9\!ˎm۝!^.R}{е"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hD"hjD"SZ4M"TZ4M"TZ4M"TZ4M"TZ4M"TZ4M"TZ4M#u_aKR~ /j=T%Q`CRʒd`VIi,RQ_d%*SJ$O"O/r8RtiOH_Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q[Q['U6im3XѬh4k5ƍcFXѬh4k5ƍcFXѬh4k5ƍcFXѬh0G$N$&NJ.q'Y&J`VjI_J.]8J%_: ?U\5w.jUWp\Up\Wm Uq\UY\UY*NchGZsY\UY\UY\UY]U\5w.jUWpj qsWVqqsW \#S) k*YSNc5˕W'1qsWVqD+dMZʫ$2O¢*/)?RErOI~*#A=]_''*~GGw 9/>ki hJϞW9˜9 Ah4 Ӂ˜@\hia+Pm9ph'4slqm͒W/O%t%>,Uv/Mo.ھʊ܎a?8~q=WI0z*_BO"<ڥr6I$$&I$LI$dɓkU]%4% -Z[rYo~?AmͿX ێ?]>~7oh;7OX/]WQt]]OwE"躺^ |)yOH?R쨃4V%cLKH"4~yW(rC$zoUm}ڿ @j $ ̐$ 1ƶ [*kj͵BI $4kYfV@ՠj5h%@ՠj5h ZVj5jՠjV@ՠj5h ZVU)KS܏#܆""""""""""""""'^zkZI$I$I$I$I$I$YD{ U||_/BQ`%4%P}a~M 4,гB 4,гB 4,гB 4,гB 4,гB 4,гB 4,гBN)~4Rh*RȎR P|e} H^'? ?UώsssAAAAAA6[v~Z "(b""6""[oիk%t\Bx`I5$2Q4Vj`G{((ک[Q!A|H(R |%`Lmm:4>B/r%=JrPDGB?!i.B }!A x $ܟ2}RGO!~j!{Tb/W}_Eb@C#I$I$I$I$I$I$Y|/?͵ "@ H HImkl IY'e_`ROWW+DVL#t~c~RA/*2KWJ~H*' |#AUO!YQ?Rڄ_ZWH_W0'Ob8Q:>?|#%G_KUpĮ#W*q(G+)R $䨉"##?T2FB9?(RΤһWqOW%H*rI\5!> T~~ğG:咯6ڥj.U+5"?rjjDDDDDDDDDDDDHٴ|! }ei*$Gd] %zR\4mF6ѣF4hѣFhhѨ~8?zM/Q+GRYG*JT*Ri `յVHH [mVmr_Iy$+B>Q/T z/`#HOE/dA;/!x0@P/쐿lv{%!(rII-F1c1c1c1yUVuԏQ*| *pKj#>D려JZɭVA@@ͪmmkoh9Ò9#܏ʤ<`mRr>B*4bT)Iܑ'd!0U*"*+@~ղ-WI $$@m֢dGSHY+ħGI R}B> (>*B>lm#2?R:Ji{m W̢.PaUԞ@vRJu}6ֿ|Xbŋ,Xbŋ,Xbŋ,X0K`6`6`6`6`6`6`6`6*B@ eg*3UqsrZ\{I&dfI&dfI&dfI&dfI&rT$$+2L3$̓2L3IkI~𐾀Ibŋ,Xbŋ,Xbŋ,XMiإhyGQGO5V* ?־I|yVjyT,Xbŋ,Xbŋ,XbBNʭ{8]! ( -Z V*˻*( . hB*,c1c1bɌc1c1c1d1d1c1c1d1bɍa`rTҥrF nwn{۷nsbtA_U([u-hFZ2іe-hFZ2іe-hFZ2іe-h,_ II/t%`EK}ZZj޿ ̍ |LJ@%濬BFJIQAU=BA"*,IVc$kV5Ihդ jZi-ZM)3&UY*IVc$ʫ1dդ jZiUf2MC12bZ5kIhդj4 jZi-ZZK@֭%kV5Ih#TRbZd*rq&[m5o?DDDDDDD͍T)^ޖ 5_(T!m@?mh%()S*?@#EhTEmlɌɌɌɌɌɌɌɌ11dLdLdLc[?hF[4 rUʕU>_K"O$0S搿*:_ |~mۈB2f|iQ;*ۖ糅vϴ[[h[>RyM[No5mڵ|* Tha.m^p<`JmbN0 =9#,f$13l4Z"͙k 3bAq SɵFJ@р(fac)a1RMTjF4hiHc)C*5S! 6L4h`II%= Ԇ=F@@ I0iM=OSz'4MhLB2=OО(yMbzQ?KW&䗩$GI"#cmϨRq3s8ƉDѢh4h4M&4M&FDѢh4h4M&FDѡ3γγq@($D?~m$Imݶmwwm0> @?܀?c?o|$'=w}2+:;"[x; c|1&1 >z`" ~H5>z`{_`_>™ 9;κ^o_w; US`Q_[6{Jtb-tܷF mҫr]Jtb-tܷF mҫr]Jtb>Z[b v*-ш5t kfN͂1Un[nۥV1UnZn[Un[kUnGyo x15*-]Jtb\uR7Whg b"Q$i#I>DmWuy F5O'Ͻ}$u^,a{*׀$cULde 9JDGfLT%Y/4-Mn+jx F5V Z{v&d4/zgl"4dii?;oWH^,kXUݰDj'1kb-]m]"!{#S= MKU!k檯1$cTgIxN۵xV=}>|mlNS舏{I"s3zmR'wwQ)8s2{ՕK &=w啞DODDz""b"){O{ԧԑN7dk<JfxDD,cFo%GvbO/$w啞DOǖ#xޥ> I%]eg$D@l _تRJ*뻻܇ 툈؈'w啞DOw5)"tND{}"I' I,$}z"!o X6*;~wUߖVyI>nz"!o X6*;~x$,$|DD,G'J}I${I{~FQDgc "&&34l fhXѰ&`Mc3Ff5k634l fhXѰ&`Mc3FQ`Mc3Ff5m(&k634l fhXѰ&`Mc3Ff5k634l 333"DJ׼I41g1S 0 ?{nXi "b}dRR޷vd~WgI&׺jFΒMgu4ZQ򳤓zڭ2_O#nqY-_YIng$~WgI&˻IjFΒMv% }+I4*Qywv~&+ԧԑN7QvI%:I$RRGI8[zI2WO#o1jFΒMyw_$bIJ}I$ry$R}KĒKw'}ZQ򳤓ze$~WgI&׺jFΒMr?]+ԧԷ7u73 %+:I7Kޖ}5 0ŋ ,/]{S++hN:t7Yu&M4iY1Zݼo^Nc%}+d2ZQ򳤓zڲI$jo{_Ȥ{x3R]$RRGI8yN+KZ%R$>lL$RQ򳤓zI&I)_YIoq@Wd{x޼FtSN[ʺhѣWt٩zm7[J:u^]&4Ӧ'JI)TRe^ZQ򳤓ze>zs-y^6e_$*J)$t%+:I7Y-_YImZAaa̷0` m%J)$tݷFas- 0a 9tA$j$޷䨥NtSN/3̺ʺԩRJt>l]6ҫ󵨓{omRQ򳤓zωIjFΒM~f ՉL˳E+vZگR۽vYiݹ=wd]sݱwl]vݱwo4*sź wd]vbػ.싻BiXwȻKJ%-E[%-Ec{g׷?;m߬ߒ""""""""""""""?+89:뙙ݙݙݙݙݚccccc}ݙݙݙݙݘA8A8A8A8A㚹{}\]nԵjݛju7RժvnUKVٺW[u-ZfZ]nԵjݛju7RժvnUKVٺW[u-ZfZ]nԵjݛju7RժvnUKVٺW[u-ZfZ]nԵjݛju7RժvnUKV_oDDDDDDDDDDDDDDDtm[v]ڻwwj݋wv.]ػwwb݋wv.]ػwwb݋wv.]ػwwbűm>|~>cg}mo[sc:/c^{ 6:Ewo*d,WO #"رg؁32>f]^ۍ8pq|>??_+۱x<}GwW'h>q|OnX3YL"  E A9 P3_d2&s&BBPB}}DR(Jmv^.O/-v^.O/-v^.O/-E;|N|&BBPB}}DR(J@Ͽ E T(LH>@'A!H(!g? E A9 P3_d2&s&BBPBqd2&q>HP}}A |&2hH4$ #&Hɤd2i4FM#&Hɤd2i4FM#&Hɤd2iJ㒸NJ㒸ݶyݷL2dɓ&L2ddɓ&L2ee2}3mUTaُfٻwF黏f0Ƕnn=tǶnn=tǶnwٺn7M{f黏fٻn=tǶnwٺn7M{f黏l7q훦=tǶnճ UUZlygvo,yreۏ;]̳qu˷ٖwn{m_9,llmmۜ;Mm۔z%a!{k6Veܗ{k6%a!{k6%a!{k6Veܗ{k6%a!{k6%a!{k6Ww%_Z͉XHn͉XHǹ_U⹶j2݌ڌ˺ܽQwU{3j3.rmfeY+ Y+ Yeܗ}k6Weܗ}k6-̓3/mf]}ֳe}r_uؕ]r_63j]Y6yͷU)L̿Z͕.Y.Y+ !Aa*jW_[go~{{84sP";‡wY霒l 1`Tɒl bƟR}B*h#,"D"c8^X0:bWwX^%(IuxfHO^X0:bWw^X0:bWwl fH׳==3n ]g#&fv sķ .9(Oug#1sP}qb-BKdGLv'9(Oug#":c`=՜xÝVq0; d0:b>}`1eНuxS9$0:b^ %(kq3霒naTד.[0]qb-BKdH"č,@"  qc58莘'Edt##۾=P dW#HFaA}l^Cʪ*/eKZbXZj1+R-%k&R"V,R-obZZkؖ)ZıH՛f5JvZe+C"V,R-j1+R-%h{"֫Cؖ)ZlRnK*Fx!a H0%hj#rp)ZlRZIZHK*F^VR-$ RnN"֫CVmTøZh{"֫Cؖ)ZlRnN"֫Cؖ)ZıH%EV%jE JԋIZ=bkUKZ JԋIZ4!E$! h8wZbXZh{"֫CB4X hBBqH՛dj"kUK[-R-i5fHøZ*ĭHKZ JԋIZ=bkU6*FR-oZpHøZ*N7TI+QTYJh#Є$ rԋ)Z2e+R-%k+?9KDίZœ"__܋h{"֫CB4X hBB yZHbD> %u^oo>>AJ K_'G-m>Z|oooR q}Zz˚.kiZiZiZHF]Ys\eq5ƛn6ɸ۠s1&li&iZiZ7mQ`33A 4}A03 f0}A f)v gf%+|8[5Kqj[˄DDDDDDDDDDDLٳf͛fެų82n8|ʶtYoS(s{⩿ۼXݬ?n7zԢjT*U`ϮyyoU]^bUzy{j{3P&2YdMK-EGaL٫!2VlDGUA 9e#f(L#;ϭDMw[jw,H$fYR)Je}Z*-=iZn}f*HUPm ,ɖA&Y>:|Q %it{&xg/3dRE#Qkn6y%Jeܟ?*bYO$aI"~iP}LJARJwuYo: He" LDEDyśQy+owCmBd&uw[n]z\mjrȗq"**XH z|S =.̳'Íx3<*TNG*K%%5UʶO}O+IfJRE$R7$RHo':ui>rE8#*?onsG`266 nU|=b\Kw*ekM,Q׷=nimն`fffffd!*J>*T{mgmI83;˻fx^݃gnMVw,Oޙ^zLuoffX^*}yj[X&*<ųzx6w]>Nm*)k׆Zy{ͷU~P2UzYG.eݼuTU|rtuο\$([\`dwHY$vIĒJ7k(W=_zw{u^ 7}7a Q;λp˜%wA[uy՛$="wcnq|\b6w?p).UUӫ|z2z009uUut] UIG#U/NQ<}=޿ y }-$M6@#@ H*?*_ZKO$OC߬=w+"~7Qw쪸UTo38$ }_"ƈ(P]_>xqm\狜=ڔnʙusY%z9>.Pf9uu.Y7i'\ș%II7I*K_XKno?yzgxZ4$URDGGwjNqo{WS_Kĭ-ZÚəL zDșmM*KjW_gxbow-\\~qAƾ3~K%moe_:N0 [ îxxYOl<.XK%%aTjZKmwUv-;U7Ҫdؑ"D ED=${9e3uݟq%$9isY%m>1uO/f^qUUDJN fhݳx9%tc篟5{wOeUmIjmI^6Jw߼Mufx;>;w{Cm6nniJ|*T%@*<*\t63oޗY O m@5@`?k>ܯ϶ŪvVn4n>]?湾-krqq8ym8xMSi4~~鿕lVOˍssNoW[rϛ=y4qo}~/?mUNs9ꪨJmRYo,Vu V~MS執<2*JFT7vnٻH?d2S#"Y:[=}}e-M^_;%}SKGezS~+vSXHq;ZkwLiU:/<Mx`^ 4 0$'9$rd{Mx<ݽ>~•KZ|$7s^yn:Ә7f,ПV5]3jV7L{72]mm{32mxϵ78bH9g"#E**m&6 hU_{7x{~]%R&mIU9%UB\CbKALx'̨ך6ٞh5eW]JY"# DiOrmksvM|L<-L̀ LPβj~ڔ>9O.ۊ{|_bimTjb}IܧN6mS^^i 7L{; 'i$mKf-Y.@1 Lʼn7oNyc׋u-yhՍ6k{t-m_>+u=}Ǖg'U̱o[|ԟ^ao{{`k)^yk< U}{[}[l}o}3ԭR:EIJ89rm2İ"i!alK3Il!U"fr;57@"U-rӋ\ҹ4A-8֗73!Z%[='YF{}z΍Xձ&b&@"$kߒUkj"٭fibm.жd;^OsO˯ǨITڥwFڝmM<9[Y}èht"9cCM(۞{}򴪩Sn`7ߜo: ˠ޺ : 9dep6\ e0\ "*wش7à /.ddKd!b*dY]o"(@":"'f,dDG!.m3 2Yf.7-G.pH>EPGБޯ:E ݩ̗} 8-7 0sr_FOg{ o埡gsr̷UC""|pɱlldڙʮйA 3%|>ae3)|f_35y@@54[-,Kܫ9sY3G;+. ;ܕƥ d֡E]R.}.iK/&{{w{ީ:JRBUMUET*nnne1\qp/r81z#c1w/81F0ԟփm&UK,Xԍ>R;N1|%ԍ9Q>C< >-iMӵmmz #*WmUQ29UU.UUx-UV*UU봪$a-UTz^U"e?VV]$0kN}vܧ߃w'K7:̜3:eg=n6~mu}MY^;wwz޾@UUUUUWeD6"#33#>x̹zB6J˒W-Ss sGR:ru#'u:WR2ܝH뽧uO8DDH(ӎyUu#̏ NqރsrJ-s+κ.p%nd[Un0$HDH(@tu>rӽ;oy䕛f I][{.%+fsDyvܖS<_\F[ɭȈKU* W9NsS=]롬6LZ6ѭE붋EhFE^N˞Z-lmhZ-}z*b"$DGfgET,šYv_>8Z5ŢhZ-s-EMŪ6Md6MY66M2k'hmZEhx||3/m8\ۛg9v+\s;uˎs':V*.fk3ߕ?[l&-DDd@"jS'66N74YeG=A@Jb+Ԫ:t=dn;Wp"5)ЏLkV8k^6έup9Kd^:; PWd{io؈* Ro9\s8[n뫮*N9{-%I|ԾyVʶ̞x*ڙ4*iWsӾ:HI@`0IT*PUT*V4P*LR'EfJvϔS41/.iKi[TB}uU^I$I$ն[oKm;! ;[>m۸Y2H0ínI 7I>}=Kn.v0ԛB4- 6o kC~mӝP6 "#]8#ɊUU+Jj'eg=WzD|sA[|'}rI]c!DGU 55SD|j+˙<;e"B"#@z=U sb"RbdV3b/<<'~I")%mxLhX^|u]_10 DF@Tș33=DS""@>#s~ys!Ƭj-6݉[m6@69y5^5:ZV(=w񻻻׽g~7-՞t糽~7f]gp^e=nai~嶼/z3{g%ҡ>nU[ڟO^i^mu^Vl^:g3tfזS+Rkmyeֱ9,7vN2ff;瞺 y9JN׼S^["#DDWU33QU]UP\?T_ʘ+?g3w߬׎^~Cse,ݘ]*RUU%6-/0lG >_/_zaTDȞ|[ʬΦf-|*Sɿ0*odII+>C9}67'As绮C /w]w|=ߎ{77[jyym;۹_w332+Vmg333"#8P UbwU\$N7R4~fjC`m'=k=z0N$MUMt""E]""I9n5$nG$~GB?s/x2Hn$8ԒDGDEW +Տ+r><$3A-yfxj$}/SuﯯYN` n6^Nz9d>:4)6>zhOdmvk&'+tINDhȉK^LW.߭mg`ն[m{4:C: |9wfmvv5ͼL&Mej? 7uO'N|Lvea4/&O&{7ow;|+ssޝg;Ubk=+\ɼx[WzOvW$)kRew{誫mm`[m#"dDDbϯq{m͒,K{.}3y{*O/ק{딪>& $I"8r+G{z|I߃wwpW}{߇~{Qkyn)#ª$@I/iy;RỈ3333@5oj-;UURT@ %H*@ G?W뾟^g޾; $ČC_kJw 럺?e~K$d>v""3A&"8+_ }fW^wz wysv]uY7s7{^g`u߾yw;<~OuUT@*@I?$Gnwߧ_"#ظ{9M9M뮏T':7<9ιɝsueK~꾼b[OGU=}O~_~ 5Y Z-UVW_gcm[UhWVUxUM\U^yW+Kk      nۻ=Pw ^=w'fspmp{dOtͩkƿGz"ޒ}8Z7{%V^ON{&g5*ZWim{SKlO[twqUSUMoOO/>ª+KrFi bDO*VUi^}߽C|+*)@X1v󼻻f,|"2DD7,,W>]PwU:Gމ|a=ߚ\uЪ>PfDW{CT3$f!{US=E-##QUXTGJRCRGZT!UFZ$$ʉ8FSRЍh2_&H`yƵkQFkQFkQFkQFkQFkQFkQFH+(TvAfUU0*(p)r |!Dyi""""""""""""")))))))))))))))))))))))c1f3* \ʹ.TRSh5- ;I'٨919c8f3,rcfpSlqrCN3Ö9N1Psc8r)6jq8gX8͍A'٨919c58f3,rcf919c8f3,rpSCN3Ö9N1ʭSN3Ö9N1Psc8r)ljq8gX8͍A'ʆqqN3Ö9N3cPsc8r)6jq8gX8͍A'KN3Ö9N3cPsc8r˛\MII16 C6afafafa*J*J3 0a&ŋ,Xbŋ,Xbŋ,XbōTlF4hѣFѠFͶ6ڕUqT*+xj+T[iڤ8jYH} lffffAeB,BĶQk-EѨZ-EQZ-Eh&ɵd%VSdi)(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPѢ\,Q.rJJ(9sE%% K%\IIB.hbs4RRPDrIFT=ꅥO+j[ xY ?/Υp#%OQ$Hĝ!xRuJz$39zC&_=KRyK":ʕTBN*T J RT %BBj"m˗)6,&'9Ωu]E\uyKb`@**U:J RT @*U*$JAۗ.IbO$'Q9w+-u~s-Cm`|Ko^mֻޜs]FmRU8"""DD@?W~_ݝ]PwutwӽT8pG88H…Å8p!F( zpC8pp  $pÀC(PNPwutwӽT;.]=tU(pÇ4p@wWOwp];C{ުNPw8HÇ 8P;.]=tU zwWOwp];C $pÀC(PNPwutwӽT;.]=tU zwWOwp];C{ުNPwutwӽT;.]=tU zwWOwp];C{ުNPwutwӽT;.Å8p!F( {A !4!4!D&(&aahBaa( Є  뻻Q R>yx;;Ўix;;+Bj)}X]eJCDB!@ B!B!@ B!B!@@ B!B]۷o+XrAAAAm\@MTl#g[oŖIe*uy4unFMr;ub7bh׫۫kF\XX5voZѯW#V#z&zֱ4kՈ޵^GnFMr;ub7bh׫۫kF\XX5voZѯW#V#z&zֱ4kՈ޵^GnFMr;ub7bh׫۫kF\XX5voZŷm剣^GnFMr;ub7bh׫۫kF\XX5voZѯW#V#z&zֱ4kՈ޵^ny!|!}eUDLAԿ('u*ٲfYUJ1$@ i( Pi#M͵U`KT/1T/%ISaT`Ede(I%?&2&'"zbN0ʥ=~i*_)/'*'vҧRzLU"~xTRͻl 66@ MM6@l 4P [m[m[mpHI  >/tSB̏E):%I /#Iz W̪/|Tt&h4)*94 Ah4 Ah4s@8h4&iWTQ[,.X6 30CRIr_+~2X#K k[ޭ?@@ CmmI $$@mg_>o33Zd&I2d$d$I$$I>zBd/0%E/ڈ◊|ߩmG?=8 dqÈ r6?/ƛogym=򞠼_Iz^t]]EuuE]WQt]]O."躺^t]]O//H.躺..E'/^^t]]O/__O/q|'W.r>/VG%K4Pi-P~ԭZaV* 2_?CP{VUc\f7^gGt;Y̹s]1.31u.q]]g2wtuXc\fus.ms4i[hwv(\{ջ.-s[Jܴ;4i[hwv+mt\u8f8]Gg{uNLq.sl;˨ GRII5Bqm^4Nѥm5Bj5Q% ) ) Wu nunÚV%,,/MJ/3s\|r^/$y\u8ln\z ש۩].m+uw=|WLTQ8@-`a I&t/A}-%d/U|Mm㈈}(x C6YeI$I$I$I$I$I$333?BBJ|??)Toc^o:ǣǛ׻aԘr}?D?D>(B_몽,WҊOqrƴ iK҇) P>$;*SJEPcBMT,`JVT,      SYSYSYSYSYSX,d,d,d,d,d,d,d,d,d,d,d,d-eMeMeMeMeMt=Q$H>WhD}б*v(W?H~!|:8ےI$I$I$I$I$$ffffff|b}b/)_P}!V1Y1c1dcK&1d1c53&1d1Y,2jf1fMU}/ƒCUjE%$RRDDE$DE$DE$DDDDDDDDCfi,J) ;C,_ܔ$Gh}}H}2|֔,>GEP_}!=)}q@PSyB=TAE{bUU") *EpXBS/SdE(K詩S{S*Q;( WRQTBH_#*_J:_}"GiT%Rb/;~Dڅ$/UоQS!*~TA#Dڒ- _UvTO 䶫CmVDQe`|~dEh}B/Z*_$j-?%dxsFXѣF4hѣF4h[4jm^zuzke?$d_2_X/*T6lDDDDDIQIIDIDDDDDL,DDDIII3X٪ +lٳ5%RQ%%%%}օQOօ+b4Z Jđ@ăIjt +"!v > W!}R'eYSO*HzRrBWTq 9R+mc1c1c1c3@3333:ڪUDDDDO]$ b H#ll͆Q"U[Vkg@BI $km""""""""""" ssrA H$ A H$ A H$~K,,lPEy8RM %DD~"OaSA)EH_D){U[%LDUY2ȪeO"*|%OΪO@/"H*U%NyBJ~ʔC*Q惕)=ģR Otޟ1U`bUfҧGR_pEO쐼aS*(`UUx"R6m{NzUUmm'mf6rnAAAAAA@-t A HsjVj6VdC$W\vv[mw؜JJEkrն@k+UUvB'!qRH]΅RW]H=ЏPB\RffffffgryCa}ܶoඪ}UE~z$Q _R*_A"WEȲTv@m%\:UL##R~mlkmCΒ^J\*;(_R%YA#ЕzuW +RD`!v/O`A-~5mﭵ5=@9m~mV@m[vYV_,Xbŋ,Xbŋ,Xbŋ,Xbm lllllm  09P,kUEĘĘĘĘĘĘĘĘĘ[-i-i-i-i-i-i-i-i-i-i-։IIIIIJ֒֒ԼN rWO!J? H_j,Xbŋ,Xbŋ,XbŶ[-ePuWjߎyk-[Z~;m9bŢŋ,Xbŋ,YU,Xbŋ,X2p*:6  'ƫW8@$ms3mUjr/D:U"9E/O$a:D+L2+L2+L2+L2+L2+L2+L2dd.\O=ISSTSkݶ [f-5B{4"K #J0CR,4{~iBA]5G]6+6cmm9Z FbM*&0ĘZZK@֭%kV5Ihդ jZi-ZZKFZZK@֭%kV5Ihդ jZi-ZZKDd4 jZi-ZZK@֭%kVȖi-ZZKUjeB"Q2bL"L"""""""""""""4mVm[jZ"$H$ 03$ $ƲjڪV(K= 䐺WJVmjUUz|%N#(?* *`ai"!P TՏSUm11111LdLdLdLdLd$LdLdL\l䶳[Y>|O xhDﲀ5QE`Gj>VǡM{ϤXfoo>OK.iGmKORQYc}߾ff~333333333f }30Qn 5uWtKr""' .c|vt 0ΔEFfҚ"H %dEYQbǷptp*,H"˘#+ X1&E%MH]K̫KRWFF{R~)b^/e mҫrv*-\ tb v*-\ tb-tܷF#^[«r Gyo ͼb?-Uo#ƼV15*-\ x1[b-tܵr*-ш-Uo#^[«r GV[b v*-uWmҫr]Jtb-t1c1c1c1c1cų7Cs4DYC-bIZ 4T/ BiJFV aVaVRErH)J Kk W}_?;߻10;0Ky#9qQ䎣gW Xw>kŞnYY3=q U^?nc$hJXfTHBN@/ wM4U%lO6cHugETLA^t`Wj!By;bty-E$G v!"! WyKj&IqgN:C#P+͜W.gNtwNZs;hJJ/ % $ٳB??~X1c1c1c1c1cɹ7_fI-Y̻s7Xs6uxgnjyۜQ ˷9yn]u[!yz<35w+8g[džld݅ ˷9yn]u[!yv/-˱nvD/3.v2MYnȅeۼxgnjyۜW.qη 7Ye "nrܻ&,adB2^[c$e,^f]rd݅ ˷x#8\͝oْnvD/3.v2MYnȅeۜ.I-Y̻s7Ye "n᝹Gnq\Ǜ:<3$e,^f]rd݅ ˷9yn]u[!yv/-˱nvD/39F`f,1?JO U%^EQ)<%,ĢRxK),YyDRX/I,e`YIbȼJ%'ŗxJO e%/"(K^EQ)<%,ĢRxK),YyDRX,xK!,e^%YIbȼJ%'ŗxJO e%/"(K^EQ)<%,ĢRxK),YyDRX/I,eXBYIbȼJ%'ŗxJO e%/1 ^*rSm*ݫr[o[[= @ @ @]6[bIU.#]xy^D:xyyyzzzxp^/h]*B.z  м:Bt]y;#<33@swj1, O[jتmWuM݋:I 6$`w)_Wٹǿwwv23;wݾ̻ۻݾ̻n;f^p `7SYpm<@4:Sw&i?nXb:dySeu8 x[h>^6f@gwo~؍ن338/<#w7ff9^CA@ g d9^{ۻٗ~ހ@2@2txȎ#͈yfj\aaayx1xwb6gq<O36<-ʟ|2w& yb6geOy}w;N^=;m<π4:Sw&i?nXb:d$}bfemmmmmmmmm_}ϻQK軻_UUf5k634l fhXѰ&`Mc3Ff5k634l fhXѰ&`Mc3Ff5lfhXѰ&`Mc3Ff5m{~~AG$z6mmmmveS6bOoڄsmƚis=经{#}6wO@Hٱmmm|9{oqqqqqqqqqq7{=9#|||`G$}_>fy>r}zwO@I# =9#[fvBwNHW]2fxev>ʧ|ɚWg]s03~极#4 Vo2Mλw~ `k=Ӱ#9l6'䏇4gt5ya# =9#,Wi[qjs19cs |wdt9;`G>GrpG$w#>hr{NHOٺzrGr@=9#SOagprLJ3mtl=9'x38wٺvrGr3Ӱ#5&w<޾7Ϗcɜd9~Ӱ#;ߴ9=`G$i=9#~nλNhr{NH=ܝﲨ(˻R/ﳵE]TVA[UUtQE]ws1<;`G$|כo_L{DŽ|y1d2rǚlއt>;G$zno{%o3ݞd;fl7is}U3;ʫIU]wD);om66}Ms{&6뻅q 9b݈yt-v#I_]|=~{߯~p#PF "PF} 1 0ϸ`qi Wa ~,H,0a*0oXX`_Wp#PF "PFp#PF} 5-4a* 0}CMJ}F%0H8яAI@@,EK"RȩdT*Y,EK"RȩdT7c}/O ɦK&L2dɒɒ٬k5flCS7VI$HLߊowwt]+{su *]+{sqwJ\]ҹsqwJ.]+VwwJ.]+W1wtb.\]ҵR}JUIW6G$g{suw3wdf%׍K7^7{#7y.nnFn\x乺suw3wdf%׍K7^7{#7y.nnFn\x乺suw3wdf%׍K7^7{#7y.nnFn\xJU|ݯ~-nd@o_{d$Np8s}$I$I!%#vf\1w7$T>G{{{3$NbL3q#SR7o1js+cyu}S[{Ws.;wu۽UOIV2^9#y#S_#yuS[{ZczWyuS Ü|W{3$NbSsrUULyx?08 M/TOfXT#6[DeasƑ&SXAX\'EO8AX\'EO8AX\'EO8AX\'A}Y~{t A--@ Pe-@ PjhB\8W<<貗x\^{z/ .diW^)z.ˋb^z/ Ud#=Ě;0aK0IlNpY}UeeEe#NB2B1dbJЬ*"]OҊY%{] ^UN XX^/K~p7wv}s;;uu]nW[uu]nW[uuݍv69~興Y@n嗅YEYEVQeQeQeQeQeQeQeQeW2O a`/AjuSJ ~{^mmZjLQj]Wˆ B \ymB$I BLBcc UcDŽ:IRP,b ) DŽLY&G,#I DŽIHIHLxK ! 2) 2) 2) 2' 5D!&E!&E!15QZ@"!&E!&E!1,"dRdRdRdRdR!1,!1౼mcXljBXTS"@(G|$G01\sFFameFIVI$e_v*zNI$PJ zgGgSJGtI,O$Afw\]ޅ1T$I$YHI,,$+t6s#zy.BI$r:$ɘ;w7ĒI$gx1 bzs[In9S9 pNss)vD H=9T;I'mpG9sK$ 0iCVuѳ jH궽]UsvHb3&L$31)g\Vz8{?p2u8p!s;˷nAEׇӽC;a z} 0!~rVsk (oX]-vl.%9:QU'O&?@7>67~[K_&'3~Nswq wKkg9\^_>JX G"I$ȈK+R7|J⢈0tZ(*UVu'9ssؕ?z׶=AmK s_OQU\YkiO$&I:g J x{~7uHTPTfe P|Jm!Nfl_;RĹƥ4UU()+x;8O3y/'w%wd7S,1s׾]/F>a`ZK-+j_}5oJL>~:m$[- ~B,fk3 8wCFT\ 3$N 689N*uSNNw*hU1U`SRu<$zDDU)әTs&ܙ޶f s^UStzٻMw] YECC,]]VNf>8 ==Og+kʷn[i>j޻q9qV*RWU\U\X..޳:{w߮qbj)_6쭚+#_.=EP)θSs;u{KEuὮ{N>M}qUKHv5bI$I ;7ci>LԾgϜ5os/ߌiMy?_qUwvwHB^3 ޮ|o7.o[q܆!BgyiBN/ȒL-$b)t0 Fަב$${Ǟ{QE$$&&HN)`Ã^Jo}Dl{^p֪nb 8vN:7G^X^^r{HZIه~C{zi;FDK9ҨRjкBum@ ەP}c3cgqA4.m !s3MjI5k!axS^TS334&d;tF)L.̸bwoq,<߽oY}wuD\2^gOx:s{<݅++ Z^n7 ~ˉ㳺I !*(Z[ 9‰$};+K}C$!$cGw߫|[yI,*8csI%@;H2gH'CugEn;||ϙ$;|ZH@2qVT,~xI;+_ժ5[no__oנW5ulUW|[ol$s#s\\l$7\u]=gݽ6yf-9̆\R4A7/\۽V.O֯e; *pGB,~dS30>îӱcb] b-v.wغuظ޻v,sӱewܳ00;K=y-eOoǯov.uк:]:tX{`SDI]غnKX]{Mq?{k}C13^0Bۡs uB8B][ޠ$RgI!$ gowk>k{ݵ= 0ke iazef*wrb) ߡsmkp]%]u 0_v42fa02 έ3xǠHnm:nz_JIԾb&'ԢuAz|??@p@/ӌ3X~†fpN-rܷ-4ܶ-r9Gr|hψTra06,UG6vwئQ1˻{fbf*]1̪^"*큷bk7c@mښUUS33LV\ws`5S dUlITK 䤪Ag1]ݙw-Mo-ؗwtH6' {eswUa]q;yW3vL|\[~>󻻻z]{ =y{7g=f޽312g]E4Y͞}Ɠ`f6!$!%#3 k4mYX$ 0:a!!$;PlF7qOkq,-`iZr֧8 /O]F<>G80fc6a9$sH8zSG9:H\Hx9ݛxrI3`o7 6 0d8$u9$|۠$s$sH8q#yr0Ep; 3'IsU Hg`1kT;ڸ8=G[~ n:뢇G]t뮊uC::Qn޹q{fa+>|ΥGR.uCt뮊uC::몉κH @<@;y'@`vo|yջҘ_"nfI6FEIvJH$&4BЍ- odfa2L[q=f$8"JH&$γfݙ*'%BHL *mVw{l+﯁/rȳӒZqЭg3BA? SEãyFO''.f$gBp ^u5O905s]oo""#9<y^ɜs3%myswwwva&fw\]Z ) Hػwػ{jIx{yS}fNvt ڱL^ z'oTF{{Isl hRr&i*W!@Vs8fO32oI:ɽ~o/530rߐx!32BBL$IX $f7]u~do݀wwh\G:ܩ#}R#Ut}_?V꼙a a!@ f*@ U TTp< 3ݗ.}n0c*@ U$H@+TD<@D@S3*t{8:7{ٽb ac3*&ВMK3( D1@2o[fefj*7ۭ01> ǸYDŽsO]t%k \=н*qs_gޝž{"ш0)2 VL$\TmfzboVvK$X8û䛜uM'9uC(x8X`ibҧ*#NoS4>3}00$<&`!$:PdaL R T, Z.=􏷹T+=$*BR TDw;wGNuҮ{1h|}HE30z~;~~wwq R{Wyدλw3pG8! 6+L$[F*+m{E{mEGY}p׍D![m}1atSvqwwr30&f$DnIwGnN~{w}yd+|\Vg9ﹼ{#fs\>7{X'&WǭN+}IqmDRT`f)a;:o$ITR+@L̒0L DD EUP2ii!$wI=|^I"nwS3>ހv1v2C h!< w zT$GGUA> 'qxf! +F0#*R hTZXLWUqڊyv]w۩w*NIĠL#Jxjf&ffkNKAi7D\IB!z-Μ[;KENv[;$^ֽVAm|rz_;kk֩.ޞn6Z333rHgM3s8<`${ u5tw9[s31RLm*2a<.J=Q3]s8PwuD_ol=;1~<}']wԟtΩyI-$qܙ7@z?)$2𣺷. j3L DD x~@j*$ a"f!On.߮+5seJPu_Wy;pX U# HTCjT^b,;˷yk|۽Y=Vn.ޝN;8wäTf[-lB'rwf{V^O;׿sjb Bbq݇w2XKDyS۾nr9}a]]uЗVn3wx"߁) 1~Uz} ^7n( RPÛ8{쮵]בc3];,ϕ@ !3f})*R"`\oYj=ə']w"hfww,%z!@ M/׼w{g멖f$xcb@>87eP)>7鞳2#޴lYrwt01 ZZut]IN)/qp䗒W>b=_H_.^.sdЀ Js9 }^ qKos`̦e3)Os-W6kTg?VDv_N eٝvgwfs0fUfUę3nl߮|{߾ܞ\|f fs`q_=eq XXG(==~ ͚!;3;Ҡwpbꪩ~s*2wxd$2Y$2dF+a|<Θx٘sr5ʾkN]ns\*9;xy=8 |yl.fwpw$]#*#s>q_#ҩc .Ӹ>nu3d%kXz)}+B2WWb8Ii hA~bb(d]`$EU)` i4ER VINhv"G@+Q(Y!Z@犋FTT܌f+1YVbf+1YVbf+1YkQě|T|.jQ\D.)nJ\ʨئM 9S|!Uf$JJJJJJJJJJJJJJJJC1f38R\5,ծqXرcKealX֘Ra\qqN3Ö9NUq8gX8(sc8r)q8gX8͍A'f3,rf֠pS3Ö9N3kJqqN3Ö9NUq8gX8͍A'919c658f3,rfƠpSl ʆqqN3Ö9NnQKVa*J*J*J*J*J6,Xbŋ,Xbŋ,Xbō,ѣ4hPPPQ0PPQFVַ+k[MiNh1 ef4FJ\C!WPiI)WӶm*T0#Z[FѲEEѨj-EhZ-Eͬ#c0*ܵrJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q.rJJ(9sE%% K%\IIB.hbs4RRPD˚))(X\,Q'+NjeŸ~g;797+.....s9sy진~àI"B<伔!} x;j#; ]'TU8#+u==_U#^`@$@lmڭBI $^n[CԇTI;>>ǟv z F£0F`[N R2Nrs.$O܄yK(Y%KYRJ$>ﻭm~iab57{к={美]=G^.`D;wqVf~smk37זmٶ&iYVi.{b=~=>g7380bIJ%dJV*X%*XbIJ%XbXDbUV*XbUV*XbUȟw~7><_:kq;V溸B0Yi&i"$I7JW:hQ8 M$B0Yi&[wgtuq;V溸+s]\N'vtУL4qA&IV溸+s]\N'vwJW:hQ8 M$+s]\N'vwJW;nkݝ4( EIn'vwJW;nkݝҷ5[wgtuq;V溸+s]\N'vwJW;nkݝҷ5[wgtuq;V溸+s]\N'vwJW;nkݝҷ5Κi"$I8f`g+I$ĺHslwww{yQ>Ii GE UR}kP!B!@ B!B!@ B!B"nݻ۷n~k r˂   smˇ9p˛q6BDtUZݯVןHHmmHH /~/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j#."J2/$j:k5ՑF>?3i Α_KRD&,yjZZp,ZvOTԽRHHW 3S$I~2*r.%5S-%Ie!8`Bx;)aN,2%M%ؽDZ'D`LLXLLb2INpK#ڄ‘>{$ $66BI $\_~[W{.>%?TU_ܨZK_fffffffffffffffffffffffԵl6[&mcFXѬh4k5ƍcFXѬh4k5ƍcFXѬh4k>ZudSIcIb\-K.* dI4iGq'`gKWI4C:*C B~'ؕ~G-);%$пiuqUg5~J5uҪsWVqq\UY\UYr8G5qUg(LG5qUg)EsWVqqsWVqqsW]*:p\J5uҪ]tqsW k*)bQ1ʫ1ʫ rNj*J9˫4|>tW%| 8P~*Y9K'5ARP~ _QLb 8~gGGô42pGF#GFG %KQRB:T>]I ArAh4 Ah4e慵8`sl)&& P^:援2>'S╂?dGc: ar2Li:al/q9%9*m$rZ7*rL[9We-;$.%؝pO?).eTO54xK\o.Xnw=JUB{>Ib.Gԕ{$g)`Q8pᔲtڵ@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd@Qd!DF!DF!DF!DF!DF!6lmYn/cЧ=HI`%AOE# y5H$I$Klg#񐲁KRVڽI $ fd $Cmm५W-V<$H j֫{]X_^?;<\uk~A@ M ?>>\Ǯ6s5}>'x/kEuuE]WQt]]Euu>.~WquE]WQt]]O^t]]EuuE]E]WQt]]Euu?+?MzOWOꭶj[Ik$)Cn?<ƥLjP?}bL$\\y 9g}LuU = 83'>IKU4QԙUU'F p&Ueg!Bt`>[US)JF48$@51E@51E@@UPQPQULH8%wI*,JbB jpI&*F$fj p$bYf(A!$H8%wI:%H@5ULUT T 1R K$tUBIJUTJR(d$HALDLHI$ &"&afݐi(bI()}SU^ݱQK܄RB{оb*֒/D'.UIu\}'_?؞'{.U\U{,?N p^q@#\\p ?p *ŵsZ֥[GJWj{OZ_/6lٳh5`ؔ$uOtbГ%t?c?e W"/r O!| kRGª)$@_җ|Q@NET0F$i/SH_ J!|\:SRF H؏G_?1E/ABxT_XX/EKOF}a0,$t>5[W""""""""V5ZB~?O/o!p) T5h ZV ՠj5h ZV@ՠj5h ZV Z,C Dw)Bz/^͛DDDDDDDDLٳf_SJ /!r*ߺI$I$I$I$I$K33=B^T_$?-fJ|q;ʦzmH|wDJfZV1jS*QOrLz"" DDD,,@ %V> \S!{!Oٳf̘ł9%g""ZY_7"em⃊:ž܁(WIz)ا_SJ}+a$`"?T}t%YD]aͶmlŖ^Gy^RUPSa|">]!!_*~IE_eD~ID–ډTz/Sp/ ڑzx+Uad0/)/A@yGqRGBq=)REO/VBĕԯ_HRHO_JjK`ccN{SRTV". ~/RY+~J*YRRT/J$xS(~aDrUB?xܦ)BA.?O̓">71c+1dd1&,dc1F35%dc,LYF+U~!6Ye405NWrR_D_Zյ/DDDDDDDDUjҪ(|aQ]X%UH*yHX^Ի EKUS.]6Mm6hѣF4hѣEMյmKG zȽS*pirTEI)=ŌSr&-H"/*WJ3ށNR>Д Ͷ"#xDeNv=jyx_P p^SwEԸj$Z//IG8Q?_`.NWj+m5UjH.q'{|mVpH  6mm4I $$@m֧ٗu;EBzqON)Ф|(~OS~ p/ WT%_I_ƪB/G|vR=PBDG? }I `%'ʪCRHI%RQ܇X.T+P [yV֯6իP ujוZ4^{/.*y6ٶAAAA UQ!RK$.NV6ֵI"+,EgJQ앪t%je=Pu$? H_#zGP|(㽑F^A}tB_^y *ymlUjaS",SE@JAЏ~1R8D`#BDv:Ч';pB޿t~{mm;Po :QS[ֿkW[[յԶ#f3c%eŋ,Xbŋ,Xbŋ,Xbm* UT`6b*,YbXŪF,e,YbXŖ,e,Yb#XeTYbXŖ,e,YbXŖ-Y*YN:I&dfI&YfI&dfI&dfI&dfIԮ82L?v v˫W'1P9up\J(E搾*=l[-Xbŋ,Xbŋ,Xd6y|؇R~䪳/b̰l[-Y,,XbŒşpUD26i,V/Wʫ]\s79˜\\\G 2fFYF#!U%aVFF"_}PTHJ*_ ' qhFZ2іe-hFZ2іe-hFZ2іi6 ة5;9qZ%=BvSI)=W5ujm}VUe[EIX\Xe8U IգBEdH{(⪇t/A`f֫m)m#K'd/dU)K.%OJhB>([Y11$LdLdLdLdLdLdLdLdZqUC#mOIS#OF*}w{8g;6r0a ǀz͒N}wo[}ۭ(;-w]n.U^ƪ*Sn!*곛 **uj]kf[[)JKf.(#W]vy!hx!??8Hvh{C! ! CHqHzC:ACC$8>!!zCА>!tv;C!! ACP;C;Ct=!(q BC!HvhHq CP!>!jHHt:CP8;C! wnjzc\x|xǦ;bBC;BC>!P 􄇈|BC|C$$$:CC|C>!h{BC!(lz;wnjxǦ!hH|BC8>!v:C({CPv C5HHq Cxinju\x|ycx C !!vk^1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1,yVճz=ہaQ<ˊw^gNǕ|znwy']]"!.d]%P_.mmmmqmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmqmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoEUz>;T4PnUj|>wI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$MI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$DZOrqf0H@HBHBB$$ a ( 4 !DP ;*|^-=Um!.j?Qمu%ߟgҟ4TQK[|h*EUaEE k%'T#g6J1o<=[Ʀc{/WJ:ef/Ngz;׫_EE64zOGæL{ў7q e+ˡvBfY ͙Ҧ,gl*kG6goJ!BՁ,t]`Yt/ӪGGOFF33',,,ӆf!BՁ,t]Yt.hX7tU_uVlޕ1gl;tU_u֎lޑiZc63NoN]iUۦ鵨Znb^üt˰WUvW`Yt,y{|,՚Ňv|Vߖ%zʯ\b̖ef8xgwG0ÌfG[*cX%y^"xҧ\گ*s.M \a#4P 7~f,fY;wa3 xgz\N[s`@=7]GH0L\1qd$$DDDDvi#Àt'LDDF LN4D"""""" Ĉ"""2D"#4A1#G!A4Ȉ">4A"""A"""" ""!NĄMt4!DDHDO"4H"'N+=컻\ふwStuӒ$ R(UʪEvqvbwv8j$UUHrUP$dY;;㠺/pU,^dw/"EI]8Xp3C=!bjrƊ]ˁ9"  {JUUUU8UY?m^n#궽(VTW廩bU /qmUU5TUUS.Uo_FTER_o-ݾuνnaUUUW{0 ߿twvQX\ͪ5g̣^ݪO-UTU| ڪ߽wQeUH5PHXU87{تTjƊWzt;UbU /qmUU5TUUS.U޾=R*KE`GXʎ*b8\.ebpb⬰] ˢqbG1p. ..Է dtظaap踓p ..#;1pGU,bqt\...\,8] \..8] Y,,\,X,qtY#8\FpXu*I`]Ŗ,c] ,e,YbXŖ,e,Xe,YbXŖ,e.,e,YbXŖ,e,YbXŖ,e,YbXŌY,Xņ,e,YbXŗbㅖ,bRqbȒq`K]Vʌ,],\CU?~ގW^P9os-ˤ>PBZm$B$BV\/ʁ#ddtb1qWϹǓ>ǣ~ggea<0d 40|> Ӹ9=2^j}+eyzO{~u^ޓlŞ3gW2Wlָzatd8Aa醆+Ä=={FiJO}hy+W1g,=[̯︮oI6bWS=q{es&x**߬9}qӠ%{g'ZxvCJ^_{7onn4hnRn4ibD&nn4hnRn4YY_d=+e{zOŞ+gA̕9<+laehGA8#Eϣc 0遀̏6]88,weݏS;;32323B`hvv.ۻnEKI% AH*A+`Re%1zg\=wyӝm[N*Ӌ|+99s}toOWwrw6;cVsUU{gueް 6fj&fa='<4=}}zȎ8oqUp^_,cQ^7{奔}6ۂYWȲļn8^Etp*,XX/Rؽ^BĻ _2b\.,^Ev/v.p.оB.@#YiapX,YXX8Y,YGKyy$ʥo-Y1dbőp1dbp.#H1dv,F.*8Y1`d~1dtY1nk8z3f͛аEY!&.yˢ,XXb励eI8^ܸ.ŋ̰K رyDK/y ȱz^e\bXˡqWE#Ⱥ㦋6,ddtU#zb]CIEE*Js>/gggggggg`r$'$ܓRJ800:Bll6 s3Q6޹K|d7/{z{{U@y1vU*K|w՛Z֝ c&$1 a aϝl5Xl5Xl8l5Xl5Xl8l5Xl5Xl8l5Xl5Xl8l5c19y5Dž]yހ~~`x`ڮg0]`uU+ ]dF}LI3c̬&s&s$ )\<׿?0>pp &,'|>>4%Ir~?7onsnjo8J} ?3 HŇ'::=yös*xg9sRg/~}H A>ueds{{W lf$)$ܚbY/P*« Wܕ%Iru9sֵx_%iT7+7fgs` >sEk{|ZycI3/0͈J$! Z߷j mv Xc&*O h BCa` AY,G"޷&trkOkZѪx0{{ݎ[ZRT&~_9sZֵJ]LUj]^ayŋHK @yy3΀'F$6&6HF$&jIs` Ao/INY;wyxW[l5QWKfo;K~*J2@0h@l,06  yL;_w|\Kzvt95߱s8w{cywߞo{:Ww~^o)f<ߜ޹Uqn,msZ֣#Z3;9{K;7E954wzY]zԻ) 7&kZIowr\\UV{Uʼn]Vk̕%xwγ/5Cw{ΏjbYVigm 2*LR\gپU9sw~t flƖ#Ok{k2fJWkμvgT||bHK//hK6曣qikZֵ̏{[sx l֣I%hXiV|/Y/}{<L43e4ıb|J*K9s|;-"n[U7>{ΰIR\G޵ZfUUkTc}zB4=9]ݺ;]k5*b32LT`` Oz5]S|Ρ,HK"Hฝ3:/c)TwDt,KEp}1LOo_?.88`áaaа`0wg}{V{9Y޻}9mWye^]+U9y9{I!%vщ BYy~!,Uwh֯|xyO|:.U]\Ki8,07vkZֵ]jֵwzWYRwR̕%Iz[ۀ*nW{ގ{Q7rT<ߖ9s߀ٕUy=Ux[aAVH()PW BH() yǩ~ zyjρAI$‹()PRJPREUIv*7\۝{1paa." 8/^>'$܉7&Ap:46 :ap4 8 '{vs[^5̠ 59sNタ}{タ Ɍbbg2cԙ/G9stvInW囱n3fW2~ y~ylqTk5Uysz]l:Mʳ*1^ }^7s9LkZӯ2]&s*Qewl9a*KӞ9uuV&k5 7{X6@Q9o5kZֵoZ[grFaV-l*¬+[Jyגz@qĪJV Xyn^Ü̓w݄1_>w9s9߀915bUV v]Zuy{LR^瞳\<|=1+wpf¬ 7Jן$|9syf9UXUXUfQyfs{~$8?<9}\ raVB8>|Z`ϯx&@h Aa@@l4BAp44;sNzG>^|rR*wxbTf1PQZX woZ<%+5%U%b_5bUXUXW}@:<5&oڢfeFgUmQfeIQ >(S];f1΀;JĪJK/3UXUXW}A >&1<9s^9=c:aV*ww ¬*«ə*K}Lc8a|¬>naVT%foJ ykZֵĥbUV%UbUV%UbUV'{j3(IojM|s'szܽwׇX]}G0ݰ 9]Ns؃1XE/5ԙrvBaЁ@àÁl0 VXjoɮE󝝙FʠePP]֧9<;@{={@UP{<7RTy>^9]ݞyVVa99z%bfʩ3%Izϟw}.6ӡvڢ(XFbT$ "aレ|P_9]yKɉxw1 "BHPx.`ో ?h}ܼ*T{%OU^ʽ,{FXG{p0?EEHI758T8s,RV?"HGEbʲ,Bp%|: sIU'ƄZhe/RX%)Z7 Ru DDQ=kinMlIN\jfw4m<0kkknyiK]h%JUxa ?8_ٔI$؏խb[bb#Z[KhV/_g'_9YL;?y'o x?ͯ[j2^K5ѥ.q<) iy7{7}3˛8/wta?6?osKwD>|R\J_YeU?9˗ëms|~sye'M{nHϋ뢩'4Gםu~ߦjQlV,ɚ2S2̙RY5hF`~O?WOynY_P W_\W'{p}i+ϯC+e}^lo=^NIVh@}v_?2'~>^3{E'm~ձ[(FaC.;AVXYT,!B EL&߫j+WY*H5_`s6f36p{zֿr}}g矾yv wֿf*o]̪O~:s~<*/GgќY%XYEYEdYYEYDEYFDYE 쾇иޟCܓ2ޫ窼) UHVVX$IX$I$B$Bk+-D"I&dB$B*Bk+$m_,KRԧJ:?X<~I_zca܏qGqW^%f ppapcpca8O;Xa vC TYR|= $b v a`81 0;ETE]˜%0taтq.] CS a`k a4cb;x:`x0^?p03؉e PȖP P >ª nqj 43?óL."mG_ySXbK<OaXYB;ˢ@/$ܿy|ɇ'O_a}?肾"h2U]ԶIY uөm:kΉQ"y*/%ue[V!5USԟbO%22_\n}L9c a10&0c a10c a10c a1Xi;ã1a 0UC"%yt>c +c;B^E6ըwO&D~)8Gaa,Ib?Jcax̻q~v_:^G~e$JKRq{}Ti<|OrqEXb|KpVU=WıWI_%B}ܹW13lót8䄪aW|:ZUUURRU_mou{_主=|޽zx@R^|]u/8U_W=Bimᣙ&7}7&J98"*d8{>e^piUUUJIV_~;~u|~uUTҪ).[>u]n~)󊻫˜UU~?P[~ᣙ&7}~"Ov/A::ppDUptiTg˩%W!TWBZe h|˧`̲Ν;3,vagG3믥1A51E>5{}ߧy%.yˆczG"A#0>(, |s;꺮¹[Z<ݽk{u^ 0S/q#sϗ/k"Okv-2ژap: I݁VUW\*/q`K||ڳmlf3*KLCňʕbĘKa Ò#-ͭ$Bk*I4%UJO\i&jwItEh!>lHB}'^-6lԡ!'':"SUO&$I~(/S*O'O$S UdPi>v=?7l?ATKqPONZ'E!;ws?9JD"l)DβBw$έ)(([jږdDMe@AiUk~ԄR^ X+R$%EkTsN=*_;IU/YP<c*ᔯUz/U\TyBRSHxes)$dE v<$:H]"+q&%ၢퟺt.I&T ZS'I2V&I]{L[md?>NI:Tf.酖i.:\ki:h6#e\X&bӊteZFˮNN(ƫׯ5Ŵj+N/{vqNw)/WjfI]}"|JЌb2+U0bO!://3DHZVj0$=R{bO'>DjN=`a$Q_7UmIDSԧI^?(t"`gD!_0paEܻmTT;dCoSƥ rr hQxIWկ߆`Ɵr|*eTUCi*I*I*I#b+KEO5WyR_t!o[_0U6OS*qKB^i}NWjOM>UN今J|h$<8_T˹/<IuC(gaI8OvI{*P`RՅ]cmmm֮Vm$B$BMd&X&6 )u)=C}Dt}RIhZ֖DDDF#T,eejzJzѴf6laq?\L(wIBc;#əm٠ m*U$xLdI5Q*%KD]8ť1VKTX[++R-B[,00KW )hR1Hb$P")iWz(_W=E;D$ܔ)jRQDQDJ66fK,Ĝm lͶG RJ\:= /B+B =謏{RQr.! JENT'ؓU*#}I2}Oaٱ6i6:% U*KJ8$&7%x%디YP%zԇ}?/Q1\(*~O'ުOG2ZX%(ܕ&#J ^H*_9RGzRq'B>I2Oz4O\/K%䤥ПUsu#8Ү,)21QőYPYXʲ1`lS5Fѵ6qUt!SEZ5ޥLʵyRSy)0F2`AlcjVmb"6f36vR . PɊȬK%/`9P2J~8 'iJBWtiN+qSB]$EK\W(P9˨/m%ݒ](RV)T.ށRy<+*6kI6X%+)4e6ƃBY \DјfdY!!fdZD!$I,XXbXLN bʁY%s9׋ƈh4 7^U%%yT4$S6m8y~=X2 ,Xbŋ,Xbŋ,,XX&$ŋ Ȳq!SκwI6yX9 *F=N/UUc zO}R|OUO4db#RT1Y;Sfm H mee+smaCt2 DpuNv^gI4\뽌< 1( 9 PV 48 F@tݸPRᝬw`#[*H(A1@ hrhl`hhjdF 2 *M4&TD&F4 'IFddR$Si4L(ѦjhSdaE4Tdjm#{|f[Z(HJ $yV?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDAڪRA" JyzT;pn8;?ܻ.JRI-'#!ؘ;Hv=rƽwEfHb͙ &9b!n޺Z8;留| '{,\X^VUvY{/$Wu#b2;+KmqaBGFJ`NK`v60;>?d&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&H̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2Fd3$fH̑#2FdtdMYG̉Ws@VDUD⫹̉+"h*s"kqUD4qw94dMY@VDUD⫹̉+"h Y-7]d*ڼ嵕4 J K(A&D&*N UH,H,eLLLLffƦeXr??gz9s@@yxnRMgo]ff6v>J^4d5h]3<^G^'4hzQG=Gǣx;; x;x<C㇁яGccw<GGcw:;{'y=cGs1=;O'=ю{sx;:<Ώ'GGǣsx=8x;ǃv8{'Ɏz;'z<'8{'ю%tp<ǣ{8{h>0wxx8% /{I4^@7^K;S? wtqD۲M.DDD@>~I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IUU$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$"@kqnKu@I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IXê $}ww⯒Xmmmommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm3-mmmmmm"$I}{;V恽fhY5uR&Žٖ gv6Ɓ;3"BO}QJqQEQEQE[_Ǐ!<k'Ͼ?xǵ2@ ~v}}uy_?W翯9/?:}{^01w]yK lmcƀ(d\)X NLXj,P(Brsr8h} |l~_AcYYYYYYYYY*xPuR9'A$Bd A(kRTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%H"RTJIR)*E%K{w33337mpns37mpns37mpns37mo\6۽}{U((YU_8Y:qRQU-QU-ܭʺDN˃ fUFPBTGnkyxpџGgɓq~eTvL=R#„0@ xh`aچ@ݘ"cD"4鍹{XTC f `P#E`4hF ;;PucD"4鍹{XTC f bb@CUTUP(PT*d5Th07j\F,_  3{Y2˶mTv#]ԕ)(Q۾vhuqtƍ]$W+r[u,v*rn1vtݵ%bJ(WwmF\Lhݵڤ(T1~Y_VT/h0=UPc)],Dp!""?p" " Ç= G舏8}8DDDDtDpLDDdÄDDDB 8 !"E?# 1` ML2:d>||=@uxԑREbG15ROܜ瞱/ee/eq{,^/ )vbŖp 99QQQaL"&1E D,R TTTTYL"&1D*.6ÁTTBTTTBF3J\+QQQ 9X/_q|//.SGWEu1'E.dv`@2)jZQEQU_MŸ]UUˮsU]W)UTW9UTu]u\: 0zg?} Y\Qx{;҅gxw< bR Z.RuD EU3NAhJJ5-$]K5-$]S5-$]S5-$*D EU1@߯^=szzz󍸷s-}{:=UH*(Wp.}뮪UysUWUsUU#U9T̐ghS4۳A +xns%. +.ዕSqn p88b8%\I1a1qtX.,8\.q E . -#*+Yر ,8\.\].f̛m#; %\n m6`T*ZF+UpŖ,eK1e,YbX1fXg ,Yb1fXg ,Ŗ,ḇXŖ,e,Yb2Ŗ,Rb)t\p%!ʸ#tX ㅌ\qq&pʰE5RP>ݺu8ss98s?UUUUUU::::</<^^sݫ_hrGBMFbP[AQ{{{EX p " zny;iݔwD:#MѓF4n],.ˋuGU;83]/.<,㧖Cvlf݊Y#Nč/.r'.B5yX`XD0`X3YFs#,a˜ː^dUd晫T9(hbUP3T(PUT*jLUCN؛ܢ^B/#|Fg+p ^`(?H0gG=9Fn>wGk@ a6p#ޓnM?N1{'=anrt^u{b*{^V\]eK.˲\.ymؽؼE.И%/b^/bz/{pBR]<ݸnTXtő28dѣF4hѣF0YKqeőbŖ\YYqqqqdr1ŊYŅŔb1qqqqqqatXXYYqe\Yqqqqs8hѣF dѣA2mqeőX Kʈ˥'~ ew]^˷C; XJw,P;Sy.w,x,KWp/ľܽGqqqqqF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF4hѣF7AtYHXĒcU-sUUUUUPwulGsxs=Ǹ0`9׊塘 Tf)_@Enmx޼ހ{ ls{q'NRRupp97(դow;/yjtz37dvq A@7uꙛDD01LQۍl6xl6K ~>$/T*IMv'xp8@ >sp-xI{I}}ڋ|sVVuj *LLާnfT̫ߗs~rowYn3|{7[]5I$vLO$im|"y ݒNg{|_~ϗ0߰awbEb!ÜXlnc᱃GSR:]۝ɧNsmc,UUW1p劶%bEbEbEbEbI|1G98V*ǎ励&JXXXX[I9XXXXdUUUUU+b+b.s刬UToA#b+b+8s]NS]"uH"~꽉{O|~yg~}{xўݱ7 T *:.NE뮑u:u.]tӮu:]9+`m5AE P`AT7G'8cc Xs b+b+IV"3UEcz11Q1Q bSх1Q bF*0+; F*1Q1Q bSх1Q bF˜Rv$š-EhwZZk]EhZ-?` D@@S3+I'ϟ>|[{mtZ-Ei6\VZ+EhqqZ+EhblM6&O蘝4a7W7W8i}KILIR}~v~>^y϶uy ĩG 01<0F#s5sq;z˷nɾv;']O}~A{dc 33LM7ov{&.n&_B}DnN۷IyuΧʅ;n'7S؞JuН% G^un%%KMLf%L>T|Q9N:L5w|sn1#c 1bF&)q&&js):vǏo=yߡϳVǻt0f@F`c16]LLl:r>eP~@Y!lU򘒤?2cuO{uUUUT}{l .:=Gp0 `hUnQ};{vɹ4$K\t7{ro\/ƀzvc]{^4۠;gn2dR vqΞI{f;zDb d\1l/Iď$e$.M{<ћ!{ Cv$'9;5'Eºv$.D|.Z>>K^l$m16bcr9tN'nb~W~;3N/r }J"@7_۸VWwoPU 3<*$i!UP>&@GS3JKw%g_hEUXU134b& LЙ$2 kԶN,O߳{S3s~KγUU/7r+}ޯ\9犾}۴\˙UJ.LK3" R$gy:o>ty\RUwww#|{={U됹xĒ$*EG8_::Qm6{YK7Eff3 LQU4&9b9h"]10p E۷Ǐ${#`0P0=Gy;sx=\+NyNz𾕓:沮uK<G ȮN=ԽeZZo9;z@ѮSKϗ޵ͦVwf.Z1cyTԾ䖷Z޽ M@$I$Hjֿzj&~2sUeM{jAttT =<KkWSںvPU&'{S$VU 44}UT򪫿.oI'9UUU/j>۾|绻I${#` Xz=Ǔ==:>떷0`&UMsNɬs+u}Zֵ8Xs7fp+{[7=oɶշًXfU5/o7y%kx:s#VĐsٜu׫2r5K\z›g:Nݐ "AوUVF{-oD@IATM**jȂɱ($dCu]US B8~w>n]^f I7Kw.hoī6 ݗ ^{b CsMWn_wH8D2\ʳ 󧜫 C߮߯sUSI$ Q ܫ*NykS4urֹ>9W|쮵, W1RV%_o}s7.})D||<<[1owwwu١UUT` A5@Ȃ-@K&'UUU*UU.Jwnr}׆zI<뮹71/_A_UUbwԀ?׻wwI${wwwwwwwwwwwwwwwww{0Xy=Gz;z=Ǔ='dw7t 5ɉҼkuj]5NSw!HzȖLh "M'(\3$&}@ 9{t Vwߞug\>\AǪj1ܳ:Z@]f^$ΈCǪDRwb $6eSHU@ɑ @xN󪪱4fu3T5FITH5SAy?9÷v,ٽZgbw9V꼻.wYsssũG閪W w}횗Ԛ׾n: IWo95Q^W;,{n&Mm ӪaL{;sr $(52L̃FDHmZ>hL X~b1>>JM>>UUUUU{wwwwwwwwwwwwwwwww`y1<Ǔx;<@XhZgqչIw^EcXD @b" Dcg~yϻ{UUUUU@7{l@Hx<cz=cǓD;7s89]^~s=w/w~5㭻["H $d ";fomv^5:Obw*Ϟݧ{[nSgיg~o5|<4-懚θbcNcļLN$ 8UUbovp~ZE>Mbתoþ$ }ׅ`iDBH5|/8N $5SP`x\Ђ09'jtun,LH I51r\&k:yYyùsyNQE˞W~@ tݔ9۲n(vKHd#着R߲-;(xuCv졺Pέ`.:n* nb.Lkj[īƵ||z{稑O^xƀ$  %+7z.߀8$1;=ܪs8TrEWMF?UUUUU{{l @```w='v=c{C&x 5΀*j#F"8,nH Y]{[nJ:PAWo[[s۷;@{sV;\oj"ElU\&sɌ<\өT/r6+n}t:d"\w{^gMs=]"\E˗(9ϗ]F9O1UsUu݄TsR|9…pA19#%'j3{wa0I[6i.tssKU (b}/$$1Iҫ}w>`>^UUI{wwwwwwwwwwwwwwwww{'u'dOdJ7"M}q\^Y/;_:a 9s4A;~"&;6{X9"dF#/uer}#@KI@SZG֣!|^o{zNvFNQST*dN\kVn\4A>y 7}La?o~c jup^Onǜ@@ET00Jb B(b'"KR"3BDIBi$ {ͣ3߀ Tygwww^w~4zG`0B(3wm1P(H5B`HnhpA>]U}&#*{WSwĺ"5*00) lU"`a"~ wDA3D$ yw|bĺn12"xi;O2n1iW޾¾1pX_h8dEaSIȈ(R?VX>NXU/ĥGG*@pLqVD*d%†,Ҋ0+-v(R> QV"Y$(z ҕ1~C$ WI$I$I#gRPaA>f͛DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL"HR$b؉lU[*!8dڨMV$a1h%X։6m EVm5#P`DrlCɰR:vJ&HT96HT9*#P`DD' klD8%F)R FIRfc) BBJcA6ͶR &F$2!nn+\5-@^=.ꟜU) ~Q PP P  P&4h4 UUUUUUUQUW,"<лI=:G2a_5.%=[$ Yoݭ\,ܫk^&m j4N4քu\Ȝ?q~@?Ldc#)?D?a!IPd#726Db?ͶoҜmU>(}KmaGHcD>CȪ4Zhc-KMDH* W@DDxǽu6RNvݻu*y-uVTl%EAQj*ԭ5%JҶ5j1R) JT R(@JPT #_ݼsLK&_;2*>>xR1i{_߾}fX&~#G>g>}Ͼ|?)Si[fZFa2f3lǫח%*ue?.|~*~_oO_oۿ{ `78#S3%Ac=~?~o==ow뿓fd]2TwC󿏼sıhO^2_>"LA$I$I!?}GC}z> ?}GC}AD!D!vsHq\Fcs VF:=;*LPAVqXF,l8\,##,31r<1 $|I$AAIw}I Z*S>G=I ?\r8 Äp \sW>U]TDESBK-- v,XC 0}} 7_DDN9s~"i?Wyy'e2je)_s^\yˏ9q?ބԿ'ǿ(O)||O<<|{褒I$|;fm57e;/dM͊Rsl^ACfZ2s=5~-ko"eTMYR!6YeXHyWUUO0_ʿ{m,muGeUU~⯊D{ a'.C 0} 軩 t%b?T\==810XÃv,.FmŊ0^F e`F+\:,Y̅?xptX".ŋ \B 10c2U\~5z%VTs@⏼l2|YcTEC>%*`1&,. 2E,iU+t ё?#`w`8O?EIw8#fͳK|[f''ޑ >dx#Y)q'?12?h0/i!EEEEEEEEEEEEEEEEEmŋ,Xbŋ+el[-|/# Y\.)*SP [+,/,; bp8]b?x:c t] tlWm1 b?`ba:<  T_̴3@Y* jYi R[R[$Kt w(bX*ʲŒC",Imk ,)3,bXP⩮. #,i)&j.sʰ%9YeI#, #21ő,Ye)D=ԿQz?#//2Xr{ǣt1v1ю8~ac?`c8tZƌ8rl01Lbbt]*Ez. /\8GA&(b 3-l42hɣlt.3337ܻ8.~#@Kҿ&LٓmLٯ81rpٙ8,3ғm{V*PV5Zj-jgZFmǀU5$?i.G21SS#*.̲>8*X/>ocF@v77b;n*߼h4E Obsx9ː㋁9ps]$G<?ٙmWrxo~ptEܝ:#ΆpGb.v, LxA#7(sr![v~91dœJLY1dœLY1dœLY1[[J҉ۻ[N n5l[,~#2N#2?IH*qQe 0ڊC 1c 0fc L0a  XaQ`p\peR (pP#ؙ)~ 0b1b b1cJ1c, c01Sà<(o kmcMCMSAdm*}2_a>~>23:fͳVI#)6mr#ѕ~p22ByҪSGP mm%~)^_`zxl6I_}Uq'ԸGpI/׆͛'A}z2l2(J?SisWuz*8ߞT\ϋt}}k[ܞJ:}|^}X} :VBW/|JhϷ9⪯튮kU[8qW߿<=R-/ϣӏ~|^?o~]pr}T _~li|~z|'>SN{~A*:>gCUÃN@@S bL; ^Ǿٟ'ttBGGG@p脎*Jwry5e5txGf=ODz$oGF;= #xyg8:r/MyҪ$AX,k3Yc3,sY\ G #|>‡JjC(iQY^Uz>oO}I/=Ƚ|qy^_Ixv[O%Rh[zm;^wíˁT#u'ewb+:?PʤQ PВU,$%TJP%e_'A+eXFY0V1}~Om߯x+J44QANXSv e*t U>)"俻R_ʛ24W~2*(~?PO':U}T_*'$H1 tUĘ訏|d2c€y! ;  P: Q/  % EBʗ>$W]%?O*,L,} v/1.\"e܄ڕkmcUpÃN2-RPKE| Z@*KWws**O *|TdPO9z+dd1T0q0E<$4SkK69p$G(>/AeK_~KR%ШtIXV&2P!~D$T~jn,G0J4I>z+UJ.]-O6m,FXYV2,,FFF IX*ćS'IpdFP$RI{S챣SSp0AC_"t%xKPā߿' WǏRUUXi=vT NO)j^d!'zy%{E?p)> bT\l& m6mq&/j>lcaWͶVXYi(2l!UGĀ>K>i>0GJ'WP©?:G1eZ1ܨ"O$oXˠ~pa,0ñ8'XabF$*`SU~Kӳf٫.*}*NnlJb}(<|W2^P|Ĩb{dyU@yPEE^j)ꨤʩAQ֒Ih;)qTy9Se8>JT|*e)1c z;Z>4KR/͛6f`02⟩NҀd'G?9 :L} !OU5@&1 җ)GdGQRs6 E<*Aظe1ҝ8m f"lғJK9#$ꢞp ){*A{fYT"4%hFu9ʨّbB80*2cp b{4j/+*0KeE&.UH>-:UWK! Iy C/>¤?AIUO0 OꪩX%E*wQlMDM!*-e@-O C O"/Qf &$)*D_J`qFV"/\)]!D!?OŴm" 6 *>LFOalٳLVf2331SkLbٱmmp.*b0)dX1WI)Wl-ivt¬UR0f30`ÒH+wkVGAtpZD4*P)ܨ~~i8IV{w'bI%GtĒ1.*_2%"kmߍWkhD[[6_#OJO `=꠿b' ]N_?$0*vRT8YpT7fp}bba1bb1ba1bŋ,Xba2LXX,X"8j'%@ۣ6'7 V666;eA0  1  [U_Zګz$B9ͺIP.70ҕVIGĔŒ2(z= > ;IQ'KPa0xRU,jʲ(aKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ$c1o&D1f3c1Ў1UV cpt)رI>ņŸ^^`@5C3٦xg'lކ^h }mx}`:X5mx_> [U=vi6gw[٧w;>Ky4{خ{F)PίO4{`|>|(փ]8'Ug`h.XW7zze%P[`F6UPʢDhSwqCC$J_;I@4dA)M 5C l2D e**@D>m o`4iPORmȌ#4 JjH2oTLhI꒒S!mF=&T$DҞQ6P 4D 4ё2d2MLɉ=WɫJ&+$:**bI DUB""""""""""""""""""""""""""""""""""""""""""""""""""""""#ZZށSUT}%޵];=?>mc[|VnZqϷ-ߚZ_&* bIXzpN*Vw Z@ ҶT|Fh'?̖껲[n%{-Ku]-wd^Ao{%껲[ Kv7WvKu]-wdUݒWvKu]-wdUݒWvKu]-wdUݒWvKun[.r̸92,˃%껲[n%껲[n%껲[n{-Ku]-אo{%xn% do{-wd^Ao{%7ݼ dUݒy[껲[n{-Ku]-wdUݒWvKu]-wdUݒWvKu]-wdUݒWvKu]-אo{%xn% do{-wdUݒxd^Ao{%껲[n% do{-wdUݒy[껲[ Kv7WvKu]-wdUݒy[껲[ JmZjbQ*`LKNȯ%P5$0ʑ1I"j+I*KUT7odI$I$I$I$$I I$$I $I$I ukwYz}dI$@1I!#oF[>=xO]o8|qǯdo8o\ctۦ8_:x[q궮꽕2=h6xǏӇ??~=7yLѨX( }^ bY}> Pl /}VYD$g|18Id\uXIwy<$3%pm =>hP}!,K38X( {=n .1 ea^ _X7@{^5ѐX({  o}/Wt^|wŊ SO Pxz,WI6oN.N,Z3Cpx2 `;W{|0}c4 P2h,U@K\tj3E>s 'W5w.ƞR]q8^;  m*( Ǡ s9p<,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,lm,l0rDL6Yd6eCl6Yd6eCl6Yd6eCl6Yd6eCl6Yd6eCl6Yd6eCl6Yd6eCl6Yd6eCl6Q e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e Y e|He)˝u^U/V͛6lȈ""""""""""""""""""""""""""""""""""""""""""""""""1YH("  DDDDDDDEpL 'K XYE, ' 'tX 8' j{ͭys{A]ֶl%v}F;/u:0_{Col=쿻i^g1=Nms{9 W}[z!o8ojW;vnxM~{ncSWܦ]߶Ng\1Y37|u{xy:mx+ٛޡ~hlO`NjYrs;]frIwmf˯ٓ}|s5ˑ]Xǭ>#prj43' 6f}q+{sUU v|φ8= +&f68xow'_<͸|{3u3om ?*~ R7n}ًpo{,|ƦLl.yݒmؾThTUT.+]> A@H(RZWb,,p\ET\."hǼzx.D ZjcHIwzI$ěgg;Lr3%_.Kē޻$I$wwI$sdH&;qgqgL&qzoMq7$%fF{98ۚZ֖nMd5]݆ha$N$I$6I$=ws R|S A@H(R* T A@H(R]+((PRH @ AH mo`3$I&v^*9c@RI'd[,X $I:@yzK r$I r9\ I 犫WyH(R<^x^xx @U P  T A@H(R\s )$ @U P rT A@H(R4R5y9rI%Ol,ݒI$Qzl {ywI$I&o0 ; I$;{ͶmbI$I$I$I"""""""""""""&I4I$I$I$II$I$I$I$I$I$I$I$2dɓ&L2dYr˖\, S<-{,Yfٶw0#H>#H#4t}ח~~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQUmq6k-=uqWuqWupEDQ㷦'ӎFBY*ؐ) H$ A H_Oond㔂A H$ A H[mm%NzOZA$A$`g=i$Z@;$Z@;v}=iz9 s;H`w߳֐7g o~Z@;v}=i'xiH^;oK` ed%!wI]ĝvNݮvNӉqvqv'i8wqvNӉq;N%S2 hFBZ#!-KDd%2 hFBZ#!- KDd%2 hF $dɒNmoͶmÇ8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8smZ""?"""""!wj]vg~mmmmv3&VffvFmێfdmq̙Ymmmmmmmmmmmmn;Y+33;#mmmmmmmmmmmmmmmmk32effgdmffL썷ɕ㵙2336v3&VffvFێfdmq̙Ymmmmmmmmmmmmn;Y+33;#mk32effgdmmYfdmmmq̙Ymn;Y+33;#mk32effgdmmmmffL썷*RT)":-s_?n~|7_8//B~z|G١i? {ܯ{֘ !IH@wff!1 f`x@ ` .9a1 f`xE"b/"b/"b/"̻凄P8+˻Xx@C3+1 30<5fbÖf`xhf!"e8dF?Hx'^@PxO/S^v8㡞NcI$I%$I$I$_yw}xw-ŷww9^אh-cݧ[m]ɼ:-ŷww{^B",Evnw&N/4 ޯ[y.Hddi04,I$I~W}ϖ?~Uts:8ɲ^'];^-mU~|׶>[ˀުA"eIt^H!(7wz{yYiddi04,I$>||<{mܛùl^-h_=E[DYon$I) LU=bj &$8&,&Ua1a1Fȩ0t&A+Š't'JI, ʖP ):뮮am l6maP l6mam l6mam l6mam !X 6K`0,%dl H%dl aX 6K`0,%>׽^{am l6mam l6mam l6mam l`NQ :}jKTTҔ.b=ιf%K-`8ȬPT5߶y7{צ≠ͫܽ(*2Č$HED lE") pHmrb)T8PD$PDA lD$PD$PD rSIN%8d؈%4dNI %4s@<B 0`!y7VK{pZ%=- LK(lnfEֶ73J"k[wy51../32ĎqmXDW1?ܰCy~__ПX?gCjaչ!mf3J"hAi[Y(XçOkqn4Pla|xƩ#jȠ8RBw/_ZwgUo~\-~Q5tU16* LE1W:&r+s\lU9¯"slU] zDDRDDD6lٳf9(\EE8Ț)|* >8N[^EI6lkJ h&] ?@+q%_???I$I$;I#ܒg$NI'$$nMԬVTR+x+bW_:{sf{'.`-BfDU!DJ:myf{ݓBlP-A<$wi{q@ykBY@j ja@_=96down`\p[;|>w+]6쭼2Q @, @Ԭ]WW~zz+zPKo= !DGW@E> F"D GȄP@YBDC@(diHϕUIo+}+^ޮ8놪^%Um$I$I ߇Kڳof*eZe`G/qm6zI$GxwJ׽7lCr8-m={v">g}dI'bnݷ}m$I'fvH3$I%l%_{w1 M|UP=ʪOv癝Uk7~LD?ҪUU m}v,žk2"-vPUO rTfU2UxT z3K83]]Mg]sP]UFur'VZּkO4;H  ?z%zw6PCCbEaNh5VX:a;̥KYK0blMۯfbvMNwq017w];&M3N3a6&a6&w}Mؙؙ6zW M M7'=}P<fb`P D p16xvlL؛bfw}bf&؛a7};a6&bn'13]N3a6F\b2:{ u "|wZU?Je+\~_o~Ъ|N9$ ̛YkZYε' σ:[Z/<7[mnK'-*j{PbOcОw뜶mw`ބw XYڪW* I뮲Z֫uu^k^0'߳Ç%Z ?;$_UB7x%$kfk}gp~R@YLl=-wyR&NĒ6P F@$"e܄G __`Ps!ߺ3?#P{[4Phजia6S)6 Mt5uXUPNJZb{{?iDOvЫ.H&`MJd<=kx/Gmmm*D=u|>v`|zm1f nI!`r\EemO=zW[WҽP( q/iwk"ɗz8y$Ex3kz gĄ%xO_38p~(OZXwYMݗs8LegCtI$3vI$I=;嚯-owI'jnF#\Bf/wb>gfdxtkr=yb.\*+JrhB{;.q$Db  ܂UN((F$D h BE(UV%B.-Iྗ.[=xoI PP] HPH(ء$O:מqϛ:ǴoV6 B6&Eow&;t&Pw@4._h fXThR@[E o2THG.UְgW~:k\xZ3q]8 ڹmj\̏yqОoWPNIQ I߳p*]yc\sܶ3{rKpb9iiYq.6kk,Ĺo*vn4 !˶II-{|<Ъ.  ZSqNw|iڝ۾NPrABA % H(@(@Iqw٫[^=q;:_#W1ݰ^D,ʳ /5Iן=5r&x۫5[Kg9K[K{66xS~9]jr3Gn[x~sR 7.HEvRJjeREWڽW^\W9F_b(nʸ:|&hX@"븁=S;֚ڪNx3 iUPUT*d7OdOz;wp%v|Zn%uyzI$_,rkܾi].J׮y 82II$I%tX嵹kpɽdI':Eޙ"Ves{|oQ*$4D;UT7mڭXb6@N}kټW^{eebi1K{w']n7}; '{]ZijV \3ZsXUĺ9bt}ִ'sǞwyma[A>pIyY8.СDμu,sn*̳\̹3,1Ⱥ7\U.3>s}NcVZcv%m.\9.%Kܶ{tp$fjj~J` ‘5CkyӶ]}':'QkzX-uҮ3{cQu_VcYcsn^%3R~7ϟ_kEYu7קaKP= AРbA(1@BKPI I hhA#lP!I$I$F"ZtG1yK{rxPtlPI P6($l %lPHAAѠʒB`)jevޝ".j dhLPLdn̔31mIѠn "һ=ݼCMA$(0Bݮ۝O^ZwZwZp MO|rԋ~ܯwVp@U@ T[WվRms|cN,wlfMHP) !A$(6ت (6m ($I$I$4h@_{xMLj<-K,]CSt? :m[$&A2m['iI I$4h(eGN2"MϾ뾳᝻bMbm>Ѫm ۡI* {oF L԰{c@f (iˉ)$Y=1smq CE {ݽFϝNN=tI$I& yͰ}lgp7 sV`$χRxx ~?w}=;| x$ʕB %b6 Ss<#70GA")$&6Sˮ<`aD!J jJd M4 InKkޘ4પ` jRa"I$ .H}gURY ]o. B{M[v׏]+zUzIi")"fjr'w@UqV@/%DBȮ<|Gڨ`=Ds\C {HC3]DaeEY2m}ώ?C{&IPPQWwm;lݴ҅?*@^Y~|忀(kF::[uҮuZkQj{ߟH'Z5[A˱UT)g€*B$*UJ%UQ"H&>ww+u1;ęP HkMk)rߤ4k#X3)B ЪWX+-[me:O^s*}hlyl` :'BDhP6t7w \߯ &g8wNת^zU꽕꽠33fveRn{3"ÁVQ ]a2=|;JJS4ATSIk.I g4R9=/tRx&nמvzz G!!,͖}_MwI'jW~wP\̹z}rԿ[fI$KW~ 8)} rI$I^ty VCr'Ph'o|}_k_ɘ1]v'̑@ȱ,g߇Y H@$ IcyOqO1=x$Io{J1uYgxe\,7cyvNo'9wXWf U( V*Yqg=nrud<"TZpwC&iW} ]zg<3)`޵VzI$KřfdxڂywI$I'vxetI${Z]nҗwf.";CUBh# VͿ%3sO$AM W:1Rۍogw_8>&~eKA 'H$& s}UQl 6J  •*ԕgoJd7y x7#4M R31V+l"v9t$BD@( F H%JppsO^K. 6Y /7D4$"RN JTR"Lkyb:q& X TۢI $0S gF3=yU$aƆ ^*J^we MnXΝøftu4M` Bޝ\ y^$AmbX| [-2cnil˥T}w l@lmox꽕W^:BgZx"QdB)WP֐V@=J@f4ưq25x~f8h#I5H, mծծ&qT9f=|[˞s_߮je.ս. zXwt}wi rI$I33nvfIhؽoiKVgwwotI$gw-$I$3kǼȿN[ݹ$I/^{Os=UBRI8̙L۞@řfޭSў}9('*ʦ E lB D@Px9[tYMw^$K$%$@a|cw٬Aͮ: $A$A PfE^ʒ-<غU%*4 0WE P%_e}<<'6[x,e b\p$q9LX,#~@ A%DI$Iud VOsYkH4I4H:M$P%, =-p =V0KH?fVj$($$I`AyF+'g5VѢA) ( @^XI"}ܽ4:LxI &¯b/|㍕Nd6g%C|w= o`]B0 VV;||zVW^{@m=ݒu_37/ .pzQ}۷^>4T55sɵB ֵzp&"Uykg<6H`j~H{}~^-<݋o$I${<' JUB(?3Ӯxp\6IAo1't7nD$Q gUP y 'j:&lgvWnsZ"UT)?7:}lywUY3fwapI˖2mx:tHI"̾{MI :em1Bf*p0nu֮n}p_ y#XKŞR\E}^{{*:' ,"X1R/&ES,PO蘋Rx"EIJ &RR0''Q_ŠܤLRCRHk$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$~VzճmkU2%&D$IDȖȒ&DM"dIHB)!fZd(((((((1BQBb%bXM 4&КBhM 4&4&КBhM 4&КBkETTIQETIQQ&Q&Q%EDTTIQQ%EDTTIQQ%EDmTZ(آńcP&6&5 Qca1LXLXLa1Ll&6 &,&,&6 [7n%-mܛwLڒ閶MۻmIwtkTYq\Y`,2d,%-7n%-7n$ks[Wrn3jK[Wrn3jK[Wrn3jKZ۹7n%-Wrn3jK[Wrn3jH%2f\K,\`.d閫w&6eae rIe\2BˌR]2nݻfԗw5ssfW%Q1GpU,]J "b"@DDb1DDAAADAkiK"5RK m*Wm[VյU~R(I? *PDt^Ao f DD !IfmwDb4AmmJ1l?6Nch{~=_p',OXXDb~A`#T ک|e<ך^s'Ƽܷ'%ZZJux}y=߲|k}{R[XT{V_^Wz%9^̥I}.Os[ƹ{x{9{2%ҩku7w^U_ޗ|oq/g3}RU=nOѼVW=߲|k}{R[Y/{=_>ך^s'Ƽܷ'%ZZJ{V_^Wz%9^̥I}.Os[ƹ{x{9{2%ҩksۙ{=/ҽ6vKl&[b5#Xьb52IJ&+$X#Xьb5$%dlb(Q4 ߅~~SǽWu1]Nz{Bp+8^g $/Ddz jGYd+8^[:͝t=32n̛73&鎝9GLttNu\73&ddٱ&&͉si)))*JJRiRU?K~_kos:ս<=_D8-m,@ $ӪߍZ6گX'ت\_Q=b #_=zy/*^tG/ĸO%$ z$q)Q0bGB9at,ԬJ<򄼋¤X_Z[ ^?XoKmVS Qb&q!v'%}+Ta?E1l/JHGGl6 oU,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋl[-c?qb~%/_hX\#b8XjV BUX\, 2/'҉һ ʊ\mh_mm~͍ƄRH:'//!lu[+luիW:\m.VqZu[+luuZTZsζW:\esζW:\espKXM-pVG6-VE9®e-a8E®rͱrpNmkm®e-a8*۪Z B vꗴG|KXKJtF jhp\#X,X/#%VE md:կjw<>L= ~%~* jږʫ:ߟ ` AF6 6 mb" h DAD[66翻}*^B@^\"p(~r1>}Ϳ^UUUU}%|27$⪪UUUUUUUUXUUy򵯵o[[U˜+ /@V.}s9k}cŒd1%S7'LUUU.s}D$De%D)Iu⪪UU)$șU*9kZ[sK6dēDͫbUV9ifs.r3,ȫbϋ35<+.vr)MssVVtœLY1dœLY1dœLY1dœLY1dńœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœJLY1dœLY1dœLY1ͭ,bɋ&5VtœLY1dœLY1dœLY1dƺ&,bɍuZ1]V]1]V]1dœLY1c[,5m?q{2_j84DDDDOYVY,,LXXʲ*K[W6mvGb;, #d ȸ#B^abK誟j5CV$$UV!GID/ X#>Rh;',L^!ǖ !!!!fٸKО( {Bʼn,Oy`O/`K^1<(kٿȗ6/߷_ mZs{u׳ǟm~㻝|;EvNrW iY:99y>ϯϯOWgsþw;ϡgs4<=O?ax664oLlozG]q<;ԨxbU',X]KrSdt],ocvcvݘgxݻwf;޷ft8۷KtvqÎI\^S>RW\v7nfff331fb/=T{OI|К Rxxڿ aWؾ|E. &BZ*Or@K 66l(OMWy:{_^yznZs{92T RJ'@J%-]?_f̈?CT!R'J/W(П&Y  ?DKU/>ʥ{A" !|Ģp JQ/`Da'Tҩp$maR@$Uo*_!_X) Dȿ b?Ċ?T]x)!_?qsыW.u ]BΡuuii!4֗%*j&KmVR[ TOQ<"B~A:J^jeJ1=?AJvؔNR_N^RRT+A>_+8:IIDC:E|_Z9KrK4bVI4d$I$I$#b(Ęb"(؈[*ٵ_ `-ek+ZYY̶flX6, 2ٕLVf`-jeTX*, 3T VVѭN;d2j@UCU*j I $ I U QA@2.Ѽ= )yJ/Α _$]VW xR>@J'Rڥ`1r(%yC(RA$?•!zDD1J15RWa5$?.v^CIUKO}*_تO&ԫGHNAT+>OY!G”Kĥ|?j*|]oB&I Vlc1kkkjXX!T!={%+T iHyj?ٶ?/Y^ mfۑWT\/]!?o[ej# E'%̍߶ ®*N _(%x)!U/r+J'`^D/@u"jU!u?m*B9T` Q:%JCKTTdAzJ'`8 GC󃢐Z~kvַ  @&X""[О$=hATwc1p!p .K > y z$N< W )W¢EL*)\*Q/TRW GoDUYDIIF kj1h i-B*R`4iD)!U/T`O `p(zKEJHaSJ'') QC'EUG Wu#B'@P""Kz? Ht(Yk5fɓ&#&L1c1c1cfL&L2dɓ&L2d͙2dɓ&L2dɓ&L2dɓ&L2dɓ&L̙۫mbUV)p8UX$S+҉͛EmmXDDDDDFzI1RVlٵh# Bu[ΈŅ2~ x!AI~':A!֫ 6@A`_TUEWؓJ%{TQURC̢vԠM-1Cʇ $MU/{ %ИL& iГH,,LUj*IĄk^)`2j Q,*®AGA_}(DI몾E_h&! a$a(1TzB 5me{7TV:ζmζssfg:ٷ:ζmζss7:ζmζssfg:ٷ:ζmζssfg:ٷ:ζmV3Y1f,ŊY+%dVIf,Ř 1f,ŘbY1f. 1r8f.qՒVJlVIf,ŘbY1%dZJY+%dVJY+$bY1f,Řp.8' pN,ŘpŘq8\pN.' b pŜq8' Y1f,Ř(Bbe.)nc[8qVrW[9]lurg+k9]mg+uֵ9]mg+rW[Yg+urW[9\q[4ܑ'9- X~@y~Q/dzf͙mo.bL]J'T_;ۻ  I& 0`$y]wv֬1Y1c1c=uv [D% d6In ηַ2&`1c7,&M@()3u{v w¬LJa4a1$8'UV"(6lٳ`{JXU,ERJ o[ZVU~/Lm2M -Yi{߿c1c=;\Jѱ61ET%QEQEQEWnvF'^TXJT02WBR IUI_*H{jH0K*BFaUH|GU{֘M1R[m4j4h4j4UxAW⨭ )=DQH~U @|?~~bQ??ONrIlXEU."*KpA~!?P?U_k[Sʼz_hQE/A Q_.a+` ~pB1t!Tʉe5pT/%O   !UA%Uwޥ@Y9zK =x`8 %`#@ x@ѽvuk*thÆlz_ a@xv`P w=ڀMtg>w[ 30 hT p@}"Yt-ۺu:2B@@0[Ceb%:4S 8P M h %lfB A-_b*no>Օw\wU:lw(bUWr "® HT*[Vo껲[n[n% do{-wd^Ao{% do{-wdUݒWvKu]-wd^Ao{%7ݼ dUݒWvKu]-אo{%xn%껲[n%7ݼ dUݒWvKuWy[껲[ Kv7WvKun[n{-Ku]-אo{%xn% do{-wd^Ao{%7ݼ d^Ao{%껲[ Kv7WvKun[n{-Ku]-wd^Ao{%껲[ Kv7WvKun[n%7ݼ dUݒWvKun[n{-Ku]-wd^Ao{%7ݺ۵IGQ *,&DTXKJQ HX%-I#TZ fư o7UM;^mǻii{ۦn{gwX_fusYw/~s3/l wg;޹fwFǠ##PtLt .2. tlT8"c"tFG# 2.=Ȩx/=#/!0ݽ`_6Niaynp&3QF0&?o&_u#444uKZ)ý9Dü,&_->ZonZJMܟ&9:`wbk8篾3j4b)ڶ)o}9Dü9{flDÛawi&Sf 8 }zΌL;ӿsӧ:hw}}7 o3Òa̡9ߏ|h{;> wVi&[ jKkujJwjKG9`w>ΛDÙ>k0>4L/ogNقa9s3v\JVnֵi*6gkTr}Ö`gwa10Ϲ{ wΘ&9nwFmЂn.}Κ&wÖ`s:w=,L9u'Ma0aba7}Θ&c9a`f&yC{}ᐂay'7,L7&U3Bjϭ ϯ}iaG`n[ԷOTrX.3k0_7r&^浬SIVNoJ|M$sZw; a0L=} Lf]^wi*ҵSI6,+>&eЂd7tbaޗٝaa{t zÙB?QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QD$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE?."pK\) UV"""""""""""""""""""""""""""""""""""""ײ!"""#""" """""""6lEeEQaO|)ZV a.Q }_H+) ~Sq}|Oe{ǒZ5ZqztlѶ#fgU^oo׿({ƵzŸT9d`zej<L1x!(ο{f}YR _6I{='=,ngV]yVo9&DBP_|jX9ҭ|Oe]9~^ťЏg?q%fUg*BQ"˜S |E8Si>mzsϕjS^׭znb[YxYCzUˮz^ڐ/*Oʏ 2tl=2 Sj(QӞ*\OUx,UZ^]sVeVr}? ij'ߗ'3 ͓L)|u/;/g祍Ks+7JdOEiBJEG] @@ @@A! B$'=GIH' mƳۻuW]W̫Ou\dvpmm+,ω@@ @@A6m@ H"@]8@D  $ <άWݽS.;QounaWwwvοV+Z;3';hA\}wwwwpLLP @667VA @  @@ Gttw. ||||A A@D  $ U  @@ A A˲(ue]. U̻.|W7wnWeQ~ 3w=wwwwwww0jA @  @@ BkgV7z}.o0Ӡ)w G T +!B)2HI"$I$H$$I$I$I$I$I$I$ɓ&L2d&L2dɓ&L2dɖko4txѣO{Oz"]?z_8EQuGj5#"1GQ4uy#}@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQA {o8sn8sn8Lt6/&Wf~ݚϻ4;ˊHm2$&$7I}ccOl_}}HŞF6,'>bGϻ鿣#*H}Js$|ʥ-b_O[4?6.s~qss]tkCkmmbXm2e]vNӋNӉq;N'i8k*=sOOL&,&,&,&,&,&,&,&$aaaaaaaaaaaaaaaaaaa99ƣ =DgpppppppppppppppppppppppppppppppppppppppppppppppppppZڿ[DDDDDDDDD_DDD@DDDDDDDDDOm}ͶmVfgdfff69Y{+33r333{mmmmomr3;#337mmmmmmm+33333{mo331+33333{omr3;#337+33333{omr3;#32Vfffff6m9Y|ffvFffosm󕙙ͶmVfgdfff6m9Y|ffvFffosmmm󕙙ͶmVfgdfff69Ym|ffvFffosm󕙙T.A*'e[m:kϧjڏQqI6"֬Ey["\ȮmԭW"\Ȯ[:[s:[rtr+r+r+\r+r+u-n\\\MntMntr+ȮVnmȮ[7"nۑh3e'ZƱ;F;F5+汝;F;F4KKKlegNXΗQgKM5utk5utu.]u.]u.]tf5X3˪3k]vR1cXdJMQɪ1"@@_ʦK򢯦V@@_uLڊo"m"UMQ[[(mhmhmh٤CZ-Z-Z$BYD%InZ%Z%Z%J-,%Hhmhmh] $BDl2mQ$Mv㻨r;T^%v*eRI$I$I$I$I$I$jw\rӺp46l4H6hݧM{&كM4yF_:<itp0i1ܧww\[@W{[|}j+}o>^o[{篍˾w &hݧMޝӇ`ff &Q}4um}%T4ГCQS$#oSp0i3ww'3Ułe &,&DGń+Œ&1a2Į\$p&RFaK '0 V fz$HI!$HI!$HI!$HI!$HI!$HI!$H(I BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDzWx@I$I$IaBI $$BI $$BI $$BI $$BIUT%UPWjSN& ~aEPX{YRo7=TW]Ǘؘ諿]ZNnklyQ}yPg)4jMIwf,0Rn]ٯlٯlٯn"0EhXĝݘݚݚ)lW嵫m\m^֭+rN{`+rN{tv{tv{u{qfɆM˻5ӽۻ5ЄBMJK1ӽۻ5ӽۻ5Rدuzدuzدuzدui;1Rدu).ǷW&*M˻5Rدu).Ƕ Kb-pY}_~I$JRI$I$I&L2d&LA$I$!Rf@Lb cۡinIfu!֫܆n;WZr,ǶYy v cۣc[M6. Tȿ̒]b>.goo;%MinPӼn;D,ǷXI$ iV[V_T 8xFtDBoyG/!$oG/!$oG/!$Y ROj) Ul4<__Q@r]-qqNIoy 5//(Q^q-qq3n[m/y9^]]5G*=TUp/J~w oy 5//(QH#=9_؞=c3nܜ"ݶ}my 0UN{OQ;NwN НpO$zx]]5=uӞX(N1WBq® &!ڇT4*.suK-CsuK:TPO:YK b jXOA0MUNdb ,&ji ?_?/Ǐ7%pXnz:lt8 HHHHJ{2wF5ؘ oj_}fL )rlݮv5zmoUAPOsf~}|\;gzoz WwǕt)nw.qvO{mlkV2ު;3M-1UVfy.z˱Oܙ>WݵޜSaEvhgs;~d综۵ͪz 0tI +0(IͪOx|粪2SPNQ@鰠U@ē0ACa\vNfx=ɻJI鴒I!%Uj`𻤮,y7ُM{c-I !%(~k{Įw|bI$M:m Sn&QD^bkw }7N[KI$*HJqzg/)Uݿf$ŷwW.%ImSdzߣQmm[ʱTUh*hg3bmx|7x:;Y׻Yf,!,Н®2UTSUE]'7R{ˇ+$!!$$H0(s QEP!sRo~[j;ujǝ_ԫ$Nwsǯmx3c#6 HHHHJ=!sQ5q AbD^%W-Wu$TI^_XϐqVh>EqAb;ٳ<ǟ5E%W[I$I$s[sضLQ|v˶]ήki}W}}/gٵ㚟5茳MT⼗]5F\z߼.ݾu2wVokၞUWvgvwy/+|󋾹Uwۻ~|oʪ UJ @TQrUPR;ߓ7痗몋ԕ-)G`"IR*+~QwSi?G/ET=`Ul^ۜۤ>Qu۪TM;4(U|[c%d$/ʪ **uEζհo{/o};ys$RF5'9f&M]&MMQ|$~q;fbfbf']N3blM6bgGzI㷷w˩BuFLW򪊠((.ܪ)@۪' %t%ν{ˏboU]_?eA (ߵZݼ HN#T~E97Φcllmsy\W99y)܌If |u߳߹gm$bhDzIrHxʾ8U-ȈJ TzY~K״dtX4ƒvJoo1Fقy^1'@17M0cA*T[HIwj~;BQBI Cz1&dMatQp^*y־=A[DgYlNu xz.?JI%sy~"J _bU'f #Bp(J3w1Ly a&^fID $U#rWpm%5 BB~3swBU8T*86Z9N9J{*<Ҏ(4ﯰ 9wp`EtBD$BD$BD$BD$BD%<{ɕ&+}⽽[v'zǧR{=O+NB^IBIBG=o(ɮnΧ-!h}Nw-9fdmOK[krdYa=û9サMWn+ﻉ~-nۼon^b{ɚoݭí۱}S'uTI >{Ͼ6PuO.w_W|Ym4w(ܑDNSY"ABJ&r*Mso@M oJUlMИ,(+㧽ɹ򤒳/9s (3TGNE*$TT] pxuY2.L>4Ӌ?7{*7]4M]T˷DF^eVCFdUYTU*R/&P Xf; NJQ8g}ֵ-ϥyM}w]T:Q( `I%8C1; %KvXQwwEv ^bhPUE3-0(@]ܫ  (r@%KaCq Mẓ/;;wz3S0(wr(r-XQ,PGeFyŒD (KtRThG:tKIsT;i.8;ˢ$ .CrDJPC$*"Rʪ(vh+,:T,I&طsw}U종$* (MRnp(RS* E qDB %Jg'És<v*QtP(r*QBqwE ԷaCQB$p\볰B1)(N)|wѝwEÌHHHHH,uE'uY33wwa{, =Sh fdfFLAtQe ܢ( K(@LtP%f1V| D\(UukdeJ%]X%J*EIh :"(QBH1<{{dzwv\$$(\ 2KE]I P*RHI%9.vN\?owvwS%QUPFlD!(Ԍ%8AJnkF/||)6k^#h-{ogη2>|oQ펽pr{yi,0ʅ%왫P BIQqPі#$h+Wn|vFR**Px H{Gw(+W?>}x2ќiTt8wNJ^+{+x^+lqoܫg)} Bjzb&alTъ*/Ru3ne^{34VVl.<{Ԩyk';{Οyf;f6;3{(n痯d\..F*wTKJKEHTLTe; *j:(Sӷmܽ}Q,CM\q^FRrJ UFPt岆]ETe㢰>^_ufeRHvoww;VsEE*F!$(,N:[|UJ+ QvFHULe*TUҨ\z_nյTikMQlJx(!BH¯j媪ITG"B!P(wuT}@waJP$Rʎ@ eѕB@({I}7pI$q._f?{=; HR*L*[*)U q"RH**GjIH̠1S2ںbO1D:'nzp 4iQȢoߜg~iD`}UAHjeSڢ˖ʡQe  UT#Z)rPARL^^UA HG"U BB9@hP|1I ;wxrVl(EՔ] R"] %UY$(m 9jT*ggY6\URT,eY,Œz䪨=u9٫Wt˾˷co/CzQM6($(CLR4$Zt(?Ob0^ؐ\ye Z#svo.<=Uq2ygq| .* +kp\Rz˝^uʵ_w$^d\U>ZO:}1׺9w<۪Bo$4Z-o{-ETmF{֋EZbڭe6OW9ul!hZ-EiSj5LZ-׽[ŢhZ-mמTZ-hE kn9͉$IvؼM/s;zڶUj}} p -p{σNJ^J^+x!"9V̼l[N1O]O\lͭjӳ{aW$ϝt^U!4!W(B-noō_ߔDZ)+I-}{lׯ:sS| v*W̬}uɩws7ztp vOO}´]VcS81 ޿{ww3yOaW~=\}U\f[ɛ}sޟoݮK;ُdIͷUAZnۧy짷!I}'yA=HND9mtP˹+/^RW3o2sؽiiDU*(TuLJoYw}ǼSfDn/8:wxҺ*%e7zڞVim6m'GTb͙w|nM mʒ6m n)楻{i\>6"#jDM4SM#1Ǜ׶unr(jixGmL%(;*eJ733n{Nw:]]^vwg$o-ZT]R4nHdl ުor{7kobr6mMDoQGP~UnQm#^< @h`h3(,QA  !"!"!"~~us#w"z'ӓ+',BU\u[C]A1EZ;H +R.5tqш7k鯥Vk[Wk[WQWUA\_oM^w#8;y3 {639wo{cwxN6W~/$8ho]$ɚ~={s{ke&io 7<}Nu뼰.e;Y/}q򪂶m`Qy|r.&}~__} ﻸ, 0c"FBD$BD$BD$BD$BD%ayٙ~;k gLsC.c<UARw~6n}ڪ =iLLJثQ[wϔ&$%t>>5鿿wK*Ep8~+w_.Ef?_O~wE*T%AD?_O׽Ev_WB)R* 0gWRʢ+Q\?sN]K*A_wxʪ*pO+&dR7!܆n;W/r<ɤ&jyY4Mfz"!ׂ{Y8C fd1̃4pX^^ޞ>z,ꫂPt蚫D]:&J8q8p4n6b8p4ȰVJg:ի"Ȳ$HUbŁjի*ʲV 2Y;}_}%kvmn,]kkq.VkTB6EpAYqvHFi[,MmId&LI $I D=]U /H$U]58q8q8q8A A A q8q8AzW^^]yw#ƓIM&1K|d>/^vT]. y%&b00[U*kH]ݻpv"0`iV5X `"B1V`0 M`#fHIMkmo[k;Zz""""#|UI$Fإw('IF.pXIбX,\TbUW**0awZҷ$0 Cʵk[ߥZZ_ _GCb  $?qJ8 ;T_%*@J{p+koZ߿"#Z`lٳfͅtE#l6 `TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUnXbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,XbŋlWAHD|b# NmͶͳl/J?pXBB+[{ 1` kj%6&ؘLMba-U[blblMCiحlbmhDMma6Mm&U6 KifbC ZI?߿*U5nl'mSRtjY]Rթ΢Fu)虪[FSNCL-Iu,mEBuR5vۣ:tjѝRn]3MDRݺ5vvb,''b-ۣWnSmۣ5n5Kv"UEG_Ņ~1b1Qj-0\#w-CXE܎(MRO2E!$*eD =/G4TPQXT1PAEDP" -(5QO"$?"_O%RI=Sߟ?|䶥Iٙ3333334f%%ofHnnnn"Nm|iUo{V7Ӝ9s3:I}d% $H$"E" $Q KI$$󙙚FfjY%ԓ3Ffhg,d[;4њ7*ޫ|ri\9zIRњ3Ff[5i333333-H334fљ3Fff[/ٶRݙ4њkeY5MY˫.F,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ &,bɋ&,bɋ&,bɋ&,UtœLY1,bɋ&,bɋ&,[m5gLk,[q XE# #8";'rаeabłŪjj4!*|łI={ЋQ­a5XL_C/qRQGyٛfm$$$$ .":VYlݺ~؇=Og|໸7u?2D5?)QEE&m&,$XH ;`< @J%G;pG|g:q4Hua"ƓY'ScNiÓ99>;u>}yI۹linƜiϚĪ1| 8\*rDp\AȩK콳l{:u"BH!!JB!JB!JB!D$B "d""dBH!GBЅK3L;Wll3vؗɥ|LK|W];1gN2k)d6$Ľ4_/|I|_/RM_/_)K%3bLKK$ w*=J!9R[^*|5[ogHm36 쪤(ET #(k6{7@}||ǵlm>^moپOR-hP]Ra5J&ʪ:R~;E[6-0 BMZDDDDDEUo[oރ*OD~ T_%E?CJDjQ$T_IE쨴KT]IGJI/ŸE>}IE$ ~C4iIO(|UyTWk֭5]1u7$Rdp>d5JxU!#  ,0 83N0ƝepxӧJ+ވƪXb >%QIqOJ?.QHDJ1TX`u \&A*褣!¥RI"|E>"8SҕKKK$%ֶMZͭoF($LLd$I"I&f1DQDDE6Նz]TT%J8IA#&"""""#dDDDD`IlJA5/TTyĚ)`E_AHS ZDDDDD6*$I UVխ_`Hj[mm^Q$$D'UĔEIGuR͘ʱTLY0=򨽤DU/$%U*1*;_ A:/vbV\Զ4c4ZU11պUZO!!$ƐG(#ި5(NjTzA+A/r 4@hiT_dh 9FmQ-0 FխeePb 褣~ *$W;i p)]t/UR/2z =%EʋQwT]TJ~5ERT+(Ȁu)@C_!QR}G("RORAYQ|?Ңm *DDDDlٳf;"*w?KZڽ2dɓ13&1c1c2dɌdɓ&L12c&L2dɓ&f2dɓ&L2dɓ&LffffffffLI}նmEXE&*1VVQ]p 0 :mERQQEbh0Ha"`$/kV~~ h @H_$~J*J:J{9 GQhwճf͛ DDRDF" fHfHId1F11ZUSE;Z@6QX2ՈIIkfҕZp& a0L& %%`&T_ 8!*T,,,,, CTy~U( T_@Ka/'pSH)>#vn]7nvݺ1ۣvnۣ7n0ݺ7nvݺ1ۣvnۣ7nvݺ1ۣvnۣ7nvݺ1ۣvnۣ7nvݺ1ۣvn˷FюF;tnѻtcF¬,Ř8\b\b\"qY1f,ŘㅘppbYqY1f2VJY+%dVJY+%dbY1f,Ř+%dVJY+%dVJlbY1f,Řp.8' q pŜq8\pN' p.8' T qq1rJ]sR2蛵t]WDݫvWDݫn7j-ں&]vWEncrES_p<`~TQJ6lٳaҜ!/_dSN*, ʋ*.vsnvu۴V[o`@$`@$$ʐKvmV@x .JIJII$"I I I"D&$$BAHI!$C BIʳjZEm[Et^`]R^’pTVypC 8/y؁*/Cڴ *im`YVܒTQ"UIȉ) W&ڡ%͛6[6mee6_8E=jU*%y)GqDR^Qy >"Xt>CoT(pLT\'pKV]-voj[k_VG!Qw!T}((BZ%X%O*Ee5Pmq5%O  ʠ3\ <2 UR;BPb0`}Ƨ+k > &!@( s= 6{o *U$ևκCT(`N0.{+HU (r,ϻ}'<;=ݍ{a݁@(Pe[4[(5T<>ϝ8z@րMOh1:8q \q:p 64D e 0#ƖAz`bfRJё@%EFAMhJoUI4z# & FI꒒ T&hD=M i4M4RUIj @ hH!@)L4Oih^1s!HC }5bQ 6lJTI$jSW$=y_#v`ZkkܓlҜ1/U UZL@[nCؒ jFOݾ7ݼ dUݒWvMud^Ao{%껲[ Kv7WvKun[n{-Ku]-אo{%xn% do{-wd^Ao{%7ݼ dUݒWvKu]-אo{%xn%7ݼ dUݒy[껲[n%7ݼ dUݒy[껲[ Kv7WvKun[n{-Ku]-אo{%xn%7ݼ dUݒy[껲[ Kv7WvKun[ Kv7WvKun[n{-Kun[n{-Ku]-אo{%xn%7ݼ d^Ao{%7|HPCBjFI†*^X/$5*P-%,6lٳWʻU]W~?$I $I I$@Qm{:MSvlMF=7ww^馛QM٨o3nkzn٦hM4n؍JD͚nI䞽5$7M4oM4xR{t$^ci=zi&CzԒH4ѽ4H7 On=K۩BI$r_m/rU}nݗ._-j喭߬jnojݻʼ^ڿYn_m۷r\W}e._-j#;(|ƍ#x#xGxe<UG,XyqbkWk|bŊ֬_-ZjkkZ||bՋ^V^Vjj֭Vjjyϸs3Ӱ aw|u;Ε'k۸wR3d۞.A5qRYu˺aҷg#=VT=޾\9^{z uZkhjnRvoϳˡia|/5&k97\3L YmЂm40osML־Ζ&ZNCÜD|7z9Dòfgia|>Sij>>W;T}'-jD>vsp_ a*g e0rک>{iڦ;9Z$0L;NE ׼tY\Sb)j*3W>ϥ9[\Rl sA0ҧ Ӛhs"wF`S*+UL|GmRv8*g s;N3\xmsOyýtz-zWk҈n&.~h7<čbaɯ}PvTuڧ?Ԅo r{|xf&Y729ӝ4L;.O\S{O}ykՕ΅}6e'o  xo r7 "uw:Xsw/a|}>x]w 'Κ&yo\9 %}Ý4L/4L;{  nRvN}9VjJrL9ػlX^$40|O0L99硼0L978f&9abaxhs&ϻh_\7_M;&og:`w;=a?L rڮN&QQXl4L97afoZ0>!09'assgNt0ga܌6&RiCG""HH($(!""HH($(!""HH($(!""HH($(!""HH($(!""HH49 QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI QBEDE$$QDI Sx5oݶ~ՈU """"DDDDDDDDDDDDDEEzzb/B/E#H#(ZH/(_} }^^Ғ1*2.^wVQzԒkma/.y7U6ς~;ҾG>8 О4!3U^ڑ˟vgӣ|\_95ng$M]9:3%,onqϪ7s#my.4|rry/2׭k,wy|fw۞ޱЋb-BDs?}> =!csI'/^9w4i|u4*:; ~ p*oB{x{C8b4DW@ІxwUW{'yκG]}&uwx5ɖo̽X)c2kU_PTeϻ3to˛;=ƣ䞛ɼ'Fu$%?_=@Uo}YO= %Iu9K9(9*CC䣐!rrJ]9{7kr%szw}&nm$Ri$]tpŌc1f3c1f3c1f3c1g8ƛm$Ȗ罀mm@8߽6N6Iss$i$]tq&G<"|((((((((((((((((((((((((1M[P㮦4*w=١U=C>Ϊ~L=S=~_99wܒ~=x B (PB (Qo>l[ߟlY6.sl[L~~q~~L}Icb90?y}`wb`{}6,߷l\&?/سL~_qsb90>}6.9Ɂ6$I:t7!wHv;]tkv]kW:ͬ6Na(\[ l'Et[ l'Et[ l'Et[ l'Et[ l'Et[ l'Et[ l'Et[ sʊ b/۽8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s8s;_?H""""""""""""""#_쾒QZI-m夒OQZI-m$VKdmI%n>RIEi$FۏQZI-$VKdmI%n>RIEi$FmmۏQZI-m$VKdmI%mmmn>RIEi$FۏQZI-$VKdmI%n>RIEi$FۏQZI-m$VKdmI%n>RIEi$FۏQZIfKUn>RIEi$FۏQZIfKUn>RIEi$FۏQZI-m$VYi$Fۏ=z UiRomkdyBwuu]0DDE$Db" 0RDF" ܿ>39<38U8Zp{_=Ԛ׽y{+w3ӽ)WwNcw3n;LQ%2*$`US"FA0BTHѝӽ YNwNcw3ӽ{qQ%2*JdUDȨETIL!PED!UDӽ{r{W- u c -\E|W"_Ȣcs62gǏ޹E|W"_ȢАZPwp(+NiP;DE H-B@ӝ^^{h[_ȢWr*޾w_=vE]+MsvE]+EhPӻDiP;@V߭w_Ȧ=msv @А"--\ h)NwϞ޻E|W"s|D-(*4TEH&] rxf;ܻܻ$QUSETIN*F {ܗm_oo۫[J ur^]xf0;ۗrxf;;;vy mMxzkkx 30v[hf` koM6`y^m`}m]}:z@>__^$ڝgӫׄڍ|3n[[zo0YWׯw.kx 30v_JRi2ń8ťZUmHUZ1WD\%"RbL0K L4(ઘ(a2 b`\qλ$$BI $$BI $$BI $$BI $$!"PA @@@@@@@@@@@@@@@@@@@@@@@@@@@^I$I$ $$BI $$BI $$BI $$BI{޻_aU tEEb.z{>XfeĚUS: ŋ4 ?/Bf]b7Y-UܫF`f]b32b!2C ,h ˬF`f]fþe=;ܽ{pK%Z3-HZf*Y*јX̺f&2ZV̺fXAK%Z32XR/}y=;ܽ{u2ԍզb̖U2ԍզbn3./(t6ֹFjB 8ڎF !!!!! jH88ڑQAEMEQA((HE#$)(mH8ER62C+D %Z/f]b/f]b/-=;}y{N;[Vr7Vb/Z{\y]FfUU$Srýuf]b3-HZuJfPPΌc:0@Q Jј- Q K]x@- 2PfKx@Q Jј!@EF(+G\/|Q^f̾jĚd.eĚ>>kx@V"pN pU'"|>]{)* '8U1Va1Va1V"*Q:tr'S ܡCOa= ''W^| \pN®J|RW”{}^O^>>>>>>>> ixA ۗ-eT]QuET]QuETU#3$=wWw+*jw5\Uk:znPT//ܞ^&{ud+7NN>OcMV=fHbdd{25_-o{/i $tM4(J1&lNwM0BL-k\wY˜{֔̓;9o9muz棶lZ*@SU@)&{mxx] uBFmYF30%E4yﹾ |uNHI,WxU}Wע/ϞI$I$ndHndI$I2%#Rݫw.]TuRKU.]W?ƴTB<]G88q5q$!>@|fF08"!AhHgQGP=a3.HJ`I%E,߽}>γ}neܕ{^_ ~y}{̶_(`II@wΑz"䊮sfIB(W"~q;{!~~AR@Hͷ#)~UOz{y?˛\w˲3 $. "G;~~b(-+go9&#i~PT(+f_*N/{؋$yT/^ nǿmwW`PRl mA_@:x"y!sByNz}Ƥ I1ClZN{V e ڠ+gV;u.#W~ӻx{综(}wv3q3΁PQB*E |usY6TItP@^>!>흼wWwMtT[TBvw_kVmͭ[~*ڿ}~oҿK5~~{ /m\n11111ҪyI]~\L娦{vHyͬ\ӽuGʈ|mNW%-nLvf\ݵM^sf1w!\𞼮#=] 5t>y1.}jnqk'f[s1}$ԁLɪ31q`-Y:6G޹8*7=s1UwwYUu%Œ=>¡WsBnI!$ Q=v7~oӾHXۦ LTW|s7S.oĭOE!6 19E&Ly*;T.w#؟|]?f~z8amq}{YYFclmϿ;ͳWs*e1!*I$wl!z;LoozƒI_iPQmBH]Ͻ{qyR/6T9UnrSnLK_ؽ7$HBm&G'-e`QU@WIϽ8ߝHI+O3=/o9uݷxuA"DR(+lmK;Ϻ^I!%cz6!% }|<#FH .\˪.ꋪ.ꋪ.="B*zͯ;麟y^0yoS圓/ϹbkuUrUʫ"Gh^P>;ލᤌ$:zd-6lQ:qtGA~͚EﵿǩfIa4{2VY1G|3qn=;3ojrDqw=k8U@WBI [WrToIW?I*$$KF1﹛u.uejg]P%clm*HBQaGB& h1 {j >ݷ*HBB^m@4$]̪g{ޮ$ z2j%ZIRJnjRlUWt (}UNEݴ۝]wg_"#_qx㸾_33 $%-ܽn,ꋪ.ꋪ.ǾYʜg:VJV/=NfR\TL"ٛf^qQA@Ws]'֖s3ŮwZWw6 ĻbRqKky|OM7TW;yG ƷݏF2N{uOG#1Oq߹;&xCu$5"78{{IX!U^]{VJI=pΜ1uT7ѽuCl\J$R:ʓM,(~ԅ32lsvӕMꈒqqc r7Ph^BG/E;ǚ#Z\Q08qGMt_ 3_3y[s}:g/Sru^}9CykvyV]CIBi3уu1 }2,֟ χ.U]L˽yWyאywE6衽 U$lB-ܾ9"j8}lZDV $ UOK _{R;Ңګ_vt g?aT!/{$f`v\˪.ꋪ.ꋪ.yz՝^{[jO!Ȯ̔R.> IPumSnԐn&꭪ėo\yC 8=eUYwv)! t@&KBN:P7Vh(E{im@W=I2 JIdŘD=j\r;vRpJΧr A9K3&w0vmk+ƅPBUW:U+˪x@@7B0 jvnYeT]QuET]QuET]WT{33ESq1msN3WV1Kwʛ;,jݮp.q{nwu򗽜l{=^9ZoC ,x<"@ D+qGi$8sU lJwRUMP`W9N㜩x'+gbg3~+W(wWT~~~$h@._׶[]QuET]QuET]QuSƢft#MҤ\EqUI5ht/#1kU""rRz+X-U_e[@ m)$qB"*zi3Mgzbܒ^xsS6RJ7f&"j~5wMrCǟZPl7[c9~͑=ӝPK؛85ӹ7R0s|f`s>~gۘ>~߷ߟ>WW}v@euwXy> s'wȱ j{w-惘(m  6Ĕ4N_4E\nDqHhJQEWB=|wES25ͻwLVfLG(mPEF5WNcbCwO_=wqjAQ5UMuCn*J&(mp(ˁr۔rzk=s_;U%T4۪I[޸zj{*mkUW]z2 Js@z^uPD!UH:" ۹F*I ` j5V# i8fJT@Fr\PH7=y=4"wt; k]mZDI/<=5 _k걲& sW;:2bQ4 % G&Pfabt 9ۻՂf]c;;guyR 6iUH" $5o=OJD!#7s7<%B?'ЌGD7$ڛ}_s{UUtw\$(m`t /-\Ye+.ꋪ˲ꋪ.wZ1/,S>ܶS_WvM>/'tj%/TPW3. >{\ٿi8qbvW<VP%MM|u`qDHODZ`׉$֓iG$簙/&3 gNy4'a5O,X38}ws΋ӚN?-~UWUj/MupgW} =ՙhm6M&؅mh*AR>g3sࠩUI !$$%IIYQ*T>HNOoo7I$4Dlg79*>HIBTl[9뫰_@VfqjWr+fM~U]ԒI$$I*vKH_ߒ߽ ^bB'ţ*8଻ (c+ڠ*I~ήw<ю:P+G*$ 9Hi7HVzРCP'||>Ym&*PtV~Ղݟ},YPT9IZb75P')'F/Ō1= I &$,QG/ȏď r^O3|Կ&~yGJ ~W"2)dJ0`S MQB_1@ "!EVc3333I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$TTVDȉ$ID$I2$ID$I"H$"Hfff͛3H ZPPPYZ$Ih%KD-Z$BhM 4&КBhM 4&КBhM%EDTTIQQ%ED6**$J**$J**$J*+ BcP&5 BcP&5 a1LmkݻfԗwYwk9wq]wuh[qZзknpnօ]kswR]2ڻvR]2ڍnpnօ]ksjK[Wrn3jKB1ZwYwk;wtͩ.m]ɻwtͩ!nUƷ8[ukBݮ5ݻZwQڒܛwLڒunխ v R]2ɻwtͩ.Ewk9b]$]YZзknpnօ]F8[ukBew&6ew&pnօ]F8[ukBݮ5ݻZwQZзk[-ۺ閮ݻfԗwLnwu2$@ (] 5 "EW-6l0DDDDDDFc1"       6eBiPmelllllllllllllllllllllllllllllllllllJ!RI+E3277/xO^//(|"|o){{}~}<ߟ眿y\O ~ pL)a2LIa2L)U |׭u| en+ykݺ2Eμnu_G[ +fq۠(γvcv :sݰ*!w8g{̕Wں;ګ^qnLEs;]tsU9wlnGUPU{uިI6jm&űL3(Md-fQ=q>;|;ww|2þg|χ|֦jʣPRTq[GŴfSe8S[GŴfSe8ɚŴK+mۯ+S(aE/$ j%jAmb3m'ǿ!ʺ뮧Su:]..w9sr\rI$A$>uN7v%պk ]v۷q;7VurӧN:ws_QAMErݵDܷmEw-Ew-Q]KQ]-Ewh, cYdBAY-EwDܷmEwh, cYdDܷmwy ax,*@_ W{Zj7Q5üf3xw;ג]1c*b TMF&uDʂ11Nr9ws~"/rQaZ|^35Ɍbc35Ɍbc,f1Y,cf*1c1c2Y,1k2̶hGX^!H%O/,XXa}HpXyHujU[ $Iԩab\H:,R`*I>U_$9p/& zO TGRG +#[Z Z ! 訨V,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,o# 1H3YL]#{!/r1H#|UE1Q|\mh(#m6DkEQh4EfE:E ##Kt!‘?5o9s9s;70Çt~rPCu]I.R:PD]HOѫUw]L+&u*:*nrr.r.r9˜վYVk㛜lʳ9wvήs43L43L43L:zW5+ri\\ҹĿjbɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&ɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bk6͗niuQLY1dœLY1dœLkNbɊuY곍m8-ƶ/U ,,XXabŅ )XU^ ?Xb=GdT~bHQ'mf$$$$$$$$$$$$$$$$$$$$$$$$$ٛfmopT/:T/F~zֵ?lm}}_?~=~?m~u5S_ëQES] ~\9s'8rs:)Ntպy^u>_SE:)NtSW}}}}迃>@}G0'%QEQOֿ__} L,6F͑hl1ZM5-DU%i-}""q0WEWEWE:r_)o?C~~"+/*p_Rڿ?m^??_{>>>'(0*/bG8&L,"IB+lfs#UED_#_x"?I"OS"b/"JGiP_"_S E2*LGz*%C?!Q_pJ!HPH'$|)U_T/""1_oc?pG 0ӧ !x4ç#:t#ǎ4g hmdJmme0JiJn^#4 ?dEWP8G(CRG#/؊֡| X",1C &DAUCI i8! ,vCE"d^JT/T/΅.ޕ^y??BGuEZI$H$I$I$I61c)YJ>9Wr;y.]˽q֍{u#*FP`T*w-{8e]˽䨊E:R21T #*GEDTHúx{[.p;˽sl'9[.mER:.𺪫@(iE aU?"*U?"?T/aTR؂PRU?HU,/\8/I@Q=TPI^B8"QU EW‰/e| ,I"UjVB֖`HQ5,DE%5i5RmWڶL%0RG tR} +^!?! $E_4<\)bS\"~ b %G)SAEj}H ?j@PzOE)A#"a1~P_KBD_EV"QE$H+ro[?""""""""""""""?UڱUAWs٬֘1c1c1c1c&L2c&L2dɓ&L2dɓ&L2dɓ&L3333333333333333333333333333-m:$b1VJ)GJT蘂pjEmD&"0b#&"0c aVZ""""""""""JJJ"!lҒppI{L!RHUU_ƪ_eX""" 뀯p)$}J@!)Si_X }^#ܐ"J llMMVjI$kU5t& aL& a)p?*0XXXXXXX\(/jS({.MBȾ*Ъ`2H$Tc 6L,&#ꤿ~(ݺ1ۣ,ZѻtcFюF;tnѻtcFюF;tnѻtitnѻtcFюF;tnѻtcFюF;tnѻtcFюF;tnѻtcFюF;tnѻtcFюF5<.Yㅘ8\pP8f. 1f.8pN8\bY1f,јVJY+%dVJY+%dY1f,ŘbIY+%dVJY+%dVJ,ŘbY1f,ŘbY1gq8\pNq8\pNq8\pNq8\pNq8\pNw殉WDݫn7j蛵tMں&]vWDݫn7j蛵tMں&]vWP /bB"Gĵf,EWj*9IBBEa4اD%D\*{$I$D!I$9$I$'$I$I$! I$I$I$8)$IpR$|BIA.$$$$B&AHI(I!"L$Z@֬I|uZOy)GDWDXLR1QEm֭mV jo$$HI!$HI!$HFMi6lcr$6$6m`I$H5oʷD0а#UK\AỦXBb)OU%)A悓QGaȫ# "Lb0"JY0XIu S| U}W=#?"*b,j/ra0 ?]$@P~,&"چuUU*oZڭj?~}^UX$dH_ RjyEIQE2E%QRTQIQLQIET%IRQ[IX(*MF6iTlleQEQEֹEQERT%EQIRTQJUJ +T2J^RQ8D}_)`; (_U;| 7@P  ۠q}vo=| +Gp@*0(ta#Gè=wwp q%7@+f}܇ cCq 4,/fʈUV Zү,Ϲy`O:0.fhv޼ P^c ҂ "F(020$M0{3mE2 JiIDښz@R&P 'J =' F&LRUF4"@F`ИhMb&M4ѵ>:#AUK*$|*ЫȈe{Da$ 4mo~_}VR C&wlbJ(")qBH` EʇЯ*+⡨*H% iwd^Ao{%7ݼ dUݒy[껲[ Kv7WvKu]-wdUݒWvKu]-wd^{-אo{%xn% do{-אo{%xn{-Ku]-wd^Ao{%껲[ Kv7WvKu]-wd^Ao{%7ݼ dUݒWvKu]-wd^Ao{%7ݼ dUݒy[껲[ Kv7WvKun[M*H]4!tҤJ;% do{-wd^Ao{%껲[ Kv7WvKun[n{-Ku]-אo{%xn% do{-אo{%xn% do{-ׁ^Kun[ M|kVeB2g !W6Me BwϺ0Rg B_w0R{[h,Rx C:iX3X7kw:Kvx Ch,R~}ŊC)E!z鿴X/{:A^ܙB*5{P60RMn~㤱Hs]9զinyX;WVqX+~U6AϪ0R{#,R;HME"̡_}FiK+Ґ?ugƝ,^y.繞E!q`;m) ߊVP lHVem4H],0Rg5) Ze"3KtM!O 7c4Hnڙ,Rz}Fb}>4Hk>:LE!ecf2E!XsdHk !W^yYB.q`/Ω6AJzLf_ӝrf) y7gQ`6s1lHU4HVi`6thHndHVqX7jUQx`&ȼ$R,!7LE!.MeBwn) w?YɖHWٗm) 3!Ͻv; wg ;{u̒E!X/ =!}\E![y\s,Rg!^w.OM Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M4JClm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4D[M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M Clm4M46M oo7By(^DDDDDDDDDDDDDDDj`0Y1D@DDDDDDDDDD@][ڭmV|(YBB1BH‘PBBss#$PI(x|-g_]:z뙜AkkwV/W=e^m>.~8 WÏ1zr %օmXf֌4W7A3WwQ (|y-u٢ꨯx{דN%ZwI skz&}C:W}="g=quҭz뚾=KχYx  QB@DH@Gޯ[xlj{;}睿9v2ntni/[[y;{דm`{üz](Zb=Z0ӳ}^  ]"Qezᱺ7rv~g?OHDk\]m^毛x{ToBJ>BJ*zϥrUd~zf&Sw#VJz_N7+L""!@j[K HB P  @{@I8G9B<i=Ǹs%nwgWͼ7.tM{Zͭsw3/9lI$]IWlHw{[vv[-el[-el[-e;{f6yxovz*?3oy'{߽gW^jV#Q @@$!( @ I A @@ @@  譹mxHY䷧'.f9靹5FRy,wwwwpBV @@ Gϟ>/||]˹w.  @   @@$!( @.ڱ  )v;wzfOjQM7UUUUUUUUvn7ۻ5z[ENIj&зޓ_o^H_睇U|>Hn廏C_v_睇ws_zEvW瞇UkdWakdWak~y{_zW瞇Uk<?+.dI$ %[vNӉq;N'i8v]v]vNq;N'9CJMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMXMH%&$u*woNխ_" #b""""""""Hvj.337ffvFffosm噙Ͷmmmmmmљ3;#2www}qwwXE\fff6m?,mm~Ymm|3;#337ffvFffosmmmm噙ͷ33333{ofgdfff6?,mmmmm~Y|3;#337mffvFffosm噙ͷ33333{ofgdff^ffnFffosm닻E]"""* eWrmm0_$*,a&330HI$I$Hw7׻QfZR$X*qIҧ'J*pTQCIM7'J*pQTȩ"h*e4U2*e4*pR*pRҧ*pR*pRE0"M7!ҧ!ҧ%Tȥ5Rȥ5Rȥ5Rȥ)4U2)JM7 t'JU2)JM7%TȩM73j[rmBěmImIImmmІ1&mmmm&n[rII7`A!*"TlQ#ZQ#ZQ#ZTIDkYDkYDkYQJTD$Hֵ$FHִH]]ѵv;G]])v;FWcw\]rJE,Hֵ%F%5eDY.5-I&R , 8V[?7/_&m6m t7eիYn˫WE{}  _U_߿z?oI$P~+"#F/HDD3Qz4+v]]nDĄDHJs\FqW5im*5i\s\BŪ.껫eYҮ5i\#JFqk4Օ]u45ikYWunU[\FwQ#M͸+4qVUd\ЛlMU!4M 0L 6pcÃlXcm4l[bRI$I$I$I)$I$I-4ORKdym 6fމG&tiMO}޽;﷔@z'` mΧ}Fmi6M<96 B}>>/2{M >9o^u;4lfMt'OIX&$0L 0LB` X ı Ba`+01)a`UbL ZYPEdIj0I0LLRИUe 0L)Lv[+­D@ 6cm6cm6cm6cm m& m&6cm6cm m&1IIIIIIIIIIIIIII-IIIIIIIIIxz$I$vlmlmlm "cn"D/֡e j-аDX'"G#s꟨ݻ5k"$DDFѷD@ATtUS˙m,Kwwwwwwwi:RNԷwwwwmfffdQfa.33333333&j33333333333%f$%fcyIKɚ [mإmإX0gSaΧ)b.˲.˱Yemv]ݗevwdۻ&7vjI6.˲.˲.˱Yemv]ݗevwdۻ&7vjI6.˲RMݱEڒn퍺.A A`Aa9 N&9cg6iDJ1R&V5Dj RTV5Dj RTV5iʂ#vfwr݆ܨ"7aj7w(%QjF+ML4Ff@ԨQGĥE0"rI_AK 3~9"-&j/w*.XX_`]V4 9 N6'Q6'BuU͢vt̙"صˍu39ysĎy hM-bL*0BkEZWr,V [ UhXU8JKqX 0 &TQNBxA8 Nbh* Ԏ9 j 7#jh‘M8*BJQ~~/<4w`BD$BD$BD$BD$BD%;ffl]7wx޵2ӯMFNpwN:}{9,I` `̐L˂-pAs(Q "} $d]`};UU,I%bX-YD<xz5 P׳s/s{G;X,-X$%&dA- +{|ӗo{*P$5"\ frɉ"Y1, ɶإA'G ~ ,4;#"b: HHHHK1Wpgƕv@CF#G#< J#Bz!AIHDb+$"dB Au#A(^DAhI/I" B!HB!JڭZ[m վ|>_wE˵r%N-ͥ;{WSwSxI&vWT9E.NwoIӗRzo˲턝2m府~)w8 ΝǙ(\ս]q]D]]YAu!]:@B}~:N׿ʅ8q./BC5ff3εT.j)'GgT9E O/Og{9r%)HYӳپ?doA{qm{T.8 T\tJZӕ M簹4 ə =ߔ_ȁxPиkyf ^H:ˍx.\q6ibv/Q6fJKЎˎߟ Bgo^w=~0 c/E { 40fn$o{fw~]9x˗*~{̼(P.#ʊ RU3Uޛ>zBA %%Z6wV-JVz~_BJ.&f]fot!yk绖[e=W tk_U7kӖw#XG_ffffVKB_$%,Zm<.4C4㣡A$BD$BD$BD$BD$DBS̱e59d^GPW=eZK{uBS-W5ݝu'.sIZk.2{24;2N;js+fVmѽtKgTϻvs3/i<^lΖV]YY{Y=e'YzWf.zWyDD tyPW{oyxD1KNq2\?I uM32gJm9%͹ o ~Iceg~mc pIBI_ -kX&:^yAbQyl@HI%BI#"]}_;M +uU F).>wtM$" " pDLń&g[W}3ճ{wë";\H;\i Λ0=97ucm9;qi/JHIHtCiI2HAJ "fzVSpvt?:յ[կ||:DYiM&{]t߷W_Suj|vjkz*"вʭ]쾯zݷw'NOmlꦧ^}}<:sU>ګ~ͯ?7sٯ۶k;۵9=w붌Ϊ^^ӣ/;/mPLjN "# wzk|KQq}VraT_{wI(I*II& ʙփ읯\" [)I~@%ިƥ¿~VY4.$R$$%a\L?gywη9m7m[soRYM>{ͺh臕^ݝ:t;- # wq [""yyY -d &d AguU񐽳;I6^ s|9e )a/LJgPj֡jCWY-&f-(zꗯ$ιQ ( F?;:tꏊ׼nəgz}DL Ў/IUo']y߯O/ geaECHHHHH*}&^v=ʘKoff{ ];WE(`]5WC̯n=UDZus_.ަbݓIUY^4 Ҩ.swiר2n{yaʀæoޏMzFrxzK niCz4]곎;vuXe* 'nKVBI%32b%SaVfe=zz`$I#"e)$E jcd'zeϪ{{ E$I V0^ @)Ǟ\Ǟ"ԒRJw$ EKJf). Jg!ФJ8 p̕'{7>}9 䄒G #Q7e#qc{ՉIHARVf5Yy$RL f$%Ai3-7Yںk3(J!m)cql$9eDS+D5).srq0Ԕ%gd )8o3]/|mY3d&ؒY?K zRW`z\>E"<~7d wwq@;:.&2:8#!"!"!"!"!-5oMk "R9R*\*XB! @Z!B+DJIC/.~2J ͽ|yf讋(o=t`x* ҆ot87[&̻͛e ;3۔hvͩWzٽr7ٵg8v2|Y;zIӻvy9]*d@aɽom3<{;r⸙ S0AMDK( ej)6 7W6e)&Rbb<٦D%}O;IFLBIa5eMq:g-]W.{!$r3/-4۬׾[{=o{]p[4e2Z~7n/|W1mUU~UmZ!Ͱ %Kھ-3Ǐq^e,&X^ʘN\odyl4nM{[ iEPATaum> [w>zw}^7al['\4M\U ;%pM ˗pMp@"0 }69g{B d S!upMofɕ։kZ'CzQaQYSN 1՞G'UDrVJ* S!,\KaKa CL,Xu%~z\c߇os[=:RL Ala( nB "C{&U _:LBMr]or  4 .dlttBD$BD$BD$BD$BDzM.}%"^=@=5( WWQF]j]RWtײw5)Um.;jY{nk`J'Kb7K!w}eO];|绷rN֏՛˜ɗ`n\o=f[:v۴{H8]l]:IGqv2TҟJ;36siBDZ&ʭ{ۭpN8ۆN*ERLA@ 3=tIVJC6hP@] )B4" U5,t  #5*j\Իm}i!ێKd㍓5kZ&'j( aYAdA8}QT}uפX NtM5MoDִL։ {9zM&ؙ.AÔf[w+ <&vw&ڭ lan S$ cHN g][}i|m_TUހYW M1& Y&"ܾw"}€sqq+in#*KK]կeTmoi-5-"3I;ޑN/IFvgֳ Xv3u]hv;GhzurԲ._ lcy5ZMI]>Vy >֯Qj<(Fz9GB!\ Ѕj9F(l#BPVu}JYnӽΩ]WmL.2Uʛ뛻7uwsZuӥ=a_v׷vM<]N?Y|IԼ{ӟ>rNIc,:{1fyQ%S}hAs0i33u~1ܥ;q'\#wWfۻj3Zf@Dn`<]zAJ%IV}?[U % *S;3)pHaZIB JDSyO}~:9vnR/&IBTpAn7ꨙw|{=0EdǢ)%*L@EWYԳ_m{DD̕ VR J\ˠ\f=sͲgS5P+32t>ru~w|I{@^Ig7R[O{{ٳySҖLmԱK x uG.U9~j{x˻RۧTZD̺]EX%rPIS3>x0~~%{+kҊI)*tܸ)CsR%L̳2fnmgw'4.\嶉rܷ0A-y9LKHw7}W&|ܩmKdmiMy*UUWVsUޮڼT2[剹2[$Q*dvMWu׋":S6i|,ЪfjaCI*[ۖnfb*R%3ՓOkbu{LM>)UUDSuP: l(U NRJg^KT֫ g@US$L IT8u58n\DU: 4$yUb{rj=={aƚΡBj% j6-7$ *U4@6M@@A>ﴆܝ?~uӽ3~&뫸 .肛d-UU9qUUA *jW?LLc6m v__My}~3!wɜ Y Vb D(D XaWdKrTW36"S8p T=}r}޿Ȁ#vl*UPKdUUU *" UV7vAx2ı~{&{vr?{ o>% P(WDvAW"ZQ۪"(UPCT(}?Bp]u]vSTA4UUQCn UUP$ "*聶*5T+'%߲׶wk B!AI7+' uUHDi!U@ae]B#2JE܈XeȠH)bS&:kw߱E> G#( HPe"*[DRHU"UT@dRUI%USՊTvv~/o; 2 TTTD5UL pDITDRuDA?Pyi$__mogug1/MD">%Yn)ݢ@ @B !EU8n4#BF`tOmIyEĊL(z Da<Z"J L dX Oֈ%XPERʃ\ qS%bTqSADeRp!%j"*TklI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$Z@ֶ$R"H"R$ID$K"HD$IDDFomU E E ؒ%J1a(Ll&6 bhM M 4&КPQQ%bKQ%bJĕTTIQQ&Q%bJ**$%ED+TTIQQ%bJĕ+V$- ca1Ll&6 ca1a1Ll͍1%gk]fjkMKd4Dյ%-7n%hg;Vh+YMjkMKd4D[& CMTMu%-]ɻwtͩ.kcMTMuie⵮B1ZwY1ZwYNg;fԗwLݻfԐldA5 5Q5ɦkjk]2۹7n%-d4D[& Ziͩ.m]ɻwtͩ.m]ɻwtͩ.m]ɻwtͩ.m]ɻwtͩ d4D[& iM4], d4D[& CMMu5hx5BڪUHն"1DlQADAAAAAAkfڬiYYkj+Vk͍ccccccccccc`666666666666 ccccccccccc`6666666T}4$zIĹ ~"_`@Ъ!|1vAԟQy(^/ACC#.S]~b=Yjm߶nhErFrώgo\N?wIɌ_j&J ҂e SSUiA6lfVPB&m/IKrP@#zKRymnb!oކ[[}XD"W~)B=%0"8=EJ{ b#Z# *Wk!}0QP|%/,B"-^kw 5$Jo1HGG(_/{SzK_<`Dp}Bn?/~Lbe,&Y`-%lŤ̓dMRVI5IZI$KXk6 I5IZI$!BDD BIA}wuM:{}wr}}N_w> ׯnM5Fj4LeZju+Zí]6]v BUokBy B=oy8ӎ 2YI0$E4#)5N4 &s'B){KZjUP`-PQlEXP@EF1@j""1DZ -""#h+2fffFa،(_O@O |sfYťk3Vffffffffffu%$$k#34њhΤlb~I$I$I.|k U3Xkx9$lDfffK_Vk⯍|szU]iifff*ط5ei٥'3Fh334f\\+YW94M,fcs9s9s9*[y4Ifљͫebbɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,bɋ&,&,bɋ&,bɋ&,bɋ&,jLY1dœLY1dœLY1dœmWҫw,bɋ&5m1dœLY1dƻjt̚!'_C=C̰X,# ST51WqVz #I"=iꄜq#D_A U~j $UZWo?HHHH !:ՏPJ>:4FBֵkZIph- ,(IdאAA@ִ``;(+4լ[{gm]ׯ\~okߧQEvk)uvafaZ5;w7hN^{ 2Q*F M ^>=jf,wZ?w_zqq~?W U+)X*I0L`YRX,$H'IJU?(8?^bOB^ Qx@TRG*'&y=,* (_bjPR^REIQx<¯(1QC WO!D=й??A(ȑ!z r(Z#BTj$j$xz}jȈU*|W?Ss?'&?&M4K,%ce1㳫!^WTM.SR$~!OTC$ċȋjW!a00I!څUKp(>JCe(6Q#eR 4 $Hҁ^T/*…bGP2.d_aO BS=*/s\冰Y3%jHU!ѱA$L$$Hj""""(""ҳߍڵ5E6EEEI%RmEEEETZTXEƂƈ(44EE$ԛQQcDTX4@j-EEj-4F6Ej-4@TZ1P%LA mˈ#U 2,eDMIEh"(-5$Z%u6"ͻsn")ۻ "(-SwRE"Qj)@Z>>Gn~yס\o[\qUV|;w@$JV6RQE!*R%TNATPDU:T@%5%TJR)!{֬TDA @F7(5\ؘ'-g>y'A; X SDKOISUR:ȡeRr qߕ_voUZCٽVhfZհv[Dn@ݫ)n6sU[voUZFcݢsE-"6I!$BڝkV .“ 6"s vRpJ0(^P\^nG ~E_E`0 y<`wP BRtH⪧ =D> C1*TJdRI$1 0'b>0 F Slc$I$I$SmX{4(rHUM={E(^U*PhTJDhyjDuujZ5m ZULJkjI33"Ca1 j*_:В‡ I{EP)>" DR(_ԡ*YT&Y HUX!5Vm[WmBeISʢUBHp?0}>' Tp"ʥ_ RCPB{P{]T/!RwuBC9|)Bw(d~!UKD BG Ȕz©0i(B7ҬR>!n`Ȅ^GEh$0{B>ԇibMmvmV\1F10G)T";UBT$|(Z bJJDJ*`$\HG_x* ,& YJ0F>])Iz yRhCB$tU#B\TSޢ%y))*AoVUm_6fID"MK,UT'Q syJuGqR2#u RZC O >JRR^1(Xp?X$BT/SO@>=K} `BNA+R$/ҩ@!P;B+ci֯VR )L>{EIzԢ~DpJBZP!h_ۙ1V4,1DDDDDDDDDC1f@?CjWEZɓ&LcLdɓ&L1c2cL2c&LɌdɌcɓ&L2dɓ&L2fd3333&ffffffffffffffffflf#P 𢬪RD)0&D*Z,0[`(XR/CTn$zZU#4)0EUUoҿ0ŀHd}m6c*%T$p(]Š<yʩ|DSURb.bPQVʱaaf P=b4'`& `X& `& `L0MR,*1RjhF؟UKjV, ) (C:к$)Ib;af p'`(=. QK .&PJD)xYB2sFю;tnѻtitnѻtcFюF;tnѻtcFюF;tnѻtcFюF;tnɫFюF;tnѻtcFюF;tnѻtcFюF;tYb) ԴК-0,ac Ei,ahM4XZh,acBhƄiVJYuZ+.][ddVJY+%dVJY+%dVJY+%dVJY6VJY+%dVJY+%dVJY+%ekBhК-4&M BhM0MEi4XE QA4c E@ږXtMں&]vWAn7j蛵tMںU7cPk "2Mh JH£ {ͫ f 9>-_DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3d(XEGHP(_I}ba *Z$᪷wmiԚh.Vb+ BaJ0L*Л 5/;mZZ5 0&2H ,DЫE| HZfcT@>tfhX`XX A-U*%yj(JPRF 6ty jsTj]33"ff INU-R & 4: B,QKEW0T!:y&Tq#J *^)RP=HA*TL  CTNO#U>Tm`jRO/AޅҨpJKDJaOkj٤JYպܭ+XA%^§1AY&SYPZ _`Qt?`< }NA0@o^*BIK!.@;gp׀v"<8}7/Mku>t0npnp﻾5=npCwK[4qNǦ]խwn:=wj!6]|7cw:f3C֕yJP,>jUQ*4Qf=wt0G`]`!)P==O][gl U CA* @b0L56 6R"*z(hjzi$$ɠ20& HDa4A'J($!& 4 )(QG2mAM 2BMOѡ'FFOB|O4􊡁/BR%%Rmjտ7* yC_u_Op>[ֽT~Z%UL* U0WCࠬkm->n{-Kun[n{-Ku]-אo{%xn%껲[ Kv7WvKun[ Kv7WvKun[n%7ݼ dUݒWvKun[n{-Ku]-אo{%xn% do{-wd^Ao{%7ݼ d^Ao{%7ݼ dUݒWvKun[n{-Kun[n{-Ku]-אo{%xn% do{-wd^Ao{% do{-אo{%xn% do{-wd^Ao{%7ݼ dUݒWvKun[n{-Ku]-w5W"K)j*”z*PA8T*jj: Ue TR&m߿_I$I$$I$I nI$@ $HOvsٙwz㓦yNN9m|NmI$ޤN%uffjK*+rt&&tϹ#9۝$7I}|S[Ӥ޷6N33$mw{uQ]Ki+Y$̽ov)t[Λ'Iٙ6ػ:(ܮ%ٺ$I$I R|O>1ׯx8;v=q?>'tǏ_x8;v??[ty\r.g S``7^X w: 1+A-}(bV 4&)B!`0h}& 4k n]Ă@[''e @fujK@\u 4^й +z``NC4P4(X4fk hWj0@h J/0h T{B!`2"Ph @n~c4@h ~& 02!`&u``=Fhf 4jx7{4D4K׌e yg>0 h sp(4#olf _vѨ0h i?`pX4B.f @^1ؘ 4>_o 'j 4h`` 4fnA@^/ndwpt& q |?Jð*ݺO_Fh`[A@TZX4]W} L}h á`ε4@h &Ch "ذh[ף4@h `@L 3>Ktd2vӆ%h,;=0X4y}cx@hܸf 5A@^}Zh4rq` N+4-!(tݘ13K 32  A@^kf?fWFh|6 nu ZSںp*i3L_>EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QD$EBH$QUAR Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E Q E QBH$QD$EBH$QD$EBH$QD$EB]:uκ[ UO`Yգ&4D@"""""""""""""""f ,  !VBUL F//// PUS/w=? gK^FKʒPaݙ*-/6o{5ͽ4v8o,~|x g{PoB} 8gBWބ+3I$='}B"-r-? i\.I XcN!&}qpWuOWtl}zN:I~O^#3$@`r /p.II7wx{787.+BR :AY٘Znwoa0@ޅp΅3V|I$ 1h\wXYwFW۽ղMz"{I  D -r-?łW9KB9V%nbXӈk;wM>z(%@ @0@ @{PP T@T* DT+T*AQiJi*AQ xgH۩$Ko4i+fowfc}sNi94ӚsNi94ӚsNi94ӚsNi9.o{ym$měI"[o3$Is@*7w{x ^=ؐ   @  @8@$  @ ` @ > @ @0@ @)e2^RqVe@.reRUŜK$)@0@@0@3 ` `s H   @ @   @  @  H   @UfnIU* ni]* *wwwwwwwwwwwwvJJUJZ?NJ޶73v> K @Q9w{Nfbݘy$Kmw% Z{;wV$DDDDDDDDDDDD$DII$I$I$2I$I$I$M6:j2dɓ&L2dɓ&L2dɓ&L2dɒekk_W//_ֿk^_ "ȄYD"|C"0FȲ,FB>#da Q+((((((((((((((((((((((((UUULtm͸{wώ?mvFO(#P_jo[~UUB A H$ TUUILNwo]P/L9`z~/[Vu@z;uɁ߿Lu@ܘ^d0;Tf&~޺s10>T &~޺_&~~^dLu@`nOTf&~ޛߟ9`o~.'ymXM6m!wHvUN'i'i8iL6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEL@Uz*mÜ9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü9Ü;UZDDDDDDDDDDDDDDEHA H&onۏͷpۏͶff Ͷff Ͷffffffffff Ͷff ͷpۏͶff Ͷffffffffff Ͷffffff Ͷff Ͷff Ͷff Ͷff Ͷff ͷpۏͶff Ͷffffff Ͷff ͷpۏͶff Ͷff Ͷff Ͷff ͷpۏͷpۏͶff Ͷff Ͷff Ͷffffff Ͷff Ͷffffg^R)J?0t?w]UO۞:ۀTM@00 ;MZkVHvD9u˭?LJrO>zCjWJ Ͽ~) 򯞵%IJrc%mIrLrڒ%%%qR}TyE]igf>[-.IRR[R\\I:)ʒIԔNTNJruKe%>Iֳi-ԒNIImI$디ԕ|nRR}KvڒI)-ݠX 0F4h fRI:%%$RR[RZ^RoIJI$JT*I'RR)RI;2mxn zj 4Kqz3+vg&@ͯ >g&,͡2ׯ< М.kuoϝ|{4ono1|os|yWKjno1|os|y|[h:|^/kmz>>|Zu<ƍyY7ǘѾ/s|y7ǘѾ-z7ǘѾ/s|yWK[i7ǘѾ/s|y7ǘѾu=mz;Nwڝ6w۸\\{\/gcF>Z=7ι_*u<ƍyʳϝ|K~e0Eh-$ B$DQY=IpC$m(ye.[@2".z+ϗ߮}-~Uߕϗ~haI/yq6O] o>?~>mޭqwpo|=m6m7o{w}O}گw Cm݃m0Ͷqz[/I+ ȟL0a1 &Rb/B, e ' RZF"LSQd'$&&*L UbIDX'`N렒A$I $H$I A$I $ A"P$J@ (%DH A"P$J@ (%DH A"P$J $ A"P$J@ (%DH A"P$J^I A$I $H $H$I A$KxU>5SS9*nm~wMI|d5$V4V4VX(A$$%z8z8z8zLryYu=^j9{Ƹ&CMg߀DPx*)F&‡9W$( 4(sG;=~k]W㺾]OZ8EUkiQ.viiIa-z&fYk{na$|A$(H֝}|o[kRm%v24͕ˤtկ{} ><0C)I I)}SpguٝDH $|C5^">4k\xx<0iM宾~Q[rYuecd::th-?ht]b5^go<~}nscCHi !4CJIܡHAi#D}o*_WD]o܋o6fa-|ߟǙn땺_0gUwt[$˾ԹZ75uu`u<.BH] [IgcrL'UV;w2w]aۜ`zs dYNo[~zw:`A{I/5)sm ɄP$s$nZwkWq=wl]@qF.ˀaGuju窬 ߀և#M! 7V}v(kNJ0Y`CE$AdMtY3TWب[{#usr9۽.Ӯ̛lJl"Eˮ%6l"EN۾/ 4k*ѥ&gwwuގKvw{UO`/<]K_|ugkO'O_BOPz=ڪJ/]?K,:22o:Yy74we||\OնxTuWG̎_@x$?P^qCít UNz]䳹 ywT;T9u>$hMrZ|vRkdt6w%u9>0_"yqn'M.v:OOnrx]wÿ/ri]ݦI?ONsrlMr&؛blM7blM6&ؘsrؘ&؛VӸrVZ+LM6&rNblM6&؛bo28S^..}Nqs+S9d/whӘ16&؛bn9'16&|NX9'16&ڴVZh7=@,u;OHnXiիڵuidsuN9]Y7N|_mZWwKߏwt4OϯX14CHi !4E{9*=9]Tkw"y.bt۸&/wtە.yٌ$+5Tr b7/2݁!]E+ɼxܵWIaя^ ٞ9+7ԜYIW0䷰͊o޻2#+Vٵwk혜v%tdMKlH { €YwdGuf+; BǁCАAv#&>BB׾>_!%|! ׯHB{ {|@zU=}9{Mc$A$J&(/o{ zFH Ą!=w zHB_>CP`z?k~/׾2ʭ e{ﺪ&ܛ$[?Iසc~`!;HNQ4!{y$ W^vG֟w־]ye9 UOgUSu{I$ҬN>=S+s6mZSzN]givu_(yzlVIiyK}F=)R<6iwv/|m$/J65u f f,i<"ꀠH$63s:4N_ 緪3Io^ji\b>wKbˉmO/+J)Uj }=$Ϻ f%-\IoŻD,'yӬZ[U>A( >Whӵ_9|+ᚲppsuJT5*ϝkڝ.ۮ{bY,ֲX%K4eщ{%U3{Nh{9nզ'WiMWtۣ+:]ܫ]Zm+I)Ow04+Jϴ{6N]:upIDId:I%*,ҠOfKs̎2efdmffffffwzׯZZ֖-igyi* ՙ"^>~MwﲝU%mI$OPrT:sѬGI1Uj1dKb) ڋ.[edJjOLnڗFdۛQWjf{C{LMKY'bN7;T;+*;[X^r)m۪[Z$ts)v/Ib4M}|ZBfO2p{zГd<3oS%YZvw.|[g!mP}Vw\;Zw|] R8I󞾰n I~$I$XxP:-nb*Q߿SoCmi6SvX^wIUŏ*骥㓿o|ѮRږ6MQ4* Nm ®%vݮônA&h^bMUW<}:ϽI1Km[574ͺھo%En.momgvjo{Rĉwږi77vHnjx[]wbYY"tZ=}A #ܹΨ[7P@<j:l:wI=ݲI$I$h h ׈VnC]X|Ni.At=}=[O,nExUI$U^ҫw־cM;վo=}mM ɛz%c`P$T>k!UĚ$PQ$ <7Z 4|۪ݕgUWJTj ѭKUD=R,ߪV s靧ոIIB6qbT:yC:sm65y[[U0ɋ؛mIUۻU*w-wvnu~_~wLs ٞzTչڻNm>¯ (NJ/Q|_M_d~~$ >}cƐCHi !4Ҿ4=|_k#㧈ʯ^>~$mUi.iHS(ʹ~;v߅~?\O߅7yⴎ\Gf{^7ej$@dc]ȔK;4\UUudtǰ%}xڮ{iq]jinwr[ؖ˭;dura䷪pI$&u̪vJ/ڛIU/E$gOxD]IjEw }4H A4kK>[2o%>}yJxH4A4l.Vt0cӘokߟ7أR뾛+b[uTUBUUUPWu[IW/$Mhۉ%ֲ=h{1UQ%Գ'߾V軣OkIAMk;Np|AhUCslGX_!W_NRz!Z~O{=Oxz^i !4BCCN-P;8ٮYEW {?f`OfS7or!B ~F.}7hQ[YŵIVp|MCG5iRnV:}W%m̤NqӔ!fWSoպviyUZ]wڑ3yMprw [չ=+Vpc cs9Rw=O*O뽈]/k5~v礃bAprVlG.3=ppU MtZ݊KSy٣AM&oĖ|x}Wu^l} $}O$UbMyһ3݌7eg5ʹkFkEkFk@7b?84J4J4J4J4*+/^I{3zb3W{kӜyx׍WlGh7$yMܷV9M-JR)RLI$˓>Nh_WG}WiX ɒ}U6LjʺzmA){պã݄w[7:Ny7 ՛|^if`V<[ٹ}Ev^r"㓸䳮T sM}1V݀=xYUM\{FbMcISMSmi6&&dիi5mZmSo;~w VRn;6ீRBͭ]IyK[Rdkprm[(ܑh񷶾)|~En -hr^r-%J/:\tKnpW`]Uw{R#u1,Le˼[ߝoIM5߉[M]+HkEinsqduZM0'n~VU$nCp]x2X|< ˜n=uumkU%U]]ʳco*HxD)#ThX<NZT&s9g,輚UDI$x&VZ^tH!rOγhNT%F uu]ZY{LSzsIug<zD$'@7M*\i䷭K;mum*})|~\5s4sH~\_$i]4$I$I$I;rI'9'I$I$+~~|q14CHi (TK;97!˦듳z~F'ݟ7O=3}C=@d2}OԽTvL_}VE-m@vT8 *ǧlY7w`ϪA%BY7Y svfe{viilռw[faLwf.̻Jv%ɻ5/Ku)+7Kx_3:S{$uM;w>sml}I$RY׭&ǯZfO={2hTեř:WJ 6WuU^X[ʁʹ ޼ܧhUB|4 xU!T a"*,U}\P$myeޡ%__^#޾ywuwh=ܫp[ОHUP^IxU#@xnTd ɖgf<[W <2JA2Es̕vʾ;~]ui=5UIn.tSA$ăubo:;6A|soWϻ=wٝG$I$H/U BddRw0d9mz߾Đ]h؛]LOb 7@BSa}݉d]m=ڬ{ua$>w$Y'Y>޺ϏHgS<I`I_HPUp+^,֓I%wjrSϑ߄ty %㗗A?_}îˣ7p{k@'Igy?z&}b;Imdl6IzpPRMoW9>WvAEܖx,I/6ʟ]jWUWTx/…+z߬s>$ڽ(0<~I}_c֯@xXI~V=wh%V)*@ /R_xRL9neouӀzUW^L#9w䗤"8T}h|-44<='!#US }bS&) `&"*>A?%?5!2JhR,uK0-URXJJ2RR}P ~@v[mlI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$HU""H%"H%"dID$IDȒ"$"H""$"HDVUnUD-Z$Ih%KDBhM 4&КBhM 4&ѴIXJĕؒJĕTTIQQ%EDTTIQQ%EDTTIQQ%ED+V$P BcP&+V ca1&6՚Tt],dA5iM4]-U]lk]wukУMTMuil.jMۻmIwt 5Q5ɦkCMTR]2ɻwtͩ.m]ɻwtͩ.m]TMuildܛwLڒiM4],.m]ɻwtͩ.Yi&4MtCMTLڒ閮ݻfԗwLݻfԗwLݻfԗwLݻfԐMtCMTMuid4D[& CMTMu%-7n%-iM4]-UVԗwLrn3jK]wukҙ1XZ]RX U ֊14X1        -mSmk U͍ccccccccccc`666666666666 ccccccccccc`66666666665TT19p &.02d&L2fXX_EC.t,'ʗ߫bbW5mslP|'_Lll^'O1}D>~"^^_eQWz׎?>fn Vn1AES f qBYAES f U>՝mr\ఽynZ3%f&bf̕13T^\7^:yMW~EZ h*VIHiu5=K뮺\dZjŋ,XUVZD$%IRUU8XZm8pn!;n&7']wwk\Np:[n˺q_ZUoε}I$?""""".@I fm^J|p^E^{|mlI$t׽^{$H$I A AI A$I AH$IRKDDDDDD@<^_Ȏ ꓲS?^hk6$Z!.y,!Nň)ں'ei@ `}atRb,XX!ap-zZ#adq \^eAఱV~ EzUOA}]U?P 6Ɂ@UٶhB!Xpl6 `TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT_,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,Xbŋ,XbŊl[-o`_|HňbЎatXF# b=bvU~<JKmbV޵Q*ʬ*A0O'BHc,'5RtgTUΪ TVMѝJu);DRݺ5v虪]Jv5K JhJj;RqX▰ U>?8Z,  tG0i*}eCx#|EbpN ު0:'/T?Q:'/!0c4EA(DAXƌTDX 6"1b#j"6mٱ_F"_"8R#2Y?ffI2]Rvfffj,I%Ig[|YIdId4KhR)E"%DQ"TE"HQ"TE"ϙI/?SXUXUXUXT,D Η]:]tz{ꦓY3l_[ $I[jm~\.ssjYVͽ9s;ss] Zukn{+>U9sZƌ]c34ffff#3334ffњ3FhJHN4fњ3Fi4f_$d3Vkֲˣ3 W9sU1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dœLY1dƄœLY1dœLY1dœLX5m=@%\bɋ&,b6͗rm5.:c]Vtœ:c]KqkiWEA"X){״,,XXabŅ,*.JG1HT {{0#؟qb O Rm$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ٛ~ wU@X~yW# C?[\߯o99_?ߏ'*˷DM '33 WOcpxss199{O'=Sz:cN;}>_#>3>Np瓩4룩}N^Ǵ'>!T#X,.3{mw۷nlknݶnqvӷnݝ;qvmw۷nlknݸ;vیnA|7W|)#?}|F}}}|F}}}|F}}/fvtgLxΗL}oI|/[}݂So#>>> M#>}njt/..v Mma`8,'_x–|qRJC)3?/_)|K/T@i}p_rQO=z8]|=No΁Ϟy]Ӷϟ? '~H(~aUAl:qU|@d~=N £!0/ D?~_4UT*UC@C*ZZXځyU+H_BA_ B|xe*Q} ;ğI 0aa"|D?;Ф*V,ȭ4TmUnVkuR8I(/W$4Wc???:tPAA40Ǝ" , //gO,//pU!D-U?S}B~APz<p"z~R_!OBeT!GUS/a P|iIrEKJT|R|a?MR< Jધ<$t(@T }T|)T'_ȫJit3q9qCp )ֲVU ڪW'!T+*/`/t RX #T> _h/4R`R\*@~ 0TȳabvuPD?0Gdb_R? ?X!8PU JC,/pX\A~%(O."RV\WKD>ک *TBUS*!W/h^R;6d1d[c5jEPlllllllT/(=T=?H@ &*U+@jŅTQQQG!~USRz ?T?Jp^T }䪧/${ Z_ď&ҪaV-*Nx_)'|nd DDDDD`ŭDbƭkz5TO2$**Et "<*'=t!> *WbN#%ha1$hjUP~edT~*I|aR%)/UEPU4. U4aVUOQ.qT;R`~4S$Z"O@Y 8U* D?p T܊J%IBW IXCZZ_EP@_(EJ9 BSITZvh_㪭JmbDDDDDDDDDDDDDDDEͫUuJRP{ʽ٬1c1c1cLd12dɓ&L2dɌc3&L2dɓ&L2a333333333333333333336ffffffffff"tJDث"b`G`NN HP\̈́QEVԫ|UY)ttO*:B!a'`*/!Ъ~•# K O&&4D@""""""""""""""6mUSJK*B^_CJb)AWPT ^ZޭY@ B WB`&"XL&aV F`/JKR_ƃiй$4X,,,#UJxAYT`>e%{Bv T$yIJQ`0XXNbEP?\uK&lԖzVyJz( LUИa0L@1V 8' t(ʉT(AI< mmͭV~0IvA _> pKUJ9QC =@Bh#UT'IWtٲM6bI+i*mj$I$Fffff ȐbV,?JWޅSBTOjR]:R J{ȋE/K"^T0-Pkk[J mX/!uT_$ yV OF{bL,۬$!J lPpT)@|<o];m2FGEV@E0[kօKmj]@yO[VRv8JRcZPfRR :@87v1UB:WG$h{'fwu.4-ڪa mf0:q _ldK by򕚈MR1Ҩbhԁ 42RTT TxlC @CPMUB%?ULMM*ThThI yAC @'zSTzdh@J4M gLɨyOPODѣ#M4)) ( & bzAw{ ȩ ԡYR|@BJAIOD]}~ι?R[YemK)e.)qKJXT)aKK2JYY-Ā6VVYeZܒHH eeY`6i UXT`Uzp 2[oW|f͛6m}oB-x%,Xcu,ֻ+m)IYR,aRT`_攤Ӌg@`$SJir:<)Sン#Ό }!_~{sssgg~3߁OT*-Z$ZűPb"0Y(,HIn1$Wr?9UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUپu;0$~U[H}~OckchT.AMyo^I I?>W8?c8>wkk_]IUR-s|ҿfswR|"IL* J}ӒH,<LJ#L=Kagyw=<0wc0yJ@fdO9p/ @+%ɷUW&7{ټ#rMn.Ǘf2y}t}u#rM={.qq&v|y;on]cbX%ܱ)y/%໋b].őbS/+.ɛ 6\亪&uR m%rr1pa{s6Ks'on]ɷ'en7UWͿ_=z=0;fd)𠈂':!S)HB!\BF1\r˗.rvrrrF2Mc1c˄!6MBecIse%$K%$vc2B%˗.\! ! 6drˌa1crdr16c1eˉ$nݻvyrzK̗.\c;.rF1$!Bfɳf͜#1c1c2MrM!I&K.a61cuwwnݻ"YfWw2(L Lk(IV]8pӎtm]s:ں,#XA</òUoV[lmԲI$I>'?]==XHr9<pXL̙wݜUl  ꪪ*07^-_%IX+.#⼮/ X6m.*x\GfW G:tꍫq1NQu)ǧGC+>o> xR\IIrW.yrRO6}<[y|u0>uJ{x3w>C 2^ܔG:y6},3i w0CT3=|u~)&KےW9f ,\/& )NN]r%_[~ʿyE4UUU446W{ۻ߽*vs.UUn̸*wwwj72wxT CvnUUUU[KHM̻M.U]=uwwwwww˴a9˟s>ÃL7f}.&]k`i`i`i`i`iUl  ꪪ*07]7rٙ3a3vnʿwww`h`i`i`m {ywwsʪݰ4˻U[s.. ڪ̻m*ݛUUUUVs.K~߿> \,e,YbXŖ,e,ZZŦ.8-p UYbXŬZŬXY.#tt\ ,YbXŖ,e,ZXg .rŖ-bF-1pZk-bF,k1eYk*LpXaqK1qK1bKG¤+]-ib4űb؍1lF#L[-eL[-ib5db4űb؍1lF#L[-ib4űb؍1lFU#L[-ib4űb؍1lFXe\J`:#EsU8bWˈ '*Zc gřwg>,)à҅ BДS•JRCC; e0x޺O>>w[n[n/.y\]zG_ )e ztvV[knvqgv{yyzgO"3ӟNrgNgߘۓgM{.^>Μ{Ͽ1&Κ\;{yn{JdJϒL: gs{=ѿWΏ8ݥ,!6<;]OgW_s|X$$,33sfu9$ވ>|znCϯ:UvO<Ic@ 3ue*aq9GO?)8}gfMkェ:`` Z+>۷Czn'/L^LMI+__U_}﹉5ΜNjbkIpT:O`,a}}8+t |3RjMO9]UUWu^~h$!@ KbjMIww` s>p]I$yysU9ssֵ&1kR.s"83$/2jK~w<遊am02)L ^"Gn싮]v'dԟ.1|UUU^y |(%ܕ%^d*%IY.s"/kmB A}g}~3$ԞI{U[7v~TWUnVݪڪUiTUi̹.L=z{LLcĖמUc UUЪ&UhUi U*UUT}%ɒoE]UUU].9w|y1ZUZ@*@47swsf$jSzrnM䝇@; hz8{;'z=rT*hT SH S@%M >ɒdgEUy17%M4JhJM !.T SH\&H}wɍ5;]y17&&&&JhJM S@%M JO%ɩ<Wr&{${cx*hT*i4T*hTܗ&I}UUWewu5ww17&&%M J@%M4Jv}*ٶww;'qa>c2I1彀@ÁxAh@CC{;Gùv56_@hjcZęˮɛ|ry͗~y{>w]p;ޯzw{˽߾f ~Qw}3o_}}عWh.LhzFk&&yߞy䩤T SH S@%M&ݹ.LqU~{}}wYSH S@%M J@%M4J}ےԜ]f3~OSf-– m0F m0f&淹T̙RVsE9s]ٻs [L-– m03uF[L)m0 [L;ڂMbnJ*{ڪbno{Ra[L(am[i- &ys}wwwwwytaKiRam[i-aKiD&1&dܛI$g{I*х-RQUEUwxMɹ7'+4sUUU~O^]k]Ҫ*3L :AЋ >⪓O$'яgdz= Ёxӄyy{00 &'{..L..u1LJ3+[$Ԛro9R]y݀9jiUTUQ^/́ ;UUU]{VkSZu*/[ =sm}*wvRnN$]T*/[9nsǾ眻uκEUETUQy 9}s9g{}2*5y׭I7&䪣]{s*n)9YUUUuwww`sֵMkYR*wv(s|z߾s*SZnMI7'+4_jwKws*p /.} /!`x||srITx<y:=O&<<Ahz4P$}w@ִ*Y̳ ^o2i1LO1g|+-1LK5ɩ7&-wڮsUQUEUT(!C˾UUUZ55kZֵMiTUQnA =s|(H/[rnNvItUUU]0*| (s9߿yy盻9UQUEUW1z&ԛu{9MkZ֦*݀99sU݀9~ccĘ1 02C)m [C-02|(y7}>yvw[C-02..u۷n]%ID%T$~{d6Mu^_jwwvIUZ7m–- [p)mp3&ܕT_xw&nۅ-V(ۅKnۓs{I5&hUUU7wwsRۅKn 6mRۅFPB;3}}wwwwy9˅-[nmRۅmR޷v 9ɚ/UUU~VyrʾW&v)m¶F- [p)m!_h0U]g.>?~IfNI7<w<&8p{=I%.O$̕&5'ߗXμqwZW!9dƤƤǘ1^Wmznzzx(oym}wwwwy9˅-[nRV(ۅٙ]amQ 7&g4UUUS{ހ;Nĥ m–- [p)mq77ԛrnJ;u]owwv9\)m\pEuܛrTzUUU^na8"+. #wu(P{eg;pE\pWi\Zp2k=yBwy*bUsZֵ`W\pG`!B}]{bUkSZֵbipE\p} =o{ '}&+UUUlSZֱ5\pE\ M owwvJbjkXֱpW\pF Y9օi`UUrc&\pW\pFafQ>qmmQ}eOϿ~__$܉,x|s9}}y8"+. #ϟ PC|}ׯ{׿9n߾hѣFIO< (s]s9}}y?#0 0 0 13L߼ɹ7&~_1x~wֿ 4hѣF|+7'z뽪Ĭg8#JѣO>|+UUUYvzNg9q3Mio>|E\)t/KФ{AʕuAA􃄨)36,Ͷmۢ A–TK1~8R2JI`2J&!dVJRaTSiUTW"TQ_̊(W?6f T͙6mzj[I&7skQqRbD'bUFDa@訦>uRzS=͊0)MNm*7+jڶ[PU"*K>U~mm~e$I!dBIVVVVK,&C*LDDD+r8vS^)u.%2?x#2Aa~b=TLSK6m _0|RS'fff2&ff2L_}8J]sNsdp `*fș u?@//?j"1z $!0O,]NUUUUUU/: Z[UUy a!!'@Qlux޳t !/}wmmDDZlwU= /b9}u_dZ5ҚSRԵF4aVVL|272qZXfffsk s . ĔEꥯKEi+Ia!."`bmU_[3@ϰ`~fe03^~9zeA,?hx;ҝt/K bq%~|/l ~[H eeH\VY% X+rV55`Jd2I3$++%L1jVVZ1eL$$LL"dYYeLk-$L&,MfMeTŕ2HHRL&I&d2H$VYMedHUoVHz[[^Ut*_C*`?T@US U)p8b.WwU+'tMv gqVG?d|\qqnqÑ"Dă"D#"nK n7?ŶYfo+zPR FI$VEQUT^,F,%XY^ҟ _|qaa'Si¥v0>~ڪ̨̔ڨ>W/_h\G)'Rْ٫YfflHk!ʯ2Y1~at|?pKa1R&ڔl[.?1d,~aи8# 00°`X_p:6m `.À0~P?O.XX\qt"m`@ $KK@ KM4 4 PڪTХ3 ULP6lZFU?K )OG%L* ,YA`YU,e ##YTb2 #)aS 1dd)eTdK)eX-ҵ%k$6mss܏ ~?QK?)/_:. ,SаpXq'¸,0X]b.p^1cbb$I#,eFfUUUI@-_WWU}$$++,[T4@cW|#ô+֒m; \AG 0#)@/~ |?ԙEвU,8!Ќ;X';tw uO#O K⣃u]tnf72gU_q5O"GRae/2?RbSwRp)(J5VߛV,YHát,,>]ÂA`uQV3d)> 2R*_ֶX?0C#*<#ҨtC BҟhBRda;68{$adh(8ؼ}>r _ׯ^yw.=O'u$Hxmz|u{$'O]>KۖۦW-~ ݿ'W޺%mmm+u;嶗:rK嶜.[i\[O=/m7v嶝yoyl>I$(ȲCsd7m9:ܞ2uԒI!5ml[l</O\ܶ7 ?Ow?W޺%mmm+G /`E0'80 WBTcfg!~C M^KQt,Xbē$ņ0l͛&,BMef͘G܄/ tSQU$+ [*%jjV}BA.O/|Ɵ躢U?k*<(zE*~b)HKy rWʗ,=U)RzN4){e,|*}UԢuR02YTp~)I O)BB* ݯIE>R)䐯ھf6lٳJ""$"$"%eYed6"+Jʵ@lٳf͈K#$+JЫaaheYV[Uc'!.$MK PJT<Ǥ-DqB |‰R NN1ٳf(ʔDE%Eme(эcB}֯rTxKvڶ[ VRJVJ*2bK \Ka'%)m[z VVYejVV)JR ,)IP{Ji"*V z%wA;"QFFҶ,)^E? *USjTuE6#0Չ$SVe&eJJmcTE[h Z6kJr$+J%;'2}')*#T)L/jtTx%J(_,lcAګDDZ,S6%|~dN*(?`)"B]%)h' 8.%6Ƣ@T~a 攪 OKRb$'q):XBWrBKJ|AI[[Y/X#,8&R*I *(YIؐ]I C 1cadJ[mzT ʜ Z*)GbaBISBSRT. Z(p"%UH&)IRkP7c oGʪCEMJUДܖjB4-Jl+kkֵ%& M 4-MdK*E[66,,XSaRX؊H0bŋ,Xbŋ ,XA X&$ŋ ?ULHW ɓ&YԬ(0 0S 0`°4C!Q?Զ]%UwpnAS*WeCV$+,Jy2R@aRO}+sqY`јf3RRRRRRRRRRRRRRRRRRW+q1f3.8f3 c18f8c1iIIIIIIIIIIIIIIIIII\\III\˔ܹIIIIIIIK.8f3c1q1f3q1 c1q1f3.8fVJJJIq1f3.8iIIII\˔q1f3.8[)))))))+rpf33RRRRW+r%%%$p̳.8f3c c1pf33RRW+r%%%%%pf33VJJJJC c1pJJJJn\.8f3c c1bc1f8\pf3 RRRRRW+r%%!pf3.RRRRRW+r%%%%%r.RRRRRRc.8f3c1q1f3B\$ 0#_R{-6lٳf"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""6ZU[OEr~R`Ah0Rh1l,$]2:e+pɋR&1cuvv].8mu*擘G])vRGB;)tK)yY8**" * " b"+b'DbC! S)Y) 9s<γظ] w* eSBbȑ^KEʣ22fQ-YKJvI8, @>[6 %>IOJl=(} W$`s 2@`EpqNsc0b<:)8vJx%w8*FK)8H2q)$FDK\T*"BISD|IJ|\'[Y eW(VJ""".V6mx4r)\Wp9˜mJeGN@QYU,F 2 RTL:JeS r%8 TBDJWďB>JX5cLbzJa)US=/!_ |/DJ ]$)H%?$UY #p. )pB(UR}X1cōd~hU<%?jS_/ۿ?|S/K]R q.L%|8e aXYb,ll&, 1iiV0?+D JU:J2'?e5PX?%O  5fv ꀦ@ϸ׃ZQi#@BxqS}_؁F Pm۝vjg:N2><<uR Pڀe^QU;t}eMh)Ssٔ`HfG!^gҥ.`5H鮙 ;:Nb: T!)@::sKab hSJ T$**):'UʪQAꪔFeʓ*&&&!Ij!M5=D4 TК= JTCF4#M 虥OLM4bzd)*iD&DPA =CCyIL.jHWBgGGtxz=G>gz0gv|>G{;>Grrx|<=OGӓ|;<;<=ggggggS$d"J%H*D pxx{<Gz=G|=gz<=ǣ|=g{=GgG8<>6׽}Jj^Wq66>c:}ǘ1?qq<Ǭsq>9Ǭqqc;ǘc8}u1>y>l|s8Ǽq19qcs1cclq18ǘc:yq>}Xc9wq>y>ls19u19Ǽ}8l}c:z8q`{>@`{,`0$9q=>}`v`|q<Ǭs1ccqq66>c}1c}X=:X1cqsxq6>}c8}^W֯_ 1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c11c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c? )Jx?,gz~?%ZҚ*6e`CH"#%$EF"I"LIRDFdF(#!4kZx?eUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEWjYeIO⒜$%:INDaRz}E.qɶ3M|Y1bɌc/|^g{Y[Օeeo^`㕘.\3ݝ2K H!4J`ʠL-B ˃*^s7I0L/'. 8p@ ))*^s7I0L/'. y$!0!8p,TD,_NpnN0@!!̖8#l[ޗ)ޯ6dya&fHbMG H31@C8PL! W%KUm Y$ R h r qf02Y8$ R h r qf3ϞoV\.۷3Lr@]0!0g7,,Wffo.n 3uL% @ CSN8e4L^@vXg8&{̺s79!0{e@1 Kħe#,G . ʧk:^kp!MݵL.P&C8d!efwد,3B͝  BQ i)JSD? B)Nf٥)N8BADЦiÇ8B4JiCM488p!i"t8pÇ "|)JB:iӇ81c1cMIsq#1c&M0c1c1cɓsSS! ɐN:tvzg홎)ᦅ=8iM4Ҕ4%]u]t%뮾n.CHB )ŸD!J$ Ӧ8p48R8C!<r—WLS'l<T*LY(aHaHLʆeS0fL*LYrX.諒\.Kŋ%bు=}CQF2I,\TTTdUdm1eng:7QEg$,dg[Ѩg陙0h ?*@~UUUGJ/ysUUUUUUUUUUUUUUUUUUUU]ix7@qU֦JI2_̿亖Lb2pe˕]./K|XX~˒?,]3W]sU<)s[33wil6g=(t)DB!Hp)!Ҕf9tglfg31 >!7 2L#,6>!>`:q>SBIpB'\BHKQm!7 2L#,6>!>`:q>SBIpB'\BHKS\1|,\\ ʺ/rJA[Rڭs$Mdwm4*K%-m;%LUuk@ah tMZ557U\ֹÊEUVf+K{u~g' |+":ӭ*[Q]iRַy~1wpϩ&rOc9>ɨ#$.***2*26kdFOђI23nf@a0 UUU6EUUu9s/h*$8Ͷ4*Y)o O5o{&ֵ0ִ~4MZ557U\ֹÊEUVf3}ְ7aa*潯ξ֙Lf`NmEuHkZ޷?fo86l3fLC&!e,Yb5,YbXŬZŬZ)bY-qkXŲ+2S*zH  Y YmfY+. ,ZŬ-VTk \F,iZk\\5ŮXŬZŖ-b bR1pajk UXZ\pXXYŖ-e,Ze"jX\-ajk Cib4űb؍1lF#L[-i#L[YKCib4űb؍1lF#L[-ib4űb؍1lF#XF-1lF#N8ㅱb؍` S^bpp䱋\8Y˅‹1qK1bJxoFlګmkkm-jK@K/ʗ॑~O޿ݟjnD"zv"g{}_vfݦ=`Ϸn{W^j/>3ܨM&O'b&woom^|g9{jME{܁eYaeY`DHRJeJe|w_>G=Jf83Lowײό>uIe5nK==} zpҞ[o#͂=0ǛϷnVME{ے>.K/Er^˂<,^,^.'x\#ŗg :rҟy"LanoIw\$>runjy31ϑaۛp( !8gY1؝ oK|-Ko*"" t0 ['6 f$uf.+v\.r\]kt;tOgn1);םN'hm6t#6^ydq6vYlNn3e;2p2@fI!& ْvHa 3y3fvmd͙-$$2I 0.-|FWްp^Կ%b*2p_ 쾗.Kp\,\\K,!ʃ]Ŕ 6m6ڍVUZbKRŔe,YKRŔe,\.*NRTe,] E/x9T~Kp\,G\%v\E. OؿBev^ .K)b]KR.H]WIjIO=W? vN>zNOgg>Ir\2DI79ͱavOo݀j"*磌ꪪ'9sUEUT9A ݻyy{TUQUEUT>vN;'UWUUUUWwwwg^-amaKi`[i`RfۘRQo7(!C{y{wϞ|TUQUEU#7PBL0ԓZUUUUWwwwxkSSZEUTUQUHoByԻ݀MMMj{+o7PBUUUUWwww`yNs'9sUT^sx(vO<<}}}*7,$s9s9tuw7QUEUZR  jjMI%~~y'gGGOgx| >IWby{SSSZ;'d䝓{x2fe6KaaUu:g$nJ[YeYeYfL{+cppryꪪ]{Su;;wuIaa$, )`7 7nۅ{!Cמ]=Ojz{ޓRj4ZF)"w})2۾)]烙J[elb K9s~C|*^y!B}L ޽{yy={ ̳&fYa,,ə)npw@>zPԝ~y'{r̙ffe3 !`K %XX,,&-$ p>~PA ={9}}ߟϽ{a XX@% aau]GS]u~AbM$9'do]K )a,YvmRۅK~9!BUUUUUe~{Su;;[n[pnۅ-[noֵԺܜvL}wwwm–- [p)mp m–gyЀý{O|/ Knۅ-[nmRۅK`gmm |U&$MkRoSwzNIRnN>nLtcpv"K{ޖp,sɹ9'dOw{RۅKnۅ-[n&'$읒ꪪ˻1JX@% %,ՖBK%,JX@%K%, K%hd_Ēͼܛ_}Uffff~=5O@%K%,Ԗ@dKRadY)aeU.RU/2L$ܲjY/]9s~;{1JX@%K%, K% d7,K%,JX@%$/2L$>~p\KR dY)aܲR,XX@33,ə?}rvNWUUUX32ĀY`@,̳&fY3,̳&`I2La;~{Xfe32ffenww -[n ; Ny{ﲪ?3333{Su;;ffe,fXL̳rd'7s%[lzw=}}pnmRۅKnۅ-[na2Ls9 vwf{۳~Y3,̳&fYKK m, i`I'NI&B0, ҵ5]~rM7'Ocrvc'g\Nř>#9| I$ ''3d2KdoS{޷5333/sԝ;'d읓{ٙj{崰[K-Xm,  ia[K}]vNW}UUUUffff` [KX@-m, i`kU;'ds崰[K-Xm, Ê[X@-|2L,U~{ [K6m ia0-m,گ2L$9ϻg-Xm,  ia[KXL o&I2M*s9{{egml` ia[KX@-mWRnLч8K7/{ޝ{Y-Xm,  iaY ffe38ܚrdy9s{¾)mp m–- [p4wx(vm~ffe;;Su;;wmp m–w!B9ss{sca32p ۅp)mp~v?"^ ?_9'$ܝ'f=c2M2L$*D%3uK᷃>SW׵5Os3=\Ͼfegֲuee,| M_}

|={ٿo&f3L a`%L aǖnL$ǽys}}׾xq'Ya32Y 0%L fK0'=uIN?%?ڹ+J"pvX?5&ԟ~op88;<;=t|=GѤUݰ ԓZsrkSSZ᩹9'dws32p5;{S@%@%,, fY7'$3UV]ݳ333~%@%,, f fK0K̯.ٙٿzYY a`%L aǙ&ܙ&gל33.͓R=MN%@%,, f fK0K<$ܙ&ss}}ޞY,, f fK0K0XL̖` ~WX䥇޾߿&ܜ>%Gtprxx'$$nOs}|z6ު4{}7@֧8nM;'w|sxMN{ޚ  a`%@%jMIdz;}l=jwMN{ij fY azjz䜓3fs̻=at aL)m0 [L-!ü{<.ٙlf{NRSSLL;A>|ߞ|_|<|{)) "*``)<9'$Y]ffff9SSLL0E0TMO$䜒y̻``(,&oo{ڪZ&\Z&W㯟>yج0~ ÕUsF[$p9W66&'.nR& z=iO8jBU%;)ħ)?(:? pm|IO)^?ZآF[+L,UX2fUm6Chfn$9% 0j` 0 1bfK05s$2@$1$&*0iUUUUUUUUUU^[s1[pؔsd&flM``` f6^z^xY2IQQdeIdDTTmdDY$K URRR[iKiy ٲ`$ @ @7o&|::7>ϑ|u={=xQQQdH$EEEVI$EIQQIdI,)TKiKiKiKiovҖh$ @ @7o&t|:nyvI B~̳,٬w,٬w,٬w4@!fag䬳5n5n5nt bGm>Fw] w] vn;ӟ~TI;[OHl|ש߻s}x}w6rOkݹi>>R9'5w~;}y~|Ϗ>yߟ|ߟ|dBBI0>fb9}~?RoJ9'[w|`Hg~>ߑ)9; | sn~~#?^}=~s;:8'a?Μ?V0ߩOs7J9'wn~yM~Y xx{f-ffwp퓳3;냷<^NЏzҍ`l(icT̓Lg;??_<_|ߟ9~.||>r\~|'əH|W\nv^wۿkG~|'={/b|l:4&muiF>>|Ϗ4&muiLy}\'}""DEQroվR8 .ؽfaYK)`2Ibť2dɔi4ƚc~v=31c3!@\Q31318;?홙v//a)_+ma31]V$%U&b7uUUUUUUUUUUyo㶻pؔsd&flM``` )w}_)M!4BeUltm~uSTS 41"dSș&D"dSș&G `&& d"d\R&G `+⸮+⸮+⸮+⸮+⸮+9:8ҘyɶmiOa:A^ЮD~i% 0Pr#a]zU*aV ba Ȍ (pENGpG%CTX*~G*G@k a|J|PzE]ݍ`$UC¯q {_ )؏v Y.frmm$#6I$@T`](=:UtءwQ B#*t.G;~%8JRS%:DWb#+)d)db,,H`X&,&Iń222#FAb LV,Vb)ddIORSĩ`{ .%>ebVɫURmN aX,!_P8,,,#,\@`bĽiNyEUG YY.pWl3m؄$ A 6EQp2|mCt?)—"e/G #N@*xJWt)|I)]YJ,FANt#zҜ{DĞ!YRyV/Y ?Z/{pKrKAйDs_?:^Ud| ?a:$p9 0\=Eꉅ\pbpRpxA8T " }r_$.ԧJ=֗/*'eR)aQ«00QS36ۡG# *0 iv#2=zEx@J_*/A%zYdk6lٲJy zJvKKȗG`0}...F,XUa 2qUUpUUULIt%R̒SdI ;iIRɿ)mmK]ѓvm3׻ݓ嶽{}$$_}~7t{wO?>S|˖ۖ|nܶܿ9wv嶝?ӟt<=OO'vo~lI!'i)d8sm-wFMmdn"s7d?9m^}I$'o??{~}ws7tL }g?fpT\ d`/׳}y>>{3=2C#0` ~_{ߍ]zьXٶlt/R)R((t]棄so^ ؿ\ .Ϻ?6ߍz->Y>=38{t:x>=3pY;;zm͸876".p:9T'DKػ0vUؿ{Ȫ%P\#$/y|77zNsNwYTrX|.K|(}aaȑ(K( vH%:U$Īat aaf`MUWy$nImן'NhuӚlt曓s9߻h=|79^/V*0f p,Wer#]2^R.T)I)%a #d.T$GX yIN q%>%:KJRJ|JO_P~ȄJI')RVf[66lfDQMEieRj(blmKax1_@pp1Už>@jc,hk*ݒd2I3$Mee2HI҂rIL-$ NzĪ 8CyPW/A!X8Dv%W$/IٰYJ*ʕd͍JS쒟I')*}J}Kҟ*?a&)Kؒԥ%WPUNGĩOiU+ EPfe-)D&eUj/INȪ\ҟpL^Q%%=JEхJbW@Kܪ//%: i%; IOEXtSƐą}*IOB)NT:քQ}D_I)HT%KOK)L±b6m԰Y vdD䗊`P#A~NJzU80/b^C/8A$%8I~ix  fc؃Ȭ\ˎ8"Ŋ"b&!af`P2(@HhhheXZ6@348IW'D*T#ʗQ!]%?%Qa2S(BvBĝ%Ҕ"R.R/C!S #Ē$=ĦŁ1`q+ڿ ffHcmږRSҳI"d eeIXYS$dʥ)JPJiNē/@q/j^$#ʔS*HWԸT4I)UN*SNPU%t6mfdB),[,KQ6V, 1DEEV-bmԛlb.*ȕ%it)4J}TOʡCK%8K13fK(VԶfhcVk5EUWf33,e ذ1-,fK,ڭ֫ hh*`TU%K#ITa!v$P)~T¥8JēܡA>RN%ܑI%/Z_!v)aEd+ QI#UR?`Iܗ~i)(zTW,!K*0+$j^O),KJOHP?T]"?@^ĔJt%?SJzS$+U/Jp0Ye,Xe, LFFJb,Rjm&YLm[M.Kpej-QEV6,hԔ# H ʲd ʱŵ %9%dv%%w ⇴QDvR)YÊKw$?%5%?IMPRS*i)INʤ)bWXJIN?$iЪPJQ-Rb"Bگʵn9lfil.$08-YZ[i={UU1QV`&'@XTVVYX,XXe,Xbŋ *1bŋ,X̒V4`k攥(l6ͳcr,aFV+ EXaaa |KƗ)Z0?UT)({UzDVEb11Jd)wqKXYJ&,~vm6 hJUeiZ+P{ c1[ש))))))))))))))' c1q1f8\pf3.8f33c1jJJJJJJJJq1qQ c1c1f3[ש)))))))+սzc1ppf8\pf3.8iII^Ԕ޽IIIIIIIIIIIIIHf8\pf3.8f33c1))))+սzpf3[ש))(c c1p%%%%%zRRRRRRR^Ԕc c1p.8iIIIIIII^Ԕ޽IIIHf8\pf3 IIII^Ԕc1c1f8\r[ש))&c1c1f8\pf3 c1q1f3.8f3c a))+[ש)))))))))+սz3c1Ԕ޽IIIII^Ԕ1pEe,#IЃ$w֕^$%T DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF}\A.%?+k)"")""+|Vo*"""&,mmld,Z2.c5Z)s"擙9q*gm&IHpD 4 M4эm7ItM4ctum[ Hh>=JhƚCn۩4njlm2"r.tr\K8sD9m !beS)Q Bܵ,ܵ,b e)yp*EȰ%aKX \fKmQ_T:%p#ڑD})Gv#_+bCőYY @VEdVEdYYI%el%+%P!%UUp 5UUCBnmۛ&!eUUvۚvv滮  HI>]I%r[ndA{K.G藢+%=%? bYJ d{+SOȪJ$I)҄P%;W)R([u,5fl,LTa$ 3:bJ2 P)QabIO!K*UT1{{Xk36 a3EGq.$ !%;%SJ1`eIʇ' ;B"]xR))w$;ILe,XXbRXG E҇Q_INJhXjVH(2Q1QdDTjLTEF*DTh}SH[oVVUi1b"4hѣF4hѣF4hѣ[N%ľC*JԧbJdMefl~IEBł|4[<>*oq@ @=^3xA cphM}V}Bzwmݴnvrz.Fm*VN/wzJRUj^RjրvZ^i*08)Jx`5m*٫]JᢀÝ 舉|qS빗zD$)#;+g*@%(!Eʁ܀j5JhIS&ئFXiF AT4uДTmTDA4 iI4h&)F =UUCIMIM ѐ@ RBSaLCTS~S(rWr*d6ڷDDDDDDI"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""ٳfTIb3d< SOuSOM8Iv84Ml*@ ++,m3TMDHt4tYJTN/^XڻQZ*,aqZͶaR"8UE?_T&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&IfI&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&Id&I̠w F‘l) F‘l) F‘l) F‘l) F‘l) F‘l) F‘l) F‘l) F‘l) F‘l) F¹TL ffffBp̖ " L'yKIm)d"qPEJ5K]QQ&?w?LLLLLmվ엖o[)jjk`5y !/%R<{=σx>ggg;>g{=AAC=@>{<Cãy=Ng{>|Og= (PCC>'y<'x !CCC4vpv{:::=O1x;LՁ١dw4;Q>yyt>q9[Z$qBenvgRKĽ^%ˏnu5wIggTyP}>~~O1c1c1c1c1c0c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cŵύDv񾊋$$$'*N}j $F~sQܠj@(G5sQ@(P @(TnQrI^ꪪ|]zaiOODDO /`n|Ey_„FrpϗUUUUUUUUUEUUUUUUUUU[ 2a(UISW *a]u>OꨛU߹/P$z*`J.p.B#[[[[[[[Ycƌc1c1c1Upŭ|k_|^9/mmmmmmmmmmm}kּk^Wl٪Zm*I3I,RHYE$J"L Q%1#w[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmo-mmmmmmmmmmm|Y89﷾sgb"Ē)/*33***ʂ **M}<*#N}yv귿>`aUUU~|pln``r|BI $$BI $$BI $$BI $$BI $$BI $$BI $$BI $$BI $$BI $$뮺$P>f}0CHYEKDYKHR-e,RdFFF&&,RdF[ܒ&I<@E!YmOٟkד'Y>ǧo{ƧߜxaXx=== \1z3a9>]+zf} ;S:s0ç‚ADD!B!@! !)MpDӄi8pN )N' (R)JSÇH"CD)JRDtHCDJN8$ JR4M)D)JRN   4ӥ p!Ӆ8RpNoO‡Ӥj<#uF 8pӎPf-$ʹ45ʹ4*d2m&XZmκtٔWZqm]sPbL^W<ʜ/F]8YUqey# G~lDa`Uͻ\iKŮW͞۝n.6+]gV:*mmU}mm^z[mcccmXXXY8@pϦp9 /K,eKY{^djZfeiEՌƮ8d,ǀfr "h&"FG#ۇ.z}3=x7.Fl#GʝUW7}Z.)ʙW9^J#毞K7XGBGG!!;{n76{N$t;܈9NH!ӦB:wsKl{:wsKl{Ep^Ky/^Ht^V^Wx\^Qˀѕ[w 6trGNiy;͔rd8pc=3fydlWd87!NiKywu-DAj^iA|I$I!]_輋/2pCA:s4CA qF@~J2j+^W y\Y^r 5y/ҔJxxiJa/=*Y5ͳtBj2!l4fͳt^]e]_U].^t^z/}2]/#y^Ky.ׅ1v_yt/W!5!!5rh&4ǚc-A XQŃXjՖ$SRŔ-\YKRcj)XcMQZht| ]S,vG:XGK ^Yt_"ȎUO(2_` t {\*|/e>v\.=/Kt^e_T& Qbqp/ ?uWwwwwwwwsWwPf> |OCy>4!+K.Ka s&|@x9[nf(PF(5t]QwwwwV> 4m=WD(URT{=6L^R뭂4Iy_330[m)U\nVۣUg>lAϝ` :p7i$y444&qߞfxftzPJ:SU5JTEqϛh\מq*o[^RUUUJMUU*Ȏ줥*Jⷎ4廷d1jд}| lz% B]{=]~GHW]:?Sm6וJIǎ#p#nn$#!JT~n0<>w 7`8!$&6L$nBlL7m7SͶE:;۷}.d]浪툶E-w}EaȶEۮȶI2s9iÙǃs9kFI,/}~,cGاZ>u>߯}g)sݶ?ʉQ*&q^b[|g7x/ n>Sb//>|+]_#M|3ISI<a%PD*Jң(33?2}yF mUUޝuQ_yU?\8p_;yҚBVBP$̼90Ɂ$$g?;5 ??>^6~|;x+Uv]]VBwv-+}pC>D~]IRTĿ(Qm:΍h-݊ 3>vRT%iKٙgj09;ٷMڢدCiVW_ɫmր[oΕWګ_̫?9JRi)K䄚\vz;=gv{{2 & mE(PQYJbBث1wwt>Fz~<ߧW'oo7)T]45]n@ 8 n0{MVUFd$ 6!͒HBDJ~^*Jjﻸ}ϐټffBMQf6l6Hb``f(?30xa>}Uzs<|<:7٢v tmد;`Î޺| 0ݼ}<UһV]6C !$%%ޔ*H9ugߟ3ݝ}ڄj%T(PZM03Ԋ`d ʱBQbV)RU þ*mw˘͚`d깁$02*!d 4JpU}pφ'6n`d6@ 9X`d7tKm-Mڷ,8'(z5= +$a\0dS0"L]IRT)gp "E0M` 9n)L/7R(!|A=#&A_dCڪ5_sZ.KirB^z1|gwgUUQͱQ<o< S=)TwzW/{#"B.Tbg\lQW0ÙߓL-^\PN{T)fhhnDʏ{ךww^ k}kL0h=0I!N*L(RXLh+ﻡmUNm񙙟-pLBLa 6[N[JaV8aF`Ѵ -JBݭ_}%In[~ P)I^"]6Rp18RDRT%]<~333TmmSjh;|A:*--m`nkRW2is$?B:8gx.:a˙IRT癙^66ws3&fsd73s2x nf[feFN)=]uf{ >}~wl>P\D6ۙVfVf[ff[+HI7%INE2fggw7y"&""ҋWnfnٙfhfnf'Ԍ{0iLb_Nuwwwwwwwwwjn5_'z=$Ҕ,I-HIǠ{K=3^tWM׽T9TCQʹReD$+Ysݰ{w{8mivq^mU{oqtVgRϯ2ɣ:T߷f{{w<e7f{wwo=ٙ~$VTBF}_mbf!KȈWVfdCG3񰹙c32Hqt%ILLB33{*|dʞJ/)dDe^RȈəes1ȘGG3]s#3."4JXoQ}16g̟\tts130v.f1s1Lq~tΨXUmǡ\™ \py.|ϟ;wo6movT)S0aLuPaUT)*TBn31k7^V>q|Îp\í\n8.jEa!aI$I$swJVRy=Ocy=vXĚM"=s0EI$<8C'8BNӴώ|C>"P'$nRm۶9N{f6|6n@-6ra(W0)Q $O̶y:2p\p\pxRgT,333wwPa. . 7AyBӻ1= " wpܬ*¬*½3;{ED&>}y~LPڅUPVل0L$ $IhO}ϽGwg<P}p]$M a$I&I绡31xcmzf\+$ $L!$I0 $l=ꤥ*Joʅm+a$I3&g &LÓs s`s hwe`qMhU>m3SBQ0p &a0x`s`s` /CRS|G+wl6mg{腐"s`s`s`<0M%Iz)POݧw|f~ap/E"Ks Ⴤ0JE:}'<@} h 6Mp1V4\i 0cRNjmMqkB,̙*Y30Yp!S0' 02s!f '2Y$ AL$ AL ̖bEP?  >wwwwwW@9y1z=σc{&i +K4q@o8vQb&1bŋFfff+}`Tyrhsx/v癞>.wޫpp`mqffc۹JFC(PR{هm(08D\+8$1ჄE"E"Ha|?>mu+xY fD,y".`".`".`".a߳O~? 0Ϳm/BߢBY +8N"`s`>Ѽ0Bj{v(^;0pinaps8Es8Es8EsJV?)ھ˝s8Es8F<0pW0pW0pI3*J؅:no3<.`f &a0nfYY2a9a(_ ">_m BT04J*LS2-Eo}Z-EhZomEhZ-hɲl&ɲdϷwwj~lQ2LRZ-E׷hZ-EhhZ-Eh-EhZ-{-EhZ-{{ﶋEhZ-^ﶋEhZ-DD\]&ɲl&ɲEo}hZ-0S00 Nwz=0S0S0S0VEo}Z-EhZomEhZ-hZ-Ek={hZ- l&ɲtIa\ +0>o*p`wwwS.*UQ *d+00*!?xʸX%_/Ͽ?@{1z=x=JRi !% y&FÎw*M @ _vW.]RT\Uʕ3BPFwwwwwfSmͰm`6~lmULv\*JVh{}כm7g2!RT +0w0ҳ ¬0|pЁ=3~{mn n!RUUUD*" ¬+0< ج.V}OPVaUEfgiaYYn|@uu`wj!UTBULᨹمafVaGvRR%qYqK%(3}o^<¬+0iYYVaVay\@Z\!"*UT*3B7:9.랺<<<{*Is/CB>3{n6mػWuUJMUU*UIRT{4myHqTTE\fuIRT&ax3[^]UV&VUZiW9CyU9ݜs{wy_N3lyf{CCϟ}Ϸ)ԒG0ɡq=S~Ͷ`wURwtM*n:`B xffg%7JUT&*38r<8<κ㈪*m+J S8 w~yFEUVV]{IJTgd&#&w:#MڷM١3IJTK߯ffݶm6تfCUnd7I\VS] W:MyoGQSCUs!U<66MzU+ϟ6 ܸsYtolfUkg+ȄEl̈́ .gL44 ^/Mz33>w/sSʵW[linqE}?P0+Uv*0숯1KG뗰^*J4*'\R?j2$u-!YKirYB~YZ] RĨ,J. /̕4K! 2#"b?iY:TN!WD4G4*rR&RVdb,X-b֋-FŋUرb֋,XhŨ-bŊEZSIU| A#ҵj;1c1c1c1c1c5iUWBI,%=mmmdDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE0($d YK#(F"+(D+*R _,ڵHyեY@Q)wc 00 6%0DX 6A c 0 6AUUUUUUUUUUUUUUU\9sb< T:(Կ^C[_$l@mP)O)Sb#}(R_ȾRIcH_JtTU<R5*ԪRk~/R/žZҗ#LbX6X̌2X6X̌2Z3 Gvy+y}eG{my~Ϗoϲd-s73wʫUW#ਥ~;il,TRiE}ܚnETY *!8# T~*?UMMsO7>?~cL0h~;il,TRiE}ܚn!?QUBqEQUQd'dUETUGꣳ9 9 sa}U_UU_Ī st7wMU^;UWjs|/ $$!GۻR`, ˯`,*Ja8Nho~O_>Y -%R/x(JKܗ?We_IbK.w'0Æ>DW T0}$醚Zژdь-͵ɲ\Iɲ\"~? -JjfjΛ黿g9 U`Ut7wMAwwwwP~rI$mmy}[[[i?w}__*JLLQmQkZ-JRگ)^R @!j80t -bۆd3hՍLvP?eta T'atx0pv~F1bZVTbd%iicMTbʼnZh޶E8?A"Ȃ2",;2 2##+#+>\Ͷc".]0e{?>RGd` A/ ';*N 0ac0V-Eؚ&# dv#08,i1, $>cv, a$\_a f8\˃a%6J)-s8rO_/>!V> >N/ %LhXV K>H<م V0¬_)U@Tabϼ?WU~U} ff}6ҩ?AWJSQQ&0}E\TA½K>eD/iK<$a p0pXW>av0`ŁC xœ \%mmFa_F1'0tW@ 32@ $@ ,3003446mnRND}l,d8ÅYbL-JpS Q0q'h?!w d<(C,&I2KRK%22 *2bYFXX+ X+ d*0$24FFM*YEh + ^R*UjlK',apb ~+иapp0a|t;x>h?AE:'C?ic1 ~&?K.旑үy?#ism U\\,0Xƨ3f=Β|$Iv'ZUj? dQCq#WA~B?9>_}7yyyyg<<<<3yyyy瘫䪟=WJ#:H~6ttB&v!z*԰yGd7Gx A^|^w8r',9..%:1.u;<;85: Dt:):gFTv<1;'WÍviNFTMF,e_X<ǡaȘ# #Ō~R%Aп'E.FGh{,/㣄/ 0b00a1,,00b]*KUcE'ԧ8# 1t/pX;>؝>$X|  uZܟUVO1/y)UÊG | U"ʾz"WNcyz}>P _hY|kŶ5|sm<;|/LN=$i?*iU R8(抿# *^*^Yơ/,XXyE1?ƨ'ڔi=#Ƚ*J=rR'famV3KK3K R"~ p1c6ٵIb 8R"Gn\W|}kB@̇R!OM4"E"`6zWWIO)+QGf6mmmiM- hm E#ҫxVZUl-l-jV^OJzTRwj"<$#SJUT)XQHӶm-mm_YZeŋ,YbX0 *1Vj($u)u—]'-SȹKS!  `}Edxe*ҕ:HĚ uM8T%T%?OxI@Ojĸə%rmNjX[M,əS3n1q eQEhYy;`< ]d%aQs!B֙]:3f..-nX 4Ab"6e 4`30\iުtf&.f:Ӛu49wˢ1x/% {/J,J@RP5IS#Q)TKM>tU2S҇| H\0?EUA U+j Ut7wMv***;|ŋ6ly[[^d2I3$MeeYMee)Xal6͌+KػcacʍE>rR'Op$RGhai88R$GiSUr*O#•Jh}?]ߋ , P6NC%$U #_B!9U*ߒU*'Fĥo#8X$++,"̬X1X00IxH;*}pc&͛M$I* mmAv;<]S%M|x)UES*_WD}THҡ傗kUieqU>dK*Ğz*㴐@ eH ehՕkkmT?$IRW"~|~ԠDO[]+g\8IB*vIwRDdVT1de*Z!ؤQeSDOIOPDu%I_JW)] vpb࿌?8U]/QW~u>Ң|Q=ɶMj}hb.^Ҟ_U./lK/uA>!EI"WCEG DzO|*!1>p)*Q?X%ČUՋ*6m%U hniefY,kdK0&2ԢNMh\4P|Rr)'a)_'+)CؿJukkm.~c8p\&;;?Yc_% %a_d}QD)ᡔ<>ԫi5P*TOwГ*=R^$D a|RGОZKO\ҫMMM 4+MSv(+R|:%?/ٶѷIcH)wR^9U|"K0QT1Jkm}k~YY(b"1o24qr|Xٳf21/j~j'yuBF RmY)p)NO<)pBEO*NȇP 4+$,h+4bɴm  L)GO舼Z/:~IJIT4BUҩIȄa UJ(]=!KXj)/K/9euDFB.5B._⨇=Kޅ.rI#R^UIrQyR"UܥxR腔mHQYE1̨جXlVl.vb H5t9J\V#JQpq\. AtJF.'8\.Q,YK ]$䩑2,ȬYQeQV Tȸ`ReJQ$I$E)[e)_GB ' .J- *\eN?Pw d%J8@BSx(D"i#T|*`E@PG'i_*NWKzzR )U|~?*\R-f1,˅8c QBZŋe#M14ѩ,XbՖV-R$ʌX :r?ɲl(ts] b2d,XabXa®x<կZm_k@ yU^x$y;.ec10:ʫ,\."pk5f08tt/N(UY0%BZS0T x%D2NR:ꓘ$-TZ)` @u I}%K CROP+.н$D&OTꈩRΒ$J~B$]_5 Pх1d&,,XPbU”. ꊥNR* x />*$I/ 3ȥI)~#&:%¯'GI?$E|$ʲJAUyB)QQ҃ 07D||Һ{l"" 7{zvIq)J8YIwvmr9 ^m{\ oMRS#ow޹+%(yF(( -s@i= Q47F"4eH@@ $CtwZd7;vi @ KS2ڽ{ݭPfçmw 8yZ $41E@(@4 4bB6Hp P*m ~=JMh@h4ѐP #MhMM) FJ~MMO)6@ =UF*y'SIɍ#@4A#M4M5JR__ٳfͱ""""""""""""""""""""""""Gq.?ˋDDDDDDVU~dH~}5k]kZ[37=ݪh,-&_p|+=Y$aʿi@* DLqhsӸUerŋr5jer$X\lX.+j ]Ya]ڇ+xVAv[5ێ:)JR$mKf3`b =ЁO_pXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpXGpX9䨙,dIsbڦaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXDAaXS+ammm @.[am @.[am @.[a05qXQ#q5Y53RTGI@,+ eu83LO*6ڥbEJ.KeYf͛2"""J[n5ZwUME4kcMVVilM(YZ +c@"WEH( dm#6l̀0͍I)'YS)gc??ߵ_ ;v `*;vnƱrj9{MuG7{s}N]ԟ7%+Y+^hzUmɼUm1,kޣyk7/Ϳ%e*}2rKءH0`1 *$I&k&i;F&'G 5 M)M0qBU3Is%w5dqW}ZvƯ%^J:<+w^KqwZTd(1q!GDAl\L\tT8qbtT(q .6&66dltL(PDqlQQq0b!EGEÅ Dc(ȸ0cDFE\(ȸ6.<E **lL\tddLL8Ȩ.&62(踸b2S’4[ VʶvNLXbĆұYgzmm]pkv]kv]C!d2 C!d2 C!d2 C!d2 C]kv]kv].?w^z]kvC!d2 C!d2 ]kv]kv C!d2 C!d2 C!d2 C!d2 v]kv]k2 C!d2 C!/i~B^Xf1afafa{N!ͳ"#}0yܵ&> |ofaɩަh]T J@qܔDUj@rn@$H[`ܩt L:s8q*za'0`p[gtR.toiYnJiwֻE`M;;tR<8@5=R\+'XGH RPŰ:0qH+: %ᔀkKHŰu`M-˸3H8_6U*@nĐS< jtL"D¼LY YȄbB@? !,H$=)j:Rj5 H @MPR%@LH\ޠgR@r 1$ A$筀_M4^Āz( )Մ4*ѪøPмwHKCKC0OU 0U Lِ7*@4- 2m *NT̀qUVH q@Uf6ء@.e /]" MJ,HJVk`{4' f t;9 xhI8'$@_S(a$ P5j@Nbd 2@9H۔Wz[)q ;uv@elR`#P_6Nlm(S;k&bG_PS5^!CN'S^&Ӊnh6CSRq (vmnh:q8w7486jh8q>H|Mq8x F`Q(xoX XsfP3<}@Hf cL@-;H98n>~1$HErc1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cF1c1c1c1c1c1c1ߟo;ոYֈB \e! Rd$e&BA-R \e&BA-R \e! R \e! R \e! R \e! U3߱޿s3ZīaaC0&G@?/ y~=߰={$JK7;uwY$ۆ3O=H$I$7 s\8瞥׽T) e1 EE& jDÜzV]nfznK;ڶ]ٝ{rjMܱs۷< 2dhdvNp0VM^k$zE$MI$$}#2$wDI܈>׾@x{~m׾@7!uI&.I$X$N[DII$' U.KR..tC$pA !0Aqt`x%(SwmCa|I$I6 pc8(Ca@" 4Pa1b:#9*A8 P.@,*Qќ29'[$yQxOMNe'yOv&0yI'0ݘIoܙ&2KwM{jh^FӯK c۸nԒF58nXTAҲIUmӖeܸ`C ." FSKw\ZXXF׉7KqmѲiȮYRljʖI$AdDHL, BA1#2ɚD)d"" 28ё4)$J"9a8L78 e 9F-TX LnDyEEIHePg54']81ڻ1ɖ;ևbH  oP$3ecgvAH1c^k1)y9Y{1u͞G7CІ[I>p%B~L뮳3{wwN#IJ*ĖɒETjڣAc1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c11c1c1c1c1c1c}O2SwwDGggf_r'$٬Ô J^hY]&eUI'IQɪWaI[׺ v'p:JgUn7ɛUq`SWM kzi'OO8F&Ejmзzkaז] vs3uu:iwuu7RTU*3s8k 4XˡnrwBݝ&)U O}= `AMWNgHO;立;qꚮSUӪjuMWN5]:}k/Rvz6-ܪ?} /~/n0 k޷.Ӧ4S:QFGOK;Sl4I3O?)t'Medg/g hGg&lhg-J3~J8ke2dǍsτO,IG 7E:hK8pM-*ǎγ>9Ο&pӧO6l⏅lpe!neВB4L TwNI`.rˆr}߃]zzozy>?o;߿ON/ES?/Ʒw}OZ5\{;^U_BmUfL!aBKݪmUݵO-riSݷݵEUUUUmU=[UUU~fiHBRRߦ)m)~uF)m)m)m)m)m)m)m)m)m)[%)m)m)m)lRRJ[J[J[J[JBҖҖҖҖJ[$RҖJ[J[JBҖҖҖJ[J[%)m)޵$ $M T(U{`>{IݾƧ~{DO wOP?C~=~g~GG}o=w?__=z&XkQwQٟ2@\zb?4`ww$q>$!rM&}zO)֞fIs$$$>|)!SŧŸU=)!='KI OJzRBBCҞէ{RBBBBCJzO))I zᄆQzZ¥n߼yx׮[~ab,b~qO;~=~|'o}}߯<ǿ~ϟO]w꫼].=w}~<|c׬+1=}}}~߭}o]|}>OOw$I==3׿n8]ڞw~zߋoOW4Sdle6=Yb{TYqy_X'۟9$=ؠh[? ̅oƁ6"eR5$t'YYQ{j^v ol8$J$9/qvHl&" DSkccccccccccccccn8xW9cv4j]7j65{Xw'rL7{ӞBw߽oܔ$"L2&$2#\: ]h0)}ї Rʢ=]0)Qut<+ *<=XGѶ{xy#F[߿FN|׎/g_+]N`̷ߴ込f#8W208 |\ Yy_s0׸; jvII$*I$ @$ $ d$$$$$$+I I TIi$ $ $ d$$$$$$$$$*IIIՒ@@@@@@$ $ @@@$ d$$-d$$$$$$$$$-@@@$ $ @@@@ƚ\*ńKJ`d%^%]\ZXEbheWKjbl.@|vg -?4~_ S,Yl1Lbe2ae-)[ S,Yl1Lbe2ae? "lߝ[|J:ߌ*~6ߟ~[o{z`h*8珠 .O]wuwzA 0@j !0~>׮ﳎ=: 3|K[~z]xh7g#$bbUUUUVO =p_ :p,TUETUETYi-%ZKH6,jb@Au2U!HLlmr2\GԨ]jVW^j+WJٶ1]ȟ|qLsb}Վ>>uٮuD\lzD羯G"?4m4Æ :m]ݝVtLS6O΃dMu3: {>Gc_D#"X4'ٟ?/֚)1d_^5-֒hGK;G35[y~}_?;moRJ e@}n;6o(F aÃddV9$6!O.+yqwhc `@F F*rNI86N' Iȕ8&ɂra4*4dSI&)<)<;E⎋^%ڽˋwU^t. X^4O8Ci6'pLI{ػ%/^˕>^ŕ+V-YjZjX,V, VXZ12ŕK+貱jVY,YXebŕ+V,\. -],V.ŕVZZeū-Yj+ZOjUjWe+SQMDX ,Nb2I%Җ+jRҧV,;exDG'hMA9%M%\*X ơG,K/ix p^Dp x'OBt%O ;NŒt]uҹ.qK\Y\,\WILR%Aa\;1h'PW_guvzhh\]uY|ɝ];jPUBI00YL-2զ֞[\tӞ>r2Pj@c 陼O^ıo=:Ǔ[م[i3clm*vclmljVy6clm6޹랛clm6cm=̻\/s2R,`݈X2<dM@ WHZQDXA  @:<$^y.n.Ց&5\g_;F.6δ9;vmqhշɫ|Z&yb\T7{tlƼ9roQ"&E#'2g" : ~yUpysu{廾癟-3Zָgx:sRAl5:M$I%r'tY @B'_W5moλ5Ì c^۪1F+0TqF83W2O:ΦYxd.51$ofk636:čw+7Mך< \L$I ֵuĉIZsk \\ $3$9/&IÖuRQk];32κf`/_HH|DnOB矝U~_}YnWoug^jbg(:wt"By)M#5!n+LtxfrJU(8FT4,2 *I h˛yIk0k:֠pa=1)~T_O4jt׻Ozڧq랶_g9.akI#S>a8 k[ma> G!Ϻz\aǝ3Fbɱ3}f +{v_G5h+U}KE>@O\W_c;,m-3<$6| zxR{UWDL7SΦ~'!?x2Gfm}B?U `V@ m}(A:bN߿>9)9APG3&77M uo; *qmmmTzO^wp5W*^K/%y.ZN'=ik$NDMT$eWn˷'2`dgKGONm $w~kdfeњ0)W{aݪ @  J_R;*eI"aʰ%Y˗ιɰ3sEb7zXִMg^18Wə3η`&MXQ"kkmmδ+q&e,sYm9/Uʮz2feiK]c;yϿ=;>fdӽ#x$/RB:D Q ZERlAm a _L)-%7O"zٮSJtTה*M ?(5)!߱YSεa Is;|q@k?oe>wm}TVxDW z5εkZ։""axN,޵Wnx} |J^zLNϙԈ x ht٫;wϮ0 k^0sUBNumym3wǼ='&'gyum"!$X6񥵛woa/{8{2ڽIa%p^۴L3kA`}ޏ> #OU j"/>vh蜪q=ف%뷝[+ HEi2%C-4$AnktL$1@ϚyB"8 v3^oG{^KY#mVTT vF!Zc&&& 0`?U݉_W>׽{\s^3\'t*]IL^P_K%θ0ي.&kfaxnvbgǜ̫JO Jk_hX/YbkWs1J[004A& _L3D@S箪'D,MT}TꩧYv mZq)J4@@<ÿaLW*YVbDs6D?giP8α8 UN5s^0`uUUs9s9mwKv{hD  TDH6\8ȸ1PaBOjUUU@h2y}+StBf9S&]c:CePUiD15sL$Dlk}sj1``w˗9x@~/8 6 J [.! `f ̌n@b 1-qwkwcN0򯇴dTژ$7]SzTѮh~xPc{ D j @yp@yfm0Xmbͻd I[OeRJJlw6g,|>fߘ `C@bRUDVwvQ\kZg;yso gb2| 0XJ*86u^,X }:뮿L151y^ yyy{ÄHH:8q,1#THCWn:av$sfU@f̐$pWja@NLaGld\BCŌoy5̇\ Osy!V4 lC;㳦mVȜ$ %*H%&+*XI(!;B 7ۖ5Ƶ@gQUɽawmk@]73/n9{UJ;w`!ŒvNcD[Hq3 WuSs|*y2wm{Mwv-rmS`̝7W̺x^wk#`u^7#?iuuϕ=MgUM_$}o/Vff ɵx<.3iK,Yݫn^@{,@X˔"a?p ;u:*[0ʀ XbpP$k@3 &욡/}/v]񵵕ވp4J0ejX:Z P奚3,\7u{HSa /U dPrPUeL^.bA0 P %z.TM 9fg!g<  aL\|3;3/;yRs$5zdhfʤnÊFzr3Yd0q4(aTHL G*M;+sߨdf$w^Wǰ8qƖIj#Cj79oyY&༒LB ր0E*I5wfI!f]q[es-#<-N4ywsIg̷lbWwxyE{dwxJyw|^V X wAΒs0Ƞ`fLPS" NwL@,$e} 4ݵݡ|oIv-{rw0)dL |#,EBf &Ž\#/ Ÿ f7VFzHRUT,bdʖ-RLbj!>רɤ(|$I  I6}HQjIU> 0]^_w^l1b"c!Cֺ}:u9na333 '00B};;giͩ 8ͥp1[BZ[mb&F`[%u+Z74j;d/$6ޜ Sz\ݫ0Q)  [NIIU/>̜jcXwXx4wiHoE-ܻՁ4 ݢ]vSJb y@A&O}Jj_wfo\k̚rpIU@mZXr@2e /7UX7Wh;`k[|g<ϔs'z},qt>~qIz{gw\g{[zǸFs_ӻ瞾K`3[.q՜DEFC8Һ7 3@Dt&IH<#DEÄ 8ݢ;R3cKޫ6kۻ>9|3+d EHwv/Ĉӂ"1D@Ǝ7rp]9]9)v'ַtrc8.b$@L>" Xg=c1IƫJR @&HZU=oIbc|8Z9mmր_/[f+SUM,pU}W=z^pOnwwk=uf\fhj;zR2UI9f%Y۫s{TM"$=˺J{3s3;0fegnuИ7@SR~}y|^}]kՏu`*LI&u/]U՛OBT7kJ $ڥv ݈&1vwoY`|Y&mX3`{R0|ȫI{7kז.?NzN31Mn 0`S~S^{8NL$k fMSYU>ǵSv]8 L'v͊UUWbBm<e !J I AEߢgy8N$R* foz/2ı!S6[ūC[DÜo=f]Y=O|g{  b^W<V=7f&nXRDZw2lSu3XJ*J{{1 RS끢 0b]2Np5h`*3Fo$%uY4ѻ}S…D>n턒O>y EҬ1"R'27A UyI{_L}K{ߎ6>g=E mU-[,on߮ݻv kuA|''k|W!z"v]%wa׷MI Jp`>J8g:Uҿ7wtv t<+BK0E Iݰj+)`ҪD•D`3B%mI4Tx ;Z7Bo!0$ р6$A&ݶɁ 0@ (4$lts=ݬyުI UUT*k;*YY*MR,A& 8;SBkKf65]߭U۝]}ө$`@,pSWN7Jjzݶmt361v y_Y : ,ŵyYwn.7w V L㍄ER[c<5kfCzpLЋ8n65z{Vf"> Bmt#*b 0@v-W.]]͊}k%>]添x+8͈Ly7xUwZ`eR5naD&h0%'لn Cϫݽ=3?2﮺1>u .fffffffnvlMjǜGEÉ2"OԆ;lxx,v ʬTS8GHז=qz]5=5æ rOH1 q@BɈmֵ u~n^i3+{ `p1t!-j+ʼn胻.`(e !x<319|[@Y97x!;"^ڪ%5wm: jV.T6ٙ֫|yjwvSMIU]7{gʈ H\\ܐkq$x o{FlR@@J {p8oPŽuq~q$L6I{BI*@εzՎR,a#'VM7&H>m~OmZ}14 ̉ *26:PE%mR&$RǤ5 Rr vnnvhZ~I$ZG 6!H@^TCE-F]IUBz IdS2$P;>:lr]uՖ UU $ vwj" !n;AH Zm $ ف 0@$@B>\wW̹gomϣ>~8@]-$ T$B*!jc0q:n@o  $Df]$?"n^sOoqn^rk;ihn] 1Ibj |wwv UUDi^9^AѡeŔB 0@2,TРĩM۹9J5B>b!;B ^`H3 !R YfH@EB@̼18^\#Xlj」Q*!Hk#=gξ3s7c8=zU0`wwws33337wwwwwwwwwwww v:yq"H"##aGFCg+S375[sl*¹znmc{D u|Su{JZ_#WNwo]"ګu>0h yŎ;o;t*9O]m.8&A-kU|1w]XoV-o5bw8gUnw[lMuﻤ Mw dUyu&vd7*t9rcƮjy,o3<*3:rpnH b 0b#ffhd ɢ&l&wevv-&0A"ԵjիWLJqn5vā)ݰ,ـ*31 V!biUQAiҁ>JPc&|u{t ׿{VyGô='  UUol@ `v[l@B Z!`Kកgύ5tQ#pps.m;Vmë߅c09Bo3 !%BI "@3T 6.q N7l@W;2Ծm<#( 1$C3~tۮ2.W]w'Kn,tt} JI@t d@I!^]݈. w{Hd0\&91 )tpP-Aϛ畷۝X6.Y 7'x n2 `"Q(QIYf$JIB c,wwL zE\.USK$a7͛.YSbV_ LYD|f\.s㫆Bz>d<lDx߶w]ەu` }I 7ww}1&8o3uD_2$♨ 39-wt=0H$%*^@|\W.ꪁQd .8mKxI v M*@oJ2 ݛPH$Fl$ۥ L]k0HbnQj/*y|#4" 2WWbmZ͜z\s ؘUUU˜LscDۀb=@(L! GkZb[$SW~b`#3Fk<'嬻noTu *뫱Bl@hBJa $/>qb3Ɯq8Ga,שxl#BO|cBGU#׵;nc8 C0ۘf,,\"e1\RԶiKWqN$&dY& LDE1܆ %\LD&.Lň$&$i \HEʒqƙn7qs80Zĩ&k7 "< "ѦSTg3Jd'~=]~.óžZl%) .*u,K*4ȣWD-QN%.\Kr6pZg㮟ݹJ -J,'M5h[I;kNwT25ZHֳmj[nD ]մj EG8Fm(g1/:L=~w$[!"D)?r*iYRʖi f2hURVJŋ%d%dY-+%bŒV,dXV,%dXVJY+%d,dY+%dXVJY+%dVJŒVJŋ,XbY+eYjc IY+Jŋ%d,Y+%d(Y1l6M5ʊʛR@+)޶~<_8Uۭ1c1c1c1c1c1c1c1T1c1c1c1c1c1c1c1c1c1c1c1c1c1k7]Τc1f4WV%j+Awd8jVÖ9\G1urmNZM1+fr¥é 9lNU&Z28b6Ҥʈp:fS %C*_,Y5[ 5Vbb"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" LI%[L(33]lE[Y%6Jl5FQj5FQj5FQj5FQj5FQj5FQj5FQFQh6h(jÖ8r18ظmfɲ\VцaRaZ2aUС[f"9 ؋1YڈAmYDŭFѪkm` Ul%m06$$P(JJ)ܡ! (bʼn$bIP҆edɑ2'h$!Ҡu\W%Pڠɍee`̚m6[E֭aՕZ[Z'p#88R㍶ۃqZe-g8峘9mlfSk8xs \sII]ETPAǡ 0a ~ЮAU b KE^{BTq @@}{Gګ%a K, n&Ѓ A?/ߧm$Ԁ"z~ٖv۳(}'J_"W~_,?ϟ>We1P_QCQ'dOڃgS|܇ϼ>bo/b {_%|sRsw7CU_HHʶHʪGO^wy<<<~~߿Q~w>߿~<<|ϟ>|߿{߿~yo<<<<<zyy矏_>|>|ϟ=uŗ^ܒ#ϿB9{FɪI:TglѵmSh6TV EѶlZ2E4XF-jHs%mjF(+uutՅAi-g[unMX[6V-QEn=q}u͢TMٚ%&s95 ę-"jGo#1uR_<ͫk0zzt\Ghd55,)esn]*[nu]a$6r=͌ CWtO.s| Gm6+i^Ji12F%ɓ,,b\L_{CZyT?ţ?CmM|QX̓N,XzJDZyL|K;腮ὺ!kcon[zI$I5N7Y[Y[Y[]ʪs(ȣ"3PNuɞ#. ޢzg=8OvVLiwpgf>׾Т{gK>4=N&7)do+;]ϧEFF@=~_ΪZϩ$I$?ɛ[[[[[[x?}h_Z>ToL$P?}s=pԃ=`h#'=o"L{=kMMi7Q5&D֛Q2FBSHJi M#!)pֱ\}^zXWOcaL''rڔRRK崹m&Fܶ10(`[Kۖ崹mm.[np|%+z >s/}~Y 5(2ZY&Z&f[Ϊk@y z2KEU\ y; $JDm}+?r32/1_(p_mKTKU8U\UU`B:5_;S&F,L>$?(tĩ>W 2/)W_d=>_ zj>!=CitIp^X&KN]w~!m Km0dKj+bD| KrQwcO}:| t>t01Q G 8GzgGWqNGÇEy/-K%m(=xvS¥GevJwu3 ++-oʯ"q)w%wSܯYS{?mfZF2k*W%2L&T`Ld4Id"rL, Ԧi41eF2J *!_)/q/(|'>RE  `42ahQ&0 `00SCI~#}cFqywޔ~JtKdK2_2 Rl{,~9p | {!AUqQP%ct{z'|>[DY9RGgés~'y9|% a EʳE+JV^>_xx}C%%8K?zQk>lHh\h\rfg LwYUmJ8*i$=Fg2Ih֢59LF̒gZ5d1mm ^RIz;LDLF2}81$mq$FFNe$hrJhh~Ɉ3KjtQmLVDdcme̦GɭS&&_%Λfmcyq?j9Kտ܋U/9$Oa_XcApO%;CCF#nٳiʪڢ812Sv8.ƪU|IsRWw.G(qDb~#'a| ِ6v!#"g a!}g7250;tyTseYǷXuvVϿ%|YVAͦ%,Ȧ( ,lJlM ͷba1TGLJYbGd2v%Sş;_0q;}0n KRԵH_ k ;նOj]&(MgJaǧ9oNrTĤqrD;,T"Ң(!"I8y`VJ?/pL?Yo*A߶E\jy7e5|7_7wU_2LY\U$!SCSďD$)pT#Wuu[Օ FF,, . \,Je\a ,1bc!jK T.vgU{;DSy<֗V-Ng>od^"H!R>7P?x|~|O+ȕ^KQ[6UIZC^JBY((Y%v4E} 'Bo()Ε=C HkUJ/Ϫ-l(@o>bUN)>!\I܇F3ɠfiC\O"ZE}:m?%y$zDب5]V!_m~ίl]]~b~گr'e;[lh}/aLwCz"4Á/O7_˗BUē.RA???w>8,9])w:\Em\|fjAg-mӕ۔J_=vf&[շ׻u'V9&i6Z|,UΎwoif0?Yi~t'vC~>ZTȕy]Jٳf ZiZ2t>_ReM/G<}!*$OwTQwQqDhz?j#j{Jv]EHz;gIJROBQ֤8G. iR]K(3m[j6f[lluJROkKRv}v.DeK1Rqܝ )DJit;UJ!!ҞhG;J]R%}^ʻO"^e0)GĞUzy*j_|I8 ԐjoX87{~o~|ZߍGɯI^_ή J'c5>ŧW3&b"G̠x33 k5kSѵH\Y#21fL+21fL̡E-66*jUTbd-hmVkQ*,h[Ɗ][2JLܐwSrmƵWoƳjmSZ55*55SQU4l%1UV1 .ĺ.b.]]yXybW&#jT%#:Ww0JmFaf`m+eKRJTl6S6DhU)Z:TFTw!d*$uNz?n3)p*&fP/bJfPI)A$el!tHa<*VTjmnu_eվ|IlB!.DxCyD;K0yE9S?*<5J%_/̯šRKHvC]yRo2?; DDyI/D ^>iJ{wf& $l++|kn0 <y5%CyO:%$VVږک]*@)>ΪaS~zDQcĤ4]ہ}<D~JRY~OR'C*TĉC̤UzCSXSXx<^.GUJ. 6mjAeN +bAqXps̾9JOW⇢EHUzK ޞiQ^k2чa^~0PT8 (xC5~']=]vSJ<@+nw\q!jc8Y+4Q?(%^UH;!\TFB>DJ'C_Ođ'{e+JHUC/ҝOt_UO%}ı)CIʱBy="yJǽS$IOAWrPyFws; в\YCcJ* [ bȮڷ+TacmYh$XS؇||Ol;B+'\/MDb'U} MJmj/d8cl2dWHqh- ,)#C*LS\G%5X5XU`Ҵʰd^Jz|aҮs\ :w ?"X;..dϛ ycl:XЯ]ï:QvJ\ π|p/+ܪbXI ʻ%u$CUT=Roѻ0O*Aĩ蔫Q WmvED@jmTbmb("Xň5chmZ*6 FmFEDQj(bյ0m565 [QPUkִhԆEdƈ$ɨ6ڀm~ڵ[vQԙQKھJ^C_~EGzoZS"\@q*mQc1F#[d^mW obP?%E{e\_w.%?ꂌє`~Q#AJTz q{?Fb$ v-k鿕vw9Z1uu*+_UuZW֫_?{龶ڵ~TyKéALI>D1mWŭ[|("?USZ06)*|ԤJUХVR+f""""&lٳfÑG$yiSCS 'rk3m,ZPx;9qtrQ$ 'PAȡ NKK  RhYYHb0ibLfʠňiRb1e,e&ҝ;'ܒj^yVt $7ƫ}*9WEލ~?g 2 CJ){>M"8URӅ /sTW ?i~!:C"hfC^ڰZ-VOJ+ UwV5I-iĶ%0| >rUgbKUʵ*.`YOHj)bCߚj;#fh<}=Eʣe2T{ e_?<^T-꟤wVs+,iUt@%iВy`B'd~޾U"Uqvt;gJ_q܇|PSOL;dS;Ro%^@{*jZje!*s#,h.VIi1S+Jb]*8DhXCE 8IZBՕ,j!ێ7\c(25JeHYbs͛IIVUf͛6vNadCt!UM %:NUj)#΢nJޮ e(O;/!#TG&5zuJN`Ei&TKZ'$Sޞ"DLA'C䩕)U{<)!WP7SURᐌbc0$W]'I;+L4[6JԲd\KL&t3l6 i>ѥ?b +{?9__lJLwIIRŕVZŒb5e+YXeVYXebՑ+ )±LqʪŢT5 T,Ub&#UqCv.7fw/}q\J4tx<TqTOP1(&.* nrÙt\çpp0n ɒK(# H0H( ##$ (0枼!5=sp@P`9fy%St10aYiP!F!Ja)JR T$ $R$IP""4.,NˢW .vԧE+IX, +J1id,Id,Y\,V- w...:,Da\*q&ő謈tYU)ʖSK_UPՔZj+ҼHmP6ʭV*\b j1 MvyEUx)yc: 3qUUUW5U|׷ J Dٳgy^9B#K_"Gȯda"8轪Ga;J T#y|pGHG+}$z_(NYyd);d|IW"(|zTP>:<ǘy -\~2h0\M K.Kt) 7Yf(o0U* 2XKE(i,P,Gt71W!.L%!_ W"Q5!*;)V*PrIG}4;D1 jUDQ^xܯVKd=U)߅^hG?_Oû}}ۮ]o|][ǪB~~DvTY+defJ>< |ha8+rԗqwRW??C~QXQ[WU/CC+%0_Vah1,ʶT31jZjUW #xK˕G:OU40ϕ|53J?)_oCl޿_|z~R';w ~pewq|ꆗ/ҟO #輥Ih^W{2:]U>5N$WXnUk8m ]ʩϺ_vwq덺XJQرMjltLG QS!KnVQQQ]CR<wD(4JR~D??z=/LPVI}]W_Xb}.5x@Sm0Ǯ3}ӇEnyozpBdjUyB7Dwt"MZy䪢Of )RRP9˞v#F.q@\鼪b>| s_;>Azit,Fپ=펱Vnu9^lwc = qC{z@xEQfZc*}`P|U"yAYDU[[zw [ ko=CXsl(mڷXs {w}H sNYݎjwshS>}>ur5&Ѣ5U{Kkwrs1B}>|}^_m2MV>(O/KR }*($@>ݱ=WMcӮ^ yzoZPqyNy{N0*zx1Vb@IUbmH!J2ZQia7@rwT{͚#5Hf-p4L!;Ҿ}{6j0HQ:8tJ"29 @:(0L-Ln)vPkmZ$QUWGsv9[0Mίo}N6 Ht]f&cJf*jT i S$jzDhPhĚJzM464cIDFTSyd&IL'R"M#R==M'zF4cP JH&(SOPD b #25!=P^2WoqG2EI>Њx!EU ?ǿs?yCI$I$%[ϟ*G6lȇ?o'wL2dɓ&L4b"'[TI@$o׮w\w\}9ywO}#zdɓ&L2dɓ&L2dɓNΈ$$U_MŹffs1nf-Ź3bwwVff]29wu-ջI$ԒI$I$[I$I$I$I%$I$I$KwwwwRI$I.)[s1nf-Ź3b[s1k[33;$8s{E@|OL(*U/cOΈEA#>7sT5UU@ӊЇ"C6v,y ˩< gy !:Hv(fCY <ha5NSC4W$6v=28C'uX=캗聜*| oǎ!/ʭYfzE2j5u;wֺIPTvXDeZzoz3iɌ[ժz$lFF\ſ[TM/EDE l*FJJ <\ ZI$"yWj2ǯ叽Ko9<+ٽ&>/Dg3b{-{2G}v=O|Fuý^{ѿ+CR.r5rL»ĕR`N :A3xt`OܐKž( 3mQ Rxo 0 3%y={½yo],K1t wo9 B'm'hY _(~_vS`RFt>?Ɛ$AL'maľ 6]ۘe ʲ]sUȥPM9;׮mj0Rf{o)9i>O={_Ü;wK0A@5Q7HCA z2:"$!wC .2Â]a",HH{o=HsGO@rFҼIMV@.\B P:!8ZanϬ~|/҄0DmO$t2_ AYadfKad  A,-%՚X)]JA0  A3 @%fKL@%ʆ kL1 LsޙV/_f#D, ̐w@WQ%FĎ uHoŢ ty^0OeDODu7Q)MJnPr%7Q)MJ@D%7Q)AMbQ$ϕwf\ +㰮  !뾋/Z5Bv5 9x{Däu2 XgGHm9{E ˊN/H6KKEučI$]痾)g} ;)]OBuS~ ˞C`P*K?C;5$]$]$]$]$Q%z̵%nyzYr LCG'H)[JRwX۲،ƙ*V&:GDHC Yƣ#j21ƣ#j21ƣ#+=R*IR=nTIc̆5a\g=]cL5L!N+ go(k6_T S-[V CgZB0M r@.Ku`QBo6s5EH#1 wI"+ٍǛe Er/1l[[xW]>I|nc" -u؇_Ru]x:G&K`L8M:&ƛ#-2T58L bVd$iݶ]k궺k궺k궺k궺k궺UY&eJ8ek("!Ȇ"j2#M˴ܻM˴ܻM˴ܻM˴ܻM˴ܻM˴ܻLD5dCQ@;nA>u"@d<@R<ͫ3)fylՉ=wf|rX6D!9G $а0:~Cv#=%7}UҖ)0;Mb)бayЗJRl i9f&9$:u{{{Ӿ*L'͚AÔ^~r)i!}~;wg;b<},HV%_ĸ#4|ȿyz^Zy k}o{tw7x-_5/,{C;_1x gK/rWWw XR?J#.ӹ/[HX;gn94j{DH3&gI̅rf mֽM#Cs^~~tj( m&lśM;DN"chj|̌UlN)01ۼ=4ywS׏=ޗGbbV\Dq.p q]%޼,13ݭҾ1c"κSN,Ȑ`ƌ w-Y\;>oio>>Wۗ97ޔuyƼl^L9-:ۂf>/s%_MSOxCv}$K332; 0 0 0 0βZܵZYk-eZYkeQ} nh{U'K٩u;iLaoec{6䝝NQkTEYd{8cMˊCޡ$6*6+Da~W5q1wk[wޫɑKH{%|oNx9.^O\&W/lEMEѶI$oAy;g|هv+$ *H1fi-I$I%$I$2͗M-\8-yGooI)7ܒI$I,m^b}Kxzw6"+7-hԜ䣻y7z "+J{;I$X}2ׇd<>sw{I$Iel̬aFVȗKn^d ..B;̏{y'nqBnL>sꈜ>PBk+򿫚9M1$@嚤I1Rz=ƱLeܣy0S=<q=7w92?n> YJj"$y v,'Ϸw$^N~k~o,JHz2_K?пM] 3?]Aϱ.4,2ynNFe =">GO%~7?#gs`zA,NADjlCHdP/D.Ǜd;33~yZ\W&8MȐҜ~2JGq۷v{ qh$ ;D C3"fae$q]QVw"&2>^FˈF+_&)]f>$24Sp0taߣMCӾxh<<(Ӷ'rN7קvpÆYé徔 =<6\6xb^N`=4tr珐4Q82QF͙6\Sq (' $Ⴚ}u{ H '"RHA('o%KMwTX$hk^$I$I$I$I$,>Y**/c̞0ʚ^Lk9ڽu7W?HkI %I Gw1DLHOOf/ɯ}٫ϭȳk]>#^֮|-x"_**51}?8%<wgG1aء5???I~x C? H,34(?!">A|[}< ߿)$gnBIuܼźn.-'+q}OPI@ W=_:HI$h |+CS__٬zf_.jىսVr_Unx1}J}s> S, ߎ;a ,>~zw|>?3?~5_\y>g{}Iyh$Oܐ|ήIJ#HxsA!_9y35߾OETg9$K`;1wxH"k$}Sw[W%vE~?>I$̵UvK~w߿~/9u\9$Yw~ =z.Cywǣ9-8%ϫWnݻv[ςݻvۿ~I]I${%e㮼XǏf܁%I?O I3]ýדN +$ ƨIre=?\xa c|D6z"~-Oo0@7刅o^ _nSN>'UO|{} n4϶׷L | au6Fy%}w[_ ZG' WS.ckQ ??2k:~{̕>U[yߠ?|~YˎB";{+x_kBHD=ԁ_g}Cb&JaTTC٥Uy?4cygҧȲ')%qԇ^zJY|`R*)P%QI;Cq s~fVv&-oSMQAuh= 1Sd~fb$r{/ LMk C%J6%\.J ;^oCo_j>c֚\6 z]ŧS%}~O>6ugt{k3.0+5Z3vXJ\˖DP37ȫk]x(}⮶Nq>hͤI$I$ $Iows__dN4'sY3oϛ, &]as[9½dQ=^s6G7!eۧ kƔ5SqL14`r82##Ѡt[W !(_fUʰqHY-EʳUbd5u5Z9]{=| ?ҫ)SQ5%0 xgkx8O(Ok֡1=}iߧ߰۲3C }D6/r <}B?`~:ǗN& [ɞU׎LjbŚ-=zW^aحM[-_.%ȶѝGpP$O>9$I$[L;{}S5? S/~|oN ȿ I$I$I01ĆܟwB>aׯ0ފ4hAq緋o~;׭ww>i!Tf/[Z7+׾I$_}y.?'{ Nm8؏= 'W5 [zpeAPG?o`~XGf1Nq~$Bq=lޢ(GEև0,>0hj6 $T( B2$k^-7Fe*ٖzuȻhu-nV-x+]%"֔J_ҨeړRЉqieYȤT#)hLcz&QHhRJg[x-z&[L!D(QTPKm(/gQB;[שWB&&x L ʭ=˓}k^Y2~t R Bb0PQ˩,AZ$iK+XQiDKIIO/]y$u[` ,*S2fTaTY$j%U&49VRP^]r'Ϗ~oTq$P5R P&bDQH k$IJ(3C+Z!E?5_ɲ.jڭvWUmvJ궺]eݷWm`{Ġ0 Hmxp; 68 `@B°[T Xv jl 68XXV jmP`1a-AŇ`,ϻt3jnP*KV0?.FL Ab]Gz p0`@ǺgX*axƏ:uwz ƽqe}tW@T0 ;!z櫽7lێsX'-~M(W=> Zn@ ʴ!b3uuimDHPIpu[b;x38,e79rsl۱QuY:S Iw 뮹؈ݙt`R@b>8H0Aqn"p-`Q ^~闓PƞwψB`n2ͺQwtY[t-'읳H  JXR܌tG]V/ǖ#E0xx T d 0Abj 5PBdLQ::"x=: 32jv sR[RwJGuby\4 Ro UP3 &3ɺd &UDIR4Vi V]"]Z P.RUy7ua*`hf a:|H>\{ p"iAb*UTJ9sTEAz0BbFě};rs]X¨6purUHH( -U(\޹leFQb樍\ (JSBV0 ujͩ [C@RlHD E"!m n2gxwG,^̪$]97 QVB`%^]]I;Sv@I"SDI2,JіjYo-Uzīo]u1raeJ/EZ? jfLV{ky6ZW-ןv(+FvAv숙=o[I$Su$:2cVP-  ^f/740ρc9T)@Rԋ)*Mo (᪜WmJl6aweSiz+"n(L J7@[3PoMSsȼczd^{3تwNuإYv׺hW38WX-t0 EE`#7q:-7_O3w@Ffjl-@K/VjInII-a:2 UnKw@;CU! [[16uWPJu A1całr ͭT\\8QLB DLQ EILd7ĒHtVIE9rgNݵ(y 2hx@l6pݭ0{3{mL{Em,YXF{[rIKQݞ3$цh۷xfoc {t_]4gxmung6.6HY_+,P"(U~M&yRv<3m^*/~L w_ ώ\),#)lBh!Ǽ 1LLE w:h]}(_|<X (Gͦ\ R3*ʡEX B^3C!1aH.qL-Re*}X@P ߯~ǜ I.(:`vzvin &*c1Ũ> Nn_ٌV?\rFHKI:x|ZNBM CZšޜ .`a &MPifXRT;ޭ0 sa*g9TL&v۩s<Ս#({~L>_]ʧp1#x ( O%>!woT\DB]lV诪ͅi=9Y?Ÿ?mRH`sC*L/FI$bg9ҚֲW@bn η6B@޷ؐn&o )&{Lx{'P` Wh6&Y߿|}>O3Ec/2Yj  @XPyvy \{JūpԌW Bh5X$B&t&u4g:H;Ґ:*/,677ַQ( #1Zhwb["sʧHz3^ыTP{ʷHL}`}g׽l& ) f긐2UCt4bWtl.k@mCu_X,U>a"2=J$ .8s|&a8HCpjH@ x 9.)IiX}u%JU Pt%[+͐!ĒLKJکcq]uxB!#cjx8-l+ ,I7՘tA8RwwΰxV]U*=bSeGQ%pG|~ |z"~^*@r9Aǰ.??oPp,)iL8"lGhKfqoͬno{lŹ[T*}p.Q) *Q5&"MLG'07l`*x9.MAA$|RqR_&DĎafA!f`jd#4C[ 7ivJ%mhMo{ò$W\J se$.0rťD@OY=㿅I=~uTt)ѫ*v\>~\>v* 䌆2/aTl;}D9=.fsC/v6T6Dk`LNd.0jU [,6̒*BQr< 9Xq8Is <@Ô9`x̕D\q9ɇtMɘp`O`~&$ &Ps!Ju R2rxMIZ*)'sMRI$UVAl" $R ۟c7L``~`|0kEg%z}x>vy shK+Ŭ}B+FW*9zfҹV+ a.Y)5gozI+T;F7ˬ9 "+  (H $2 {wӭ* ljda-CCsF2HȲ#9X$Ȅb-||BP`HmCR;3ZYH 2 2(݆ky B@$@$<+#$$Ddt8^ |Y^IETm62L-_/&ŔH ʉyj7,ouf~~~{1eTU /ǻ@|4BLL11EZ9j&8z3韈 s I$Wg.!$%¸v76/RÀC|սaɈ%&շcs|óDM)ppNsa m[ vw$$ڷ.Ox$$Sz|,*I[nMkvg2 b˟ qsɛ }Szx@fqv=C@+֚wY3Ižթ]]l`6xwHeWfwٴvm[ 7TQ@E4bͧڶ&6"\ڸ6=(9K %ҊQt;&Jyg 3Za*Lߒc=uB$M_;PPF0|;[VMS*YFzaa0sg~Z%c%y$bQ  w\/aWDbIjI$JffRXu1glsIF6&ɓU 0G iLF/K( sFn#u.uC뭩;h$e`ѰCtXhhU5gmfi&ٺkOT뮌 |MFY@XI`k~K-N"ʼ+$l¼#'u(u&j``:k"bϲ#aXWH$I$$DKi ͡&*pp**gzAƴWV,renڊZup:61(Eκ묥ыIJiS4,%HԠv0+L~D,WRO,qprc,P]Yc5e &1]2f7oFƽ3v@3Xgxn͗}l/bC}~e~z'oR;6-{ۄglkZ;u4o)#;a8+76b҄Hy۰ M,8TvDJ}^[}I&lr.ݹۭnx~.WmI$Mk!V=jT Z0fEaѸzwIΧ sv1U?3,4z]k˷=glmI+% xFU&"0ʱ1$'93U!6㨀_FeK?!g9@G{݋ȒBC|Xp;lPځ8\s#t :7λxF{D^fL!wM&¨W9M*0)~?\Sx"_ϕG1uB&ݿ 1,/AbsQYľr(ͬW2cw7Dfoig YMBS[-cd 7r&(2$gX H$ YծGDw [ݺ:ñovhQMu{i$ 40A JS $Ed^lOOl}}x}%wқb`= 1,&,K}#\.q-@{.b N  i阈`.}AL;;`$`3oOZp8&R^z6HԠ3g:;#$*;8d`@s8BFo/@Nc!|U8lop93\6#ACBC쓗ڽ{=8r#_Q55>`ES߳] _F>^F_`ETZ ُyڠQ|CۺȆ@@ 5)!T&G|W7.mα!m:2fl$@sgIF÷LF2G\L#`6&ٽѳ] ŦӄLFx#{dǨTwr|ݱQ(XHWuߧHE\dʦ}CC,-3ɀ=O!pH@h&UNo)aTݣoix=t;v8H<:4$DLKIPXCf3*P,ok"o7,!Nxn8 llPoM!RBdP?h觷VKT>1ÿ "݌ߡe. vr@CZCuܷw{S{D9Wz>=DLrws2)4P=3=tu֞=6f@CSnKZC. h13Kv!3s`ɸ 7!$o{&1uѼĿv=( hTS@3Dwki$8jV4UoY"z#+MOəY'V,I;XZajٌlh6Zfo{n F1 {,>jM֮BNwT>p*dVԨ>UDtFz`d8'g:XCp`7oa{ThMZ(l{TB=B8%sa&x A|/>+EwD9S`Yz"{}V}˕|!jP H0fl6ĵl:6s1'kmsI!ݐ:K#P]>~v`<1ݝu՜@^cjpNpcOnݲv{[ xBy_AǼ#!=43Z Z֌1ꊐ6B36eB8Ȩ)}S/^u2r!s 5@kZEMw6ojo[ڛ ]Yfؕ $f [PòBjo{daZOTEΌaB1~v7']uRi5ҒS4٨T"kQf^ŜjkÌUz%TG+B񊪥P~w\8W sO5WxY'$]ACh!$ %ns}U]ԒI$!'YݘڒAql[Lj L!0=C`bY0˖e?77wsVc`ު4PkHPYKq~Lҭ")@:Wl>,Ewp$d(r/6 ټe3fЛvw- x0IK6s, tlo,؜/=Yb{.OgW0 @ϳX3EbT.1Kc=p>aҢ&g6ʫOI1D:k{CeY] @͚Cu h`և"rA} u:C@,9 2200|c{!0=ssi]F ½$ޮj%xf8q.69%*NE&h >nuҝut✬Īu`s<Ʒ:uRs87j$ I$]ܒI2*7i $I$E$TPQR*<]i9ִt$ ZPF J6 EY(Vx=* z秳~y kү$n}bۼo V jŨ ݪndh4(X.^Յ^t]n0N X,CN1͉YsGÜCBp@qDž cIs[yU`4FG~KCNﵼ0fykGyB( G^ J$۞ZBhӃjQDQeR(}5S^(t Ό"AC,h[  _~@51 XBXU*XKiG@e{1z'7i2IzAB| F$bQrd'` .h(,JT `mLJ2Fw. \Nt"_5\ZR(0++z5,n{ݢ[pԿ};KvP:!AvH5P#ZhS '<eh5@H]A_wu֊z$  4ˁ]ښN69sSBa0d^2st B +&d̫Xɫ&ə5Sģe .^R(^E=Lhx}w)B 2РQS ?s,Jxn Vd 6 *ؙ3*&2aMda){W517\.1efF0pKf0ϓ/e}+ao] EX?pC{y>=+^֪Z%t`[6Tb]bG*8P{"ݴ7q@P}@{y قˬ4dc3xH= Ca yCv| ~.*2$\!݆1ܦ]򀳠!uT(IuT0$1QI>Anb.%<EGZ <5QcuË^<^yjPwmc,6@,i& albl;Q Mͨ7PͭIO qf8ת"Y|꾆CKzBm7${fWz]qaBLGLu3 az 6UY*Hq˫cwj(͖c9fe ݈tuGzưlH83ny.߽{Қ+W^\_DD!. DUcc>nsřo~XIq&`W,-8UPˬS݌o'{|$}&z%kRTƵTh[{Uk=몈+˺Xul h j-mZ˸⟾SI-J7nsֳ!(zZTݛj.Ei !ȹR#&\CRȵ$QRH"0z"2LF Ŏt22n068=bm`i sMo=kyvDzlLt<f㠚 0@GMѢHuQ_F*J+vJ8 IF͙,TuѾ%U5{I$)#X[N`8ԢXhcNv[yW@m.uw>F5ʬu-:: kᡍW̅pp9K!cq8R `9˻z C wQ5$p8JFX*ѡbRrN>̴d<ŰPI#%K\^[7-&wv!褏Waaņ||C*>bهw50V))+a*N]%W-+h`(wY/@W)떼{^%ܴ)sdքI$]0*s1feݥ̣r۱SeVץ |mo f|||"756}|K\Bsf S̩J5iD`UsrHTH f0a?x}go` jcGYʗUQiXjQdMg;7.QZvMa}eÁ `y~,kfC}*8 h׏o~01ʺd2JI9%Gb};N=@!%,+ɓp1hf *E'늶zUKkjlT.'zvrli`!O#RIuG00[4wk_!!e ]iӦ76 xhF@cbnuΆGyEt|?guŅ_3#*ߡ\>WZB}"Px_:_ADPdlXs-0[4*TPdtP֙BSb+Ls@6m =|X o ¬e#MC [YZmzP Ky ɹCcU {ޕB$MkF!H]cd{U<-֧o2`{^9^*NL eG4Ѭ#ˀ܋[syG3kVhC@b@yX35YH ,ɽ[G6LB@ZPS(} Xj)_y>/{r/oUDU?~3&ݾ_o~\D-I$̤B7$6BR4hݒC #!ؖy`N /b 4١oǝkZIJ$ .aE/eyxAt}]`bͻ'-,oP:_?y(w}[^||X!Yoo<盖yѝƑ'bۙ=YCkc 4BmVJ`{tA ;9B6_+:4 ƶ,Rt)4h4Id-J֝P, Atm0*UogB+ppVP}u!}綥xHuECьq5t2H! %lQXmѬ)eM%&?OeIVE1Kݙ5Ix2A!U"8#%ap̶SG;sy7۾ճo[t__]l wb^,aPչc/5ES4;uwyw7òyWm{k0s'b >YU.4AfEΖCӻ{ιO) {}훳o9q,˻YX 7`0i]k:Qk<>`q{g~BoEaӨ0S\leM ytm=n\ޭ C]MXPYPjqZH/<~}Q:{myywOM^&$KJmIE)" Q7$$ER\3o׾ {,`a!o\}5sיdzd5$EnmĆ'MQ$mwA۔lMڴ1w0 Qю|k ot&Pie 33@RIQkm̱)$W{w@Wk~Z ,ʰ>DzC+ڳ%ubKۚޛAqmRwX׀6+2xϵg.KeoZ[f*4[f5m}>}>,EJU"%Y5fk#m3;ױ= ?ک(Z @~}r^< G7>ta,#RCD Dp>g>yzI't)$hj&x0&2 hvP9ȎS9NeWzVTuKXvEiDY AG=k-ssCQEu༇j3h ^!QFy{2Yl{]qB 衏zӓ=vHb7uA-`͆ `h0m!xwë fZ)uJhW8 NcC0Q7sw1Fh*áYchPA {iˉZa5l-uUS&*Dsp\nhe^slX Hyky*ԒIc  T{Na3veɭazdnᵛ7n{}Fߏ96^G Ȯvx} K'|$z}{[ȤkH./` ZAZ Ve+ bjh`)0;Ib̿TUȾf"%h!T 8.ߔ/9;={kн}a6ҹ_$4l6Ih@0 ԐNmI!5UA a眀k-ޔMj%R.o>Um[F{n4AS}D~OIr< yAP %+Pa,4H2W0&ra9 Xfp:*z^̈yoxja̛Ub@d[,9@HT_O5pk-0meO;T=o>WPC51eMD_~ߦ-تs/Ah!ٞ 3}= {as[Sl~H|_'8 K_$C N=o|+UQ d$ZE:\輘"-C(htAwtJ ou۩l8|z ܷ^hZOG3\HM-F;5ۺ0BFLdЖ<=OIЭ,X!Bޡ U']4ɥsLny~Ә}ˠ(Y/+EUDFE.=Z8o̹x1v<0[ep8BRwu9w1B2w}J݁|km SB1Rl4"iH5:Mo;\WnvYؕcbyI$㧌9?%^5ߔ7۶N؅cIn!`HfRôR57DGדތpn4@+؂=rT+^/VГdM}6I2͹Y#1%0g1}T $tj*:5xw:7';1&`xcϗkJO֧!3V.MZ;U޳/ٿ-1u 0Hf҂n@( , M(Pֳbε0*xa|Zy:޴۬xZ!AHvĔðpʟ1'*F?pUѕDPI.GLeTwff zѐAuAX΁k ִ͚9sikr*'!AI{U@UC4i H{ֱcmD$KH2fpy/15͑3Yxk*)5Pp@( ( IP(EHWHUNmԌj5U(v{w_+Zx`ņ8 3[B6[%gBbvW<a@R ($(g0[V+pPְh y0U2Ep Ɇʄ WdJ/-U7q"`sȊ > ^rrfMLvNW OE^ש667w<K.UYYgND\b AjTTDTPAGvrZXBNFeww .lv{;5sg|{V _"z 5 /"'"vֺxdC"A%K0#k&al.(Vi`fLFwyb@a NFٶ}>K؟\XӮO+Y9kNke3-JwsDS(G45ׅAo1A7enA{Я/=}W7oΗWo*Km(zN̵)$A$HhWb*h&PIC ~wP(*8*oRyX­+p0 _Ig)I%¯231!z ܍ى?a @̉v@WkOaU@| +^(?fghd\f%EzK HȢ;Ɗ}(i,Bט^{PDq_~8j_1_AJ!#$dHqCSyՊՐM5K jKy3-I$-] +(ZKw2>o9o4I! v3gTYWskVړn%e[mT1E( !cuB6!rŘbrh!\DzN+YܙuUGKy[hX&aqe/mˈ-[}$x=z-xyiH)X8'0~ ^S)g:" mM6t*U ;4߿w%v^L"aOgȀ+vO62DZMinm)jkczѭh5l=O$󋴥j"E,ĥr*r*W+-%`)ju"dHQ@EhAEV)AUJVZH]WHIvu]k*(KHZt\n*pfS' mcktK7ęvc4tn5tEYkg AN]qJck^V]=ӕ&&4Yun)-qN˧E؝rfstM8p w= >7ϻ|mNԾPe] "؇©1֨9yzLb|`>iypFhqST1`&f󮼏<`к4Rp; i2s2GȻUwUД&肺!璫rPex:ǞgTck,6/<*;@fN ڱJPw :7wJ[QL+*82@%Ig zYa6G- Mêye1Vz"+0 i!,&H.e$2* x7 ,ʱle鱵 (K*3{721"iEtUѬ",#ULUJogEBLB W깑hgw \ Aᒶ sr@*á:B5mi3tۥҵJb6RNiX€y%(  X C0hHAŠZJ*FDŽ5XD]7XK4œ).^We&Q(t6E4XhiDlNX^KiPVB@c J2`l^`$CYfEVɼ|X;4k"1bBxBMUTѵ%M%(HU^,mnR8L3KR'B@qR-[v&K0a0Y33LҒ۷% 2CA R2Jj\ꫣUV eTpRbYcؘɀBl&Ig4b. YS 2hKiFřJJS1+YX%,`kæ6fȺxA:MhQ-QDd~H )FC{@rcNʔ@MsTSv 7F ʔSZLĨPQI9qy@)cѦ& j6U W6BMf &`hE(6ق$ Ak@L b+&` @HNЀI9ދ d$n 1W:tXCtkD.Esʷ<ᐆ &@Njx3F/H]P 'o8I*.nՀPvjyRGG P#0*Mc%Ղh.%sxófAf@E'cVEK"LK;pfOėesgȏ2;g]^Niy~/FD`9JƧ ix=\WK7XC vV.49b[LT ͇y]f5?cUfEи=}8 pj(0^U3%@ ַx:]*ߺVngzzOȈs;ye=x5|?y<_/(*OB&ɘRbX2?$*`J?TU_ϴ6RC_jxm"l^حf#w[nwWJfB5h3r5Na3qUڗ+u:3$1ӵ+ U0DDDDDDDDDDN $YRj 4BZv-"Q&E.Hԫ dML!r[3M"RbMZ,Zk6YMJ,ʣcfMj EJ,ųZmbɤUH- JkIdآ$LY!LIbUQZ-ThiR+aL+0SS+E[U@Mk62Yl)I[EisLt5kjj3)ERmEQVM[6$SZɌ1ƵƱƪe6Zs$ƶLJ&ZcBnTȩSYljcQA[D-Jh5&-hٙEEx֋ڍcj"تM2*K0-[&ՋfFLQbEJmr+Xi m.r%hZmJ6V`Y ҆e+Sa6TfP#1Lb*I6UOSRq$qdhj)bafTRZ3k5ZmLdٙ#F((э)3X LZ4L%dDDDDDDDDDE)Qh"#$$$$$$$$$$$$$$$$$$$$$$Fi !2AX6Z%pjfZk g s%UqVmNE"ɵR3llhdbضw[rض-bض-bض-b-[clZ5V[Vմ9VĜG(ڙ\W6m5i ,ja*+d$j4m԰*H͵&Fj[a,PĐ؆1 BbLJĄESm3jjUA"3" b%iTiSZM)Ͷ6-6mcUmtM[*BmIjlZݻwk_mʪt㑰jj-MSnKe*80`]ի PŋTKH4$d6X ŋ 554 M--Ja a,LLKʈʈMTLe &MCC4CD2TF4VVU,Zj(j j-EVQU,ZwF)Jd2R|DفCJ%@D&flmřj3,*̌ѱ+F64"id%hl@R i (,Rh*aS,eY"HiI4L2Ё*S)l5ѶEdٳe%4ڍeH!DmV-L-Fki6 bJ[-cdٶy9 ws1c`s9s9s9s9s9;;wtxǏ;:39]ݶ;ëcxբs\kFQܹV5Z5˛X+indwg\E P]WuȪIr.2뀔Bd$iݱZ5s\wJ %.nss79Ηmnv*)PʒRr(((((;wW2ήjB $ 9jEstF;ew98;™L2zwx'RD@$(TB)pjڽ-KwkE55I{kOPq?D0LI$n^r@}ͿfI~9VyK׋G/A'<xT:vSpǴ;m(=-7ܸl6KgySK-)(PAAB֒%Zksp컛:=Wo3R@H$ 0 |-~"b(1|cοuZJNŃįSe_G|3<@IBY_ӿ)B~tөzc[U>L1ZyB@I8 Z Dfm:6ܐK?zY#:g{/~FBn0n++Y&\?$VsǰĒ>$hPĝzS͓---|z$ RT;_ߎ#^(yh>ZlJv<柝/>,+=_o~@\:Jz޽gfxء0EY~e#m|}? /m/T^٭ԮM jy[>hV*Bﯟ^31WА%35= ni̷6o j/ EipMW (?!~^/!fC'[jg0̬ %^E`~F?ac6I$I+/_̡҄qUDTĝWmJmJwy1E Bhg_ 8=tF1cI(i)0RbHf}ȃ<{ìKmՑ/֛ aqB*PnʹAXRTQ?Ŀk z ?C|5@|=iA^jfe@ǒ ypVDS}z(ia \b\N !$>Ώb9̀ThiEu*l+uhW=33R*p-*۹$I,'F߼^ Sp0 U6Eϐl9CEeDphЯ?w* @R, V$H ?byQRM%V}9FLb6s]_ nO!;|_?SauI_(z}&'bYeݰACvY Yd6-, e( n !` , EQEQ_VVʷ__ٵ|?0!'~q?ފ}ew칯>?_h/$Rbõܗp?U_?/MDO!lx׷{;j }{Tk$I\^$zl~w^>oC $I!z,e!ڔ~ońP6,6MvV_m[nžu2SpcRC_k{ׯֱFW0ݪc9-|/.'Xt]A(bBPDDJu(1TPWN^~^6z_O츏ac~g E3Ӽ* |"A_91^hrot37Ib),E%"RXKIs% ~/g.E™<*׿WpH~̴&f0Kp\TN?="FW4r>"Y"7.I-+{Z!8??o~9z;`z?r\\\\\\!DB"ϋ;GK.&;$~O8:80+x0eOQΐ ||O0ݏv?[5kxM3>-~???? IhBڰ~ſnrV}{H18!"Hm\\3ϗ;ϴU1?>NG{+C+CITdG΂{ݯ?_޼z\(+T>1¬i|IxEZ=ud>vG=xoa<1k! c_P# C(>MC $%HI,xOPv]&!"BJq6SXg}Sg~$Azz.듮rzpfiK%سIBH꽚|p:XANvttN '89.*T'ZVcRmFjD%,r{[8(QQ kV["Uw/x>)y?\H @xPnCz~JbxI;1! a/@Ƅ |@!~' e8 3Ο6-= _~ÝMpGǠ~{l@ȇQ{:5bYw.&0H( !$?rɷj]HNI%QЇw< Cź/H|WA>>?=~!18$ FHs?*JIO7x,sG$X9?8,s9~To'9Nc Xb8<9+xF?.O9O7hxF?.O9O7hxF?.O9O7h{@wϋ`ʫ|o_Nލǽ0WȏjTjvH`9sJ\Xe@òw&¯\Mw)99Jz*9?=<.3>R~u٣3/爹Vn ?0;}Ą|I!PQm`1}@֧1DR>OeI' Cּ$> L#2I*Zefi-$2GG)Q(JJjFC{*[\yys(G @:Zkמ5mDCf͔[sSz+V $^30TxyvI%*BL]bO7͡);Cӡ3m= q]?>>W9RƊo)^u?wUp+;|Y$B3?0Ooc?d>.>@@³B߽Щ0yoݛ+؇Po `t&?,%mVQ=E`SJ`S58At)q!(#?xPX]LVb?RBKxK}L"mUEbȒ}V@ ?u$#}K06S=g@>0=_/*1V|xqI<H d%2Va`ՏϜ~篳v>6֯ɓ&L2daF \fBИˊB xjM&--hM%' 6x«̖d4‹nB(QI/}\W{} ؂tHҵ_Z^wwO1\@HyPu6(HyzyWyS8oCzNar٩СH_Cj{@9p pALS8c)eO>Y1PW`\|_%t,=COJS/{;FFFCQѧ/yc%B?]tʤFaB!Aލ@‹x|(.(&q{N ?h!f,e6sQq. tF ֖WKk_w)=#P%QP$ī2dhkEt[6n~4OTrOv&'g> Ϝ-3]=[V[fcW3[#Ye>XP3Yr#`{c?\ꪪAû8}DIPBOl1?d@K*Og^/_ȃa~Bg?2MEνY_o׶Ueo?}WB(LyJnrFt f誩UURh)8٢U{chKyUI%M|[tm3tuM6IS@*?C%GOwbn C mu>H{$U'}OGCPd`!iF?.88G d@  (OX2_j˶@*(QYmiDԉ8N3R*ebKI(I$@Q'[HR$M|X^Aç(buK۾ ~r}VpMd_~AäFZfﱬ}(AP嬛uvwNy~tIB[caGHN.0= W*z\קl("k濇 >(mUI.6oPwIB~L*.sgER]ж/K,?/fe_^iQ|Řf fiib@@EydFy.-C^}Pd6yo+C1Mp}?Z0W2+kFQ4d3#F4iͶi4٣hM-AhڊkE6kiF4hѣF[TѣKjkhbUc ⃴:ܕdcq.۔9DqQŖ" -*ʵ F' ]J*'8+Qhab񲜙EjV+9jZW*\~3 {\fѳ1 )5RVm[4%&JMpd AA]VjsJjzO};k=wsYC$wSi,>c=|OMG,i(aM}>{Y>N`*>ObsmBSihtP}Aɶ&II!i=uoI;}s8}{h׽K=ekgtR5S$˺Vr?fӴEO so_gp qu}/,L?RgQx=sh^pq~d*n]CzFyZzZ^ Y 쿎.]it.;ҏOhڶ^p/ރ0t!i] lf? ڭU(wULw+WK5>Km&͂.˩&(ߍE>~-#khs&98Yw(үwrG}Z>4= 9dfѥ9\Rg [.csEZTgJUx8~Qe[޲&rjC*#d! iӑE5@9ra&/!@*R:4G j).wng,Q{BO'Sʾ#<7.9:4RU͚1ɬ9gSW)޸veRNloj{x`0f 2`0f 3fZiB_\=+wFNr9/<h-ru}c#<^GD^D?_R4 (OU~#F)|=O/X%zzlk6l V*"eiV,qIKhP_"1jf4ٖtfF>UWg<>V~1TH|jP~s_u??)y~7s w'tcD#}8m_܊#dPb2ɫŮ|ͨ7]:oߒe m;j] 8("4oU]?nTh⢈Ta򺪢EwFi!Үؚr!9Z\9jq49ZTn4Y+TeEPK6A7Q#4yЋΟjG^G(ēp9JFSvt$r}nQ! gĢ{UUWTJA*ErL^o䚷|(Xh;}1>dG)f*mM*s bꂻk5DT]5bRV=E}J.lRFAldihhe2R͚VfiLlęC6jf)fԛ&ɲl&j-Ue&efYefIdY,K%dY,ԵJbє!E10+2-22bhS*$MZK^N=:u3.($l2v`_| \ѭ_a(jkł(yѬcYY_K*e+] ' 7$$Va0a? PO`٘ VU^DSB\Vw@W] oaE湦f#ϡLd&ߣ\NSifv f*D){t[ˁ T;L/xvtx/ugmM@{_2%Zt#}>zu|B/$LڒNj^f}0J/z~Xkd{|/Kùp~U[!2 :`*;|Ш =>cE0"BP⼛]uy+k& 2o]w&z_W[U:䀣B|bK'uvwN`{O#Q!1 BY7[Bxˆ-#)ey++AxKs9]dl9!]gfo"$l#hm9kw|5P`4Nq  HB"0j`"0*q Ľ&0F mѪ@Dt2  X\OZ ͏Xs? n_#^oz6F! 1qZk[xݦp)RB^ I$yߟkjYaW5 c}rR  4M4a VSq(3zRwAUp+vZxzv:Μ΍Ύ4tLΛNSiʻ5%f*fkVZM0 /sd? *f8$T @ 4%Iy0,Qmun^z&2*i- ׍8.A9R59mk >;8K0X,2ޯN'4`BS < UtV?h%C#O*BI+1mBBhJKPd۸IHHHHFVJRn[BY%45(Iו\M!($* l!$D@& *`wYIS!!!2JMJ!!!2JJͱm#SU2R$*E6%l̈́`E4$&KK2R֥$JR0̈́`$30Fmځ$$$$Vi26|j|zNU9z`ZPT/R*dkg=iD%$/D̊A#([ֵ!ڭ[-~Oz$E8y"zT&(?WԙeYgk^M4H $t.H~=>^4=)U??Zty>6}kb xQ 4R3klu2|_3.׃ YluTz{TVB0>2fcem[?x{~5I| -/yҊzr8|ߵ:j@iRfId"HґȒT+0$_h~_;L+s~%yUxc/{ >}HhsW,YehqʷrpqmY5lkR`m5m#[KI]s3mVdS,ͳSm}O QŊ_jOiIUh~VX3_;hy_m~򵚹eʹ&|iZa\9ব9GZy/Вb~˗,Y>]U:ͫej{)kP4#;_7Wvו6Ĺ#N_KY;V1w|SEx39#gU+Ľ8ŕcC@)щwA!d\*lʶ9*(\9ba.,`e$}ώJfa*eP.B.e+˔x=0䶢v9m\}7_WүVoNgؽq:^-|^m>]9FzU$=K-F-_ME$gݎ~6d,h9͕+4Ys0`ŀSA,QEZjPQ.,x F Kт,%j0 ֔v,NIVU >x_ ݠ=>f)^zoLqƧ娟*J[)e5JchiSYMVS5x~C)}6{Ohoqx7*|!AYm3mEXcj1ɴVAK`Vbb6Ũ*65,bEQhb#E h4AQk M6ZM&أ,-&mhZ4j**,mIhXQTVmF66j6ɭQmm٤m#jM[PJj*ŵZj"ѴZ#mhj)#T6EmLj5c%Z5hlXT*JEZV2 I6IѴme-6-jEcXڌ[hRZђ &-ƣEFɭlmix<X)WUS5ǽ}] qd]Yr)뿗U~b=)UUz=Oվ}lJ!Jޜd;>'YT5Cj =*x>ٹ Gޫ)Ϯϡ  7IV8duO\3TXT$FfBhDHX&ƕ$, "PI C@C&Q)"R"bjʀ ciX=jOEun{opWirJ8|*O_LL|TbP j|J/Ux^.eHӆ\kz?Og7rg40Rdd 5ډD-Zb: f9:_j移'ީ+BbWUabүo2 ǰy~/B6p-qPd.#JHBx^7I7 oYiIZJ75Ncul5sӭ'ENiDIeH*(;-S hӸjUp2+\I&`QE5%PUPT Fl@ 猿R-[Hfj uVUS SNeHD$$('mJw?Ph0?(P}p7a C`4‡p8 hMkbyO۳U6(B^v޳mr顈~Wt2->W\ڨ=Xff١"UT[o]}Uo3W+-7;μQm՝m^!⫲n1@r˜Fܫތy8ڙe#'ٱH.s{//֬|*nll{|'Bv'}(3fLٚ8D5*e9sNC3Q]"&ݵkVkHQ]uXg: &rNF*`X#}2iLEJtQ¾l;*^(”֖ƴ7:umd4ʻ%+A_v@$!/]Q$08,UwoYjHryyvV_FRYL\C? JW#ԿT]x1@#I *4*B(F-*+mq? [YzjmH3*S/y2,6QZ3iRzflm>[^~-tˁKzH)b̦m5S(Z5Li5fmm&S*ZiQƪzh3UM*dc0z.գ>tq|kkKn%:S (T(h{cR1闦1?>GJ㷎R|bOqumh|(C}OOI_?X~^fʽm{׿{S~Yse-]Xs.u]uo*k}ؒ-m-W5Jl1f$֨⣕8kM)̿ʹcRW:|W~^_l6}/^NG>һ)/u%|K++5e5IZT2mX>>/^ͻ;EYUy*WOUY S+ۘ< G׳9@YOfX*ED(s+Hw)a%l(Qj dDXb PASټkW~\k.:?Uذ}soSmL-+"#|)UUE=G%{YݒNZ2@h|xv3$'%O꼅^{w=<=@=E׼bU$yޒRRW/plxG&O``~{]UѕYug:-( !]RE @ !AhLTL 2L i#h\P ]k7ZeEBUԳM `$1eW1]+FVЍ[d,Le\(-J~6D5R]QZ Y, DhIH1$ DvIͻaۤun0G*LdeS5[Jt2sJڣk[n]:+""""".Lީ[J+٥q26j6ڍڍxmbqH$nFE$Ey-(bSGh Į1v..T.Q;,#Xu\Zff3"""*mmYJlH&=hZ6F$o ])həjDRSJɴb -A-uiבٳV#.gk!#wI^i IjFjUt;f+-LY4cVJJA~*<^Z6)@ZmZo[&2 A\#x OA@eTU5U2wړ])xw8LYM+hUlaO##9GJhp{OBJ'ر: !ȃ+UU%E K]y͌ Փ ;Ak{}WN{hlGBWʩ}5o||jr _ci¦?Px?7^m 6Y=RQ]TNGa@(T(Pxڥ<=^>"tRhW^|iO]]ly;a֭hkj|;tRlmU[[DZqjrͦLdr9E+*T*]\ᜒnN].mDŽ.w+KIM[4֪K!Mb[\˱lcNsZtu@F @).Q,liu'cߦr+E8BEx!qZ/zYLlU"DSkY$m7|qp5Sv0@CgEuNb%ǔ_jkBPw;P9>^ S{:nЪzicÆBjCXu @r@?gGGU.İ+Ac@ı$Pb<iD/@NQ' {z(d U`/vٶ6MjȚŵ+Ze[j#/z4@ byczدM7c\楝ވvxOWRC[/)鞮Cmt~^_DEBcO.0Ƞ >Ā5#G}m0CV0頮;>)yM dA8Cp8l'U;ĒP`kLjxeZc?ϛ")?/eGLK_«yOh!(`| &2y\1)|;6uN7GUɠ T{D! &F_FnD@'ЩIo` 5: +@ ([PgUZA؅ ? oh:8OM 5M}gqQA$jFAj89*]UOa}& y}U_kJx}\C$Q#"d%~K`ʜj(C^nR5"01xwX֬!ZoWk,fX5kTEZyeOյkul[n[ű֛\M ͦ%j4'2U#X5cYݭcY5[Kim-e]+z!TI=9o*ߜDFDDDDIi4QIQEQEJJ#%QEQEQEQEQd2F(K&b""""kT-iE4Q2Fu[/we__,^;!4;E2)!['pc$sj}DbvWp3N Xֹ0P܇+XhB؃]L+DQLCW`ړ %뗂%v]Qj8W&Rwt/JLi']2-e6nI*M4ҎBf5S1.Z =RsӮd.esW89ۇA'z!׽]j^K-tYm.#q#īThE̪0b '׍o/f@oݼ'q;D_*<.$RWs]%줥~UJ_CI랊2RGVQO*_GȽTc GFc>2\A T8+SJ*y]jO]{(+ULjSUUd222222edeb2ebedededededededec5mU0Ie9mMRg7 5.m5VZNr$%E\+e#mrE6Tعn9B}nqy?KA]RRxX@~kWq~OfĠ[VPA*1mzc8t;F,u߿>`oO)iF|-/[ OmUu[ q  <[~ vNqeqdHq\)mӦtm` ],F$qPK *u&)`i߸-EP*MOkUTӉz̬@/7ˉQAUNgRXqӞw*mj)pZRsJkG)NXTv6m;.{.O ҁI$!\$ llGxEG/)OF %חk/_x*9}?dMd'*W~YŇdyڦR*U ^;5-6:Mm)BTH63d*P@@Pt= u邺XǠkx$ADPo}@Tj#@)JuԕCT*UINqQ_xP Cmxom{u繠(˃Rt4}u![sExwlUwwANcwG{yQ[:T ۊaKn 9)*`S0f[I۳@m={{23R mm%HB6j{<ø[V,elef,oGuͽ;{Ǩ03 ٽ鴮p=iONMݭik76/X:Pޡgi;]fnZݱ*zW{flh8SWݚR lէf(ow8 `۪H[Q/L&ϳI^>Ox }T}"QR=eug7>[D*XIMށvN=2"[d*& XPZ(|yAt`]@hYVl4QGop:x=|N(L60d4R|Th XS{w}àv4}FӧO'Mk(%jԔѥ t%tҾU8#u绂 '] s{ay{x;Ǭ=(smEJy C>a`(**x"Mh )RS@kTjE46QPhρT.!VtY" cz1DAyo^CJvPPhm2;rP ]\9[Hi   PJ~"zСGaH?F mA?Th&d=# hz"BdiF)@$G)SB L@6e=M4L 44U8侟R"T9PT(*}}5ˏ("ޡ\GsXh3™_ҿ̫j_[$DDD?.yk%ܻ&bwl[LS"'wwwww\:{GtGty׍uXūVI2f%5/O~Y}w{ww{ww{[UUUUUY3wvoIww{ٙ-ݪݻ˻ffff]ffffffn~3 BQ1 ~(n?{EM"qA43-3Kٿy8PTp@Rb<nivVMMϋJAÀ02GJ| qѱ"ӏgެ9~..-fͱǻ^u>zmVu+[ͽzKKqv7:I `j  djm@CIwL X)˥_)9o#Neyx y#@"AUT\x,H$хQBnV[aWzAH[^9IRj)yHɵ.T&6@iV(Í:@"*Z8HWs&7c UsL viY60&eMae}`ppV%]ECY ֢V`&TXDRL YD~tNrtChJ!ԝ=mmmmjCdzDz7jkϖ#μghGCǷs4J~t#DZ#yl4ޜQco 0S@qcMY7v@oEV jڮuƫ}\ItD6ȅBCR @N<̜wXBLHvO5HQ0 ^! " T(!! l6G$6{YqRI$BECâ J(;f^n0 (E:I?_}۾I$)~ ✐"nH*BRb)$CDmc~m(:U!{W_d+ 4@y>W$tAI̱wvSʟp5e$IH @I#Pj5?lS .{ȿTFSVSŖGw}.6F2[\"^{HS~sӞXpBpDp˽<vug~k V?G鯪N8&1fokN~Ej?KhDg_*K[ cR%&qT$#,B[#Zt, rJhAh.R6vf4ӣ1,1GsY;VmwSfpՈŹ_ 3C);]15`L0$h"GAR4(jʵLg5.L O'cTY8:`4z@ *djD0;U@u.Hagme :ǥPH 鈣inN %@dۦ!eM]&hPժo=$Ot䀤I.nﲺ`tHL!d2iEM5J v~.Aa ILN vj.B4ヵrvl%<@q{auWn WydC :bZe.2hmiʢj!* ~ l7˚)0hq,o8­U?C)'ϑo ]c$ "!QS$P:I5_mtӓNP.J+ X2b[AJ 5L< 6X* my/-M(mQ }H)}i>< q!1pHѭT _efbI5NO/-Wĭcsz݆zlҩ&j.%=4ٝܡ"A BNv]ט3* {uͨpdjq8qxȚ.6_e+fwmE4.x G ӻb@&֘QYmM_ô~?7 O`) q7y 4~NoeT  8E PҮq[-"XpbfTky^}~f^p;fF6ۼULoݽ1/w40s笀ҷݹsVbڼWTv /*K ]EanwaudšyN}ٞnO|pv/۷#'1 r=vOv{Gp;f; Mq^s< $fyx+^\{7ROf>[Vze߮ "¾K̐uNlV(aPL6 Xd.u 6!C$e,< .,(,o<4Xܺ1,1zWpՏz61͙=m譎RLJ  A? A* RpoV%~wYu^ F n行5i Hƌ̬۽j Xyޭ,Xo.cMNCkYpnҞ<@մ$AؚhTK0NDp`gZ}ax"`(hkMv7%fN̻̿f^۾ xA S8 ){*`ძ`B=&b̩Ày4 dytxpuM c@`O{ޞy Vowy{  pX]UNh@H#7XU"nް _ Gc4nQ33WcW}ÙɻưhhNԲ7RUea~a5mk C ֐4!+q  OSmji֫%q9}O\ws3)nyv0CMO<=yQ1۹LYa gY{TXn F4՛\fMcF w7CLN$vC-̻p\kEͰs|H 46hzOD0٠lѣFZy&̞8M4^q{槯^Nǣ^'qyɳxmA'8{PbʱQ[V ɫ0c*< hXf "0pЃ<O'XƘcNGNi3xnݽ4һ=;t㷧pbƂE7+u?5#mt[*sjHVY u &H,&`m 3@&4[r,{!(lѻ7v] 0ӯ$%76dnѝnXsM[*yP tmUR.o8-aQDNzuNw$PlXj#F4 YWEA`xհRԙ DtI%Wrj/@H&N(و*# چKh ]Y)mi` uI%kAtT@$@o.F;RVDҴ@@I"JLQ"hAI ОY@׮UB,%vdE\Y׍Vj$ ;AdVLjDtJ*TBL7 dV,X% %H))TqO.Vjok5ᅤq1tpo:*tу߾N 烻Uݮ2Us.aDN:N]@vn246Ua UΉV@E2k`PH4vvi< m u`@,!4@!HTbERI%uJĤH|IWDJq 3A+\MxI 8LL3" $k zcX.{fsR`Gp|Z^S4Е&E{,A>S A:haF$I"YKb1=L?&$g_iﳾs9pw$Ilը I>PWF=r> kUIJ_M~-M+I$_(5D`muNJp(aEJfv 0C+I7p(>\I73,^;5rA"2{KX@PMn(qmIU&p,>y.ܻ)aA$%$ƇA//(P\@d:HBWo?*z_ulj>=q礉%_䓯ׄ1I A ~{A[nLFOS]J%z"8X,P1P *eQ$0 ٶY$Qm md]~@J Mې%) $Ä(.=NXa/&AR$$$tgI&pG\DbQ%Ra(H$Zȗ7Fe2g%'AY]. 4'Ev} ,]x RAD(: VP| KhyTm~#E$UnL_?Ά${/$CA!ziL7g$se=I3F9$Oe]*tJH"{i'M,]Iw1,.4bMX$9W~Q.#{3M!|V8Ɵw.\r GsH;d$H "ǔ0Fm%R( }6xi %ԗt:p?M Hn+P8 P$I'^AN;>]#M"` rxI$IvE;Z?L\qY"I%I6 8iW X7G Fu4߶w.zwlݻus{lj7H\/o ɳ 0o]OOyh w{Bfdi<I,R0B("(E'@E!x7״4|Q@8F#C@\[lwZP ϓp/g O^D{ffff0HI$!>釓'=)EJRRD&TACԽt0MPNH}H" uP Pp&q ֡v=s^8$y~=X׏0ptNkqkN/)|2^%IbXNSdk:+IIQbȢ;R(" $Ã!򵇽Qtx&;i{cp(),B Y CЌ̑9o< !xjbL8Ժ\-\(x@߯H-욆x`cZEXuzy1 %g-QU$嫕5h؊4ic%BflUcVM`"Bi5EHcTkQjCumة*+dEMhL"ehƩ*UFѴmZ)JRejM4W$QjVaheW(1Urƨ"HOE=/TB$yw4z5J񷳹KlԼ\Sgf)Z3S5+$+c!-R;q]Irs}k%&ɮocmmd]{wl^yr^Kٙݝ(k#bMXf?_[vv3$_7;5y^ޱ}nOjgvT>ktOe1n;A[wYjy'~mޥN]ޏns⼻K囻.no/f >-ݰnqֽ)Gb3A;[W;mdާͼs>goNJ_Yoy^wos>,G{Xv&]g-+ulA.[d(ڭͼ7]mlVNPǭ7^)^Zj亹#ILlF߼}5{&amrg;@ݭ<ś=c{o ~w?_YG.mL~yvй9]fxXq/}p,Uאuο\rroS-ek׶ /sgNnn{ًtVz>׈d!)4`÷7tZvD!NJb_VܽYy[Dcݜv^=wVOCj JzV I\+V4R7 ǻ1a;7 ^)'y 48x׈!'r_JI7my}!®%&Ky_l& $a$ B^'41 kB_ml'h&,g] cmm{}R#mHM 1}ZxwzŝPNb m:,mĸVNȊs<B`޾0&QOQ.k>mRUԟU*.zsT|7InwvKۏ^85!/N 3_Cǎ$Uꏎv{z]3+>PA0@ [(2gj+#xI kQqUTTP};N@m{.[AUy,ye`RLu:[J@y?h49?wM8(5jb^d5H UPy?E:쁿:{#n`hoAi`pq Npz0|n3v:~7qp*IA+@{O~KZ5Uo,̳#*MTQF|{7!,oe3N'_ ADlOP)~kHu6Y$|enݺr˼uo:w_4fH $$ y\}}p,$}}W'#996zyel2q(;3#|~C?,_|{ċ ?kזw5M$K)$I0t@5ls~G`wxK!=cӑA/ߧxk9 $ISsI{_u@Y_ IJd  \8Et<!ec7/vI1c~{`wya4ך~*2!u0`"fܚb)xE?Xa130z%s|CC'#WҹC9ωCm:$]d 9 #7u.9Kkp$|d} oM>j:` kMu M-t:׎ӶI_o{.G^ LW^ɬL&`W1"!sdeȩ a`tp'r*Uů6 ;%M*z!l4b}N띎H%~8)ɰn kLݨzTTz`dgf}yjݥNgSNW/j4kBE0Q*\ǷI{~~]#>4[,W- Su'Hg ?Q0-w#(%5BUA)JP^26+si%pL>9MОz! ty;⮟Zq x<^lp1{~8PjߝMzuY+;OjEx-N0㑰̅[+R+tH#cm7aଥEjݝXZ+Y˙Ƴ=˽͸:m2i&o3φѾ9e\b1\6Ş^g\}T<׏/ݧB 6tg&[)nҮ=TAQPܿ!^m1;{OlՇh=pxr$IN񷗙wUU[UUbb΍U&SԽ-y'qG).Fi1T$ 嫸Vb Gr9|]+ȱU9=—942f|ڗSO1ǒGqW%06SǒI=ܒLU7CpUrr3H MF3wp7;ٙdGv{1u5\M׹ʩ;W3SJ6& )ؿn]>_wI'sMwsw{tww""6v3*fm̾x׹O^f{.O{[}-yי3;wƸ denff]Vnnd:!FI &nMw &}[`(DKĤrէrttM,1ǧ3W&g5_ Ir FK'm}y!gUA"BAB"#hbI H8CT2R#")GJCCy1s:b'!yPS vG :Z1jH1"!(l]ԁvIjzNKX_r?ҶfɶKb۷}&GFxhI"4N%&:޻qz̿$!9+dC wc#`X@cOsD5Zh6]͕KIϑfs|\ ôG~$< FvJ{#"W+aKzCvO~/IV-l)?v1>R֓4z}~P,dQu`z#>8:F<8BR7j]% Jw^ɾ!+OC00q}vv8vvx ̓H'~`Z .a7؏"|,8$(+q qSg. X"B -H)q;qQ v h` CEG00B2s6hXBtEx` &S+A_ Car?;41v;8 `ˍ(?2OJֲ[<~q S=nKCv2冭Ӓ~~#AX =cIdEkh[׆ca?v"Du #3.a;Xк."q.W^{I$ .C˿NA\pRAfbM=1f 95? @)0~H|I4칗R9.!ngkޝ39(A#be9!HB­yezbG}?NDZ)@AuVv *w*sIXP'ՐLqTDxx!/$@ <']46aY೰$߯ǯ>RwewO:'wIfZdf+Qazʊ^4bǾ]s\Z 5F׹AEi8䀾wʽz%2"Cb }L44T T0Mq E/^- n$!z)N/]z~^|i|oq^r FA>K6Yݣi7T3nWo.T7pMtٮ27 j.n73.#AT'I*^dKZC\cV[56^]Mu)W6]uFUu ƴf4%Dv9.A/@=_ju#s$<TtY. h\֏Zՙ'^urc$rcRVf`SoܻY uXS\Q00 JJYƃ*+6A?A `!ꙙ6ewg2w2b6gw`m)& K05NhAu#GS]/04D||~g:\V$q[q 4T:39Vuq>%PRd_w3-<,&ZD="ȗ~v8߂z*ǚn64v# kޖ{GLvyڧǬ{#x=Yg&5i3{ۏ06({ۖօuc`뒼4hCww*$X=xytBn\V{tP De"<2 yU*<0Xc&Pf[~C5wnW"l@,; Znb) As89([ ^^ݵo>Y{;}t3YXfYmrI`ՐII%7[:tRָ% Kd"\tLG]#I hpa ִYl4Fm冫 ō3Z`룴k&wӯ^|8hרȅz[v5gt8i^3 ^b{{37݃m̜3hd-ۿ2ygwvjlcn Ew:nvUnSF,8vW0ekH W,mV>C-}G7$Rk1ɺM8Uo;$`yuCl\nrmr:GDNSU ,Ǯ( j3 hU4 3Imhaw <0  n>%tۅ"*@Up퓡վOWF7hMYuCbcDJ P4@U1w3N0bS 4@WYB(ݓv0dpMLh2N KcFY,T$ ! l B=wseV[}.Vӳ3LVUrkm1w5fnL.yݠӧ>;];tuKgMn6״ fLхfi\ Ѭ`~JKD eI`DW}cu&T^y&24`XN.+ድkQ>}72ev3+.wwvg2 0T4nMN:o4&Il+ȯ(r r'νq|s6ahvRY' $`t[:"F^P|}|YF!P_Ų J!`Y%TII$ =~'!b7r"͛,: KɢM!'y{|-z;Ȗ 3 1ƫE TsMժ$kAzs$mT#'{zW>׼5FWS6E(!Zp"??Ood(ϴޥ *뻩+mܺ`Ե4Y5q܃SK{Oབྷ. 0+|OWzQd,S>4Y&u:t뾧N'Re,0Ԟn#r8,n#Xѽjj)0o{ާSspn唰ՙ Sty~ 9+W#~t\!>p<`-G~r]B>+fJT Ņ}Qa|5ƏWvt?p|8Ig_hŶ0XVmvBg,!{3|x)Ő (w_]DU9h >`˧g8a/"/qO7Ekx3mrY,f".l5=XfԜ ȄYs7n<ށY>>DHwUʈNym߿|ħv/ 'AJ Yd88C[㏖-ۜ7c츈Hk2&Y>sQ4l^ceAIq'yҷES]4l,阓HETI^vPb7v(J*A 1cf6EnVC׮k;[+⥅RX8mUX\uWm1`pyKns0,rW7LPXd HW!1x2AOd˩x={{>/,XR Dpot%L8'N`s`F}@lfNJ5㭜7FڹLIg[4bb#bhl"zh6cbw8hݳDm!vLCt[#`dېE8wlpTM썊z4{s5fho{r"I\Hc"}=}&>r>DMBZfPb xX`F|o"*','V]d%ߘ@vp@ I# " 5PmANő^0kBfTl(Y-hkLll59Qm7ZnHaYَXLo5Oi $~ haρ߳ݳ݆q kfFF7;4>|p%LJ}܄O֯, 0A [-}ՙl@ KwjS4FP(R@Xn z'+2wwv"7v ,Z$!٤@*P+T:qFzβ׶bbX 7I$A"Q@NVBYfErq2jH"!Dmbi]% oE"G1w`۽$[y'R>=4Q'<Ļ9鳽s&f1yp^|#"tGo&D=^6 ڕx+2p#mKjû} r'eXٻq{+T&RU@ =;?T<}W^P\8W]BWMā@LэѺ @h 8І3jew\g @]<ܬ X f- T30ynr퍙z;ϤNJIk< h4v-ksЖIfH"!hb4'ji Gny1{řPE0& „È\  `A͙^4n|Ds/y9c{slm6Μ-q]܎<&CLz\{fOz]оOF糴f39'}PHb67cy׮_ZIdZ؛.͖~?gؐzu="GMR%BCԉpETJ0NS3Zs'5^zQ%曷}:jw[_nMwB+ m[XJ޹=9vw2ͨꆀv:,wT 2 B dE2HFg@f Fb;: n@Q` Jiadp#i=΅F f@xl6Ag0jky o#rDkz7 ȷ+w҉q46&f#[uZ,nr ښ7hscd\$~! kH>߯WLivLCˆPJ@b]Ԁ.Toӯ֬Y]+9Tt r_YFgnnbui.ma Hϓ'\C 8RP#PE)컶2d" JUXה C:2Y6mf!BCSfon0)C{$>_i2{:as8w}c11M0 %k醾lIڨ;91YFiWj޸>R2hoR>5dg[ns6KjY03{sP77nƞ烍i( \4 k.[Ns1,}aATHza gG<BgϬ3|EA})cm$-`2`&ȕQ:sWXDVAɬ29StnClzK oq33{K d #4CU{j |5캴MCAWn!Pu3aED; {=}c7u(Lϧfo/pHPTE or`f VL B&N `ٳpg/#*MMX2*-$94@kjY6l"h٣uR蚔%PK+wVWohTT, bncfqsjr8aG8=5U̠8|{[c˨XOSO<y榢ΗSO5fa)ڔ33 ˺ʄd˫T# `fgZ+u'+2:#7'=a}^ȣQwqF R1)T8۰$LDB &M6RJTBP3A4J 5`$1^ur+vE਀ca=T, FJ 4n˙,EH=d 78bκN> !VUk)RM$Kd DD(z/#φf YrFc 8@ %rF8\,28*nJXOvyq;A8RHp1j,Q[b"ݺjXuS 4q 'ujQef7-7uO{0x(f4C\Ǩ.=#[C]@55L$@(8pw f@wn:sǯGNν ^ ʭ{; Fٓf!z{p< {ڟ;c0tC q]<:W5U)Os^݈ݫ}P\m; nJ,#N]pXRH at!jN=8R6~d9ǧc]!àbAnAREUU4/pln-l8|P\a|o<39=H%n󧷪MMY!,x@BcyaYH;'OPXP$torҞsMZaEm`/0U(ٱyCotkذP ܵbә^ʔ% ( p GPuzϹ ]$7|"!Ð3xϢ=W0lA8̉y-Q.%^Id<'`!eE\pȣh1$ 7G~?qA7v(2}g =W. ŗm W[0Xª G1ZAb8cf7w:׮=c',UD3DC(M#/ڀ!QkG @ʅc9[?p$eCxf%=@.JVY\rs.hpXÓ=y. YUB[D0v! ]ȈX%4V+F hC*bg8! F4ԫ{g۸t!Њw6#u:fny} =UWU-YXBLѤm`1!ubZb0C^4A9ԹUU% X6]Pq{䇏iCF#*i5K=~0X >/lqgl[ufT-Y L`bt!=ziR"ɈVEЍ,Ba%}ۘ,P^+r: \w3Nwq/)C!P, HUPN2 TiRo:UPQjp/9t'dTnj $S'K=dS~vvI1McMT H!]FߗdWog ڶ+[Ʈ_hGR"2PX/.oŪNnW2o 77-R!1>ǝAff%tFqef2 v='DMA^ O.pchwc`uv-xR|nk (S;]0?U At3c`$-:C$ֺ]IfN4f:̠Q11W@U mhpJG ftn"ra8;/0噁EnrYv̮R7ε-fN&*Ub`*?^lb ZwKrc+.]SAUP`z atD:x0f*LDH} }B3 E.%ySsfrjJquw`&q{:V"ܠe쭠76 ƅ!]5y*`.Sat@X闖Kg7L鮺ߨĜ%K'FPJY&5"VlMd6_2I}V">Iҟ:E͈̅ OB[::55}xb. Ԕ1xX5ȪsDsǑ[/&"{o^g+..fso~L<ŌE gvhhyƱ1r=E7FCDI-tMT!{dZ]$IcK)`zl$l-#H"M.lY<-x~Y/!u>_n\c @pD sVn<5:, p^3 ;ؐ4ѻAPݭu8p]Cn&zB{Xӕ8s}T|Ƈa7ScH4 !K/L3dv-rw6]clh_ VÇafe akXxק*<_O;|=`.>,dsf's5^KV, `Iq Z)O/7˦_j88ΥG_t  <>GQƜj͛MBGް۪w_jlz-۲'5rugFG^QlJ5`Q۪fV+ X޶o#W]=TR(,@bP@EIU %U[-fD.$6ł/ pŇ,fbT`D SvK07'fC=u2o;}AM7Hc(!>M&"& 420zmU퀳#Ϯ(YDNS!H &,P!p. 8qvvfFyWcV㘀s?#ݸvXlP)f3DF_+d 3`chIԎ\:GBzߌ/cJFBq܇ h ͼ4PyBg12tGBN 肃Xcx $ni )A|-2K0f$ ̨l 6Ay*>. ,P|#9dөHCNVlCz:FFk:G_KK ˆ& 琨AW-9em!,7/58~oϽ4D6 n#}aM;2 038ql ݧka,1ؘc^z7gJܻEE.XnśC:.Պp w*92 @Bԛޗ@ejA8/c+v9{Q\uZqaM=4iV(=` BsoCNHwA# :/[N9kI5ѾkMmQtXfqqT͎q28Ph Bn%,„ ;۷;$p$^j1$湹k5^w[4Yv(']0`Dhdf]`?辠 oZt0PڙBVhGvhiڬشX@|wl%#] LtOAL0vh{k]WB"&ef%_l *=!s2:A#W )ӻؽ0p+[a`H!khP0EC:qéeHNNC*bhY¨z{E wn;Ex=q}%׮zwo\ :4uz01%DD̴RJxm{'6Es6'мlr6tX#UZ15˺Zř*i#-2o~~d7f] (\JW1( fV<1 [5\A@KL; b{ 0 Hs5",5ܝo]n:-0խ,Y$FM= aOD@wHcd2~Bн eڕՠ hx#׸aC{vP?4h&\(#x2e U^M$idV c3H(#<uT>tQ=.1TXfhۆ2i3LV,\a*ȫQR'`Kgn1FYnahIY5olj2/=irSݻS_U2] >ʓ>GEE&4bڋ`Ʀ mccbmcQcRPSCbɑMZF&ڙ Ddd(21h$A mdEjV-,FMXF )dQD5BkE&k\jFRB4Rj4EH6Q6 ))$02Jfe&,Қ6YR̩I# &SRXĚ D4&1M$%Mɳ`[)R"Bai ( њ`JAoeAѲfxzqe;)E,Gh½Y bhny>vFgI,KXL4$_2G}=jny۹چffP i6Y5ѽICu"Q:;/D8:m<ֳ׫LDX\xۉDu#1KFY\sq&&m!Vh-S(*l6G01ZEWu[V~꜎Vvx<×[kt3Zo'M}s Od)!A~VT^q;tS GX+2J ? ? VB6a",UEVU@ 2vitBXbvNPm̻AHeݏ R6C5NEA~ZˎݼH-:ZiSFNt Gt fy]}."ws~ >p |!iw\(5Xfoo!{zTʫ(Xwxہ@a J B7sA@08y䋠hc iSMW ~W]01!1hЖ)jі]<Ń W|1yu{PĐS OjTS8k9sgu\tV,kn{,yBFOԛ/7AV*fr 0ɐ BxUp*onc6eAʱLUnXmU pBA5db]8>%"ZJEAHpϹ>|Z ȜYj)~+Őde <# 4\ȶ"=.}v35M?XigKҧ "g(q&ejEoWh cݻ()H ,Pʬ(``y X.sB].$0Uf^d033[ݖ =mEVr1;ǯ~ Rμcwg6#v0^?ߌ#><(Ma HpA櫂,PùbbLz x3SԌ``+y%eIVSa >4,[6;ft]߭3M}JA >j}vJXA$FK*nAuۻ$}u84m(4#b _2%e;0ιS6Oѣ8 YwH`FO+l=f f pDuwxɽγa/"8$ Aw,JAT DWt| ?Phk4N<]tݶVA=}OdgC 1LdVe`2RJ@A2"B&I&29u/zke۔S b3 'EEY0> CW_nj[Ю}B@D>0)QQOv.Gn 9|VZïg+׃^me\^al{rl1]rwk[]Z.ғ|ի/uGy%Y9˖58ovZ=yb e ЮѓJD.`nu1W>}$vP fpbpNﭰl9~nvrefwŗ=`9h9=k֠;1gt[cǾ~f[޿bpJvztT,|$=4LmZd!#ٳ(W\kp]d:-R<-,o+F+Ewf+g:5\efaswM{wE>|I1}o<|'C1W pG6lM+F.{^ _A~>wрI^ o>" d3 j?ߟ}sUw*).1vfa6é yEdB)6,h't: O ]7{wLUϴߧt+} 39$IH$weC7ߟ^~=y|<[}$I}ctI$I$] AO~>{ WSw翞|"1OIĉ$I$`ݦl>y}<テ;{@??6tI$I$K3 hG[:XԈt gi bC]uɂ"F!i$ $Dȫe-%"DP Bz]:Io5]VdEևFHqOo:howƻw /#?<I<~_o$W94 H$AeT'{BD|}~BMl{~lO~~LT5JRR dUZ"V@`)ZxKl36^0SuהM ,n3{#^ںi6Kɗ40wcuw7i3;[}r'pƿ"ZbKѩDA, $nUI$x$.$HDO?/~`.pIIHEv~Ͽyܟq$$$I.TОLI$߿ߠ9W,DbaDQVo^Jq믘.ÆA*  $2_5<-(ӭ8\C¤˳4][A.y{츫KfV+-UNsb5mBƑ| ۓHlI) ?<^)?N)Oq={թ2"e ]>7dѥvC^)b~'}rfoU3{v2ᘵ[L2%5ԺPx+hpC 8ݛQ߮]t$ $ %_UkWܯjZ:ͳ;]+ qI+7uewy7EFdzTNzב-dn1s[I²O'yq5lGd$ `^,N^jNw۷ۣ XJZ/=9P<++9^JB@ qPy&R6FZ-/EÇw ATwz!m0uU yԽpZ{+hh{Jz q$<ROLxhH`"T Y6툴6-]ݷKwTj.4tgux/<\tsG<&(0&JG"L2^Ξ^Ά)sI4WN.WSNt4,VL2i0i<Ӓu۷\n<4.[*Z.&މ75FӳK2 ZniaN<5ҊK6SNv H IŐ#ԗ1zS|nIZbGfajRb1vk;vKeUDJPyfNc;7ُw3ico7vwX璋Oiv^.)X0N&?fE`ܣ)Ւ5IXT#vHT5<X0φjax/gYd ´H,zݍ-9;tx]p5-٬铌Vg^gYIq9mf>q0t٤C UN tQ'iͰ7v9os ii#^4>lC@0U&k'P3zݜi<٤$Q(AE<״mx 8m hU H 6}0Pmr fZ"!$m0Wx(]ۘԷR"Ù (P(ȣ#I$ 7TiDq ~[st.֍\K1:f:U989CG`H!ppȘFW(d#.Dp&\XިE>Izzݙ;UU{~)nLfl}E0`LYE SL3L#Ѵs6[ ]brbcо=HD(q$$_$$Eq( *ܸT.1$"/Nr FD.Lulyѝz"/7w&ΧW½*//kx3ȽXŚ'd7: _wYfw=݌0B#zv8! LT Be(`C/8ר`ïRu6W > J) )0Ʃ0w@[g"XJ <'kt` Y  =(X YH !blpb2"^v,{!Yy;sxt`z~,3U>dInY$I/(]ۼwATUNc> ^ePD>) P;EDS(A /3h$Ao7I_xK~ӅxCņ#Fʿ[F>R$ $=JPeTwj]) #+xro!;OLiM C@zL3\\$m̎\;xR-fdȨn`vJGŏw) Mx2eGiʺcwW-> H q%XC5dF U<3XaWw5{W ksnAR7) U$n ̟6I'UPZ Ж}ᾹKgؿ4]V &f\A&LKpA/D17*n#sCl ĥ%u> P6ӡT(*T*䪪 Maq3-#|6"ɫz-R4+"US\I3#Ԩ9$'nS}^I&*P_@UM1@ hp$*q6ɸSM؅HR`6*8uD8j6Y²( t8M9XDQ66F6%5Yew0KNܭQ^kE|E+AeyZ1ڕ+, t<;C|zHÇZ9 I•`# D_HIL\TOBd8}~2ﻹUU9z=H99.4َC*qȜF⧭yŶ{BOVÒb|bT㕷Zt}4WWp#y+d٦8;y-w|6/~7";*>p{s;^þw>7pula1ۖ'R`v(oueX* ᕠ1Z5taVӧGlk ep,4 Vն] X8fiWA.T]YNҾ|<H @fձq 1qQ<`B]hѠwyMR+wg7o%(</1!$F]R*- X Y˧uZi*7n SYWWNSJmxK3@MebWr췎ey7qb N4ZW^[euSdX8)6;%309|o-Oy˨;|2.GNIy]5ph 9Ti& :zp&;w",u-h*XF V ,&c onzM@|=Nސww|y(p;okݳ~b>*-03<]~`w?(.LO}gڳ.A$MWCo9ؼ8&bG&efUUQ6ߏλU(]?_R(.kkow˗} @4F VP!~W}R.rjv=XI9d^_{mFfhM.-\tTB;a@;\羁U Wug8魗L{Y epTIfpC0k!3݀QOjfr9wwi"۬wp}jo~O%nw"jJ Re3'=`P0nq[;,JW[)].ƾK|J?UA}w0ja@,0`=}#5y"$=ta0$bA![Qv\Pm-qL-͊ɍ-sFC?5T3gNŎD@0m Pt[_;tN`0l3A %,@nEvYpPfzu|S֍Fq]U@^P殴i֖;m@'fgU 2ZDM3\~0`:˅se..$QAcㄸ˖m˯kkW"6x5σФ.JOpni%XH e@@) !M/OBo?%73 kS A evT5< rr٣v^ca[0-" C**-1=8o(Y'3M ۷h~6/H-:#/`"p .m"tL ȳ,&l%1""RH%^+.Z³%IZKQL`+s Ra@VM(3@bY&ak@h \ 5@NLe`c N.8M)6ndmcJ1LlŖSgL9;;7nmw4dfKHd&Cn]c.YhӬJL4ИXqEOj 18.d S( BS9^._[ c@Z } ԔfCA,e%&k.Y?/}]}I {7\'8b7 F34F_jx6C0`#wV,0[B14j / زY(WðB3nQS8 ;4:v I{: 'vÆ ag@.BuBD1ѤWK`Ѣ!u $ P1eX$&[d4F1j8= :\=~X U\lT m`@M 5c#`+BcE0:0)O4ئ֝ac·,@ n{2@z3a !ўtkNfYԹaף&շsxʍNP X6. +U:" BUp lhU LQ-h,Bedb7ҔePDh$`I$K [C1*-׿@\V  40;6QO%0ð3!!esz*Ծfi$2onVxk 8~S12)xkj:yΜu'7r|+kpez z=X.R$F;C݃!(tcr3$8A7V"fko}oʙ 6U;&'WFnݛ:Ush/+1sL*AJ KH_֑ mhxQ$]; Cx0] 1m`<8s%X*\:@D[f8 >! 2f7, PO32NVX}0 STQ*$)A)QhI HPR@>QPEVDYAA"ybv֩ 'bWQZMFZhт(T"" .kZ9ł2]]f;R招tjh%Qr֊K2W[-lhNj6dƶ+fh20C(Em%li(T4Xۮ]nwI$JZ-jIH1a f&SD F$Vm(-ƊJ)L36)H-b))&fͦM+#,RdTR0֌Td(ZVfZŕI1m-B*DXf Jdj-Rdie2lBK-Ek B4X2lmEj4ٲb4ѦC5c 6(fFƙl1F[%+%EM,&%$,c,jiTlkEiH-R* 2LH, EmƁ֖b,U(R(fʹڙ&i)mjj-B%F`VHXb$d%$ UD"E`H%Rd!iQf-mH)$L 22e*jiImIlųKUɭF[djY6j Z5IXmdk-26+(4-)@1 8(umFJjiRJYJ(Hh@VYTH`D5jص-e jҘFPA@iE@(@ $JBYA$ZŘaU`$@ IP$%dF("*U> $X ʊ$!䊳(5%H UIj[X jjEElfce+QFV)6""DCHQEbe,m&DEm56S $I DhئQMb[Q4F"#2%"1i+)DIL$"(I$ZVQKUYESK%6mlYEHPDfeZ 3fLc1XI2&f#1(+.B0"Bbd"a`䣆b"040E!Af4զMSd4@dYZWHb4RȬIdIIRk2il֥J@`)QJ3T)%M5Y,ƛ%HADJBQP0̬Ȳ[0JE덵lZi-m6$!fhuR(J \[PVm]ۊSN][붻mUX\ e[5l[ HTU$bLP\1AT!ad%$)!HYRQ!IPeAFRTXXIBEEXH$aQ``h!Q%D($RE$X ` %RU%e````dQF!F`D%IR QFP%T%RU `eD!RRRH*AHE!!bTFFP dVE$RFFEdV!a`HA$%%%% Qaȑa$I5!*,!Qa"}#倉kZ̋娉f1 lԔD[Di,"jlʙJBE2fTXSbjL*-IeK6IԣJLc*kJhfZLYcKB+"4ilYK@iIii3aY&Z-TB[%4IjPe,TƋdLXi2Cd[IM%1EɅ ԅ*(3i ,KXJK1@f[FSI)fHŦk$bTD[K5("J0E)4B" U[W)5ps w\8s:U  wp0;y˗wn\qvvZ9;;8WwVG׮ZW*** ܹrME%kj5r+\mmmV7hӹ.]%ssF$$i&]3sQU]9ks(dqTF@BTRN(n7wEi`b`tp+N˹Ή J`+s01H`B1"eݨۜZtNqb0Llt\\NqH`ЂW:K76sJE6+evZ!ASdJX 2e,5,@]ۨķ2hUӎz#Y\E^J6w"f nJ(7\b.TCI?0xao/WwO$?z~ZWQ=!?xoIO|y}Ϭ>na\Z&dg= Lz@:UqѠ?KoCt gNsp:{l@dSCt݁fuOvd<$giVf/EC}ow8zȺ+ |_mm/>Gk=ހ{@}c7k5?[xppzЩ=hu!@zm_ xoko%RE8ᮦV8ٳb$B%/j*\rr֤}wLJhR ܔ*Ö:wiCOi6qr̾U]*/m/+~2=1y3>R{x.62XfW; }VO ΙֵPhC1)C¤W7}↶.q.Σ^^PM\v*iL[Rz{~:s>}m/F]R$Ő=XBuFNr\"_M@@+z~"Y3 4gWx~] 4't;\o[o?m%?Y?aߏ? oN↙IOA{UF3 Bh@il*d4p_쇠l< <llE"^7EDcj5o㶬,J?}F74Ïwx.W^:2goԗ%}Rî|Bre$K7.-|7X,ddאƏf*31'tY 0֞^e=m$pnؐof쿎g`OטGAGCCGuM^||5iB$?#zIP%hE 61ӑi |CBC"t叝{rѕ{:h){Oߛ$> H?ďc  ] @ @Rz8p^{~7[~sݭ::`V տfq8\>^:՞p(Lfw!Kb?G埋?\"F>7NGl?|m_@A^ (3[o]~N߮ϡ̞uku+ߟ-jѫox[ެ|'IzWSESM4t̚3"CSiJrIӏSצYor=^7E&j9Mx߿&Ѐ?r[ֳ^?NG^H@khf7䘠|P޼W԰c#Bo P ??D;4,@(/21=rvw ="p$JL .w3٣Jx J>Ǘ.;(yq~ ?'A}:|q 6 / ksB>O0&86a9HӬ40!sJ꿽;뻮 8 54fO?D8]cZk>>v/?T}>ӳ3 (srO&DE{νX{?}{}>/#ӧzgu$ fm[^~Z{5z$DK4nPxq!͈y2+ m;-jAWC8CJ'??2~3?^r8jgPrڄÎ/rў{$A弖5Iz9{3/qgÍ>9UUU^]O?y|Q,?O=Z߯ᯧ߉ apBj$GkRKCWo_W>g@$`YGc#>}$('xǬŠNdzE( {CI>Or'co|vB/=wև` A>Jj-}$y3rY30pQn_T[0L,R| O=x&"O`{.A\2X%m3KOww}Cw} W#)>OmC\!v'֑kKJu?bB?mGE ]R& ^3 r_(.^9梏?@Fp妴 Υg߂샌,BD,Oݢv{se];vBBK |ľLn"\aA I$t&KcJiW`ēOfo;}b"1S#P7s&̹E<%3ڿHm"0 BRR/E|Z9?Dz|G܏ iu[$ j~c('z`tz_ȧHt*>:t| `u|O\٪љZSHXbX`fUP  @ŋ DUi.ؗwqjIr,GnX`!a%ܲ.ܻFKdw-;vp;NXj(`#Up}O-~ 7ks;=RNy"`|zֵfuv?adg}4xw`@j5d]qtcs،)v&$Ga:7KH#O$Mw|/>qƵ[D1k5ƾ5s0Ι"*Zv@3_V/<upaehzǏ٦휡몀zw3v[3#kLէXC]~rG_Kh^/z "C=?f`-.w5 q X?XF`}$mhґ]K6o:76K/ԑ>ݚhUDWgIHℌ>C K@\zח?q~N'~#fg =dFW()UM99 Smt=0BTf?SؼaWՓL ~e[799:߇'guz>sb/&vgw~H 3W\%B?QBOkr]k  J;F zp+{{?WxҿF_YI01J |OOժeģhYz?汴 5 ,`fӭ"t& 6i/΅8cazbY;F` :hwecd{^U&h,A@rVQUOPͲRc"ʕbI@@$jAf2G;7=|2G{|s98ֹ_&K.".WV08T}_"8!U ~Hi$^v{I[48gaL?69ќ#B#?]Fk6On |`/1Q 0gFtj }O0< &֧zz%t]1.q]V04 o=zֶd&$¡l|5:qZÜCV#)AK~Ȱp PS"k0 2 1 zrzAi#?7\lV5?Ú5 E ݣi˥58WEP& z=zhx9Oxaa]aGֵdD 7Z3-3 ʘ#Yx%郉_Q}O?՟qONpN6XtW:/`=4W*FWJh@o>B}OS">UDW%'qCBt'B`h H%tɥ`Ȋ Ld,UIR+Q 2*dJ-2l&m2-]r%%9uq,Xf*&2H[&E(i ]I11bELU-@BTY Q"\Jx/ ki%D,)ynIyw]jmȰUEQeQ`(EY0 t ThȓR`-e-EH*f`!3%lLRc)Veim9Rja r"TKFF.o<!a}xG't'ӏ쪿E|@yמ>hG$+G?;!Rk18~8w\1ʖ ] I*~B,뿴vD8ͼ?}?d^*b8GB"xRj /tH!H}.C'<'!NJ}lo@AZ%490ִqX\^Cy:i^CqL=L'EVD%q·(yit4X{PX;no 6(@/pzݿBϽjխ˟ǜӼ#}]M# -mԹdꙌcjrzh7<#j]]PγHb`~]W6X3>t  wɬx4J:'p{BGM 3z`<}l:6ajZp//EDy5oˇ>&&}qψw-vu07f;EQsf.O5;xί?tkC 6g'^x iъQE1f|֕ E=|{܋3ݿ$繨Ɇ±}G9Ϋ7Cwaffk ,B(%QEw(M'!CgYf߰^R`򲢐 uj$DLAK|cCSYwf~ v5dgJ?z~,xp_;HdJSPAH\%0("$G D$C; (}l{}Ivt}cCJ40v }a_fg!c^mIY%҇w{owJNy֮Tw9O*hzMygu$lM㞽3"@`S^=6NRR5RS~sHz$ykOōoxsCnc CoɅUQ#÷puG@&&@ʘ6 1 F=j_{C<',%HaNpP֡qh>/OgWB+'Mf5a ,znn|O:fi`hu_ ȃF8~?Y xg[5܁qiS;l2 8] Q@-bi'/?A}a 3F.GCA<gn'@'Ro7Mjի y2\{ɲ0r b%) ޿G~J~GY {<% h76V&9dU/@zinfg5Lc.d.To'&U] I`u?h[\T_<' /"= wfVo5xֲ3x2r.-rYE5kx;3ꩤ9uYDih⦐۪5SHcѣq> ڤaE+I!I^=R~nvݯ1a>+t3>YO}ONn:kXI|3fb|2TzݹYf9g}> `ŧ$2j12O3 =ji;à&;_Yeϔ pA`{21%ۻ,OǷl뾿?"<ϻEX|HfʼnA,.i_ѱM-biJS|ԪPK8y>3EOGҿ=3VƚSY mA6,y tA?nYy@fTz+7Vj[j ET_ɑ42{~U+SC~k$2CccLs9x] " >EGюeFHd6atiKcdJTZw& 98Il*.Z~tY@{@0HZ*Z T`ւ5kjim6  C[(Rd6-`+h6*eQ Ii6e@ʒeBhpQHj}dW.GcF-+-oe-" 3tg`lj0*#V#LIz08t1S9cAM!aͺaۧhL.6pQhnE?V41$fb`BB1_@H$ !W,-50javJ uB]V@9\M (/;+3 ƌqFi>@Q%HB@hUE4h?D~s!yy#IA;1g̓D#?0~cSszPR)@N;ÀC (Gt9 ?l|;(9WEүGa?׃Fyz*hvZf~XO2Hҡʉ ij"B*"(A^ca@?ژh!h@K&C* b=^q^Aϛs?f  Oz_y#J 5cz~?@lׇGOOW+=6W]Ӽ "8Ꚛ J'#a#gII8ֽ0>RY *yKן gH$Cҏ'0a3 bhL^t ƊL*C La1&f64\s3#aY!"b ̒ D2cGҹIb,/|auY5t¬]19"Axba.^"?P1O12(XlP?SѮZ$' ?d O'r>8Ly*0X.dHKI`93cc Sg舉'WMkOGl6xbnL]k3>i =x@~tֵA"k[*rc)ypZgZT>VrbSO"{tuGEN$I榆ćd"kQ=۬Ιg\>ԟZ>AJ%¡DE iQVn]BXiC)H42̡CE 13#D15 8dL6J=30 I bXTB!fjie@!U@!e6U4k5VfFU2Ҕm)UF``IFF@ &P)`Ie&RXYt%&*jHDYTHeeQҨH$]H3[)զ5I % CA+r<=C˃Ii*[*UU:c&:fk33Zѫf+5f"Y︌*AU" {3!NȻW!BۗI!8:iyݚk kYF2]q1Xbx :t9L\6sbK4{:Iri!)ŮJ$LxC$fC`nvZj^{Axnm&'9`Р@?cAB'vQAG J) A> 8ɒȠfKKΣ"ߴ2>3kX߳Rz1 &xa4h i$SP.ӷlwtێgݙ_ZiEIԇگ5>4|ᙙg Hڻ% 0(^>?.~/k $OI@hOX~HJ?B<W>Rs Ͽgs8яӘԖ:{ǝIBd!yQvߝxt<]]W7!:!J):]rFek]]s4$UEE@u)CIT!ďnxqMp t+,kȜa5LOSu܍#{u,  }ޫMwm78pѴjOE꺰!m [aA+s:7`^^oxF H`4)Pnuۤ37KΧˀ=su:|1n;,\H۰ɢ_hyy̠Bgæ:6( @!]Ñ58iB $P1CE893So ʒ+2Y԰8MQM-u:>^Y]o^r8rRc $˧CN-脻 E4!'c4UT!H"ض.ŋ*x#ӠGCȆ֩7D?B<(:n[Gz6G*s.'dܓX9Hzw)Br+{%,fnpC˭ vydG;~tqҟa#syV ՎfZslr3fPIOy>S2_\吠JihU knAd}k\'Cڭigz1@UiĕTh}n)(G AɛԒd ](%CPR㹑ʬ 3 (UU@p8@I^ БCp|Epݓ"/FPJ8H@N:!^(@ Q]<&v暝ynzdonAi} @@I.PDŅμ&}Iִ]t,;km= kX(`݌xyy8%D֚ !JC7U8x.v a,XBTTTiQ(l * RAγV:wޡьXl²0vVT~ Q4I$OpQ,U09ﶛæbG@q v.ȑCJ7`oT3X)2f`?x+{%ƀ8d כeanWQԝ z !@vpLbvc@ Cu@;}t;EttPhg])QOĻ+n% ,鞝@8&>&W$)rTDncq AftKG}'lCCL:QTH_*1P IE/=|od҅!óҏh lvpA= iTrhƽ7՞˖ȱޮ/w;E1Kl%2F5T)jA`\nK[[HɆ40yI$'Sb{G>@_r 48wv 򪋭W/sAu{gM HfgWPx'*ld)E(u;|pyiG$8q ÞF-ON$-iR#2jYeTn*:CxtkZѭhH`N3*X4ˢiP!'gssQztӵ4UE[QY+9dWWOLC0hTM,7ު/@-)4!# LȆ|!6!7U}ׂ! &(:$.@o4s($&Sm=Gr!fƶj)׾tN}IY xNkzvkQGp<IxDy mTpGGðE5BP} 5tH@WC~!sο{iNDh=D$!",!\}GIOz ' T]*oD w'!QOVYutC}Y ;.o l^5\ø2Ol :~ШT (@pp?*\\ }/Q}VXFLP_+L32p0#'pF cW.nc$Ehjf JEKEթ`7gqmGF`־!;z#zC~}PUhY8Ҏ\G.tF!/ vA UmUc/cmezk=PKI"Ą  }B .뢕_䠥Wv  0B4f50`2U:2& g71\:PѵemFr nB cweTnvYYfjbQmAxtH0] ijЅLaUD#Q,(Ds0lK{jXaƴӉTmdKYsk 1btiƓ)ƪHBQTURX@)E, TfڱsjFoBj\&k+ֳ֗y&N'CxDu!;MtHU?"Ĝkb/!\( LU24%RuuRWHYR-6>}? .;f (ҦCB +CؚHA2B&&_.U~7ԯs893ZnSAC?N0B1JY)BU`HF`UrPQ<@O~qґV; ~2j #1>cdc{҆vo(CV<Ôu#3` jDDs~_o>7۽|Q;p_p]n4I%ߓVxhJ(7r6m<ƛ>:~W(:DKJx(7=!ILL>K0?{Ŧ0_+iek93 Oy&=efXf9eu5t۶յ33X$3XJe$&Y[aPҳ031Di%*f`f3Y!B24%HʼͯfcDJY6JBhI"26MbBKLĐeJTI D)Y$BRe(M *Ik$͢M1&I2BRcXHE$Dm( 6jHK-BY%-Bjdj2(FZB0M *Z 5HhLBBE$Z5-$U0JB0Jd%(fYfYCɺF}Bc $Rz0!Ӳ'H p}wBU4}8'ˀJbBRC#@eLHMHȬM `ƦU +y.I$f1Mm41*ibB SD9'GD|ݙY|iVD{q}wEE bgè(P/G?g_/j""&4'|&__~}RwG $IUBPQR!7?CXt3ϡ~ B$DUH&Zh 0$hDUvfozYPPH!䠪`>k*mE[6}90Fv}4؆5-JԱ/Jҏ@ofR_/VVLKDS ffqS'p. a.UUi.N~ta{يBS@@}$Q0% }x:09jZ b6XM6fEZ5RZ*ɬZ6h*lrX5Mі-AbXvl5&IRTň0LJbHI߲&CB *Ddo}$'H<](,2`ʒbOf'ř k4GrjseemH!%޹6<4%(!߉v6T13;;w]egljnrathoLD̜n ԫ&kYu( JX1n$aΥ$Dj'VfsCskGfyeG29:;ڳ;56:90vjmLCc\&D;Vf)^i;&8ԭx4hxJɓReTUMɇ'g5D@nrrnD)ZQ+3;96DD 33&Cljv;$*+&Ohv8&(C'3L!+6;0ó D MU2y˽yjljv&Hb'3Y̹3sT$CscM Lƺy<N0ۜٙyIFdιs9Co]P  LD@QxyAu`@|TppwCL3SPDI/*(5QEl-).) brJ ֝L"*J;ހ hzmVwHyjI͙0ER*YDNmA40͏'}oZ1OaCq˰UӬI P$DuB_pUW~ƶ,ہRIPY GGL;OST8IDx8d(?xq@\DjZ]A# Q>1/uDNNgɳHgNSwDz,- GA>A$ |P08 )h)~սE]4А̰t5'rHBl`s $p?0H'S QL3:Š0UMzD?EFrC/u5\Yfo9Z˂f^Ucc`bU)H)@eiFHM=%ʮtJ'{zAfdy|vq8d4e!чi:UVLֈd9 z?/}3鳊9-gׯ6sx0:܎1cu@eX%(,IH"ZEּᙯP|~Rd\ )r %(PZBGL!,R̠r (X WiWPîL%C U& hCdbft<64Q}ҁ*}y4Cy 5I|y$)aDhaTOsx3މ ԔT#3Bu0_iQ~)D1=UG=H"IF+J[ɵUxQpUv4j*@j~0``4: ̎$Sl%񒀡m~: IćŌ2DƣZ;*G0tH@148hau,ȘؤtHM?D%!2B5IP_?/h?*Kĉ_&%~۫&f5eYvx. 6w>,'~|v ݓ/ YUVp{dh#Y=KA|sC35&Bm7d%li>@#DhicG>"|<p,SfvD8'u}&.3a$ <I a)S! %A5BU#7 rK&&DtkNosL45ڱݵLɭN$N"5r̊dICu]MIՌKȐ[!w8!Bb 6@Rx>hTI$c0Hz8dc>mD(QY}@z  I*C2"r,ݻN))'^qh G(9!~ `Ϫ1/U%o_ >& JUϗo{W'~DXY-K D>j  a؏0>N3<-gԉ/ f.'(SPHd젣*+@BR%Żp',C0Rh3+֗5dۑVw2.coN9sδY$V,fdhWFB 82(SAB%r4mbcQcQd$KyF`+C1!՚7:boJrY)J Ji%IpʄQS",HhY2l-jrB!l'(U'R<&&l .xBR,8E2am!^ѥCU23}k__eQ;'U]8u4出BO}rߞT~cXx%@ȫTZC% LM 0'ӂFfZE>d{p4Q&C@*afhD2qP]F]M'!Igr'>#_Q)E 3ѪD kB>}dRA$nc&Čruԕ/M\MMam_~$( [r?Ђ cN@*vc!BpBQN S^<C=^C5+>C8$`0AJFE!E҃ L$Nr,V "f1 d8c{WYZӉ : ̷Bi!!Rj()5S2FV,3MĈXHAQZBQ, 3BB#{,ɥ\NucAсaQ%C!IJC!71!Tg?sbm )t:H$a*!ZSS""}c{dP RM#;OD|QP?|8KIߨccdO{[JQ(J3 bF\3 ȉ@HoҨ(yDz30)L[P fbC UM.4?rDM)Av> 8QW^ס3{$K*zAPYe?4@9IC$ )\5R26jգ !O\%X%mjHP$"SD^OGDzS@-!5DB,|IAfEKĒ = Cr{|FHə݆Ǔddc!@Y"FK#ĈV4ĉ?B>>?30u_/Cb'tp.&$S־'_FA7 }"L TP#@OZ"{1&)T))hξ@@Qly ;%f*!YL}}l(OzCzo } ozsqw^~>vd)R=:߶NWj[k{XJrssç}IoID{CI~I=?=m,jXf%T@5IPt5Z y|^|'R4rSb} ?1:'Ww^wRDDuhl!S AO"Χ'Exa&^g>HQ{uQS J`1qЊB@&0,10"{vR1v#wk kxehɍan FOy!pt80i$4RQq%3- Uάw~eZs֚5 KKgZFxFl@dVE(0mpw<甘\z'[YdbZkx4J-.Lx ۶aDakA&reѭ!DщE"DIA  2 5 14% ;sDSJE;`6|CsBh8Hp`ND;Gvt33 3%L&{ѹZTcܷ>{μAy#wHzw\Q<בh[đmjY "%I6{^@&4"cTY #H Pݜit :d^%Ak\nID%Tŕ0,1 ;Q&RC%n@GhA ZZAi]"WByMZ,[ߵTʥ2"SO. RAȦYi"J 6V I{Oy4V;PaI( U}!RiXek(% AVJEZQdDb X`A"P$ҨȑVqMCJN =^g{UQ=Oh$r3|+yxw]˶3=W?ѷÓSJ]'$ef"R1>!}c h'n9 q{M"'I쨒~_UTjP{OcASU^v $~ת=x lwP>QyZ&ڵDUtH}~IBQD؄DT6/Qea@ XC b@B:v \}T}&x@S[-*~#k>{e\FS)I>eH,Jhܛ* ᅋQ#*E4)9c 80$&!(G@"=QO[{SYUk!֣.c5j3UK \)E$5!J Fk0Z4]VIU[&-fT*41Y5ed]כ<-Ν1kXəְj%Lk5FrMeBdc f Xp>:v&2j};@ Eh<8DHz6e"IHx`Cmrʸ2ѾX399U!6Ї Cd == &Lˀz!O݆#M$bQQI}5ݞK$^>''=\,[S<ﶁ:@"Z!| ݞn_5`Mmt0p_i@Kە5StgPWv @M` Hcwl x{x|u@B&߰>CЏiHd R-*RQbƊ-[^jVYdCeZmveҪ IDD}0ETUu1;pvapw`ƻi㽬և c73T [-  [S&4}}ht׿z.F_W~4gէICo4t=PB!%it/ACռ33SIΉɩNMkއz灡zw_t80zC6pzob|nئ Kr8A ~(wL?/û IzP|b4ь*!!@x.FzB=Zyi:qxiNyOx*RxL|38&:iH*KL֕hfEHVdJ!h %~  ; øАʒ!&b('SlffeY amSO}{W@47,JTd Ie>z@ !{Rx"T0J̤h-%Cd,&dQQDL$h%DkeI-H(^ . 0,]x|b?Yb =EvvJ(DJ"#F"$"""JH("I"Dhke @FŌ~n[?z3s"_c>0F &ҺU\ o OD?lG0 h bpvўM XBD:*opX6Dʓk/9nfh%(Ȟ gT5o|3ZuX5=ɿN ~pJnH(>] ('Π-,D'Ey !s|[>t8S}MȌJP $0]iөih;o}4iI@H XVEJͫmvrBT0["1"%3SMUM&Bʉ(jMmj؉TbDi dB@VҖ5jvWmlbrA$W  ph|D6 SNW[\ni L ;5|G2yE00h6FD,YN;Hdj* ȚeȊMOnq_sAV{hA%/%bp$zT"vRǒwzJtS1obXeEUL"†SE2:$qL/-flaE`t;/zwnJ e:y{Eu(|Rw<仞he mms~u5KV&brQ9:rMhC048V6a DDDLHA T)P1̔P&ŗPP҇V >OwDM]c}`[U] yё H:2= -|g$kq>c]#LϹU´ !"GPR4SS ӷ`)U:"/cJ ITB.da!a9%6Q@ft9 #HVSRjVc+2;0BidIa(q ϡ)TLBTD!z '. n3XӍL'M)lK6Ixd dN|Ŗ,ZFe iM;Tx@;_9CZ T)!4) t2[j|FkZʴԸiI+Uw4ۼи a A,tP5*E)433EtZT$Y1Y,@!֘kYm ,yt!yv.ΫnmHX\Z0B0(Kr8Xʵ.**}m|?sS_GҦ?x>_X|DTP-d ZU&lVRiӧe4v8 "03!3-]bvFi[v0"8aÎ$T"{Y@#iA(p0B>l40``{^Ȱ J-z}7 T"ҒmMHSYTHIRKTC c-lɼ!6[UJj q:vs:e`E01|Be00$P&ISCldVMVj%?q]D=$kpGO̠"%~hs۠0DĭS E'0b$ Gӟq67ә\ffg DZMTiTA6i)dPȌReDozsc%TRQ"p'؟ `A& XxܩLI{sYRf~O{n02 'QY6R@OؑʕzNj\5&?2~ =fgïS~T!W|#B{<3@2;h~PJ@T?m6?"/ kg遁v^[ku\޷n݀,4αpa*IlHZ}n9=Kܔ|{yZk6%RZD1 4)P$"d f5њض#ljlIQЖm@[&kRc8'G(s0v/f$N~ &pcʪb!?ՃS'ssRHIsai$H6(~Ԇvk"K{Oi0AkG60zHPRCW i45 b˸-z`kaAüHv<fX[\Ō 2jҤuu6$ZPOF/ ᩺97U0"\ֵY5PJ(D~CiZ%Y~VOwNp9|k2.6!uFM`5'ġJ`UeU8 #؝PF.g@{,WMyxQ(jbZ1j"Dm2e-)lJŤbiPm40/"ӧ+@q/Ws99MI=o?_;Z TUE[NPG9xjD$rSW'8vƁ >i {Rq>_ou?q_6i( PD!UO"NO >?1AY&SYDc_dq?a>9N fZ֤`Y=4<tݶQdaf$hu*PPIZm!]vwm- Z'G;RRw#Y A$}vھ ח]_mݼtov4= 5:@:bOOu:5v@3L-ZVw+N g]mak<^BBZj5-Nswf's;ocނQ8k*V]6J)'v+xJ *fZ4T4甀G@^١snڵܞpOCO:]>[[`l: Q*G³{yo`:{޻^soF<׀`I퍚:'f=LRo)&ugBRnݵݺjEryHPBLѠ@%ҎPkAfh5nK lVaq}YD6A屚"$  WZx/lZ̋ +A4m;rӽkNɻ tD4 OS5Cm@a=4 4~ !"I~ГzL=MOF@zH4m'z4"!& L@M"z*cDjz@#!$I6jzO"j{Thh44 @PwN0@TS"O__ٽ~U(?.I/%ܻv,v !huwEހ6ワ:DN $N$  Q{舄1uȈ_^|}_\P_`?w~ww{w33UUU̍f ј0  D?辣u|]gG_8ogcj|޾:tggg[bOqK+vtuwoÝ-|9oGr𽼳W&,^QcGy͓S֕mɵ 6nxxiwBٖcϻfg\G{Ԏf\@H%{%DQRݿ]jz%3ssmY%S޷D,\PS6eɶ&•ws)A %32Eڱ"Ҩ-5bM3M6;*Tfxleű3#,C+LLٛkŽHRp&*I9bM[vWT׻6 ^,!)AyY+T$ ߵ͂eX CL+f P$06ɭ󮅤5kV{5a6f& 121l5CXZ,U H$ALT␰(uI*%E)"dLqH)$b&&MiBؓL5blKRJҒe+5VD)*$jfRҦҤ*,$ĭ*,lդ֡U)#͖m*M*S2iRF+*DcF4uti-dZZ6Y4*Rce$+SVT6f(5&SJJj[-e)jjF$$kh4`i5Y%f0P "N!!KRDI$K,YE5AdTIRfS2$J-lQ4E!-DeBV!-@"(9"@e`8g)!>cLF 'Hrvv߉ЛM/vAr^P*B32 1lCJ4Ό4u:zlu{#ͮ;ΑФ;iCo:oTxw;Fh<I!y'(:6C#Sď"z'PXѴCjrGIxF Ԟq#I8eq@lUldeHeev;=:=tHxuI#m=Wˡ2?_ϝ8ѸW/3߯fΉo=Vg^H:">2A z'mm2 JF,iP#BrE8#RUT!"KI$9$I"bP kؿ'uvd1t,.QFPAf=w;<aּžII#mfxT@,ƪp GP {:!RyrVoY^fY_w ?'Ṓ7㧇` 3GR:~E08ƢM'^7ݝo.i(QUUGȁEY KI"7瑚pI.n | Ƞ/Z̆(,NS>O^0ǚݹ,‹z fEޙ`:Ͱ07(ߏ0Anړ0E!SNHŀCE"@PY8gy˧]Fd"©MKI@,W,q$%۵w7wvMI$I$@HIq>3݃J$:v[XVH{g; *Kb`X{PO'>;b 8lpJ>KAta@ 9 @<ѠHW< ;L(toMX,S;\o=Wd8VsHf{utOx;qZ V5T!h3`%DIpDT0 58D+d6ow:NsLV-=ЉBS]V326$}h÷yw0i]^p,ߔ/ gUhXKdd^IgDIo !4tAEN97 iۦIc8f gVf0 VIR_6)`p,K5ĵP$Y.:aCd$ )"$ =j&mXHIAdJ̠ڣRc iHrZVJJT4.)to D^nTg4`K+hQ.SDUή 1519&f9t Ќ¶i¹ieAWJC)ל(J},=wAʾ5u Y*ˀE@h@ -]j @u1:X1`F)0hFv]fSVUUmNUi5hS&R"s&24#8D5GHnKl kZ*f۪b Mqcd梯s'/b_7^Uٳ3ˌB*f໽</H ,fIQ~/}?Y@_7?|qj?kED#~s@OKڠ{|J>%QUU(8GB eH4%ߢgTkמՌ4N^os9g!s=l~:]+_Kw7wwnffwo1s.fn3wwv""7ww}ůvϣٖ7f'WW+3-٥;t W/"R,%֣{OK)Q;W{LmTaZ׈Yx󅹖ۋ&|ks/Լuc\R&:ׯRP4FRyT4mH;{7<.fpBksĞZf{7V߼-Je>V=O Q{:!]Z*hV ͥa~<}0~"IWe˻o:.7nv7fyUDBT+ojt9nVv{my7egεwp37N嗽{;MIO&|^;/ojA.tx"{|Ky_i)nI'_GxL({q9|e_N/::'7ѩsl윟L8"'DbPY"6L[q:sPo=}ֳ:a7Fya/7$Wy~ &H`u[TMӸMm^ UD/WbU [OX`s*k٦5k4[P؂Tgho)L=[5ܴ@i'S[ m E^XEvcEѣF|hl nmm% bd'}˙ۙ6ot ) 0Chz*Gs?.yF !ʀe oC<ƧkkW )rJ؂zC󷇂;@YAhi!eրZBPi:{G@=CYk+@GJ m߳.I7w BhTʄBl{4n6(e"0!ݯEbP[Ib+jjDVW^eecx^ekXµLBXA{ǽr@o3GU.7Sz n*hFcuojU%zњ07Ron@Ə`]hЁI#ְ:)l . W^k26E{ŝ~t2 @h%\ ]w_lu/V o@wseCcv #8Ձ'^ y}81 ,5CFh$KŬPl2X ҵ>ePq"ZڴPlܑ`ذ.iMS@S@qՌ A308ڈw1#w'n뛹-D4 @;[3 0`F7wwwt64h4n4hѣF4hѣFffffffffn솦Sni2 '5\ogx 4hᡇ  C}׽|4!00`ѣ 0c`!P (hƌ*CMJ=cqGN8S֡ H"A8UQW@X#z3GsWNڪq*vt$!6YYs[{wZ*F[P 0XkGV+ZD P4 ̡fv퇭g?]㕣{;Uz:Nޞ=235=G 0A`ehcC8yi^\ .\4ާwLz;wۆ9ݷ:(x_]ep͇~8۲@i:m:9bb?>w/o%#Q=TE4j|NINyM۞rBI$0a |3z߷4bW ѫ{[꛷L`ݽg@lWwu 5fJAa"kqt@~s3mT"!Z/x \<׮z;b6۴GM܀G<:(_t!% "oT^51FI#ZErڨ[ATO%ohZ.$ }oA|;H5*Z7l* Qތ@I;h  ,edŤ(hYRd(K6R\d՛#E -v.RQHte )9.BBC0\5oi#-NjHa܄P0wfbM Y%.Fa 5)\LKh]p )V82O4 4I0NEvcT J9@"$htePB 1)WtPjҢMa˫@)ZħX-#Z-QjM01uVŢ,I2I%,^Y%^YVAFq0p*VJe:B LKdQ rJnƀ KFc8蓞f֍U3{N\NM1ٓk3X@* 8)I0[0CZoloKŚM1THo- M%d bqat+ mرl,2D " W-0P&[i4@d(i*lI%FlxLi Ma%k3l\Z7x H(`FڀA`RK /".n{qI4hgPH RGP#1IHr &0Q 2KI,:Ehi˺5p400R k>l  H)Ss$l!zV w FJxPOS-C~N[f1pM!nFV< 1XDE0!c=AQ5;`Aa!uKC,F£l2s~ZH HxKə܌~ݱ6J Kd/ݴ$$ԂR$ѣbPx: !VzdCDPt<,ԣ)e]ε%˛Κ7# ͌C8o:l?`ѵ`'R]0vE@` C-BRE TGA$[!jaẊ+JXIv)"lKKimV$~20(QӍ"-/¡–{]es2$IhB@p%H`*,$0;Qь}{|Pk|hY7Et hs`=P @DKG%dQE%9t8}yqpo}ew+5K='&e;E9$My;+wYǦ9;̪ʫRq.,ׯMdns0{xx<$)9w&ΎyKc`r~p{k׬3 K.Asq$^&_ $(d] $H:&I" O_!A({ 5P%% H6*8wA!vھiڷ4ҫcmi[Vi~^{i-_lGDbK0ye$c‡|zs\z҄> !e ) e$A>,x\C=.f7țd\$~#H0k.}2DBK m&|qK_ru%iu)$k6˼˴jٳf5z\R;'Nۭj5h&-EFKElXZ`2IѦ$̜$ BբQkt5M%SV*孹[hm ԨDj%&kI&أhkŬkckb5DV1ZifR-("IJ 566ƌmƊB$ƌmi5bߵt{cJ⹜p޷Dic|:>emK(C JY[{9y 2P-{W,_wo)u{cO]׻阫)sww"T'2 7fwgc!9ݬQﻒRnmK2gg}n{{;7tBsY۝;٩V\TY}ڪ)r^Qđ>M`Ź3^o<\l=^&KHn+>*5-ߦnwnN`kZUl^['ͫEssbƷ搮+,,or7[q3lDпw=@qȭiͷ-Lc2;=λvν\;m?=m'#1ou{罽 o,BXPʽ;h/ttK+boH׸O|2Kɗ8eĎ; n}ֳnD7<^7yoXԗݞ,wr+ٜ{og>qx9<<0>=`y}zZ-1if3voF̹xu;rlZۍ靺w$ύ9u9vgZőwM-wɰקϷCb},j30zL-^lnMY4_vm,Y }{5_=Ko^uO}nq}36d8;u[ںN/W.6dzs7Oo\ }_qq2'3ٙL'iݭ5ki̟[o9MgΩ;Ck&H3yOUmUp mx>f)s}5t?\HL>u[/_c?ɸ4޹~>}]mx3zCq|fޕ'%Թ?H̗J?w$R;#wR}suuɹLi=v(>",C! J_) Z@_ѬtfOgC})80T˔Q+øo".Kd{-/'/p౽B|;N!5T1&I=$4(!!bEyw*}e!QCKM9rGdh/Q"De w<~|Sewi$R?'&G~(8B D;aDPIfLqPB{I@Lpy"XB%ORgDWꜿ9^Gnz5=4>!y%P'Tˡ(舺5H:!Ȩc4;#h__;kcX`\mJKB xl[mwpB7i5ŞJq>CzDC\T2f௪@ d>?Gi?02ȽE_\ pux+jJT]\O+?E^/VkmU\}uqOP)@C7!CUwb= ;%轻>a#3ηwW.Gpx+C8}pA4Mu״i@!霰 oRMCcz3@q0}K)0 ',[TsnlW}tw4"rQA w$RDܱ ?dT$WE]%AccؼszNN3^tJ  ?ט;[7C^?7@=s8y^zG"NN!~V#LO9.+&A{`k+oP"޼%E0zax!:T !0?/uj2_=qǯ y,@ߐ ? nuyw"#{ѧ;ttO8{:}ׁjk'dzxAxC(?wRW/ Y<DBG?zl9ނw4N }nټZ6 x;\~FmnkZjkr6ƗQtZnPӭY<:[Q^8t;k[w[hцry#wޖws9Ȉ5\9[PTVԠwDcv)ȊBUZ|R2GydK9GhEq@C\H>=rU^MsFU::GfVTx׆&R⽀eM{a\>=7Vr󺽞5-r`}q{Y~EgZx9U:yL0Z{I6?nO]߻ۖ&>cOsnpa̾`cᅴCh܊ؘYnFdz6lj4S{ ,.V{DG؆fAyY,$,Hm,1- !2,ܬLs+ywww[u]KaAۘgϻ&{:E3{u{z٠{uܹIooɍLIw=$;6܏{ۻrn".v=EL̙ݪDj$Vw{'U*y8 -FՖaVݛyރ)>=77g]ZY@͔M PUUCS@ $NA~r.ZC \%I sb؅U[ikL )2aMD݇R%*fb/z~紁jS*fMeLwrk%m3;cy>ϛ\tγuek,Ӭ;K}mt{鉊RTeny^+g͈LKS#OO]ǒW' +Ƌ+ZJdj:JZ)C2T@'Wi<gG*4ڰ˙׉GO0!%M%_y G._!BI+ָ-GI>{(zu'vWUP.L}iv\^CM*OON84uŀd @q=zP+ˠ텖),\ntJ=H间]>áS7T˧"ۢI$\2#>(ڃ'0@@~IAHIo`~/|m%̶ Tɜ!. !ʆ`h̠>\,V .?Wb0G`C(_^ۡ-ݗ3X!!,y l8 h솂4Rv= , !#_؟Q'U_ppǯO$;of/!}Qa;싅uf!rG` &tO ?O;hw/xly] BP12C|oo!]J_>aWS"=Ih;I'{cA}?43om#z==;Dv2_dVBEb "1ˡȣuxI 8]ܜ]='$q 1݃JV"u=:B=g}~^O~Nx/ sn1hYoO?@/ˆN)` tPJ[LzNrN:>уzQ!ʰt(hN-bfD-oН@MABBD0$@ >EU=@|+ŗ>1pCso{v=`C/僁_##~v^<^{zyHyGy'ybcu43L(k"=`)ۘaE`A]@Ĉ 5&S4Z!" \̛uJBI3N]C;7Opw ]VȩItI[ގ෽ozf9Q &$b Ҡ1 A~:]omZ&S2d".j"A4]"%J Tz^ס+wɺNn *X88RL: C@}/t﮺.ahH0<T ×-Νueݡ, ADT:Ds.ޙ:7qQ7J)$tRžKO|3m-sߜx6./zPk~?$Ko٣IoI[#H,$H eRď1kYdehƚ\団vk3SAMN!7ٷz R,̗22Xruc>Ў]fH|}b2GkQ˖QqYj}S)l/LVs[e b5Nll5qfތ]f2f[gz9VGG'ӖJXB肀ܩ\3wŁ y'!:K:A'NI]+*w HN@WcAX*~5hj 72w.b]¢a\.%ۿoLj쮤M6 z(!nNOwcqw/[6tC˗,Ӑ}ݑp3ǽ/ M}aLeN.tfIdz5[@kֹ(Pã 6^Dqw zؑuI,4h7;~0*V= b ^@<7/Wf)0D;;M'Ǧ4͸ⶍ77M0яY5,=}A1a!"H$Ndnk]S++Y ${}Uu9FA: \c'fK@f`o9>IBj\]]qؾ o=,Z;=j@qy=tZÍ] ]EǛٻx3{y1hɁ(]LLLC}H񛞘,Ϣf,; ےW52"b9a*Fp]EE0f//,ad^RF>~չ|ͷ;5vJlz!~,/ɀgEm h+@C=WPyICoa_X~s^/m<聀ha81Y9Z=a =YNG0A;|L (` hY)m#Np,­rͤ6vD5aN.If;sSH32"wuУ%ugN:'kܣYMu˥:&quvMB $қ7SeIBprljB"HifrԣJ5dey9u.MMԙ.eǵ 3hF/Xl!B:Fp>]݄4cAB8r' "2(RۜǷ9vJCQwEQn6Y'MʍyGFõ6(]p(ۿz-wo6L;fg,z"_UC핃A5m>duQ&,k F 0Nt}/gϏ?V؀y(HϭW"}l;=(ʅR<@k-=ES}_;m$Wo?]hK!:,}9 By; ;ŋp 9eѩfD˳@9{/yߛ^A*d9m_]C}u95p4D6%v z_%qa~l8K6D_}gzDټ?~oC629HUz^}Qﵖ5k[3r94 $ַ 8|bhqh<\ *aDâHߠ6I)U]q p\*JqΔ܈㍧ E"]jdY8E 5jUUTqU_MJAuzAf"i6?/C7",>: [11>V EnY?QA0H:mR_҇9ɴ*NI%9 Y.&׿2j]rsOR9e9p' q6AH nX$9;,D%}_#>7 sS=k"?g g##0,>c~7}>g}uFjobcS;f:Ulet,;":GEsߡcbrރQܧ}7}wM Nj;Ƶz)J,st3:]Ө4P$AR +yp` +Tyk}|H}ť$(%L՟V{x2tGR 4,_|X?Z.AW}9ݚˋGfYŭaXbAv/$L 5Wn]NLlnLaf`0`CRLx뮺~`u$ugr1λdi/\QBH*0I::/WʷBudjIYlt" Gݹ=c8$^zNwuDT1:E0Ϊ#^8"LN8vԕ e>!](-1~[$#U#i"ϧ7O>J+jn4AN˰ 3/@; 3[jW|'^^!(u\ 8KH/6nIÑuw#cW Ӊ1J*UP\_V(Sf Y9rl5!?E1^(%Ǯ}Y.M8Di'SU*! "ڨ Nfm۾=_ܒ?{4|MN:MDİ"Ff`[EB˟Z Q;kn`0ӊw\qK/O)Fx,[m$k{;$/97%IYoRzY};{LNiW$c9oh[o^>o~fg^T}\ NB qbA9=o(}ӓf;sSH32(]ܖvtJΝu:NҺLW[:Itήɺ-0ELș VRRPr[(Ą+PX3WFRv%#N)oE_WO@( Z4@`o~/5`dC 5aumnԒwlvD ( sӏ\sk6rh~R9YDJ %)%=l "<U+%'m3 #4m].XJ{wB cbzK IaϻE;x̴ޛ6nyiawA=Oefߍd|a4nzO"M@02M2@2lAjkpcXl"%hNۊ,Un6El uK`!TMQh.eV# 5hѶ0nؙ<0]/PuUp:0z_ 7= K0 2Q`y=I BLF lkcmt b4s*H9X,, tM6 IF{עn] Kӗ IceRgjEuN[]r${|_+חztL;`sI$4Q_c!\Xb(oJuV Jĥsu72U'`[z=<j#K?[:ɝs^7كr38[fźVs[ٶ_^E=^woSl./on@Ra€3?qo+gauAbx#"nu)Idr+sV]=q^g:Gzlff߇X h]dH['eZbQW~mߡxE<\@fއ0ab9 ܴt(B*"XPV5To݄<,D"Bp?lHb#@Ns^@JMoOl3U]ז""Upp)j*No롦uεUJHSԑ01D$6厥u$"_}\_eh d4}T 8+52)2%޾nao~mW ,L&$XPE !%~`&+bwEGrҤPպaAj( s|#JKj?*"4zXVj=M Ni cCczޔ6o[wjw{:<$A*=zhFA۱q6=C{$<!yzx|#Sg%fu_Y"]h5{s/^M0{3plm%^1}*`W\R6;K$]G]unIx X^sU!*oԓjhپyp\P9nK `wzuzc"\1px㝼JK׽z^5k0Nÿ!$~Wc+l u4:k( }'bQ3:voE>P-̘}] (R@%Ҫv!`w*K6 `q='39uV2@ BYA.:mCUޯ^F kNs[>}mn3ݛA4ljZ5YXV03DC~UWтk/X )2L=:1wvV6,3|*ӫ~2&g;"8r AWq~¸!fG9y ҕ='$8"\ &G/Z/fh!뽎=01zFcqLVvJp,ZLg+pFA\IrD(vY̳[r' UNDBkۻ2 F<U2 %5LBE\@4B aa@{|G/\;ȎNq.9>OgvW6F.mSXRRC fi51EZ6 aF,ofF=ulAz]o7KW=1K$n0Q!!Sfm<ٕW8zi*zIFe[lbH$$lC'>*jL|]9 w;/.3G'< $lAwU*ܬ͘*lN[Ajaw1$~U9n^SyLev @W->򭡻ʁ;TnP)&#w홆8G5j45@QP%4Jif^to*`>4 Lv"#@lDNWwBY ݇RvU.i"@<U1ezz/E|8QtSLۊpPGN^ @ ʩ"$k,A6+>^ŮBSqBH@, mǠz.&/P@18mOz-z r9weLr0I=ŗa]۵iC q[4:jX<07Um1}e޶ۭo{o:܋uzhfNVk1U_ cÇ/ | ex 8`+{픤ϫ(qKm<'n!37yTW[rVx7 o.Gy.fUB.DtsM61rtxs}"s.ru72^i/k*_dCoAةGȾ(UT:]Q눆CT(P-"$V5,ILlI#Jh4(1Rfjbk Q,f4QchэD!Q[F"J$Hɤ֩-%bɤIb,b[FōQj61Vƍ@d#Fj14)e1D%2d͚6fIFF)*II#JM34 I$$&*BA-&)1I)I0Tv *s#ҏNW}.e,4!/ޖUaJ KAȸCq_Z~gS5ΰ&-t *GgCȎy#T)ȇ(g^MTj*N 8ʡ$]2Rv76t* n7UKV ! HcrRMzKĢ &'Tƥn຿]'S W,-.溺@d䡮Y[diY=>mY̧{ }ٱ5J.ǽv@,UvڅNk汛k7ҽ]Ky/`~Su_L_RA~ SKmLP13nᙣݸ8R+0k pHt1@4Xr`1WAs<< X^P$`A!R3֣k+:ccׯ~'w`@,vHd1u#+L{Y*:ɪjه3w{w`č8j 0̈́I۽b=t\jZ zs8ރo52,[ OXMNU[Ƭ-l„A ѣuhNU4,NW;o=z#E'AfgtјdλrwΗ_z;y frXyZWر.;&H@ҷM/ud!d).z';4GHT4 p! A4HDy85T*RȈ m?}H7EX%RT)DDIJSF+4%d$9B?C2 6$CF^-P͘-ƳAl2I4aDH#Dtʨt맧%8ILJ  /u8UIsy3@3l' ]#sreXb4 @a :UDD/u0V 1 M9SSazRFϔC~c< 8P5]5Z ޥS h *`*,[p!JLC"ng XvtuﵾUL)hRR5)J)H[z1nqw}-U;@:1Y Hf6X@phFJE1D$/HD\Kֳ}* $Vi(ZRJ)IY$D::)&}yWx@IRs GXW>ZU3:hS (gvmoI>vsAȘ'}~i ҳ##ԝŽOGu]T)WU.\YC˶, LrM붢W"`5f3aA.8$ xw}^9Ik"rMU\5;XO <<_u\2Mۼ"1?]c},Ly_ :maڀbTѭڹJLZ,7x!v?hp\do! nZ1[ @U$\'5]( ׃ZCK# F`J]ǏSsu^9j A&n,"34V m_]hᕨƧQn7tkU Ìf aր(+_Y),[k{7ydգOMfU"7-HYE+l!] a&P \ӷ.ۗw",iIJIK)AL2jK6l2&ML]fURM0:^SfO2m&&Zg,1'WR =T|B)j%1%Chʌ;rh|d N}|z=]wy#7}owzg]K/zf~*XdDfD o_-" ǁzfW.ke~ ߵ5x!ܩY0EHnS HYu#0"P .2|XT>_} s0;.罻x_vZyAӴAVLx<=1fڞZ̕v߼ܬK![t"sk7{6kz12uT+| 9$6^WC# @#f,dvi]f {Λs1ɽkpYMH"f`)sN,rh keI޽5Ln5$us=kɧAI T,o:2J jHT:&ML<̃=CstOeW5!LT03D"Ud1w1Ξjǻ2Ξ[-͛ɝ1,!v%ɢ\#H鯌3 hL `܁MQ+,"u,E]*Y yY\']Iڹ . l  suռy[0Ca ;fgbڀw$O BvYHdоw *Eja'GE;\ V4AS!:\@4=NhVtŷwzGN`G)-HJ( j`ń%|xΤkqwƦ%ew&PC3F]y|/ZNhxC@7I_۫TmlJm`~<10u?AFA`4C;a wBWYy}7n1I+Cjy@b/(q ih+|i}$xF-: -BHP5KFTWTjrt@F<lR' w`. Pm % I 52 l, F`|j 0$B41f@8 fnn-~nzL5j5ŕFh #S$|/]gVkΚ޶9,v5ֳQQ޺50;09kC㵑Q"szӼR8Zt#]H@#sY`|«2{mI&܇!D!Q07gYτA!_|\K\3oϯ  ?6+qm^VD{Kp]c3ײoZmhI8hZFŀ]ntTA&CLT@tuӺ2JeM44I)e4$ɓ&eLLS%.YS_Zkue6{]\NK܏8CǎDpX@:-&fIEA;~ᣴHa=,0Ȧf AK ,/wǣH%'q׏_}h~PILNQ:k溺{7ٰKʰԕEWN[`Y5UIoyZ#t ߘd ^ҜX^"!Dnq~wȹ9wu"d[sם&޻LcT[Fܷv_Ako:Xwo{.Y [HmהRť4sCX7ҴGmo¼zu9<`mz }A4}Rmkp 40@H䵞]ɽVuEPuJ.ps}l[r\޵c*9گBa|&fr#edA hmH!0aܡuy3rs8?_5~NtA@+ϫA8 1CT8 |(A9r%Zi(ޱqb`,K!38ٚ8֪Gu0z1V$iŐ1 ub5)@`$WwnI/*鹸 TVcC"v7wo;zmO7ʠ0%DE#TgD>0|m$Va0aIS'S>aÿÒ|Nz:F>]Ռ? }HίȀA(t@PGR?xu#鼉u7t*Ij"xi` a,0tYѮe`u6 i $FIy!&R`E el0{^%aX$-HO!uKu惫C={on)!o=|w^Q3vdNjwygtmGF .nS<㣆jfbȻx[0yC zFFmۈ`wYlѬ,X4hѣF4hlA ۑ#@{YyfhI<;f 7fem 6B5 EAת[l@h͵ 7fJq9㸞[sǍzbYc VWAG& [s2~_2Jaon wX2~:k.uuuxv跤uuٻt)E(u])utrs\QQ^wlZdT`0UKNYݷ=VJP !cnýR>PݻZI0n;!{Jһ=3>}lvzc}Zo,^/a>mKy3bp9{L<ɋ_{{λwaI^YmnS'Y|pTڞwxgDr]],GCd4H(hRv(_庠S!Dшn}b9]rTw$@uK- A6}5r֑Aho;=NVX}7hɹIh-Z<,BݭE 9  Ihob5rJe1Qμ^o؍HsX]FkZcy\Z.30yMa 9ep\j $x$30MoySƻ[|֓|U6"Xࡉ_XEzhZ-(J5L8";`% BqylJiJ(Jn٢hZ-EEhZ-{׭EhZ-zhZ-o B];rk(J(J(HNzAuٮj2Jh`pB xr uًǛ݇rfgS|D"(J(NSyӧA(JEhZŢhZ-^Z-EhZ-{h(J(K}88PEhZ|wEEhZ(J(J3(LEFZ:-E (JG/zȨbX~ a NU 5b ('R⸴y~[ON֎%#BP% Z-wEZ-E{zhIBP% Ba\nJEhZ׭EhZ-_֯Yʼn$27ECMuF\ zƬbCsw\]4ή]t]u؛ne(us&'U]RWL)\]w0뻕h!bU)25MI>D)_&G[G©(juάS&WP9#*>R#rL [n9ڋ$t0 0r ˶,;(p@j KCPp=᜷\˽٠hU,G:PA*ڪ̑k$fkQƲNW0.P KknlA,2n@5VTOWrnԾ5霢 "|4'~!vJ "Sm4o1@B-!@R ]ytDkv)x"C&(W.9Hzׯ;7# &fA,_!n=iu+5D1#8CYpZ%8 Iw-&+A%P$ śUڮm#[33Hei r[ *Deu N x4`.6 YD Eۗ!2t7LâI ,A%vI|d n烆 (:rlfCbCQ^kW^nZN^Đ=*0žҙ;uFa':G h@YdU~(T!v] (3{fs{!˝š`C$5h9=۬c9{#p-myg4(W3vl̠i$O8oc7$^{H}i-(JPlav &%0Nkb;n59G6te.d Vf/ЦMy>UfC)ik4[z_"HId&رA2&_Uf8h֚UX3n&/Of^\wQbHls `AT.yZay.L˴35 B.ܢ2_]ן[s;6I`ZvZd,zN}y9:bD4A!ʿPxx{Cd4J. A0?W~zki<#g^|·SI 7M!79Y}E7 amrZL.k{Z4!D]%n+Eci v¤G֦[j+1md/Pޫ0v*8'(anVB({¶f, @vB`8]AgE͕6ڶ+x\;x1Cc@r 1M5*3BmPaDB =V§8`X&Ĝ xbط$VV8enz*wX{_ uh`C۪Ƀ];pA!D' ]o2a47 4I2|vz^,`8(fPɭBUѡO½|%;oPqׅbkYc VrĀeP5 7U,!ǂ86`(*J 2B3hȃt!1uW)wBEHh,z(v^ DEH QA^^}qjܽo4TF:cZdi4݌gM`B`uiX RS#nSSZn1ƻsf,+S Q;=*ATD谪؜,*BITK2Sq8)J(G<*lxÁg_ݜwRb,k4 M@iu$:w$&*v%d%I PʼnX&s$$YHt#J*HX%P@ ! YFDde޲i@dR2ĻTpHia6龻mJ=3KzcW%!wB`1۹q}.cXH9ޅ8gNnLYytX=- ,j(FD2Vz,8{\z)2ehMf*d;z'wXsM,4xp.д5 ʼnxÝD6V G2N~k ] ^OD&|M@Zf2,Ķ/!N#,n dU(8E%!;UaTDNpj,ֱHlFu"Bs]59u5M1/Xf9i HL:,eȆ-ؤqܗA<8[rQ,h"{A:MiXx\ z@rtd>7r{x[pT$`Uؠfn‰zUx#C|BM"t"dˡpFKwW腵q8H'x4'ò{|.|U\{ p5H Iax:Ypa Շï T<8*A9>[zRmv>G*8޳qz۰:x-;C4Lv1z*K%C'eX@AAHJ4aTc#>T*4pw8;=:#֝X$tp=`pz {{^ ;W; J/V5UUOZ , z K0)* ` %B܁6{ٳfͿ2|tȄزJQRh#kFecaFSQTGjV34AA62٨FmuTfEF6Mj(Ѧ1-bGjԃm[EjvvjMuZh)1ZQde5BjDKiӐ2-h& ѩO*lA6mkרe%2F%EbK4fC5T ZYj,LXZ4%dѶVc6Pj56)T`MCE%dƥ$ʃY#TIQZ($&MɨỊDXJC)Y؋hRmlmT)FdbbI(JXդE 4MLm5ce1VR!UZdE24A k5R0D"L JUV6KcYFYX"V b&HZHdHa%de%H$լli,ibb)PB!fh$"@aVѵ%kZEYMQ[FVMj5f[EeJJ@HWYpF$Y4UZVMK6ɵMMIRͩ-RmPVTUXMMV5F**6(Dfd ddF%ee[LEcݬZFJձMj+FQJ̵,0ڦFKMS"5h UJR$B%>` EL`$U$Q d&prfUIdZlV-AIJmQTL1Db,d6)(bBXmQbT"6dm"(DFHKCd&$&$Y212$$122٦VeHi L%#( m* cX0&88BejIdn!i hLSDXDĒ1@hU 0@"RB \TS!(W qCf*iRDZYY%` )%I)I4Lm5e[56ԕԤ6bVj3B% k4 ٵ*UfU3RlTM-X1Q&Q%Hh( (ҵZ-mXЊP%"4% H(fec`B94)3mjZ6ңJS&"* HP `EVaQ%J$%IBB`X` %FTdddIVVEdA  %FE %RU$@eFT`Q`e!@@UeV %FTdAdAaP%FP BXeea URUI@XY"Q TB $REHEYRThJB)"P"a `eQ ``TA!j"AIaPB0D=Lֳ\sf{3,*,(fe%Hhfbi $BHT)RLi4ęF%RljfTKJlT"Rʚʡ(jSFZLI̖ѳe($)$PX5Tm"6YIiU"M,XI43h&&j%Yl҉h&2JHR1&ZilTIc2 dY$Ҷ1iMM46V(lc* #bQ!T@/-ԕP7;c9aҹ0d;v :suuX9NEӲw_Š={\snjK\[X6nmXѮkFP 19v1QF!ldɍ4PPAcQR3vmeD26ͳYrR$eĝۥ˷,\E2Ȥlwh˺I3mLh0W\PQ9sW;,gnӎ-#[ )sen C$DԓM]]sRLr(e1RfPvu%7w']tP$rw9݁@S@6Q;"Ԋ;rd;h*.j\Ϋrlw9rQl5v5ij:6c,R9W (w)>^_s;??w]j*k!0vtÍz&'uxɾϿ=f$q>8th8|b?9uD ;0fd!PV|4ѧl3,rSt}H/r]_DdW0(v. 뎘w\2 V|ǔ <*y{ykZ- ",306)TF3;ܪ2ή@Oy?{y:k]k\>cJy7O}S)5>G?}h{;~x~>o-?dwPP_H :.Nf~T(OrffGCN{Ec_zFssgO(#@PDz=ےt'oP'PHt$HoFD"\ѽWӬ?첐yWx̏a׳fc]ޞdf'O_ kJ&ol9GmUCÛfp#1P:$ E`7dF OCg_ó], 3NhOe?qUq! ÕX{LϒE!?}!ϖS^ؽT8;_#^~C?fDϣic󧋎u?DR#Xo5:ݬC G{D;WP ;Ob|!<L<W>UX& :\2GO3^]|هoIf? 3ӕ]jfaEE ,C@>[1۶sQ?@^X?7~1yJ4'? ;W#?6guӷs~G}Hրlgx H2>fyfk陜mUmSYMcY)i6ppご䩊P ʘgkOS>c}H#N"%Zrs+SXՊsV'OzLGD_!<ǭ}xc{t1w4@T x=;YS(OPUw<>ӻ[ކkC׭gM~, 05k Fh>*=1I _̻zVty_OO4-Z A(д@H5mv~aܓ#tB@.uo0&ЭpsU/P{58fbqHV!0&2l30۔o6ZTGX")!pϯ?V? яL $`hx9~ry$Z-kG 8y iIVYxh<04c{̣(wfa{3*:"| uw+\Nz(zkѣއ P=_N>}>05~.ϟmh~}oPcH?'ϐl=WU{cy=x Yɐmǧy6Evxe~߬<0!H.;GJG;CF$"}|OϽ|+<=/L{V躯ch J?"'wm 웽ޛ;8KAb$ܡ{}6+}n7E UUW ̹j'(|uu_w m^}d?Q258T7}@2 _;$}/o^> B$ګZa,t[BҜbmiɗ~e:>3?= iѤ?jNOM<~aI)mAIz HӨ1ѿLqOhۢ(WQpd|fr}-C9`M 4Hw@InEυ/8CSaڲה2t0%Z20[ 5dпnbYo_=Z~?1=I_˯oi.pm>vMm?ŠG/sT^Yڭ=4A4Ah?I/q51:]1*۫:Zfm aL4Az>.Dihk>!ά4<~=t;ԯ/4u5]x!hiS\1b}?`P~ZNw{Nk^kgk^t8) R)A[RI]Jc_^fGD%P OW?[~<;t :Ϟ Z4z!z{yC ïXyBo_G_)e$i bܯb>'|P0?p; !B绷so÷Z/=k cѽ\uyU}+kfFfgN!Nxrӷ8CE'O6C?KI'G>|ow+Zz-}[C@Ո8!%8#ׯP'OW*QWz^W'S ]w}<{*x'؟o醀C3͙>1 C/WЇwwO7"ZƏ@3vͳdWK/$gn}_MhGn5HNkGmk_ߏ~&ݸ$ 'TEׯ-㳾<|pw㆘*8.F9YHhd͓R3@7/؜I-֒I "LGeVU{<zU~4]Ījʬ?yloY5ITQT=x=KןV"G $QXE?8;]OrX{mC DCi?kK#RVY*P%f@@!2ADԄ'{|>lc}#g_fX^(obaU /O7}#Ǡ+U9㼼>b?tՆ|l=7|'iѡ ߢ_>ӷy~Gcy3X|GH:yFoz3Um&LӺuZ泽l,aj.ӭe|C[gp+{5 kIZVjhOlX>M-2w)[kZ"$CLO6 UҤ?8YSq}][Zs 2\x8?KtϏG*p>~!z'sCOQAK;?_Ea\٬AX2knU76`s[mh*6s]5XVؙs3=C5ݨWvJ6ZRwkLj;ԗrQqeԺIr@*jfꙓt}؅H9ۡo!ϧnlLozg!w:?8v9QharMj>Nz\ܽq4?O.dHD(rB@)YAA*t6vzW,X#(+E!2A )&i, g;C}WTFшKBEIU\<޻Iiha 6}iwFD iiTiQ"mZ(Q*MXFMhll6-5EmkEZ5jKeMF6E֤ib#j1cmIEbŴh֌͠#5Ehض#dEZ-lj l)Fmϴ5u3]M\s5p6DN{S4:j35懢eq13P?k1f VAwf !U<>@Ɋٿ?B[Z"4 H~U 俘?뷶)Ŭ5j0~!S${ƟUXV=1GsҔt.;T}$:5gLTZNG?+q9{Rn)噎Y1Vk^u[DR_[`ɒD^DA5jHi݄DaI&CD:abNt?/UU yh4jϜK>/[Z5_g/L}zt~&6=i wo;:-jd! p-BMɄeU@xGv>3,89N1:6!߇"?@SufZ~F7솛JmXTUwcd(UMaխEk8.\__i_=O.d?{N}Ğϐ?s1%b RbS-#?rA>'3M40J,j>[z@{㝆o+,>joMcL,4 \TbFR`Ĥ&PAI)iEc0s02q2i1dIdUba6(` DB$h"F!&,&bCf*K2*)JTb4.&DA2a,bD$C9@A$iqexi*$kꖑ B[#%D2bT㩣YؠD`tM#FwJJ{;kcI#@D3.)jծW]Yi2K4*ǶeފSF!Db?| f`^׾%s\TOOUE/w_XRzOʟ}o="+.!ܽN:활Io~\hv\7G,9l܇m? 6 OjM{]fii9(J~z&ܽ|LŽքKOW׍DQvmNW3*4ZHMDMHOȗd&FFWh$ e{>x[McE=>R9}>}Loῗ?py(~\yns4pX) m $\p8m\35m2ϓ~~Nc皹33wo AuP8h@x{;s!9<>bBX}=PH@1/%Ia&%!ÿwU'^;jM,XMTCmEvt~GB{8iϽ7Cx]| 5.g $y疵,03ݪ>dނ*1|{쇣 ;P| &[q]u-A\jy:xy;|{.sQ y¸sO'WT%H;gIFN*{`fa36aqZ2i|}sw I/zMݚwB:~3: Uh<=x{Y6E'^o`h^}OI|20g-і%>z; f`|̀DkQ wuvn@`KJ5Ѡ<) QoU@x 7<-'i3Mgm˘i3. 5γBXDRmWN3 ykz֌\ֵ9D~o(*FBHLI[4437&)?a|wʽa)5x2Zm>kwnZ:Tܰ| =qH~ߏwԔ{1p]_Xo_J}+?bJ)z?~/oRVSSɽ/Ć/=fz?x{OV_=-?%?sŏnؚd'f9;o~gVr @CXbMI2ZT?W2Wfd5sSQcH"E5L]N!NdAlG<áТYu3ZVZ̢< ˾leDr9UG\5ִaZǴRh{2+uHa;^%a)mwkF9a~C0 l?oc'}ra0338';=ˏ9utѾ;r<{~sbZ蹜vwRvK.˛::ȯ^$A?,T[Ocg>GɽG>D~&WFe$ϠDC^$?O?h;606Ӽc4\뫂VP)ًp4kkax<ƷRO/"ESֲI+!F5jjm6I(!u"Lj"EDJBmec-YXbKcZ(eMd+Y+!CDaALX&*B*HQ0IQ2?Aj6^ ɨ걪fzxxǫ~zt㗐5 E&KÅ<;9'3Sa&*UUWA=jWѼ]Nws4h3:8?_lm""'p쉴=phco۷[9m{hlhw =GN]ӎ=&OPDyfnrnvp{m?߳o\Jmޘyg uD}b [_$I 4ұ,dmFJB!?ȁ"&¥}S/l !`@~9?we~׷)UHw0aXrן,:TJR$Ru$QyC{*ـA!.Mr&N)\|:ʜ´SƂ*  -]U9 ?S' T:!(> P(S~?|'E'mYVw7! 0 IHnD"&C.d'668?q@D?\|J8zA?!|}e-'؂(/ sb>#8PO@ }/`O$?n$ZÕҧu8EڹBU AS6ZXj Z SJ LLAB$`(ldֲwL51LNӃ P5XaT cvݻTIzPz \4 aYvQW;VCTLu3W5&fg[He!PC2"s򨊒'-'QIfg'VhfPذchw!DJIX_Gs"H$TDvfO#T a؞WH}[0A&sم!7G%8N^^ٍVۦݜV-k'[imXzd8BffN:B=Iff މu{IHAW_W`^VgqkRk>6r4jS4;e@Q"6Nҵh ˡDaE* 9!:Y"H Z@< 2 $B*J2?<־O( =O2pzN}/X8$H)d ?`ۃ^Oa TƖ'3twr@/q]?ɏOГ>={}v߽CԛT;|4~wogyDғIJVXXhe*T{0h h=u}Hi(h$%IHF$%2Ab[v>/_?>T}T>xJҥSiF#P,xUG~0VWFh!m@\J̑UIU?$agq{9 4fq}VڤI$H>JOH}eVtॷn&3:l#S\ܝˮ͘렫\7:fMqwv[;ȣIbԚL1&5䒢[0\ewuꋥquv]qeӶ+(it$10K0K+ND%uկa7ol+,|$O:c5.Uf5?HQW>ڡИz/_g333^On? Ib$"Q!?',U 1qل%0Y2Rl[TU~Aw,D(l|gU&LSZ 4|ԇ@ꜞ,]!52~I $;OM= ϳ1`l+ՙ㎜ 0"L&L)x|qMDNaѣM"&&FM羲WJ.KRI$y%)C  \Y&W Aš8L0jR%;\c=vR3Q@b`$CvԫNI$jV 2 4(T {#,tV@$"Rڛk*VlRVSd+&Uk-5bTKRf(B¡J2)HiKZդTR22 $!J’ L!2  ,1";W}1P(3qiȂ-FEw/:q=^a ̞L#d$L35)FN`aC diEd  QQ!.nb$NUUYTtŇ `Ёw3C`TRORd{Ԋ5MTiSXΎp ELQ80I53QVc÷1Nogv2JYd6Ym8`+# ݌ȩhǁyuN36h(wx =3A 5PH g ńf`-) _Bm UփLG>fte2 x_CB λ[~5%k5f0)LVr( B,+"(d(ϻt+̬?Aw7.3 # &>HDwS&LY&I܈DN'w͑3αѷfS&l4+F,u! ͓p> KFf {!+&X< YX.% Js0`F@g!=HԇWdub<"FˆV1 bC zn`XO<5ﶫR̾mIeto~Vo\kUš#g2>d$g&e.ьr4 fe6 F*)V % k4RSFzʋ`jM@ aLV1Ǫ۲L(\eS#[ &5*l5жhg{̓7.VMeDcxSS$!KV#Qֶl UP*0Pe Ă4 DLiQM8‰@:V'dd{uy|TjNu]FwwHeHVUe˘$p[4ϒ{&uؙkX[fY]D]'eP|eE T]"*J%AE<])Sg2pYUOrny Cs&& "4( lVC "'2=af1Yd\:Ew&FF9`Yf|J&!ÜcT߫֙]rِq &vӄ2 %we"q DԔ0ƳWJׁA?p}L@H|6T<CD*iiŏVr1UI"bZhĴFF3%wg"B8:<8>KtnM%屡@$W@t ᱪ5粻1eK9 .ԼZNvN ^N}g]YoUHIV1:]\CUN]7yWQ!P@zI N(YDy7z7=tV2 3oT5(hVG=[JU< h$h\6QW80x' 1V1܉<=NN槦8&  )ƫFQmcm*mRԥskOz9[8hdfMA2 z,THP`Qt9)BǗ1AÖ۸`̸+{O#͸gTLS<v{3#3! ̉u:Mfeb@cC|86UЪqCH\a=Fpf=R+mF*O9E`zۏ=ɨD<8\{:L<LӶw,^i*!y1.eQ6`uA;r(d\:Bpv虞S@1a38{"ÑF鬳[.e?&UO >UzaN?_2}`y;kkaE.\#*&e*p' iCTӠ:l #,0 h#>q#bIbeaR5!s|@{?9KkGϽg{Z0X*@a@<@XG9;LIV b??b(xi}8vfzolr*囶^@Oҥ5JĒoـfݷ (XLك)?N>Mٸ)2z }cGpt#Jq6t . *h}=~Ǡ/dz:LW8+G`G4'1GM_~Ht-5'~]E ]Q40$?H*Hv~E3+QbPL$ا?yB&KɏQI`ō0ܩ+("LU(P@̾okZKH{׎\o~KAm`B;=K:j -i@fVGownيNu<̞%Oo3;8=xLG45o F?8Cq ?X0L)H,$xahS4d],Ƭx=bѴ>h >pUSGң&3 ,ҿԞuuؕnխeBU2ڡV-ekE5B@ؤhHE\l۫d5ᨒVndĊIS**[i^;jmdfhXHJTFM2$YmbKd66`jM- l̈́))S5((BJR$;64bIBhM "5(IfRE$f$K,-SD-D3ma$RfYT$%%THHHIRڙh1D!0A0/Q9A'C^نc OxDDAoI>x>F܌2? P$E~/qb3QDTU@D "ln0%1B $(NG?pJ=z8\8;\S3$dz|cFf?f?VghiU?$f|OqPOeIKERt&9@cpo94( p{ws^ǿ'{N0Z?DGHjH(+?޿=UO5rVnn~:?n}ʟ1PK *Ѩ2i&b,d`Fl J 7Ԇ0狟:}1'GՈq1ee&_:5"t9јqRR~;XQ'n.DP}={]f P II d4,B;Kѕ2J0솁٣K8fkÃMifa:DDNѤM'ny6YOG&:'ǓǬ G&&*="jm.MkɊW<a0Fq>Ӑ~:6:DWUrڪ\t}>M?NB!ó}}!Ȋa~H ;_oO\$ZZUJ ?f)pYON 4^P8e!QE +#g8 vm]"m ?cH(. x_#+|?U=!A+A@ U+0 L=#EpWld;?# -d& gABS:&B`a%o؈=?}5+2EA"OD8q!1T&T$$zԣ{;SBW∧޹*H 9_*F1Z,*LX6 {@L0>& ? f _sو0'WOh z~';' Q:锅E2u3Q~ qM%,e:=^;Á?߷Zޟce~5f|5 Eqf`Peoui^ C$"P2D2V!JGCaA/p4RVUjmLڮQmFDW6黺mF+-SMFm)"ddƖS%3FնM4EΚ\lj*mjQhW4Da1L2dkjމ͚)&"|c$EL &J @ J{P'܉x *< Hg/3Ќ?#78IWZva49DCOnx:7͕Q NUܹ=?Y531q}j> T() lv"4ڳHIb. DId!xĎA"!0_U/¼2_؉RV/tHR QPD,ތ`@~WOI t(K˘I LpDN"~gZ ~fITR)O{x+=P|4hO Nhb1'q]@l >ѓHCWW^oPڿ̫-F 0,-0CӼc`ӹ( B}l])!t X;rrآ0$D @fzZLj54.Cm&f*䜱ʡqKcj醜!E4n]]c+@ӣ(#0ŪΜf k0alG1h0 C18'H``hRCL; v LNLiqx e>'X;;P L"'ȗܜ@'YU Ua Q_㭵r~̝;NIHS;q:NrViښhQbB&,@FծڭWUooS~+*GUK+"{m?/Mhh'MƹPUUDUH@46s!@<& 0ˡC('Y%PL(L3>&" &$Y"ZIV8ҧ2$`KU=<ɬQֵ?)'qE*$$XJIU_Baj٥z띙㚚hNS(.YV>(J>p>zنwdT ^c&&D1.]vjf3U[nޛU}owȞH"A}2P%R'q|T6 =T9)*` BfFB%)Sd£|[80ޠhh1D51B,nolZP=tlGjAv#QHI"+IA:'G ( R l]&w3Tq0Xi 3i2ETDL) ΄apL 3F>[ s>N J($Х uZ 8'(vdIHH&E!bMMSK OOP| 䀍 BD0,B|+C')bdd .?)nBbUDv 'Ģ,Hw0z8 + @T~?/s¢ȉϱN,w=="][=80 +Q+)cZ܆M N[QzA'RI$ETGIS@H8( $ L̕iMansg)lK fd+ٮ^,>{uDpOu . $ab@5#YFv8g bnQՄ))#pV $+0WHl ТR= @:E\x42Tw{<%Ԅc$=RHO(>wZD7cRYb2cD88[9"`LmL=V@Ak"0C2"4*XIKhe*RҀUu"a&f Q$bJ)m+JDc'EXE*нsr):fAԂ{">{L>NRU~p Le>aGxIhhͶ烻$Om8Vݶd@OZSrcnhNd0{;cu̮NU Ou! %ck!xu^{DC.]So}phà Nt s&Ƴ333;OhUE>}a:@3R0">$>^T!wEhU=t}ytC|;i C9װDt;踆B"ԋR>=|ԑ&|f&z0oqřKL>~;J\Kꗖga=Hfэq?x*8H0X೐:CBt? B$}N0=()Кu}Ni:!aǾ34Y5z]ww2MnNۺlyn=[sfL3Q^00F+S4N.]bU+1pW!Og-w#Nq3:"]C9H! +d\X iRfbV 31E aN& `۽sӢY4]!r.5붖*5ݕF`U5QF%B*$ J!"̐L:  #Z5mkc4@@ Ļ%]64HeM54֠]#w1Af(U/x7ϝ_>]{/oW5s]C{f닻v|^׷z6AVUIY MD"жP; qؘ92Av#Ԝ`Bc ,WY z0O\ʚ @ӰqD4iM5\ TOD($D*;_I'( ("E0Q>*jɉ2vHri6{m#j-@'4_!B<e`GQ'( " 3@FQU"HWԄX<Դ(r;:;xB`8c.ݸL8M0q&RRT>܉&ד2>?J"8T+,<#wE`f^0a?mKHz'}'Csc>l|?>ãV8^pvnsƾ_+RK% H2ybz}o3<<_lz.g3יߒg1c>?E{?">r}P4 _`}s;}*AyDB(GFYg@:x :=ˤMDry0#BV!R dlP#I9"`J) *䈂7pЉ! P>W@?PQaPCE? a*` W}EQC=(r7a!Or2)2 "Cf1sQ)uT'+Zͷ~VZ"aI] /`TCz?oDu%K%/LM({KץwiZקz+NRܻ.zI6gQ=wSLYeeFl4 H֫L˭Mip֌ɦhНÙEť-LvCѝV^2?ɼ- Éoȡ!D]Tv#AJƳcsAr o&d'73DoQ!,KˇtXwAC .;nglb)s̳|X@.ȑYE*Ŵ=}b co=+4X|j|ypA$GO]z^Y4Ⱦ]x 7/[#VYKZeZp`! E2vlU\Hr륨2P2ӿrǯ[3LHeQz *IP J" H@U%ڪ^_GOdy :N<< ףpqᝓ6F־Z>Byіjљ#7nx2F =~I qoz#|fGotPFDTDL\!q-<7T{燡 tm]bb iPv2oiHB!^2}bzޢɷnt3=NqtD8DNs,OidCTp:z鲬!^_7g0t#Nĸ~oM; i'^xor:sm8<98hff8$up\3u8smKFBCvr1n p;F$07jUQESE_rǩj56ӛ͒ ˘z4K+VխT|ϨT4Pԓ #~0nglhGg''f::<Ư3;9:;69:70ɓQ~2s {cҕGLՓ'1&ócG6fțvtvpc///y2m&;DNt:D헝<=ٝkiz=;aUp{@$O|P: 9SQED3DR8;OVCF@'RzI|>33|AWRw)*D"(SCǚaG*J *HIID&ͥ-M}Z9!sʄC@䟽f}DdƨBϳoL1<plCfg  (TXTShaQX#3`mUX Pdfb@ԲȢɲYmW31HL VTڀx(CjǨ>&XW>FFsaɂc_Oށ(6ud =-y7_%8pXp@_eh~a49'!U+@g6k5k?BaFouNbziþ듟L{oF[kI'g>i<a'r0pI5#nu=Q$N I ؘGfTf0(.X].nmB}rd=iFw~"bN70ܝC`*N  ;$$ h.+R31#HYV[eW܇úhlPBu{翲zx-4DA|qtt=ΰ()*rHY=Hh֨rchT &}am=Z2i9/ #xAʌ1(8"_W¨j }:%4E ؋ Wg4 !: ` =0W^8'1 t^ݥDۻv]!!o/ V$o $^/wJ"25oj-1x9$OSY]H7o6(#  p7'e"42"[l,Â)&e|2@wu!3D'H`4LtvřaYcF01&2X% 0& h<PCTzZŬ9k2.: :D@z#p*}HUN>{Ohs8 AIiB$VHS'I $FD{CP&pz,xyt@?w}]G>,25~l 2"Gn&7A ;f5Nɔ3A~d@ 沦Wy N"+Ê!Wp _R/}t 4-?YzkUL."2ˬ\TIue/zšYj`*楣{ww9^]u޽{^[*mEj4M$A$aXr 8Y5$4RJ%E^]˹zLVX9렇UշZl!WI @B  m ${6On)ԺHv7TME@N$"|n@=Hv~'"{4x-wd`N[K1SSh֚ҥJXlUJTIhۻ\ec $X% HNӲnm,`@% gn\DG _ e"&%@a (#SH$h> -tz@"vBP. LÙOx".A\z4lxQ"~3'.jY_~(DNN~LYI1L)eݹ$]RLTO Db`Bk J7pk^Y&AOa&``w6a3<4>QT * }N,O?{?rȐ S jE2Q2_W>AU{:: ^C>0s3GP~/^J3`B$)IBtbGi6Khz uP?@ >QB4Q"QZf60!kTJXQ2УuHyK?HL^~}xlL LLn a%&S+0:Li'.eF`P YF G3ۙfώg> L3urUd=TqO։犩_Cц4O)#=ѤI{?H`mq]^ֲqڮȬ)nf2[e\\̷!͝O$wr\'yf5$qLfh]D*{)Yn!NZ$ 8ҹ0uR9& Q60(G?4H .[ mZ7mz;}ⵕ_Zޢ|=s}ܤ,NU:y\xS3p|w`Ȏ dq,IWNX Wv5:y 綐SwsWNZ#Gp:t݅gҪ`tꡱtꊮ!=쉃NmhqqZCc=Ïʮ)NOjTBQhe AyWpv0Ȝ>~q_L?G΢dMfRh43~yņ-w: z)iBB%!m(. J=blJ UPh>Dot*հjF۹aCW5Th5(o Aݾm%ޙkq<6 l{MǷIO @<f)l|4PT( 4`:Τ#zhT^oZ< `R(͸(p/'U ;3]%#X4{vIʽݩWU-0{t։ _6>Z<"<7QKCg z4* ;%>Px|J@%&w ]}:ݟx풵srqݡQ]}oO:M },@h$ia]8Jh)Lvz k5OX{5fgu#8ݸ;ޝW/hbH껻^c^YVj퇃ݺ9OSܖ5yT50U^ۛ8^!Y*M|WZ%@/A8. &٣"Al(l(*kT0hmNZ$@k{zk`n4 >8 G[KQ ZCJse ^uyQq H#@ Afҧ5=LM 2 JDOḤz@IJjjhi'OmD4z@hzBJxSP=@i B @ $biI4)iD!DMS~#M'5Oz&?OD<F^r(LWH~Ĉ ( }tkЈ eԗw.L?k3@"]_=wDC]&L2dɓ&L2dɓ&F&&&&&&&&E{~~6u~:DI\""";;{׌g'ZkFռc-2d I{1$٤>DGϑs{ͷ.wnwwwwww '9eGs~ vTx)D6+~'Hϰa c rH4EH(,'%Ѥn[q+ s&z0/o Sc൜#QXQIfʒ0=gFfOeC[7 &H߲@,E6, 5P(]% /IN7GY{L@JC@ CI$H 'iGv2% ZD*$j922c#!22c#!22c#!22c#!22c#!22c#!21 ,YbC ]y$5Uo G&K9L` 0JLLqdc9s9s9s9/;+]n꒪|Wnj杖$SU m5ʛWe00 (0Vp+yyA0b^̵)\!eͬ%m͵ SV2,UD*BJd (@0 KB@ + L"DŅXe ԔRU4d-SM+Jص-&jMdZ4dLijh$4ª!"AUL6Si*mBXe0ڋ-mi*cU& )kcQe$P DbdZe2UI!YH P(TJeRմYhR4kfa-6Bd5)JTT#YX)ɪLlM.R@]hlm$I@HETlU4YIjR H(R(&HP(P@D Q V;9s9sﻻ^OyzAYk/3ޢqL) `h*ZBՀq զܸqER@lH7 ʼnB1Xu)YH:KV*T],bKdƪh1+7׷yݻWws9s9osb*[R 5޷r88Y)i`PѤrG(wGtQ1FFrGBw@0w;u6$ԚN!G1:N H7$8Hu#Iw6LO:Sp:fǼT4#aY,u= aDDD'i$I5%  S2^0K+y3^޺|:Կ˯׋Wdzo~[꯽?\뜝d|?3~K؋ EO^- 82Tm[Vյm[Ws~~iyF׉?p='ToMVH܉lo"ٖd&Ԑ6)ݏAn3p;ɂk0R@!4Y<2 J^f9f"| {=ƽOl2@ QN(aL; zҌA ȣꤞBřR $ 2 {uIq2AX/Z$ , 1w>-z^H !!hfH`񺪍^:{b4Gl}u>Xg}jɤiF؎pMmLT4u h+5-4&6x03滈/xQWs^݅gnĒm6yۥIdʮPZF{`Suwu2@"-{v𼜗weMhHtΦ7JN\%hPJ=g4= ՛Ԧӣ7d ;5t`Cq#VDp@ hN."g92Sj76VO ܯTmy$%$K fio6eֹkEfCs\Y:ɦiiԝ]j voZtEM(i]g ANm61{6g s98989898989898989898989898ƣYQ٦Cui$NVA#?U+\}LԎl?v@KA=P AEnG"Z Ä14a s^ ,mp*I-)_3l 0,g QC4q-C%h7ojFAC8sG 8pÆ͛6leh࠲I0Z,QE kAKh%)P1 $4 vhᆌ``8;plðp(D vMݐ_=~(=(0nt=g@`$ Zc3Sãgs6%Zp0g!Y )lq{hሄp\v:am/4gn}=dŠ ݧW}0g_T黫FC-l# 5f "G8Klk)xР' @C!VjjKk{+rLTh+Kq``ўjH$"X+[×wumsVp̆kz( 814p8pÇ8ZV2իFՔnѾN@ZCrk,XpѣŠehȊxd|pӓ뽷#x CVwvl םsq%8au3&?g:{xZMV`ʡ*)ι{-KHyeӭhmC4zUh[.-iwDևqlV u]s4xmt`nhdN]g4IcѼwr;"iJAfpd2L N$f`!3gdvm#ۄf ϒdPb"@]i:9eߕ ' V(H)*0H=Si#39JvvsGo fxkHI)m.|WmTәC+H" jDSlGwRbxxԻzoánk{ WVǨ=BdꝈV:yK>.plj*wBCŶ*`<ɱb (\v$%mHՔ0$bxHC M4h!lp =6b {G{ٯFd]W) ^I$x{9DoWܼ(4cRQs\zlsSm7,2T:!BV!jtӌoNTLv1zlBei+5cj-⁢, B:Gm$.0 bz5SaʿNr ! ְ/o|I&4I6 V A#] 5v<^ ^b+IUw,2ՍPjZA4(^4vTv m$&`$C9, Yg@+.(ƪƢۣBOoVjtڦ 0X@"JkE P**|TШUO;'+EC8 kIne M̉q3p9LYk^A$ h Mh"*4G&ώaQ4BT]#Wp1#M(8bQ$eKk1=pz" D^QQ  I$F,{l*il r\л^f;^X7<{4rT`$hH`!&#Dp`VR-e5s ˋw-ļ."x( 3k!%zZʘ 4c Av&yԉ4`%%Cx# LnWxf=L$] {0Q;%0ܩڼ ’Bq`4[)\>%;=3C΋AU2yRn@6ĒU $J u@-^P l;P(^L{"(kҒ-6Rmz0Ne&O 3Ip8Pz0r-"I$J*mz4*Kd6~;u@`@e !3I0罃Z/[6i P `][[v(Ud_ܻn 5)ٻc)4Ι,lȢ_~v*NgB쾻<陗&<1:A6AQSauCף,T9J[e!ɃĆ/C"Q C L2ۇKG5#!d=zmniKMk387Q&o2d̜U3XxV7f,o(XX- ?S A/~I'(;b0z/a8AI//B_٢9%\QgǦy+ hiK$!Gc} C0* M9-H1i<af>?]B DJ]L q6"lx^tqt[u|33&yw4~~nioq}wk^ oqֿG1)?Bκo̙B3^WWIIKZɎ@Z6=Uw.oڣ;ܰI$$J%?H Od|SoW=~o۾?{9r<svp=>~^Zy`~Db0G$I!mB. }|=/im6M4M:Þ~]mcm$(~Ͷ=zɨd3 OkfMPa">cG?iއ,2Qy5$?F?< =b:#'>$I$pFdRx>^ ;Ӛܓq#g>OQpq>?€( (n9xlllwyG~nw7Djw}#H#\ܻ(ML" k@Z[ ΢\{;L6A mYS4k%zρNWezUO[l**[Z-EhZ-EhZ-EhZ.TUtE&ŋ\0Fkj4m[46ں[&UZضЄRHi4I)Tlc[RTlV6̳,2jFmhڱ&֍J")L5vݽvI$Jz/9wb URuhWnwUUPg9OwyrI$I$I+luETVI$Z,>IGJRQjó+{ҴMݽ[|jUM-y$ 74UN9^fUUUUUUUUUUUUU!pfPɏZn䭭ʽ}|k 9MEm(nL\v񻻻wwwwwwwwwwwwwwww^Kyu_k}_k}_kE)dd~FQđ[wV5Z ûo\UYw}ʨ7&n]N3J2vfӝY32 ڝ֚wCKCyܗk2Mv\uύ-R:ꫮje-TxJɎeK={/S INu*2* _v_츌ٳ/#<וnfm&4oy=C/%+]^ {@w`]\). 7JoC)IWs2NiT巵TA 'V+tJ΂szk:Yr]ww՛Mq#쌓OȨ;;żk䆢sxW 5pxG<:'X;kCeKݳD(\Y&vA*2I$I$I$7%cSc{YݼI.᷒qM.]m˾orIuwuT[n\FێIDu6lnSHq#Hmx+rk4t3"uY¯1.R.7Z$jw5vܛٕvbcvЧRDžve6m]L/ ʒI$I$I&xL9)V %&6ގ)td~G9Qґ'Yb][xu<ݧ{t1GrvEhnU9WaZݲUVw<ǜu7+\Urʵd}'J}ި=UJeU~^U\םO_A> 0Y6[}ntti㺺: $DUc_P{{%]ݮx5ZZ+ xY)jYh[+1ݯPy+EZD/u&$L l$0b0V Yȝ'"Tb!nީkkݲpqu !DAξ!B!@E2c3^ oqֺq$Z{^|Ҭ-{]T<O ??DW3m~m^z_U_[^~[Dgu/&fBLLF}%xt:wGر/9?Δ*7Oo'j{WMF{ϳ?w8rʝ{hx Uk}`nY1n-l xV/*Zd?)PCUT9K\[r_fo)Ww~^˻98 K59b#'߷:􃹍3dTR#NHUAzk;WG]ߡs.g^Du~ǘŌGsPzgY,f!'NIKs`iXt>tuE|.g̮2GLGv.{9$!M\80cg*b{e3՛);qz,bNG#I]^x^;>QԒ︓A~9yRtrhO _"$g+^>ϰ<[^8Kt|oJD>|M۶s>}i>~2z? #uG r%33vZvMw9tH::lMy}YaeQQ Fo1o) W ֮mNmI![l T rY^ʦK9P)|0rcH5g"Ͼ}{\ffՎZN(yNvڝAYtd 0JCџrcF*4.a 0?t/ =Qo{krfug~;eL!~~dCwmGC*y&QПz9wmϵ?_+I3urOMzDGXϟ}kR|x?;'L~ S8W[U/D?9f9X,Q Xz75'~-+W}tߪUَDD_]__@m˃m0dT?).s33= ߕץۏ~m{ͯ?\_3(A:3>u HIbl5'ԕ,ZۄF}~~b޾ OL_O݋m=z |3⧒R'R{V;}~scz?8I>éA[3J =`?g(D%f>fϭ(zUTDu 9ezn_gMj%#ֽYm߅=YucQ;p*X8M kAQ8cSUAtV5T=[Τ֟$2QQ$qȝJ!eS@|x'c4iOI>_?g6GV_'׽xN/ꯚ9sMF֛r7ތס1BK|u?8}״]GT'#]< .SϯIʾ2/QWUR2zzw5~& \腜r}3[~9|[{5xvmsnJI#`S:Og}}ֹw{7<]ohu_~7 3x>6sGn \ߥ{y.ӏLիn2ӯίT%?~;WI$I$9Y2([N֡u /Q>5 =y_]:kw%_e?]llDLgvBwU} wtN[˾_d?s{{̒?uX?ʊc}0/WSk/skT(8g:S|kG0qm/ӯ3ww|Ʂy&qFo'Śuo=G_9]ן4'&'w~Quس%++}g֩u㮶j]Lf>+}|#S;>}O!*Ͼ?T_VZOSw>̻v)(rR=hx[rjJ \t<=uRZ4tW|Tru&uRNwwww/{I"#@$]36P+㉈Ar"ꯕ}g`}Syo6MHWnd*ݛnӡUmT{uueW+F=ݴ7ws333[OrvuoA斍,4v̼qeZ˸S8h{wS$I%ok4]}f^y<.;˔ :dL$.2V{d}ɒUG$I$@?W|߯ȸu\q:ȶ˘Ci`DR$"xoHG!돤 c&W`Bɔ@FN [M[$͓f݈dM9C=[Cq\CĻݹ7Hfe˪pøy ùwp]n;nzD7`MN#01#,#@'*mjDuhB@\33J(IEP-Ϻշ Z$lxf^{q=y=LԜz22W`]뵪dd8y>oz¥J]dVdT*J|ϟ>|U+J*Ydf5uߎ/>5 (i _7j17q&$"rUbA9++"+++++NtQ&JƁXV%bV%cH +@ iX˗ߜU? o癙d_~[eo$/7Ds3TK]ܐǤ~aCe|s?:~czK=7_߹`t_ǧ^zϡȶ "wGw7c>ώM.G!M]=#Z)ׯ[;033O uˣ$l5.o ޷9n n2*9DHDuيvfó])CaAA ʗ>gAӟZz̉NjU_ COZ#q^5s~r]>oۯz>UGUG9!xEB_n+o?zμvbm{Gÿߞ:\EQvצC mfezjH5lG=?_yp} R~>L׉y2t:nߐo0f#Q]u;K?_O!ݙOǧ?|}!>Qv9Zb [/Ayu7}q,>GP?Fzwz&j8?[8j9Q,O=#w.~ [{-wgPu(rJˣsKˑblo઼Ԩu(nvvܝ{ַ$ 1r760h ,mr0xdQ6@P!8 եe.y2̱cxZdcVݘDEfXf0A# l@b' D^43Yi9o S~ b^HG ,! Mۛosl]4DT8*E' ū^{o=..]t+ϝtOgu]wWQ\{5b칎 4ɚY@A h,Ih`|X!fz#R+Ra@}<߼P3HYNQo٬ٚjYB@eYdf1+\XRZ:9ճ9Ɲ4I3eqglޙvZ -I0pJ@!Wu}=0G^՘t ᣯ]ʦ6$(f )zbCJ`X3Fw0G^՘t ᣯ]ʦ6$(fU#4hzQ4uY@:ެàTg zVbQ,3}41#xz ) M=}SӈY&F ߍ|шIwd$>Vv 0aY)M$ L VC9HY&eX2 `X, `#V$v,#A9T]fZpw1L^8kn=>oR|w燤%QPYY㺵&,ftpadɲ dBo8tM$uRMY wpj )Am̀mtf iтxvhtmuߟ]Kt֍e-RC_#bI# CqvW|BU#`B(z4XZ-)Eo3EL)'oɍ"Z:cF'zUuYFf8JIJe6$U3.m[c~˟L^߷c@X˯j+6Ņ䧝kow_c7n,w(zɛD{ .Ph l(6 tbqZBH1b",z9 0Cᠱoy reӪpm';,%(#;ug+fMLCt6A4R i:|{Βn.iӷJ]a MōI5)L2_Uu]uv̝ޥ 8  2*f 3"ϚHbzg4߉# ?2C~JҐ83PGĐW\ +hP36mY}WkzaNm̼Ǐf7//}7/k{^i'n+vs3n۰B" zFKa=9oLi 6p~ZN^!% 4$(#U'Q70Y]٦+JֵuK%q _ꇟ.ޕvCi, +舎Nk3R31ˎoV>.>vsHcf.5ˡ{Z;洌3&k #SXDv]*"ΐ*ji ET֐|j8;ᾜvy14JH20t;Wwuy B(x?&)4Rzdd.-m*`zv͜UrW|i9.8"d həIwtC n]k|Hm8HưDjC7,p! Уu̮g' 8HI iPIH t!n%sjm(Ԗ61ZG+lڼ5L n|s0v4/6D#;}TEeL;w1$3}{5ֻnIF6Nrd*}Z:I'oPggi[/5jot㚢ì7\:Ђ BoXR- Hд Hn&r+@ R+JֱZiJm؜2"e7.Dr^F8ǃA<lxI*1;}ޅȬ`[`P*J`[UYwcj(HDOFbXe*t" TE#0&W` / B@dYGxJkv{7#nx&C|S2"bdDɡGcj&C 2cDxx[U1@\V=<ڂyFtvIӘ:]4415&jRdߝ+먥2vM\ηֹpBD̄63CCDbyg4< 0y1kYޒ'hl.R B@&"S+O*YeDǒZ`J.DDaap7}gۡDExQ5ҳUm+Q{:qbpG(GdqklB{tW;k:"2sd*JRRbU,RT*1|]:ɪZ$ I6K#bCZCMo~LL5x!1 M9\|OeV ED\!=oWsv+,7W^K@, 2I8,J܅2tH{.˭Q֙G-t!hB ( Ѳ $$Y!xH$ZڥYf`M; Rko\Y4@cr9 O7)o2KJc axPVHd޵Aɽ<"Nw,9XJu7}N\ނLB\|8'UX-"D%'S\"EKqt-%IDLJ )Y+5t*+nN-N띟oEЍƊ&fb7i5Ā64,N*]Є:d :(&\|>u_-*1,prLʐ}Y}5LcU>]1_uv.U]qu1ͳ* fVrZr#+;|vo 5j<'*Y\]ӮY\u!~/kgGmxN'.ΧLM/-K]{V]ǰ&j 4sjj߶OYKD4F- jx77qs9miX_*q'4f=2ٮoR8ӌI.0Rʡ-^ӇUz0! 3h4&w,$JfZeG[;㹹槓ގ[%x7Mu&IHlMI[J jiSDEBYNEAH$Cl$XJ'lnM6h&%lPpBQ PFJQhiB)vOx5w*V_U'Se޼k ۬ڪq"}$j쵀2pÏ HO")(DPmI( 5 3PÆIrIq8*qS{S0Ǝ$%oCan"!IĄB,@ԡkRID+B\v,bK@r<728!fYz6W3N2pVr9ޕg(|, !cN>)7U?uqJj~Wծ袒QQj!))jJ.62"_Oz.N|r?i <_CsH"Dp L`L,_H1 EddCxeJ iX  nJЍkVEƅPI  -U!+ \Ϭ83 GgouP>FN!67]U`3ޓF8q"(G,;jjfZ{ʙdBɉ|>m]s61P)bȌ0 ji 7`PZYZtk&0LaZ$X i ྌ2RЍ1BcI{Tj~O/xtxc>=,-E\ |]듹r|[#DLm8XfE`$kT"En+{kb.ȝ1`M 2R+{[ 2hEx")CR$BZqmVy,uoH{_(֦,:=ڢw﫦_=Ox> ڌ1Ѫh E700}c5|[̮sf(Z4_I!ř \( BFfZ1(j"8x!"EA^C , %I, ʀf`Y IB3ײ.?O0SSQn`XG :gAz_o9ϰ#Bgk.fږզ\hVD[m 4WW+|UFu -,>s"E@iw*4P3-"Є(X]]P -$ ECGܖPȌXg/,R0FȼJ?!{5BeQ}h(" J 4-$-#C{:YB`Jq7h%>lTD#z=\sqپ GFon=޿+=X{rPA'fO^>><|z{rCNբ hDdhN +jb5GRpn .kҹK>9 Fn !P#"832* .+T IXH^?oo|QE9r%'7&WGoo;7 4qآ@aGH]zu˧e4V h zvŀIE,F Fy X*i݈; "豌 㻠ib܁!T`@8fTNJ{3˘dRG> Nu$%mY!3zc %ݥ]uܮ%i"H)Ie+%3*EQi1k&33+Q(:rտ&Ov[1@Q CWIa `֘`V}e,DHCCwˏP׬DZNg$B"DX(E lXR0/ΝmuUzkqL88!]Y0|Ҫ!H5bO cD c"S !Cт c3(_z"H$$`ػ`bPv~/+eS]Konh*rCoXA,8] 8e5vRWxxsvC@:B .``@A2!X 3*`(B$"<N{ 2\FѻTKϬce!Ό eKA 9=~7?kO__/.5oME~*Re#FdRZ2 @djp̐=$5 *IX+5rO^Id6$K)cόY.z_H~ޫpd>eӋᙷem񇿷F} uX}2$̢Ki]SAU+..hL.VX$ fE%Ğ֢bIw".{ `oUiר0{x[/!A-f /xYsuaF|s|,;KD6HjjPDMQ-PJ):*-)5Jji J(B@BH/^{2 hj[:qQYӚc +^@ܗ}sۊ#<}yLc>@xB] P EH(x-)ɊBRURbuP# |}>RD=|N=8R2P b(/>wN#5LcW9N6XoL9OL@S2JV+ܩŠFсr`fI`,CH:̔j%wDt(HHbBDB@kT. А&^ yz5l w<PiI֎Yw=Vp6' /q9Z0,OX,.wV 6IM6Q6q&݅9%Ž#h֮ ߚԀ Vc}cڶ5aYUF04h*[Tim+WUv,\KcM9p8#$i֤JI hɃi-҄ٶn+g|ClUŽsrxn\x*nBbw:B;S7#*椖ʷىĥ*יүU;xew:/uZ5`(gތ&@؛ # m 3;ssϞ}zLߥ}7页O"!KD$hai kZ€OZ̊}l`և.Y;-.I2+-|u@ZUWR'#>UVn$ a>m 4ELscè{vݹʯ_9>3Tivn ²Fdtn+b4,)(*e-xo{ dŮ<0!VpVȅ"9C3g Lmg189rwvAtѳf{wP@nzMzpWsvXNfrq\ޠZl<2dN lhiAvd q=Xe=h"*C@0x5&Rr){ p5^I 6%qΐu`2%+{Qՙ)㙝{ YvsyҦ\odcݛhu>YF%dڍUUxô]tNإ}2,)"&y>wb(/Yz 0;\?-oDoK^-ݍ.mʻ]UmbǝErv6Wx}]>Slʈim#!C&Q CP;fe6'yyU{)i!T8Px?PR,aH(=$x==$^`& 9)ERT*P%t wO&d44PKSJ&*p}2Y7o A?{㫹+ ^IiՔR*&hk˱켃 wD̐PL  3;+:5F*3νSËy 8Fo+t<*RDX/AIi*jRd~IqB硲6JNJ=ܨzk.2_dW.}^ LT"QK (y!b JHR>dWa7pV²$x薺o/Ʋ0EPN]-Rz7Lcm ]v//K~?О`ȴ3)+N U;&'JNQQC8L$r$,$дXǞ7/O5z #30-3\1:&7d9X3aD֤brՋXP36LlTVh $Ixs?>#h65m%M%$\A$Io>089 ,%&ZŤXC36LlTRADP$tQ! Da-a KwڈJkܒ2Lғ yo$@4HǤ y"b Xh6h6h6h6h6h6h2$3JL[Qm&6mD4 4ĥLY&2#e $hi-IƊѪ6PE )[)fcHjI$& i̩fY0eS$ʑ"d"͖"I +RiT%!QK6(Ƒ) f4ZfiBIHk3$,Y$4LSI1IA4t{g z>j ǰlkr}~UP>zcmUC0qBa07^IUP~B4JWwh[6p[!%=bpGC@;Pzd[ QfeQ2%ŵŽ,<'U!sQ#Zc 6,.R̈.w7/2{_z0H(^ԝ!xR\&dzFVٳHTqsՕK Qr fT:8jPtjMҒE 4lfќ&4jUp 6fՒp 3VpW9qSւY9H,6&ɾU[焒y1˕P@@$7:ga#:e[u]Uݸuenܸ,+ڒٝ;#GBiG,P{{I&/a(B> vD/Qm$ F]Y}RjF|M;kᬤI%>?:TN7 ʰl F'^̕nKWV)`}]@;n&RL<U2!G-wsb lWǛ~ 6l2 d(OS! 8mqbj CJc~ Γx^(>My$ $k1fJ ft Qp ]0.椕3*BfM{" %Oy$I.:% @U*ɒG]kv3\5_ ؜S3wV1 w]<@ǙQi]Hu5#Z.B)q 46Wx7Dxh}cU>S'T4׀\wV .RT&V :!pF(HLN!#>/QLh `PPdS,/ddюa{6> wH)g5TV%]P+x5BZvK×׊DkZ Bn&{dNa!23%BH8\뼸3ZuuЌbV]욪fLˈ&jWD̩*O R^~ KQ Uv@1Ơlaf]ѣ~ouk*uγ-pItH(|Ip&x{UZO) ,U{q.i[qaP6dYD,]ƯVVc9#f5C}@S3]5Ele^0`)J!3FUr*:%ʭLT) HHc1f3-ӹu'߀5qw3(1jUTpQ5 fJ"hxi+F$$@R\h;;1M]&3WMmy-+s:P kr|eP6R9s*]$Ljsh0cӶK۷O^z΢SY0Ld\<S60kLYiMV• yP0 !MCֽt("m4ڮ/Yq1f.+Lǘ#>1$.")Hd>p|\?G@=o>Z?:t\i5H op"7C槱:)41Kf2֛vlI0F  ѥ;#HȆG< Fp:N9w1e%g^،2Wf,ЬfUQ*mrĠh^ &(ʅT^ⱅ7nUGtm2I'v5QJgˉdV.ź]ꣵuηrEṜ ^<_;H (k >VUXs\T=ihk{A R`SZ ܆ښ !Y!#X p(! -aELg0嗲fx@a͜:LpT^=ZEc< hBg/zo(U`^QW<b,c6Q!7 n4f+f A@e0C12V@ V]-]7/J^mKBCѡ!- IcF0 !s5[^ۙ*ۻ/5幬]G5wK@'9jŵ*_]nobUpʗ7fŴwބrwrfDi-Pt/n[7ĒI$K"r/9xï`KMu(?ٱ2Ĥq2Dj>V-i'mA xe\Sɵ}ߟeKû%}u(]K,>@-5Fu^|p )HJ@ufbOMlq*g ^)dij(.;f< A Sk,tXL!y󟿀̾Y2+xbL~/$Ny^?4q)8׽ QF%=#@cg B&!ؽ7 E GuA&d@&BIREI-NH!ci8jv(@t xYᄈ'[yjlGA"g2R q2 Dĉ8Y]Z@GF^JRPeJCL@SJ} lK3E4KmA۸2p(S9]"y]Ϸ~[u.~ j* ̼`dՀTԈ*lh il.Y=Q4FCMg 53@0HvMXUHD8Hl)j &[M͚"SXU>_/4}IA:ODU|h ʫ"g +P}aEf @+0Luqtsf꺺ձ}=@"'JQ}ڰTWt4D5 NL]]k$yKt#03bX`پ&ˍM}l=@ht:ߑwUUDFfesW3FfIjn+9ߐkK! TZl_*d}V-~IafSh!ޝ"JZzy,AUXUA(s2-q%A2G k%s0k\W;d$`d3+ ODrɺYF]6殛ޗ]/6TmIZmͬOrfߴ<NHm փW:*N[4Iߐk&Rm >SЅ7B#rxi!>}7!H7mfζĖ 5Py/_27w]{ߝd"bաyb0są#!c!!vjf pޣm_cxø#WSX:w!Ϧ:.YNN1\U޲5G\T ::m\4"̕|zjwjf8kQ"aJ-_peۿ #߅hpׄDxkZFY#gv;HlZ6f.HF`fd|(EAEJ45^,'q0f@1MR'  i ZҹN5B 8R$8}TIHڥ6j `32d[Fx["l)kf=I#zkK+3w+;4v HZ2`Di e\ 90W.8ɢ K5J'%eU)DG];{, dZ54Hu3ݮpx6B{5 +DwtĠb詙&$3m2cj-bdě;,ZvmIea`5 QJ^uY/t q@"d3{9gH䈽R6 gj(i.f: *j" ) 誩:!nq6kK$p2!d Z u@(\ouyU5M_D5ttLUЋ `݈F ݋`$'i & tUSF:TSD %NrZ9|I`P2.ˌvZ;<56BQ'BːMfLX!iRqyj@ִ !M|JºJHIγ;M}ل"$Ej *"үRM9]u:#tY "I jDAhNLb)vBBV4$pƐc[ 8x'dEQIZQYH1+eMl3&CEP?X/ oe~rⵘqwo.-NIz }${Hs.64eM0q%X!a\nL&D:.SA-}^s_)W2u K @'Igyy $ amY6ҥu%WKJ0Ȭ.$p[lIVrICeR)dKeɍd7KI_4G4DўSlK(D@&"|ۙWكxz P~n_[@/`p&XJNKnS~Ͷ$'-#Fә94jt^8A5lpFJ>~Ŗ-`j- y kN+^v0c{7 m7Cp v5ULp=6xK}%6:3^=73Ak{'  6`or,/3el-9扂lf +(8ll y4Xh(0 |0U&rH9\q>oa,\fɼ4D31sUĞJ<gWb~_|{d`31TJde6II$IM"oHqya9GȖ`,MM9yR4[ތSt\}RF%&\]2#BMw#Pbc2{{4'[{uvVivsPެwo \mr&-맖,/*_L9w`=/ Bʬ Eӹ7}w']MuYq,YCYmV.r53ɍ?18FB4sf5!gV~1'D>Vر{nO=?B%hLI-mM$URh&jm OB\#fK<ԋ9+ xѱ{yosUxrNI1?,$ۦmlU3Ѓ6lN: `F@=iL (#]RKb+b2e^ Vp2y f!  AtI\{?6mxWy aJS܌f9 YHBPeDMxu:7Ls'b+DAQLIUUI*-mI'%yĎߚ[pxp!\AnAa 4(25fΛDx8~IiI"ld3Ҙ$2Xc$iS`y/?x1! b٭H$hHlqsή;p{(zu_*rgȫэ "wIJKJx&k(9' 7~ۈuwTWh$G+̢"HM$/.fsGww}W,*ttwTlU=D1 4C (2<;[溫2wtCiLwu^Ba #( $$?(!C1<3z3G0B$Yf<#U͜?F>1Ie-yKMֱJ/S-.U)ny1 K2;"$@KȼؒFîwo13"0 Rdoy$BZE)U(Y&@iVY ЮSgwt$LQI&ɑ$#TJde6IK$ IODHqt\i,ˋ2i-#=ǖw`K~:8xAw]}l;e/B Pnɟ7_ ;B8y'=yQfl>ϱ,q齊* jg5Pb1  Ѓ%_hn_*u DU[[XGLp6B>-(S!%huuR1aߎ`C&kvnenD!P TY-D}Z)S> eӘ"VZBO2j%ɄÆBB؅5G9¬d, -aRXP2U=Nyq#W]jKdl!L4)eu_ !0$n'M\:չۛySpaAHX>%UDNoV-r嬕ZTz( Uejl43Zˡ)k E0065DaN*{wW9]фRm Nd؂&HFMd1B!yP1zMxu;;#-NT\+Bk@% ԋQoM#\qL֢F {#,]kD&MQZU pWw~杳 H^-\orT-c̗P-֬%IJH03ydHcuw%jHLִBf Y7v> 9n| ƣ vV"wWW=~986meCR>> lު/%T8ʦs`zU^ 8-m<.:"":VS0y3 %Q"&#Jl6[3d{_1H_r^KCsđ=@+ڜHne;]=^:ާrI.7DBxUT઩)$_7\ø@:h*hT&hbK7g3}˃ -ߔm!<H3޷˝6c`60" M++<"Q3؉Lh*DLLq7q"&fR&&DxI Ap͎Z&bKS+baEA7<@ oxj/9|~AQh}!Z];fN-aW "z(dZJҫ6f%QA%EL 42R7BوIv͕QAFRa*Rfv*UPh$rØ̄ p,1$f RFo-Ѣ!HFڠGЅg!p0{&'y`TRY<ĐJԪn2w%F+F\NZY4l8vHoT[J# FXi m=Bмe`/XZ,-!h)nlkFTm006YhiV@>s ɃDL,؅gWNo F;;tkOiXP+qRm@`eNj -PpV2Yuʢ(yBOe6MP֘Yd,{NǵYh{Yp`~ zf0TYdF"q94hW%1b̓ D-Zz%#am0͛1PnD I^{[ pҺvCax]SXT@[򸣡b P,1W@]Ѭ$P8a$ ߤ%PBpVva$Csdp4OP&3Q%HݐZd#)HȀ2aĬhh*xYJDA!kIjlLHI!xhZ4dIjYaV#EĕE SɑĠj ݚa9d "i&KxBI7H'ȤYJ0f̨JRL t, ]2NSht f[V؇%(0a(* U{MVhe@ͷeVdb"̻e+":`B@ĂT4 x]^Foj"6v+p Y 'i7J6^qԻ4J8Am_rSf"_WU=EW$xvvHa&HI X/y  i=L/92RA:?ѿ2k{w$"ܫ=h>i~޴/~G5SJ3d/` |.fj9ly}p "G@{~AWfeoQ3px7!#E 7K܆TymyqHeXbUMe5p9w`xommyܲL:zS IL !_ʢ"\I3(tH+>J^0c` {yJǚ;~_{R>}%>mp\޼tyH 0׈0džm<ʑKzgG ܏_!~}X?R?ga(yu _?Xz̊nr*)BRQ%E!II2llM$_[4qYfo8Q"пjrׁ"BNέW/Z)aw~˸WoJɢ{f3QE`b@#C]?dLl׭v P f,h >\ٯ/^Y쵮'zM3܂A59^MХؑ$brƟS_Y{}}s+D4|&SO&1a%j8x^vJ>ђM RG?cc7]}~uzӻqS 9OgN[]xo_D>i!d?Fuzu̎yG¶3'gkFeLkxK67֣nſ0pS_U솅JOU={߇$|lH8 :^asʲwP\oc}oExիA3Zиmk"(=҂8CGGwשW|eyɆfj1&HO.GC0'2I{($$[%rLoruU>-n*\DI~{VGɃ'#揧Ûrߤ+5o^ !ID?L˜6JXQGG535S~O.7IJI?|:]%\UR}^{/o@  ~{=O뮥u]u]u=tݝ ֣=Pzw23+ʑ6ovdfd`JJJKJRfb;K`ZA."89*kb/A1,~i__ttx}_S?>>UUUUT?\O7Md}}Ψn|(Cm zi~GɷA~䮴~^\,rͽKaz_^uo=|w/_>-7}O}}}WĒd{-Zjks">LO㌾cهR6{x̉Ĩ@1;gߗ1LU9SNDS!E1THQLU9SNDS!E1THQLU9SNDS!E0@ߠWx<}ؿu~GڻoZOlh:0+>WYoWt1Kdz{sӓkfy>| kC1xun8Cvou7=3 O_el}u۝Tm!A>H@LR@@", B,>MH9,U$,ƺL%!Uh5BH/oGz"*2 f^i{'JZvzcM4?]Z3[-Ud6ɣhQh#0@jHlbj_Gf#ǖ/ꊟDvP~yo #_kL}ï~5 wU#CqY~gq 6nψ*&TH7RԼGԢQhwVUB$USY8^1fVdαʚuU02G $p2G $p2G $p2G $p2G $p2G $0ғ_}`^_3C;*RE?u'ytcq6N:eR2q)E8}MSuF 3cƦfxo׿nK|xoaLX+Zҵwwj/ю!`W#OC6O,rlO0mۍV$b?NL_p4kI~*#G29f661I\ULϺA[LT[LZK.EA5m6KPu6E;'ݙ9-Z_m?Qy<!bbBwGC$L .^*s.Lvs_b╬sx˒Z]G.=GBR3>OoP|QUUUUUR1 6y!OusC? T++?׿!m=1O9>J'k%Ə[-|az+P2K3 1(P"[uP*c/dªcf 6572ĖZ;-N'D&jը5afy}.]dv ]hwA4ٗ>rIizh>=z{T'I8Շ1n|`Dn%$pDErS8! _@ҲHC̢eA II!>dOWbU h}_OHDcgx?F߭I-kϸˏF}?#Uvi~﹧?X"zϬ/ =ϡ>_117ΰ0#A+"I?óΛ.檪lclcmޙF5k-mn!@ x_ͱ5PBI=rvܸ&`'ݏw?x9~3 ǰ>~]U;EU($&.n@ HUT0$$JI@/{Hu8|{5C- 62fmi)*%lUUU' S%>ۺWww#rŅ\jPWΉDOI8D읺fK-fffe8wO֏.1_ ɢ#tHc ;{M.;_r|rS |`BhmBia˼tsQQ8woYBwRhSm]5ff-A3v9GЏ 6fdHjѠ!"8FWK#fԇ UW*N)j^ac,R~_.E}hC?;<8o)>-n ṕg11jyO@2ky^i]9kIjhHqBIYi Y,1&X&ݶM/VцB `f&2I,JDc 0)CXXV+%dVJY+%dVJY+%dVJY+2I%YKs,m%2 \2"R2a -Y ebJE4SK0.eM-R^]rS$T&bU 1%k&mC 1`Ae2 F,1WT؆&(+k&%<{=eJi)(Ƒ{W WzuuݵΫ9Lv]wEQc+ǼZpMUb|Q“ ? B@|=0Nb :x]Iʌսؼ5s:?MHJCID Oy~?Au!~p)*RRؕ) >bh'[OJJ22DŽ4 n9 ps _i0|}3RdVJYP>a!Xl49x]>yN+].H ^~5eEݷ6&*&A$_#+~$ Ͽat%qqkEdFn Sv^Ѐcː㞱S=Q5 %Gw80@{ S{N1{c]Vi DEG'zF3hYtGיAd4MGZ,* OP9"L7(OX'Ym&COAS~-lGm1F*Wb(&пЅQ(TRJ(TRJG[l+ttuB!D"#z;]싔buQ͛7)SJ8tWGݚ'~0UbD.1 UPx{o rc3*ɒ`m$#2>GW3U\?u3#w{mKX)<֙/6?xϵs*7wWgj.eK$@`ZGd4z]Flc,VjuֵTy1%'a:,aXw;ƀ9ղ_H֗}D&u.*Uwr5Ҧ?!{QU50aK!+iO)|K~?ЄLGʴo'wddֵ`` 3-`AP#xihh65 G qՆv;Vq }D~giCO{o R@O~Qw.>A9rF?;*}&l=OԩK>g5N;_?zurnǑۍE_U_"氡~1OfnfpAZo@`U7y|#aXfW=A/ /0?_Z 'WJS?7թk843[m}ZyI'B&s ;.mv2Zo0W#Wv`k FlfqD0K@ )$!$$2,,"pM@%LMa . X,)$@`S,EWZҺXK$,"ATQTE"!P#D@0%B!D DC0DcDC>iuQ௓!0T:Cr5QǎdhpJ+ ~!~ |}@x^z˯ Jib*Ve6 #PY,K 2V f Jf̕Ih-jj";HڲE1 "]].J D$C O*@ח¾I<*%US`PYiffBdRBcx $J($Ԓ$ȩci5Lm?JHZ+ &QbE+p4#XlM}耭5$$_/S=>+@~9$P*"@nbgPT_vq{Y "*DWU*a ^DtQD] `C²#5KT:PPШDj H}`5}]bT>C*Zt ;^<IhOTp$qtRE=EB* 9tB? (|EH}GL%=OgA$lYPZdKcT9n![D-@& mӱF;H$&8r-Zg8nrn8 CˇHU8C‰0Bu=ʂ楢QNT*ƣm.F!C")dGb,&+EBr`4њֆ04 9$̧#8$H I(L@JT2D:(z}ٟ3ֈ_G"& K~"QDz@ %BBѦZ$H)6@d%DH ySY RzW]z B)¼~mjU?4><>p.g!$ۈI&S3ɚOA ׶?uLJ!f6)Td"sFE]Pc"QS4X[&b2MD0A@'C%,FOQNHJRm}ƈ$L(jow'LA0BAYX>b57}Qei'ȈJmT 3Yt7fuft\qD! Pzrsd"qڅTҌ>DS^_!c*yNϏQ(CGfYNu9eJR5miJJ|%UO.{t>߳+ݫui{DcZn۽ĄV+  S1FE߃0"NDL4ogoGcssswfv89Dl;͎ 8dTp&cʠa!H"a C"5 644!X! ?]<( ȁU T!V!HPV%}btj:,X= "2@R)Jkd6Md6Md6Md6Me,Kı,Kı,;Mj[ZKe+SeH0 DLC HTa%J+k,6͚6ƦBB +*A( L,D,1A*R$!h*83 e[4d0 9Ek޶5Wv25Fjp~ #Qv "NA:6Jܝa]}qx<pNYURINvV^18O#C9K) h=ț'#n.% :eYfnrs/1;dKUN>jѺ33j ˞w1BK9.U52Q*WyW R'i6RTcL3?>1ȉ>#=I(CE0@%&> N('3_}~S+Q|wOH@AǯMQ ~=*39Yh4~냳 L1k"B/0A!BK?mMc&lq c_T阴h(ۙ nVGLT+d(7+*ƞh~hwz:? ޱyx*|9}¸8e#_zҜ!]v`SI B6#5%M9Z jNF$uJRC ΎDbd]]/&¤wrf3hj Lp4 <LJ]+0D#Mm^鲆 ;}âg.w4:&M2bZJYU;$ 4a Gh+<=~{;r^qLڢzS֭,J}m?f?Gş<z 3/^rzߏ#ҵ} CvGk$I~zr@(Iy!L~RUDE \0AI#,gH]y(-3`0A01(.1Ш$7Q\l Ҙa)a\ $HL a+hS\@ abfkz؛Ǎ%UVƩb s묽m!"8dr^\:0"IdHP԰ȒXIbK 6c$H,4ҒM"&p2/`W2ScqPK^J&2RTNDQQiEH BHZDOb$ 6@!=<];a{x!yh]sYYz3bd=Ӟ')2"aublS1]`IB8m_LH% llaX\KcDo&&%n`7W}]ᡓ%C`m0᭲~E1:d.\0.QXdo.5ᣢAtFW0Mj]-;w/pxC+9=$wNS?/?fv2. !+9_7͌~t I$_z7d>MO$8.lRh;^XP.,yGB{өzgzkD`<*]𣅲 #$sB)Romxi'pPKն$%]v w}m~7&N@g.FD0UhRSOxorzlsh|q ;d`!Q'!3@R KJWVmJpbxNA`8(8KTQLÉRÂKAwf+S IT0 TR,vh,&rg3 Hzxym afGNsp0P`1*om'O+$:Up/gJZHZ\KI"w$no ?"<("{RaVa +C>*(` ^ vZXSR0[ sTMQ%QsׂgLUKE5Dȭs,s8:)j$GdYp:LKl`$#ܝ{;'bWGI#Na!>o\%<&IԪluHW P+Jø;|DqO< A}y+C) h*r:p{{8ΙT}g ߒ"q$D(iW~;CҠUN ~bfON4 XAө2+!~Ox1LG7{^U4 $1jHX6gZe~o=. #M܍%1fR&R̨ ѭL#Yjie4n2huQBfFF|-뚺|t `YHTc /=Y@M.Uc&KIHEQEQ{g09X HOڮuߍ}W|VM߉m$\HOHGfN$bd'֎(2eGj2K %(J *B;II !?%Et;.wihLލdby b-."^q6J**$ }˳ZNq?ػԎ1|A+%QLGDHŜ#"zO<:tNz]btaԵ4\u_I>OI=D={dH}d Krv@~ʨ5zQ@P6;UPۓ!4ypDZO5*ef&_3in"ՄVdFuWF" DDAWjj5lV3Q#5a6Ą3SPM#݂BT3KZDQ&D*yk+kI fk$JeP̘JR)*XM-m+5a6ЖIa(jef1HBFb! 5&a&+,lFf҈HHĐŒ)I PH2"DhHHHHJ MI5BL ) AUxd~nf=xU|Ǐ_4s:?~G"ZƋQ)EJ&2dK$*F4ŊϿzȌ<_IBbaMczp?㿑E;QUvD%uӳ4@UHKm头HjAQ TM;cjY!J 1)p NI;|7NVU-mUBaC1˱T_ށ:uRC}Yc?NN&D9D)[AIYw+++)"M9Vgv;;60np s760ofhÓp<;}k3cIsZx700֥faՙ'0ъWjD O' m"'w886 WR*eTmG; 6!߽y556VY'NGG+04eftUsTUvD;Ya$IA'tNDHi24hlnawxrllhiJR'0u8<LRI!?bD ЎNQءQT~Ƀц`8D VMa#)ii)Ƃi Mfhs0#Z4 &(?:ҜJHHT#N֤|2ý|ϻ3OU)U+jGȉFzWUYxoc@/M7ӨFϒ~.m$x*vi(t[j&+P>Py.O~ۼX& y0Pڢ"@jH=R'}zҬR~5/{+6fozf%v Aw4şHIВ=ԚHG=Faw&>/ |AS>k }aAc7y* g䢘Q> (|?n@6) @0^_VрOŅ%!Sf}c4eVH D2|59' =A;C%_?_ʳ-U333 's'[LSq{Ƕ{2 'f=0m?DP61& "F3l-EX>o?X q!"gQfq0I\J gkwՑDIe@< EA9#^1^9}䣀&C#*p_ԇ3fg3?AwDC1R>t;Hpv9sʕ91D0$~CzcbAq1QE (^ҽ(~A!Gd!@ ?Dx>a@2bPSq9,Щ>AK *A%Has@bB1?mO?=KmaJ2Cra? # Nөˉ4hdڐkoҿM׍˲"?qa&PZ{U.կ7 hsٙMf;myG|Q[N.NI2if"ȘbYDYg2g4y٫13)u 26tTpv\Kђ+q)"7 U%F릣TQ$P҇ P`I*h$RWVR2CmDD)LUut%-.a h2 Mb8q`g{Nj2;Q|TnL zi}AB"R c>* WT@p'Ű0ZC',q="3۟oL&h&Fx#LղKLjp2no9Tm[7Bv:r3Af JC v Jy,!-ZT%AA",J@}" OHQb=,$/px!UUP]DH_'i!yOW~HG8i!ϣVZZKF%EfkFKS(jj-Elm-Z6Ti-XTj ,"4% ,bڤQ%%EbѪV+m5ZaTZMcZm1IFU%P[IƱRjMMmh&#EmFTRQmd*[MY1IXƢTU5bبhXXMl%U[Qc"cXFQ4Zj EedڍX-IV h5kɱhQRmbƥ55EF6jj*Zm2E5IP-% "'OY~aH{}>CH=ol{ۋm ILM.!0pNd p8K*D҄G棨"属T<Z3utESA@Ȓ$ <ތk58p}j?"wHDI?1$}α=暆f.Lec+T}!",HD(z=`Xʠ Cpqd4=%6&gnI]S()6ruDhk7vLVE[T , ddՈk& i! JYLUځ*%$N4#:6ZO`G:$8fPs`1\pI)a'XO6ة=L ,t0URTL;nE lZS^Ol=aW'h"p °",2sV B` JI?{۵YNk:QLU@O5QΝ1d1`1x=@ȼtp(bQ#U\;x0gUih|"nX ^uWԍHZPt'@PØ"JBBX X CLYa9 DI] gcF6.&hӆN`f%D]bD(׫=^n|ѓNg51JEK䢠Oه0NO1"Jj]ۥJf)QrM(*Da%DIZZA!aP UXNQvbTQ&E U8?PԠ{PC" F AD Pq#pAQ!V9;Sa9_=G' ,*0̕U&@q̉f8$8*Ba"P*3Dt,a5 6It!l5d P(BAs0e3 )WC ʩ$S@PkV4 <U%R`S]513"WO}db`N J1B^C: Ϭ4 H+* y)P:!+DS BןIL;&I(L2E\!zvpb#ԟvhu+B& 8FA?!ra''= ΣOr?@&'P)XjpJb R%$Uc?a$H MyҌJ9dL/]m淕^Z-,EcZJbI Q%UWfmkE]-y-E(k,J2@X$2*m?1MQ@W˖(za!C25PR fBVD 8:Q:_َ*UªE %I0!""b HkPq!b$J.?b)H@%R @zvooo2cQD=c~@Z )&h(HGھ'7S?d"Ђ"'=EBJ$X A1}YP}oףe.+A?b⧘/4ŧE.!wQ:g 76;5,IQ HDLD#Jw* =֡|N+dflO}V} >  }RZqګ!{[nC'uֵBZY@B?B"瑨!LӧI>^@WDDr*='u?!B*U>y) 'P'KBs_TW<>Q6'Ȉq=oI|VT_# ƴ&""iu16m9r%mI;uSbݴ_n[2c2 jfYi-cd}cG-$CAFs3*[*(xǿE x9Ode6<$+$EE$@)nj7Iz󮦵k'fJRY\ɲI434b ]$]JPk$QX,AbV1CJQ 0وdK )tssZDʼnMEGV3XQkj]jWf[=J8kmr)#F,G {Vo6(ڈ4ݭHJ0!;qƎ֑L(nӢ0(yj58&_=|DIDIDD)V"""$QE % #) P bA XULTACOs.<ؑ\aN a1A9YAYPSBJ!ܝfiT4¡BtF<3gU^ ){샢 w489c!T 6Jc*01""xTSėm(*2eWP'+pV((p: :3F@ Q>WV;O2s33k1fo1fc!ԃEqOcD@HJ ȤSOT2|IdǸY'Cs>TOlDOdɇ>$daX 2z^bsgNgּ\V"")Ow W~VY>}l:: "gɨFD\A>TOK$;=NPiHtKgg(|UH׶nj= R~aAGYH:-La=! :sM{;j{`FY!"U h4=B]xU;#$B73Ԟ09M'W Q 3:D*{\?`GӎSfdEDVAu CAKD]HjcQmnmЪ@ACJNض5ziY}Ҭhӱ&  %,ꤘva]׹G9qDʧqyKvD QBΣ0gPS86LД|@R4.-/<@"կuZJL@KV*E WJI$p>ȈEEd6C>H|W1#}>wލ3sRm] ߖa(yU1-BH0  LL9dy8ĐJIͦRmT&(xyb/'fzήKڟ2>+۴eBb@#$11Ƿ;A%TX`EBV"&Aq% >.U۶/b .jR&`PBL0UXwUW.@=9U0)4M "[l:ض-bض%hZhZgZhX@s]U"#FFJaRS&IJQm%@bAas,t.nآN"8J7-O/hە*%F+ IHWlU B8 {´`dI$I$w|wԣ+V(jsYy+CUU|,wbOT𒝫R=XlTTURRrQzJmJid|J'H*{*ߒI/tyG#2jI9~.m"Z-bWZMTB}oa^ (!ډ=4"ΒPX3@e=I9"+2, 3)!idPQ DTvș:E@ ɆGDE82" J¸Mn=bHz)U{\_&y8QkXgǐS>50ߞzC|q%G(eG!"KDC!#D"r$MBTGaQԀ%#@Pw0|=;7Xa`mE!2wldy<^O((bwt$+,OrByNb6dIfzTRa{.uvVn5׻wt^M{>kjWncͮs1)N[jwnZS"0lvju[=l-]#2E5L p4jqe3HCsL>@_BiǴ#@GTKV\.u]e4 L1 F3\!%aGjvks!:ۖ-l#%6T8IfSC -J"CA v{Oi a*@$@?axg?;II-(1 gxFQjU= DESǢG,BzOm\q׉DJ@W{]Evqu0 DΘEu*$R .PDՒCd[ك.P1gܢp*vlDI$ O>Js/-ca`\yG;Ң?`TOը U@k.=試'] Tzw\SC4șXGStjk+zmnuݳZKӻN\\шLdLH %Pk eYN86{ ~k2|I,TFOXcX@*@C ;US@6Nô=ҠzG1G㼍k_ >3yֿ* u$jnZb1ٛv.ٙڧE)~ԯKGL@UbH_~r̹f~]Vgdfn~mT?~r4?7IUyy\w ;{^\>μ8gMčkem ݆| HQGMRϻ}}=g]=.{ꗘU·Y |9{x*=6=ɫvs'lݤ2+nzӮGv ZѤJ+`Ы˻@7ŁFڀG7[aU `7ޯ4wc@kZ5 :3} z|ջ U 3FMN v!zm%hsP4+*eVR^sӄ)4زҚۖ PHL6IX(PkY{u{N]_1g{sGA^FwKww:SBfL(S в S]OBYͣtu"-C6tj=t1O[.}*0*{}@G մ>{Uv8Z\8U%]5ev [])+iVfli SEw -D`S{|<}B6B:v u([4jMMd&)hM4I)D TA41B& lIFҌКfhh =R MSښ'O҇iL= I@M2 i&Ojj4FQ"  22L2 zMD47y}ߦ%{@S5Ao$삕{d_?s WI{IܒMI$I.]I2I%k5m 0)||ݵwm]WvݴJIݵwm]Wvݵwm]Wv֝UiI3=ۻm[}koݴMWvݵwm]Wvݵm[}ko[ߵڻMI[ֵJkIZI$m`@@b{-{m}5Xks:s=巫DʐRiv妜%"!YLq$AS͌acN4::[wbN()% ֻ~T0yɜ2g=B|oW :L8Y<1*W)R}0!%"RZ블2%)Bnn%m~nf;5xxkz%fLd͍I;IƓd6m!Cl d6m!Cl d6kzo-GzmZk6b%]ڕʜ-̭dt\Վs++mo];websVefNաZkUnmrBc-bbek4b5d؍lDM\J6NU;lqTܧZWr\]ݚ|KnͩwWIx0ŐY"L2k+HqD4լaeZ!1ͮ9sk޹c]Ps[5R!U+5dVijխ9\Ji MjV4+jGN4YZ ՕUqUL K[+YiYl,DR٬lR*k4JeeM5Vғ*b CY)KfmjMbYFjRɥmkIbUPbATBԍ)RjZXh ɫMVjԵ%Tm$LYS-lQkm&TɩZ+EbIFj!hNЇVQK+ŋmjSZi"e%%HTQU%"*ҪYJ@ZVT5SXJKP{oZ=]kZ4iMvð1c0)mmwwwvmƠIs &iti cI\'UyEfwvxxy:y 2:@ 5.K1Bc$`Q!:1ڪ 3 [Kttwݶmmm{]BO=p aGQ,`<$'I'Y`]t<ԃADtu!xJ4NӔ49'i❧SSž=Cz^:ӣGgjCZ'DNA[hCQFChv<#'"hN܍C˞4\ZfbT$ʔmTuEւѕ5p^{ƹ []hOoSuSEZzkWGDY]r2C햧5țWK Muρ>] LZ ȡfGn@fe }7ұ)ӑ$$྿?Q'G${eODou|փ\bK:e57(q8Ǻ8wGc.p݈b3nȢ7:f8dD oum{~]=zw|mS.ٻT߱Mvk7jvH "H UXqw`k9\R2Y|uL;aDXH H(4^T1 \`F=͊+-嚻 ̂A4t#xfwYm:d&$&e:"G=fV@WiVe[RzQ;tBMD*+[ZxE`\rD &@&@jjH @DdRځEq2hIC[}rjghЪqLxΕ.g1kp]?S_s#RY|8~8uf.r7.r7.r7D5(ƚ3t 0 xRS"Dq%MmDI"pΟ\%&6nZ*<pFIxkK'Nvj>M5Y{\Gx(EuKoj=_8kr2,dtqKU8yFatGK7g„, -(\3OHeLۺn#vuݻFb7nwXۺn#vuݻFb7nwXHǡskWەeH ypRMYG͝ns9u:Vޔ]-8R>֖r9K:y:O<1]1#jQw1b+EZYZf1PbX-B,sI A,UV[+ߎS?;\fҩ[/6dhwgnDjI-9A,Uph~XdNNwwlOO$7w b˜3.pf,98g3\wC Kwv,T+1BI!f 7wk.pf,9FB!B!3I$IϷvI$IŘI$I3SO펱|qOnǏZk:m}=%R)o?ޚ;,h^Nߝre^:I'OR$H f 3 7[Fur/`T Dn.Ud FD 17ZIN˱5[SJ1d@ZÌ0$I$" e g:XON4n^ :v-8v᷂F8vӍ5(Ө@`X,FƵʫG,I+xOSŧ(1֑T޳@K:(3prFg,P$D H'{x!SZ|KWkM ;;e: n4o;C .yd7g[m+#rG#%4d)$֚7VHq۽!mPfpINi$I$rqiTdžG]zMj$4Xcv巏i9XxMpI^b˸=Rf+r5RZhM&XsZM,ZҩD֖҃F]TXzy*Z/18p3obؼ[xrf-#1E3 ̋bJKT*$L9!Rdeiv.JLĮN(Rjӊ&bU]QȘYX %"RD cnJ%AiIwsupGzH,AR$O*UxQ&(NMj"&ejzwYꔇ-B!ZP! Vi@  [{(w5K-,I76r[I$nx' 8OGEϼX33`wqU\nZUUUUUUZT`#݌`UPJiV]WSOjrtْ[\&|: 7ƶ-q@ >}O/U_/|G$l}I=lI%<7=wgfaiiiiiii97|Ghxy B;$:y}{=IL`}B+LPI"ȸhR)J }d"B"HM, & l?OnoՈz(}8=77><~^| MsIKixKW=sOQCf[r_ω5^m#d_> 퉵h[Sm ,Xv#+lm +L5ȶ LIjmnh$Hei-b,"j&2b*fYefYefYefL43Ef-hZјb6mj6&EZ%#QOZ/ |8>u|?@˗V8TSL;_ 7zv|.X2ն2͡YwwuԖuuU{1"3ݷ=p[W&ew*ۙ,|e,;}[8M+RJgw(9sW1y5\NβMmuUUTm mlqb/ZΩ&^f/]U[e2}ʤRǽͯXF> qm`|Ӿծ,W{Zֲ,*msqi̍%$[mjmo"yD\Ci O֤>"ssFV^xw<;fYO,6w! t1R)QL1i#꾫Y:`{i^,h@׌VwcXu|n>$M^3E!.z%sװ LR7dHҥ0,kFE $4Fx^{rT$@4zPS5uQ&*s 0^0YU夊FMoDᛟEe"VHc$F55{^2ԷDWY"UEǶϪ꿿w|_kx}?ov^ćCc<8,ḏ(%6YɓI&Vώ 5}L:Yg6p=(ƍ>(2x㕵,G͚4t%dG'K:r38xLӦ(O:dJs(N(ߧ tLK>ٓ' 8YGxɹ!$dp,ɹ>>>>/$^鳧zjӝ>>>>>>>>>>>>>>>>>>6"=QƲY'ypQ&D DOg}X0C0BDJD_.+ם}|/WlrxZ2j"#dc˦2U=;NKfOA&< oIu9/Yn$ww[ۄ%wwSvg͵_5N=޻q#uщ'M{#OO.VM|߲1_Vާk*"o?\ˏ?痟y^OjLbR.{LD?)=c<\v]y?;dTDc>O߳]wB__O{_c]mmrGoq#4px߿~#x=v.WUTmUUϱq۞x㊮}$I&I$m~8ۻnZ֛I$mJMo88uMywi$ImIm+iU$mm$II6z{oRKu\w}%m{i$>7{]u<ۮCmNCzL;vھ[Qc۷nt={ꪵm{ߐ+o|}uwk_w$ݼw٤uUu =G}|xǏs;6I{oӱ_Aҙ/Ԭ/wlݯ2loQ?.W 0^񟼥Suic19371?9_T>*Uͮ59xQ;{[J7̶{}SށٞQ֩e_XoU$y>I!4F_i)I%Jlk*ޯ;o{5mJnkMi]֝Sm%Lh^ 3>ovm<9r$x~{_wRtEkI$~~_G~'JNrn%|kӊlՓI{783g7n.ӺueRSc{whN/Xf~w>Hߦv_yjmeq @ .Ԑ-*Bk;KǍ~4xךL0]Xѩ3βƊՍJ[mjƊՍhɬZEUZV5𺴿6mL-llѼ^/o1?hS%ӈFxf$ $JFH$ Z@$YAX"H Z@$%B5WR(kF㹷8qk%ۮϏ|1F """0DDFqBB RKiiDvФ܉eI")DPT)RN~O;K֘ bwL*&"Wc^5sBZKWʭbjXL)ZB\J18"(= \wGޝoRY՗  2òaD@/J $TDD0TԠP   ,\:0ƥ/@ hܨ5ND %^oU^71fuv( ڍhwZ60VڴuBDܤNG9F$7_`pp$q",TP#AlJVVJFmȆ"b4tF11+20.,{X?1>=m{̲I$I&dNQ5t$0ENvu~$X.E S?C1=,d偶)z箉gYqOkőPF!!}srtۙe,1gLLF=.rI!RC4׍8XZ4)3i,< ? >I!H'>[&^ oZ&2txjr,Rbm9LJhho'|ܼ4aŦ.fgݮO SP̹$̢+27tQsٽ gm  QЃ`U 8 [ppQbN1a dFj;N(v.a<N vpۻDhA"RoiA ֵYHj F$1**,Qj=IS\Þ5h̭% 3N{e{hMS^tvdfofmӭ]ɼMdzUZꛕ:xNu+Ka+8tJszՍE*/t6_\λkޛ4vrn+KJ$I$mSwnmI&ӻ nIۻwUN۪mo&MکbcgfTo*g2~g} F'nLEy哞2PչGqU5s6|:d tO~‡!6a$h{>|LAb L݋5ٙx݋"cnDD33r&՛D0۹DX^ uUq=b$2ZmvUnffWuo7\,\%+f]"f,ffbIff[m6VZD@j.#ʔDD**`Mb"0g%r<'SK7u遮RYIF@JXPRXIMn\DFYiV,@MTDb UPBC`;j_+ds {d$ Էb^VdUK dҀI(@On(X\5ua$`: R*9+CU{]ȥRIvv8 I&& *@5Y.@XҺji)޵RᙌVfc $KTΉ34b Hj6(H&MHy_nV\fzvgKmuRI3(@RK9dJY-f7h$)J$A0IYwvb")KeAՠGMUȇLDٶU(zk۔zJYoK" #dv ܙPcL19CȦ *DteJ E;wo R$¹JI$]ї7Ufb@۪ Z+PQu^)sQHd]oESX^5'1uD+..́Ls<4%v5,S14ĚlM3MFk" j@ 0""ٵuʫMÀl퀁0baT 0B{v1Q+Iדnj^rJ{[=& ˩P`*RQy9! nWb M#\wq&@r*`a\ŃFiN35T[wYݙ]+ BTWZj&p"ZFQse_`s#e!ซ**,QjN.\̍kdLUfU0#XmC[rdK>ٚ3[; V,ki^own:|+?ۿ-sEiH1@``.'zK@D@P  TB)8S ryN'O p6=s"FmD$G'9Ryv'xO46N`յ<&`@&D }ܹF.4ǸVe駽72zrKX'pO3j:uG"(ERc;H r80`d0,pp,.Fs7B1 BVs1_pp,U:(v@2 ,60Cf&4ٝ|Xqϧ\QgrV[-[5 Dc&DT |qpYJv{[*pLa1ʯ|~Ow^y"+PivzS߯>z]Z(!*%MP,\/HOR 9_e ˚|DN#e_y(wZ1ccnD@"LiwDn$8D|q7HЌ."Ef4#B}&Nn~!_|%ﯧod{sx=4 +j4fU}Xq;*)ex>\rGʒW\/O6E^CtpmvZt%[8b Vn:u "6\" D~ 1 uNӔh?Ǡb==|z|.>#c2q B`cC}DTKY?lz1(ϏO +xjqg<41)ZԄ+?޿bO}R31UU,}CI @0?"h`kf7`È Ð  11nپMKG8֝#P[l@h}yw"#Pϴ@u؍Ǩ߿xsq#Zbp6qz =ē-ε4}LckA`}ms3de^jףwv2RDw{$$jO .ڲpח~μ~^1fLSug,B1 Eeg8Bҏp#VKmn Rh3 =n@p0|;: &TDl*5 .*"3UZ" dC"  1s̏>h'8L#}OP@ jN5yRwTΟٙZkx]wH+Y@85B@wtHpHa7N@PHnŨl &zﮕzxԊ#dD@Ao3dTTpkNGGGIuPOM+*lv;sǝu`n 0"@ 7!M= eN 3Bo,嬴b0i5!܀!ITc \̐l%I$kFŴnMj8r6hS! j,8uq#` ,B=4qÇ;s9:N$/(i k '=L9'n"`FCgDdvi]vWkO}5RD#R8MZeɒ4a.wy;95w".D7\.ZJwutav̀-myyuo.TA4XHV"Dlx:w>AuOIc%t^]@3k'n2mm9rƷ wlzەe/'dl1k6rmۗɠF7׌G*֖#:SgI]ݶmm?O$I$kz뫾mooewUZ7Nmmm4d[9WRWrV]=/[-e{'=q{}QBfD̋up5v8388,:sI#%#2ĻlQ(C+2 v쩔iRnΌp")Y@Sîgk$D1OW<:xxsZI8?(E98Brxgr^ァ"19xΓu+D>s|OnZ"csw,w*w(O$,I:z~w}>_Z]mgoӏ4{ޣG1 H3t;uW9ڼ̔V)uNpqS&@ν+Nxq'3:=;rw}<"]u}K%:`` 38tRwF!g2Bb 6$@+`~{.`z/j Z* .M{WF%zYTbݤn.F]Mܷ'Eն$+n&ģ.龺0iUXɜ\ttd&N8:F<#\y+G<" 3BXT UwB#"1zAߟNL-c{X }=zWeg$kEǤFki#{[By#s0:%uI({""]@(BD@0z**B !p"mC @w1l@fxADn羻O Nć㭜mmRJH + 0!4r9$V%qfj9Ss}.p2,d\k!<5g q54 #drnh!N^Hk)RPӓ'unVGm`* g0t4ᕈVWS8s$kfzRepFnb02/D0CwvƅOss*xNSB:a錄:0xlXGF+_w02#C\6U4;&jxy$P`1u7Q-Il<%2iLXڊkܐ1c5[WRe\KȧҢ+&.uWى1;v D@G딯9u(P絊V]v԰vg7O_)ؾ=k^ּ9ANO ųD\]Fk3n2'B3UN{wS@6`Y$OIUZfֳv_]*;' LH=[}m$JJޕUU%ۻ;m6yUUU6mmnfem݂pu,PNd ْyjfwt݀$.{-SAMuU7\|sRMRUvI'ܗm;8qT$@[JOW?VԔ1-vS3)dtg:d 6Tp@7Q no"8X6Q[ C:۳1bO|xD\ "F^e"H&D&"{|z>T>K$FyI/UeYMo޽4qq$7_0TYiIW>oY¥zZ̝k(puѡ;LI̸ `p He[m F6X4A $D #f^+ n6 fRIX"D@ޱ1xֻD@'O-dZ f&GHD@ȁ_3VJh׍wv}/oEq9[ǵa\z箺;-+ݼ L0r *sXvy?;}oK*4F`h".eӱ#q  Fd4Hl &D$hX@3N[yH mŷ0,s{; 4X;ְ8=kwnzq.8P:b*Ff;w kXkhqp74t1YTڑ H#Q0 OuARU0 _!=H0AFV<O5Y#8䜩F`o[ufB%#P/*ƫ݁A$RaD=PIѧ$Ex>$ TV5_AuVg" QCgR,tw41 @qϞ~C#2DFٹ|UVmmƷ :Cy+q&xf#*n8 &-<( !u\k2&b+3)E$H^Fcc"ݵ@JЁ8+JLFz@߷G]ǂƷ +`ǁ O`v0/ U^7Q}Wu.4#WF beUv$Dj0&fj7a0$fB+I$H06$ק`q&^x@P l #=vp:bd"#/zw:C*sp{4C0`0_,`@@~(]'C}I؆o3$&~s~hڤni* .ՁB=$'[0D=nX Syyw!H K1p&(":.yo]mU5u1FҶ]-\tӌNYt%6uVE]6ܼ>_=pڭmuz׌=}\I8$]3U+Jx^~WLSmI$gO4P5YLkEsy5BrZ9]ں7Z#js<oLH,LNO6ÉMOSp)4&95{12T*!:٭uE acOy̹ @ Sf6/&^%`ЀTo3333330B ftwHս}7Ug5dݣ3M7! 44hѱ pnb( ÅBB } qѡ`1*0FҌT$\ `&V8,\Ǘnry-ZY<ӻfv#j6Q˵rżtfo,T,dnfk*EXErƧ+ c /P J-%nM^o^e[kZ]Izm.Q4f߾p{l@{xG d8} NoFҰ [c# 0HH1heB 6 6b $h$L|sqv;-5W0 u:+sֹٻYgJ7s6Ḽφ1+k-$5%$4Cۇ`x؀f ${V `dMI+oU81:jolȁzU.7DWQx{+}2%}gfut] ؠ]gp?m f< W A׬@I;K 22# #+` :׻p b A$.9Ed|ظUq޶njeH훹i$jHuk4~$dI$3,i$M]Q[Nu7agHbNIQL0DH6v"偰q 7l@Kn$H'\:\I:ճ5c463ck*fpfmad$o[@pFIОC #ENbpv ؀64=y$R}oz巭8[qD=y)؀fMҌC8^˹*T}1MrI ,چIZ]ppIRBZ)j."@w{174%0ؖTFFxL7$z3YJ)sV/!P=^/\m_5m3zww5a`V[+bDNR;Ab2"Վ4H>`'MƁ˫r`Zm\i$Ab42`jn۾$Lg]ucQ}X= ?80D@iܘ 8{nՕ냎vg5{fԦ]vp7 v&!'&vogPAƛO. I iyl[g\FE+y `UvwRW8]:虝Iv]wKyJ)YL4XWݚXV%Qvg o{m달/b U8EMLlIFBbSd cm64UhȖD%,dK"[X#U! )kJJJŦL1M2IFF,QIZ5e213$#D3 hVjF4I (j1M$4LSI1M$4LSI1M$4LSI1M$4LSI0Xұ'$OwRA~QczTW>VpRU*1m0ܶm#=wvsj8!WQg޽osvZɰb'c4(Qb$h`  N̐4F;G199 X&N;yD$$HJ W沭xZEDшӵ>}^y{&NȮ"ISItaerdiUGF*!KӌW,M9[Voo{RX̓1",B.l]cX8*D<@E#@1Dj &LTxM&Ӂsׄ*wpȸٵb-.` h;z 'neޓ3 LV)oWy.np"R ԑIU3 wTȞFtWȢv--kwIRC\jUKS4 DfޮUoGs:Ne'}.ݼ|NRKmgcD커jd $.ͪͭҞ5 cT%֍<9I]*e͌в$@&< ^JSu٢V]oN'mm 4I$m֝V*vM$kMv]޲UUSmmm+)gT hr0E:sޟH{vue>N2]>LyحTPݚ5SFg `P ⯨vԱ\dgP&g.][?i|wӾ@QF.`L&٬x&"G耺q [4$]tݱđ 'C$INڡid Rz`$O^06Hk'A$OAÅ X*ԾYy;:1>ꭽٸsx@I5')wp\hSq$Ire4@i=z`l 47׉xǏڊ"ǠFt{3JbLh U~G$=ihhc[U ʄ̗ g5us3gV |Q>5t>{`~$7XSlNrCI"b{rr#f 7;;$wxۈHǣvhÁRF![,o z#ıB80v?Kr]TGUu;u+vfULx{&+6fizsƽz-/QH,д$G_)  0" YAXEZ& ILI$wN~?Eֵfbbi]է4CrCjթ^:1TUUjI'ݽܠ"=f~$يњH$X !nЁqR%h@lIUnr4*|"әwFri#i6{YAF(mxg1 4$]r@@v\<> @ i sc&-iwX*^ݮ`@_Qg Bٺ%o?^:V= f.l̦@ ]vs# m-,*m"D '4l끠-QZޘ3?y;:!,EɉȘ@]pFv{x.yY[6ULo]v{#H(}5#+Zr7j:a9oS@K9/Tt:@:M8`6؁(,D2HچIl0۴ k-\@ ?nf@ בhIhV0q"6ؘ}!.ꫵvꀾ譨*U!ï`u L & 6l9m2fKa"jMۍCdh.j8{D@Չp0ڶ(TLTѨ h#T˲o7D2hv>ڄ>Bjg /s8G {c RMu4hc#n]'!;X^|w<&TGlz/+I[w$g ĬuЁkFŒ],'ӛN^/~;rk]/@D=@}TZfefxY~׹3Iʼ ۸{3a=pzxӺ*?w8TG%LZsvn]w](ݭ|oh}/_Kf͛¾e,*zhğRU>/:FsY6V򵤒wwm _o{zl_W(jaUSKlz^6F=f{zL?wn֒1<";nnoW}66#IX7rNp8']ŮъzSG&&qޑLF0͐i*"r@˪vڙVjw~~EߟO{ouwٵ/-(;T{bh ݬ/ \bࡡ68hN9uܜyNSp:b C (b0Fє9n4a "wφ8%"z#-a ٺB@AjkK-z'vRK^ViL2R *EFKBв 9lٳgSM"M`vhbYO)8oBxզ|V+;:jɚXfW9yu5]$->yB{dUt\+|,`d^Y{]k{vo"kVT}Vnr7{PFD2\ ,;5k^UtʹwE%Ǚm͙$$ݶII&I[I$mUUi;NݪӪm%wwwvmmmwwvVL 8D2:*̣%nݞKN` boO_ mh4yLbUONd"I/ڿfM7m󶋨+˛Mulս-7gۿKN g^fuܻ}ٛdDD巋2s2۬d_,'30]̡OamC1X /2zf,}a/Pړf>eYU禼w8G4~Ȱ.Ufh̬ɲbŚ+/+3VfVfVf *s?y~U㩥MieƉQ;MR-yZ)2Re)K#ɓ(ZXʖVe1I>\^qơ2Z_z{zo}gʮVQ$x5mۺ[MޓQ@IFDW߻vo}^6v؂(A%f PIDfY" eD >I~ν3ռ{wX04 LLMAY< 08LMd44y1ghPIDŋm˶6IRۊ铙.NW|W<̺*'{v{q]V+Ob$I$LP#caqogtݞUNĜ&e<"K}&ts{&fJzGHv* B 1ygXDsmsnjI2&bx@u x`aoIOFS;tv@yjI[U2 e9LKITC I F0HՉgʆitVM!UufF*scn1m/[RW^M=k'Za6k[!z gI;PǕY[ū)fVMٷ5]xFI]:-[4\kjвeۻWm&*e1=C:$ :@ښ!=&aWZ}8+2NR9XmʹI#HEU]޵im$mI$mwwwjUUUҪWjNI$MmmI$m$HDDh dDC16l雲I}ٛ0)Yסbm]N_W!)JRh,o+@D|Ikor 1 v1yUiZg79t|jYs3.[l;}VvP8edة_"W[l8t{'n{&,90El7N:z=Mwzb`twg.@9t g`%NɿSsáOwLi'}ۿ2#f`UR)xmG.Пt%{[W6dG/_雈E~(酕dcV2e|gnuUUWwv@$w@؇w H qw>` UlΞPī efsy9Uՙf]b)S&UD"9K` x$9!*A1?\]S%g{.2K?.r U]}$f@ NݗpE7}'7[딞H[ lMs(_Y7 }f|20I@b(h~=.]OU:]wwo{,I ^?DŽ ]}p[V4${f!&7Wplx >I DV8gbu^- *MԟO҇Sp;DË"0Bdeqk6ўUWi->+&=G_ޱ_,Vg?v Uѻ&v]dc j8ZR!1@+lYu_/Ӿ~ck-TVߟu"N_s| Hַz~뢷V^ꪭ׻ɜ4@b/,-YQP^ ;v AYJoC& Ti1H8*څkX7xƱ,~F:vJ%硘U*l.&  93|ù aNsÃlʫ MaD5!}u3܎-o󞖊(I?̘^ K, Sd`A0d_i9e gϧ5S)U%r\Xt^\".k~bUb"n*zňYB#ˍ6n['Zk'5{}jf=>Sd | -³t̤o{fA[j~9$AJjr.T8* ;E[ٰ8fhYQy}ZO2b$.C1 |dGRpk}CCK]j̖fsj^SK)$m mEw DZ0 |=}C_^/3o}xߏ/7wm6UUdh f"EQ;ɩed'8M,`Nϖjc# BѹQ5$X(a.Ydfm5WV{%Ύ%Vi,Y,+R{n x@DA.WZ[N<6d0 _lٱY{Vr}36v_kn<$^ܻI8ȃʢG<$'q'D&ZkOχl)넓s9+\twIIߝ wI}]yB\P5:mۮ:)9}yץ]!rb)>%iEzgO$u1cWvk-viwؖ8bp KAfۻ/0) 1~KUM N0S#" =<_usrhX=@wLFZNDֵžVOwwʊX.,dEUR ;wwUUͷ'wRh+',7:c!&NMJIW{ؐS]ts^$j M?M!VϢX wS^ A\N+5w $wM8c32"7eUy9^;b ĪQ =o,z!鎺ӟWDI:[U7M5Iv z%$%ֵmm$M-9DDG"óM?2Q#\xVUqj",TP"V>im.g95> i-UUU+mmv/0u9əz|?L qom{٨UUUXWoi xQqsNVBյ @@/ Xł 5qjh{ַ E4)mUcM(%15Zʳm'}Mq掛C͖s a3e!I˭;L7|FHoS2m416Ǵ]zM!kһʴ4TOH9|yҬHV-ZKBܙ!?%*> YDI,jJڠ>ʼn"mDN ?I;TtjbyYV*CЅbd%ib Pz,u\c1-P񧐋S 59_EީXk׋2K0tMf"[$Nő;^=Zyo=MbUĒizDQ.qf bW6]I9p]siUq k-+UkQוj+WlܻkvݳM9k!r $-@"wŷB$Q43IZ7. MmJ pb䷍i19H NVPD@+@|Myv~. Ꮃz}:;rq&}В :=$m$%UMjdҬ,,ԕٙT?*ʚ(%?,FLUy꯵S_R]lg6VtXKs6nQbljLl*B*B*B*B*B*B*B*B*Bq-uwf5[vV (k9s9!!!*WW-[j-K3\ʄͣa-"CZVT MkikE@ZU4m 6#Kfmd-iRmDAUfQ6fejVZVLeaI"&ĪԋEfSƱi,jFj5cY-+-(v#T2mTғY*-2m Ul hRiUmFe[դ]VحěIEX*uvM6[-dTDm.riZfb֖5J-E-hJjr몺6X6-lbmb1E+F[3mEZ6TTb6*i4kF+;5QjQl6-XՍl[^ybr6eFȶʣmhҕhmSPҲ[!lE"dY>*1*DV@a@X6V1uÆiiiZZMLF-VlʋS-eS)2aM$ɒ,XjQLhbm)""JI2P0F1a#0IVEM(#DL"dMԙ"djQ@*[KMVj, M+F+VYHyUA@K\A$nr9RЭs\K5ZjJ1rgZsdtZWm]LiSKS,m!*lFZŵIS i,XֲlY+&3*lثZChM+TKYJ]wZ6֪mZTdʑĈa-5 -Xֶm5UԵ7(I5MdPk[jiX,ՉE 5V µP 2Tj550#,*ի* `VLSH- Ejʲ-,4SEZbT(* "(*JMM CL*aS+++-RJ°RRSU]Tի2I-XI$yfA!M13,H))M",&BZ2b)m)$MJHlPh)dfi`MFՌj,֒YViI[2)̘ $BM"mX̡ Y),j3-R`[dڨU*#@Vbzz]emK9leЁ9ҵ7s9s9su9www\ QDSzo:66wZ \ȶU]iNSjkCLYtvN]+Ν%6ݷNsX氄n."hZ-EhZ-EWv3DT$]P빍"7kLщD% aM((]ZH0J$U,FK%FхRQn^y/ u"""""""""o^u9lċd\KnKi-* b̒_¢?JJaU&(Ƕ*MSQǦF?o<#tH})~cُ-O9y? yq_w5=rljo/>L՞| {'wo=0_mq+j_$Wש \7t$$` "ބLe*||֬ه򮦷s.MqZԦn9]$Ԓ1}1}Wy?tMxb}*+|~܈;wݽo7KS.:զj%xyk\SzM+HƓq6K[isƀAjuFEjtwQ\+[{m}RJL&=}^}#DDF;aJo}E9778{^ҫH߆uY{_]?/s~yx K$X|8￴_:ėljzՐ|'>yo7?YܯW.\x+C\RȱR/~jYO]Vg!~ҫV~&*-~3s__~ZW_ 20N=}ۭfZEh~w-KErrUP^'hzkRl<00004^% AIZHZUR+3\'*$)ECvu5P?P{ď#}$iKDI$rOdjFӸ5HH^򸌕-o=FΞi5}OR_Zު[[ a'j>_~ͼ#W*nk&iZʪfbٜז#?bz]LK ; cyo8 {k^U}pOZ~ގJD,OIa?K |鑹'3{}o u 杻sл~_jX?Yb?e},Ejkup#WOyFyM64.sӧs9r\zJ[t&R-/Bso92/}'kn5dKb%Ds h̚>qXiƳ<䂊"U2k^z{y?e?gկ)_Y2>$:(%}lA*yqĄg/oCzeߴB?WvOq>?gsj]z z+lwT̜AĶx hnAĶS3332]y4ؖ lKg7j nNPnb[;"ZD'(7Pi- H0A0Pee 0ֆNWcps#cilR*O ];$:͛M%-qWnG}9_\ =t1Ք&Vs[vTbKg}^0|A[${K+Z7ξ7~)}<^I $ :.^~O>^{SOoÌg^>{A>skc0%, l61bcJo<ͻx'Sg?ل&$G_q1^^99`s[7* YehdZDrB*1)P$oxK)!}t?8r{t0SDWr&8ĺ%w4x@`2}9Cwy Az#9;>?_F~_i{]`0 =G"yD"}~~~bp9W?v{X#GoN'18zrU?G?G~W{_tm\s'q r?u~֧͟ǿX?㏋$Ys9r"pĆA#0/>RrA E`]ϟ,K:?m^,yTZr%=*Ka|+ۗ-ʹ?PogB@(zVYO=\͑{Aݝ!`ŒO 'GAȑNKgX `|g/j|-_gZJjGgPOo6RD/W?Mbt*ܗyʕ_Rʾ/jw깔Uq/[H\׶^vU_cA/$UڒDؑSL*||q??/$]-[>zkk֪նⵓY*ԐfMll[x,~N-HRfyp:κR{/o:&~*(ԏ'\L.KOX|&=]NuRnTܞYZS?dOJI5\ i;Ժdf2}8?mJd5b6Zʚ[ !El6r Fm$lW캼W2hqRW~I~G^s6'|O ~Fx)RRg-=o2__Z2Z~Sڿz%a?)9:[{u,1]3gYPd_l*1%r%HY-^W߿8VkU,K*.ׄK.h6E&HXǦȜ8-{>ܛD:g \滺twm;ꓻXEL#lI[ݺSNsL1Ƙw]wuUwtk%7?3lU>syiݖWYUVYN[4?Ѥډ4B5}˭_*Ե~nm,W~*nv_byDds)&(wߋ>ʃ_o}v ˜յqW5iR-b-b-b.#"U5f"\2 #5kɕR&VZiZVtc h54 `3 -a#,M 0B!RRLQ[jג4EFJ TYk""Nqr[MdtyU53Tʳ*̫VUVeYfUVeYfUSB*̫Y:Nqᬫ4.qʚ:$(lƁF}~Z>tY^^{j4BQiLH i`,-Fo?G#J>c5yH/o3" 2ΤY(4 LZ'b&'xH':I$2fzO8}def*I.+>imuɕ"{KKl_[u?;b8G}חU[t$2#{ci-kVM9=I=hGybxsɜήej|R5yXK&Hc,/Iu3-Lhw*Zg.[oq\{]7]f=5/wD㯗wڶS;|5IƘBʅ45 |i^u=~t_gQ)klܿI<^uP)}q%X1 ԑ)ƭ[ߕl: ۻ =~^]/%+=]ϣs7>gtiҽu>Wɿ&q~Ҋ~܊~"!"Gwk[7mz:d$$.>>?_sWaˋ=7Dmo99!RE}-kϬNg-$S\Ibs|W׫Zӟ/ו6A?l󱷓y+IJX5N3Oƚi}._I[mmPڡmmmB[mPmXFJ&E#I$mmmmmmmmi$MB"Bw]p^  +v;Jo<L(ClOH#7Me? r̹v$ g29>9~-_tK_Jv󦿏 YCҵ"r^VO☆Km@H6;?"U]JF|%\W<$8dI"VXlZVD̚_$~?%xo;䵕ξKr $qZF!9~u8ֵ0}NX~GzۘիfX ?q$z_H 5 zU{Ws*b>5?'?d~!?d (_K:I>~?tq=g~9qs=U|%Tcf{[J,6mŦ.SO| }s>ڮ}dtu,Cjuzϴb=? gI_j)_+]t<7req/ow'/~Yj__b-!Y|VsnztOʠ$J2""""""""똍^ߏKTHjڵ:jVnۮ=7+JMMV$-F44hѣF*4[54hѣF4hlѣF4hѣF4hѣF-MѶX5mU{YUp5YJeEFDm, t߹U'8"r&iitJ%rIhw]- P%4i&-+jiG&-VWV )񏐜KVIƤIi-9ۉ˸9F~HCn[m!&O#ޏZu61*q r6eeܹsrnE$9r\n"w\RE%$DDE%%%$DDRRDE$DDRDDDDDNGa>d{,g?_?~Lٓ',p=>'=m{\yN4nd/H{q:-I|1_WǶxosZVa}[ѭL?է_q5yiǫu,Ě>z}^߳Yj}|΍K7kߛ޾]ZܿKWM|'U^+WPUA,_]Js/m-?UVdS4=zU oPV8fwg3^Zq0CB?i^||(~Cz$it! aݦMa8%HK%\ "$_j&xЅ'>bw<qjZ.U/5[}xܱ/ڶhHK8mZ)|>;]E~39 ޿v>l})I'-_G[Q}3J};?IU+ľqӖrq㖺mUѶ @DP)X+` [C-Xb,B%[Q7Ŝg[$ɢP!x6YuVkAW_%N熂ÒRz%)^Rړ%|#{W_FR&h*V !M6jT9k5Z[,8w$er_Jүi]O~"_Io]kWx> xCYO"I=iKXT*+-bKSZ+i\+Kq$|Vѫ-ZZ1#j52/,Kʅ],¤ T0ɔvVL+"nXjC>I>M:9I[o薢<>|%grW*i]O쇇O&*deuGU{/)e~joyu+k64=8i $>e}n_ƪ^+2V"=&12dYZxNnci=5HLK,bYagPi2k[eeS8}ξh'{=4g\k\qwWZ.Ӣ5gt^ ɁnYOqLtVQ]&oq7tJ+s[EηK:DZvK6a]3a97U;㽽]*eY|[v1ʭ:Ytq-עQ:[UפJw:噮-Z^+{IӚgxliH[7%gFrʮWaZw6z}3ɾmmwwwwmеXummmmmmmmmmmmmmI&mmadc!:aM1sE]jnuT[mmmmmI&i$ImDv90 vÝ7J;töK}\GIbk}}P}a A uUP`p0c7}{.ϥH|_"U. jڂ9qEղҺG*껝ԈiZ*f[UaSD7Ekyϗ%vszBU?ZYeGm8ߙf|>־15)I$| I8j|4,6IJgXQО?v'h> B}+Z(h֩5ZYJD>mke[ܻ?ߥEw1j$g P~EW%"+ֶU15miE*Mm-j)ʴIllllllѭѭэR&e0-i5K%e&Z1-[[Mcɵb"*Qj,QBիTZ$ b$)+%BYX[*XְmSIbS"e*ʦ^m+K\%ҤTe%ҩ~uxWS?ՙڇ]*emL/6+WO<ڕ,+FmMͥURK8MIB.g !c[(gs^UvxͶrWgc.'JX\L9N:qSZĻuXvtwv~N<ڎ/?Ď^/5̶ [=wullimSxyQ${xVಱ+Y &F,50Z{8-> kٙfI!8 >?$C{QeIabD^G>x"CmtOI<{9=Ğ{RsbͧZgal@D@Zw+bl:WD9sp! &!hvű[Ԧ0& UUIwPWoNzީ;5Zɱ-,W951 @=;隶z:^C$9RoK. lĉw=4fn&7PjT#VI$ZL2HG&S$vYn|\ZcDG9V$+B.DZ<WREY 7)`T6M#Ic58Yn1vof׮mUq7ukmk\pHz넝L:d*،hTURVUlXUSI6%+ZP֔%z*)5US)&"S{6nn3͙ 9O+۹$?Z2H7P2!m3o8`h sخxb.LTg$HkWp}mW[&"L FG D`>7J"kr+}Kv fDtFИ`p QEy%WW+oįYx^*~}} y~Sr}՘U98WFZ^gvrYg#JךO/3h_ޫ/}H Y|\[IU\ZjVk>vrXkqݶַߨl ^]LgNmw%= nXT~psmu!Ю\j5:DT 9th3zz˝Nٍ Fʊ1^rk&גWi^67(LV1\4qB֧nroZ3{{ mUTCˍm.93tM4B}hӴNYYW5٪ݫշUUUsT/5!'ğ=',*UIU45 <6ؒIH %8|7jPXYQrTmlR}uu|d.ܚS}:/| [}7㗗ZxġeT-Vf(]t^-|D-RG'(0Q >o1ՙ>?@sҷ ޓ?@P8?zj7#ЊIFIl-֮p=ȌKHVhke_w]\P\Ң~͕Ң $[-%Ӧ+wW;LTY)ǯӨ6"HekԷC_ |[~:àPp0?P5oa`<`!ii43ӷt!yAPA8<. xàAPHITPba&YoBBizM! NkӷaoWh444445Z !CB^A=h08< %oa<y= }? ޚm?2'NIl6OTS䗥*NĪ԰Ggv?aǜH}Ĩup($c3 5eAlfV]֮8"QXQ!X/IU$IǤ?Ѥnv¥[WW? ~Ť&'a+_ wYjyq G{_vq++vǚswf]Ch$Hl?d?ju"{fB8>J⵭jZ?k6-&zrɫmՅm&ْ(O>V _|}6ڴxr &\K҃ ?$HM!4CAǬ=̖{!?# ԩ5jkK-a¦E~}*-+vyUWs]Hm߮k8S>tUseVٛc Uze HId ޖٚqi}%5mbXƑ?s*ª8lZes%0FSq?_,̞yuZ֛:T”mEٮ 2ɂh>gƣXi jJ{e12ϒb:MfKs1k*&G`/ 2|RoLabjXD/BhEDo$f#%1e 3ԐʃR2'RHjZZ%>av*]{dn1f?U 0]}A0jE˥jiM錹mĘDDL 5f ﭪAɕ\Ƚ\P;H*wruI}HRUfU-$mjь E~z=kIU[ZV[-󪾹 _<;Ts[R}Qoj6mDAVѱF*DVb*h,R[XJd؍hQVX55Fj+jmh*6*65جmQF֣h(5FbZ-Z6ѭh֊-5jٶ[[`[6 ڬVՍ^U4~9#5$ֿg|d_tDRM\'$|%I$w.ZwwK,)#$:9U+jzZۻ?|%} Ğ~ϣ 781:Oz}3&CꍖO$EU̩vdzj~L/~uN8a 3,s/(di,fTJݍ$ڑi3v/7۵rũ^|ՐӾXwf+SR8 L)<:Xnĥ\էN]![cV6:vyw誯HYR8_Mi+\oh' =o{j^4yhМDl$}44ihG??(z?~CA'ZfyWuNf̓ڃ*1.+>R5} (R٨8z27ս[e5|Y*yDḭ8: ]嘋&]nVWM%qΫZB鋎:]RK!vүAY'RfkPu,TE,|FI5f1ceJE<έcA̲7>FʥS$1 S"bC%֓%.Y JM4֫J[J\;+<.tUʼ֪VMʹw+EWFS%z&ikcJZTQ+b w!M"qSEH ZK]HbjkV=ZI爫(HQ_[{@i }ֻvzBHq* (+jWn+uN\Fm7b7d`VՕ7*,ՒKulj٩RqPieK~*qmlm6i)EY"ؤRQbǽۼb^+)k5tq gbSum:Vsmmi;uwjҸJmOnG-nyYyҥWJ%Wj|VQsnhutIIfVsmԞ]z:|P$ȟE,I f+RIXێ%QI3k$uDd]gVfTKfRutM,="HH^ZգS~Z= y4Wk[8m3"VjVmjS誱fbw6QhڀBmd-b 1,ڐT[0BԲL Uխb^.5]QGZZ+$VT~›fvQ*+<2_qZs333T}D'OYӧϮK>s鱹E2LoAK$SUU~3'Fն?gbi HE !} >γ3$$&Yx8v>X%D'p)ʲ_;oV'|{UTI>+w\U pqW" )zKiRV>VK5Uʃ+|ZW kTKSm? ,4z$=˜NaHN c糫iv rY# zc>r#qISr3N,K|!4"yUn>O=gvdb'+ggv|5cN|Y+K=pQzkmy<{|z_B'vɩ=% +'Ą*iU,%$3CcYeI!YbR M&Iq2RwC[KbG'q6RI<{)iBAo Ɇ{NChIV4`ta/{|A8 vi[BQ4&&ؚBitA4h=]olv!z <=:I$|%+LU,"jҩf%-*2R߱ ¼(үSp)&XBu>S2".:Vbz -i=dxUo/9s.-e}j"4ӽ"wVoVۄ䨺nq7!NHEgZ|M'5 ^&Ē6 ![}uRm/֯8jtJJVN3p.s7%sR mXRLJEK23S-)˪Nd6Md3I;:jvˇ(rkMWmmm p5;tI|?{||mE! $ssֺ:q\D!$n{7[ZV[-çud6/+ `qmn/zrnI)8PaZQzk^w&OSd*Ho ҢbiȼeVI$mn^|yת@ZHΚec)UT"7=ad/L'o؆ۉ'a05 "c@kBțwJ(HB #cݴ7ZfMYHכSII3Fs.ۙum]s;v,Z:vǗǖn껫][a2HWWXiUt̻C5R-jQ1' +UkC \Kk:^WhTY ]UQr%iTㆫqfXmmLS)e3FAjɫ%YTImW&33 ,P%6-j6#i MR E &fFP,Td̆aHj&Y $@ܳb'Bw:m{zz[;w[:{zk}W| tOko5}o-Í[]Xy0 s+"p2bI%/"p5' ȉ7y4m}:ԗfufzZu$Y%[.JѩҵG HbYfۓ3=><&\TI,yIDGjąC2ڬkkxMBég ,=DyK$lelz'(Y3iVJZsߗuVԇCYReWDLɼ's"*$G9*"؈n4S* 궷5W-\mV`G][ZWgfV&ZhafdP vַ31XeFXVw.MTO][`XzSC]" Q)d*P%FYe5e*Ԩʶhdv>DHC'dPwIGcPr:$YT@8 2·yHIIz|i{=}W>=6A( #v5$q֔Zdy1M%bkZg[]΍o5]y6xuƝdҲ[Yӛ5ڵi'SoPCTx0HT%J-X0mէ*U-ԶJѥhhYl*cf+Vrr[ke]j+-6ZQZTsC5~ړ۶ցUW>t{S5E4Pi%Z.vu*UWv*՚ʠS36j~}_•'IljjjD5sTț$NN)$ Z'W\pՙ$$ɗ$"E>u/S$Bt0q1C ZIFC%={ }7~g=:֫_A/G YI_\VI}933 3B/ n%X6E&"ܧil;+cL̫%jj'W?5UY-[5} .!Y-kc>uAZDPGʉ>o#Hiִ1?hX0a _;yk()l[57uni[RŻ](2Kk[?Km_\h)b)*H(!^Hk^c4!=i諪W\?]OU3X%^q_?ҿ9>/WK}8}K}^`-zէ2֩wz''j7 =k|"T =x )#\>מ/' P. z7(3` P;Ggni  9D(PI6vm.Π*J+E C@}h>uҼ7`=q{0C1cD"<5±Pі8݂3x;X[0}&gXa"8 ى Z֍炬 "4-! 8@̀4 ҁD@ hhRqA]]-GP8E?DԪ4(ѡh(!=M R)SFF@Iꤙ!HJ~FBe='#S##jR i&*zIlF"Q3F*cIѦ|>??on}PJ>ĪEz%Ew r4aʉ$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I!JR)iUT~xZ֚g:I1ȭ|7t.]/_ R˥t]/kt].#H4# !8/.K\_Kx>|#ӏ~ޏ#~H1"C1SPY٬QAuX[n$9ܶ;rCX(fT O\ܬ#]!KhtJ:tmH/ ɁCۨ-L @ }ӫb2ϝX`6HMLHIJP4$yDwH8Ot@lxMeUB$&KU^b@#$^C$x]p6ɢ$dJ*dla7M30$$`ʄH'<Q`"Q4Y#JS% dT2Fq8 l9HxHjdԻdR('VUGq5H8MKd43IjdM^M $MMH GQ4"ʺP,$Z&H%jd(H'U@p'Ɂ # Ńvh:HMdC*#,W1>|a }qnˋ_kIuLR TTq+sUۤBhvIM4śrRVŕ2`6[w9EUw42aP+}sswE1bc1ySUmjTK)S5.XMjTK)S5.XMjTK)S5.XLԻib0cRjTK)S5.XLԻib0cRjTK)S5.XLԻib0cRjTK)S5.XMjTK)S5.XLԻib0cRjTK)S5.XLԻib6)S5.XMjTK)Sib6)S5.XM- U6[-UcphyPcn<}~ }'VeOsР^EIwj7uR{~o@@`I$I$I?_-Emrhm\ꪚ.[m-Emr۪hmU4\.RA&Emr۪hmm-4\.RA$IUUUUUTp dI$A @@ _ukg;ߓs[o.^Զ&U^ 8FF+3w_B'QQuoo]\qhԎvG2;ʥjF6#I9ԍ:#Gz:x Dl DFV؎z!ܤDr{ֻf<v pȧ{"E `8P ޽t.GHỈBTEV lS+^"݉oJ9_&jDeZHy՘I.YmHt7^=)JQ$RI$III%$RRII$Tti۱9rtᦛt˕U^v">q~Sy%kAu&m)t4b\Y2T,VdY+,%eZWdcj\kRkRZԲF1#T.M%+XLCF2ff3]붺~g 󑟂%,H"=˙Qb•<  D;nxIǠp _ Q<~_mӻe$xiNK)%H"v߃}}]XjW$2Nf}DG@@ `@_{~yo{RJ>úiNyi@=X@۹Kۣ!,חd Ml]nGMFM:M;w}veIhᗚjK8JFPpJ%!=!,2XU)]c3v*ZUvyNBxrY|v9͎kO^?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUys9sukߏ^z=z$I$JI"RIHI$I$JI"RIHDI$)$2D%$)$I$JI$D%$)$I$HD%$)$I$I%ٱ0`4" ?J?=[u8s+sLͽfbb,,,Xr.\r˗tH!Br˗.\r˗.\r˗.MZj.Zriikvi?OW.]˻.\Oצm^/{^_K}>{^׵{{{_K_+|jjjQ9G(r_K_M^/kP(4 @rQ@P5 5(+^;{3wV^˶74`]nwwmoa{l @kwww7j ?naa~|ǻinanffaeفf黆aafa6{wM6я$1|xww/Y.Ǚ0ehz}ff3w!G?џ|xW]W1ȓUV+U%.[/R[˳5fTcu՞^yϯP67Ս%eR0{3sUk^U_~qD/W}{>>xw:>}~}:L?/~p> u?rɓ&Ldɓ&L)$ę?rɒL=L|dɓ$I~]~}tUf7a*Hc&/&"?g?wwww޶ﻻ DD6s{w9r$nI'r]UT.d[Icssl }U]lJWmZtUVew{wvfCgͪsel?77ݟaO??Ǔ>cy@/BU_뻀?шZ}@@~:=\:u "I$I$͸9uObw"z." I I$E;xWqD$IĞ/9j֩s>KZֵkZ֖kZֵikZZֵkZֵkZֵkZֵ'!,HY~spݹlo/6וsBԡs2[mbd-j˻Vn>ۻT/ne@ mTmR[Q6#mmj6bҶ"ڔ jRک D@|nZ.ih曖nZ.ih嚩\rsME7-4ܴ\rsM5SH嚩\rsME7-4ܴ\rsM5SH曖nZ.ifi4ܴ\rsME7,Mvw/O H@ H])IT5S;-o-j@ I՗- H }sZ~rRya1HN{w=X{@\^r=;ԭJ׋ݧl6}۽4##Lh4z?$|U:ŏ'Ӧq{r{c۱5kS[50c 0` 0` 0`1=:saI)ɣ2xF[q!+տ˿.ӎFXҜ*U)i5#$o#$dH+kf[5[:I$duJR]ӚꔥrTo᭿n}sݵ5'<ċ( GKjwutD"a/P# <`HF+"wӽr#.Ӽ^Nѳ Ww3d8sлJk9U]襛Kjwz#ӑt{zwWNE]梨1]9MwOz#ӑt{zt梨1]9Mw{:6v.tRzzs:)fRڹų]'{bHCE%VN5^ %BMDzmds"/ղ4xX9"'ղ4{ h<,HlMtDEZ&a:fЁy7JYWDP`@}-B2GyuJFvGy#id ;H#Ħ1OMN_\>>#$dMuV2FH1VAVJY+%dVJY+%dNY+Y+%e#$d2+vזJRD#<ީyFJ'2djGF$}>}$wSfHF(2A2FSvjЃ hDUQ_ >̶mmctuHu)kg4)۪}#&HӤgO I 3a.h2r8G0FLIs!Pósߞ/A&q:mH4d!㙙ef_fmXr FjyrWkJEdhѶ`fo}wKpfwttzݍws ˣ7۳=%ץ^ zwFjuWwVRB^3S "b`]FkŖ6}"E&)eA9(Dܢ@ۤn&車ml mI`$w`ݚEޭʻW7yYX|z"h'4RTQDM)JRx Uqw6-' \ذ +.nTv!u AVn[S75+y'vg7@J!r-̶d$T! -Rq"a&U8t)U7BSiy}﷫aBuy0<5Eik_*odlYy"7@U!Pr%m J@@R% mA71nKB`$ Y DN|xPJuZ3A="9Iu_Q-̓z$ff&'no; !]!-H\őMQr%T4( ܶ#A6$ 2{4A01SdUg[Vne^x2Wm4ttN rREHHNT)Jh"b&].齞$@7g|w WRz-hUUE q4#DUMT8Qd)5t&p"ؾWuUiәչٚMUntDrP*eU:j^eyuP5:m6Mfɽ/~s?V4 L0Mlؼt/)nU]}$1""@djQiU" n ["·7ʬDdcq+ݵUr۾\ 0 , GK#s89 mI+܄wq0]߿B@@޼s/0{;Uͅ ܳ3ww؛Mq\ʪmmA 7zmMۜÞx5жKCh[&-Y*#B/ d-lWlQFm'!lc#B- d<blQ^sbsn(أdbn66֊3%կ Q:ŝH ${:t6}h 5ց lݱ͸.Pxƀ3mA³0dS"/tzPmgJך.ƴUS Ak޺feXOne%*y.g5V5WԳ}YNe̕7ś]lmMze^MfmDG}&;3 ۻ`y`<{0n̻z]lc$7?>qγ{^Rɹmi@=#y_\VM DDe eyu)I^=i,ss7WffYxAJ zpbq7' )ca3kw;wͺo"mS7"] sY @1 -%z"D B" 泔PXvK%x0H UTO"[&T[X1`DMq ]ݡvLEy|MѶ秭OɌF\i@rJo&(jx,nfB Q$%JC%C`rFf0v   `VCC"&b9=*9s9nxw&zR?|*y{}=Pg_R 3uz2}MU,@0\`0*3(!b&wBŌ\2KEX6Xwa:bPEWc ÞmcsÆ߮|=v/5r""r BյӜ8ۜǽuY\Uc0 M~!, `&|. ː"и#33D|;܋"n'B'#?q#J_oݷm</~uT؂ !XYn|啯,;8u*O ({i4QaU8D1b D i"h'2b6D~xn}=;o]jYvUUA{hUd]o>`0vlW10@f,lSi* h7wJaHw ڡS*# D.G f f7b%I^e C? |{bu1 n7wĎc̥qnRH H],̾BԮ8LA)A+ţ3J*t̙ۛ}w$GV7}Ws1d@l+U i˷l`a-;xހ)) 0U}}iY9 yeb$+2X)q;.y|7LE!z`̟NN ϛoli<7nν)]p:1}}e*91 Xkk•]*ƕຍ]GGߠB9D#]8 ^f$p۶/ ˺fJj񳝰@ @uNI9@C 7sl^fƛn.q%yYvs4Qw5G>7Mr.)t#p[;P2mF ۈ-_כ`#"<]9p܈hy3׮0~z+qu9+mdyR9ݿ\G˼9 $6"+\{pkdܸCdr!S]7N@F[#\ mvkҗwfR_*}QX׿㷇;ζǻëxX`{wkwt Nj1a5w@qmmmainqN#qN#l[YgPLYkI E @XD&ƔLm]mI$I$-͸{8vJVxs5u6߆=!BN{OL((EMOsYw]=(pemOOdy~ZJf.UAx/}-m.LVFffy~o377[@BDb:G @4ƲU)fL׋x-q%4 @s}*WBiB]*5W1!^DU\XڬHٖHDհr7`D [xˀ"ju^UWhM (Fb-X4heUf{}žēwO@="k~f6s{Q!3mY"6 @"e-2QF\H#]7Sf{;}|'qݲ9v]^8%}}; B*ə*^%V8n;G;$@n3m[#y5!"k]or[f*ST7pHۚN2Snh b*b`,8gs<ݻUcNbS'wn;0锪 ].K&HJh4jQuHtEInjF)9]SBjg: 8BOi$tdUWRWΨg]7w'v罍ʦnTnLT:M7TYUt"jݤl̗Q1ܙ3$$-U*^۱v$6tAezDdULSwTlUEX&n3J7SySF N]s0d(V[gvs٭{\@2H-tꍙJETF՛nYrjUbRb2ҩWgnmu/xF^;8擪,UEJLSD/@w5>>@3.4߀WswwkښrUꊝ0s1XsN=U|nngmogV;0NvKsq sW*U#UEc0]UU^iG6 AxnwBE130łȲ. ,QfO$^Ce!!'=xO%强F"`@hh@< ժ;A/S#Q)mP?_MXU6ƻd)^#3锓ͅsZU-\倶vFe֏F^<݇t]^Tbr}Frޡݹ>fM-30{nl̼Qm_6nff݆fwa033F:Y޼ǙwYztth7vw{4^ oY!Q퉡R+2<ak=#6UۛSkwYgNfH5)djJ Mbʱ(ڲ|~ 3N}ҟJ9"=33@ِe83QI9*=^[Dp".m]BFb"D6"2AJ-ʪUS R)tٟ" fD4FY4$woo9So+jmfkR1U{w'^^G'WJeefen!řw@QwV n@f+D@˸#{+-) ."Dbua9Jn+:{4^O{xDG3Ȁ2EyY:Ɓwk7k#*`fL@gAef[Fﵭܝ93&f`  q{owtXJ־D|@{+̚˓!˶ ݙD̥Ce6Auv&}ݪ?Bܑ "t'']Muت{쩭_s3MʧfvU×H" 8"@r~  Ͷ1](S(V"[q[Rz0t|U*p D@LEOT7;x˼={;DB2&?-3m8>!6UfD숀" (GQWH?`QhF!2Fwq~|o^}廾 *mf`2+B"H@In^smmۛUUCB\:;PJPR8)8&[iѬO 98$i-xhR_;0dt ^E ZUV`@Dģg& @@2$.FBDRh&ږ:4ɫznʶWטUia΍׻Hvj={3v5NFM:ѥ{;#s^U5SՑH/$dH3mm`;`m-!wc k/Ltܻmܷ{nmwkKe[\v_NT \ΏA ۦKXnw 18=D\/9HȓJ7ɥ^^gv龚'/6Q3JhK@0#*q t NYsn՚HR"GUYJJJf:\|mJ??z DyۧbûOVHs\Z)'F)*I{UM|m|xD0! }"T-WsփǎκUMs,{;t煏7|нc! d%04*^RGy`]#+UyDR>ՑV1~{8gwD?@kLg}ߞŷj  7D܍hH,M9T r ANeW7@.3GfRԶ73vwM>4y` nimRt)8*I'ܙyND##s&gOa+$Nvq[teЊըBS*jε;mu_{ǯI=A 0Ƙ# 5W]nl<̾s2mD EW(u 2䆻>[&)KÏ2B{';`#DVH3l ͛OZon}K )ҪJ"Cm6Cԇ\׉OOa`Yu }%e/fcǼJ51P%mGPxv un؀quW|؃){*yg[xxM5Տa,3@mJlmd+ 7u`]6))RRRߓ3'3poN)D.55AS鋲d!âh$zD+mH+Yg=ݦ[ w#I:绹/cE%- (ʈ&spb'Փ;ڴt_:2]nWoJD[ok'bey&頕w%;X*sx-TO (.͕?FW?GiD@V<3wcs m6`>fy pZ5- KmyT2H@J;"ϋJPN{: 6HqH<>N< 2Sd /2='sjM޽[w62"!Z@i$ UU W9lC9pu”g/9 rD"j`mS+'odb0Y{B0Js3!MvHwsJX@I@mɑ DXHïuބ8 μ]Bwe֬o2# $@0)JublCmJ^NsۖII!C,v< xTE.][~:O%sNn $ UU@4h AH%HH @  ** zhs,Z&*%={y6o6wcC;_=!M 6<)J1 `'/0p)sP\{"@cQ#5U%X0nekUUUUFFfP$b2 ݈ ؀Ym<"<ttB 1)?M] J˛yn*.\Ib J A%@YjU96 !{$C"f`L.ubz.7nMmv12# j0Ɛt<1 *`$Ƞ PET "D"j@uSuc"֓\M[Ǫ*Gi'UOYOQ9^UخL̬=/]A⡳̒o2 6lwwwm"32"\:g7f=f̻0n_ڠ8tū wA:emߜM Xm7c~o@ -t S $DSm7/]S63.1fnrBUT %@/I@A1IX .ESҟIܕD@1$ #Uyd˶zۻbj1@,`H@6ۀ8ځ`뻶!j"b.Ёm m mD`s؏) jȝ|'^UZ7tǑkwr#B@ JBB-- E%i5D:mdWNli$`Df6FS_JIՌ^g0nn3{8[C 7n':u PLsv&v  *eySbd 申˚ *vn3[cf $bd- iXl@Ҁ.mh@@~{sULD $LUVuzNk=l{ hmBpf[` !@.fb"@a)+" ָ[*Of߯]/c^[f`w}a`lݲ';w^Ͽ7={mz뮽^VCq*wx٪WHH Hd6 Ywb2 &Ch@" @$!! R!$P@1bc.cO&ߪg"4ZYqlv`BH@ @ ڀ$mDEcH ;?cIB"+{Jt*@=D(]v{xTeӽ4ۿcjƃt[bBHD)I|1d Wr`  * AfCn,Cif$v >s>WB|0"<_yܼNV$Yۻa#-1d']pq׈YtնoYqK&ACvB0dȵ`D((q *rgo;7w631]D(#!`%#:! iR8BnFDPA[@p Be`1|A#A!pa#+Ky^~}$ȯ2wS9ޭɕS.ûܬ*.zmϏG k^Sn誙1:>T*Em}rm+֫sb㜹9wy|}s߿u؊1DRim{w;j98q'{)'982 ԭ}wsV G3<zϷʞ 3&i_`/ dI H$w>iDDy8m5%D{D|N"~sT"2 !r"}`(:sz7{0"L\ͧw1% mXPU`1`B9nEJYO]u)g'] ͸NuׯZ-QhZ-:]Eh-ѴnXHH 0$I`@r" _'n=ز۽եH}.NxX)z5=f]X]q QNۮQ9S~G:yRn38Qsdԛֽtz[ET#0 F{ϛm{js.wn%q+" ہ vfeX ˼ʎ9y9e JksȄܔ - =Sϧ؈A@D `Y}^6Tcyzz/s>Ƴ\q!sÝf9a:%sfq'q`Mg;ɑox$sys LUc$瓬u0戆ř-"h2R"Mx}չ dH@})6˙v.$eDRs%*ߎ5q•q"&]q"0 BAѶ*XJP ^;ttk߿9jOm/Z})wއ>5A~~O^uh.@wwwt9f6<߲E.%(Pk e0 2ƭZJ̕%c%jWj嚮Ms ۗ3[F2F1#H$c11##M,cU&bjV2nŋt9dc&fc<RGJGȚ= #0%LbًL0dBdvT-0jp-Y0r$oM}mjl݃Q\H9c搪GKF ,譍8ed-(% Eޮ]mEQs߳vlZ D4Dn@63:Y ffQvsז[.sɚlFx+(|i+,%+-?b( _J9}mU߅*tךBsspI!HZ63fkY dR.JLI--ZjZ*5Z4Lb.ZZĬ[TZXԕM-C)+DzkZ3Yɖd2e2̙fL,ɖd2e2̙fL,ɚe2̙ed2e3L&Ye2̙Y,ɖd2fieL(VeQ( %ms72$4Hm-qYprg-\qYprgmEm-ͷ%ͷ%ܒKqprg-\qEm-qȸm9h6ۃ8[jH12Y") [k$JHXmd Ķԋ6ۃ8nZ,mےn`ےnAkr.9m"㍶M+j(V 0B(Ei6]Mim3R"EYh 2 2XBFFB+B!UdKe-$!VZsn9 XZ+Ih[FƫcQhkYqs,VIhi-m-sISp͢ZKIi-%9km䴖ZKIi-%ZKIi-%ZMI-%%I6MIRTRjMIRTT%ITXe!8@v°D5MKRı-+Jʔ C(d2L& C`Y[A6$*ȪŸ$_**************WOTW"݋[6*UEF-mL0HX@@=UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTVQQRh9s8s6U@[QmDDDDDDDDDDDDDDDDDD(.\rn.n93hjX#6ƥ1chjX#DcRԱF5,mKDcRԱF6ƥ1F5,mKDcRԱF5,mKDchjX#6ƥ1chmKDcRԱF5,m1F6ƥ-fmm#DDDhU#mب-.i[Z*(ؒVԶJ棙TW?BQw~KbGKb"*URTH*4 O Y!GK~_:ĸ+I*.͋A6L *U絥?B"#(|̟|^NWU>_-|9\\m3P=ORy/lȻ_ޭ_Vjկ҇_UZrZk[[-jlllhڱjlllhڱ[b5b+h"+h5ƴX֋bw6! dM!#HF+$#diIIIs.s9i9i9hJ ۼ&G˂Urƒ./,!dX`CpekZ[C:kZZֵkZֵkZֵkZֵUZVkZg]ku^:'Q_I=bmj:Ai>ns4Jn2]CUmu W#%5^ۼPzn2]CUmu W#%5^ۼPzn2]C4s4Hn;A6dw.6Kj yCmdw.6Kj yCmdw.6Kj yCkoo>6_ c1c0ӪwKsZ5{b^UU JUUH AUR$A$ *IUU JUUH AUR$A%UT *IUU JUUH AUR$A%UT *IUU JUUH AUR$A%UT $IUU IH A1?1 Ldc1c&,mm61c6lٳjW.@~_ ߕVW\ۿuml3 @"ڛmdw6H)?}V3H5Y[\s;}dRA|( 4+*;G|zN7[-+Iֵ ]|u1z,eol /0WY^ŗ_eU{hصM4&YVsQ[7Z '|goo0Ͳ S" Q$la&`l[-]w$yc,| <X`e*eS*LeS*TʦjeS52LeS*TLeS*TLeS*TYYe_fJjnŸrDbh«V'RhXZ\3܉\ '*- '{çD-*$ =J0ڔy?}/ʖ=)?ڃ _m,Rijz``1 HuXڗibGK높>#zXK?u-{FH5+tv1d1d?YixHeM_S*YUSB}WRbWޣ:;7/rįپN縯lKΑ`DZ[k{oJ$_\JI$I$I$I +n^Uuu뮫4l m@6` h4l m@66m6m6m6m6m6АtpEDQEDQEDQEDQEDQEDQE % P?d@HC c"d7}6 Kӛ9y_?v_OT'wy=LlmJuE!%Z-a ,`fc$ͪDDE5ZWLB:keQf~GMykHiaLZ)$}{onmUu9Ae_՗uv5SFa6m.e݌2|<=#BS;MM)&oKmAR>O[(=Hԏ3{{wQ퉊ȩ#9H04#dsR6G11PB$lbb 36HdTLTAf#9ȩ#%liC1G15B6G15R 3 dsT-dsT-dsT-dsT-dsT-dsU- HLk$9 oTNB2́ f{_=UZ֢jF5iy&cH◍.i QӀv *WH_evݕi+ڷH~BC1[HDH2EKXaL-J+A)k~6zsݿݮs5m2A{GOST{.A"%Hwy:f3 JoTr(>/}~hRT^rSJB1̋?$|mI/$D*Z$!_"d:HsQs}_WmmfLY$m"/a'[wWw϶%=N.A_wLͳX5r+[jr7ZTTG>}'Œ10E~oT+5}YR~ 0~_"z+#@7oo>uMKx30{{.3#뻃 dzl(~XʇR?aHl?ϋL@9#-"qA5=Ay%.ċm}ؑ{_؈#D, IT%=qzF2 FILW?_pM~?T+b+b(ڍmFmFmFV6QQQXڍڍmFmFV+P1hEE,ZDFS1:Hʏs ղF jZĂ%RVVXN9MT[j##Z6Ջm""""""" sʭZTO Emx<'v{{ ]xS #"|=v) 4Ԝ_Ҥ N~Ga* /5ldd_߶[>Qb0O`* *;v*\IW|#2jUlJPŸIw$(}?|GҔB{]:ʎ x}}I e5'L^oҊd=>=Fh9WR~Aߛ]+%?)8|vVW+SO=A**o zU'k)CR/ܪ+߳ ..WT/ >̐}Ԫ&M/]Gl͉@"D %5mjYZv}&A^I!^߳?{`b<7U^lI$I)$I$I$I$I*I$I$I$JJI$I)$JI$ۭm #@mZm-jkf4d2VF #Z~F[WU.0@ ڀ@AF6@Db "1l۷P}IW̔r?DإR7؄nIbjWG NL._U&GFD?5i?v&SPu"d@&ֿZEI ](T֤xX{િ/6-ilVѴjJ"5Ub6*ړd[,mE3h+F_U9MkZֽұS!U/9'Kd)_QI|%p-bEmK REIܔ!U)P~*Ƽg8cEgpQȷ*ϨEvXAG"FKT5~TYٛe)u%<ڪܘ"~ d>7VZY޼eV!2Ivo6yTdݣ}kX /Wmb#,u#d ,GQ ~d) ])OЃHA<)槤zx)A"$ )&2+pQ4҂ČoT*u))q%SM6=u a"UI[eE@G?8ب{4W&0Zu_#C$^^О}wԪ2S*)n*?.PO)S)%SD/Or'õtߪR^thUzߔe$f$b/R ږSvoAHT+ο)& ?PR+~<6ʑa{H=eF{*BWd_IJ*Vi)Krڷ1$oI"E !XmiBlLVP*iT9җZM"$""HH""J[R֢"""""""""""""met ɤ:6l%7#%W9j޺dIƩڇƀA}XjY+ uE<O \H_9lս"Uա )ħ+JԪ)=()*=j{}« ƞ&Jҩ=*yzuXF4Uq+[+f2-Ah&bz5ҕ󤣄Y+%(Z h.]^T6$<?+QXR–&krPwRݶ^כc#1*DkV1F6l֛=w+8$엨bbN~In+HOY.ݫwTIKjR+ڔf@ʥrͥ k5UJlN/T++iA4kF@)dAAD YAD YAD YAD ZiA4iA@)dA@)dAAD YAD YAD YAD Y@)dAP@FMhb J0B(RH PQA)5ʭ\̹96Fԑ6X $d)% -6ɲG"3Ԁ>Pc1c1c1c1c1c1c1c1b"1Db1S `SZTƽwZUM"gn;tێ!zI$II$IDI$DI$I$DD'/WW캹j=[\HC,ﴊEӮwmg XsEcDD$EbbbXV+TlQ",jQXV+TZ 0F6%\JlG|Z-HJ2FH1LSJdH]T-fK4@Ӥ u0PM Bj嬮li$II&M$M$I4i$IIII&M$I4i4i$III&M$M&I06j8NnI/~Ҫd­ge4N)oG}~-rY"m{B/k֩jXIoEJ)uQbc~DlBS;ENo>bx+ӢERWS]ȸd`dTjE$U`vHKIZRr F3Lܶz /W8+KzQIW`xF{qHč $X \Hm/:{-u.SE AIUO7PIH${c% Gz#Я시 d^/WUGI>JdԍbFTGA'UWŋIEz% ((DB P @PA$J>M{@dt5Qi٧r4P;H x DfҔ&` td:kwK 0 /RFrtjG-Q5BGY:Y9/N] tjU ґiV䔽9Ӑ䑖f2ŤgF*`{tu!# %e6FXEBU)%P $!P%U $<wND"J  Hy *  HR@H@HPKIL* Y!RNlHTHQ I2R{ -THRJ$$INpөX P@*"db@1$-Ӏl4qEs5sMhCL7U*(Ή7 ,r'WL 4튮-siCJNbuj` -Yl jipckPΖT9@'J)PP(ƨî۰ :]0s$uaQ*l:BgUJLުjih4H @4hM0G䧒=5HД4ҧFS6SC@P hL#Q)$y~T4C5HA@ FF)i4mM~L4㻎;㻉}3 oDyE"{Q*z*a_?6lV kZդDDDDDOj"""""NuDDDDDDu-_uZZ޵ ZդDFkQ  k]":֭4խjդDDDB'33,0?.3:aCCDG]炼õ77??tSY<oiUkNr`v]/z ]cy\p4SOөjrisb}{/?5D@=> (ς ЬN6#G$T/gx"_B#>8J}a0 0o쏮S\54cؒH$}DWuViZLebYZUc2&J*VZMHHHI֤$$$$$$UbY4H[fZYkOܴ9nlrܵtjX%ͳ6ՙRk2eŬ6\nfSrJkƤ$$$$$$ҮrͳSmdm5g psf$G&Ͷfٹ7,s7冴֝7-W-͚=7:Zܜ:XZA3AHmZ6rG8Üf 5fj՚-G9ifNl \ qn3bc-fK.B3mU$$$$$$ՖkRk,բesuf!!!!!!!!!"jjH[ Zɑaa&ZɐUJ͜sfK\ˇ6q͜O*He(F"Pt"k+hs3EJe&)2Y2ZTl͍XM5mZٖUZֵZkYbѓbddK$aQ%1F`kͦ6bXm 5&6Z+ *y"H]1Vjffc$)*R̒RIE$R%2TIRE)LQ2JQdDDTXXQ 1S%)1IJRI2E,ɰ65dlCJ\VZV2fh3,eTlR"}XOXͅ6k6L̓4EUH6Qk mB8dPi-CK$&bc[LM[bG冣xj9Hla6($1v0-HPX`@&kfc-c%bX0- )cXr69D!8IĆ$tCLkıSƱ,[Ʊc1[Ʊs1 L09cXb)cX5ccrj6#Q`o&#s0@5`VG_`[M;0[\=hkVu+_& 힗{!^띻CX!HKLk$1 Q[PW4$CIsP.9ǟm^z)}g˫>Wي;ɫoϹS/g[2o]kP&5zMM?-3?=QNR<~~}$=_ؿ>o~u~߇;ø\ο asQ}kaD~M/TߪoSxSWC~JQG= wfdf!#yۇ922{ 6$&̈oDn{6 X 9syMV8溮oI!\;%t$P#LH7CVәc\sw,tFPC4u`e8z{C#[FY D#WeӍ`ę6 a±g̚ݹMj&$4XCGJ$8\"M(Le٤P9ƙLNV"li1AAS&a@wߦ$?MI$3_;-hq.CI1{4^Eh[pKhKpKhKpKpKpKpKphGE}U4l?lTD\UݗggYRG4̻^֗k4M +Z{U=敭$Vtj{MjFs}YxLwvG5wvpc9cYmCa-ca-Y-Y-Y-Xhs44 Ŷ '4444461:3V1ǐAXyO 356559cYEHFU#LL\DD.,H,r2dڮ8ޓ[bzCj %&3:r-.3IBj6OL6K!摬֑摜j9m%n%k%k%k%k%k%k%k%l ! 51כ4mۙ76 ٙcF^! 3㳌㳌㳌㳌㳌㳌㴚Tk1A`45 Qc] |S&qݻ@v]QUS747555342IAMa-ca-Y-o:ߐ}bUowyysU77rdw\uW{s1SQ%TU*ֻ%K%;ozw5o~MڌuΑ~g3}ԛs dLfD-ؽ}\+T8XDH0CiD8I$6!A9eqq# 88 /08 $ǂD9ÎaGI5DI#IĜqYIqqfŪޙ 4,l-WgRʺ|wԟvEVS N{k/uIqYVg3Z׽"{9NOf/2{娀Ql$ t'r%C@|;0DU0L*:t=3&I4x#ԓ@DK#ӧi:\FHi[-ikmn#N:tlu*σwHG/}Θl) zI.wth"O@w% <|ublZ!qC;`@Gώ}~"%UNUES1pҪ*3.UESQTT#ßs03LJ}SG'2G/rщ$}*L׎ڍ#ӖEyu9z9IpBs8d#VQ#mj8 ٙp%<ˇTU8|*誊 *}<.bɘpp"0 *12UES1TU;@ݾPF(|5C'QSޟp/* . pUES3 "!OS0x";3A_Rx |Dژ,j>c_1[-ץ{9< uyS{ {=< y"FIݩLKª*,x8Ywn*ɘpҪ*0LˆQTDaUNh8P8H8`!I<%Jprf"\8 pDLaUNLK@!H5ĒPiÇa‡sD_DDDu (!>3?o*Lv/p΍ pDLxUES1TU8QU W#]OPFEc&beÊprf"VhUF#i)jV__fwxjL}Gxk:PZJ˻'Ցutq7dTƳ׹'+w̪UUUݪwVMSos3ϵŻʼwlj}OOQTþ&eMUUVMȪI;{߿uv9ɕsw3KWu۽^Uyr/]I^ᬽޕY׼U$u.ejLs飜{̾w=[=M꨸3.eRQqWv=(eLs$빗M󚮣*nǹvawʖysk5yosw''2]2]]3ergْWq>+o|d;]Nv}RbvܦJNmNg5SޒeLcq}Jf}UUZUUU[UwuʪUU$R5UUUUUUWw\*IUU&9xnu̫559{rd]UéxY}d{/*ު-tlV7o*Ƚ˗7gVvoڕ;_]g}S{WמӎW75~r_Z3g"m*iWҞr;9νo.Nve5EjYrk2z9쪷+ʌ7Ly^/E<=.5ZuPFa!!-ODkMCk"רX[Nk69j|ח 0w1rRhBǚfIXŋTEcj̬+*Πwq gwgś<u8eNoTѽa&e|^UR}-VO^N;Vb3Zfn|5Ot,o}=lr;{O}/r=eaŜf 蕊_L7L%uTysWM iZ)rfǹ .xͤ/?%%j2|F{Zj+V뗯˒TjVkq8ι~{jvv/\xǝ4xr}KAb{^ yAJ{=;[\[qo$Yekjgo;].=^W.8|^/ׯ^zI$I$I$I$kǟ m$$I$I$I$ǟ6JR_@04$1GۅA꿷ce{G~_ު/>Lx֠@xxxxy||>_ȵۿve/f$L̻]̻e˙wwwl32fwrwv]ݮwwyw-lwll[.dfZww2.ٙ]˻wvfLfews$I.wrwveeܻ]]]ݲwwyۻ컻]ݮ٪eNv2-k䚘]fgs׻wvk7<ʻ-wrwv˻˖Zֵ߯wyLO]˻kd̫wwwwwyܶ]]˻̗˻W|\]Vfb@l 3.f N;ݭGk̶゙&g>}jU\]޷>e{VgYMSUZle5^o>>V'#ؿ_=f{I$}əu?$~Z]&O_w}گUܙ.yI"}]__Ooҟ}Gɹ̒ENUrcIvL/~߿}չf2'M}vrM}Unff>3YWQwM_ln4?(G.#N_~@[~<7bU~g/w%}33,r]﻾33i䗟$޿ֻK~#7ӎO못2wNOo׽^wyxO^/ߏ.^|]g?i~\}^ܼ.}~Nyz=ލwx훞۷O +mo.>;gѻ^[IeSUF\߭յ+@3>I u[ϻjr@~yw?}"o't$IHN$ISq?_3y?kUQ>jn.9qqu9oWJ)! !˽;uDE#WE[+}ԹkvwFld\%2ԻCv*7sxk37};sbw~V9 IښWߵ\]].w24\j/ʪiW7ߵzv=r7;=0]Eٽs0o oq9[~U됭[ګls3;<#|6frWSnSݚe~֣lY3Miw3jyڗwٙm#)fo)^w[]_yNV&4=jZ$\﫸dh|_%~]Vws#ܫ2z; vI'wo˺ڏG~! }_cu1̷J|^׹+'tƟsOkxU?ffI葾A/_@q?%=(Eޭܟ~A.Zpc7v;}U1ODgsNUxrWCs`IG~lF;@OB ;xf[qn;}zuS?uo興wrA~*^jI"1Kd*Ɇ+,h&Z*I$HڛjLZI$1jIWn.i5-#FRkRhZFjMZ 5ZaV55.ܿ]$%iAALIV !N:HIn[DADAAADޮnwԐAL8d! 8 [k[u׫}ZZƴ$  $I$I  զܒI$KV&n5AA6:*3cO#mN&[W/-ܬߋK#"oY(nw0!lHӟ!$jժlI$pӷ!vNCʨ ;fĀ "SRo$,ٗ[m 2+Q"'ꏟߝi6nƆt77H)c; 8A,1/ _^R˚՗^Jdo4dSD;&bˇS!*N⟞qS6RpAp3,h˓dAxBsHMUt-@EL8-a+) @im/S5cp7 cp2ڞ[o0ǨRTKېHH((J$ 8vLyj3 af hf2l.ܵy:.9W1b`f&y,gw+u믷V_1_j}"Ly7WF=0|{̕P%g\]OR=^Ÿ Fw[rsՒI$ffff8q9I5ުqXβ[;f?wEW$>RI&3홓./C2ؒIw..O^CII$@ffffOf3wyw^秽9Uv_ww]W{&si7ٮ~*k8hsD(.jd]0Txg=dNn=KΨOȊ$ aw{;+b!;Rֻ= UUw $bI$~7*w wjRuӮsάȲ,#2,"̻3پy眲,"Ȳ,"Ȳ3.r7~y眲,&MdڛSdڞ W\:{99dYEdYEdf\5swݑdYEdYEs3ַs,","3.fֹYEdYEdY5kZ9rȲ,"Ȳ,"̹kZ9,"Ȳ,"cq-DKLC $0C $0LČӷwy3$ΰkQ,(frk%@L0rL:^ze[[q$IUYq$ z?M~޹}jk]s"Ȳ,"Ȳ,ˮ"Ȳ,"ȆIIwzHa!Ha!xwʡHa!IIIw&ɵ6Mbض-;xQs472033C $0C $U\DPC $0C h3 3 3fDKd0Ydf&[ZQf w7K B)&dj̽ޙҎ0!{y18@C׵kM׼kzɘUkޮ뾪%ԙ$@_zӳ{ݹ[\kZ~00[9aDEk[ַs,"+ + °-kzwqfaXeFXVdeEaYk[u[űmO%bض-Z޵<3"+ °H kf(Q.uuh d + °+ frݽ[9il[Ŵ-bض/ 浽k|;Ⱜ+ °+ d kfb%s23̝$$̓01!C 3;32*;;fR 9b" .Ƥ:v3ח )>o\HU^{;뛩$ۻ8SyT&ex.]d&!H& dff"j2@$ 2@3 $ 53TKڰ+ °+ °3ZJ+ ° 0̊oZ9l+ °+ °+;浽k] -bض-hsu9λYaQXVaqz;] °ʊla:`vdlI3*2@VaXVaXVpֵsSbڛŵ]֧*y׌xwtIy_3Î3;3;ΘgL>e7 `<<ҼW, fI1$ fAoXq=^0P̃ Cc2085  w!d&3IN70 k1oLdVd#papapal #nh^; aˆB+0Z#c0|;$v{;0papa !qf1H3y'-$kha ~>ߟs3?owfT0e&aI2_>/D1  ,(TN]}:{NJ ޽YyU ={jkS{7_k_Vn UN "qqva#c0#9VUy2wpaw#fZ2UU[HpapaaUc1< "q)Ӧfpapawqq`t-cNyЫ\$$I$I-jKi"""&ɭY"H$i"H$&$ZIf%DL9UccU:!HBDILDJ#3ʹUUUbI"H$%"HƵYiTI<Ӵkخ&BB̝wY54$ +d ;0W ";$^jխUI$"HZՙ4LLLLDDMj֚*HӧMs5WyZW$2BOJ$ZID$M-D$DDID֬Yf۶HfbP $$2@$L0MUYXنDFEDfe_317ݓffdOww}wLQfo}XHܟhP3=fTh{_^vwpMɗI0wwwwJŴh҇z?V1#7^?g|eFXUgՓί^^o}ߝYm΃Y#yI~wo&kb<q qF3aH1FY/-s3 :#wpa &aF)FfguQ{U;UwqtА`YA۷ȏ},đ_ů՚׼A|/w|߾wx `ۻUVy$$㓽fnnkZ޵>O#hCD@xq)ʬw;""vPWtGuud.Mf:#I2I$$k3t>E/F3F\@ ~ 7O~wT|i%#~=\ħqOuu7y59HoT{fڷirYG~t?FlId"@`9Uo=v>32t}w򻸌"# ɞ.ozλaA~:fi.IgB@R~ BLAq67knDEμ׾yFD\9. !"ٸjgcUn5Î!!%\$A[)u׫g^83ۦg*_tm0 oc#dqcdO6_{쮵{1$*;^r9&L33@srkfc|*$$$ 2FNdVfso~saDG2ڦ&i+XBLL\5`j'$$0-$Xy[Zd2|I<BBB@,UZ߼Pj~uW5yۉ!$!-w2B@@N3Q|-k*dmxy'<$?~U|LÓ>E3;@$i0%>r5u|ɉ$U^$^d $˒3Wwλ~ߠߣ0Eh2I2BBG3?x?y^f!#C0;080C8\ۧsc2 ffI1L2فvxa05qy9sbfC3LP fg2w`8f;/< ,YfdQYW !vfyZ;;3aǁwy08;3C&;3&qѿP%f3$ ̉qvaͮE;ux"Hd̃̄V~o2]:3 HHH6 CG37fN33U.}/NvM BIKN}Y/{U^߷$I$I$禳5zy~x5dᓠHH"*Euu]}135`(u:}\GiDDWwo}߹DDQ]^u]~=˙""N%Zfj#woK$%АZ˖wTN%_]?:fj{H~N&h!s٘}^:޹$U[W@I.I{eMo^u+}yEDE#v$ x BF=ycJy<~.("}rj"ud ݬ B@\γmUs{".ugyLso:E5}=W*MUՌm<'NCt!D82mU[1:qӧ@$eL ݬB@GeZZY(y!{$F>]{x{2LXjB+̫5Ʋ  0$6mk]e~)Wm=' $I$˻ YSޑI$3330I$@v\ww9Efvd.DL̐/ݐDvhb`LX&!ªƩj ha bjlUBz#2wt(LѮAP55[(nΥ;D_wtWv\<;ޓUv+j 8 /0Mr5 yYXY]4Ysd 792ED]BQ MbƩ 40.Bphj6f{{ũEP4K̺L HC%֭'J˔خDּUӼ$zsweD-~ׯ*Wl+s5{o5s~T;ʆ/^;y} )_yrq=˜&s\}ns:$I ffff@6ܾߵY{.75y{$ue13XqRI$| I&fffdk{..٘F3.$wwvI$ $H $HK==]32zjv멯g/vj3]y¦#1^^_'OrXPV{xTHZ˭W>/W~e\gZs29 iL1!!>UEOx$FP;5n4J:\%@t8335&FHU[޽$fd 2,OېMBHF4o?l޾H"Ϭ}|}g8"kW?{9]! HH w2t! 8А%y p'w}˜{][jıiy,FFdEy bbq3"\k2t+kϽλDED%ƭb67Bi_C'N2%ˉrUK{>wwofBS @BN1.!~@A{Ǒ0""#/}כ߾DOs|wvj""6o5}~":'UޞSHL(Œ0~/]w}DaDDDsϬ|sˆz߼v{]]V HHHHJLo |+UUWoLŧB2g ft-+ZV}|32yI$ #sֵZ/fɫ$2@㎄:3ʫwDjF^uʭȏ<^0tӌ0;0tgX2@gW+^zRŒ(Œ(Ýu}97""""9_Wsk_}Q7}}Z23#'YFFQM}_}חl(}|־ZDDDGW}־ήٳfŴۿ19]wtQE~d̘2E<C4q݁3j5kW淭~n_{^I_0W|s&dx3*w]{?][M#(î;{~8ˆŠ"#ng-k]QQsb8Œ( 0Ý}}95{ 0Œ(u.Ȏҭ 2L$c{+ᆴ`ίwǟ}r'7}HLEn<}wJ3(JSxQg@;1wY{U* [qf{ $aŖ"-pp6fBvޚ `vsㆾ2cwLu#Pu=w5i*nrgJ{|G$IbG:!ӝ{[}@v I$[3u[*#Ὡfwѵ .gC$2C; wWTdGV~ 5!$ox7 w5]usx[憉䄒HQ[a8ε׿y }yuSݹ٨I!3n5f{ 'uW&#< [|eaLHI!nL*ks{ %+C0YdfMf'+糕3 U_-Yމ3ff{0/Yډ^ L3 3*"3<<!be][`g^j̟o~z{Sz֮^ً؈.3T\w63z3UDyXRj#m&Ǡbl;of!!!!!(Om9@S|v$II$@VӉ7`} lHHJ#D^yVy{爈ǿ\爈w}w{}۹]}sDDDD^yջ]}gHW}fe wwvLսreϬϣ݃ٙ<$$$DDG{ڻo{""dNdK3L ܫBADDE:7}Sη{~{97i9׾{}V{ߞ{DDyM""9ŝyκ$$$$%U.70<ٙҭ ufUۻLݽѝl@;C&r}wm]M/j9۽P̒˲I d+FU3{jȈ$$$$$$Ds:5}77|DDDDG8/s{ۮk:y}]NX7(76b#b\i9;36fz BƥqwC ѐ'2_O{މfd{]wv*?7Gο.STD"k@ʹvO5^\?k\ݹ_U]ڽqD@$HQ4;{Y^OkfI$.$I o\{Y撪d{{ʦ7=_m\qk~[o߳W}bI33.ffO݊kgrJw$|ɼb:棻†*(^,Z*j"7dOw7ywrdGqC*yW41Uɹ_rU25z]/'uUU3PU[1yʆvT2lo:ܯ.|雸iD;z2p=HBZ`Z|Ϳs;U{} 333)2+s7ke#ٙvl"j.fr$o. ٚ%SfNbva՗&Wk5 eVs TMVFCE2-3^k[꼝C=s&b#z{sHjwsyT4XB-9~ZU}I 3=057umy̻b#&TXɐot^lDtp UCu31UTW1OTls&"əޞJ32[29¿~օeU~+7 ndW&Lt򿉁6wxL h㉶|ٙ:FNfGW6vu2]৤!kg׿sS==U_nI Q˿zJw?=;޻kSzfTkUUN Lۍ%̂wvf{CP֞K׵^fNqUW5̊.fr Ӻ;s6";JjI U0-w3yvfz33> 4vϝ{wwwwLӼ\-R"__׆ɥ #,L(볻U͗r`$fb$T;_Ϫ.^_wT[5kzdUO{_wyUT\~_̝IW'|fgkO{ކk2'UUDDnU@J{2b#l̂uɥPﻴ ̛}ݻ電|LQ{pa(}"sY8bU{wHIwvw]VTDEfXUq݃ ~CZ~toZv?^k|ﵭU5zH97gdURښU_4>d!ç6:2z52b}ةͪ("/:Q.ܻOk~sDDx#6{:w  %IkF=/ݵھUw^ػfff`I$.$/tۜ&gfi|hI~fqn\L͙wqueLmf\URzkONw/֥{+]wwUS>˻Us^35=gb(MMal |wEtT꫻6fI31$Ln־Ϳ!DE˯==wL*kS9+fs^siF^eT䞓7v}f "#+C]ywq7xeY39S3]33137L1`]UgxPfHw% :hq/fҊ3zK*5ɀfffa$@8sW"#j3wٙl:yʚ"/*T^<˻ep.߾ɻ؈ʠosEŠ*5*"#vT>k8ﻕf(n2-ݚGyMݗ&LxɊfas337}zxfv3O>Ms\?w/{ɐ;V32Lff$=#;*rwxw̖!!0g"#2b]2j"3*"-Ȼd{gͨ"7jnً(ݪ<fI]Jݝ7bTC4;U **7;@dL7 7o~3޿k_oK@wI$&ffb@𻻳rI^B7bg}ڣ! 5LDfU Kc 3$nf.ڦmdsnUCyT>d΃ ͊#vXdw5DFPjLb3C[ fK6@"0GCdlIkZ~j?{[,S^wwv$@;Ww%71C}2@&}ݩrAnf.ݙUQ^TP14ODFePhz'uyy[cW2;[ B1V12,̖<LUx߻-2fj<2IX`g~}oQo1\gϡ޹ֿfo[s?}@w[ .vHzY}k'ڻs\Dfe»"32a]D@lCk&23#b wܶ͘7Lv1wMUCPL̎v̘.w;@ݞ/WUU[>tF6S>~C5$&Wo~{@=[䩙$]30.S/9q/AaR|Ɂ32)nDF݌]f/#NPܑ0;fX[YcOr/~xLcoUODFݰ1$FfSVdW]SXazXS"L`"?ߜ2@^03330VN;؊M7t@R;uba[榙whbA5?۽eW{z]ܖ˕Tz3N$ _=޹%OjUUۉ|'T#0Z_[ ?ʿ//P>gwkq\}IP>~Kx?zw?G׳p7{1Qm G4{ӜŎ+8o6ں˹HӲjf 3$ UQj)J"VP҉JvN'~qE*YKdk۪vK!$4 EėHLqcű1- yLmg,kiw#":(M#si84pp vu:W3_9N#%LCYX̓P#BbԥC"(vL&ծƲ-F*E1 a J#1$f)a%2J L# J$ə!! 1cY&s&q,z4~깦?9=\kkzNk\3Xo}e*]$\ߍU}Sk~/ܻw96k5=QwsduTW 5Pà~z $H [eOޭm|hk^zטs*$v=;YVf>ԒI'3332껉.f]I$$Đ~^OFM&eU{g.=_=wrWo^2*wRU2~{rޟ{ޙV[ܻwNy몺w[˿F]TNXı;=aLw_! ヲo7O3#OqR w]bL2`g' s޷x'~hݠjѻ1&c3o7}xQspwd!y9CP[ٛQCzIwETPu3x2-Ktđ!"λsۯ=;q9l5I ׷>{}\]fk)#ww0a[VP1=1Z UCw]M MT(۫dberܹ#6HǬ&unt{㚓1upz=ވkX)#11CG HZkIj|*m~|.Iwwc33Woo[o[<9H2z쎞0uLrj! $*}z0Ġ0ed{'<7ީ#F&j|ʙ(|͐j&EM&jHȎ /Uh{͗0IO{pWws|SUVۯ:v阪w][13K|wj"ZdIo/c0U'@$5gٿ$#af"حwݑk˸bf^VF'8̉[ǿ3Ȉ`|f_oMDDyP1u<@twefG3S1Uw,4n{wwwdp:lȦtr~TsN;/V_8`$I zwzV_YH4}_|R@[]DGt]*c3<0f=y~yfffD>56aMX1kj{U@|@I$sݰ:3XvϦlD{Ŝq 0fꩢ=ZժiPD'"!@CDI$]I$@M]I{dgW!3ܽF'g'I> w33I$f\wu{I˻*ݝE ;sv/.{9g2-U{= Kw1ܾ{g^1]'U^We:|3;8څwڄՓD76{]_5}5FC-[ # ,y3#MPD ?׻8fC"w}w wv2=٪s{9=^"3z Iy̦bzG]_}}GUU~brwe3j#wicDE1Uhͪݦiޞy~^CS1>yuUUy3=%yo{oj{< }L?waLbLlOi &BP^k{{߾|&'ZՖQe1{[y|#_̻Ӿ捍0$$2Hu:f|<˶IBd;'fv{ų0bHI 1Lky<]uo32$&L f|컪ҟ?AlrB_ ޫOW;}.Lnw(fWeT$*:=%2o2_ʭ3 J ޽;:MV|s9bF9b&4Z=s"{3*w- Bt$B`\3U}܍}-7f#@q˫zz{]aEyb@x tQ}g~ HJўm|2ވIhgekzIjw'3ktH;̹E/ח7vʪyȌ$1urI ]gUۻ̵C쓌A}~-q"0<ެ 7}޻a5Ns{Zwv}f_~}ݢ+" ֵ߾~wB`!2W\F]D 9J'vMxdMxKNϩfNw3[z II̺=Vz]o{+{ܙd!2d!!!*=c}ן}-j"Z߽<ּ{J$0~|y1#}k~"""<5߿~"ƹ߼k^~}~y~"H"LoxȊͪ$BKﺪ} FVaxs_ϻ*c=pOU0yC8߾YUW{g7$dxH =7ffH;6/"'(HHHHHHdҫpxv-\DkVR<@R"13U<ˎ55+k"ђL/X*=y@-ka;,5,{33333[T Cl3* l`|axh_DzzoL@r9zׇo<̹[/]YLl\D;ݙey:[,IOwK C";6d!UyL k#K]8do?~ٙ _Gfwpwݻ脣3wg*dwz932sܙ=7w=r]w{kFZ*bɳVl'*{'mݵC oo y)}MG?$}>ԗ~zYe@I$/7J7ݾ^;f_̳}%ZP,|o9c(,>c bCa7ڠK]Dթ|1g8S nge R<@BtliZ/_]%̚xu5c/w5aQb$n̹-ؑ{awq SfmmDGUwAϽT1$ LZz 1ٜqin$Q|v-DI0AD✬!2;Mpf[\̆zӎMAagKsӍf}{\&MoUw)o{߷\弻fz6w'UWZzwV\2gy8|]xI>u$ F̙U~vM=Uy jw~fdgRI$|$đw~{ə~fI5$/TIwwac zl[$Hf]r{ޞw%c\W☜Ꝝʫռ!,{D2z}uϙoF$YonB#ns^ŏ",(^/w{.VBxj|DLs # ibGeHӈkc?ow[g@ם׫ۡ2HnI*aDM+m*-+D,*ȋw˼w|ʩ2Ȍwcvemfތ^m1D[2*j,ѪcnIzu~zO|UWy__ҡJA"g1Uw^w5;$L@$ܒM{Zo37)5Ǻ刖Hgt2Hx[;ּ'?<UW$Iwv䚜\{w}~_k zV7ȈDW3 fw{wwW{n}l>zwww98zfw~wE>UW>{z gC?nwwwwwfso1V=뒇cdEb$k@/j=ۈ>Zy㨉ɟ;w]"@I.ٙ'*O5juy^ywYDkeꈗyݗ~&rڙߵUNe~LѱV\DdNgx[(<1sN3Wr3*[_[Fkz|aQ0D&hjkms;W}뚮f> yzI$ 333I1}d[^}ObXT."s&iK3,InYD[ZC!ߗ]U_{|ֵUKߕUL #ЏC){}go%|*}7홀|H%4N3cTdF;dU!3xnR!0r]n7}`ז*S[=o+ylѾz8$}>dgo{ҹ}I$jB*3^=[c⾆GC<Ϫ5Fͣhō#884GlXl]M' QJ:ܤlAtxΧ+YuNk~/{xmf$G4L$zculr S{SDwE7ڈ əU8ۭp\ck;k*̚]UD4,S$ ˫D&ma$Cm3#mCGiZ,l3-2!d` 1fa"I\Nik]4jz5jndltMEvm(YV.ʮ_.ꭽ߹{\wr{{-鍡*#& CtlNj`I$ rI{^u^uWs[+$/gI'ffffI&fb홙$1$LIđ$II$@LY9ܙ~{ݺLkgٿ*e渭.{ۓFUӻkjaKDrê19dP^;n'}}x*wS'/fKν~l" 2500@ɡBfZzNxorܭ.ZI$w~ɓ$.LeIr@IM{Usy62l!CEj32Bf6#]ysUknh5T0͹U#^0MDcUVrꯜr깩{www$*Mrf#Ϟ%HRZH~{=I$Wu=2K`*[ULۼ\EEU[c6f6#wX&o}}fizȋbEs6wnqqwd̾b~=ܸ:ܴC K# (CP7OޫH*w~I2I I$ '{޺ 7Ϧkw+2z#q31ba2n bRT46'̻vywf33]wwX`. 7u]ߏfffg+uƦwZӷyO2pO!D$L:Ns12~#ky@x]w$ .zL h%fI7s]+{9SE[fo}wb3Yw|̙{{wwow]ke|b_"&|!"RHig5jos+qy]˼@vVdxڦ?B>;I[]RVusrswTU%owqRNU3#;TϮFfvDc^g^uffgoMИw}%K~ Di*I ދיuB I%@yK3$Hv yʤ2wx+wJ걂e32mn˿_r˻{]܌EwWx9&{z%˱qE;$3"nKe?g<]]|̼@#;i\;y=|Ζ$E]9U q1wLT5;̍QW U۳4[Ff {3n0m`"]1Nw8R>{333<鈪-awtauD10GK('_LX~>tv\D~nL dܒI!'߹Ϸ޿ZOOA LSS9nwq@s.lb"<`w{ x[.cwvNylZ3<333z`cHǏoA!q$Be|]9ڙwxـh'yw'=+iFnrU3'Nptu Cw^nN;ݶJgxwؠ)*.CY#^yw3^fv2"_wdmUKk!̓0kϞ]yLRx50>oUIO0xYe! *|{ʻI$y˟<AU[pbٔsufh ]30b!(f͑%@$C eEE^y󮎽j2"2"(9gӯ}ܣ(,"Ȳ, e(0ݝ}s333r&FqC$$02f2*<&ٕt3dL6e֚[mڸ;_UNZ4F0i֦i@!k :P3G # h&wI& g;tBIwC&C83@ɠd vNh !0hh 3C Ɓy)SL&@ CQ.Iyp e L]%+$c%1LKZ5aJtLaK $GBv~D<,L3K& du՛IK{EgwiӶ0f,ɚ3VMLc#jk@jei&ikVWovJƫ-fLYm3ʴɩ-UcYj3,ҶK)x0h"gwgh2 Dd8Fr g r Q#n ȣp!K753rЖPHhB@&hPę0& Ac/>迸Ͽ޺~ )oc%Sqٓw!wwƑA$@B8A{g CCrQ _N`"^30y av>ʓ/nU|h/u+Yy:_יߝsU*L7ώCzcڄZ c__>3 :T7GE6~WT~`?$a;OVNRIGnj#tKXmʽdn/+&q$\n/+J6Xm$Kx-o,R6DKxb-oK)oy,R6,R6,R6\Kx۱R][_IEj]^JFۖ)orUmXWX+]c-oKxr-o,R6Xżm]j?Kxے+v6/iXo{,R6Kx,R6Xm)oIbV*[Ե)onXmKxb%[,R6Kx۹b-nK)o~)onXmbR-o,R6Xm)o%Vl_RR6Xmb[`KuzX{2)]>VYeQ0ƒg[yfɉ־iڽ\Oy`{-z# O= \M:+fyv#9=kT~njݙ_MU0_ MK/k|=|} Rvn~]_KˎH}}˃2YSGڱlyqH;(O_Q噿e Нt'JjȾ;{όϦS b$2{ +_q^UkwO7YwqN]5M =Ν( !`Lx@|2%;(>:Zǟx!@0lo?=#V!-bf+됒N>xwg^D%G>~[m?'_}6k"owN/w==o<^88888Oʾ|ٙϷ ?u†{Jv']gL~aO/ؼE_nԋO*avelfÅ4-WғPBYofyU3y})0Ģ&2#Z?Rx?߅@'|{!$r" tz_jC9ٷg~nMC+Vզn;p}}lO]i͵󒲑y>ge#׶#} qnff5n{aY%<~U~?Z:|=od "Xi^)DcOg|݌c318N㻻~i%I$QI$DDʙS313332;' q3FZSk3e|s1]+I AOQ9荫VMf!3ÐIHIH<ЗUbk6Bi-o,kw[VննZVժkYR7 NUy4J>GO#T_̞CmfmjڸZU_!=SI'lc),McY)Ǹ/"8@eBC@k`Rmi˒խ{VNraQN'ƟnFJ>f͛T23"ʈ"*1"""$̕LQFYejl1L1"""c$!2"C"""""""""&"""""F4Zz[Q4eV+2H`h1 س&vt;;q!:wNoC7옆?,_ fsVQ?]_zIZyZl23zenybDas7Y>I/kZe5j5H>sm_Ƒ*k9#Iˬq'!'0{Lm\YLrW$fe_]|As74fYeı,L$,Kı,Kı,f%L),LJJJJ.ekFefY,2̳.r̳,2̳.N)2f1crg|uÅN9W,3,Kı,Kı,KıKı,Kı,2̳,4Ɲ9umƦZ344l81̌,,f JT\$LĤ2L:su ikU1jMZ,Kı,K9 jTMjf3&amV .oIf*[ _GJW삻-ziG?|X2ʙb°'y{ɥՉ\ /J?K"_іun}=zglu/v'Oퟬ'/YbYe'/нA>CI kk>8ɳdzR4QT϶2O%yX<88˗xȯjezćeOO{q^i;^G|ѶW;3﫩<%rg$&meiDPƃmUx5S߾D O921r=1ZU9ǭ>q$lq)_M:|gs?,}:Ňd;M]+a>eT^%KEiod^wb=4&>jXf:o99$^5;+ivrz3}cbfffcށ}d0g͍*QmW?cKv"gpy؞bjWW>U}-(/eZUSd)~!`q% ψ?'I.I)WpbLoЇ?7yMlʲm\.}j-lƫRǴalĞhLI?IFeYݪ/k/e:8tbd!1ןq!w5?Ƕy9,VކU[m!7?{o>^evw'[%5P|/@4Z/_/?+}D<{OÍz^fMkcgY}~gdyg`ZjmuLh'HVd>wx_kH$I$oXdvLp3**Y1c*$I$I%hI& kFZkZ?kZjV_LHEB$I$Jcww?j(-ZMƭjS6݂֯?ӳv?te+d*>WCKzNi㿻\5_Bt|7=J<_ֳ3|01 jSX^E)j\؞5?LCN~Z3 =G|!]VGi^1Xn_EmY5Z[s4ҴLJ4H+UB"""""TC2" XRD, 1H(f230,""""""""!B""""",YY)! $ 2Yrz9Re#f#DhI^Wb`n>HT!Ke^ldZ9"Ӎm8*e`EJ_IU" @|m#TתUs]#_F^K Ue{S+uIm,3ޡS9iСˊa<Ɲ>7-__1leL͍m6oߐ|5g}ʑ.8Jwq&C $D K].HC'j5|^_7Jx=Gf5qN69M6Lf* MϼԬ;jmYSDǎ?9'd-rD|;_ ӷvgOL8uͫyV2ֵxJRd,J2,EbʶII y^)m~s|aDB?OvVoz\fsTo+\wvW*Y[3[fܤ'.׽޹_g9kՔ_u~z@@{U2t_UWn{kYUUdǥvZzJ*{ywcޗ.ZJ{kfZ]y3[ޕ"%{{I!&e)IUO{.l˿{ޫ=3߸˿{{g;wǽ{ԛq~aKf@7gu۹r{i8~˕{9*^jƳdvd;i}綦׫[R91o7:؇*K 97MSk^b=.eW sH0┿%]KZWoȧ`؇r!!;1f",=%(Goy'b4S_\uToJ OoG"Y= ʊ6wĬhȧ۔RO~˘ȅf,HdxcN x @ GrG(qrxwޜ,<a/X;ӿ!!#;X ;8ñ=/%|eliWCq3mkm:S%¿])$~DWa^rJ__XSܟ6iXfwvt;$'LĞeŹZ֖ҚT& ~8wvGk֗I;}~blEd8s>9%i?GH|E{<*;ݤ<ꗖ"^u}C5U?u-?HbyԧBbtATq(tOU!ʛ^>UG~z5?_U? VFʺGHeƨJf$~?A{CRp^}~ׇȋ/<%-~nؿWMקB0m='ē]S̬:wwC8̝ݙ'wx*t=Adq|bfY<b ee_꿶ǫ?=דhMmFfF&2ɋ$K!c#0+(2[CӮFhm 6<M"o <祑$DD|uu&a*t>\0mP{ݪ2Y??TUex+6֋2CSj+y?OZS5-ӱty?mLG- *a؜%}U^8ɎߩT!G`n31> W26UXdielfsM1(93s]t9\VULiG`_#wz=R&yQr*8NFVh'LR2~d񲌛i14Jֲkn%-ITZT[d$'C;f`!PGIؚU]оÈAxo 稗9!' ]''|9'hWeg\kuCߪST>]#mmm&[D؍M[&eADffFaEXXFdlEj3Sk23 ,3(̋" ,,2"0 ȣ,,*,¨, L12,"̌ Ȳ# ,02+ 02#0̰3"ˆ£2(1[6ږj[[U[,մ6 [ ECIنY3 b^SSJρ/zwnzCb/*^#٢FσDJs c2eBLTV,"1-̶ܹs [e${Q'Bv#wBr:؄|i"OH9R%!v~ϫW}uuU; , ,Tۮ*3`$_NWqvASEޣƫo(-IK>On3tQlL$%|?9N3Yfgȯūʔ#[c_v]1ʥYYխ6ɋ'r2˫_쾧׃{Wc~W^؝R-6H%xjb&G2 uS뾛庼QʢbSGH5<{~C2+J[BTϕjMWIޅ#OSF9?Џdfv3e7`&~`٭'=#vj42ͯ?`}iʫ' \~>Ci,c+Z+~D ~Bfyxꔜ#IؓdxRǘI44}qvg#Wm2IRea'mt=ƷanF83ao#'p9rh/;B} )yOIejQ񩛑tʬˮpکfYYW\ˬmM$).I/w˹n>qǢI"0jfn‡1@P  pEq2ʧ`컸vٙDA\؆Ё$& mmBuj)N׽|.[QWG3K;~vcbƏi~5O`La7cS}lNU_yT-$zgvIFF&ff`  ywywGQV*) Ϸ33ΣyIw*桉)g *}nkOWõI't4iffVe1mYeQ2ER${4U-5Uf`LK(hd!&d)fX$)"Y3KiȹŴ6 YncII?7c,@DDDQ$Qa$QDQ$aDQIDDDDIIIDDDIDIDI$Q%DDDDFdeL̊23 ZH-# 'Gճ譔D)l݆*okDtm mX%!xk7<,iĝS4g:1$ /Y45x CC~ TdIU !F Ǎy!YcM0IdF%8NJKkMP HJYfo;3wC;p[mj5cܥ*$$'N.*w+bKc*f3k0}3iiLI$`׎IUءJتwIpն<$ٙvd3M334~b0?L0:wrvrSSNI\O5ZY5`ZY*xu=I2 #;zjz6A3$>"O9=MJK'NA:1cM1McMSIt3$Bi ODra!!S$D@ vâI""&&ÎJa`LÉȉu0LûCJbFd$fcmm 瞀꘲I$d$e&eTY8i rKp8 N2%V9qE3G98rqQ\G I+),I#&w)9CC:=bw;t\\Z)/wbkf+i6R&Ȱi F>Ä@8%,)%)̊kIsIm>r:]!GO)WDs?o~mvoZ =I@TY|"i1}"UT[=G\3;kթV\㙵c)t-P&COQ{ϐpޕâu?1[_EyMls'&41-~ϳ&O}\>a2(-n~vjPÙ(y|?oBCѬkXamzjJyA'܂=*mby{ٗ8dUG5\oFD(TƊea'R&sv+cܷ4wR lllL4 h0Zo'4M55OU<tR dMdo7[~IUŃT'o2/RABP #l "d 7j:4b"õPjrxAU(`qsU nv{s{8iP.)U*碕Cw ǻ-m/gz}%CMtGחE"]w wyk}L>X e(; :ݚ*]owuٝt7 6mPEֽ}:mݮu hӣNwp} !ӠeZɧNv6ގ (6ގvniTRqt]4m39@)tuF5ZZ}r2}û3oG_wIW]`D R  $uQ>>PdV!%Lp}>@HF"HDԟ4h*RJzLF#& 5=(Tc81EW0}HKΫEQ^^&vC >`)  ;`!h6$?)}9@<`ef=ޢ<ݽUfPwm1ԂT zB<. PO9㾍RZˊ$Wlo;{l-ӠaV'jAG-FS:hmھHwbBD{k05fK%&zWN6u=7ywn<ײ7;ukNJ Ցw۔e)ٸJܪǛokm7umDվDĥw^ˎUlmn}yIO32XÝv$Fv(;w, n:omFUw7J?<ݟ%S_ɢo3zdc[edL.yw}Yr6vBUv҇uɗʉ{ќ]r5_ Wi.y0JdzPRcUAйa<܍euhk\ouɅr+u6joݤLm*̍S[u/_^Mwb\SAridfa˃گC +۽_dGzY;[KS#^*7m<:6iۮA؂ǹp*}wlq/;vr9vp°ݑټ{]=δuݎG/ٙtDmǛUsnfb곑d7llr]Xx짡Bbfkά#4\̼"c†l{*h3naK]%ΚoXNK'gVc3)nT$3]mu,\* )̬ڛV "Ԭ}]V`*&<Ū7 Vc  ʗtS"GUɩX$uWS#:/6so[KXH4oZv _J,Bfu -3C.Aۦqjb #rncy1W&kQv[+{W$دj8ʉ$wJݫKvRmWZckB yjԭiV4r#e6jmR%6ݧ۵JXLƚ3k/>ԻS+Uf]f" eArS}٪ؾջyU&7s}S0^kng'yJ)zrH[,Ҽk$VbfǑ616MqRs9pOtz1$[RZ{vU6/;-=n^dkYfEBZ[YpL[OriÎrJ86mծ,To9`CVk\M[V{mtɹ>SV枭os ڛ"9K;r={gݦښFu%Gfp~OYJ;֜I=6EhͱNaXUgF Myy3%pwi<eu$Bjog7UUçyWO-FIhTNe W9Kf>wܫTۊmCwwQ =gQ>mN{Yfm#/'SF] {ש$+=K= A:L8Һb=mLBm83{]vfoy}˭_X tM̛2uαwwonI3-- X&tކk-[)]ۯ-@"_~5A$Ij.HNJHPnݭ(}qGm~m6ߛoͷ $ߛoͷn>l_n>nzs/wUITCK3ՓGww{ozH<뇻{tl6[aat0:w ; Sáaðpalw0lٻàa]vj\=v1t2ILnʝ34t!A4PѣA#4!Psͩ/S0< b $ R)=- P` 6XXA?*RS@#vA+@* $r (U:9H@0ݷ@PJP7mZ/Q$x>-"Q@&B2uqKhn2jVㅧyf]btxaW;=3wwtљjq Kt^לslw:SU\2NGa`@٧ڻ][OYx9%U;\x]N[N^/"I%Y32=ܙO$\H.j_˱wO7MI$I$rI$I%R:3:nCͼઔcsUJ10LW ҡ3Fៈġ :v}VmQ`K\ٶ/*.Z1d}otEhN$ =gq_D~ݵ}Zs EN[P9P_]OK};σyHxGa&@QhT4@g@Ԋ&"t'U}JD?39_^6g-}N(sZ̾ӦosƉjD\Bw8ѭ}mW(wYoD2 T]n'{y:Y[ZЖu:Z] ;7"9n:3k n|$zùlX,m^a]2W=+p.[9Nf:!uRe J{Ttyg?fW,3Ros 8jC=kb|Zv_Q88=D/vw=Jpj;:0*nca~,3R+-[z&Uh&Đ%S*4cN!egc  z lE |I&CjFgh{3=U+˃ݴaf;b93{A ra,rKã 9Ft=NqH)O'8n<(*9D(:(̀rKo,䝆):U QSʷ| :nǑ֪S]' [S.2I{\3wKnxs-33GPUVb; (xp< QNZ('&U <HFzІtjSqY <4%*R H$xF8$*U:Lȇ SQZ$vfI5v༮̫] 8;uXJ.[BT웋!#lH2X%S^HH|'>b:TH ^p%&h{G)wwFvwwI\Xl>yoo]:oh|wmua} T[ຕ{HqvWb^r[µFhscqbxQN5Qc1KdYDf.P%IxE74DHH$ ӲBv8IĪ4rf]uWyukT=;z0t,kyHfΦs2ε gHQfK`h*J&$](]]"Tt^Sp](m= =$ GdJ I$W.GWy{{ީ~7m;y{l{oGV/x9 /c҉c%әf?x_,{|Gs6>`x$M,~&(krW; -UclB﹘zvy+7T^wuu4;ɏmhLI:UݓKڂKcvI$0UE[lc a5\SX.0c~${ȠMS7b2[/\w5Y]^Lz_nY*4ֺYL)N.g8r]ow79E@x}A n2e;dtS! = Y0Uirg5RLg qSP1V1$TL \ʾT9@7{ww$)luN~ ߏDnwa&-Qoa?ޒ]fdI$I$Pxf330(<gwfaّ]2c]LO"}{݊syԮV/y건D:ʛtvWn۶1%]3.II$c\rvJĒHuI+*)v5ݛ=˕er=Ql9EYLŤ|k8ros{n4ct)i讬DIХ u\L8(.5܅R\%-PT\aLeVдش; 5q,UAzwR$.9QgM>+}YY2QVXx[ce^Kk!L@RbKVEjV9V+/&GKl3]g0uhwTe[{[qmU$֞)˥;4fќviX(yyz"" JxP#4 _Ung?wZr׸.'Յ 7"ן v ^GeR}c߲H*ݓs78(.:PQK&η`ؘ3mf,%^wLݳ>}5LJh4gARkIZq֧ihf??<߿=}4r#IZoMo97|iB BIj jԖ|oZKi5%i-B )$*7{MTY6Ve!i MszBBkIZJ%i+IozMn&Ӎu@H@HDH@H@BVk/Yޜ~t%i+IZJVaRm6ҌjUMJ[H# @&5KbwpVM[%i+IkIZJ4B@@@V@=zwwww=W9U7n2l5~g̿Owa?NōٿV xVjWE]U{֒V:sϋ֍@I + I\{۶vkA+RUZ ZJV%i+IZMh򴕤%i+IZJ(((JϾ|h+AZ V&+K *izc3]4evjD=|_}w*~nA |IVoD߆߭A I~oc߿߾"MCX^$#ެ{} ~&v@%'cۺyWo WTU tȪ[DC0 #3Kx$jˋI H$2ećDUAj@Z6"dC=]^wwww/1Olfcsޗn-9OoDEF7W)iYx5G hUT*S*D4BiqlH&]uZCfU$lHf|$4D"7mSI!L$5r8|Ǘ+7j sG AD|>7>X 1}g$I>$v@g> J"}{$B߯o^m333I'L=XއꣿYl ҼV4f±c?ݿ7/naӦOHw^37I]^HOw=^OA.ZG$$ -xomh$I'QEIA-|ҫϽ{$D!I{I>x@aI$ ,FQ|+_ԟ{]r%\؇+o"cݳ)_oqemU%15n :_5l( 0]5ؽz,  34&11w+dJ5f^*QzgL`%J@*[?g:*M?<﷿=kRZ IRmV-X>zy>Ҳ[%Vu[W{^q7)d"HD#ȒNp)|=0ma䇷P];.|Ū bXf+r"n4Pk Ie2^A$IA ˫+A [LB '}D ˂75D IekA>$anJi${H$x A!$`O;ߧw^ۿ~$I {ۮW[U/f<ӛ zkvn^n=m~}+?>ûx5{=$xHl0܂LA$TsZ[V.PI@mIz.a*'ߖ{'W5{ ]׼4 $AvΫdI$ Or_;IH$lyGY+s+$H$ H$"Y,:2P :m6Hi=@;7wwww{$J>_-_Ӷ@ ?ן}<7}KbŌd˼$m⒳wd(\FI$I$I$I$LC[z{yIPwWuN}ww`G i%X4ۃ+EշWy:٤U͝scC|uyjPk>2GYϻ"I$.f%33xF332s.kefF&&#Q 0ṕBj_cۋxw7!"Urp*; d4jCo=)m Ōy]ɘV::sw(ܧ4Ŝ]9Jok鸻`"e՘&^tݶa=&w3z+7Vaײ*= xjgە;6ӫCNA < ZԲ.uk@W˕#[aS&L۷4}͹yC] T-n\癶V0^>S,^>0@Ih'1}|Un$; ]ow 5oK\+9Roŷ{R?>$?/3z*N+\Sd4n\q*1@s$eY{#VQbro#?o3 3<{jC}D G(ɩnn}Hx-]\I>$,C9}O$RI@׻ksed4=V,ɐ,O D$MUT|I>&ďmy}D@#?aa)$P Iw߿9;s p{ۺo|?oڿor.1yUwo8WҰeVm_߇T(vxCs)@$YsޖޝI{߿+4 ^WJ5X$p|(S^7@|-W5fx`xniܮƏGcUij7;nAKOީN/xլxt7+3]<|W)~vkSA$I Q/wޥ[   Mޞ'xɟA>Oػ??;GI>$834Wgw|@5BʼkV/]'4ZX~}"vFbbg -\ȒI^jQ+}wsJU* nPQ[uþu/fw +j4r9ǭuCc ZMRY}@#EwA$Ix6ke抯 W(9 MoGȒ ؐ.޻ݿ%^}r޴ppgmv/ԉ!#$DJ@A>Rn jr+ZrsowHIeoi߸w)cБzբԳd]+%4dϜonU*/N!h`4IDg ^*ܛe>C5O֥3x,SUjC'̂}.f Q)!ā02xux [m{[p+R$N  L _n|S]NW1~=hzw^ss&=v8rFwwC[ٻoNWNUsmS C+/a+uHT_o}A-!݂pf@ !aJYg4e8`ɑi$L>m$ 5e?{H!޵V޼Ud۫7;3~䓻-*%NHk3PMg(NG_>TFayXޯׄwx[m׾*IJˊk Xt VoL[JMp:@(L ޶k@  |Ork dǚ*4X7tIPh@L'yyw|Ɉl-bTl4p '".~5cˢOI$I$ffbI$P< 4 5a ܺMfff]df]̒DĪK{_j%qYϞ-99YW,ݹ;bz[k"<^̳8-$ԒH4nIZ~cy(fCf1` @wx7=˂_>qeڼ4MnwmjSQ諷o7[޳|;fyrNR;)\]iJęy\d8UdڶupY#ԛ{nЂF;t5R-#]kS9%]]'/.纥42Ğ]UMb&#$wHc~|bj I*vN[Tiu-oj|'b5]l#yN*:vZWٽ:qJ;{)\͉Ū5#9\ "ab@ UBƿe_%Eo_9xc+]jQeG]#{}nJjwIS>S'NbZ."z""$M6xLu&ߟR[7zCghԸB_)pnc^f |KfVYh<@0ǺHM2Wc®iÎ$uJ`lrxH$ӘKrz;NT1X1"#~{}s}'Uqqnk JܬM;u>ԕ̩i\VL}OoֿLZqڵPI!I<¡UWwmȧ}#O !$6FXg*7A2I"bFPMˀz>fɓ_PkM^@HM̽.zؕ~զ`Htw v C"A[5}gwwwp{=}O}9ٯz}K*~ d+W%ǻcfK56M6 >CȊQN 27ub`fz @x1j0 vQ](k|$ Yjdr3'߻K;iuR[$તw*9%uiӮkUW9=AQc33gk$O@H ˹2k'uX${H$A '(XPQ^&)Qɪ` ^ z*EEAv+B>wpKS!>) !P(*f1 > BA$@ @$mH-} !I$ imAso\\^Jn'H3ҼڸUj{7ߓOx{skW;l5OPzǟœHszU*H;k$|Icн" $!YO~;Ȉw>.^GХ$^;~ݾRRNw~;>=S8U_}>}IGe#Qn`$+bYv]Gvs< ~o9̺z7wb@=tbڎ"wz>E% 4vvEXX2z_2WDc*ȂHF@ AZQ]X ) G @2x5HrKŔ$HH)6ִ )%%n8MN~/R9xeT;A=_uN{絶 =(&?پsFKTAq C]6W*s~rW2x͝Z9;mR=]u;־֞MZLJ;!hdk?ü"qAX=Aڊ`ABb'nUk5D/hBUI̬'{ q#ĒN$C2سgtgKO!_OUj721ގB*Úa5,OhͲPyh$Hafgs3I$V9Zfedz)썤RIlWzNJv-o.Fjw};a`GnQ[m5|aȺ̩f^dnI$M]30馅Kk4@ WxXU}nk#ciX#֥.몹}P>k,P ]^{zV+nh&iZMϩWVWz5[7^Eg@~yevK1V5z n㳜FצWPokǵsZY;\9k(f8RK;@W y);XTB+:rn^?ʘe4|@H/W+|Qss3?8A$-Yw /$KH&_W.6Ro*`-gEshc0hi>ޙnS̼GU*AxU= |CnDBՒz`&FeN=m1+-=z> 8JE 'rkϾV|3k[9 * ;k4ದ^r]]9 mMȟis~(\0+OF%w1nn<`?[ݵi8׳#Qu-E,, FH$`۴ O~ﻻjv^feD_xe>ܪ|'h;Qt+u~f5#d~bؑP[o*HbWI3YoNҬyI* vi:`n;8mY9pTg+oʯ}+{wrRIT'=)V: ח#@*돘75 {ͳ­ƆbdI8f4Yapۦ*NgV6[y¼nYմjݜjԥKs[/?m~k]j}3?_@<]%݈Gu(ڝʺA <յ %=0Jkܗʀ{S̟3}G ExU%]U"MvOeLh\Nbk1Us7.`h6O8V<ڒCu;od>ֳ[{_]{޾X05i}إ4BUp (ѣFѣF$ID$I:|oN75N3*9]I$I$@>I$ 8 8W vI {du^.ޱ.#XuJՊ#`fǦNWKR+FW:Bˬ'Lde>ZR/>;ysM՝̼JI$FæxfW9篚ͳ#{k nɋ*K|n-!.hĔ\Z7rtOx굛M˭4%#箦܌7׃tHIgT~'FWUJ`qbլf@ūxn,2w{wg^剜yW%nb.c 4f mXIgsoh5c{&Jn pkۡ[3.)'nNmGMF;0'{˺vzp[[ڱ-*Ӑh.g33zkn7+]6n=+} !CC||zzq,nevcۣUk*',DfZ܁r6Ses)Q4wث9}}Lsc%Z>$x( . \}V73z\wn9S-o7DB7UfW]Ʀq`m{3^)rm&f"pLwj%p`HF]!u[ `Vc"t@w&--Bqҟ}nL_oX9$ư?+s~u$J>d?>:mw+gRttq31.z&Ga?[J]UFo"hoc1)zE.\$g٧5ř2f(MLBVS6)972)7VSD:pTznn$nGwfREz\Zi"e97/Es8Xnj}nﰽ&bY$H NBm@TëӀxDBM9 Z7.< voFLٰ.eLp>B5] `l<0ϮW9۾Je{Sn6gi&M>wP`=ϙ RvQOQNnjv0]~!ޓޘZiSO>=F˙o0 ]xL ˙3MNs|(d?Rm (a^ʪy]n۲)l=ώXNA(w6p;^jX _V{Rp?P9C\* mIjRfSR+M*bHKfDB_{-m¡hDh#hs~_}v^2G&zf2'sbvrmwٻC4Y_  鏃p6<=\)A? ̝iFsWغMHz(<55ziCuP=Zҷww5E:t"!XnJ۽TI==:v1۽7#<Պ\8V81g/i](.Lݢ(xhʁ|/]ѭ=ϰe[jeP9$'7M=vvbʾyck |ۛˊ¼CL{8z#=+g ̷c{N>K'yU6t]ܞ1[o4u$L' p:\޶1dKon \xksFn( a]GP<n =)^l[KƔ{h=]۔X uuW'O-m vE%)䷒.M-],dTL%p5}33<rF@{7^:;Co'2 [}ry3Bz_ێqa [ |Zz8vGEmI@`}TϘm+IN"Knޛ!UUW*/ kzƳ=ivTV0Rgwߋ^& 3WwP ip4 Trp"$IcHȪAW)1 -Qn"۞HumE%Ea6 U=djF+ϭol` Stoŷ+zoJNcxk>XbS]Q|=( AywjMYB`/ RUx2զMǀ 4 I+LeNAr1D%l osvhuzvWֽnz[ߓ'sjcQ=ݶ ?ڙ>#rU&ГtKz\]e5CӰ@*%_:Y. 5tbOn [JK Piƨh I ++*5i8jZjsǙ*O34;s{{ޭչ|Up^X%,_^{RsoMmE+a uDd(7<~/o5gvɺm7٘ ]ҖMZ-Vۯx@-J~9[T*ҳ 8U zD4ˑ+nZٞjfrަWfMqn/m^\7TM)+S^}x{ǵ|ߴsηwl5lsqaޮMvkn𽥴fvX #/GӅNTImw22(]I2ҵMnZqEiVUvvL{\r|Q[nK [:tLF-J?w膝~Ź[*ܩEhlmI%$*բҫYu FhmɊ-q}5%z^^I;ݶ9K擛ݷ/(=FH!uXn_Aߣxf߇<$`,S%U=# 11뱱UP1LRpJ۹hȤ%a(d ;I$rooUITwﷷm{߽OO\ʿc].i)VI-|Vت3,$f$}P@$IsWXJ ]UUInnrI-L7mrջ&z4($ɽL^o33p뎇MM EVt~BOcߕܥЂ%]Q h/yAyx"C{]Z3VʦK-u{K; IZ͌^Nꄟ˴DA>(TGU$(G&ӿ%YI 05-Qf&Dp%Ot(SWc̻͛fPuf[q7HxvԽ+SVr3cwsh. A.nCr5q[̫~V)fǃm/}e'IĒuFfxʕ Ǽi&e[OC8^Oesv@ک{g so\HuOn3*wbUn!JP[L<-5Z:}K OHa m\HI y=` 5xU^I!j`2suTb%Sn{}_g}fz7L#8j}\ՙO(Aã|j?đS$*X . BZ}x,Wu2!QB3/yC!yLE3 25ChGCd7*,fg{{w߷wٸsΟfR*wfo+{# T%J(w:*^II2V ~HHIyO~z x z߯>~{Z"|{ù$ t(5M׏ H$A P'^" =wyϞ=o{{߷Yʓ;=5%ҝݓkōһ-wsHC6 Y?/]- bf${&"m]]$IVv H$GAQK! ߞz߰"sw|zw0amמ]O#i7ij __]QwVgn>ȱ\; l=+o\t&ib;9Kn*&TFU[~nF2 Be QQ%UH,+4 EP8}3Ow=ۗV.B9*.yq *󹘕#If`IJ I$A;uHws}ٓ%V̤SfѴ9m)Ӑhsuڿ7\0J֯cEf Lp4\DfTI9QҊwI$yy;2TS]ݠCScxճ8Q*ܽRiX9/)}9ME/{KZzWwk\jE{ڌ֫{_nP"62[`PӁ*>$ @_=k XtHk\K@IKµuvQ\=6i~jYn^Y`l۹fӎw{߰}oUv=|v[߰ʭV7ubEZyH^ hW C{536o7<h֏ !K"0m*${ >JM}ouIM&v$bஷ+;e8{5ޠu󡕜_>UaqQ4oebdט!/\ o@$tʪ){76:J 3kު\g3fWΙhrFxk7\GlJεğ"+4B(}v]]J^2I԰ށ5*Y[b &⬒$r;U Mxkk3'ZO׹SܾTr]imgVc=j}Q.jh;VSKg:,9 l6@ZgŴS* UP#-Ȕiܫ L)Y,{֒b$wʀMݩ/|No>kV7Qu\޹oKuTV悗Xܕښ.R ,p࣎ɾmN*QF^@ 4aFmԫWVM7`k(A jɊs^;$=o^'Nuy{S}qɪ,"a}i[tM` =-e}•HlN˦,&2Z/)U,<^swxLGYΕUH"i ,]]H%6(U'Rx@œ/@=z5]5YڹϐR.tWvpX&7;u%GoJVd\VpSP$'Ջ=A!@R%c Qi/x,9>$GHM' sZ窮s۬Ϣ׽]y=_5KOsoZ=;\ΠqzN??_,~xL*n: H"^[߈HiU:yH$ &*F&B A-D0dxIHHEhOۄ # HjSI'C1-Mo |@TO{^9/v䷆ nطfQܽMLs5 `h۪ ,&P GLytFHO>&lM œ<*F>$Me4/Nͯ#ȂA O$O&@s3)sx< {诎ʈo'{E:c&[Βėewg7;"Dn^sWlִKSѦ嫜#_ b>>l5$<#tW錻m ܝNF Uj^Tyjzmrj 8uv9z :H3c=)eT0]7V)˳fJg-)*ܣV9VfKe+nTpd%p(Pg^j$BKV^*I̲Ԏ+j+{^]af%e FevZժNoIչXt0du1i{hŮQrc={{{stwc/e͛B6w>cT(zy=~!X9(sѸg<]lN=rl 1Hܺi]DEUNY{OvÝI\y#"0=G#MI&@5LM~|I0>͗?Fn CtsV:74&_!dX. A OH xRJU||C"x(IBH)B<V|O xڊ@wa,]vpg7/mChHHȲEXa"B'Ė t|)*f"@$ nTW$I =zꞥ; {WfowYBճiat oynUD[/Q[Cgt A Ҡx6 +9c5rc  N֛,DWR痯}}I f$XD 'V?INxpēEcz%%;Ss(j2j]&˵wvX@f~ G OoK~^n+<YK U2$MRk]5nhx~M|Mkn9PQ&Ӂ`{WnzUw=\-I] NWՐuFS;a\?<%|V?kC>2焀A0[D#].A5$ 3J 4SLs,CJD\:4]pM߀kWy]gR=aq9FF췐v,^PL)RI>rR(I)nWK:>FI>V@PE' "@6x2H uTuH^~v]yL*޽yZ5f $S*wuܝ~49vzzlڟR9| .9Cb BX ¶-0 M2 :a 6.EHۀ+_ݿwwwwwwwrnܤX_s=}Sares{Llx3% h$oW5d)RY˾@>[Gg J9'> T,`> (4m-j !Iwf- I^rUZo=V'wC|~]t>vN%t75n235qOQ6Cwj$V68Ǒ 1Ӕ1۰@f*pҀ@*ۃDTGz@T`).PqT-2}o{z|W^Insi6ϔ̮ie\"ŹO*ԉ]$Qt48, #R*2ARuբI%Q fe w8x)-cJqWMܞx~9ҹ\_YR>}ǎRuL{v^5[9}Q6Tv5'~ΘII+yeVfQ"y{h=O0F<=d [sdtp j[ճ.?Kɻ7ww$ܥ sٟCc8Av{~^_%U&fffbI&f$I$h?I'f{0jw$"]%7>wWݸc_T\V^nwIֺ[x.g1v.{}e0WjԲeokۺWwݦn^fec@5$NH {U$B63f*fT=)wuW D! m]7b1Ktc)ahA@u( P;H;9$_I D WRUUүJ,t^Jzy*鷕 RТ,2pg gtm488LL$:zy UuYۖ N<%\B DOUT|Dxay_b047AFAE̷iVŶUUj p6ï c (%AIBRU Y"TY26 $ Ӭ  h  @M  mFѴmFѴmFѴmF@c(,(1FѴ@(P @TTTlj6-TTDhbj6,X,FP  A@H@XQlcQhł`FѨ1 0( MEKFEQ@Q Qh#Ql[ӧ:NΜΓ:s:sΜΜ;NΜ;svs@@     HH@ 2@! @@$KM0#m @ d @@K@@`  B@1c c"!A!@2  dLc02) &)fE)Qb .+@ p0@ H@!-1C  0`Q`  PRBI2&L @ L!@$ @!bD$@` $d Bk$a B@FHA@ @ Bb0A$ $@H[@E,@  42@I u D H Wm HI!  dnɛY 0$ۚp@#r@K]" ;Zp $CcbB c1c1c1bc1  E  c2) d)(RRF1d @"2RQ` @ 2QH@,c`@@Ab"""  @$R QdF2Qc Rdc1'MPT4 5CMPT4 5CM5CMPT4 5CMPT5۠ v @sۺ:pUۺ۷]!! @B@ Dz\A$.p@:[[wmku h(T`$VAY]juWZjnmvTV"8(BF@R($B5ţ2` TJHXd,f٭XjmկkxִUbƪ֢ՍAY5ZJխFEUhUhUmhڣjcj(h֊,c[QQckTml[Vƪ`kj+mzڕzjס2RL ddI6aK$F^Ӯح֮|zxg*LD}''P:hw;GuTiQfIwW+>_ k\p18us9r1 OCG]Gy΢ [.}s˘ ą紃˟a-;0!lA e͈0!l䠄-2A e̐`Bs$\-5 H0!l H08S8b?C"sPPOF8k&&IwW+ُg'ga뫮ΰPEE}g w]_Uڿ(ENH4 nL")]5 G×y5R'˯uDNΧ aϠ}}bsi?B÷7 8̊%w'R7i0!jDH60BT>\t~P_+"T=s_^k19_T_U%DDDDDDDDDmڹW{X>DO %yypxq_֪(a`Y,K%Y,K%d:tۿm{{Ah_W,T|-βuBTz?((EDM2j O@(!+;X4S,p? $H RHI$I.k?!S {M|'Wb{ء0 CY#2vZwO-i; &"vm yz@=W$;NQUJI$(I$I'Ax!f  Iы%A!k\$K#-$0[ywOj"ewW.\.E˛˔rv\˗K\˗.]Ksֳ]RkQAx"[TnQh)zrKuERNbWuEwU:(wlh5ZuɛI(1)Z"*--E$њ3fjk[ɋILI61bQ-BQAdI”dBB)A j֊mjHH 2/G;C"vkGp }xUTBUUUDTBUI$Vo#Tq:(%!+[QCP?QH6meckVTY (ETEŖVMZڮVںZԪVeJ5eU*k`~^`} ? ~P@ (!@(1'^gQ4{6+1>_IwW+}ֻ ?D'gw*CϭSr*@W~mA [G{JtTM߻6ZI$@t.Bj|R)0`CV4Z8= \gz(yqO8ϗϯk\A_A8dz4gse vH dEEw 4FT≢18گ5}2.-G=ѡw₡}-*}~~kw0zH+ZTi/(9uzVaɉ\rf8u⩢ݼogb NY^rڽjkYuVTn1~.$.o&yfiV-Y/ y%>ubMwwwb^탽@=y5K>Iu9˻s@*TÀ g333unW30I$I$I$*`$I"I33IwT 8m$Ifff`_@% :66 I$}}|3330p I$$I p $I I$@I$0I$@ 8 8?@PPxt Px@2$,}}< g<l ܺWr׫^UfEذZbgoD.Xery̒I'331r 333 UWVz{ٗi ̹u=~{.ffc1$mde\ܔ;U{$$7%˻rI'fi[L*̒f^mzJe쪬${K3#\b77s2nf=H$g5e$y=2xdgٙ/UUeWkI^UUTey=鼻k[+[a333u5_ѳuW)$_w#frA}s_k7{_7^+b`+N6q|)jumVsk:>qIQƎsUs?gFwSw%o9[Νum5粔.;ɗǯ%m#{G]ٮ[/f%m vaWo7puq^@쪽&b\7r+iszgG)lwXy̙ϩv5]YFT|m(-ܝZDn6aLj($usevYR;`ΏEжrvYnސ4eLm8C=}Ú^ܪW%";J5T y/;9D<*e@SN_sso%Rˣɔ̝֛e כJ =to_YIɡP.ùةqyZbQV}#H۝uUp*bJHͫ@h]sۭΨcRI TI3332]v]r}{|R 5UUU,$nL4F9 &e-3lI&I pi{eSܗ2H,tt 6.I$쪪,̿s&on뷝xD.y! :a,Ap`h˻fbI%4 6 QUUT8{0WދwPWwo)+2@欄j5yhuG/mk.A݀~5~̞DS}JFA H?Q>g1Q!qp q&$#V %"% Qg@q@؊~i"2 !$MLFJ덨_م"1QHbLX+w@@ St vP&iFX%6AMyCSo ;xpT;/P =&W}po-S P* P PƉ @y!9H~j0B.SN~p$Ji+ Mɶ'6nfѯu@PiQa@⪨DȥUT TUT0iVQjjiZUH Fʠ*00 BvT 5ҊPє* 6 ";pi\ nF@(b`FPw" ??~wPN3ΞE T dHT=[ ]oO'b?1 `3 _Z!{Cg{DAxè?ҟ>p ќBku^૭uk}Zzat*Z$J~A:ۡ 6hS9w:Gp;z^Bj, PS@4ŠvXsOEuFzKU-P(2< (! }@#:U:às'!GMDcTMk4%W@@N )؂v}_}WUx>jPKEA?UD59O"m@aM_YOׇ |*00}Qu-O@3gBȡ*(v;8|.@ `(' pvJчiG?럔Ҍ􂿷UEapPk Ovb,Aw)`B(*Z% RC?r Ow{<lQa HB!I AX u!2(n<nR(ul;P" mБH!"JL@iTuG2Dz6G J/( :Cd9U!<@`# j%\ H LbA JFMIETBHI$C5SL`*@N. !r-P  1QB:cA@7A`)ߚ+z=Z ZBr3 $@t"*}DPbh~-Q:*|Óg']$:riQ :!T*8܎=_ (+XWh,}:}Ɔ(2t t?~ A-5'#.}u}[!sy4 ʛkISDe@RT*T|H)<)81 3D冕HPp@JA r@t0F;E8c('CaQ"!7SPj  LMߧ""""HEX:5qk8l(Y!6 ء@M1]>7٪̇<%z X 0;E@TCTKt76 ] mk R`|J"& cZIp׉$ jҢNHv à9z)Q;Q0 wxyNv6‚B*RʔS. aUE  hŠu.Q4$Zh(UE~|JP݀! DAQQtthQNzAyv*#qU@_c? F$ǂHڢTSʈ={P&[r?cwHMᩨ ~_" (P;;u_C_B!@>j>~z:R?Pӯ@*}RI"^Ɣsz:)$G9 #include namespace ns1{ namespace ns2{ enum fruit{ apple, orange }; void fix_enum2( fruit arg=apple ); } } void fix_enum( ns1::ns2::fruit arg=ns1::ns2::apple ); namespace ns3{ using namespace ns1::ns2; void fix_enum3( fruit arg=orange ); } #if __cplusplus >= 201103L || defined(_MSC_VER) namespace ns4{ enum class color {red, green, blue}; void fix_enum4( color arg=color::blue ); } namespace ns5{ using namespace ns4; void fix_enum5( color arg=color::blue ); } #endif typedef unsigned long long ull; void fix_numeric( ull arg=(ull)-1 ); namespace fx{ enum{ unnamed = 0 }; void fix_unnamed( int x=unnamed ); } namespace function_call{ inline int calc( int,int, int){ return 0; } void fix_function_call( int i=calc( 1,2,3) ); } namespace fundamental{ enum spam { eggs }; void fix_fundamental(unsigned int v=eggs); } namespace typedef_{ struct original_name{ original_name(){} }; typedef original_name alias; } void typedef__func( const typedef_::alias& position = typedef_::alias() ); namespace osg{ struct node{}; node* clone_tree( const std::vector &types=std::vector() ); } namespace ns1{ static int const DEFAULT_1 = 0; struct st1{ static long const DEFAULT_2 = 10; void fun1( int arg1=DEFAULT_1, long=DEFAULT_2 ); }; } static int const DEFAULT_1 = 20; int fun2( int arg1=DEFAULT_1, int arg2=ns1::DEFAULT_1, long arg3=::ns1::st1::DEFAULT_2 ); enum ACE_Log_Priority_Index { LM_INVALID_BIT_INDEX = 32 }; static int log_priority_enabled(long priority_index = LM_INVALID_BIT_INDEX); /*struct default_arg_t{};*/ /*default_arg_t create_default_argument();*/ /*void double_call( default_arg_t x=create_default_argument() );*/ #endif//__patcher_hpp__ pygccxml-3.0.2/tests/data/patcher_tester_64bit.xml000066400000000000000000001017171476564735400222170ustar00rootroot00000000000000 pygccxml-3.0.2/tests/data/plain_c.c000066400000000000000000000003601476564735400172120ustar00rootroot00000000000000#ifndef __HELLO_H__ #define __HELLO_H__ #ifdef __cplusplus extern "C" { #endif void hello_print(const char *message); double hello_sum(double x, double y); void do_smth( int, ... ); #ifdef __cplusplus } #endif #endif /* __HELLO_H__ */ pygccxml-3.0.2/tests/data/remove_template_defaults.hpp000066400000000000000000000124611476564735400232360ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __remove_template_defaults_hpp__ #define __remove_template_defaults_hpp__ #if defined( __GCCXML__ ) #if defined( __GNUC__ ) #include #include #define HASH_XXX_NS __gnu_cxx #else #include #include #if !defined( __PYGCCXML_MSVC9__ ) #define HASH_XXX_NS std #else #define HASH_XXX_NS stdext #endif #endif #define HASH_XXX_UMAP hash_map #define HASH_XXX_USET hash_set #define HASH_XXX_UMMAP hash_multimap #define HASH_XXX_UMMSET hash_multiset #endif #if defined( __castxml__ ) #if defined( __llvm__ ) // This is for CastXML and llvm // When parsing with clang//llvm use the new c++11 (c++0x even ?) // unordered_maps and unordered_sets // First, include a library that does nothing ... // This will force the preprocessor to load _LIBCPP_VERSION #include #if defined( _LIBCPP_VERSION ) // libc++ (mostly OS X) #include #include #define HASH_XXX_NS std #else // libstd++ (mostly Linux) #include #include #define HASH_XXX_NS std::tr1 #endif #define HASH_XXX_UMAP unordered_map #define HASH_XXX_USET unordered_set #define HASH_XXX_UMMAP unordered_multimap #define HASH_XXX_UMMSET unordered_multiset #elif defined( _MSC_VER ) // This is for CastXML and Visual Studio #include #include #define HASH_XXX_NS std::tr1 #define HASH_XXX_UMAP unordered_map #define HASH_XXX_USET unordered_set #define HASH_XXX_UMMAP unordered_multimap #define HASH_XXX_UMMSET unordered_multiset #else #if ((__GNUC__ > 4) || \ (__GNUC__ == 4 && __GNUC_MINOR__ > 4) || \ (__GNUC__ == 4 && __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ == 7)) // Use TR1 containers for gcc >= 4.4.7 or MSCV + castxml // (this might work on older versions of gcc too, needs testing) #include #include #define HASH_XXX_NS std::tr1 #define HASH_XXX_UMAP unordered_map #define HASH_XXX_USET unordered_set #define HASH_XXX_UMMAP unordered_multimap #define HASH_XXX_UMMSET unordered_multiset #else // Older versions of gcc are not tested. // 4.4.7 is already quite old. #error "Not tested" #endif #endif #endif #include #include #include #include #include #include #include namespace rtd{ template struct type {}; namespace vectors{ typedef std::vector< int > v_int; typedef std::vector< std::string > v_string; typedef std::vector< v_int > v_v_int; } namespace lists{ typedef std::list< int > l_int; typedef std::list< std::wstring > l_wstring; } namespace deques{ typedef std::deque< std::vector< int > > d_v_int; typedef std::deque< std::list< std::string > > d_l_string; } namespace queues{ typedef std::queue< int > q_int; typedef std::queue< std::string > q_string; } namespace priority_queues{ typedef std::priority_queue< int > pq_int; typedef std::priority_queue< std::string > pq_string; } namespace sets{ typedef std::set< std::vector< int > > s_v_int; typedef std::set< std::string > s_string; } namespace multiset_sets{ typedef std::multiset< std::vector< int > > ms_v_int; typedef std::multiset< std::string > ms_string; } namespace maps{ typedef std::map< int, double > m_i2d; typedef std::map< std::wstring, double > m_wstr2d; typedef std::map< const std::vector< int >, m_wstr2d > m_v_i2m_wstr2d; inline std::map f2() { std::map list; return list; } } namespace multimaps{ typedef std::multimap< int, double > mm_i2d; typedef std::multimap< std::wstring const, double > mm_wstr2d; typedef std::multimap< std::vector< int > const, mm_wstr2d const > mm_v_i2mm_wstr2d; } namespace hash_sets{ typedef HASH_XXX_NS::HASH_XXX_USET< std::vector< int > > hs_v_int; typedef HASH_XXX_NS::HASH_XXX_USET< std::string > hs_string; } namespace hash_multisets{ typedef HASH_XXX_NS::HASH_XXX_UMMSET< std::vector< int > > mhs_v_int; typedef HASH_XXX_NS::HASH_XXX_UMMSET< std::string > mhs_string; } namespace hash_maps{ typedef HASH_XXX_NS::HASH_XXX_UMAP< int, double > hm_i2d; typedef HASH_XXX_NS::HASH_XXX_UMAP< std::wstring, double > hm_wstr2d; } namespace hash_multimaps{ typedef HASH_XXX_NS::HASH_XXX_UMMAP< int, double > hmm_i2d; typedef HASH_XXX_NS::HASH_XXX_UMMAP< std::wstring const, double > hmm_wstr2d; typedef HASH_XXX_NS::HASH_XXX_UMMAP< std::vector< int > const, hmm_wstr2d const > hmm_v_i2mm_wstr2d; } inline void f1( type< sets::s_v_int > ){ } } #endif//__remove_template_defaults_hpp__ pygccxml-3.0.2/tests/data/separate_compilation/000077500000000000000000000000001476564735400216445ustar00rootroot00000000000000pygccxml-3.0.2/tests/data/separate_compilation/all.h000066400000000000000000000002161476564735400225640ustar00rootroot00000000000000#ifndef __all_h_10062009__ #define __all_h_10062009__ 1 #include "data.h" #include "base.h" #include "derived.h" #endif//__all_h_10062009__ pygccxml-3.0.2/tests/data/separate_compilation/base.h000066400000000000000000000003261476564735400227300ustar00rootroot00000000000000#ifndef __base_h_10062009__ #define __base_h_10062009__ 1 #include "data.h" namespace buggy{ struct base_t{ virtual ~base_t() {}; virtual data_t* get_data() const = 0; }; } #endif//__base_h_10062009__ pygccxml-3.0.2/tests/data/separate_compilation/data.h000066400000000000000000000010171476564735400227250ustar00rootroot00000000000000#ifndef __data_h_10062009__ #define __data_h_10062009__ 1 namespace std{ template struct pair{ typedef pair _Myt; typedef T1 first_type; typedef T2 second_type; pair(): first(T1()), second(T2()) {} pair(const T1& t1, const T2& t2) : first(t1), second(t2) {} T1 first; // the first stored value T2 second; // the second stored value }; } namespace buggy{ struct data_t{ typedef std::pair pair_t; }; } #endif//__data_h_10062009__ pygccxml-3.0.2/tests/data/separate_compilation/derived.h000066400000000000000000000004401476564735400234350ustar00rootroot00000000000000#ifndef __derived_h_10062009__ #define __derived_h_10062009__ 1 #include "base.h" namespace buggy{ class derived_t: public base_t{ public: virtual ~derived_t() {}; virtual data_t* get_data() const; private: data_t::pair_t data_pair; }; } #endif//__derived_h_10062009__ pygccxml-3.0.2/tests/data/string_traits.hpp000066400000000000000000000013521476564735400210500ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include namespace string_traits{ namespace yes{ typedef std::string x1; typedef const std::string x2; typedef std::string& x3; typedef const std::string& x4; } namespace no{ typedef int x1; typedef const int x2; typedef const int& x3; } } namespace wstring_traits{ namespace yes{ typedef std::wstring x1; typedef const std::wstring x2; typedef std::wstring& x3; typedef const std::wstring& x4; } namespace no{ typedef int x1; typedef const int x2; typedef const int& x3; } } pygccxml-3.0.2/tests/data/test_argument_without_name.hpp000066400000000000000000000007051476564735400236210ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // Demonstrate some code where a struct without name is passed to a // templated function. See bug #55 template void function(type &var) {}; int main() { // Create foo, a struct with no name struct { } foo; function(foo); } pygccxml-3.0.2/tests/data/test_array_argument.hpp000066400000000000000000000005301476564735400222300ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt class test { public: // A constructor test(const float & t0){}; void function(int arg1[1024], int arg2[512]) {}; }; pygccxml-3.0.2/tests/data/test_ccflags.hpp000066400000000000000000000002401476564735400206100ustar00rootroot00000000000000// Will only be defined when -fopenmp flag is included // in ccflags of corresponding config object. #ifdef _OPENMP namespace ccflags_test_namespace{} #endif pygccxml-3.0.2/tests/data/test_comments.hpp000066400000000000000000000014461476564735400210440ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt //! Namespace Comment //! Across multiple lines namespace comment { /** class comment */ class test { public: // Non-doc comment before. /** doc comment */ // Non-doc comment after. test(); /// cxx comment /// with multiple lines int hello(); //! mutable field comment int val1 = 0; /// bit field comment double val2=2; /// inside class enum comment enum test_enum { One = 1, Two = 2 }; }; /// Outside Class enum comment enum com_enum { One = 1, Two = 2 }; }pygccxml-3.0.2/tests/data/test_copy_constructor.hpp000066400000000000000000000010241476564735400226260ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt typedef const int & myvar; class test { public: // The copy constructor test(const test & t0){}; // A constructor test(const float & t0){}; // A constructor with a typedef test(myvar t0){}; }; // An empty class; C++ will automatically create a copy constructor class test2 {}; pygccxml-3.0.2/tests/data/test_deprecation.hpp000066400000000000000000000011071476564735400215060ustar00rootroot00000000000000// Copyright 2021 Insight Software Consortium. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace deprecation { class __attribute__((deprecated("Test class Deprecated"))) test { public: test(); __attribute__((deprecated("One arg constructor is Deprecated"))) test(int a); int hello(); void __attribute__((deprecated("Function is deprecated"))) goodbye(); }; enum __attribute__((deprecated("Enumeration is Deprecated"))) com_enum { One = 1, Two = 2 }; }pygccxml-3.0.2/tests/data/test_dynamic_exception.hpp000066400000000000000000000006321476564735400227150ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace declarations { namespace calldef { class some_exception_t{}; class other_exception_t{}; void calldef_with_throw() throw( some_exception_t, other_exception_t ); } } pygccxml-3.0.2/tests/data/test_elaborated_types.hpp000066400000000000000000000260561476564735400225510ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt namespace elaborated_t { class FooClass {}; struct FooStruct {}; enum FooEnum {e1}; union FooUnion {}; namespace yes_class { class FooClass c1 = {}; const class FooClass c2 = {}; volatile class FooClass c3 = {}; volatile const class FooClass c4 = {}; const volatile class FooClass c5 = {}; typedef class FooClass cc1; typedef const class FooClass cc2; typedef volatile class FooClass cc3; typedef volatile const class FooClass cc4; typedef const volatile class FooClass cc5; class FooClass *c1ptr; const class FooClass *c2ptr; volatile class FooClass *c3ptr; volatile const class FooClass *c4ptr; const volatile class FooClass *c5ptr; typedef class FooClass *cc1ptr; typedef const class FooClass *cc2ptr; typedef volatile class FooClass *cc3ptr; typedef volatile const class FooClass *cc4ptr; typedef const volatile class FooClass *cc5ptr; }; namespace yes_struct { struct FooStruct s1 = {}; const struct FooStruct s2 = {}; volatile struct FooStruct s3 = {}; volatile const struct FooStruct s4 = {}; const volatile struct FooStruct s5 = {}; typedef struct FooStruct ss1; typedef const struct FooStruct ss2; typedef volatile struct FooStruct ss3; typedef volatile const struct FooStruct ss4; typedef const volatile struct FooStruct ss5; struct FooStruct *s1ptr; const struct FooStruct *s2ptr; volatile struct FooStruct *s3ptr; volatile const struct FooStruct *s4ptr; const volatile struct FooStruct *s5ptr; typedef struct FooStruct *ss1ptr; typedef const struct FooStruct *ss2ptr; typedef volatile struct FooStruct *ss3ptr; typedef volatile const struct FooStruct *ss4ptr; typedef const volatile struct FooStruct *ss5ptr; }; namespace yes_enum { enum FooEnum e1; //const enum FooEnum e2; (not valid c++) volatile enum FooEnum e3; //volatile const enum FooEnum e4; (not valid c++) //const volatile enum FooEnum e5; (not valid c++) enum FooEnum *e1ptr; const enum FooEnum *e2ptr; volatile enum FooEnum *e3ptr; volatile const enum FooEnum *e4ptr; const volatile enum FooEnum *e5ptr; typedef enum FooEnum *ee1ptr; typedef const enum FooEnum *ee2ptr; typedef volatile enum FooEnum *ee3ptr; typedef volatile const enum FooEnum *ee4ptr; typedef const volatile enum FooEnum *ee5ptr; }; namespace yes_union { union FooUnion u1; const union FooUnion u2 = {}; volatile union FooUnion u3; volatile const union FooUnion e4 = {}; const volatile union FooUnion e5 = {}; union FooUnion *u1ptr; const union FooUnion *u2ptr; volatile union FooUnion *u3ptr; volatile const union FooUnion *u4ptr; const volatile union FooUnion *u5ptr; typedef union FooUnion *uu1ptr; typedef const union FooUnion *uu2ptr; typedef volatile union FooUnion *uu3ptr; typedef volatile const union FooUnion *uu4ptr; typedef const volatile union FooUnion *uu5ptr; }; namespace no_class { FooClass c1 = {}; const FooClass c2 = {}; volatile FooClass c3 = {}; volatile const FooClass c4 = {}; const volatile FooClass c5 = {}; typedef FooClass cc1; typedef const FooClass cc2; typedef volatile FooClass cc3; typedef volatile const FooClass cc4; typedef const volatile FooClass cc5; FooClass *c1ptr; const FooClass *c2ptr; volatile FooClass *c3ptr; volatile const FooClass *c4ptr; const volatile FooClass *c5ptr; typedef FooClass *cc1ptr; typedef const FooClass *cc2ptr; typedef volatile FooClass *cc3ptr; typedef volatile const FooClass *cc4ptr; typedef const volatile FooClass *cc5ptr; }; namespace no_struct { FooStruct s1 = {}; const FooStruct s2 = {}; volatile FooStruct s3 = {}; volatile const FooStruct s4 = {}; const volatile FooStruct s5 = {}; typedef FooStruct ss1; typedef const FooStruct ss2; typedef volatile FooStruct ss3; typedef volatile const FooStruct ss4; typedef const volatile FooStruct ss5; FooStruct *s1ptr; const FooStruct *s2ptr; volatile FooStruct *s3ptr; volatile const FooStruct *s4ptr; const volatile FooStruct *s5ptr; typedef FooStruct *ss1ptr; typedef const FooStruct *ss2ptr; typedef volatile FooStruct *ss3ptr; typedef volatile const FooStruct *ss4ptr; typedef const volatile FooStruct *ss5ptr; }; namespace no_enum { FooEnum e1; //const enum FooEnum e2; (not valid c++) volatile FooEnum e3; //volatile const FooEnum e4; (not valid c++) //const volatile FooEnum e5; (not valid c++) FooEnum *e1ptr; const FooEnum *e2ptr; volatile FooEnum *e3ptr; volatile const FooEnum *e4ptr; const volatile FooEnum *e5ptr; typedef FooEnum *ee1ptr; typedef const FooEnum *ee2ptr; typedef volatile FooEnum *ee3ptr; typedef volatile const FooEnum *ee4ptr; typedef const volatile FooEnum *ee5ptr; }; namespace no_union { FooUnion u1; const FooUnion u2 = {}; volatile FooUnion u3; volatile const FooUnion e4 = {}; const volatile FooUnion e5 = {}; FooUnion *u1ptr; const FooUnion *u2ptr; volatile FooUnion *u3ptr; volatile const FooUnion *u4ptr; const volatile FooUnion *u5ptr; typedef FooUnion *uu1ptr; typedef const FooUnion *uu2ptr; typedef volatile FooUnion *uu3ptr; typedef volatile const FooUnion *uu4ptr; typedef const volatile FooUnion *uu5ptr; }; namespace arguments_class { void testClass1(FooClass no, class FooClass yes); void testClass2(const FooClass no, const class FooClass yes); void testClass3(volatile FooClass no, volatile class FooClass yes); void testClass4(const volatile FooClass no, const volatile class FooClass yes); void testClass5(volatile const FooClass no, volatile const class FooClass yes); void testClass1ptr(FooClass *no, class FooClass *yes); void testClass2ptr(const FooClass *no, const class FooClass *yes); void testClass3ptr(volatile FooClass *no, volatile class FooClass *yes); void testClass4ptr(const volatile FooClass *no, const volatile class FooClass *yes); void testClass5ptr(volatile const FooClass *no, volatile const class FooClass *yes); void testClass1ref(FooClass &no, class FooClass &yes); void testClass2ref(const FooClass &no, const class FooClass &yes); void testClass3ref(volatile FooClass &no, volatile class FooClass &yes); void testClass4ref(const volatile FooClass &no, const volatile class FooClass &yes); void testClass5ref(volatile const FooClass &no, volatile const class FooClass &yes); } namespace arguments_struct { void testStruct1(FooStruct no, struct FooStruct yes); void testStruct2(const FooStruct no, const struct FooStruct yes); void testStruct3(volatile FooStruct no, volatile struct FooStruct yes); void testStruct4(const volatile FooStruct no, const volatile struct FooStruct yes); void testStruct5(volatile const FooStruct no, volatile const struct FooStruct yes); void testStruct1ptr(FooStruct *no, struct FooStruct *yes); void testStruct2ptr(const FooStruct *no, const struct FooStruct *yes); void testStruct3ptr(volatile FooStruct *no, volatile struct FooStruct *yes); void testStruct4ptr(const volatile FooStruct *no, const volatile struct FooStruct *yes); void testStruct5ptr(volatile const FooStruct *no, volatile const struct FooStruct *yes); void testStruct1ref(FooStruct &no, struct FooStruct &yes); void testStruct2ref(const FooStruct &no, const struct FooStruct &yes); void testStruct3ref(volatile FooStruct &no, volatile struct FooStruct &yes); void testStruct4ref(const volatile FooStruct &no, const volatile struct FooStruct &yes); void testStruct5ref(volatile const FooStruct &no, volatile const struct FooStruct &yes); } namespace arguments_enum { void testEnum1(FooEnum no, enum FooEnum yes); void testEnum2(const FooEnum no, const enum FooEnum yes); void testEnum3(volatile FooEnum no, volatile enum FooEnum yes); void testEnum4(const volatile FooEnum no, const volatile enum FooEnum yes); void testEnum5(volatile const FooEnum no, volatile const enum FooEnum yes); void testEnum1ptr(FooEnum *no, enum FooEnum *yes); void testEnum2ptr(const FooEnum *no, const enum FooEnum *yes); void testEnum3ptr(volatile FooEnum *no, volatile enum FooEnum *yes); void testEnum4ptr(const volatile FooEnum *no, const volatile enum FooEnum *yes); void testEnum5ptr(volatile const FooEnum *no, volatile const enum FooEnum *yes); void testEnum1ref(FooEnum &no, enum FooEnum &yes); void testEnum2ref(const FooEnum &no, const enum FooEnum &yes); void testEnum3ref(volatile FooEnum &no, volatile enum FooEnum &yes); void testEnum4ref(const volatile FooEnum &no, const volatile enum FooEnum &yes); void testEnum5ref(volatile const FooEnum &no, volatile const enum FooEnum &yes); } namespace arguments_union { void testUnion1(FooUnion no, union FooUnion yes); void testUnion2(const FooUnion no, const union FooUnion yes); void testUnion3(volatile FooUnion no, volatile union FooUnion yes); void testUnion4(const volatile FooUnion no, const volatile union FooUnion yes); void testUnion5(volatile const FooUnion no, volatile const union FooUnion yes); void testUnion1ptr(FooUnion *no, union FooUnion *yes); void testUnion2ptr(const FooUnion *no, const union FooUnion *yes); void testUnion3ptr(volatile FooUnion *no, volatile union FooUnion *yes); void testUnion4ptr(const volatile FooUnion *no, const volatile union FooUnion *yes); void testUnion5ptr(volatile const FooUnion *no, volatile const union FooUnion *yes); void testUnion1ref(FooUnion &no, union FooUnion &yes); void testUnion2ref(const FooUnion &no, const union FooUnion &yes); void testUnion3ref(volatile FooUnion &no, volatile union FooUnion &yes); void testUnion4ref(const volatile FooUnion &no, const volatile union FooUnion &yes); void testUnion5ref(volatile const FooUnion &no, volatile const union FooUnion &yes); } }pygccxml-3.0.2/tests/data/test_function_pointer.hpp000066400000000000000000000011011476564735400225700ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // func1 is a function pointer // In this case, func1 is the declaration of a function which has two arguments // (on the right) and returns nothing (void on the left) void (*func1)(int, double); // Another pointer, but not a function pointer int const volatile* myPointer; // A struct struct some_struct_t{}; // Another function pointer typedef void (some_struct_t::*x8)(); pygccxml-3.0.2/tests/data/test_map_gcc5.hpp000066400000000000000000000004301476564735400206650ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include using namespace std; class mytest { map mymap; }; pygccxml-3.0.2/tests/data/test_non_copyable_recursive.hpp000066400000000000000000000015711476564735400237550ustar00rootroot00000000000000// Copyright 2014-2016 Insight Software Consortium. // Copyright 2004-2008 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include // Demonstration of the real problem with basic c++ namespace Test1 { // Forward declaration class Base2; // Base 1, with pointer to Base2 class Base1 { private: Base1(); protected: Base2* aBasePtr2; }; // Base 2, child class of Base1 class Base2: public Base1 { private: Base2(); }; // Child class of Base2 // Holds a pointer to Base2 class Child: public Base2 { private: Child(); protected: Base2* aBasePtr2; }; } // Real-life test with std::istream where this happened namespace Test2 { class FileStreamDataStream { public: FileStreamDataStream(const std::istream* s) {} protected: std::istream* mInStream; }; } pygccxml-3.0.2/tests/data/test_order.hpp000066400000000000000000000015451476564735400203320ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt const int c1 = 0; int const c2 = 0; const int * const cptr1 = 0; int const * const cptr2 = 0; volatile int v1 = 0; int volatile v2 = 0; volatile int * volatile vptr1 = 0; int volatile * volatile vptr2 = 0; const volatile int cv1 = 0; int const volatile cv2 = 0; volatile const int cv3 = 0; int volatile const cv4 = 0; const volatile int * const volatile cvptr1 = 0; int const volatile * const volatile cvptr2 = 0; volatile const int * volatile const cvptr3 = 0; int volatile const * volatile const cvptr4 = 0; const int ac1[2] = {}; int const ac2[2] = {}; const int * const acptr1[2] = {}; int const * const acptr2[2] = {}; class A {}; const class A classA = {};pygccxml-3.0.2/tests/data/test_overrides.hpp000066400000000000000000000010101476564735400212040ustar00rootroot00000000000000// Copyright 2020 Insight Software Consortium. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef simple_h #define simple_h #include class base { public: base() {}; ~base() {}; virtual int goodbye(int num_ref, int num_times) = 0; }; class simple : public base { public: simple() {}; ~simple() {}; int hello() { return 0; }; int goodbye(int , int) override { std::cout << "goodbye\n"; return 10; } ; }; #endif pygccxml-3.0.2/tests/data/test_pattern_parser.hpp000066400000000000000000000022721476564735400222460ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include #include using namespace std; template class myClass {}; template class myClass2 {}; template class myClass3 {}; int main () { myClass(const std::string &, const std::string &)> m1; myClass(const int &, const int &)> m2; myClass2(const int &, const int &), std::vector> m3; myClass2, std::vector(const int &, const int &)> m4; myClass3, std::vector(const int &, const int &), std::vector(const int &, const int &)> m5; myClass3(const int &, const int &), std::vector, std::vector(const int &, const int &)> m6; myClass3(const int &, const int &), std::vector(const int &, const int &), std::vector> m7; myClass3(const int &, const int &), std::vector(double &)> m8; return 0; } pygccxml-3.0.2/tests/data/test_smart_pointer.hpp000066400000000000000000000006371476564735400221060ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include #include #include #include std::shared_ptr yes1(new int { 6 }); std::auto_ptr yes2( new double { 7.0 } ); std::vector no1; std::set< std::string > no2; pygccxml-3.0.2/tests/data/type_as_exception_bug.h000066400000000000000000000005771476564735400222030ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __key_error_bug_h__ #define __key_error_bug_h__ struct ExpressionError{}; struct xxx{ virtual void buggy() throw( ExpressionError& ); }; #endif//__key_error_bug_h__ pygccxml-3.0.2/tests/data/type_traits.hpp000066400000000000000000000646711476564735400205400ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt //Almost all test cases have been taken //from boost.type_traits (http://www.boost.org) library. #include #include #include #include #include #include "noncopyable.hpp" #define TYPE_PERMUTATION( BASE, NAME ) \ typedef BASE NAME##_t; \ typedef BASE const NAME##_const_t; \ typedef BASE volatile NAME##_volatile_t; \ typedef BASE const volatile NAME##_const_volatile_t; struct some_struct_t{ void do_smth(); int member; }; namespace is_std_ostream{ namespace yes{ typedef std::ostream ostream_type1; typedef std::ostream& ostream_type2; typedef const std::ostream& ostream_type3; } namespace no{ typedef int int__; } } namespace is_std_wostream{ namespace yes{ typedef std::wostream wostream_type1; typedef std::wostream& wostream_type2; typedef const std::wostream& wostream_type3; } namespace no{ typedef int int__; } } struct incomplete_type; namespace is_void{ namespace yes{ TYPE_PERMUTATION( void, void ) } namespace no{ typedef void* void_ptr_t; typedef int int_t; typedef some_struct_t some_struct_alias_t; typedef incomplete_type incomplete_type_alias_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); } } namespace is_void_pointer{ namespace yes{ void *void_ptr1; typedef void *void_ptr2; void *ptr1 = 0; } namespace no{ const void *ptr1; volatile void *ptr2; const volatile void *ptr3; typedef bool bool_t; typedef int int_t; typedef some_struct_t some_struct_alias_t; typedef incomplete_type incomplete_type_alias_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); } } namespace is_bool{ namespace yes{ TYPE_PERMUTATION( bool, bool ) } namespace no{ typedef void* void_ptr_t; typedef int int_t; typedef some_struct_t some_struct_alias_t; typedef incomplete_type incomplete_type_alias_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); } } namespace is_noncopyable{ namespace detail{ struct x{ private: x( const x& ); x& operator=(const x& ); }; struct y_type{ union { struct { float x, y, z; }; float val[3]; }; static const y_type zero; }; struct instantiate_tmpls{ instantiate_tmpls() : v(), s(), ms() {} std::vector< int > v; std::set< std::string > s; std::multimap< std::string, std::string > ms; }; class a_t{ public: static char get_a(){ return 'a'; } private: a_t(){}; ~a_t(){}; }; class b_t{ ~b_t(){} public: static char get_b(){ return 'b'; } }; class c_t : public boost::noncopyable{ public: static char get_c(){ return 'c'; } }; class d_t{ private: d_t( const d_t& ); public: d_t(){} ~d_t(){} static char get_d(){ return 'd'; } }; class dd_t : public d_t{ public: dd_t(){} ~dd_t(){} static char get_dd(){ return 'D'; } }; struct e_t{ virtual void do_smth() = 0; private: c_t c; }; struct f_t{ f_t() : i(0){} virtual void do_smth() = 0; private: const int i; }; struct g_t{ enum E{e}; g_t() : e_(e){} virtual void do_smth() = 0; private: const E e_; }; struct const_item{ const int values[10]; }; void test_const_item(const_item by_value); struct const_container{ const const_item items[10]; }; void test_const_container(const_container by_value); enum semantic{ position, normal, binormal }; enum element_type{ float_, color, short_ }; struct vertex{ protected: unsigned short source; size_t offset; semantic sem; element_type el_type; public: vertex( int x, int y, int z ); bool operator==( const vertex& ) const; }; } namespace yes{ typedef detail::x x; typedef detail::a_t a_t; typedef detail::b_t b_t; typedef detail::c_t c_t; typedef detail::d_t d_t; typedef detail::dd_t dd_t; typedef detail::f_t f_t; typedef detail::g_t g_t; typedef detail::const_container const_container_t; typedef detail::const_item const_item_t; typedef detail::const_item *const_item_t_ptr; } namespace no{ typedef std::string string_type; typedef detail::y_type y_type; typedef std::vector< int > vector_of_int_type; typedef std::set< std::string > string_set_type; typedef std::multimap< std::string, std::string > s2s_multimap_type; typedef detail::vertex vertex_type; typedef detail::vertex *vertex_type_ptr; } } namespace is_calldef_pointer{ namespace details{ struct X{ void do_smth( int ) const; }; } namespace yes{ typedef void (*ff1)( int, int ); typedef void ( details::X::*mf1)( int ) const; TYPE_PERMUTATION( ff1, ff1_type ); TYPE_PERMUTATION( mf1, mf1_type ); } namespace no{ typedef int int_; } } namespace is_integral{ namespace yes{ TYPE_PERMUTATION( bool, bool ) TYPE_PERMUTATION( char, char ) TYPE_PERMUTATION( unsigned char, uchar ) TYPE_PERMUTATION( short, short ) TYPE_PERMUTATION( unsigned short, ushort ) TYPE_PERMUTATION( int, int ) TYPE_PERMUTATION( unsigned int, uint ) TYPE_PERMUTATION( long, long ) TYPE_PERMUTATION( unsigned long, ulong ) TYPE_PERMUTATION( long long int, llint ) TYPE_PERMUTATION( long long unsigned int, ulli ) } namespace no{ typedef some_struct_t some_struct_alias_t; typedef float* float_ptr_t; typedef float& float_ref_t; typedef const float& const_float_ref_t; typedef incomplete_type incomplete_type_alias; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); TYPE_PERMUTATION( void, void ) TYPE_PERMUTATION( float, float ) TYPE_PERMUTATION( double, double ) TYPE_PERMUTATION( long double, ldouble ) } } namespace is_floating_point{ namespace yes{ TYPE_PERMUTATION( float, float ) TYPE_PERMUTATION( double, double ) TYPE_PERMUTATION( long double, ldouble ) } namespace no{ typedef some_struct_t some_struct_alias_t; typedef float* float_ptr_t; typedef float& float_ref_t; typedef const float& const_float_ref_t; typedef incomplete_type incomplete_type_alias; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); TYPE_PERMUTATION( void, void ) TYPE_PERMUTATION( bool, bool ) TYPE_PERMUTATION( char, char ) TYPE_PERMUTATION( unsigned char, uchar ) TYPE_PERMUTATION( short, short ) TYPE_PERMUTATION( unsigned short, ushort ) TYPE_PERMUTATION( int, int ) TYPE_PERMUTATION( unsigned int, uint ) TYPE_PERMUTATION( long, long ) TYPE_PERMUTATION( unsigned long, ulong ) TYPE_PERMUTATION( long long int, llint ) TYPE_PERMUTATION( long long unsigned int, ulli ) } } namespace is_fundamental{ namespace yes{ TYPE_PERMUTATION( void, void ) TYPE_PERMUTATION( bool, bool ) TYPE_PERMUTATION( char, char ) TYPE_PERMUTATION( unsigned char, uchar ) TYPE_PERMUTATION( short, short ) TYPE_PERMUTATION( unsigned short, ushort ) TYPE_PERMUTATION( int, int ) TYPE_PERMUTATION( unsigned int, uint ) TYPE_PERMUTATION( long, long ) TYPE_PERMUTATION( unsigned long, ulong ) TYPE_PERMUTATION( long long int, llint ) TYPE_PERMUTATION( long long unsigned int, ulli ) TYPE_PERMUTATION( float, float ) TYPE_PERMUTATION( double, double ) TYPE_PERMUTATION( long double, ldouble ) } namespace no{ typedef some_struct_t some_struct_alias_t; typedef float* float_ptr_t; typedef float& float_ref_t; typedef const float& const_float_ref_t; typedef incomplete_type incomplete_type_alias; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); } } namespace is_pointer{ namespace yes{ typedef int* int_ptr_t; typedef const int* const_int_ptr_t; typedef volatile int* volatile_int_ptr_t; typedef some_struct_t* some_struct_ptr_t; typedef int* const int_const_ptr_t; typedef int* volatile int_volatile_ptr_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); } namespace no{ typedef int int_t; typedef int& int_ref_t; typedef some_struct_t some_struct_alias_t; typedef int*& int_ptr_ref_t; } } namespace remove_pointer{ namespace before{ typedef int* x1; typedef const int* x2; typedef volatile int* x3; typedef some_struct_t* x4; typedef int* const x5; typedef int* volatile x6; typedef void(*x7)(); // typedef void (some_struct_t::*x8)(); // The last test is disabled but is covered by test_function_pointer.py // I do not know how to write the c++ code in the after pointer removal // namespace, as just removing the * will not work. But as this case is // covered elsewhere, it is okay to skip that one. // TODO: decide if last test (some_struct::*x8) needs to be removed // completely or written differently. } namespace after{ typedef int x1; typedef const int x2; typedef volatile int x3; typedef some_struct_t x4; typedef int const x5; typedef int volatile x6; typedef void(x7)(); // typedef void (some_struct_t::*x8)(); } } namespace is_reference{ namespace yes{ typedef int& int_ref_t; typedef const int& const_int_ref_t; typedef int const& int_const_ref_t; typedef some_struct_t& some_struct_ref_t; typedef int*& int_ptr_ref_t; } namespace no{ typedef int* int_ptr_t; typedef const int* const_int_ptr_t; typedef volatile int* volatile_int_ptr_t; typedef some_struct_t* some_struct_ptr_t; typedef int* const int_const_ptr_t; typedef int* volatile int_volatile_ptr_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); typedef int int_t; } } namespace remove_reference{ namespace before{ typedef int& x1; typedef const int& x2; typedef some_struct_t& x3; typedef int*& x4; typedef void (some_struct_t::*x5)(); } namespace after{ typedef int x1; typedef const int x2; typedef some_struct_t x3; typedef int* x4; typedef void (some_struct_t::*x5)(); } } namespace is_const{ namespace yes{ typedef const void const_void_t; typedef const incomplete_type const_incomplete_type_t; typedef int* const int_const_t; typedef int* volatile const int_volatile_const_t; typedef int* const volatile int_const_volatile_t; } namespace no{ typedef int* int_ptr_t; typedef const int* const_int_ptr_t; typedef volatile int* volatile_int_ptr_t; typedef some_struct_t* some_struct_ptr_t; typedef int* volatile int_volatile_ptr_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); typedef int int_t; typedef const int& const_int_ref_t; } } namespace remove_const{ namespace before{ typedef const void x1; typedef const incomplete_type x2; typedef int* const x3; typedef int* volatile x4; typedef void const * x5; typedef int volatile const x6; typedef int const volatile x7; typedef char arr_42[42]; typedef char const arr_c_42[42]; typedef char volatile arr_v_42[42]; typedef char const volatile arr_cv_42[42]; typedef char volatile const arr_vc_42[42]; } namespace after{ typedef void x1; typedef incomplete_type x2; typedef int* x3; typedef int* volatile x4; typedef void const * x5; typedef int volatile x6; typedef int volatile x7; typedef char arr_42[42]; typedef char arr_c_42[42]; typedef char volatile arr_v_42[42]; typedef char volatile arr_cv_42[42]; typedef char volatile arr_vc_42[42]; } } namespace is_volatile{ namespace yes{ typedef void * volatile vvoid_ptr_t; typedef volatile int volatile_int_t; typedef int* volatile const int_volatile_const_t; typedef int* const volatile int_const_volatile_t; } namespace no{ typedef void volatile * void_ptr_to_v_t; typedef int* int_ptr_t; typedef const int* const_int_ptr_t; typedef int* volatile_int_ptr_t; typedef some_struct_t* some_struct_ptr_t; typedef int* int_volatile_ptr_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); typedef int int_t; } } namespace remove_volatile{ namespace before{ typedef void * volatile x1; typedef volatile int x2; typedef int* x3; typedef void volatile * x4; typedef int volatile const x5; typedef int const volatile x6; typedef char arr_42[42]; typedef char const arr_c_42[42]; typedef char volatile arr_v_42[42]; typedef char const volatile arr_cv_42[42]; typedef char volatile const arr_vc_42[42]; } namespace after{ typedef void * x1; typedef int x2; typedef int* x3; typedef void volatile * x4; typedef int const x5; typedef int const x6; typedef char arr_42[42]; typedef char const arr_c_42[42]; typedef char arr_v_42[42]; typedef char const arr_cv_42[42]; typedef char const arr_vc_42[42]; } } namespace remove_cv{ namespace before{ typedef void * volatile x10; typedef void * const volatile x11; typedef void * const x12; typedef volatile int x20; typedef const volatile int x21; typedef const int x22; typedef int* volatile x30; typedef int* const volatile x31; typedef int* const x32; typedef void(*x40)(); typedef char arr_42[42]; typedef char const arr_c_42[42]; typedef char volatile arr_v_42[42]; typedef char const volatile arr_cv_42[42]; typedef char volatile const arr_vc_42[42]; } namespace after{ typedef void * x10; typedef void * x11; typedef void * x12; typedef int x20; typedef int x21; typedef int x22; typedef int* x30; typedef int* x31; typedef int* x32; typedef void(*x40)(); typedef char arr_42[42]; typedef char arr_c_42[42]; typedef char arr_v_42[42]; typedef char arr_cv_42[42]; typedef char arr_vc_42[42]; } } namespace is_enum{ enum color{ red, green, blue }; namespace yes{ typedef color COLOR; } namespace no{ typedef int* int_ptr_t; typedef const int* const_int_ptr_t; typedef int* volatile_int_ptr_t; typedef some_struct_t* some_struct_ptr_t; typedef int* int_volatile_ptr_t; typedef void(*function_t)(); typedef void (some_struct_t::*member_function_t)(); typedef int int_t; } } namespace has_trivial_constructor{ namespace details{ struct const_item{ const int values[10]; }; struct const_container{ const const_item items[10]; }; #if __cplusplus >= 201103L || defined(_MSC_VER) // C++11 and later must use braces to trigger aggregate initialization. // Using parentheses will cause value-initialization, and since the // two classes above have implicitly deleted default constructors, // that causes default initialization to be performed, which is ill-formed. // Note: MSVC is using c++11 but still defines __cplusplus as 199711L. In // that case use the c++11 feature, because that specific one is supported. void test_const_item( const_item x = const_item{} ); void test_const_container( const_container x = const_container{} ); #else void test_const_item( const_item x = const_item() ); void test_const_container( const_container x = const_container() ); #endif } namespace yes{ struct x{ x(){} }; } namespace no{ class y{ private: y(){} }; class singleton_t { private: static singleton_t *m_instance; singleton_t () {} ~singleton_t () {} public: static singleton_t* instance(); }; typedef details::const_item const_item; typedef details::const_container const_container; } } namespace has_public_constructor{ namespace yes{ struct x{ x(){} }; struct z{int i;}; } namespace no{ class y{ private: y(){} }; } } namespace has_public_destructor{ namespace yes{ struct x{ ~x(){} }; } namespace no{ class y{ private: ~y(){} }; } } namespace has_copy_constructor{ namespace yes{ struct x{ x(const x&){} }; typedef is_noncopyable::detail::vertex vertex_type; } namespace no{ class y{ private: y(const y&){} }; } } namespace is_base_and_derived{ namespace yes{ struct base{}; struct derived : public base {}; } namespace no{ struct unrelated1{}; struct unrelated2{}; } } namespace has_any_non_copyconstructor{ namespace yes{ struct x{ x(int){} }; } namespace no{ class y{ private: y(){} }; } } namespace is_unary_operator{ struct dummy{ bool operator!(){ return true; } int operator++(){ return 0; } int operator+(const dummy& ){ return 0; } }; inline int operator++( dummy& ){ return 0; } inline int operator*( const dummy&, const dummy& ){ return 0; } dummy& operator+=( dummy& x, const dummy& ){ return x; } } namespace is_array{ namespace yes{ int yes1[2]; const int yes2[2] = {0}; const volatile int yes3[2] = {0}; int yes4[2][3]; int const yes5[2] = {0}; } namespace no{ typedef int no1; typedef int* no2; typedef const int* no3; typedef const volatile int* no4; typedef int*const no5; typedef const int*volatile no6; typedef const volatile int*const no7; typedef void( * no8)( const int[2] ); } } namespace is_convertible{ template struct convertible_from{ convertible_from(T); }; template struct convertible_to{ operator T (); }; struct base{}; struct other{}; struct derived : base {}; struct derived_protected : protected base {}; struct derived_private : private base {}; struct base2{}; struct middle2 : virtual base2 {}; struct derived2 : middle2 {}; enum fruit{ apple }; template < typename source_type_, typename target_type_, int value_ > struct tester_t{ typedef source_type_ source_type; typedef target_type_ target_type; enum expected{ value=value_ }; }; template < typename source_type_, typename target_type_, int value_ > struct tester_source_t{ typedef source_type_ source_type; typedef target_type_ target_type; enum expected{ value=value_ }; private: enum { sizeof_source = sizeof( source_type ) }; }; template < typename source_type_, typename target_type_, int value_ > struct tester_target_t{ typedef source_type_ source_type; typedef target_type_ target_type; enum expected{ value=value_ }; private: enum { sizeof_target = sizeof( target_type ) }; }; template < typename source_type_, typename target_type_, int value_ > struct tester_both_t{ typedef source_type_ source_type; typedef target_type_ target_type; enum expected{ value=value_ }; private: enum { sizeof_source = sizeof( source_type ) }; enum { sizeof_target = sizeof( target_type ) }; }; struct x1 : public tester_t< const int *, int*, false >{}; struct x2 : public tester_t< int *, const int*, true >{}; struct x3 : public tester_t< const int&, int&, false >{}; struct x4 : public tester_t< const int&, int, true >{}; struct x5 : public tester_t< const int&, char, true >{}; struct x6 : public tester_t< const int&, char&, false >{}; struct x7 : public tester_t< const int&, char*, false >{}; struct x8 : public tester_t< int&, const int&, true >{}; struct x9 : public tester_t< int *, const int*, true >{}; struct x10 : public tester_t< int&, const int&, true >{}; struct x11 : public tester_t< float, int, true >{}; struct x12 : public tester_t< double, int, true >{}; struct x13 : public tester_t< double, float, true >{}; struct x14 : public tester_t< long, int, true >{}; struct x15 : public tester_t< int, char, true >{}; struct x16 : public tester_t< long long, int, true >{}; struct x17 : public tester_t< long long, char, true >{}; struct x18 : public tester_t< long long, float, true >{}; struct x19 : public tester_t< float, int, true >{}; struct x20 : public tester_t< float, void, false >{}; struct x21 : public tester_t< void, void, true >{}; struct x22 : public tester_t< double, void*, true >{}; struct x23 : public tester_t< double, int*, false >{}; struct x24 : public tester_t< int, int*, false >{}; struct x25 : public tester_t< const int, int*, false >{}; struct x26 : public tester_t< const int&, int*, false >{}; struct x27 : public tester_t< double*, int*, false >{}; struct x28 : public tester_source_t< convertible_to, int, true >{}; struct x29 : public tester_target_t< int, convertible_to, false >{}; struct x30 : public tester_source_t< convertible_to, float, true >{}; struct x31 : public tester_target_t< float, convertible_to, false >{}; struct x32 : public tester_source_t< convertible_to, float, true >{}; struct x33 : public tester_target_t< float, convertible_to, false >{}; struct x34 : public tester_source_t< convertible_to, float, true >{}; struct x35 : public tester_target_t< float, convertible_to, false >{}; struct x36 : public tester_source_t< convertible_to, float, true >{}; struct x37 : public tester_target_t< float, convertible_to, false >{}; struct x38 : public tester_source_t< convertible_to, float, true >{}; struct x39 : public tester_target_t< float, convertible_to, false >{}; struct x40 : public tester_source_t< convertible_to, char, true >{}; struct x41 : public tester_source_t< convertible_to, char, true >{}; struct x42 : public tester_source_t< convertible_to, char, true >{}; struct x43 : public tester_source_t< convertible_to, float&, true >{}; struct x44 : public tester_source_t< convertible_to, float const&, true >{}; struct x45 : public tester_source_t< convertible_to, float&, true >{}; struct x46 : public tester_source_t< convertible_to, float const&, true >{}; struct x47 : public tester_source_t< convertible_to, float&, false >{}; struct x48 : public tester_target_t< float, convertible_from, true >{}; struct x49 : public tester_target_t< float, convertible_from, true >{}; struct x50 : public tester_target_t< float, convertible_from, true >{}; struct x51 : public tester_target_t< float, convertible_from, true >{}; struct x52 : public tester_target_t< float, convertible_from, true >{}; struct x53 : public tester_target_t< float, convertible_from, false >{}; struct x54 : public tester_target_t< char, convertible_from, true >{}; struct x55 : public tester_target_t< char, convertible_from, true >{}; struct x56 : public tester_target_t< char, convertible_from, true >{}; struct x57 : public tester_target_t< float&, convertible_from , true >{}; struct x58 : public tester_target_t< float const&, convertible_from , true >{}; struct x59 : public tester_target_t< float&, convertible_from , true >{}; struct x60 : public tester_target_t< float const&, convertible_from, true >{}; struct x61 : public tester_target_t< float&, convertible_from, true >{}; struct x62 : public tester_target_t< int, convertible_from, true >{}; struct x63 : public tester_t< const int*, int[3], false >{}; struct x64 : public tester_t< int(&)[4], const int*, true >{}; struct x65 : public tester_t< int(&)(int), int(*)(int), true >{}; struct x66 : public tester_t< int[2], int*, true >{}; struct x67 : public tester_t< int[2], const int*, true >{}; struct x68 : public tester_t< const int[2], int*, false >{}; struct x69 : public tester_t< int*, int[3], false >{}; struct x70 : public tester_t< float, int&, false >{}; struct x71 : public tester_t< float, const int&, true >{}; struct x72 : public tester_t< other, void*, true >{}; struct x73 : public tester_t< int, void*, false >{}; struct x74 : public tester_t< fruit, void*, false >{}; struct x75 : public tester_t< other, int*, false >{}; struct x76 : public tester_t< other*, int*, false >{}; struct x77 : public tester_t< fruit, int, true >{}; struct x78 : public tester_t< fruit, double, true >{}; struct x79 : public tester_t< fruit, char, true >{}; struct x80 : public tester_t< fruit, wchar_t, true >{}; struct x81 : public tester_t< derived, base, true >{}; struct x82 : public tester_t< derived, derived, true >{}; struct x83 : public tester_t< base, base, true >{}; struct x84 : public tester_t< base, derived, false >{}; struct x85 : public tester_t< other, base, false >{}; struct x86 : public tester_t< middle2, base2, true >{}; struct x87 : public tester_t< derived2, base2, true >{}; struct x88 : public tester_t< derived*, base*, true >{}; struct x89 : public tester_t< base*, derived*, false >{}; struct x90 : public tester_t< derived&, base&, true >{}; struct x91 : public tester_t< base&, derived&, false >{}; struct x92 : public tester_t< const derived*, const base*, true >{}; struct x93 : public tester_t< const base*, const derived*, false >{}; struct x94 : public tester_t< const derived&, const base&, true >{}; struct x95 : public tester_t< const base&, const derived&, false >{}; struct x96 : public tester_t< derived_private, base, false >{}; struct x97 : public tester_t< derived_protected, base, true >{}; struct x98 : public tester_t< derived_protected, derived_private, false >{}; // : public tester_t< test_abc3, const test_abc1&, true >{}; // : public tester_t< non_int_pointer, void*, true >{}; // : public tester_t< test_abc1&, test_abc2&, false >{}; // : public tester_t< test_abc1&, int_constructible, false >{}; // : public tester_t< int_constructible, test_abc1&, false >{}; // : public tester_t< test_abc1&, test_abc2, false >{}; //~ : public tester_t< polymorphic_derived1,polymorphic_base, true >{}; //~ : public tester_t< polymorphic_derived2,polymorphic_base, true >{}; //~ : public tester_t< polymorphic_base,polymorphic_derived1, false >{}; //~ : public tester_t< polymorphic_base,polymorphic_derived2, false >{}; //~ #ifndef BOOST_NO_IS_ABSTRACT //~ : public tester_t< test_abc1,test_abc1, false >{}; //~ : public tester_t< Base,test_abc1, false >{}; //~ : public tester_t< polymorphic_derived2,test_abc1, false >{}; //~ : public tester_t< int,test_abc1, false >{}; //~ #endif } pygccxml-3.0.2/tests/data/typedefs1.hpp000066400000000000000000000005721476564735400200630ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __typedefs1_hpp__ #define __typedefs1_hpp__ #include "typedefs_base.hpp" namespace typedefs{ typedef item_t Item1; typedef int my_int_t; } #endif//__typedefs1_hpp__ pygccxml-3.0.2/tests/data/typedefs2.hpp000066400000000000000000000005431476564735400200620ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __typedefs2_hpp__ #define __typedefs2_hpp__ #include "typedefs_base.hpp" namespace typedefs{ typedef item_t Item2; } #endif//__typedefs2_hpp__ pygccxml-3.0.2/tests/data/typedefs_base.hpp000066400000000000000000000005231476564735400207700ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __typedefs_hpp__ #define __typedefs_hpp__ namespace typedefs{ struct item_t{}; typedef item_t Item; } #endif//__typedefs_hpp__ pygccxml-3.0.2/tests/data/unnamed_classes.hpp000066400000000000000000000027761476564735400213330ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __unnamed_classes_hpp__ #define __unnamed_classes_hpp__ namespace unnamed{ struct S1{ struct S2{ union Flags{ struct{ unsigned int hasItemIdList : 1; unsigned int pointsToFileOrDir : 1; unsigned int hasDescription : 1; unsigned int hasRelativePath : 1; unsigned int hasWorkingDir : 1; unsigned int hasCmdLineArgs : 1; unsigned int hasCustomIcon : 1; unsigned int useWorkingDir : 1; // Seems to need to be set to enable working dir unsigned int unused : 24; }; unsigned int raw; } flags; union { struct{ unsigned int isReadOnly : 1; unsigned int isHidden : 1; unsigned int isSystem : 1; unsigned int isVolumeLabel : 1; unsigned int isDir : 1; unsigned int isModified : 1; // =archive bit set, ie; is a file normally unsigned int isEncrypted : 1; unsigned int isNormal : 1; // Doesn't seem to get set unsigned int isTemporary : 1; unsigned int isSparse : 1; unsigned int hasReparsePoint : 1; unsigned int isCompressed : 1; unsigned int isOffline : 1; unsigned int unused : 19; }; unsigned int raw; } fileattribs; // in GetFileAttributes() format } header; struct S3{ union { char anon_mem_c; int anon_mem_i; }; long s3_mem; S2 s2; }; }; } // namespace #endif//__unnamed_classes_hpp__ pygccxml-3.0.2/tests/data/unnamed_enums_bug1.hpp000066400000000000000000000005231476564735400217270ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __unnamed_enums_bug1_hpp__ #define __unnamed_enums_bug1_hpp__ enum{ x1, x2 }; enum{ y1, y2 }; #endif//__unnamed_enums_bug1_hpp__ pygccxml-3.0.2/tests/data/unnamed_enums_bug2.hpp000066400000000000000000000005021476564735400217250ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __unnamed_enums_bug2_hpp__ #define __unnamed_enums_bug2_hpp__ enum{ z1, z2 }; #endif//__unnamed_enums_bug2_hpp__ pygccxml-3.0.2/tests/data/unnamed_ns_bug.hpp000066400000000000000000000006231476564735400211400ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #ifndef __unnamed_ns_bug_hpp__ #define __unnamed_ns_bug_hpp__ // unnamed namespace namespace{ bool bool_var; } namespace ns{ class test_t{ public: int var; }; } #endif//__unnamed_ns_bug_hpp__ pygccxml-3.0.2/tests/data/vector_traits.hpp000066400000000000000000000026471476564735400210540ustar00rootroot00000000000000// Copyright 2014-2017 Insight Software Consortium. // Copyright 2004-2009 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt #include #include struct _0_{}; typedef std::vector< _0_ > container; namespace vector_traits{ namespace yes{ struct _1_{ typedef int value_type; typedef std::vector< int > container; container do_nothing(){ return container(0); }; }; struct _2_{ typedef _0_ value_type; typedef std::vector< _0_ > container; container do_nothing(){ return container(0); }; }; struct _3_{ typedef std::string value_type; typedef std::vector< std::string > container; container do_nothing(){ return container(0); }; }; struct _4_{ typedef std::vector value_type; typedef std::vector< std::vector > container; container do_nothing(){ return container(0); }; }; struct _5_{ typedef int value_type; typedef const std::vector< int > container; container do_nothing(){ return container(0); }; }; } namespace no{ struct _1_{ template< class T > struct vector{}; typedef vector container; }; struct _2_{ typedef const std::vector< const int >& container; }; } } void do_nothing( std::vector< std::wstring >& ); pygccxml-3.0.2/tests/example_tester_wrap.py000066400000000000000000000022671476564735400211640ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import sys # This wrapper layer allows to execute the examples for the unittests # in a separate environment, where the sys.path has been hacked to point # to the pygccxml source tree (we do not want to pickup any pygccxml installed # on the system). Unfortunately passing the PYTHONPATH as env variable to # subprocess just appends to the sys.path ... here we want to insert at # position 1 so that the right pygccxml is found example_file = sys.argv[1] example_folder = os.path.dirname(example_file) root = os.path.normpath( os.path.dirname(sys.modules[__name__].__file__) + "/../") # Add the root folder to the path, so that the examples are not run against # whatever pygccxml version is installed sys.path.insert(1, root) # Hack the __file__ location, so that the example thinks it is in the # docs/examples folder sys.modules[__name__].__file__ = example_file # Run the example with open(example_file) as f: code = compile(f.read(), example_file, "exec") exec(code, None, None) pygccxml-3.0.2/tests/test_algorithms_cache.py000066400000000000000000000035211476564735400214370ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['core_membership.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_name_based(global_ns): cls = global_ns.class_(name='class_for_nested_enums_t') cls_full_name = declarations.full_name(cls) assert cls.cache.full_name == cls_full_name cls_declaration_path = declarations.declaration_path(cls) assert cls.cache.declaration_path == cls_declaration_path enum = cls.enumeration('ENestedPublic') enum_full_name = declarations.full_name(enum) assert enum.cache.full_name == enum_full_name enum_declaration_path = declarations.declaration_path(enum) assert enum.cache.declaration_path == enum_declaration_path # now we change class name, all internal decls cache should be cleared cls.name = "new_name" assert not cls.cache.full_name assert not cls.cache.declaration_path assert not enum.cache.full_name assert not enum.cache.declaration_path def test_access_type(global_ns): cls = global_ns.class_(name='class_for_nested_enums_t') enum = cls.enumeration('ENestedPublic') assert enum.cache.access_type == 'public' enum.cache.reset_access_type() assert not enum.cache.access_type assert 'public' == cls.find_out_member_access_type(enum) assert enum.cache.access_type == 'public' pygccxml-3.0.2/tests/test_argument_without_name.py000066400000000000000000000024521476564735400225520ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['test_argument_without_name.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_argument_without_name(global_ns): """ Test passing an object without name to a templated function. The test was failing when building the declaration string. The declaration string will be 'void (*)( & )'. If the passed object had a name the result would then be 'void (*)(Name & )'. See bug #55 """ criteria = declarations.calldef_matcher(name="function") free_funcs = declarations.matcher.find(criteria, global_ns) for free_func in free_funcs: decl_string = free_func.create_decl_string(with_defaults=False) assert decl_string == "void (*)( & )" pygccxml-3.0.2/tests/test_array_argument.py000066400000000000000000000035361476564735400211710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['test_array_argument.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_array_argument(global_ns): """ Test to ensure that function arguments' array size are kept intact rather than presented as pointers. """ criteria = declarations.calldef_matcher(name="function") free_funcs = declarations.matcher.find(criteria, global_ns) for free_func in free_funcs: decl_string = free_func.create_decl_string(with_defaults=False) assert decl_string == "void ( ::test::* )( int [1024],int [512] )" arg1 = free_func.arguments[0] arg2 = free_func.arguments[1] assert arg1.decl_type.decl_string == "int [1024]" assert arg1.name == "arg1" assert declarations.type_traits.array_size(arg1.decl_type) == 1024 assert isinstance( declarations.type_traits.array_item_type(arg1.decl_type), declarations.cpptypes.int_t ) is True assert arg2.decl_type.decl_string == "int [512]" assert arg2.name == "arg2" assert declarations.type_traits.array_size(arg2.decl_type) == 512 assert isinstance( declarations.type_traits.array_item_type(arg2.decl_type), declarations.cpptypes.int_t ) is True pygccxml-3.0.2/tests/test_array_bug.py000066400000000000000000000061511476564735400201200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations def test_array_bug_1(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'int aaaa[2][3][4][5];' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) aaaa_type = global_ns.variable('aaaa').decl_type assert 'int [2][3][4][5]' == aaaa_type.decl_string def test_array_bug_2(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'int* aaaa[2][3][4][5];' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) aaaa_type = global_ns.variable('aaaa').decl_type assert 'int * [2][3][4][5]' == aaaa_type.decl_string def test_array_bug_3(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'int aaaa[2];' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) aaaa_type = global_ns.variable('aaaa').decl_type assert 'int [2]' == aaaa_type.decl_string def test_array_bug_4(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'struct xyz{}; xyz aaaa[2][3];' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) aaaa_type = global_ns.variable('aaaa').decl_type assert '::xyz [2][3]' == aaaa_type.decl_string def test_array_bug_5(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'char const arr[4] = {};' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) arr_type = global_ns.variable('arr').decl_type assert 'char const [4]' == arr_type.decl_string assert declarations.is_array(arr_type) is True assert declarations.is_const(arr_type) is True def test_array_bug_6(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'char volatile arr[4] = {};' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) arr_type = global_ns.variable('arr').decl_type assert 'char volatile [4]' == arr_type.decl_string assert declarations.is_array(arr_type) is True assert declarations.is_volatile(arr_type) is True def test_array_bug_7(): config = autoconfig.cxx_parsers_cfg.config.clone() code = 'char const volatile arr[4] = {};' src_reader = parser.source_reader_t(config) global_ns = declarations.get_global_namespace( src_reader.read_string(code)) arr_type = global_ns.variable('arr').decl_type assert 'char const volatile [4]' == arr_type.decl_string assert declarations.is_array(arr_type) is True assert declarations.is_const(arr_type) is True assert declarations.is_volatile(arr_type) is True pygccxml-3.0.2/tests/test_attributes.py000066400000000000000000000036671476564735400203440ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ # TODO: once gccxml is removed; rename this to something like # annotate_tester "attributes_castxml.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_attributes(global_ns): numeric = global_ns.class_('numeric_t') do_nothing = numeric.member_function('do_nothing') arg = do_nothing.arguments[0] assert "annotate(sealed)" == numeric.attributes assert "annotate(no throw)" == do_nothing.attributes assert "annotate(out)" == arg.attributes assert numeric.member_operators(name="=")[0].attributes is None def test_attributes_thiscall(): """ Test attributes with the "f2" flag """ COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.flags = ["f2"] config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() numeric = global_ns.class_('numeric_t') do_nothing = numeric.member_function('do_nothing') arg = do_nothing.arguments[0] assert "annotate(sealed)" == numeric.attributes assert "annotate(out)" == arg.attributes assert "annotate(no throw)" == do_nothing.attributes assert numeric.member_operators(name="=")[0].attributes is None pygccxml-3.0.2/tests/test_better_templates_matcher.py000066400000000000000000000017711476564735400232160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "better_templates_matcher_tester.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_better_templates_matcher(global_ns): classes = [ "::Ogre::PlaneBoundedVolume", "::Ogre::Plane", "::Ogre::Singleton", "::Ogre::PCZoneFactoryManager", ] for i in classes: global_ns.class_(i) pygccxml-3.0.2/tests/test_bit_fields.py000066400000000000000000000016461476564735400202550ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "bit_fields.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_bit_fields(global_ns): bf_x = global_ns.variable('x') assert bf_x.bits == 1 bf_y = global_ns.variable('y') assert bf_y.bits == 7 mv_z = global_ns.variable('z') assert mv_z.bits is None pygccxml-3.0.2/tests/test_cache_enums.py000066400000000000000000000022541476564735400204170ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declarations_enums.hpp", ] def test_cache(): cache_file = os.path.join(autoconfig.data_directory, 'pygccxml.cache') if os.path.exists(cache_file) and os.path.isfile(cache_file): os.remove(cache_file) config = autoconfig.cxx_parsers_cfg.config.clone() cache = parser.file_cache_t(cache_file) reader = parser.source_reader_t(config, cache) decls1 = reader.read_file(TEST_FILES[0]) cache.flush() cache = parser.file_cache_t(cache_file) reader = parser.source_reader_t(config, cache) decls2 = reader.read_file(TEST_FILES[0]) enum_matcher = declarations.declaration_matcher_t( name="EColor", decl_type=declarations.enumeration_t ) color1 = declarations.matcher.get_single(enum_matcher, decls1) color2 = declarations.matcher.get_single(enum_matcher, decls2) assert color1.values == color2.values pygccxml-3.0.2/tests/test_cached_source_file.py000066400000000000000000000022271476564735400217330ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import stat from . import autoconfig from pygccxml import utils from pygccxml import parser TEST_FILES = [ "core_types.hpp", ] def test_cached_source_file(): config = autoconfig.cxx_parsers_cfg.config.clone() fconfig = parser.file_configuration_t( data=TEST_FILES[0], content_type=parser.CONTENT_TYPE.CACHED_SOURCE_FILE) try: prj_reader = parser.project_reader_t(config) prj_reader.read_files( [fconfig], compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) assert os.path.exists(fconfig.cached_source_file) mtime1 = os.stat(fconfig.cached_source_file)[stat.ST_MTIME] prj_reader.read_files( [fconfig], compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) mtime2 = os.stat(fconfig.cached_source_file)[stat.ST_MTIME] assert mtime1 == mtime2 finally: utils.remove_file_no_raise(fconfig.cached_source_file, config) pygccxml-3.0.2/tests/test_call_invocation.py000066400000000000000000000055621476564735400213160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import declarations def __test_split_impl(decl_string, name, args): assert (name, args) == \ declarations.call_invocation.split(decl_string) def __test_split_recursive_impl(decl_string, control_seq): assert control_seq == \ list(declarations.call_invocation.split_recursive(decl_string)) def __test_is_call_invocation_impl(decl_string): assert declarations.call_invocation.is_call_invocation(decl_string) def test_split_on_vector(): __test_is_call_invocation_impl("vector(int,std::allocator(int) )") __test_split_impl( "vector(int,std::allocator(int) )", "vector", ["int", "std::allocator(int)"]) __test_split_recursive_impl( "vector(int,std::allocator(int) )", [("vector", ["int", "std::allocator(int)"]), ("std::allocator", ["int"])]) def test_split_on_string(): __test_is_call_invocation_impl( "basic_string(char,std::char_traits(char),std::allocator(char) )") __test_split_impl( "basic_string(char,std::char_traits(char),std::allocator(char) )", "basic_string", ["char", "std::char_traits(char)", "std::allocator(char)"]) def test_split_on_map(): __test_is_call_invocation_impl( "map(long int,std::vector(int, std::allocator(int) )," + "std::less(long int),std::allocator(std::pair" + "(const long int, std::vector(int, std::allocator(int) ) ) ) )") __test_split_impl( "map(long int,std::vector(int, std::allocator(int) )," + "std::less(long int),std::allocator(std::pair" + "(const long int, std::vector(int, std::allocator(int) ) ) ) )", "map", ["long int", "std::vector(int, std::allocator(int) )", "std::less(long int)", "std::allocator(std::pair(const long int," + " std::vector(int, std::allocator(int) ) ) )"]) def test_join_on_vector(): assert "vector(int, std::allocator(int))" == \ declarations.call_invocation.join( "vector", ("int", "std::allocator(int)")) def test_find_args(): temp = 'x()()' found = declarations.call_invocation.find_args(temp) assert (1, 2) == found found = declarations.call_invocation.find_args(temp, found[1] + 1) assert (3, 4) == found temp = 'x(int,int)(1,2)' found = declarations.call_invocation.find_args(temp) assert (1, 9) == found found = declarations.call_invocation.find_args(temp, found[1] + 1) assert (10, 14) == found def test_bug_unmatched_brace(): src = 'AlternativeName((&string("")), (&string("")), (&string("")))' __test_split_impl( src, 'AlternativeName', [ '(&string(""))', '(&string(""))', '(&string(""))']) pygccxml-3.0.2/tests/test_calldef_matcher.py000066400000000000000000000015261476564735400212430ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declarations_calldef.hpp", ] @pytest.fixture def decls(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) return decls def test_calldef_matcher(decls): criteria = declarations.calldef_matcher_t( name='return_default_args', return_type='int', arg_types=[None, declarations.bool_t()]) rda = declarations.matcher.get_single(criteria, decls) assert rda is not None pygccxml-3.0.2/tests/test_calling_convention.py000066400000000000000000000012071476564735400220150ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import declarations def test_extract(): data = [ ('thiscall', '(public: __thiscall std::auto_ptr' + '::auto_ptr(class std::auto_ptr' + ' &))'), ('', "(const pof::number_t::`vftable')")] for expected, text in data: got = declarations.CALLING_CONVENTION_TYPES.extract(text) assert got == expected pygccxml-3.0.2/tests/test_castxml_wrong_epic.py000066400000000000000000000010531476564735400220300ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser def test_castxml_epic_version_check(): """ Test using a forbidden value for the castxml epic version. """ config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 2 with pytest.raises(RuntimeError): parser.parse_string("", config) pygccxml-3.0.2/tests/test_ccflags.py000066400000000000000000000025211476564735400175440ustar00rootroot00000000000000# Copyright 2014-2021 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "test_ccflags.hpp", ] COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE @pytest.fixture def config(): config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 config.append_cflags("-fopenmp") return config def test_ccflags(config): # First check that macro is not defined. decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) namespace_names = [ n.name for n in global_ns.namespaces(allow_empty=True) ] assert "ccflags_test_namespace" not in namespace_names # Next check that macro is defined when passed directly as ccflag if "clang++" in config.compiler_path: config.append_ccflags("-Xpreprocessor") config.append_ccflags("-fopenmp") decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) namespace_names = [n.name for n in global_ns.namespaces()] assert "ccflags_test_namespace" in namespace_names pygccxml-3.0.2/tests/test_comments.py000066400000000000000000000047461476564735400200020ustar00rootroot00000000000000# Copyright 2014-2020 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "test_comments.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def _check_comment_content(list, comment_decl): if comment_decl.text: assert list == comment_decl.text else: print("No text in comment to check") def test_comments(global_ns): """ Check the comment parsing """ tnamespace = global_ns.namespace("comment") assert "comment" in dir(tnamespace) _check_comment_content( [ "//! Namespace Comment", "//! Across multiple lines" ], tnamespace.comment ) tenumeration = tnamespace.enumeration("com_enum") assert "comment" in dir(tenumeration) _check_comment_content( ['/// Outside Class enum comment'], tenumeration.comment ) tclass = tnamespace.class_("test") assert "comment" in dir(tclass) _check_comment_content( ["/** class comment */"], tclass.comment ) tcls_enumeration = tclass.enumeration("test_enum") assert "comment" in dir(tcls_enumeration) _check_comment_content( ['/// inside class enum comment'], tcls_enumeration.comment ) tmethod = tclass.member_functions()[0] assert "comment" in dir(tmethod) _check_comment_content( ["/// cxx comment", "/// with multiple lines"], tmethod.comment ) tconstructor = tclass.constructors()[0] assert "comment" in dir(tconstructor) _check_comment_content( ["/** doc comment */"], tconstructor.comment ) for indx, cmt in enumerate( [ '//! mutable field comment', "/// bit field comment" ] ): tvariable = tclass.variables()[indx] assert "comment" in dir(tvariable) _check_comment_content([cmt], tvariable.comment) pygccxml-3.0.2/tests/test_complex_types.py000066400000000000000000000016301476564735400210350ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import declarations from pygccxml import parser TEST_FILES = [ "complex_types.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_complex_types(): """ This test tests presence of complex long double, float within FUNDAMENTAL_TYPES map """ pass # TODO: write test pygccxml-3.0.2/tests/test_config.py000066400000000000000000000033511476564735400174110ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from pygccxml import parser from pygccxml import utils def test_config(): """Test config setup with wrong xml generator setups.""" # Some code to parse for the example code = "int a;" # Find the location of the xml generator (castxml) generator_path, name = utils.find_xml_generator() # No xml generator path config = parser.xml_generator_configuration_t(xml_generator=name) with pytest.raises(RuntimeError): parser.parse_string(code, config) # Invalid path config = parser.xml_generator_configuration_t( xml_generator_path="wrong/path", xml_generator=name) with pytest.raises(RuntimeError): parser.parse_string(code, config) # None path config = parser.xml_generator_configuration_t( xml_generator_path=None, xml_generator=name) with pytest.raises(RuntimeError): parser.parse_string(code, config) # No name config = parser.xml_generator_configuration_t( xml_generator_path=generator_path) with pytest.raises(RuntimeError): parser.parse_string(code, config) # Random name config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator="not_a_generator") with pytest.raises(RuntimeError): parser.parse_string(code, config) # None name config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=None) with pytest.raises(RuntimeError): parser.parse_string(code, config) pygccxml-3.0.2/tests/test_const_volatile_arg.py000066400000000000000000000021071476564735400220200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "const_volatile_arg.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_const_volatile_arg(global_ns): f = global_ns.free_function('pygccxml_bug') t = f.arguments[0].decl_type assert isinstance(t, declarations.pointer_t) assert isinstance(t.base, declarations.volatile_t) assert isinstance(t.base.base, declarations.const_t) assert declarations.is_integral(t.base.base.base) pygccxml-3.0.2/tests/test_copy_constructor.py000066400000000000000000000033761476564735400215720ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "test_copy_constructor.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_copy_constructor(global_ns): """ Check the is_copy_constructor method. This fails when using CastXML, see issue #27. """ tclass = global_ns.class_("test") ctors = [] for decl in tclass.declarations: if isinstance(decl, declarations.constructor_t): ctors.append(decl) # test::test(test const & t0) [copy constructor] assert declarations.is_copy_constructor(ctors[0]) # test::test(float const & t0) [constructor] assert not declarations.is_copy_constructor(ctors[1]) # test::test(myvar t0) [constructor] assert not declarations.is_copy_constructor(ctors[2]) t2class = global_ns.class_("test2") ctors = [] for decl in t2class.declarations: if isinstance(decl, declarations.constructor_t): ctors.append(decl) # test2::test2() [constructor] assert not declarations.is_copy_constructor(ctors[0]) # test2::test2(test2 const & arg0) [copy constructor] assert declarations.is_copy_constructor(ctors[1]) pygccxml-3.0.2/tests/test_copy_constructor2.py000066400000000000000000000025751476564735400216540ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import bz2 from . import autoconfig from pygccxml import parser from pygccxml import declarations def test_copy_constructor2(): # Extract the xml file from the bz2 archive bz2_path = os.path.join( autoconfig.data_directory, 'ogre.1.7.xml.bz2') xml_path = os.path.join( autoconfig.data_directory, 'ogre.1.7.xml') with open(xml_path, 'wb') as new_file: # bz2.BZ2File can not be used in a with statement in python 2.6 bz2_file = bz2.BZ2File(bz2_path, 'rb') for data in iter(lambda: bz2_file.read(100 * 1024), b''): new_file.write(data) bz2_file.close() reader = parser.source_reader_t(autoconfig.cxx_parsers_cfg.config) global_ns = declarations.get_global_namespace( reader.read_xml_file(xml_path) ) global_ns.init_optimizer() for x in global_ns.typedefs('SettingsMultiMap'): assert declarations.is_noncopyable(x) is False for x in global_ns.typedefs('SettingsIterator'): assert declarations.is_noncopyable(x) is False for x in global_ns.typedefs('SectionIterator'): assert declarations.is_noncopyable(x) is False os.remove(xml_path) pygccxml-3.0.2/tests/test_core.py000066400000000000000000000467671476564735400171160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import utils from pygccxml import parser from pygccxml import declarations def is_sub_path(root, some_path): root = utils.normalize_path(root) some_path = utils.normalize_path(some_path) return some_path.startswith(root) TEST_FILES = [ "core_ns_join_1.hpp", "core_ns_join_2.hpp", "core_ns_join_3.hpp", "core_membership.hpp", "core_class_hierarchy.hpp", "core_types.hpp", "core_diamand_hierarchy_base.hpp", "core_diamand_hierarchy_derived1.hpp", "core_diamand_hierarchy_derived2.hpp", "core_diamand_hierarchy_final_derived.hpp", "core_overloads_1.hpp", "core_overloads_2.hpp", "abstract_classes.hpp", ] @pytest.fixture def global_ns_fixture_all_at_once1(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns @pytest.fixture def global_ns_fixture_all_at_once2(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = False config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns @pytest.fixture def global_ns_fixture_file_by_file1(): COMPILATION_MODE = parser.COMPILATION_MODE.FILE_BY_FILE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns @pytest.fixture def global_ns_fixture_file_by_file2(): COMPILATION_MODE = parser.COMPILATION_MODE.FILE_BY_FILE INIT_OPTIMIZER = False config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns @pytest.fixture def global_ns(request): return request.getfixturevalue(request.param) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_top_parent(global_ns): enum = global_ns.enumeration("::ns::ns32::E33") assert global_ns is enum.top_parent # tests namespaces join functionality. described in gccxml.py @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_nss_join(global_ns): # list of all namespaces nss = ["::ns", "::ns::ns12", "::ns::ns22", "::ns::ns32"] # list of all namespaces that have unnamed namespace # unnamed_nss = nss[1:] doing nothing with this list ? # list of all enums [0:2] [3:5] [6:8] - has same parent enums = [ "::E11", "::E21", "::E31", "::ns::E12", "::ns::E22", "::ns::E32", "::ns::ns12::E13", "::ns::ns22::E23", "::ns::ns32::E33", ] for ns in nss: global_ns.namespace(ns) for enum in enums: global_ns.enumeration(enum) ns = global_ns.namespace(nss[0]) ns12 = global_ns.namespace(nss[1]) ns22 = global_ns.namespace(nss[2]) ns32 = global_ns.namespace(nss[3]) assert ns is ns12.parent is ns22.parent is ns32.parent e11 = global_ns.enumeration(enums[0]) e21 = global_ns.enumeration(enums[1]) e31 = global_ns.enumeration(enums[2]) assert e11.parent is e21.parent is e31.parent nse12 = global_ns.enumeration(enums[3]) nse23 = global_ns.enumeration(enums[4]) nse33 = global_ns.enumeration(enums[5]) assert ns is nse12.parent is nse23.parent is nse33.parent def _test_ns_membership(ns, enum_name): unnamed_enum = ns.enumeration( lambda d: d.name == "" and is_sub_path(autoconfig.data_directory, d.location.file_name), recursive=False, ) assert unnamed_enum in ns.declarations enum = ns.enumeration(enum_name, recursive=False) assert enum in ns.declarations assert unnamed_enum.parent is ns assert enum.parent is ns def _test_class_membership(class_inst, enum_name, access): # getting enum through get_members function nested_enum1 = class_inst.enumeration( name=enum_name, function=declarations.access_type_matcher_t(access) ) # getting enum through declarations property nested_enum2 = class_inst.enumeration(enum_name) # it shoud be same object assert nested_enum1 is nested_enum2 # check whether we meaning same class instance assert class_inst is nested_enum1.parent is nested_enum2.parent @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) # test gccxml_file_reader_t._update_membership algorithm def test_membership(global_ns): core_membership = global_ns.namespace("membership") _test_ns_membership(global_ns, "EGlobal") _test_ns_membership(core_membership.namespace("enums_ns"), "EWithin") _test_ns_membership(core_membership.namespace(""), "EWithinUnnamed") class_nested_enums = core_membership.class_("class_for_nested_enums_t") _test_class_membership( class_nested_enums, "ENestedPublic", declarations.ACCESS_TYPES.PUBLIC ) _test_class_membership( class_nested_enums, "ENestedProtected", declarations.ACCESS_TYPES.PROTECTED ) _test_class_membership( class_nested_enums, "ENestedPrivate", declarations.ACCESS_TYPES.PRIVATE ) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_mangled_name_namespace(global_ns): std = global_ns.namespace("std") assert std is not None assert std.mangled is None @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_mangled_name_functions(global_ns): # This works with gccxml and castxml ns = global_ns.namespace("overloads") do_nothing = ns.calldefs("do_nothing", recursive=False) assert do_nothing.mangled is not None @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_mangled_name_variable(global_ns): # This works with gccxml and castxml var_inst = global_ns.variable("array255") assert var_inst.mangled is not None def _test_is_based_and_derived(base, derived, access): dhi_v = declarations.hierarchy_info_t(derived, access, True) dhi_not_v = declarations.hierarchy_info_t(derived, access, False) assert dhi_v in base.derived or dhi_not_v in base.derived bhi_v = declarations.hierarchy_info_t(base, access, True) bhi_not_v = declarations.hierarchy_info_t(base, access, False) assert bhi_v in derived.bases or bhi_not_v in derived.bases @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_class_hierarchy(global_ns): class_hierarchy = global_ns.namespace("class_hierarchy") base = class_hierarchy.class_("base_t") other_base = class_hierarchy.class_("other_base_t") derived_public = class_hierarchy.class_("derived_public_t") derived_protected = class_hierarchy.class_("derived_protected_t") derived_private = class_hierarchy.class_("derived_private_t") multi_derived = class_hierarchy.class_("multi_derived_t") _test_is_based_and_derived( base, derived_public, declarations.ACCESS_TYPES.PUBLIC ) _test_is_based_and_derived( base, derived_protected, declarations.ACCESS_TYPES.PROTECTED ) _test_is_based_and_derived( base, derived_private, declarations.ACCESS_TYPES.PRIVATE ) _test_is_based_and_derived( base, multi_derived, declarations.ACCESS_TYPES.PROTECTED ) _test_is_based_and_derived( other_base, multi_derived, declarations.ACCESS_TYPES.PRIVATE ) _test_is_based_and_derived( derived_private, multi_derived, declarations.ACCESS_TYPES.PRIVATE ) def _test_is_same_bases(derived1, derived2): bases1 = set( [id(hierarchy_info.related_class) for hierarchy_info in derived1.bases] ) bases2 = set( [id(hierarchy_info.related_class) for hierarchy_info in derived2.bases] ) assert bases1 == bases2 @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_class_join(global_ns): diamand_hierarchy = global_ns.namespace("diamand_hierarchy") base = diamand_hierarchy.class_("base_t") derived1 = diamand_hierarchy.class_("derived1_t") derived2 = diamand_hierarchy.class_("derived2_t") final_derived = diamand_hierarchy.class_("final_derived_t") _test_is_based_and_derived( base, derived1, declarations.ACCESS_TYPES.PUBLIC ) _test_is_based_and_derived( base, derived2, declarations.ACCESS_TYPES.PUBLIC ) _test_is_based_and_derived( derived1, final_derived, declarations.ACCESS_TYPES.PUBLIC ) _test_is_based_and_derived( derived2, final_derived, declarations.ACCESS_TYPES.PUBLIC ) _test_is_same_bases(derived1, derived2) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_fundamental_types(global_ns): # check whether all build in types could be constructed errors = [] for ( fundamental_type_name, fundamental_type, ) in declarations.FUNDAMENTAL_TYPES.items(): if "complex" in fundamental_type_name: continue # I check this in an other tester if isinstance( fundamental_type, (declarations.int128_t, declarations.uint128_t) ): continue # I don't have test case for this if isinstance(fundamental_type, declarations.java_fundamental_t): continue # I don't check this at all typedef_name = "typedef_" + fundamental_type_name.replace(" ", "_") typedef = global_ns.decl( decl_type=declarations.typedef_t, name=typedef_name ) assert typedef is not None if typedef.decl_type.decl_string != fundamental_type.decl_string: errors.append( "there is a difference between typedef base type " + "name('%s') and expected one('%s')" % (typedef.decl_type.decl_string, fundamental_type.decl_string) ) assert len(errors) == 0 @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_compound_types(global_ns, helpers): typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_const_int" ) helpers._test_type_composition( typedef_inst.decl_type, declarations.const_t, declarations.int_t ) typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_pointer_int" ) helpers._test_type_composition( typedef_inst.decl_type, declarations.pointer_t, declarations.int_t ) typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_reference_int" ) helpers._test_type_composition( typedef_inst.decl_type, declarations.reference_t, declarations.int_t ) typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_const_unsigned_int_const_pointer", ) helpers._test_type_composition( typedef_inst.decl_type, declarations.const_t, declarations.pointer_t ) helpers._test_type_composition( typedef_inst.decl_type.base, declarations.pointer_t, declarations.const_t ) helpers._test_type_composition( typedef_inst.decl_type.base.base, declarations.const_t, declarations.unsigned_int_t, ) typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_volatile_int" ) helpers._test_type_composition( typedef_inst.decl_type, declarations.volatile_t, declarations.int_t ) var_inst = global_ns.variable("array255") helpers._test_type_composition( var_inst.decl_type, declarations.array_t, declarations.int_t ) typedef_inst = global_ns.decl( decl_type=declarations.typedef_t, name="typedef_EFavoriteDrinks" ) assert isinstance(typedef_inst.decl_type, declarations.declarated_t) enum_declaration = global_ns.enumeration("EFavoriteDrinks") assert typedef_inst.decl_type.declaration is enum_declaration @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_free_function_type(global_ns, helpers): function_ptr = global_ns.decl( decl_type=declarations.typedef_t, name="function_ptr") helpers._test_type_composition( function_ptr.decl_type, declarations.pointer_t, declarations.free_function_type_t, ) function_type = function_ptr.decl_type.base assert isinstance(function_type.return_type, declarations.int_t) assert len(function_type.arguments_types) == 2 assert isinstance(function_type.arguments_types[0], declarations.int_t) assert isinstance(function_type.arguments_types[1], declarations.double_t) @pytest.mark.parametrize( "global_ns", ["global_ns_fixture_all_at_once1"], indirect=True ) def test_member_function_type(global_ns, helpers): function_ptr = global_ns.decl( decl_type=declarations.typedef_t, name="member_function_ptr_t" ) helpers._test_type_composition( function_ptr.decl_type, declarations.pointer_t, declarations.member_function_type_t, ) function_type = function_ptr.decl_type.base members_pointers = global_ns.class_("members_pointers_t") assert function_type.class_inst.declaration is members_pointers assert isinstance(function_type.return_type, declarations.int_t) assert len(function_type.arguments_types) == 1 assert isinstance(function_type.arguments_types[0], declarations.double_t) assert function_type.has_const is True @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_member_variable_type(global_ns, helpers): mv = global_ns.decl( decl_type=declarations.typedef_t, name="member_variable_ptr_t" ) helpers._test_type_composition( mv.decl_type, declarations.pointer_t, declarations.member_variable_type_t ) members_pointers = global_ns.class_("members_pointers_t") assert members_pointers is not None helpers._test_type_composition( mv.decl_type.base, declarations.member_variable_type_t, declarations.declarated_t, ) mv_type = mv.decl_type.base assert mv_type.base.declaration == members_pointers @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_overloading(global_ns): ns = global_ns.namespace("overloads") do_nothings = ns.calldefs("do_nothing", recursive=False) assert 4 == len(do_nothings) for index, do_nothing in enumerate(do_nothings): others = do_nothings[:index] + do_nothings[index + 1:] if set(do_nothing.overloads) != set(others): print("\nexisting: ") for x in do_nothing.overloads: print(str(x)) print("\nexpected: ") for x in others: print(str(x)) assert set(do_nothing.overloads) == set(others) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_abstract_classes(global_ns): ns = global_ns.namespace("abstract_classes") abstract_i = ns.class_("abstract_i") assert abstract_i.is_abstract is True derived_abstract_i = ns.class_("derived_abstract_i") assert derived_abstract_i.is_abstract is True implementation = ns.class_("implementation") assert implementation.is_abstract is not True @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_byte_size(global_ns): mptrs = global_ns.class_("members_pointers_t") assert mptrs.byte_size != 0 @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_byte_align(global_ns): mptrs = global_ns.class_("members_pointers_t") assert mptrs.byte_align != 0 @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once1", "global_ns_fixture_all_at_once2", "global_ns_fixture_file_by_file1", "global_ns_fixture_file_by_file2", ], indirect=True, ) def test_byte_offset(global_ns): mptrs = global_ns.class_("members_pointers_t") assert mptrs.variable("xxx").byte_offset != 0 pygccxml-3.0.2/tests/test_cpp_standards.py000066400000000000000000000031611476564735400207700ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import platform from . import autoconfig from pygccxml import parser def test_cpp_standards(): """ Test different compilation standards by setting cflags. """ config = autoconfig.cxx_parsers_cfg.config.clone() cflags_common = "" if platform.system() == "Darwin": cflags_common = " -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 parser.parse(["cpp_standards.hpp"], config) if platform.system() != 'Windows': config.cflags = "-std=c++98" + cflags_common parser.parse(["cpp_standards.hpp"], config) config.cflags = "-std=c++03" + cflags_common parser.parse(["cpp_standards.hpp"], config) config.cflags = "-std=c++11" + cflags_common parser.parse(["cpp_standards.hpp"], config) config.cflags = "-std=c++14" + cflags_common parser.parse(["cpp_standards.hpp"], config) config.cflags = "-std=c++1z" + cflags_common parser.parse(["cpp_standards.hpp"], config) # Pass down a flag that does not exist. # This should raise an exception. config.cflags = "-std=c++00" + cflags_common with pytest.raises(RuntimeError): parser.parse(["cpp_standards.hpp"], config) pygccxml-3.0.2/tests/test_create_decl_string.py000066400000000000000000000026171476564735400217700ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declaration_string.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_create_decl_string(global_ns): """ Test the create_decl_string method. """ myfunc = global_ns.free_function("myfunc") decl = declarations.free_function_type_t.create_decl_string( myfunc.return_type, myfunc.argument_types) assert decl != "('int (*)( int,int )', 'int (*)( int,int )')" box = global_ns.class_("Box") myinternfunc = box.member_function("myinternfunc") decl = declarations.member_function_type_t.create_decl_string( myinternfunc.return_type, box.decl_string, myinternfunc.argument_types, myinternfunc.has_const) assert decl != "short int ( ::Box::* )( ) " pygccxml-3.0.2/tests/test_decl_printer.py000066400000000000000000000030771476564735400206230ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import sys import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'core_ns_join_1.hpp', 'core_ns_join_2.hpp', 'core_ns_join_3.hpp', 'core_membership.hpp', 'core_class_hierarchy.hpp', 'core_types.hpp', 'core_diamand_hierarchy_base.hpp', 'core_diamand_hierarchy_derived1.hpp', 'core_diamand_hierarchy_derived2.hpp', 'core_diamand_hierarchy_final_derived.hpp', 'core_overloads_1.hpp', 'core_overloads_2.hpp', 'typedefs_base.hpp', ] @pytest.fixture def decls(): COMPILATION_MODE = parser.COMPILATION_MODE.FILE_BY_FILE config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) return decls def test_printer(decls): # Redirect sys.stdout to a class with a writer doing nothing # This greatly reduces the size of the test output and makes # test log files readable. # Note: flush needs to be defined; because if not this will # result in an AttributeError on call. class DontPrint(object): def write(*args): pass def flush(*args): pass sys.stdout = DontPrint() declarations.print_declarations(decls) def test__str__(decls): decls = declarations.make_flatten(decls) for decl in decls: str(decl) pygccxml-3.0.2/tests/test_decl_string.py000066400000000000000000000037401476564735400204430ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declarations_calldef.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns TEMPLATE = """ //test generated declaration string using gcc(xml) compiler #include "declarations_calldef.hpp" void test_generated_decl_string( %s ); """ def test_member_function(global_ns): config = autoconfig.cxx_parsers_cfg.config.clone() member_inline_call = \ global_ns.member_function('member_inline_call') decls = parser.parse_string( TEMPLATE % member_inline_call.decl_string, config) assert decls is not None def test_free_function(global_ns): config = autoconfig.cxx_parsers_cfg.config.clone() return_default_args = \ global_ns.free_function('return_default_args') decls = parser.parse_string( TEMPLATE % return_default_args.decl_string, config) assert decls is not None def test_all_mem_and_free_funs(global_ns): config = autoconfig.cxx_parsers_cfg.config.clone() ns = global_ns.namespace('::declarations::calldef') for f in ns.member_functions(): decls = parser.parse_string( TEMPLATE % f.decl_string, config) assert decls is not None for f in ns.free_functions(): decls = parser.parse_string( TEMPLATE % f.decl_string, config) assert decls is not None pygccxml-3.0.2/tests/test_declaration_files.py000066400000000000000000000022121476564735400216060ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'core_ns_join_1.hpp', 'core_ns_join_2.hpp', 'core_ns_join_3.hpp', 'core_membership.hpp', 'core_class_hierarchy.hpp', 'core_types.hpp', 'core_diamand_hierarchy_base.hpp', 'core_diamand_hierarchy_derived1.hpp', 'core_diamand_hierarchy_derived2.hpp', 'core_diamand_hierarchy_final_derived.hpp', 'core_overloads_1.hpp', 'core_overloads_2.hpp', 'typedefs_base.hpp', ] def test_declaration_files(): config = autoconfig.cxx_parsers_cfg.config.clone() prj_reader = parser.project_reader_t(config) decls = prj_reader.read_files( TEST_FILES, compilation_mode=parser.COMPILATION_MODE.ALL_AT_ONCE) files = declarations.declaration_files(decls) result = set() for fn in files: result.add(os.path.split(fn)[1]) assert set(TEST_FILES).issubset(result) is True pygccxml-3.0.2/tests/test_declaration_matcher.py000066400000000000000000000033211476564735400221310ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "classes.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_global(global_ns): global_ns.class_('cls') global_ns.class_('::cls') def test_typedefs(global_ns): global_ns.class_('cls2') global_ns.typedef('cls2') global_ns.class_('::cls2') global_ns.class_('cls3') global_ns.typedef('cls3') cls3 = global_ns.class_('::cls3') cls3.variable('i') def test_ns1(global_ns): ns1 = global_ns.namespace('ns') global_ns.class_('nested_cls') with pytest.raises(Exception): global_ns.class_('ns::nested_cls') global_ns.class_('::ns::nested_cls') with pytest.raises(Exception): ns1.class_('::nested_cls') ns1.class_('nested_cls') ns1.class_('::ns::nested_cls') global_ns.class_('nested_cls2') with pytest.raises(Exception): global_ns.class_('ns::nested_cls2') global_ns.class_('::ns::nested_cls2') global_ns.class_('nested_cls3') with pytest.raises(Exception): global_ns.class_('ns::nested_cls3') global_ns.class_('::ns::nested_cls3') pygccxml-3.0.2/tests/test_declarations.py000066400000000000000000000220221476564735400206100ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declarations_enums.hpp", "declarations_variables.hpp", "declarations_calldef.hpp", ] @pytest.fixture def global_ns_fixture_all_at_once(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) return global_ns @pytest.fixture def global_ns_fixture_file_by_file(): COMPILATION_MODE = parser.COMPILATION_MODE.FILE_BY_FILE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) return global_ns @pytest.fixture def global_ns(request): return request.getfixturevalue(request.param) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_enumeration_t(global_ns): enum = global_ns.enumeration("ENumbers") expected_values = list( zip( ["e%d" % index for index in range(10)], [index for index in range(10)] ) ) assert expected_values == enum.values def test_namespace(): pass # tested in core_tester def test_types(): pass # tested in core_tester @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_variables(global_ns, helpers): global_ns.namespace("variables") initialized = global_ns.variable(name="initialized") expected_value = "10122004" assert initialized.value == expected_value helpers._test_type_composition( initialized.decl_type, declarations.const_t, declarations.long_unsigned_int_t ) m_mutable = global_ns.variable(name="m_mutable") assert m_mutable.type_qualifiers.has_static is False assert m_mutable.type_qualifiers.has_mutable is True # External static variable extern_var = global_ns.variable(name="extern_var") assert extern_var.type_qualifiers.has_extern is True assert extern_var.type_qualifiers.has_static is False assert extern_var.type_qualifiers.has_mutable is False # Static variable static_var = global_ns.variable(name="static_var") assert static_var.type_qualifiers.has_static is True assert static_var.type_qualifiers.has_extern is False assert static_var.type_qualifiers.has_mutable is False ssv_static_var = global_ns.variable(name="ssv_static_var") assert ssv_static_var.type_qualifiers.has_static is True assert ssv_static_var.type_qualifiers.has_extern is False assert ssv_static_var.type_qualifiers.has_mutable is False ssv_static_var_value = global_ns.variable(name="ssv_static_var_value") assert ssv_static_var_value.type_qualifiers.has_static is True assert ssv_static_var_value.type_qualifiers.has_extern is False assert ssv_static_var_value.type_qualifiers.has_mutable is False @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_calldef_free_functions(global_ns, helpers): ns = global_ns.namespace("calldef") no_return_no_args = ns.free_function("no_return_no_args") helpers._test_calldef_return_type(no_return_no_args, declarations.void_t) assert no_return_no_args.has_extern is False # Static_call is explicetely defined as extern, this works with gccxml # and castxml. static_call = ns.free_function("static_call") assert static_call is not None return_no_args = ns.free_function("return_no_args") helpers._test_calldef_return_type(return_no_args, declarations.int_t) # from now there is no need to check return type. no_return_1_arg = ns.free_function(name="no_return_1_arg") assert no_return_1_arg is not None assert no_return_1_arg.arguments[0].name in ["arg", "arg0"] helpers._test_calldef_args( no_return_1_arg, [ declarations.argument_t( name=no_return_1_arg.arguments[0].name, decl_type=declarations.int_t() ) ], ) return_default_args = ns.free_function("return_default_args") assert return_default_args.arguments[0].name in ["arg", "arg0"] assert return_default_args.arguments[1].name in ["arg1", "flag"] helpers._test_calldef_args( return_default_args, [ declarations.argument_t( name=return_default_args.arguments[0].name, decl_type=declarations.int_t(), default_value="1", ), declarations.argument_t( name=return_default_args.arguments[1].name, decl_type=declarations.bool_t(), default_value="false", ), ], ) helpers._test_calldef_exceptions(global_ns, return_default_args, []) @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_calldef_member_functions(global_ns, helpers): struct_calldefs = global_ns.class_("calldefs_t") member_inline_call = struct_calldefs.member_function("member_inline_call") helpers._test_calldef_args( member_inline_call, [declarations.argument_t(name="i", decl_type=declarations.int_t())], ) member_const_call = struct_calldefs.member_function("member_const_call") assert member_const_call.has_const assert member_const_call.virtuality == \ declarations.VIRTUALITY_TYPES.NOT_VIRTUAL member_virtual_call = struct_calldefs.member_function( name="member_virtual_call" ) assert member_virtual_call.virtuality == \ declarations.VIRTUALITY_TYPES.VIRTUAL member_pure_virtual_call = struct_calldefs.member_function( "member_pure_virtual_call" ) assert ( member_pure_virtual_call.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL ) static_call = struct_calldefs.member_function("static_call") assert static_call.has_static is True @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_constructors_destructors(global_ns, helpers): struct_calldefs = global_ns.class_("calldefs_t") destructor = struct_calldefs.calldef("~calldefs_t") helpers._test_calldef_args(destructor, []) helpers._test_calldef_return_type(destructor, None.__class__) # well, now we have a few functions ( constructors ) with the same # name, there is no easy way to find the desired one. Well in my case # I have only 4 constructors # 1. from char # 2. from (int,double) # 3. default # 4. copy constructor constructor_found = struct_calldefs.constructors("calldefs_t") assert len(constructor_found) == 5 assert ( len( [ constructor for constructor in constructor_found if declarations.is_copy_constructor(constructor) ] ) == 1 ) # there is nothing to check about constructors - I know the # implementation of parser. # In this case it doesn't different from any other function c = struct_calldefs.constructor("calldefs_t", arg_types=["char"]) assert c.explicit is True arg_type = declarations.declarated_t(global_ns.class_("some_exception_t")) c = struct_calldefs.constructor("calldefs_t", arg_types=[arg_type]) assert c.explicit is False @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_operator_symbol(global_ns): calldefs_operators = ["=", "=="] calldefs_cast_operators = ["char *", "double"] struct_calldefs = global_ns.class_("calldefs_t") assert struct_calldefs is not None for decl in struct_calldefs.declarations: if not isinstance(decl, declarations.operator_t): continue if not isinstance(decl, declarations.casting_operator_t): assert decl.symbol in calldefs_operators else: assert decl.return_type.decl_string in calldefs_cast_operators @pytest.mark.parametrize( "global_ns", [ "global_ns_fixture_all_at_once", "global_ns_fixture_file_by_file", ], indirect=True, ) def test_ellipsis(global_ns): ns = global_ns.namespace("ellipsis_tester") do_smth = ns.member_function("do_smth") assert do_smth.has_ellipsis is True do_smth_else = ns.free_function("do_smth_else") assert do_smth_else.has_ellipsis is True pygccxml-3.0.2/tests/test_declarations_cache.py000066400000000000000000000121161476564735400217360ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import os.path from . import autoconfig from pygccxml.parser.config import xml_generator_configuration_t from pygccxml.parser import declarations_cache def test_file_signature(): file1 = os.path.join(autoconfig.data_directory, 'decl_cache_file1.txt') file1_dup = os.path.join( autoconfig.data_directory, 'decl_cache_file1_duplicate.txt') file2 = os.path.join(autoconfig.data_directory, 'decl_cache_file2.txt') sig1 = declarations_cache.file_signature(file1) sig1_dup = declarations_cache.file_signature(file1_dup) sig2 = declarations_cache.file_signature(file2) assert sig1 == sig1_dup assert sig1 != sig2 def test_config_signature(): diff_cfg_list = build_differing_cfg_list() def_cfg = diff_cfg_list[0] def_sig = declarations_cache.configuration_signature(def_cfg) # Test changes that should cause sig changes for cfg in diff_cfg_list[1:]: assert declarations_cache.configuration_signature(cfg) != def_sig # Test changes that should not cause sig changes no_changes = def_cfg.clone() assert declarations_cache.configuration_signature(no_changes) == def_sig ignore_changed = def_cfg.clone() ignore_changed.ignore_gccxml_output = True assert ( declarations_cache.configuration_signature(ignore_changed) == def_sig ) def test_cache_interface(): cache_file = os.path.join( autoconfig.build_directory, 'decl_cache_test.test_cache_read.cache') file1 = os.path.join(autoconfig.data_directory, 'decl_cache_file1.txt') file1_dup = os.path.join( autoconfig.data_directory, 'decl_cache_file1_duplicate.txt') file2 = os.path.join(autoconfig.data_directory, 'decl_cache_file2.txt') diff_cfg_list = build_differing_cfg_list() def_cfg = diff_cfg_list[0] if os.path.exists(cache_file): os.remove(cache_file) cache = declarations_cache.file_cache_t(cache_file) assert len(cache._file_cache_t__cache) == 0 # test creating new entries for differing files cache.update(file1, def_cfg, 1, []) assert len(cache._file_cache_t__cache) == 1 cache.update(file1_dup, def_cfg, 2, []) assert len(cache._file_cache_t__cache) == 1 cache.update(file2, def_cfg, 3, []) assert len(cache._file_cache_t__cache) == 2 assert cache.cached_value(file1, def_cfg) == 2 assert cache.cached_value(file2, def_cfg) == 3 # Test reading again cache.flush() cache = declarations_cache.file_cache_t(cache_file) assert len(cache._file_cache_t__cache) == 2 assert cache.cached_value(file1, def_cfg) == 2 assert cache.cached_value(file2, def_cfg) == 3 # Test flushing doesn't happen if we don't touch the cache cache = declarations_cache.file_cache_t(cache_file) assert cache.cached_value(file1, def_cfg) == 2 # Read from cache cache.flush() # should not actually flush cache = declarations_cache.file_cache_t(cache_file) assert len(cache._file_cache_t__cache) == 2 # Test flush culling cache = declarations_cache.file_cache_t(cache_file) cache.update(file1_dup, def_cfg, 4, []) # Modify cache cache.flush() # should cull off one entry cache = declarations_cache.file_cache_t(cache_file) assert len(cache._file_cache_t__cache) == 1 def build_differing_cfg_list(): """ Return a list of configurations that all differ. """ cfg_list = [] def_cfg = xml_generator_configuration_t( "xml_generator_path", '.', ['tmp'], ['sym'], ['unsym'], None, False, "") cfg_list.append(def_cfg) # Test changes that should cause sig changes gccxml_changed = def_cfg.clone() gccxml_changed.xml_generator_path = "other_path" cfg_list.append(gccxml_changed) wd_changed = def_cfg.clone() wd_changed.working_directory = "other_dir" cfg_list.append(wd_changed) # inc_changed = def_cfg.clone() # inc_changed.include_paths = ["/var/tmp"] # assert configuration_signature(inc_changed) != def_sig) inc_changed = xml_generator_configuration_t( "xml_generator_path", '.', ['/var/tmp'], ['sym'], ['unsym'], None, False, "") cfg_list.append(inc_changed) # def_changed = def_cfg.clone() # def_changed.define_symbols = ["symbol"] # assert configuration_signature(def_changed) != def_sig) def_changed = xml_generator_configuration_t( "xml_generator_path", '.', ['/var/tmp'], ['new-sym'], ['unsym'], None, False, "") cfg_list.append(def_changed) # undef_changed = def_cfg.clone() # undef_changed.undefine_symbols = ["symbol"] # assert configuration_signature(undef_changed) != def_sig) undef_changed = xml_generator_configuration_t( "xml_generator_path", '.', ['/var/tmp'], ['sym'], ['new-unsym'], None, False, "") cfg_list.append(undef_changed) cflags_changed = def_cfg.clone() cflags_changed.cflags = "new flags" cfg_list.append(cflags_changed) return cfg_list pygccxml-3.0.2/tests/test_declarations_comparison.py000066400000000000000000000042151476564735400230460ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import copy from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "declarations_comparison.hpp", ] def test_comparison_declaration_by_declaration(): config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 parsed = parser.parse(TEST_FILES, config) copied = copy.deepcopy(parsed) parsed = declarations.make_flatten(parsed) copied = declarations.make_flatten(copied) parsed.sort() copied.sort() failuers = [] for parsed_decl, copied_decl, index in \ zip(parsed, copied, list(range(len(copied)))): if parsed_decl != copied_decl: failuers.append( ("__lt__ and/or __qe__ does not working " + "properly in case of %s, %s, index %d") % (parsed_decl.__class__.__name__, copied_decl.__class__.__name__, index)) assert failuers == [] def test_comparison_from_reverse(): config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 parsed = parser.parse(TEST_FILES, config) copied = copy.deepcopy(parsed) parsed.sort() copied.reverse() copied.sort() x = parsed[4:6] x.sort() y = copied[4:6] y.sort() assert parsed == copied def test___lt__transitivnost(): ns_std = declarations.namespace_t(name='std') ns_global = declarations.namespace_t(name='::') ns_internal = declarations.namespace_t(name='ns') ns_internal.parent = ns_global ns_global.declarations.append(ns_internal) left2right = [ns_std, ns_global] right2left = [ns_global, ns_std] left2right.sort() right2left.sort() assert left2right == right2left def test_same_declarations_different_intances(): config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 parsed = parser.parse(TEST_FILES, config) copied = copy.deepcopy(parsed) assert parsed == copied pygccxml-3.0.2/tests/test_dependencies.py000066400000000000000000000126221476564735400205730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import warnings from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "include_all.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def test_variable(global_ns): ns_vars = global_ns.namespace('::declarations::variables') static_var = ns_vars.variable('static_var') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = static_var.i_depend_on_them() warnings.simplefilter("error", Warning) assert len(dependencies_old) == 1 assert dependencies_old[0].declaration is static_var assert dependencies_old[0].depend_on_it.decl_string == 'int' dependencies_new = declarations.get_dependencies_from_decl(static_var) assert len(dependencies_new) == 1 assert dependencies_new[0].declaration is static_var assert dependencies_new[0].depend_on_it.decl_string == 'int' m_mutable = ns_vars.variable('m_mutable') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = m_mutable.i_depend_on_them() warnings.simplefilter("error", Warning) assert len(dependencies_old) == 1 assert dependencies_old[0].declaration is m_mutable assert dependencies_old[0].depend_on_it.decl_string == 'int' dependencies_new = declarations.get_dependencies_from_decl(m_mutable) assert len(dependencies_new) == 1 assert dependencies_new[0].declaration is m_mutable assert dependencies_new[0].depend_on_it.decl_string == 'int' def test_class(global_ns): ns_vars = global_ns.namespace('::declarations::variables') cls = ns_vars.class_('struct_variables_t') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = cls.i_depend_on_them() warnings.simplefilter("error", Warning) dependencies_old = [ d for d in dependencies_old if not d.declaration.is_artificial] assert len(dependencies_old) == 1 dependencies_new = declarations.get_dependencies_from_decl(cls) dependencies_new = [ d for d in dependencies_new if not d.declaration.is_artificial] assert len(dependencies_new) == 1 m_mutable = ns_vars.variable('m_mutable') # Legacy way of fetching dependencies. Is still valid but deprecated dependencies_old = [ dependency for dependency in dependencies_old if dependency.declaration is m_mutable] assert len(dependencies_old) == 1 assert dependencies_old[0].depend_on_it.decl_string == 'int' assert dependencies_old[0].access_type == 'public' dependencies_new = [ dependency for dependency in dependencies_new if dependency.declaration is m_mutable] assert len(dependencies_new) == 1 assert dependencies_new[0].depend_on_it.decl_string == 'int' assert dependencies_new[0].access_type == 'public' ns_dh = global_ns.namespace('::core::diamand_hierarchy') fd_cls = ns_dh.class_('final_derived_t') derived1_cls = ns_dh.class_('derived1_t') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = declarations.get_dependencies_from_decl(fd_cls) warnings.simplefilter("error", Warning) dependencies_old = [ dependency for dependency in dependencies_old if dependency.depend_on_it is derived1_cls] assert len(dependencies_old) == 1 assert dependencies_old[0].depend_on_it is derived1_cls assert dependencies_old[0].access_type == 'public' dependencies_new = declarations.get_dependencies_from_decl(fd_cls) dependencies_new = [ dependency for dependency in dependencies_new if dependency.depend_on_it is derived1_cls] assert len(dependencies_new) == 1 assert dependencies_new[0].depend_on_it is derived1_cls assert dependencies_new[0].access_type == 'public' def test_calldefs(global_ns): ns = global_ns.namespace('::declarations::calldef') return_default_args = ns.calldef('return_default_args') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = return_default_args.i_depend_on_them() warnings.simplefilter("error", Warning) assert len(dependencies_old) == 3 used_types = [ dependency.depend_on_it.decl_string for dependency in dependencies_old] assert used_types == ['int', 'int', 'bool'] dependencies_new = declarations.get_dependencies_from_decl( return_default_args) assert len(dependencies_new) == 3 used_types = [ dependency.depend_on_it.decl_string for dependency in dependencies_new] assert used_types == ['int', 'int', 'bool'] def test_coverage(global_ns): declarations.get_dependencies_from_decl(global_ns) pygccxml-3.0.2/tests/test_deprecation.py000066400000000000000000000035311476564735400204410ustar00rootroot00000000000000# Copyright 2021 Insight Software Consortium. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "test_deprecation.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def _check_text_content(desired_text, deprecation_string): assert desired_text == deprecation_string def test_comment_deprecation(global_ns): """ Check the comment parsing """ tnamespace = global_ns.namespace("deprecation") tenumeration = tnamespace.enumeration("com_enum") assert "deprecation" in dir(tenumeration) _check_text_content( 'Enumeration is Deprecated', tenumeration.deprecation) tclass = tnamespace.class_("test") assert "deprecation" in dir(tclass) _check_text_content( "Test class Deprecated", tclass.deprecation) tmethod = tclass.member_functions()[0] tmethod_dep = tclass.member_functions()[1] assert "deprecation", dir(tmethod) assert tmethod.deprecation is None _check_text_content( "Function is deprecated", tmethod_dep.deprecation) tconstructor = tclass.constructors()[0] tconstructor_dep = tclass.constructors()[1] assert tconstructor.deprecation is None assert "deprecation" in dir(tconstructor_dep) _check_text_content( "One arg constructor is Deprecated", tconstructor_dep.deprecation) pygccxml-3.0.2/tests/test_directory_cache.py000066400000000000000000000041601476564735400212720ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import shutil import pytest from . import autoconfig from pygccxml import parser TEST_FILES = [ "typedefs1.hpp" ] CACHE_DIR = os.path.join(autoconfig.data_directory, "directory_cache_test") def set_up(): if os.path.isdir(CACHE_DIR): shutil.rmtree(CACHE_DIR) if os.path.isfile(CACHE_DIR): os.remove(CACHE_DIR) def test_directory_cache_without_compression(): """ Test the directory cache without compression """ config = autoconfig.cxx_parsers_cfg.config.clone() set_up() # Test with compression OFF cache = parser.directory_cache_t(directory=CACHE_DIR) # Generate a cache on first read parser.parse(TEST_FILES, config, cache=cache) # Read from the cache the second time parser.parse(TEST_FILES, config, cache=cache) def test_directory_cache_with_compression(): """ Test the directory cache wit compression """ config = autoconfig.cxx_parsers_cfg.config.clone() set_up() # Test with compression ON cache = parser.directory_cache_t( directory=CACHE_DIR, compression=True) # Generate a cache on first read parser.parse(TEST_FILES, config, cache=cache) # Read from the cache the second time parser.parse(TEST_FILES, config, cache=cache) def test_directory_cache_twice(): """ Setup two caches in a row. The second run will reload the same cache directory. """ config = autoconfig.cxx_parsers_cfg.config.clone() set_up() cache = parser.directory_cache_t(directory=CACHE_DIR) parser.parse(TEST_FILES, config, cache=cache) cache = parser.directory_cache_t(directory=CACHE_DIR) parser.parse(TEST_FILES, config, cache=cache) def test_directory_existing_dir(): """ Setup a cache when there is already a file at the cache's location. """ set_up() open(CACHE_DIR, "a").close() with pytest.raises(ValueError): parser.directory_cache_t(directory=CACHE_DIR) pygccxml-3.0.2/tests/test_dynamic_exception.py000066400000000000000000000042471476564735400216530ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import warnings from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "test_dynamic_exception.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() # This test does not work with c++17 and above # See https://developers.redhat.com/articles/2021/08/06/porting-your-code-c17-gcc-11#exception_specification_changes # noqa # This test is thus excpected to use -std=c++14 forever config.cflags = "-std=c++14" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_calldef_with_throw(global_ns, helpers): calldef_with_throw = global_ns.free_function("calldef_with_throw") assert calldef_with_throw is not None helpers._test_calldef_exceptions( global_ns, calldef_with_throw, ["some_exception_t", "other_exception_t"] ) calldef_with_throw = global_ns.calldef('calldef_with_throw') some_exception = global_ns.class_('some_exception_t') other_exception = global_ns.class_('other_exception_t') # Legacy way of fetching dependencies. Is still valid but deprecated warnings.simplefilter("ignore", Warning) dependencies_old = calldef_with_throw.i_depend_on_them() warnings.simplefilter("error", Warning) assert len(dependencies_old) == 3 dependencies_old = [ dependency for dependency in dependencies_old if dependency.depend_on_it in (some_exception, other_exception)] assert len(dependencies_old) == 2 dependencies_new = declarations.get_dependencies_from_decl( calldef_with_throw) assert len(dependencies_new) == 3 dependencies_new = [ dependency for dependency in dependencies_new if dependency.depend_on_it in (some_exception, other_exception)] assert len(dependencies_new) == 2 pygccxml-3.0.2/tests/test_elaborated_types.py000066400000000000000000000036221476564735400214730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['test_elaborated_types.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_is_elaborated_type(global_ns): """ Test for the is_elaborated function """ for specifier in ["class", "struct", "enum", "union"]: _test_impl_yes(specifier=specifier, global_ns=global_ns) _test_impl_no(specifier=specifier, global_ns=global_ns) _test_arg_impl(specifier=specifier, global_ns=global_ns) def _test_impl_yes(specifier, global_ns): yes = global_ns.namespace(name="::elaborated_t::yes_" + specifier) for decl in yes.declarations: assert declarations.is_elaborated(decl.decl_type) is True def _test_impl_no(specifier, global_ns): no = global_ns.namespace(name="::elaborated_t::no_" + specifier) for decl in no.declarations: assert declarations.is_elaborated(decl.decl_type) is False def _test_arg_impl(specifier, global_ns): decls = global_ns.namespace( name="::elaborated_t::arguments_" + specifier) for decl in decls.declarations: # The first argument is not elaborated no = decl.arguments[0].decl_type # The second argument is always elaborated yes = decl.arguments[1].decl_type assert declarations.is_elaborated(yes) is True assert declarations.is_elaborated(no) is False pygccxml-3.0.2/tests/test_example.py000066400000000000000000000021061476564735400175740ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import fnmatch import subprocess def test_example(): """Runs the example in the docs directory""" env = os.environ.copy() # Get the path to current directory path = os.path.dirname(os.path.realpath(__file__)) # Set the COVERAGE_PROCESS_START env. variable. # Allows to cover files run in a subprocess # http://nedbatchelder.com/code/coverage/subprocess.html env["COVERAGE_PROCESS_START"] = path + "/../.coveragerc" # Find all the examples files file_paths = [] for root, _, filenames in os.walk(path + "/../docs/examples"): for file_path in fnmatch.filter(filenames, '*.py'): file_paths.append(os.path.join(root, file_path)) for file_path in file_paths: return_code = subprocess.call( ["python", path + "/example_tester_wrap.py", file_path], env=env) assert return_code == 0 pygccxml-3.0.2/tests/test_file_cache.py000066400000000000000000000041271476564735400202100ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser TEST_FILE = os.path.join(autoconfig.data_directory, 'core_cache.hpp') cache_file = os.path.join( autoconfig.data_directory, 'pygccxml.cache') def reset_cache(): if os.path.exists(cache_file) and os.path.isfile(cache_file): os.remove(cache_file) def touch(): # Need to change file. with open(TEST_FILE, "a+") as header: header.write("//touch") def test_update_cache(): reset_cache() config = autoconfig.cxx_parsers_cfg.config.clone() # Save the content of the header file for later with open(TEST_FILE, "r") as old_header: content = old_header.read() declarations = parser.parse([TEST_FILE], config) cache = parser.file_cache_t(cache_file) cache.update( source_file=TEST_FILE, configuration=config, declarations=declarations, included_files=[]) assert declarations == cache.cached_value( TEST_FILE, config) touch() assert cache.cached_value(TEST_FILE, config) is None # We wrote a //touch in the header file. Just replace the file with the # original content. The touched file would be sometimes commited by # error as it was modified. with open(TEST_FILE, "w") as new_header: new_header.write(content) def test_cache_from_file(): reset_cache() config = autoconfig.cxx_parsers_cfg.config.clone() declarations = parser.parse([TEST_FILE], config) cache = parser.file_cache_t(cache_file) cache.update( source_file=TEST_FILE, configuration=config, declarations=declarations, included_files=[]) assert declarations == cache.cached_value( TEST_FILE, config) cache.flush() cache = parser.file_cache_t(cache_file) assert declarations == cache.cached_value( TEST_FILE, config) pygccxml-3.0.2/tests/test_filters_tester.py000066400000000000000000000050341476564735400212020ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['declarations_calldef.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_regex(global_ns): criteria = declarations.regex_matcher_t( 'oper.*', lambda decl: decl.name) operators = declarations.matcher.find(criteria, global_ns) operators = [d for d in operators if not d.is_artificial] assert len(operators) == 6 def test_access_type(global_ns): criteria = declarations.access_type_matcher_t( declarations.ACCESS_TYPES.PUBLIC) public_members = declarations.matcher.find(criteria, global_ns) public_members = [d for d in public_members if not d.is_artificial] nbr = len(public_members) assert nbr in [17, 21] if nbr == 21: # We are using llvm 3.9, see bug #32. Make sure the 4 names # are still there names = ["isa", "flags", "str", "length"] for name in names: assert names in [mbr.name for mbr in public_members] def test_or_matcher(global_ns): criteria1 = declarations.regex_matcher_t( "oper.*", lambda decl: decl.name) criteria2 = declarations.access_type_matcher_t( declarations.ACCESS_TYPES.PUBLIC) found = declarations.matcher.find( criteria1 | criteria2, global_ns) found = [d for d in found if not d.is_artificial] assert len(found) != 35 def test_and_matcher(global_ns): criteria1 = declarations.regex_matcher_t( 'oper.*', lambda decl: decl.name) criteria2 = declarations.access_type_matcher_t( declarations.ACCESS_TYPES.PUBLIC) found = declarations.matcher.find( criteria1 & criteria2, global_ns) found = [d for d in found if not d.is_artificial] assert len(found) <= 6 def test_not_matcher(global_ns): criteria1 = declarations.regex_matcher_t( 'oper.*', lambda decl: decl.name) found = declarations.matcher.find(~(~criteria1), global_ns) found = [d for d in found if not d.is_artificial] assert len(found) == 6 pygccxml-3.0.2/tests/test_find_container_traits.py000066400000000000000000000113731476564735400225170ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["remove_template_defaults.hpp", "indexing_suites2.hpp"] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def __cmp_traits(global_ns, typedef, expected, partial_name, key_type=None): if isinstance(typedef, str): typedef = global_ns.typedef(typedef) traits = declarations.find_container_traits(typedef) assert traits is not None assert traits == expected cls = declarations.remove_declarated(typedef) assert declarations.find_container_traits(cls) == expected assert cls.partial_name == partial_name cls = traits.class_declaration(cls) assert traits.element_type(typedef) is not None assert cls.cache.container_element_type is not None if key_type: assert traits.is_mapping(typedef) is not None real_key_type = traits.key_type(typedef) assert real_key_type.decl_string == key_type assert cls.cache.container_key_type is not None else: assert traits.is_sequence(typedef) def test_find_traits(global_ns): __cmp_traits( global_ns, "v_int", declarations.vector_traits, "vector" ) __cmp_traits( global_ns, "l_int", declarations.list_traits, "list" ) __cmp_traits( global_ns, "d_v_int", declarations.deque_traits, "deque>" ) __cmp_traits( global_ns, "q_int", declarations.queue_traits, "queue" ) __cmp_traits( global_ns, "pq_int", declarations.priority_queue_traits, "priority_queue" ) __cmp_traits( global_ns, "s_v_int", declarations.set_traits, "set>" ) __cmp_traits( global_ns, "ms_v_int", declarations.multiset_traits, "multiset>", ) __cmp_traits( global_ns, "m_i2d", declarations.map_traits, "map", "int" ) __cmp_traits( global_ns, "mm_i2d", declarations.multimap_traits, "multimap", "int", ) __cmp_traits( global_ns, "hs_v_int", declarations.unordered_set_traits, "unordered_set>", ) __cmp_traits( global_ns, "mhs_v_int", declarations.unordered_multiset_traits, "unordered_multiset>", ) __cmp_traits( global_ns, "hm_i2d", declarations.unordered_map_traits, "unordered_map", "int", ) __cmp_traits( global_ns, "hmm_i2d", declarations.unordered_multimap_traits, "unordered_multimap", "int", ) def test_multimap(global_ns): m = global_ns.class_(lambda decl: decl.name.startswith("multimap")) declarations.find_container_traits(m) assert m.partial_name == "multimap" def test_recursive_partial_name(global_ns): f1 = global_ns.free_function("f1") t1 = declarations.class_traits.get_declaration(f1.arguments[0].decl_type) assert "type>>" == t1.partial_name def test_remove_defaults_partial_name_namespace(global_ns): f2 = global_ns.free_function("f2") type_info = f2.return_type traits = declarations.find_container_traits(type_info) cls = traits.class_declaration(type_info) decl_string = cls.partial_decl_string key_type_string = traits.key_type(type_info).partial_decl_string assert decl_string.startswith("::std::") assert key_type_string.startswith("::std::") def test_from_ogre(): x = ( "map, " + "std::allocator>>" ) ct = declarations.find_container_traits(x) ct.remove_defaults(x) def test_infinite_loop(global_ns): rt = global_ns.free_function("test_infinite_loop").return_type map_traits = declarations.find_container_traits(rt) assert map_traits == declarations.map_traits elem = map_traits.element_type(rt) assert elem.decl_string == "int" pygccxml-3.0.2/tests/test_find_noncopyable_vars.py000066400000000000000000000022021476564735400225020ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['find_noncopyable_vars.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_find_noncopyable_vars(global_ns): """ Test the find_noncopyable_vars function """ # The ptr1 variable in the holder struct can be copied, # but not the ptr2 variable holder = global_ns.class_("holder") nc_vars = declarations.find_noncopyable_vars(holder) assert len(nc_vars) == 1 assert nc_vars[0].name == "ptr2" assert declarations.is_pointer(nc_vars[0].decl_type) is True assert declarations.is_const(nc_vars[0].decl_type) is True pygccxml-3.0.2/tests/test_free_operators.py000066400000000000000000000017731476564735400211710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['free_operators.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_free_operators(global_ns): fo = global_ns.namespace('free_operators') number = fo.class_('number') rational = fo.class_('rational') for oper in fo.free_operators(): if number.name in str(oper): assert number in oper.class_types if rational.name in str(oper): assert rational in oper.class_types pygccxml-3.0.2/tests/test_function_pointer.py000066400000000000000000000052141476564735400215310ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['test_function_pointer.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_function_pointer(global_ns): """ Test working with pointers and function pointers. """ # Test on a function pointer criteria = declarations.variable_matcher(name="func1") variables = declarations.matcher.find(criteria, global_ns) assert variables[0].name == "func1" assert isinstance(variables[0].decl_type, declarations.pointer_t) is True assert str(variables[0].decl_type) == "void (*)( int,double )" assert declarations.is_calldef_pointer(variables[0].decl_type) is True assert isinstance( declarations.remove_pointer(variables[0].decl_type), declarations.free_function_type_t ) is True # Get the function (free_function_type_t) and test the return and # argument types function = variables[0].decl_type.base assert isinstance(function.return_type, declarations.void_t) assert isinstance(function.arguments_types[0], declarations.int_t) assert isinstance(function.arguments_types[1], declarations.double_t) # Test on a normal pointer criteria = declarations.variable_matcher(name="myPointer") variables = declarations.matcher.find(criteria, global_ns) assert variables[0].name == "myPointer" assert isinstance(variables[0].decl_type, declarations.pointer_t) assert declarations.is_calldef_pointer(variables[0].decl_type) is False assert isinstance( declarations.remove_pointer(variables[0].decl_type), declarations.volatile_t ) is True # Test on function pointer in struct (x8) for d in global_ns.declarations: if d.name == "x8": assert isinstance(d.decl_type, declarations.pointer_t) is True assert declarations.is_calldef_pointer(d.decl_type) assert isinstance( declarations.remove_pointer(d.decl_type), declarations.member_function_type_t ) is True assert str(declarations.remove_pointer(d.decl_type)) == \ "void ( ::some_struct_t::* )( )" pygccxml-3.0.2/tests/test_function_traits.py000066400000000000000000000016511476564735400213600ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['covariant_returns.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_is_same_function(global_ns): d = global_ns.class_('better_algorithm_t') b = global_ns.class_('algorithm_t') df = d.member_function('f') bf = b.member_function('f') assert id(df) != id(bf) assert declarations.is_same_function(df, bf) is True pygccxml-3.0.2/tests/test_gccxml10184.py000066400000000000000000000012531476564735400200160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations code = \ """ class A { public: virtual ~A() = 0; unsigned int a : 1; unsigned int unused : 31; }; """ def test_gccxml_10184(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse_string(code, config) global_ns = declarations.get_global_namespace(decls) assert global_ns.variable('a').bits == 1 assert global_ns.variable('unused').bits == 31 pygccxml-3.0.2/tests/test_gccxml10185.py000066400000000000000000000022351476564735400200200ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations code = \ """ template struct A {}; template struct A { static int size(const char[N]) { return N - 1; } }; """ def test_partial_template(): """ The purpose of this test was to check if changes to GCCXML would lead to changes in the outputted xml file (Meaning the bug was fixed). GCCXML wrongly outputted partial template specialization. CastXML does not have this bug. In this case we check if the template specialization can not be found; which is the expected/wanted behaviour. https://github.com/CastXML/CastXML/issues/20 """ config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse_string(code, config) global_ns = declarations.get_global_namespace(decls) with pytest.raises(declarations.declaration_not_found_t): global_ns.class_('A') pygccxml-3.0.2/tests/test_has_binary_operator_traits.py000066400000000000000000000025271476564735400235700ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["has_public_binary_operator_traits.hpp"] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_yes_equal(global_ns): yes_ns = global_ns.namespace('yesequal') for typedef in yes_ns.typedefs(): assert declarations.has_public_equal(typedef) is True def test_no_equal(global_ns): no_ns = global_ns.namespace('noequal') for typedef in no_ns.typedefs(): assert declarations.has_public_equal(typedef) is False def test_yes_less(global_ns): yes_ns = global_ns.namespace('yesless') for typedef in yes_ns.typedefs(): assert declarations.has_public_less(typedef) def test_no_less(global_ns): no_ns = global_ns.namespace('noless') for typedef in no_ns.typedefs(): assert declarations.has_public_less(typedef) is False pygccxml-3.0.2/tests/test_hash.py000066400000000000000000000052511476564735400170700ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import inspect from pygccxml import declarations def test_types_hashes(): """ Test if all the type_t instances implement a hash method. The hash is part of the public API, as there are multiple tools that rely on it to compare type_t instances. The best way to test this is to instanciate dummy type_t objects for each class that subclasses type_t, and check that the hash of these objects is not None. """ members = inspect.getmembers(declarations, inspect.isclass) for member in members: member_type = member[1] is_type_t_subclass = issubclass(member_type, declarations.type_t) is_not_type_t = member_type != declarations.type_t if is_type_t_subclass and is_not_type_t: type_mockup = _create_type_t_mockup(member_type) assert hash(type_mockup) is not None def test_declarations_hashes(): """ Test if all the declaration_t instances implement a hash method. The hash is part of the public API, as there are multiple tools that rely on it to compare declaration_t instances. The best way to test this is to instanciate dummy declaration_t objects for each class that subclasses declaration_t, and check that the hash of these objects is not None. """ members = inspect.getmembers(declarations, inspect.isclass) for member in members: member_type = member[1] if issubclass(member_type, declarations.declaration_t): assert hash(member_type()) is not None def test_type_qualifiers_t_hash(): """ Test if the type_qualifiers_t instance implements a hash method. The hash is part of the public API, as there are multiple tools that rely on it to compare type_qualifiers_t instances. """ assert hash(declarations.type_qualifiers_t()) is not None def _create_type_t_mockup(member_type): nbr_parameters = len(inspect.signature(member_type).parameters) if nbr_parameters == 0: m = member_type() else: if member_type == declarations.array_t: m = member_type(_base_mockup(), size=1) else: m = member_type(_base_mockup()) m.cache.decl_string = "" return m class _base_mockup(declarations.type_t): def __init__(self): declarations.type_t.__init__(self) self.cache.decl_string = "" self._decl_string = "" self.variable_type = declarations.type_t() def build_decl_string(self, with_defaults=False): return self._decl_string pygccxml-3.0.2/tests/test_hierarchy_traveling.py000066400000000000000000000044111476564735400221730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations __code = os.linesep.join([ 'struct a{};', 'struct b{};', 'struct c{};', 'struct d : public a{};', 'struct e : public a, public b{};', 'struct f{};', 'struct g : public d, public f{};', 'struct h : public f{};', 'struct i : public h, public g{};']) __recursive_bases = { 'a': set(), 'b': set(), 'c': set(), 'd': {'a'}, 'e': {'a', 'b'}, 'f': set(), 'g': {'d', 'f', 'a'}, 'h': {'f'}, 'i': {'h', 'g', 'd', 'f', 'a'}} __recursive_derived = { 'a': {'d', 'e', 'g', 'i'}, 'b': {'e'}, 'c': set(), 'd': {'g', 'i'}, 'e': set(), 'f': {'g', 'h', 'i'}, 'g': {'i'}, 'h': {'i'}, 'i': set()} def test_recursive_bases(): config = autoconfig.cxx_parsers_cfg.config.clone() src_reader = parser.source_reader_t(config) decls = declarations.make_flatten(src_reader.read_string(__code)) classes = [ inst for inst in decls if isinstance(inst, declarations.class_t)] for class_ in classes: assert class_.name in __recursive_bases all_bases = class_.recursive_bases control_bases = __recursive_bases[class_.name] assert len(control_bases) == len(all_bases) all_bases_names = [hi.related_class.name for hi in all_bases] assert set(all_bases_names) == control_bases def test_recursive_derived(): config = autoconfig.cxx_parsers_cfg.config.clone() src_reader = parser.source_reader_t(config) decls = declarations.make_flatten(src_reader.read_string(__code)) classes = [ inst for inst in decls if isinstance( inst, declarations.class_t)] for class_ in classes: assert class_.name in __recursive_derived all_derived = class_.recursive_derived control_derived = __recursive_derived[class_.name] assert len(control_derived) == len(all_derived) all_derived_names = [hi.related_class.name for hi in all_derived] assert set(all_derived_names) == control_derived pygccxml-3.0.2/tests/test_inline_specifier.py000066400000000000000000000020271476564735400214520ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["inline_specifier.hpp"] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_inline_specifier(global_ns): inlined_funcs = global_ns.calldefs('inlined') assert len(inlined_funcs) != 0 for f in inlined_funcs: assert f.has_inline is True not_inlined_funcs = global_ns.calldefs('not_inlined') assert len(not_inlined_funcs) != 0 for f in not_inlined_funcs: assert f.has_inline is False pygccxml-3.0.2/tests/test_map_gcc5.py000066400000000000000000000033211476564735400176170ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import platform from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["test_map_gcc5.hpp"] def test_map_gcc5(): """ The code in test_map_gcc5.hpp was breaking pygccxml. Test that case (gcc5 + castxml + c++11). See issue #45 and #55 """ config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config) global_ns = declarations.get_global_namespace(decls) # This calldef is defined with gcc > 4.9 (maybe earlier, not tested) # and -std=c++11. Calling create_decl_string is failing with gcc. # With clang the calldef does not exist so the matcher # will just return an empty list, letting the test pass. # See the test_argument_without_name.py for an equivalent test, # which is not depending on the presence of the _M_clone_node # method in the stl_tree.h file. criteria = declarations.calldef_matcher(name="_M_clone_node") free_funcs = declarations.matcher.find(criteria, global_ns) for free_funcs in free_funcs: free_funcs.create_decl_string(with_defaults=False) pygccxml-3.0.2/tests/test_namespace_matcher.py000066400000000000000000000022741476564735400216060ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES1 = ["bit_fields.hpp"] TEST_FILES2 = ["unnamed_ns_bug.hpp"] def test_namespace_matcher_get_single(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES1, config) criteria = declarations.namespace_matcher_t(name='bit_fields') declarations.matcher.get_single(criteria, decls) assert str(criteria) == '(decl type==namespace_t) and (name==bit_fields)' def test_namespace_matcher_allow_empty(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES1, config) global_ns = declarations.get_global_namespace(decls) assert 0 == len(global_ns.namespaces('does not exist', allow_empty=True)) def test_namespace_matcher_upper(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES2, config) declarations.matcher.get_single( declarations.namespace_matcher_t(name='::'), decls) pygccxml-3.0.2/tests/test_non_copyable_classes.py000066400000000000000000000031761476564735400223360ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["non_copyable_classes.hpp"] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test(global_ns): """ Search for classes which can not be copied. See bug #13 1) non copyable class 2) non copyable const variable (fundamental type) 3) non copyable const variable (class type) 4) non copyable const variable (array type) 5) non copyable const variable (class type) """ main_foo_1 = global_ns.class_('MainFoo1') assert declarations.is_noncopyable(main_foo_1) is True main_foo_2 = global_ns.class_('MainFoo2') assert declarations.is_noncopyable(main_foo_2) is True main_foo_3 = global_ns.class_('MainFoo3') assert declarations.is_noncopyable(main_foo_3) is True main_foo_4 = global_ns.class_('MainFoo4') assert declarations.is_noncopyable(main_foo_4) is True main_foo_5 = global_ns.class_('MainFoo5') assert declarations.is_noncopyable(main_foo_5) is True main_foo_6 = global_ns.class_('MainFoo6') assert declarations.is_noncopyable(main_foo_6) is False pygccxml-3.0.2/tests/test_non_copyable_recursive.py000066400000000000000000000042711476564735400227050ustar00rootroot00000000000000# Copyright 2014-2016 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ["test_non_copyable_recursive.hpp"] def test_infinite_recursion_base_classes(): """ Test find_noncopyable_vars See #71 find_noncopyable_vars was throwing: RuntimeError: maximum recursion depth exceeded while calling a Python object """ config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config) global_ns = declarations.get_global_namespace(decls) # Description of the problem (before the fix): # find_noncopyable_vars (on Child class) looks up the variables, # and finds aBasePtr2 (a pointer to the Base2 class). # Then it looks recursively at the base classes of Base2, and finds # Base1. Then, it looks up the variables from Base, to check if Base1 # is non copyable. It finds another aBasePtr2 variable, which leads to # a new check of Base2; this recurses infinitely. test_ns = global_ns.namespace('Test1') cls = test_ns.class_('Child') declarations.type_traits_classes.find_noncopyable_vars(cls) assert declarations.type_traits_classes.is_noncopyable(cls) is True def test_infinite_recursion_sstream(): """ Test find_noncopyable_vars See #71 find_noncopyable_vars was throwing: RuntimeError: maximum recursion depth exceeded while calling a Python object """ config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config) global_ns = declarations.get_global_namespace(decls) # Real life example of the bug. This leads to a similar error, # but the situation is more complex as there are multiple # classes that are related the one to the others # (basic_istream, basic_ios, ios_base, ...) test_ns = global_ns.namespace('Test2') cls = test_ns.class_('FileStreamDataStream') declarations.type_traits_classes.find_noncopyable_vars(cls) assert declarations.type_traits_classes.is_noncopyable(cls) is False pygccxml-3.0.2/tests/test_null_comparison.py000066400000000000000000000015241476564735400213500ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "null_comparison.hpp", ] def test_argument_null_comparison(): """ Test for None comparisons with default arguments """ config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config) global_ns = declarations.get_global_namespace(decls) ns = global_ns.namespace("ns") func = ns.free_function(name="TestFunction1") assert (func.arguments[0] > func.arguments[1]) is False func = ns.free_function(name="TestFunction2") assert (func.arguments[0] > func.arguments[1]) is False pygccxml-3.0.2/tests/test_order.py000066400000000000000000000056631476564735400172670ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = ['test_order.hpp'] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_order(global_ns): """ Test order of const, volatile, etc... in decl_string. The convention in pygccxml is that const and volatile qualifiers are placed on the right of their `base` type. """ c1 = global_ns.variable("c1") c2 = global_ns.variable("c2") assert c1.decl_type.decl_string == "int const" assert c2.decl_type.decl_string == "int const" cptr1 = global_ns.variable("cptr1") cptr2 = global_ns.variable("cptr2") assert cptr1.decl_type.decl_string == "int const * const" assert cptr2.decl_type.decl_string == "int const * const" v1 = global_ns.variable("v1") v2 = global_ns.variable("v2") assert v1.decl_type.decl_string == "int volatile" assert v2.decl_type.decl_string == "int volatile" vptr1 = global_ns.variable("vptr1") vptr2 = global_ns.variable("vptr2") decl_string = "int volatile * volatile" assert vptr1.decl_type.decl_string == decl_string assert vptr2.decl_type.decl_string == decl_string cv1 = global_ns.variable("cv1") cv2 = global_ns.variable("cv2") cv3 = global_ns.variable("cv3") cv4 = global_ns.variable("cv4") assert cv1.decl_type.decl_string == "int const volatile" assert cv2.decl_type.decl_string == "int const volatile" assert cv3.decl_type.decl_string == "int const volatile" assert cv4.decl_type.decl_string == "int const volatile" cvptr1 = global_ns.variable("cvptr1") cvptr2 = global_ns.variable("cvptr2") cvptr3 = global_ns.variable("cvptr3") cvptr4 = global_ns.variable("cvptr4") decl_string = "int const volatile * const volatile" assert cvptr1.decl_type.decl_string == decl_string assert cvptr2.decl_type.decl_string == decl_string assert cvptr3.decl_type.decl_string == decl_string assert cvptr4.decl_type.decl_string == decl_string ac1 = global_ns.variable("ac1") ac2 = global_ns.variable("ac2") assert ac1.decl_type.decl_string, "int const [2]" assert ac2.decl_type.decl_string, "int const [2]" acptr1 = global_ns.variable("acptr1") acptr2 = global_ns.variable("acptr2") assert acptr1.decl_type.decl_string == "int const * const [2]" assert acptr2.decl_type.decl_string == "int const * const [2]" class_a = global_ns.variable("classA") assert class_a.decl_type.decl_string == "::A const" pygccxml-3.0.2/tests/test_overrides.py000066400000000000000000000030631476564735400201460ustar00rootroot00000000000000# Copyright 2014-2020 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import platform from . import autoconfig from pygccxml import parser from pygccxml import declarations @pytest.fixture def global_ns_fixture(): config = autoconfig.cxx_parsers_cfg.config.clone() config.castxml_epic_version = 1 if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(["test_overrides.hpp"], config) global_ns = declarations.get_global_namespace(decls) return global_ns def test_overrides(global_ns_fixture): """ Check that the override information is populated for the simple::goodbye function. It should contain the decl for the base::goodbye function. Base::goodbye has no override so it will be none """ base = global_ns_fixture.class_("base").member_function("goodbye") override_decl = global_ns_fixture.class_("simple")\ .member_function("goodbye") assert base.overrides is None assert override_decl.overrides is not None assert override_decl.overrides == base pygccxml-3.0.2/tests/test_parser_raise.py000066400000000000000000000007401476564735400206220ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import pytest from . import autoconfig from pygccxml import parser def test_raise(): config = autoconfig.cxx_parsers_cfg.config.clone() content = "abra cadabra " + os.linesep with pytest.raises(RuntimeError) as _: parser.parse_string(content, config) pygccxml-3.0.2/tests/test_patcher.py000066400000000000000000000123231476564735400175710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import declarations from pygccxml import parser from pygccxml import utils TEST_FILES = [ "patcher.hpp", ] config = autoconfig.cxx_parsers_cfg.config.clone() project_reader = parser.project_reader_t(config=config, cache=None) decls = project_reader.read_files( TEST_FILES, parser.COMPILATION_MODE.ALL_AT_ONCE ) config.xml_generator_from_xml_file = project_reader.xml_generator_from_xml_file config.__cxx_std = utils.cxx_standard(config.cflags) @pytest.fixture def global_ns(): global_ns = declarations.get_global_namespace(decls) return global_ns def test_enum_patcher(global_ns): fix_enum = global_ns.free_function("fix_enum") default_val = fix_enum.arguments[0].default_value if config.__cxx_std.is_cxx11_or_greater: val = "::ns1::ns2::fruit::apple" else: val = "::ns1::ns2::apple" assert default_val == val fix_enum2 = global_ns.free_function("fix_enum2") default_val = fix_enum2.arguments[0].default_value assert default_val == val ns1 = global_ns.namespace("ns1") ns2 = ns1.namespace("ns2") fix_enum2 = ns2.free_function("fix_enum2") default_val = fix_enum2.arguments[0].default_value assert default_val == val fix_enum3 = global_ns.free_function("fix_enum3") default_val = fix_enum3.arguments[0].default_value val = val.replace("apple", "orange") assert default_val == val if config.__cxx_std.is_cxx11_or_greater: fix_enum4 = global_ns.free_function("fix_enum4") default_val = fix_enum4.arguments[0].default_value assert default_val == "::ns4::color::blue" fix_enum5 = global_ns.free_function("fix_enum5") default_val = fix_enum5.arguments[0].default_value assert default_val == "::ns4::color::blue" lpe = global_ns.free_function("log_priority_enabled") default_val = lpe.arguments[0].default_value if config.__cxx_std.is_cxx11_or_greater: val = "(long int)" + \ "(::ACE_Log_Priority_Index::LM_INVALID_BIT_INDEX)" else: val = "(long int)(::LM_INVALID_BIT_INDEX)" assert default_val == val def test_numeric_patcher(global_ns): fix_numeric = global_ns.free_function("fix_numeric") generator = config.xml_generator_from_xml_file if generator.is_castxml1 or \ float(generator.xml_output_version) >= 1.137: val = "(unsigned long long)-1" else: val = "(ull)-1" assert fix_numeric.arguments[0].default_value == val def test_unqualified_integral_patcher(global_ns): # For this check to be removed, patcher_tester_64bit.xml # will need to be updated for CastXML return ns1 = global_ns.namespace("ns1") st1 = ns1.class_("st1") fun1 = st1.member_function("fun1") output_verion = xml_generator_from_xml_file.xml_output_version if xml_generator_from_xml_file.is_castxml1 or \ float(output_verion) >= 1.137: val1 = "ns1::DEFAULT_1" val2 = "ns1::st1::DEFAULT_2" else: val1 = "::ns1::DEFAULT_1" val2 = "::ns1::st1::DEFAULT_2" assertEqual( fun1.arguments[0].default_value, val1) assertEqual( fun1.arguments[1].default_value, val2) fun2 = global_ns.free_function("fun2") assertEqual( fun2.arguments[0].default_value, "::DEFAULT_1") output_verion = xml_generator_from_xml_file.xml_output_version if xml_generator_from_xml_file.is_castxml1 or \ float(output_verion) >= 1.137: val1 = "ns1::DEFAULT_1" val2 = "ns1::st1::DEFAULT_2" else: # Before XML output version 1.137, the following two # were unpatched and were identical to the text in # matcher.hpp val1 = "ns1::DEFAULT_1" val2 = "::ns1::st1::DEFAULT_2" assertEqual( fun2.arguments[1].default_value, val1) assertEqual( fun2.arguments[2].default_value, val2) def test_unnamed_enum_patcher(global_ns): fix_unnamed = global_ns.free_function("fix_unnamed") assert fix_unnamed.arguments[0].default_value == "int(::fx::unnamed)" def test_function_call_patcher(global_ns): fix_function_call = global_ns.free_function("fix_function_call") default_val = fix_function_call.arguments[0].default_value output_verion = config.xml_generator_from_xml_file.xml_output_version if config.xml_generator_from_xml_file.is_castxml1 or \ float(output_verion) >= 1.137: val = "function_call::calc(1, 2, 3)" else: val = "calc(1, 2, 3)" assert default_val == val def test_fundamental_patcher(global_ns): fcall = global_ns.free_function("fix_fundamental") if config.__cxx_std.is_cxx11_or_greater: val = "(unsigned int)(::fundamental::spam::eggs)" else: val = "(unsigned int)(::fundamental::eggs)" assert fcall.arguments[0].default_value == val def test_constructor_patcher(global_ns): typedef__func = global_ns.free_function("typedef__func") default_val = typedef__func.arguments[0].default_value val = "typedef_::alias()" assert default_val == val pygccxml-3.0.2/tests/test_pattern_parser.py000066400000000000000000000132201476564735400211710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import platform from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'test_pattern_parser.hpp' ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_template_split_std_vector(global_ns): """ Demonstrate error in pattern parser, see #60 """ config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config) for decl in declarations.make_flatten(decls): if "myClass" in decl.name: _ = decl.partial_name def test_matcher(global_ns): """ Run the matcher on all the templated classes. This exercises the whole pipeline even more. """ criteria = declarations.declaration_matcher(name="myClass") _ = declarations.matcher.find(criteria, global_ns) def test_split(): """ Test a bunch of tricky name/args splits. More combinations could be tested but this is already covering most of the cases. In test_template_split_std_vector we test for a specific case that was failing (in a real world scenario). Here we test more possible combinations to make sure the splitting method is robust enough. """ p1 = "std::vector >" p2 = "std::vector >" args_list = [ "const std::basic_string &", "const int &", "const double &"] for arg in args_list: li = [p1] name, args = declarations.templates.split( "myClass0a<" + ", ".join(li) + ">") assert name == "myClass0a" assert args == li li = [p1, p2] name, args = declarations.templates.split( "myClass0b<" + ", ".join(li) + ">") assert name == "myClass0b" assert args == li li = [p1, p2, p2] name, args = declarations.templates.split( "myClass0c<" + ", ".join(li) + ">") assert name == "myClass0c" assert args == li li = [p1 + " (" + arg + ")"] name, args = declarations.templates.split( "myClass1<" + ", ".join(li) + ">") assert name == "myClass1" assert args == li li = [p1 + " (" + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass2<" + ", ".join(li) + ">") assert name == "myClass2" assert args == li li = [p2 + " (" + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass3<" + ", ".join(li) + ">") assert name == "myClass3" assert args == li li = [p1 + " (" + arg + ", " + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass4<" + ", ".join(li) + ">") assert name == "myClass4" assert args == li li = [ p1 + " (" + arg + ", " + arg + ", " + arg + ")", p1] name, args = declarations.templates.split( "myClass5<" + ", ".join(li) + ">") assert name == "myClass5" assert args == li li = [ p1, p1 + " (" + arg + ", " + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass6<" + ", ".join(li) + ">") assert name == "myClass6" assert args == li li = [ p2 + " (" + arg + ")", p1, p1 + " (" + arg + ", " + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass7<" + ", ".join(li) + ">") assert name == "myClass7" assert args == li li = [ p1, p2 + " (" + arg + ")", p1 + " (" + arg + ", " + arg + ", " + arg + ")"] name, args = declarations.templates.split( "myClass8<" + ", ".join(li) + ">") assert name == "myClass8" assert args == li li = [ p2 + " (" + arg + ")", p1 + " (" + arg + ", " + arg + ")", p1] name, args = declarations.templates.split( "myClass9<" + ", ".join(li) + ">") assert name == "myClass9" assert args == li li = [ p2 + " (" + arg + ")", p1 + " (" + arg + ", " + arg + ", " + arg + ")", p1, p2] name, args = declarations.templates.split( "myClass10<" + ", ".join(li) + ">") assert name == "myClass10" assert args == li pygccxml-3.0.2/tests/test_plain_c.py000066400000000000000000000015741476564735400175560ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'plain_c.c' ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_plain_c(global_ns): global_ns.free_function('hello_sum') global_ns.free_function('hello_print') f = global_ns.free_function('do_smth') for arg in f.arguments: assert arg.decl_type.decl_string is not None pygccxml-3.0.2/tests/test_project_reader_correctness.py000066400000000000000000000051121476564735400235430ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES1 = [ 'core_types.hpp', 'core_ns_join_1.hpp', 'core_ns_join_2.hpp', 'core_ns_join_3.hpp', 'core_membership.hpp', 'core_class_hierarchy.hpp', 'core_diamand_hierarchy_base.hpp', 'core_diamand_hierarchy_derived1.hpp', 'core_diamand_hierarchy_derived2.hpp', 'core_diamand_hierarchy_final_derived.hpp', 'core_overloads_1.hpp', 'core_overloads_2.hpp' ] TEST_FILES2 = [ 'separate_compilation/data.h', 'separate_compilation/base.h', 'separate_compilation/derived.h' ] def test_correctness(): for src in TEST_FILES1: __test_correctness_impl(src) def __test_correctness_impl(file_name): config = autoconfig.cxx_parsers_cfg.config.clone() prj_reader = parser.project_reader_t(config) prj_decls = prj_reader.read_files( [file_name] * 2, compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) src_reader = parser.source_reader_t(config) src_decls = src_reader.read_file(file_name) if src_decls != prj_decls: s = src_decls[0] p = prj_decls[0] bdir = autoconfig.build_directory with open(os.path.join(bdir, file_name + '.sr.txt'), 'w+') as sr: with open( os.path.join(bdir, file_name + '.pr.txt'), 'w+') as pr: declarations.print_declarations( s, writer=lambda x: sr.write(l + os.linesep)) declarations.print_declarations( p, writer=lambda x: pr.write(l + os.linesep)) raise ( f"There is a difference between declarations in file {file_name}." ) def test_separate_compilation(): config = autoconfig.cxx_parsers_cfg.config.clone() prj_reader = parser.project_reader_t(config) prj_decls = prj_reader.read_files( TEST_FILES2, compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) src_reader = parser.source_reader_t(config) src_decls = src_reader.read_file('separate_compilation/all.h') declarations.dump_declarations( src_decls, os.path.join( autoconfig.build_directory, 'separate_compilation.sr.txt')) declarations.dump_declarations( prj_decls, os.path.join( autoconfig.build_directory, 'separate_compilation.pr.txt')) assert src_decls == prj_decls pygccxml-3.0.2/tests/test_remove_template_defaults.py000066400000000000000000000151311476564735400232220ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import platform import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations from pygccxml import utils TEST_FILES = [ 'remove_template_defaults.hpp' ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_vector(global_ns): v_int = global_ns.typedef('v_int') v_traits = declarations.vector_traits assert 'vector' == v_traits.remove_defaults(v_int) v_string = global_ns.typedef('v_string') assert 'vector' == \ v_traits.remove_defaults(v_string) v_v_int = global_ns.typedef('v_v_int') assert 'vector>' == \ v_traits.remove_defaults(v_v_int) def test_list(global_ns): l_int = global_ns.typedef('l_int') l_traits = declarations.list_traits assert 'list' == l_traits.remove_defaults(l_int) l_wstring = global_ns.typedef('l_wstring') assert 'list' == l_traits.remove_defaults(l_wstring) def test_deque(global_ns): d_v_int = global_ns.typedef('d_v_int') d_v_traits = declarations.deque_traits assert 'deque>' == \ d_v_traits.remove_defaults(d_v_int) d_l_string = global_ns.typedef('d_l_string') assert 'deque>' == \ d_v_traits.remove_defaults(d_l_string) def test_queue(global_ns): q_int = global_ns.typedef('q_int') q_traits = declarations.queue_traits assert 'queue' == q_traits.remove_defaults(q_int) q_string = global_ns.typedef('q_string') assert 'queue' == q_traits.remove_defaults(q_string) def test_priority_queue(global_ns): pq_int = global_ns.typedef('pq_int') pq_traits = declarations.priority_queue_traits assert 'priority_queue' == pq_traits.remove_defaults(pq_int) pq_string = global_ns.typedef('pq_string') assert 'priority_queue' == \ pq_traits.remove_defaults(pq_string) def test_set(global_ns): s_v_int = global_ns.typedef('s_v_int') assert 'set>' == \ declarations.set_traits.remove_defaults(s_v_int) s_string = global_ns.typedef('s_string') assert 'set' == \ declarations.set_traits.remove_defaults(s_string) def test_multiset(global_ns): ms_v_int = global_ns.typedef('ms_v_int') ms_v_traits = declarations.multiset_traits assert 'multiset>' == \ ms_v_traits.remove_defaults(ms_v_int) ms_string = global_ns.typedef('ms_string') assert 'multiset' == \ ms_v_traits.remove_defaults(ms_string) def test_map(global_ns): m_i2d = global_ns.typedef('m_i2d') assert 'map' == \ declarations.map_traits.remove_defaults(m_i2d) m_wstr2d = global_ns.typedef('m_wstr2d') assert 'map' == \ declarations.map_traits.remove_defaults(m_wstr2d) m_v_i2m_wstr2d = global_ns.typedef('m_v_i2m_wstr2d') m = 'map, std::map>' assert m == declarations.map_traits.remove_defaults(m_v_i2m_wstr2d) def test_multimap(global_ns): mm_i2d = global_ns.typedef('mm_i2d') mm_traits = declarations.multimap_traits assert 'multimap' == mm_traits.remove_defaults(mm_i2d) mm_wstr2d = global_ns.typedef('mm_wstr2d') assert 'multimap' == \ mm_traits.remove_defaults(mm_wstr2d) mm_v_i2mm_wstr2d = global_ns.typedef('mm_v_i2mm_wstr2d') assert ('multimap, ' + 'const std::multimap>') == \ mm_traits.remove_defaults(mm_v_i2mm_wstr2d) def test_hash_set(global_ns): hs_v_int = global_ns.typedef('hs_v_int') hs_traits = declarations.unordered_set_traits name = 'unordered_set' assert (name + '>') == \ hs_traits.remove_defaults(hs_v_int), \ hs_traits.remove_defaults(hs_v_int) hs_string = global_ns.typedef('hs_string') assert (name + '') == \ hs_traits.remove_defaults(hs_string) def test_hash_multiset(global_ns): mhs_v_int = global_ns.typedef('mhs_v_int') mhs_traits = declarations.unordered_multiset_traits name = 'unordered_multiset' assert (name + '>') == \ mhs_traits.remove_defaults(mhs_v_int) mhs_string = global_ns.typedef('mhs_string') assert (name + '') == \ mhs_traits.remove_defaults(mhs_string) def test_hash_map(global_ns): hm_i2d = global_ns.typedef('hm_i2d') hm_traits = declarations.unordered_map_traits name = 'unordered_map' assert (name + '') == \ hm_traits.remove_defaults(hm_i2d) hm_wstr2d = global_ns.typedef('hm_wstr2d') assert (name + '') == \ hm_traits.remove_defaults(hm_wstr2d) def test_hash_multimap(global_ns): hmm_i2d = global_ns.typedef('hmm_i2d') hmm_traits = declarations.unordered_multimap_traits name = 'unordered_multimap' assert (name + '') == \ hmm_traits.remove_defaults(hmm_i2d) hmm_wstr2d = global_ns.typedef('hmm_wstr2d') assert (name + '') == \ hmm_traits.remove_defaults(hmm_wstr2d) hmm_v_i2mm_wstr2d = global_ns.typedef('hmm_v_i2mm_wstr2d') hmm_traits_value = hmm_traits.remove_defaults(hmm_v_i2mm_wstr2d) possible_values = ( name + ', ' + 'const __gnu_cxx::' + name + '>', name + ', ' + 'const std::' + utils.get_tr1(hmm_traits_value) + name + '>', name + ', ' + 'const stdext::' + name + '>') assert hmm_traits_value in possible_values, hmm_traits_value pygccxml-3.0.2/tests/test_smart_pointer.py000066400000000000000000000064361476564735400210410ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import platform from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'test_smart_pointer.hpp' ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-std=c++11 -Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 else: config.cflags = "-std=c++11" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_is_smart_pointer(global_ns): """ Test smart_pointer_traits.is_smart_pointer method. """ criteria = declarations.declaration_matcher(name="yes1") decls = declarations.matcher.find(criteria, global_ns) assert declarations.smart_pointer_traits.is_smart_pointer( decls[0].decl_type) is True criteria = declarations.declaration_matcher(name="no1") decls = declarations.matcher.find(criteria, global_ns) assert declarations.smart_pointer_traits.is_smart_pointer( decls[0].decl_type) is False criteria = declarations.declaration_matcher(name="no2") decls = declarations.matcher.find(criteria, global_ns) assert declarations.smart_pointer_traits.is_smart_pointer( decls[0].decl_type) is False def test_is_auto_pointer(global_ns): """ Test auto_ptr_traits.is_smart_pointer method. """ criteria = declarations.declaration_matcher(name="yes2") decls = declarations.matcher.find(criteria, global_ns) assert declarations.auto_ptr_traits.is_smart_pointer( decls[0].decl_type) is True criteria = declarations.declaration_matcher(name="no1") decls = declarations.matcher.find(criteria, global_ns) assert declarations.auto_ptr_traits.is_smart_pointer( decls[0].decl_type) is False criteria = declarations.declaration_matcher(name="no2") decls = declarations.matcher.find(criteria, global_ns) assert declarations.auto_ptr_traits.is_smart_pointer( decls[0].decl_type) is False def test_smart_pointer_value_type(global_ns): """ Test smart_pointer_traits.value_type method. """ criteria = declarations.declaration_matcher(name="yes1") decls = declarations.matcher.find(criteria, global_ns) vt = declarations.smart_pointer_traits.value_type(decls[0].decl_type) assert isinstance(vt, declarations.int_t) is True def test_auto_pointer_value_type(global_ns): """ Test auto_pointer_traits.value_type method. """ criteria = declarations.declaration_matcher(name="yes2") decls = declarations.matcher.find(criteria, global_ns) vt = declarations.auto_ptr_traits.value_type(decls[0].decl_type) assert isinstance(vt, declarations.double_t) is True pygccxml-3.0.2/tests/test_source_reader.py000066400000000000000000000022561476564735400207710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import platform import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ 'declarations_calldef.hpp' ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() if platform.system() == "Darwin": config.cflags = "-Dat_quick_exit=atexit -Dquick_exit=exit" # https://fr.mathworks.com/matlabcentral/answers/2013982-clibgen-generatelibrarydefinition-error-the-global-scope-has-no-quick_exit-on-mac-m2#answer_1439856 # https://github.com/jetbrains/kotlin/commit/d50f585911dedec5723213da8835707ac95e1c01 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def test_compound_argument_type(global_ns): do_smth = global_ns.calldefs('do_smth') assert do_smth is not None do_smth.function_type() pygccxml-3.0.2/tests/test_start_with_declarations.py000066400000000000000000000034571476564735400230730ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = "core_ns_join_1.hpp" def __check_result(decls): E11 = declarations.find_declaration(decls, fullname='::E11') assert E11 is not None ns12 = declarations.find_declaration(decls, fullname='::ns::ns12') assert ns12 is not None E13 = declarations.find_declaration(ns12.declarations, name='E13') assert E13 is not None E14 = declarations.find_declaration(decls, name='E14') assert E14 is None def test_simple_start_with_declarations(): config = autoconfig.cxx_parsers_cfg.config.clone() config.start_with_declarations.extend(['E11', 'ns::ns12::E13']) decls = parser.parse([TEST_FILES], config) __check_result(decls) def test_project_reader_file_by_file_start_with_declarations(): config = autoconfig.cxx_parsers_cfg.config.clone() config.start_with_declarations.extend(['E11', 'ns::ns12::E13']) reader = parser.project_reader_t(config) decls = reader.read_files( [parser.file_configuration_t( TEST_FILES, config.start_with_declarations)], parser.COMPILATION_MODE.FILE_BY_FILE) __check_result(decls) def test_project_reader_all_at_once_start_with_declarations(): config = autoconfig.cxx_parsers_cfg.config.clone() config.start_with_declarations.extend(['E11', 'ns::ns12::E13']) reader = parser.project_reader_t(config) decls = reader.read_files( [parser.file_configuration_t( TEST_FILES, config.start_with_declarations)], parser.COMPILATION_MODE.ALL_AT_ONCE) __check_result(decls) pygccxml-3.0.2/tests/test_string_traits.py000066400000000000000000000026661476564735400210500ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "string_traits.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def validate_yes(ns, controller): for typedef in ns.typedefs(): assert controller(typedef.decl_type) is True def validate_no(ns, controller): for typedef in ns.typedefs(): assert controller(typedef.decl_type) is False def test_string(global_ns): string_traits = global_ns.namespace('string_traits') validate_yes( string_traits.namespace('yes'), declarations.is_std_string) validate_no( string_traits.namespace('no'), declarations.is_std_string) def test_wstring(global_ns): wstring_traits = global_ns.namespace('wstring_traits') validate_yes( wstring_traits.namespace('yes'), declarations.is_std_wstring) validate_no( wstring_traits.namespace('no'), declarations.is_std_wstring) pygccxml-3.0.2/tests/test_templates.py000066400000000000000000000045161476564735400201460ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from pygccxml import declarations def __test_split_impl(decl_string, name, args): assert (name, args) == \ declarations.templates.split(decl_string) def __test_split_recursive_impl(decl_string, control_seq): assert control_seq == \ list(declarations.templates.split_recursive(decl_string)) def __test_is_template_impl(decl_string): assert declarations.templates.is_instantiation(decl_string) def test_split_on_vector(): __test_is_template_impl("vector>") __test_split_impl( "vector>", "vector", ["int", "std::allocator"]) __test_split_recursive_impl( "vector>", [("vector", ["int", "std::allocator"]), ("std::allocator", ["int"])]) def test_split_on_string(): __test_is_template_impl( "basic_string, std::allocator>") __test_split_impl( "basic_string, std::allocator>", "basic_string", ["char", "std::char_traits", "std::allocator"]) def test_split_on_map(): __test_is_template_impl( "map>," + "std::less, std::allocator>>>>") __test_split_impl( "map>," + "std::less, std::allocator>>>>", "map", ["long int", "std::vector>", "std::less", "std::allocator>>>"]) def test_join_on_vector(): assert "vector>" == \ declarations.templates.join( "vector", ("int", "std::allocator")) def test_bug_is_tmpl_inst(): assert declarations.templates.is_instantiation( "::FX::QMemArray::setRawData") is False pygccxml-3.0.2/tests/test_text_reader.py000066400000000000000000000015051476564735400204510ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations def test_text_reader(): config = autoconfig.cxx_parsers_cfg.config.clone() fconfig = parser.file_configuration_t( data='int i;', start_with_declarations=None, content_type=parser.file_configuration_t.CONTENT_TYPE.TEXT) prj_reader = parser.project_reader_t(config) decls = prj_reader.read_files( [fconfig], compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) var_i = declarations.find_declaration( decls, decl_type=declarations.variable_t, name='i') assert var_i is not None pygccxml-3.0.2/tests/test_type_as_exception_bug.py000066400000000000000000000024101476564735400225160ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "type_as_exception_bug.h", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() # This test does not work with c++17 and above # See https://developers.redhat.com/articles/2021/08/06/porting-your-code-c17-gcc-11#exception_specification_changes # noqa # This test is thus excpected to use -std=c++14 forever config.cflags = "-std=c++14" decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) return global_ns def test_type_as_exception(global_ns): buggy = global_ns.member_function('buggy') expression_error = global_ns.class_('ExpressionError') assert len(buggy.exceptions) == 1 err = buggy.exceptions[0] assert declarations.is_reference(err) err = declarations.remove_declarated( declarations.remove_reference(err)) assert err is expression_error pygccxml-3.0.2/tests/test_type_traits.py000066400000000000000000000261671476564735400205250ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "type_traits.hpp", ] @pytest.fixture def decls(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) return decls def __test_type_category(decls, ns_name, controller): ns_control = declarations.find_declaration( decls, decl_type=declarations.namespace_t, name=ns_name) assert ns_control is not None ns_yes = declarations.find_declaration( ns_control, decl_type=declarations.namespace_t, name='yes') assert ns_yes is not None ns_no = declarations.find_declaration( ns_control, decl_type=declarations.namespace_t, name='no') assert ns_no is not None for decl in ns_yes.declarations: if isinstance(decl, declarations.variable_t): assert controller(decl.decl_type) is not None elif isinstance(decl, declarations.calldef_t) and \ decl.name.startswith('test_'): continue else: assert controller(decl) is not None for decl in ns_no.declarations: if isinstance(decl, declarations.calldef_t) and \ decl.name.startswith('test_'): continue val = controller(decl) # TODO: This looks bad and should be improved? # Why a boolean or None? assert val is False or val is None def __test_type_transformation(decls, ns_name, transformer): ns_control = declarations.find_declaration( decls, decl_type=declarations.namespace_t, name=ns_name) assert ns_control is not None ns_before = declarations.find_declaration( ns_control, decl_type=declarations.namespace_t, name='before') assert ns_before is not None ns_after = declarations.find_declaration( ns_control, decl_type=declarations.namespace_t, name='after') assert ns_after is not None for tbefore in ns_before.declarations: tafter = declarations.find_declaration( ns_after, name=tbefore.name) assert tafter is not None transformed = transformer(tbefore) assert declarations.is_same( transformed, tafter) is True def test_is_enum(decls): __test_type_category(decls, 'is_enum', declarations.is_enum) def test_is_void(decls): __test_type_category(decls, 'is_void', declarations.is_void) def test_is_bool(decls): __test_type_category(decls, 'is_bool', declarations.is_bool) def test_is_integral(decls): __test_type_category(decls, 'is_integral', declarations.is_integral) def test_is_pointer(decls): __test_type_category(decls, 'is_pointer', declarations.is_pointer) def test_is_void_pointer(decls): __test_type_category( decls, 'is_void_pointer', declarations.is_void_pointer) def test_is_const(decls): __test_type_category(decls, 'is_const', declarations.is_const) def test_is_volatile(decls): __test_type_category(decls, 'is_volatile', declarations.is_volatile) def test_is_reference(decls): __test_type_category(decls, 'is_reference', declarations.is_reference) def test_is_floating_point(decls): __test_type_category( decls, 'is_floating_point', declarations.is_floating_point) def test_is_array(decls): __test_type_category(decls, 'is_array', declarations.is_array) def test_is_fundamental(decls): __test_type_category( decls, 'is_fundamental', declarations.is_fundamental) def test_is_noncopyable(decls): __test_type_category( decls, 'is_noncopyable', declarations.is_noncopyable) def test_is_std_ostream(decls): __test_type_category( decls, 'is_std_ostream', declarations.is_std_ostream) def test_is_std_wostream(decls): __test_type_category( decls, 'is_std_wostream', declarations.is_std_wostream) def test_is_calldef_pointer(decls): __test_type_category( decls, 'is_calldef_pointer', declarations.is_calldef_pointer) def test_has_trivial_constructor(decls): __test_type_category( decls, 'has_trivial_constructor', declarations.has_trivial_constructor) def test_has_public_constructor(decls): __test_type_category( decls, 'has_public_constructor', declarations.has_public_constructor) def test_has_public_destructor(decls): __test_type_category( decls, 'has_public_destructor', declarations.has_public_destructor) def test_has_any_non_copyconstructor(decls): __test_type_category( decls, 'has_any_non_copyconstructor', declarations.has_any_non_copyconstructor) def test_has_copy_constructor(decls): __test_type_category( decls, 'has_copy_constructor', declarations.has_copy_constructor) def test_is_base_and_derived(decls): ns = declarations.find_declaration( decls, decl_type=declarations.namespace_t, name='is_base_and_derived') assert ns is not None base = declarations.find_declaration( ns.declarations, decl_type=declarations.class_t, name='base') derived = declarations.find_declaration( ns.declarations, decl_type=declarations.class_t, name='derived') assert base is not None assert derived is not None assert declarations.is_base_and_derived(base, derived) is True assert declarations.is_base_and_derived(base, (derived, derived)) is True unrelated1 = declarations.find_declaration( ns.declarations, decl_type=declarations.class_t, name='unrelated1') unrelated2 = declarations.find_declaration( ns.declarations, decl_type=declarations.class_t, name='unrelated2') assert base is not None assert derived is not None assert declarations.is_base_and_derived(unrelated1, unrelated2) is False def test_is_same(): assert declarations.is_same( declarations.int_t, declarations.int_t) is True assert declarations.is_same( declarations.int_t, declarations.float_t) is False def test_remove_const(decls): __test_type_transformation( decls, 'remove_const', declarations.remove_const) def test_remove_reference(decls): __test_type_transformation( decls, 'remove_reference', declarations.remove_reference) def test_remove_volatile(decls): __test_type_transformation( decls, 'remove_volatile', declarations.remove_volatile) def test_remove_cv(decls): __test_type_transformation( decls, 'remove_cv', declarations.remove_cv ) def test_remove_pointer(decls): __test_type_transformation( decls, 'remove_pointer', declarations.remove_pointer) def test_is_unary_binary_operator(decls): operator_not = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::dummy::operator!') assert operator_not is not None assert declarations.is_unary_operator(operator_not) is True assert declarations.is_binary_operator(operator_not) is False operator_class_p = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::dummy::operator+') assert operator_class_p is not None assert declarations.is_unary_operator(operator_class_p) is False assert declarations.is_binary_operator(operator_class_p) is True operator_class_pp = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::dummy::operator++') assert operator_class_pp is not None assert declarations.is_unary_operator(operator_class_pp) is True assert declarations.is_binary_operator(operator_class_pp) is False operator_pp = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::operator++') assert operator_pp is not None assert declarations.is_unary_operator(operator_pp) is True assert declarations.is_binary_operator(operator_pp) is False operator_mm = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::operator*') assert operator_mm is not None assert declarations.is_unary_operator(operator_mm) is False assert declarations.is_binary_operator(operator_mm) is True operator_pe = declarations.find_declaration( decls, decl_type=declarations.operator_t, fullname='::is_unary_operator::operator+=') assert operator_pe is not None assert declarations.is_unary_operator(operator_pe) is False assert declarations.is_binary_operator(operator_pe) is True def __is_convertible_impl(decl): defs = decl.bases[0].related_class.declarations source_type = declarations.find_declaration(defs, name='source_type') target_type = declarations.find_declaration(defs, name='target_type') expected_type = declarations.find_declaration( defs, name='expected', decl_type=declarations.enumeration_t) expected_value = bool(expected_type.get_name2value_dict()['value']) assert expected_value == declarations.is_convertible( source_type, target_type ) def test_is_convertible(decls): ns_is_convertible = declarations.find_declaration( decls, decl_type=declarations.namespace_t, name="is_convertible") assert ns_is_convertible is not None for tester in [ decl for decl in ns_is_convertible.declarations if decl.name.startswith('x')]: __is_convertible_impl(tester) def test_missing_decls(): config = autoconfig.cxx_parsers_cfg.config code = "struct const_item{ const int values[10]; };" global_ns = parser.parse_string(code, config)[0] ci = global_ns.class_('const_item') assert len(ci.declarations) == 3 def test_get_declaration(): code = """ namespace A{ struct B{ int c; }; template struct C: public T{ int d; }; template struct D{ int dD; }; typedef C easy; typedef D Deasy; inline void instantiate(){ int val = sizeof(easy); } } """ global_ns = parser.parse_string( code, autoconfig.cxx_parsers_cfg.config) global_ns = declarations.get_global_namespace(global_ns) easy = global_ns.typedef('easy') declarations.class_traits.get_declaration(easy) deasy = global_ns.typedef('Deasy') d_a = declarations.class_traits.get_declaration(deasy) assert isinstance(d_a, declarations.class_types) pygccxml-3.0.2/tests/test_typedefs.py000066400000000000000000000026601476564735400177710ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations def test_typedefs_src_reader(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE header = 'typedefs_base.hpp' config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse([header], config) global_ns = declarations.find_declaration( decls, decl_type=declarations.namespace_t, name='::') global_ns.init_optimizer() item_cls = global_ns.class_(name='item_t') assert item_cls is not None assert len(item_cls.aliases) == 1 assert item_cls.aliases[0].name == 'Item' def test_typedefs_source_reader(): COMPILATION_MODE = parser.COMPILATION_MODE.FILE_BY_FILE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse( ['typedefs1.hpp', 'typedefs2.hpp'], config, COMPILATION_MODE ) item_cls = declarations.find_declaration( decls, decl_type=declarations.class_t, name='item_t') assert item_cls is not None assert len(item_cls.aliases) == 3 expected_aliases = {'Item', 'Item1', 'Item2'} real_aliases = set([typedef.name for typedef in item_cls.aliases]) assert real_aliases == expected_aliases pygccxml-3.0.2/tests/test_unnamed_classes.py000066400000000000000000000050051476564735400213060ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations from pygccxml.declarations import type_traits TEST_FILES = [ "unnamed_classes.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() return global_ns def validate_bitfields(parent, bitfields): for key in bitfields: var = parent.variable(key) assert var.bits == bitfields[key] def do_union_test(global_ns, union_name, bitfields): s2 = global_ns.class_('S2') assert declarations.is_union(s2) is False assert declarations.is_struct(s2) is True assert s2.parent.name == 'S1' assert declarations.is_union(s2.parent) is False union = s2.variable(union_name) assert declarations.is_union(union.decl_type) is True assert declarations.is_struct(union.decl_type) is False union_type = type_traits.remove_declarated(union.decl_type) validate_bitfields(union_type, bitfields) assert union_type.variable('raw') is not None def test_union_Flags(global_ns): flags_bitfields = { 'hasItemIdList': 1, 'pointsToFileOrDir': 1, 'hasDescription': 1, 'hasRelativePath': 1, 'hasWorkingDir': 1, 'hasCmdLineArgs': 1, 'hasCustomIcon': 1, 'useWorkingDir': 1, 'unused': 24, } do_union_test(global_ns, 'flags', flags_bitfields) def test_unnamed_unions(global_ns): fileattribs_bitfields = { 'isReadOnly': 1, 'isHidden': 1, 'isSystem': 1, 'isVolumeLabel': 1, 'isDir': 1, 'isModified': 1, 'isEncrypted': 1, 'isNormal': 1, 'isTemporary': 1, 'isSparse': 1, 'hasReparsePoint': 1, 'isCompressed': 1, 'isOffline': 1, 'unused': 19, } do_union_test(global_ns, 'fileattribs', fileattribs_bitfields) def test_anonymous_unions(global_ns): s3 = global_ns.class_('S3') assert s3.parent.name == 'S1' s3_vars = ['anon_mem_c', 'anon_mem_i', 's3_mem', 's2'] for var in s3_vars: assert declarations.is_union(s3.variable(var).decl_type) is False pygccxml-3.0.2/tests/test_unnamed_enums_bug.py000066400000000000000000000037141476564735400216420ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt from . import autoconfig from pygccxml import parser from pygccxml import declarations def test_source_reader_enums(): config = autoconfig.cxx_parsers_cfg.config.clone() reader = parser.source_reader_t(config) decls = reader.read_file("unnamed_enums_bug1.hpp") global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() names = [] enums = global_ns.enumerations() for enum in enums: names.extend(list(enum.get_name2value_dict().keys())) assert len(names) == 4 assert 'x1' in names assert 'x2' in names assert 'y1' in names assert 'y2' in names def test_project_reader_enums(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(["unnamed_enums_bug1.hpp"], config) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() names = [] for enum in global_ns.enumerations(): names.extend(list(enum.get_name2value_dict().keys())) assert len(names) == 4 assert 'x1' in names assert 'x2' in names assert 'y1' in names assert 'y2' in names def test_multiple_files_enums(): config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse( [ 'unnamed_enums_bug1.hpp', 'unnamed_enums_bug2.hpp', 'unnamed_enums_bug1.hpp' ], config ) global_ns = declarations.get_global_namespace(decls) global_ns.init_optimizer() names = [] enums = global_ns.enumerations() list(map( lambda enum: names.extend(list(enum.get_name2value_dict().keys())), enums)) assert len(names) == 6 assert 'x1' in names assert 'x2' in names assert 'y1' in names assert 'y2' in names assert 'z1' in names assert 'z2' in names pygccxml-3.0.2/tests/test_utils.py000066400000000000000000000025401476564735400173030ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import warnings from pygccxml import utils def test_contains_parent_dir(): path = os.path.normpath("/mypath/folder1/folder2/folder3") dirs = [ os.path.normpath("/mypath/folder1/folder2/"), os.path.normpath("/mypath3/folder1/folder2/folder3"), os.path.normpath("home"), os.path.normpath("/test/test1/mypath")] assert utils.utils.contains_parent_dir(path, dirs) is True dirs = [os.path.normpath("/home"), os.path.normpath("/mypath/test/")] assert utils.utils.contains_parent_dir(path, dirs) is False def test_deprecation_wrapper(): """ The DeprecationWrapper is not part of the public API We still need to test it. """ a = utils.utils.DeprecationWrapper( DeprecatedClass, "DeprecatedClass", "NewClass", "1.9.0") with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") a() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) class DeprecatedClass(object): """ An empty class used for testing purposes. """ pass pygccxml-3.0.2/tests/test_variable_matcher.py000066400000000000000000000033241476564735400214340ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES1 = [ "bit_fields.hpp", ] TEST_FILES2 = [ "vector_traits.hpp", ] def test_bit_fields(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES1, config, COMPILATION_MODE) criteria = declarations.variable_matcher_t( name='x', decl_type='unsigned int') x = declarations.matcher.get_single(criteria, decls) comp_str = ( '(decl type==variable_t) and (name==x) and ' + '(value type==unsigned int)') assert str(criteria) == comp_str criteria = declarations.variable_matcher_t( name='::bit_fields::fields_t::x', decl_type=declarations.unsigned_int_t(), header_dir=os.path.dirname( x.location.file_name), header_file=x.location.file_name) x = declarations.matcher.get_single(criteria, decls) assert x is not None assert 'public' == x.access_type def test_no_defaults(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE config = autoconfig.cxx_parsers_cfg.config.clone() decls = parser.parse(TEST_FILES2, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) global_ns.decls(lambda decl: 'vector<' in decl.name) global_ns.decl('vector<_0_>') global_ns.class_('vector>') global_ns.class_('vector') global_ns.decl('vector') pygccxml-3.0.2/tests/test_vector_traits.py000066400000000000000000000053111476564735400210320ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILES = [ "vector_traits.hpp", ] @pytest.fixture def global_ns(): COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE INIT_OPTIMIZER = True config = autoconfig.cxx_parsers_cfg.config.clone() # TOOD: this breaks the tests, check why # config.castxml_epic_version = 1 decls = parser.parse(TEST_FILES, config, COMPILATION_MODE) global_ns = declarations.get_global_namespace(decls) if INIT_OPTIMIZER: global_ns.init_optimizer() return global_ns def validate_yes(value_type, container): traits = declarations.vector_traits assert traits.is_my_case(container) is True assert declarations.is_same( value_type, traits.element_type(container)) is True assert traits.is_sequence(container) is True def test_global_ns(global_ns): value_type = global_ns.class_('_0_') container = global_ns.typedef('container', recursive=False) validate_yes(value_type, container) def test_yes(global_ns): yes_ns = global_ns.namespace('yes') for struct in yes_ns.classes(): if not struct.name.startswith('_'): continue if not struct.name.endswith('_'): continue validate_yes( struct.typedef('value_type'), struct.typedef('container')) def test_no(global_ns): traits = declarations.vector_traits no_ns = global_ns.namespace('no') for struct in no_ns.classes(): if not struct.name.startswith('_'): continue if not struct.name.endswith('_'): continue assert traits.is_my_case(struct.typedef('container')) is False def test_declaration(): cnt = ( 'std::vector, ' + 'std::allocator>,std::allocator, std::allocator>>>' + '@::std::vector, ' + 'std::allocator>, std::allocator, std::allocator>>>') traits = declarations.find_container_traits(cnt) assert declarations.vector_traits == traits def test_element_type(global_ns): do_nothing = global_ns.free_function('do_nothing') v = declarations.remove_reference( declarations.remove_declarated( do_nothing.arguments[0].decl_type)) declarations.vector_traits.element_type(v) pygccxml-3.0.2/tests/test_warn_missing_include_dirs.py000066400000000000000000000016121476564735400233660ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os import pytest from pygccxml import parser from pygccxml import utils def test_config_warn(): """ Test that a missing include directory is printing a warning, not raising an error """ # Some code to parse for the example code = "int a;" # Find the location of the xml generator (castxml or gccxml) generator_path, name = utils.find_xml_generator() # Path given as include director doesn't exist config = parser.xml_generator_configuration_t( xml_generator_path=generator_path, xml_generator=name, include_paths=["doesnt/exist", os.getcwd()]) with pytest.warns(RuntimeWarning): parser.parse_string(code, config) pygccxml-3.0.2/tests/test_xml_generators.py000066400000000000000000000037441476564735400212030ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import pytest import logging from pygccxml import utils mock_logger = logging.getLogger("Test") def test_old_xml_generators(): """ Tests for the xml_generators class. This is for gccxml and for castxml using the gccxml xml file format """ _test_impl("0.6", False, "is_gccxml_06") _test_impl("1.114", False, "is_gccxml_07") _test_impl("1.115", False, "is_gccxml_09_buggy") _test_impl("1.126", False, "is_gccxml_09_buggy") _test_impl("1.127", False, "is_gccxml_09") _test_impl("1.136", True, "is_castxml") def test_casxtml_epic_version_1(): """ Test with the castxml epic version set to 1 """ gen = utils.xml_generators( mock_logger, castxml_format="1.1.0") assert gen.is_gccxml is False assert gen.is_castxml is True assert gen.is_castxml1 is True assert gen.xml_output_version == "1.1.0" with pytest.raises(RuntimeError): utils.xml_generators(mock_logger, "1.136", "1.1.0") with pytest.raises(RuntimeError): utils.xml_generators(mock_logger, None, None) def _test_impl( gccxml_cvs_revision, is_castxml, expected_gccxml_cvs_revision): """ Implementation detail for the test Args: gccxml_cvs_revision (str|None) : a known cvs revision is_castxml (bool): check for castxml expected_gccxml_cvs_revision (str): will be used to check if the attribute is set to True. """ gen = utils.xml_generators( mock_logger, gccxml_cvs_revision) if is_castxml: assert gen.is_gccxml is False assert gen.is_castxml is True else: assert gen.is_gccxml is True assert gen.is_castxml is False assert getattr(gen, expected_gccxml_cvs_revision) is True assert gen.xml_output_version == gccxml_cvs_revision pygccxml-3.0.2/tests/test_xmlfile_reader.py000066400000000000000000000023601476564735400211250ustar00rootroot00000000000000# Copyright 2014-2017 Insight Software Consortium. # Copyright 2004-2009 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. # See http://www.boost.org/LICENSE_1_0.txt import os from . import autoconfig from pygccxml import parser from pygccxml import declarations TEST_FILE = "core_types.hpp" def test_read_xml_file(): config = autoconfig.cxx_parsers_cfg.config.clone() src_reader = parser.source_reader_t(config) src_decls = src_reader.read_file(TEST_FILE) xmlfile = src_reader.create_xml_file(TEST_FILE) conf_t = parser.file_configuration_t fconfig = conf_t( data=xmlfile, start_with_declarations=None, content_type=conf_t.CONTENT_TYPE.GCCXML_GENERATED_FILE) prj_reader = parser.project_reader_t(config) prj_decls = prj_reader.read_files( [fconfig], compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE) declarations.dump_declarations( src_decls, os.path.join( autoconfig.build_directory, 'xmlfile_reader.src.txt')) declarations.dump_declarations( prj_decls, os.path.join( autoconfig.build_directory, 'xmlfile_reader.prj.txt')) assert src_decls == prj_decls pygccxml-3.0.2/tests/xml_generator.cfg000066400000000000000000000012561476564735400200640ustar00rootroot00000000000000[xml_generator] # Specify which xml generator you want to use "castxml" or "gccxml" # "castxml is the default" xml_generator= # Path to castxml or gccxml executable file xml_generator_path= # Set the path to the compiler (for example "/usr/bin/gcc") for CastXML compiler_path= # Gccxml working directory - optional, could be set to your source code directory working_directory= # Additional include directories, as list of paths ["path1/file1.h", "path2/file2.h", ...] include_paths= # You can explicitly set what compiler it should emulate (for GCCXML) # Valid options are: g++, msvc6, msvc7, msvc71, msvc8, cl. compiler= # Keep xml files after errors (useful for debugging) keep_xml=