pax_global_header00006660000000000000000000000064144134635440014522gustar00rootroot0000000000000052 comment=57c692050b8d4f67ff7bcdec7acf38598de7c295 py-lmdb-py-lmdb_1.4.1/000077500000000000000000000000001441346354400145155ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/.github/000077500000000000000000000000001441346354400160555ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/.github/ISSUE_TEMPLATE.md000066400000000000000000000025211441346354400205620ustar00rootroot00000000000000Edit this issue template as appropriate. If none of it seems relevant to your issue, then you may delete the entire template, however, I may not respond to issues that do not include important information that is mentioned in this template! ### Affected Operating Systems * Linux * Windows * BSD * [Other] ### Affected py-lmdb Version e.g. "print lmdb.__version__" ### py-lmdb Installation Method e.g. sudo pip install lmdb ### Using bundled or distribution-provided LMDB library? Bundled ### Distribution name and LMDB library version Use "print lmdb.version()" from a Python prompt. ### Machine "free -m" output e.g. ``` total used free shared buffers cached Mem: 24154 23874 279 21 386 8175 -/+ buffers/cache: 15313 8840 Swap: 0 0 0 ``` ### Other important machine info Running under cgroups? Containers? Weird filesystems in use? Network filesystem? Patched kernel? ... ### Describe Your Problem XXXXX ### Errors/exceptions Encountered e.g. ``` Traceback (most recent call last): File "", line 1, in MemoryError ``` ### Describe What You Expected To Happen e.g. I expected the transaction to commit successfully. ### Describe What Happened Instead e.g. The Python process crashed. py-lmdb-py-lmdb_1.4.1/.github/workflows/000077500000000000000000000000001441346354400201125ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/.github/workflows/python-package.yml000066400000000000000000000306011441346354400235470ustar00rootroot00000000000000--- name: Build, run, and test py-lmdb 'on': push: branches: [master, release] tags: - 'py-lmdb_*' pull_request: branches: [master] jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04, macos-latest, windows-latest] python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, '3.10', '3.11', pypy-2.7, pypy-3.9] impl: [cpython, cffi] purity: [pure, with-pylmdb-mods] exclude: - python-version: pypy-2.7 impl: cpython - python-version: pypy-3.9 impl: cpython # CFFI has trouble building on Windows for 3.5 "self.find_available_vc_vers()[-1]" fails - python-version: 3.5 os: windows-latest # Microsoft removed VC 9.0 installer so Python 2.7 modules can no longer be built on Windows - python-version: 2.7 os: windows-latest # Doesn't seem to exist on github MacOS - python-version: pypy-3.9 os: macos-latest steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Set env vars Windows if: runner.os == 'Windows' run: >- if ( '${{ matrix.impl }}' -eq 'cpython' ) { echo "LMDB_FORCE_CPYTHON=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } else { echo "LMDB_FORCE_CFFI=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } if ( '${{ matrix.purity }}' -eq 'pure' ) { echo "LMDB_PURE=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } elseif ( '${{ matrix.purity }}' -eq 'system' ){ echo "LMDB_FORCE_SYSTEM=1" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } - name: Set env vars *nix if: runner.os != 'Windows' run: | if [[ ${{ matrix.impl }} == cpython ]] ; then echo "LMDB_FORCE_CPYTHON=1" >> $GITHUB_ENV; else echo "LMDB_FORCE_CFFI=1" >> $GITHUB_ENV; fi if [[ ${{ matrix.purity }} == pure ]] ; then echo "LMDB_PURE=1" >> $GITHUB_ENV; elif [[ ${{ matrix.purity }} == system ]] ; then echo "LMDB_FORCE_SYSTEM=1" >> $GITHUB_ENV; sudo apt-get install liblmdb-dev; fi - name: Install dependencies run: | echo "Linux: Envs are cpython=$LMDB_FORCE_CPYTHON cffi=$LMDB_FORCE_CFFI pure=$LMDB_PURE system=$LMDB_FORCE_SYSTEM" echo "Windows: Envs are cpython=$Env:LMDB_FORCE_CPYTHON cffi=$Env:LMDB_FORCE_CFFI pure=$Env:LMDB_PURE system=$Env:LMDB_FORCE_SYSTEM" python -m pip install wheel # Install this separately since sometimes Github Actions can't find it python -m pip install cffi python -m pip install flake8 pytest patch-ng python setup.py develop sdist bdist_wheel ls dist # name: Lint with flake8 # run: | # # stop the build if there are Python syntax errors or undefined names # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # # exit-zero treats all errors as warnings. # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=120 --statistics # - name: Test with pytest # Limit the test cycle a little if: matrix.python-version != '3.6' && matrix.python-version != '3.8' run: | echo "Envs are cpython=$LMDB_FORCE_CPYTHON cffi=$LMDB_FORCE_CFFI pure=$LMDB_PURE system=$LMDB_FORCE_SYSTEM" pytest - name: Save wheel uses: actions/upload-artifact@v2 with: name: "${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.impl }}-${{ matrix.purity }}.whl" path: dist/lmdb-*.whl - name: Get version if: >- matrix.python-version == '3.10' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' run: | python -c 'import lmdb; print(lmdb.__version__, end="")' > vers.txt - name: Save version if: >- matrix.python-version == '3.10' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' uses: actions/upload-artifact@v2 with: path: vers.txt name: vers.txt - name: Save source # We only need a single target to upload the source # (all targets have the same source) if: >- matrix.python-version == '3.10' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' uses: actions/upload-artifact@v2 with: path: dist/lmdb*.tar.gz name: source - name: Build manylinux wheel if: >- matrix.python-version == '3.10' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' uses: RalfG/python-wheels-manylinux-build@v0.7.1 with: python-versions: >- cp36-cp36m cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 build-requirements: 'patch-ng' - name: What do we have run: ls dist - name: Save manylinux wheel # We only need a single target to upload the source # (all targets have the same source) if: >- matrix.python-version == '3.10' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' uses: actions/upload-artifact@v2 with: path: dist/lmdb*manylinux*.whl name: manylinux test_build_aarch64: name: "${{ matrix.PYTHON }} aarch64 ${{ matrix.impl }} ${{ matrix.purity }}" runs-on: ubuntu-20.04 strategy: matrix: impl: [cpython, cffi] purity: [pure, with-pylmdb-mods] PYTHON: ["cp36-cp36m", "cp37-cp37m" , "cp38-cp38" , "cp39-cp39", "cp310-cp310", "cp311-cp311"] steps: - uses: actions/checkout@v2 - run: | docker run --rm --privileged hypriot/qemu-register - uses: docker://quay.io/pypa/manylinux2014_aarch64 with: args: | bash -c "set -xe; mkdir -p /github/home/.cache/pip; chown -R $(whoami) /github/home/.cache; python --version; /opt/python/${{ matrix.PYTHON }}/bin/python -m venv .venv; yum install -y libffi-devel; .venv/bin/pip install -U pip wheel cffi six; if \[ ${{ matrix.impl }} == cpython \] ; then echo LMDB_FORCE_CPYTHON=1 else echo LMDB_FORCE_CFFI=1 fi if \[ ${{ matrix.purity }} == pure \] ; then echo LMDB_PURE=1 elif \[ ${{ matrix.purity }} == system \] ; then echo LMDB_FORCE_SYSTEM=1 fi echo \"Linux: Envs are cpython=$LMDB_FORCE_CPYTHON cffi=$LMDB_FORCE_CFFI pure=$LMDB_PURE system=$LMDB_FORCE_SYSTEM\"; echo \"Windows: Envs are cpython=$Env:LMDB_FORCE_CPYTHON cffi=$Env:LMDB_FORCE_CFFI pure=$Env:LMDB_PURE system=$Env:LMDB_FORCE_SYSTEM\"; .venv/bin/pip install flake8 pytest patch-ng; /opt/python/${{ matrix.PYTHON }}/bin/python setup.py develop bdist_wheel; ls dist; /opt/python/${{ matrix.PYTHON }}/bin/python -m pip install pytest; if \[ ${{ matrix.PYTHON }} != cp36-cp36 \] && \[ ${{ matrix.PYTHON }} != cp38-cp38 \] ; then echo \"Envs are cpython=$LMDB_FORCE_CPYTHON cffi=$LMDB_FORCE_CFFI pure=$LMDB_PURE system=$LMDB_FORCE_SYSTEM\"; /opt/python/${{ matrix.PYTHON }}/bin/python -m pytest; fi; if \[ ${{ matrix.PYTHON }} == cp310-cp310 \] && \[ ${{ runner.os }} == 'Linux' \] && \[ ${{ matrix.purity }} == 'with-pylmdb-mods' \] && \[ ${{ matrix.impl }} == 'cpython' \] ; then /opt/python/${{ matrix.PYTHON }}/bin/python -c \"import lmdb; print(lmdb.__version__, end='')\" > vers.txt; fi;" - uses: actions/upload-artifact@v2 with: name: "${{ runner.os }}-${{ matrix.PYTHON }}-${{ matrix.impl }}-${{ matrix.purity }}.whl" path: dist/lmdb-*.whl - uses: actions/upload-artifact@v2 if: >- matrix.PYTHON == 'cp310-cp310' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' with: path: vers.txt name: vers.txt - uses: actions/upload-artifact@v2 if: >- matrix.PYTHON == 'cp310-cp310' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' with: path: dist/lmdb*.tar.gz name: source - uses: RalfG/python-wheels-manylinux-build@v0.7.1-manylinux2014_aarch64 if: >- matrix.PYTHON == 'cp310-cp310' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' with: python-versions: >- cp36-cp36m cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 build-requirements: 'patch-ng' - uses: actions/upload-artifact@v2 if: >- matrix.PYTHON == 'cp310-cp310' && runner.os == 'Linux' && matrix.purity == 'with-pylmdb-mods' && matrix.impl == 'cpython' with: path: dist/lmdb*manylinux*.whl name: manylinux publish: needs: build # N.B. the host running twine to upload is distinct from the target image runs-on: ubuntu-20.04 strategy: # We publish a subset of the targets we test matrix: os: [macos-latest, windows-latest] python-version: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10', '3.11', pypy-2.7, pypy-3.9] impl: [cpython, cffi] purity: [with-pylmdb-mods] exclude: - python-version: 'pypy-2.7' impl: cpython - python-version: 'pypy-3.9' impl: cpython - python-version: '2.7' impl: cffi - python-version: '3.5' impl: cffi - python-version: '3.6' impl: cffi - python-version: '3.7' impl: cffi - python-version: '3.8' impl: cffi - python-version: '3.9' impl: cffi - python-version: '3.10' impl: cffi - python-version: '3.11' impl: cffi # CFFI has trouble building on Windows for 3.5 "self.find_available_vc_vers()[-1]" fails - python-version: 3.5 os: windows-latest # Microsoft removed VC 9.0 installer so Python 2.7 modules can no longer be built on Windows - python-version: '2.7' os: windows-latest # Doesn't seem to exist on github MacOS - python-version: pypy-3.9 os: macos-latest include: # Ubuntu artifacts apply to all python versions - os: ubuntu-20.04 python-version: '3.10' impl: cpython purity: with-pylmdb-mods steps: - name: Download source if: matrix.os == 'ubuntu-20.04' uses: actions/download-artifact@v2 with: name: source path: dist - name: Download manylinux artifact if: matrix.os == 'ubuntu-20.04' uses: actions/download-artifact@v2 with: name: manylinux path: dist - name: Download non-Linux wheel if: matrix.os != 'ubuntu-20.04' uses: actions/download-artifact@v2 with: name: "${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.impl }}-${{ matrix.purity }}.whl" path: dist - name: Inventory run: >- find . - name: Publish distribution 📦 to Test PyPI uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.TEST_PYPI_API_TOKEN }} repository_url: https://test.pypi.org/legacy/ skip_existing: true - name: Publish distribution 📦 to PyPI if: startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.PYPI_API_TOKEN }} py-lmdb-py-lmdb_1.4.1/.gitignore000066400000000000000000000001561441346354400165070ustar00rootroot00000000000000MANIFEST __pycache__ build dist docs/_build ll.sh lmdb.egg-info lmdb/_config.py lo.sh old .tox/ tests/test.py py-lmdb-py-lmdb_1.4.1/ChangeLog000066400000000000000000000374111441346354400162750ustar00rootroot000000000000002022-04-04 v1.4.1 * Update CI to build manylinux binaries. 2022-12-06 v1.4.0 * Add Python 3.11 support. 2021-12-30 v1.3.0 * Add aarch64 architecture builds. Contributed by odidev. * Add Python 3.10 support. * Fix crash relating to caching of transactions. The 'max_spare_txns' parameter to Environment/open is currently ignored. 2021-04-19 v1.2.1 * Resolve CI bug where non-Linux wheels were not being published to PyPI. 2021-04-15 v1.2.0 * Update bundled LMDB to 0.9.29. * Add non-bundled testing to CI. * Remove wheel generation for 2.7 because the manylinux images no longer support it. * Allow passing None as a value to transaction.del in CFFI implementation for parity with cpython implementation. * Fix Cursor.put behavior on a dupsort DB with append=True. * Add warning to docs about use of Environment.set_mapsize. This is currently an unresolved issue with upstream LMDB. * CFFI implementation: fix a seg fault when open_db returns map full. * CFFI implementation: fix a bug in open_db in a read-only environment. 2021-02-05 v1.1.1 * Dowgrade underlying LMDB to 0.9.26. 0.9.27 has a minor defect that will need to get resolved. 2021-02-04 v1.1.0 * Migrate CI pipeline from Travis and AppVeyor to Github Actions. Now includes comprehensive testing across 4 dimensions (OS, Python version, cpython/CFFI, pure/with mods). Also includes publishing to PyPI. * Prevent invalid flag combinations when creating a database. * Add a Cursor.getmulti method with optional buffer support. Contributed by Will Thompson . * Upgrade underlying LMDB to 0.9.27. 2020-08-28 v1.0.0 * Start of new semantic versioning scheme. This would be a minor version bump from the 0.99 release if it were semantically versioned. * Allow environment copy to take a passed-in transaction. This is the first released feature that requires a (very small) patch to the underlying C library. By default, the patch will be applied unless this module is built with LMDB_PURE environment variable set. 2020-08-13 v0.99 * Fix lmdb.tool encoding issues. * Fix -l lmdb invocation issue. * Minor documentation improvements. * Update LMDB to version 0.9.24. * Update for Python 3.9 (current release candidate) support. * Resolve a bug when using cursor.putmulti and append=True on dupsort DBs. * Allow _Database.flags method to take no arguments since the one argument wasn't being used. 2019-11-06 v0.98 * Fix that a duplicate argument to a lmdb method would cause an assert. * Solaris needs ```#include "python.h"``` as soon as possible. Fix contributed by Jesús Cea. * Fix crash under debug cpython when mdb_cursor_open failed 2019-08-11 v0.97 * Fix a missed GIL unlock sequence. Reported by ajschorr. * Fix argv check in JEP (cpython under Java) environment. Contributed by de-code. 2019-07-14 v0.96 * First release under new maintainer, Nic Watson. * Doc updates. * More removal of code for now-unsupported Python versions. * Only preload the value with the GIL unlocked when the value is actually requested. This significantly improves read performance to retrieve keys with large values when the value isn't retrieved. Reported by Dan Patton. 2019-06-08 v0.95 * The minimum supported version of Python is now 2.7. * The library is no longer tested on Python 3.2. * The address-book.py example was updated for Python 3. Contributed by Jamie Bliss. * Development-related files were removed from the distribution tarball. * Handling of the Environment(create=True) flag was improved. Fix contributed by Nir Soffer. * Database names may be reused after they are dropped on CFFI, without reopening the environment. Fix contributed by Gareth Bult. 2018-04-09 v0.94 * CPython argument parsing now matches the behaviour of CFFI, and most sane Python APIs: a bool parameter is considered to be true if it is any truthy value, not just if it is exactly True. Reported by Nic Watson. * Removed Python 2.6 support due to urllib3 warnings and pytest dropping it. * Updared LMDB to version 0.9.22. * Fixed several 2.7/3 bugs in command line tool. 2017-07-16 v0.93 * py-lmdb is now built with AppVeyor CI, providing early feedback on Windows build health. Egg and wheel artifacts are being generated, removing the need for a dedicated Windows build machine, however there is no mechanism to paublish these to PyPI yet. * The "warm" tool command did not function on Python 3.x. Reported by Github user dev351. * Tests now pass on non-4kb page-sized machines, such as ppc64le. Reported by Jonathan J. Helmus. * Windows 3.6 eggs and wheels are now available on PyPI, and tests are run against 3.6. Reported by Ofek Lev. * Python 3.2 is no longer supported, due to yet more pointless breakage introduced in pip/pkg_resources. * py-lmdb currently does not support LMDB >=0.9.19 due to interface changes in LMDB. Support will appear in a future release. 2016-10-17 v0.92 * Changes to support __all__ caused the CPython module to fail to import at runtime on Python 3. This was hidden during testing as the CFFI module was successfully imported. 2016-10-17 v0.91 * The docstring for NotFoundError was clarified to indicate that it is not raised in normal circumstances. * CFFI open_db() would always attempt to use a write transaction, even if the environment was opened with readonly=True. Now both CPython and CFFI will use a read-only transaction in this case. Reported by Github user handloomweaver. * The source distribution previously did not include a LICENSE file, and may have included random cached junk from the source tree during build. Reported by Thomas Petazzoni. * Transaction.id() was broken on Python 2.5. * Repair Travis CI build again. * CFFI Cursor did not correctly return empty strings for key()/value()/item() when iternext()/iterprev() had reached the start/end of the database. Detected by tests contributed by Ong Teck Wu. * The package can now be imported from within a CPython subinterpreter. Fix contributed by Vitaly Repin. * lmdb.tool --delete would not delete keys in some circumstances. Fix contributed by Vitaly Repin. * Calls to Cursor.set_range_dup() could lead to memory corruption due to Cursor's idea of the key and value failing to be updated correctly. Reported by Michael Lazarev. * The lmdb.tool copy command now supports a --compact flag. Contributed by Achal Dave. * The lmdb.tool edit command selects the correct database when --delete is specified. Contributed by ispequalnp. * lmdb.tool correctly supports the -r flag to select a read-only environment. Contributed by ispequalnp. * The lmdb.tool --txn_size parameter was removed, as it was never implemented, and its original function is no longer necessary with modern LMDB. Reported by Achal Dave. * The documentation template was updated to fix broken links. Contributed by Adam Chainz. * The Travis CI build configuration was heavily refactored by Alexander Zhukov. Automated tests are running under Travis CI once more. * The CPython extension module did not define __all__. It is now defined contain the same names as on CFFI. * Both implementations were updated to remove lmdb.open() from __all__, ensuring "from lmdb import *" does not shadow the builtin open(). The function can still be invoked using its fully qualified name, and the alias "Environment" may be used when "from lmdb import *" is used. Reported by Alexander Zhukov. * The CPython extension exported BadRSlotError, instead of BadRslotError. The exception's name was corrected to match CFFI. * Environment.open_db() now supports integerdup=True, dupfixed=True, and integerkey=True flags. Based on a patch by Jonathan Heyman. 2016-07-11 v0.90 * This release was deleted from PyPI due to an erroneous pull request upgrading the bundled LMDB to mdb.master. 2016-02-12 v0.89 * LMDB 0.9.18 is bundled. * CPython Iterator.next() was incorrectly defined as pointing at the implementation for Cursor.next(), triggering a crash if the method was ever invoked manually. Reported by Kimikazu Kato. 2016-01-24 v0.88 * LMDB 0.9.17 is bundled. * Transaction.id() is exposed. * Binary wheels are built for Python 3.5 Windows 32/64-bit. 2015-08-11 v0.87 * Environment.set_mapsize() was added to allow runtime adjustment of the environment map size. * Remove non-determinism from setup.py, to support Debian's reproducible builds project. Patch by Chris Lamb. * Documentation correctness and typo fixes. Patch by Gustav Larsson. * examples/keystore: beginnings of example that integrates py-lmdb with an asynchronous IO loop. 2015-06-07 v0.86 * LMDB_FORCE_SYSTEM builds were broken by the GIL/page fault change. This release fixes the problem. * Various cosmetic fixes to documentation. 2015-06-06 v0.85 * New exception class: lmdb.BadDbiError. * Environment.copy() and Environment.copyfd() now support compact=True, to trigger database compaction while copying. * Various small documentation updates. * CPython set_range_dup() and set_key_dup() both invoked MDB_GET_BOTH, however set_range_dup() should have instead invoked MDB_GET_BOTH_RANGE. Fix by Matthew Battifarano. * lmdb.tool module was broken on Win32, since Win32 lacks signal.SIGWINCH. Fix suggested by David Khess. * LMDB 0.9.14 is bundled along with extra fixes from mdb.RE/0.9 (release engineering) branch. * CPython previously lacked a Cursor.close() method. Problem was noticed by Jos Vos. * Several memory leaks affecting the CFFI implementation when running on CPython were fixed, apparent only when repeatedly opening and discarding a large number of environments. Noticed by Jos Vos. * The CPython extension previously did not support weakrefs on Environment objects, and the implementation for Transaction objects was flawed. The extension now correctly invalidates weakrefs during deallocation. * Both variants now try to avoid taking page faults with the GIL held, accomplished by touching one byte of every page in a value during reads. This does not guarantee faults will never occur with the GIL held, but it drastically reduces the possibility. The binding should now be suitable for use in multi-threaded applications with databases containing >2KB values where the entire database does not fit in RAM. 2014-09-22 v0.84 * LMDB 0.9.14 is bundled. * CFFI Cursor.putmulti() could crash when append=False and a key already existed. 2014-06-24 v0.83 * LMDB 0.9.13 is bundled along with extra fixes from upstream Git. * Environment.__enter__() and __exit__() are implemented, allowing Environments to behave like context managers. * Cursor.close(), __enter__() and __exit__() are implemented, allowing Cursors to be explicitly closed. In CFFI this mechanism *must* be used when many cursors are used within a single transaction, otherwise a resource leak will occur. * Dependency tracking in CFFI is now much faster, especially on PyPy, however at a cost: Cursor use must always be wrapped in a context manager, or .close() must be manually invoked for discarded Cursors when the parent transaction is long lived. * Fixed crash in CFFI Cursor.putmulti(). 2014-05-26 v0.82 * Both variants now implement max_spare_txns, reducing the cost of creating a read-only transaction 4x for an uncontended database and by up to 20x for very read-busy environments. By default only 1 read-only transaction is cached, adjust max_spare_txns= parameter if your script operates multiple simultaneous read transactions. * Patch from Vladimir Vladimirov implementing MDB_NOLOCK. * The max_spare_iters and max_spare_cursors parameters were removed, neither ever had any effect. * Cursor.putmulti() implemented based on a patch from Luke Kenneth Casson Leighton. This function moves the loop required to batch populate a database out of Python and into C. * The bundled LMDB 0.9.11 has been updated with several fixes from upstream Git. * The cost of using keyword arguments in the CPython extension was significantly reduced. 2014-04-26 v0.81 * On Python 2.x the extension module would silently interpret Unicode instances as buffer objects, causing UCS-2/UCS-4 string data to end up in the database. This was never intentional and now raises TypeError. Any Unicode data passed to py-lmdb must explicitly be encoded with .encode() first. * open_db()'s name argument was renamed to key, and its semantics now match get() and put(): in other words the key must be a bytestring, and passing Unicode will raise TypeError. * The extension module now builds under Python 3.4 on Windows. 2014-04-21 v0.80 * Both variants now build successfully as 32 bit / 64bit binaries on Windows under Visual Studio 9.0, the compiler for Python 2.7. This enables py-lmdb to be installed via pip on Windows without requiring a compiler to be available. In future, .egg/.whl releases will be pre-built for all recent Python versions on Windows. Known bugs: Environment.copy() and Environment.copyfd() currently produce a database that cannot be reopened. * The lmdb.enable_drop_gil() function was removed. Its purpose was experimental at best, confusing at worst. 2014-03-17 v0.79 * CPython Cursor.delete() lacked dupdata argument, fixed. * Fixed minor bug where CFFI _get_cursor() did not note its idea of the current key and value were up to date. * Cursor.replace() and Cursor.pop() updated for MDB_DUPSORT databases. For pop(), the first data item is popped and returned. For replace(), the first data item is returned, and all duplicates for the key are replaced. * Implement remaining Cursor methods necessary for working with MDB_DUPSORT databases: next_dup(), next_nodup(), prev_dup(), prev_nodup(), first_dup(), last_dup(), set_key_dup(), set_range_dup(), iternext_dup(), iternext_nodup(), iterprev_dup(), iterprev_nodup(). * The default for Transaction.put(dupdata=...) and Cursor.put(dupdata=...) has changed from False to True. The previous default did not reflect LMDB's normal mode of operation. * LMDB 0.9.11 is bundled along with extra fixes from upstream Git. 2014-01-18 v0.78 * Patch from bra-fsn to fix LMDB_LIBDIR. * Various inaccurate documentation improvements. * Initial work towards Windows/Microsoft Visual C++ 9.0 build. * LMDB 0.9.11 is now bundled. * To work around install failures minimum CFFI version is now >=0.8.0. * ticket #38: remove all buffer object hacks. This results in ~50% slowdown for cursor enumeration, but results in far simpler object lifetimes. A future version may introduce a better mechanism for achieving the same performance without loss of sanity. 2013-11-30 v0.77 * Added Environment.max_key_size(), Environment.max_readers(). * CFFI now raises the correct Error subclass associated with an MDB_* return code. * Numerous CFFI vs. CPython behavioural inconsistencies have been fixed. * An endless variety of Unicode related 2.x/3.x/CPython/CFFI fixes were made. * LMDB 0.9.10 is now bundled, along with some extra fixes from Git. * Added Environment(meminit=...) option. 2013-10-28 v0.76 * Added support for Environment(..., readahead=False). * LMDB 0.9.9 is now bundled. * Many Python 2.5 and 3.x fixes were made. Future changes are automatically tested via Travis CI . * When multiple cursors exist, and one cursor performs a mutation, remaining cursors may have returned corrupt results via key(), value(), or item(). Mutations are now explicitly tracked and cause the cursor's data to be refreshed in this case. * setup.py was adjusted to ensure the distutils default of '-DNDEBUG' is never defined while building LMDB. This caused many important checks in the engine to be disabled. * The old 'transactionless' API was removed. A future version may support the same API, but the implementation will be different. * Transaction.pop() and Cursor.pop() helpers added, to complement Transaction.replace() and Cursor.replace(). py-lmdb-py-lmdb_1.4.1/LICENSE000066400000000000000000000042461441346354400155300ustar00rootroot00000000000000The OpenLDAP Public License Version 2.8, 17 August 2003 Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source form must retain copyright statements and notices, 2. Redistributions in binary form must reproduce applicable copyright statements and notices, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution, and 3. Redistributions must contain a verbatim copy of this document. The OpenLDAP Foundation may revise this license from time to time. Each revision is distinguished by a version number. You may use this Software under terms of this license revision or under the terms of any subsequent revision of the license. THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The names of the authors and copyright holders must not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without specific, written prior permission. Title to copyright in this Software shall at all times remain with copyright holders. OpenLDAP is a registered trademark of the OpenLDAP Foundation. Copyright 1999-2003 The OpenLDAP Foundation, Redwood City, California, USA. All Rights Reserved. Permission to copy and distribute verbatim copies of this document is granted. py-lmdb-py-lmdb_1.4.1/MANIFEST.in000066400000000000000000000002061441346354400162510ustar00rootroot00000000000000graft docs graft examples graft lib graft lmdb graft tests include ChangeLog include LICENSE prune docs/_build prune lmdb/__pycache__ py-lmdb-py-lmdb_1.4.1/README.md000066400000000000000000000013321441346354400157730ustar00rootroot00000000000000This is a universal Python binding for the LMDB ‘Lightning’ Database. See [the documentation](https://lmdb.readthedocs.io) for more information. ### CI State ![Build, run, and test py-lmdb](https://github.com/jnwatson/py-lmdb/workflows/Build,%20run,%20and%20test%20py-lmdb/badge.svg) # Python Version Support Statement This project has been around for a while. Previously, it supported all the way back to before 2.5. Currently py-lmdb supports Python 2.7, Python >= 3.5, and pypy. Python 2.7 is now end-of-life. If you are still using Python 2.7, you should strongly considering porting to Python 3. That said, this project will continue to support running on Python 2.7 until Github Actions remove support for it. py-lmdb-py-lmdb_1.4.1/docs/000077500000000000000000000000001441346354400154455ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/docs/Makefile000066400000000000000000000126641441346354400171160ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .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 " 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 " 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/lmdb.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/lmdb.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/lmdb" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/lmdb" @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." 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." py-lmdb-py-lmdb_1.4.1/docs/conf.py000066400000000000000000000210361441346354400167460ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # lmdb documentation build configuration file, created by # sphinx-quickstart on Tue Feb 5 00:39:26 2013. # # 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, os # 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('..')) # -- 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.intersphinx'] intersphinx_mapping = {'python': ('http://docs.python.org/2.7', None)} # 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'lmdb' copyright = u'2013-2019 David Wilson, 2019-2022 Nic Watson' # 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. # def grep_version(): path = os.path.join(os.path.dirname(__file__), '../lmdb/__init__.py') with open(path) as fp: for line in fp: if line.startswith('__version__'): return eval(line.split()[-1]) # The short X.Y version. version = grep_version() # 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 = True # 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 = [] # -- 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 = 'acid' # 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 = { 'github_repo': 'https://github.com/jnwatson/py-lmdb/' } # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['themes'] # 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'] # 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 = False # 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 = False # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. html_show_sphinx = False # 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 = 'lmdbdoc' # -- 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]). latex_documents = [ ('index', 'lmdb.tex', u'lmdb Documentation', u'David Wilson and Nic Watson', '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', 'lmdb', u'lmdb Documentation', [u'David Wilson'], 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', 'lmdb', u'lmdb Documentation', u'David Wilson', 'lmdb', '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' import sys class Mock(object): def __init__(self, *args, **kwargs): pass def __call__(self, *args, **kwargs): return Mock() @classmethod def __getattr__(cls, name): if name in ('__file__', '__path__'): return '/dev/null' elif 0 and name[0] == name[0].upper(): mockType = type(name, (), {}) mockType.__module__ = __name__ return mockType else: return Mock() MOCK_MODULES = ['cffi'] for mod_name in MOCK_MODULES: sys.modules[mod_name] = Mock() py-lmdb-py-lmdb_1.4.1/docs/index.rst000066400000000000000000000633511441346354400173160ustar00rootroot00000000000000 lmdb ==== .. currentmodule:: lmdb .. toctree:: :hidden: :maxdepth: 2 This is a universal Python binding for the `LMDB 'Lightning' Database `_. Two variants are provided and automatically selected during install: a `CFFI `_ variant that supports `PyPy `_ and all versions of CPython >=2.7, and a C extension that supports CPython >=2.7 and >=3.4. Both variants provide the same interface. LMDB is a tiny database with some excellent properties: * Ordered map interface (keys are always lexicographically sorted). * Reader/writer transactions: readers don't block writers, writers don't block readers. Each environment supports one concurrent write transaction. * Read transactions are extremely cheap. * Environments may be opened by multiple processes on the same host, making it ideal for working around Python's `GIL `_. * Multiple named databases may be created with transactions covering all named databases. * Memory mapped, allowing for zero copy lookup and iteration. This is optionally exposed to Python using the :py:func:`buffer` interface. * Maintenance requires no external process or background threads. * No application-level caching is required: LMDB fully exploits the operating system's buffer cache. Installation: Windows +++++++++++++++++++++ Binary eggs and wheels are published via PyPI for Windows, allowing the binding to be installed via pip and easy_install without the need for a compiler to be present. The binary releases statically link against the bundled version of LMDB. Initially 32-bit and 64-bit binaries are provided for Python 2.7; in future binaries will be published for all supported versions of Python. To install, use a command like: :: C:\Python27\python -mpip install lmdb Or: :: C:\Python27\python -measy_install lmdb Installation: UNIX ++++++++++++++++++ For convenience, a supported version of LMDB is bundled with the binding and built statically by default. If your system distribution includes LMDB, set the ``LMDB_FORCE_SYSTEM`` environment variable, and optionally ``LMDB_INCLUDEDIR`` and ``LMDB_LIBDIR`` prior to invoking ``setup.py``. By default, the LMDB library is patched before building. This patch (located at ``lib/py-lmdb/env-copy-txn.patch``) provides a minor feature: the ability to copy/backup an environment under a particular transaction. If you prefer to bypass the patch, set the environment variable ``LMDB_PURE``. The CFFI variant depends on CFFI, which in turn depends on ``libffi``, which may need to be installed from a package. On CPython, both variants additionally depend on the CPython development headers. On Debian/Ubuntu: :: apt-get install libffi-dev python-dev build-essential To install the C extension, ensure a C compiler and `pip` or `easy_install` are available and type: :: pip install lmdb # or easy_install lmdb The CFFI variant may be used on CPython by setting the ``LMDB_FORCE_CFFI`` environment variable before installation, or before module import with an existing installation: :: >>> import os >>> os.environ['LMDB_FORCE_CFFI'] = '1' >>> # CFFI variant is loaded. >>> import lmdb Getting Help ++++++++++++ Before getting in contact, please ensure you have thoroughly reviewed this documentation, and if applicable, the associated `official Doxygen documentation `_. If you have found a bug, please report it on the `GitHub issue tracker `_, or mail it to the list below if you're allergic to GitHub. For all other problems and related discussion, please direct it to `the py-lmdb@freelists.org mailing list `_. You must be subscribed to post. The `list archives `_ are also available. Named Databases +++++++++++++++ Named databases require the `max_dbs=` parameter to be provided when calling :py:func:`lmdb.open` or :py:class:`lmdb.Environment`. This must be done by the first process or thread opening the environment. Once a correctly configured :py:class:`Environment` is created, new named databases may be created via :py:meth:`Environment.open_db`. Storage efficiency & limits +++++++++++++++++++++++++++ Records are grouped into pages matching the operating system's VM page size, which is usually 4096 bytes. Each page must contain at least 2 records, in addition to 8 bytes per record and a 16 byte header. Due to this the engine is most space-efficient when the combined size of any (8+key+value) combination does not exceed 2040 bytes. When an attempt to store a record would exceed the maximum size, its value part is written separately to one or more dedicated pages. Since the trailer of the last page containing the record value cannot be shared with other records, it is more efficient when large values are an approximate multiple of 4096 bytes, minus 16 bytes for an initial header. Space usage can be monitored using :py:meth:`Environment.stat`: :: >>> pprint(env.stat()) {'branch_pages': 1040L, 'depth': 4L, 'entries': 3761848L, 'leaf_pages': 73658L, 'overflow_pages': 0L, 'psize': 4096L} This database contains 3,761,848 records and no values were spilled (``overflow_pages``). `Environment.stat` only return information for the default database. If named databases are used, you must add the results from `Transaction.stat` on each named database. By default record keys are limited to 511 bytes in length, however this can be adjusted by rebuilding the library. The compile-time key length can be queried via :py:meth:`Environment.max_key_size()`. Memory usage ++++++++++++ Diagnostic tools often overreport the memory usage of LMDB databases, since the tools poorly classify that memory. The Linux ``ps`` command ``RSS`` measurement may report a process as having an entire database resident, causing user alarm. While the entire database may really be resident, it is half the story. Unlike heap memory, pages in file-backed memory maps, such as those used by LMDB, may be efficiently reclaimed by the OS at any moment so long as the pages in the map are `clean`. `Clean` simply means that the resident pages' contents match the associated pages that live in the disk file that backs the mapping. A clean mapping works exactly like a cache, and in fact it is a cache: the `OS page cache `_. On Linux, the ``/proc//smaps`` file contains one section for each memory mapping in a process. To inspect the actual memory usage of an LMDB database, look for a ``data.mdb`` entry, then observe its `Dirty` and `Clean` values. When no write transaction is active, all pages in an LMDB database should be marked `clean`, unless the Environment was opened with `sync=False`, and no explicit :py:meth:`Environment.sync` has been called since the last write transaction, and the OS writeback mechanism has not yet opportunistically written the dirty pages to disk. Bytestrings +++++++++++ This documentation uses `bytestring` to mean either the Python<=2.7 :py:func:`str` type, or the Python>=3.0 :py:func:`bytes` type, depending on the Python version in use. Due to the design of Python 2.x, LMDB will happily accept Unicode instances where :py:func:`str` instances are expected, so long as they contain only ASCII characters, in which case they are implicitly encoded to ASCII. You should not rely on this behaviour! It results in brittle programs that often break the moment they are deployed in production. Always explicitly encode and decode any Unicode values before passing them to LMDB. This documentation uses :py:func:`bytes` in examples. In Python 3.x this is a distinct type, whereas in Python 2.7 it is simply an alias for :py:func:`str`. Buffers +++++++ Since LMDB is memory mapped it is possible to access record data without keys or values ever being copied by the kernel, database library, or application. To exploit this the library can be instructed to return :py:func:`buffer` objects instead of bytestrings by passing `buffers=True` to :py:meth:`Environment.begin` or :py:class:`Transaction`. In Python :py:func:`buffer` objects can be used in many places where bytestrings are expected. In every way they act like a regular sequence: they support slicing, indexing, iteration, and taking their length. Many Python APIs will automatically convert them to bytestrings as necessary: :: >>> txn = env.begin(buffers=True) >>> buf = txn.get('somekey') >>> buf >>> len(buf) 4096 >>> buf[0] 'a' >>> buf[:2] 'ab' >>> value = bytes(buf) >>> len(value) 4096 >>> type(value) It is also possible to pass buffers directly to many native APIs, for example :py:meth:`file.write`, :py:meth:`socket.send`, :py:meth:`zlib.decompress` and so on. A buffer may be sliced without copying by passing it to :py:func:`buffer`: :: >>> # Extract bytes 10 through 210: >>> sub_buf = buffer(buf, 10, 200) >>> len(sub_buf) 200 In both PyPy and CPython, returned buffers *must be discarded* after their producing transaction has completed or been modified in any way. To preserve buffer's contents, copy it using :py:func:`bytes`: .. code-block:: python with env.begin(write=True, buffers=True) as txn: buf = txn.get('foo') # only valid until the next write. buf_copy = bytes(buf) # valid forever txn.delete('foo') # this is a write! txn.put('foo2', 'bar2') # this is also a write! print('foo: %r' % (buf,)) # ERROR! invalidated by write print('foo: %r' % (buf_copy,)) # OK print('foo: %r' % (buf,)) # ERROR! also invalidated by txn end print('foo: %r' % (buf_copy,)) # still OK ``writemap`` mode +++++++++++++++++ When :py:class:`Environment` or :py:func:`open` is invoked with ``writemap=True``, the library will use a writeable memory mapping to directly update storage. This improves performance at a cost to safety: it is possible (though fairly unlikely) for buggy C code in the Python process to accidentally overwrite the map, resulting in database corruption. .. caution:: This option may cause filesystems that don't support sparse files, such as OSX, to immediately preallocate `map_size=` bytes of underlying storage when the environment is opened or closed for the first time. .. caution:: A filesystem failure (such as running out of space), will crash the Python process if this option is enabled. (This is a general OS limitation, and not limited to LMDB). Resource Management +++++++++++++++++++ :py:class:`Environment`, :py:class:`Transaction`, and :py:class:`Cursor` support the context manager protocol, allowing for robust resource cleanup in the case of exceptions. .. code-block:: python with env.begin() as txn: with txn.cursor() as curs: # do stuff print 'key is:', curs.get('key') On CFFI it is important to use the :py:class:`Cursor` context manager, or explicitly call :py:meth:`Cursor.close` if many cursors are created within a single transaction. Failure to close a cursor on CFFI may cause many dead objects to accumulate until the parent transaction is aborted or committed. Transaction management ++++++++++++++++++++++ While any reader exists, writers cannot reuse space in the database file that has become unused in later versions. Due to this, continual use of long-lived read transactions may cause the database to grow without bound. A lost reference to a read transaction will simply be aborted (and its reader slot freed) when the :py:class:`Transaction` is eventually garbage collected. This should occur immediately on CPython, but may be deferred indefinitely on PyPy. However the same is *not* true for write transactions: losing a reference to a write transaction can lead to deadlock, particularly on PyPy, since if the same process that lost the :py:class:`Transaction` reference immediately starts another write transaction, it will deadlock on its own lock. Subsequently the lost transaction may never be garbage collected (since the process is now blocked on itself) and the database will become unusable. These problems are easily avoided by always wrapping :py:class:`Transaction` in a ``with`` statement somewhere on the stack: .. code-block:: python # Even if this crashes, txn will be correctly finalized. with env.begin() as txn: if txn.get('foo'): function_that_stashes_away_txn_ref(txn) function_that_leaks_txn_refs(txn) crash() Threads +++++++ ``MDB_NOTLS`` mode is used exclusively, which allows read transactions to freely migrate across threads and for a single thread to maintain multiple read transactions. This enables mostly care-free use of read transactions, for example when using `gevent `_. Most objects can be safely called by a single caller from a single thread, and usually it only makes sense to to have a single caller, except in the case of :py:class:`Environment`. Most :py:class:`Environment` methods are thread-safe, and may be called concurrently, except for :py:meth:`Environment.close`. Running `close` at the same time as other database operations may crash the interpreter. A write :py:class:`Transaction` may only be used from the thread it was created on. A read-only :py:class:`Transaction` can move across threads, but it cannot be used concurrently from multiple threads. :py:class:`Cursor` is not thread-safe, but it does not make sense to use it on any thread except the thread that currently owns its associated :py:class:`Transaction`. Limitations running on 32-bit Processes +++++++++++++++++++++++++++++++++++++++ 32-bit processes (for example 32-bit builds of Python on Windows) are severely limited in the amount of virtual memory that can be mapped in. This is particularly true for any 32-bit process but is particularly true for Python running on Windows and long running processes. Virtual address space fragmentation is a significant issue for mapping files into memory, a requirement for lmdb, as lmdb requires a contiguous range of virtual addresses. See https://web.archive.org/web/20170701204304/http://forthescience.org/blog/2014/08/16/python-and-memory-fragmentation for more information and a solution that potentially gives another 50% of virtual address space on Windows. Importantly, using a 32-bit instance of Python (even with the OS being 64-bits) means that the maximum size file that can be ever be mapped into memory is around 1.1 GiB, and that number decreases as the python process lives and allocates/deallocates memory. That means the DB file you can open now might not be the DB file you can open in a hour, given the same process. On Windows, You can see the see the precise maximum mapping size by using the SysInternals tool VMMap, then selecting your Python process, then selecting the "free" row, then sorting by size. This is not a problem at all for 64-bit processes. Interface +++++++++ .. py:function:: lmdb.open(path, **kwargs) Shortcut for :py:class:`Environment` constructor. .. autofunction:: lmdb.version Environment class ################# .. autoclass:: lmdb.Environment :members: Database class ############## .. autoclass:: lmdb._Database :members: Transaction class ################# .. autoclass:: lmdb.Transaction :members: Cursor class ############ .. autoclass:: lmdb.Cursor :members: Exceptions ########## .. autoclass:: lmdb.Error () .. autoclass:: lmdb.KeyExistsError () .. autoclass:: lmdb.NotFoundError () .. autoclass:: lmdb.PageNotFoundError () .. autoclass:: lmdb.CorruptedError () .. autoclass:: lmdb.PanicError () .. autoclass:: lmdb.VersionMismatchError () .. autoclass:: lmdb.InvalidError () .. autoclass:: lmdb.MapFullError () .. autoclass:: lmdb.DbsFullError () .. autoclass:: lmdb.ReadersFullError () .. autoclass:: lmdb.TlsFullError () .. autoclass:: lmdb.TxnFullError () .. autoclass:: lmdb.CursorFullError () .. autoclass:: lmdb.PageFullError () .. autoclass:: lmdb.MapResizedError () .. autoclass:: lmdb.IncompatibleError () .. autoclass:: lmdb.BadDbiError () .. autoclass:: lmdb.BadRslotError () .. autoclass:: lmdb.BadTxnError () .. autoclass:: lmdb.BadValsizeError () .. autoclass:: lmdb.ReadonlyError () .. autoclass:: lmdb.InvalidParameterError () .. autoclass:: lmdb.LockError () .. autoclass:: lmdb.MemoryError () .. autoclass:: lmdb.DiskError () Command line tools ++++++++++++++++++ A rudimentary interface to most of the binding's functionality is provided. These functions are useful for e.g. backup jobs. :: $ python -mlmdb --help Usage: python -mlmdb [options] Basic tools for working with LMDB. copy: Consistent high speed backup an environment. python -mlmdb copy -e source.lmdb target.lmdb copyfd: Consistent high speed backup an environment to stdout. python -mlmdb copyfd -e source.lmdb > target.lmdb/data.mdb drop: Delete one or more sub-databases. python -mlmdb drop db1 dump: Dump one or more databases to disk in 'cdbmake' format. Usage: dump [db1=file1.cdbmake db2=file2.cdbmake] If no databases are given, dumps the main database to 'main.cdbmake'. edit: Add/delete/replace values from a database. python -mlmdb edit --set key=value --set-file key=/path \ --add key=value --add-file key=/path/to/file \ --delete key get: Read one or more values from a database. python -mlmdb get [ [ [..]]] readers: Display readers in the lock table python -mlmdb readers -e /path/to/db [-c] If -c is specified, clear stale readers. restore: Read one or more database from disk in 'cdbmake' format. python -mlmdb restore db1=file1.cdbmake db2=file2.cdbmake The special db name ":main:" may be used to indicate the main DB. rewrite: Re-create an environment using MDB_APPEND python -mlmdb rewrite -e src.lmdb -E dst.lmdb [ [ ..]] If no databases are given, rewrites only the main database. shell: Open interactive console with ENV set to the open environment. stat: Print environment statistics. warm: Read environment into page cache sequentially. watch: Show live environment statistics Options: -h, --help show this help message and exit -e ENV, --env=ENV Environment file to open -d DB, --db=DB Database to open (default: main) -r READ, --read=READ Open environment read-only -S MAP_SIZE, --map_size=MAP_SIZE Map size in megabytes (default: 10) -a, --all Make "dump" dump all databases -E TARGET_ENV, --target_env=TARGET_ENV Target environment file for "dumpfd" -x, --xxd Print values in xxd format -M MAX_DBS, --max-dbs=MAX_DBS Maximum open DBs (default: 128) --out-fd=OUT_FD "copyfd" command target fd Options for "copy" command: --compact Perform compaction while copying. Options for "edit" command: --set=SET List of key=value pairs to set. --set-file=SET_FILE List of key pairs to read from files. --add=ADD List of key=value pairs to add. --add-file=ADD_FILE List of key pairs to read from files. --delete=DELETE List of key=value pairs to delete. Options for "readers" command: -c, --clean Clean stale readers? (default: no) Options for "watch" command: --csv Generate CSV instead of terminal output. --interval=INTERVAL Interval size (default: 1sec) --window=WINDOW Average window size (default: 10) Implementation Notes ++++++++++++++++++++ Iterators ######### It was tempting to make :py:class:`Cursor` directly act as an iterator, however that would require overloading its `next()` method to mean something other than the natural definition of `next()` on an LMDB cursor. It would additionally introduce unintuitive state tied to the cursor that does not exist in LMDB: such as iteration direction and the type of value yielded. Instead a separate iterator is produced by `__iter__()`, `iternext()`, and `iterprev()`, with easily described semantics regarding how they interact with the cursor. Memsink Protocol ################ If the ``memsink`` package is available during installation of the CPython extension, then the resulting module's :py:class:`Transaction` object will act as a `source` for the `Memsink Protocol `_. This is an experimental protocol to allow extension of LMDB's zero-copy design outward to other C types, without requiring explicit management by the user. This design is a work in progress; if you have an application that would benefit from it, please leave a comment on the ticket above. Deviations from LMDB API ######################## `mdb_dbi_close()`: This is not exposed since its use is perilous at best. Users must ensure all activity on the DBI has ceased in all threads before closing the handle. Failure to do this could result in "impossible" errors, or the DBI slot becoming reused, resulting in operations being serviced by the wrong named database. Leaving handles open wastes a tiny amount of memory, which seems a good price to avoid subtle data corruption. :py:meth:`Cursor.replace`, :py:meth:`Cursor.pop`: There are no native equivalents to these calls, they just implement common operations in C to avoid a chunk of error prone, boilerplate Python from having to do the same. `mdb_set_compare()`, `mdb_set_dupsort()`: Neither function is exposed for a variety of reasons. In particular, neither can be supported safely, since exceptions cannot be propagated through LMDB callbacks, and can lead to database corruption if used incorrectly. Secondarily, since both functions are repeatedly invoked for every single lookup in the LMDB read path, most of the performance benefit of LMDB is lost by introducing Python interpreter callbacks to its hot path. There are a variety of workarounds that could make both functions useful, but not without either punishing binding users who do not require these features (especially on CFFI), or needlessly complicating the binding for what is essentially an edge case. In all cases where `mdb_set_compare()` might be useful, use of a special key encoding that encodes your custom order is usually desirable. See `issue #79 `_ for example approaches. The answer is not so clear for `mdb_set_dupsort()`, since a custom encoding there may necessitate wasted storage space, or complicating record decoding in an application's hot path. Please file a ticket if you think you have a use for `mdb_set_dupsort()`. Technology ########## The binding is implemented twice: once using CFFI, and once as native C extension. This is since a CFFI binding is necessary for PyPy, but its performance on CPython is very poor. For good performance on CPython, only Cython and a native extension are viable options. Initially Cython was used, however this was abandoned due to the effort and relative mismatch involved compared to writing a native extension. Invalidation lists ################## Much effort has gone into avoiding crashes: when some object is invalidated (e.g. due to :py:meth:`Transaction.abort`), child objects are updated to ensure they don't access memory of the no-longer-existent resource, and that they correspondingly free their own resources. On CPython this is accomplished by weaving a linked list into all ``PyObject`` structures. This avoids the need to maintain a separate heap-allocated structure, or produce excess ``weakref`` objects (which internally simply manage their own lists). With CFFI this isn't possible. Instead each object has a ``_deps`` dict that maps dependent object IDs to the corresponding objects. Weakrefs are avoided since they are very inefficient on PyPy. Prior to invalidation ``_deps`` is walked to notify each dependent that the resource is about to disappear. Finally, each object may either store an explicit ``_invalid`` attribute and check it prior to every operation, or rely on another mechanism to avoid the crash resulting from using an invalidated resource. Instead of performing these explicit tests continuously, on CFFI a magic ``Some_LMDB_Resource_That_Was_Deleted_Or_Closed`` object is used. During invalidation, all native handles are replaced with an instance of this object. Since CFFI cannot convert the magical object to a C type, any attempt to make a native call will raise ``TypeError`` with a nice descriptive type name indicating the problem. Hacky but efficient, and mission accomplished. Argument parsing ################ The CPython module `parse_args()` may look "special", at best. The alternative `PyArg_ParseTupleAndKeywords` performs continuous heap allocations and string copies, resulting in a difference of 10,000 lookups/sec slowdown in a particular microbenchmark. The 10k/sec slowdown could potentially disappear given a sufficiently large application, so this decision needs revisited at some stage. ChangeLog +++++++++ .. include:: ../ChangeLog :literal: License +++++++ .. include:: ../LICENSE :literal: py-lmdb-py-lmdb_1.4.1/docs/themes/000077500000000000000000000000001441346354400167325ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/docs/themes/acid/000077500000000000000000000000001441346354400176325ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/docs/themes/acid/conf.py.conf000066400000000000000000000012521441346354400220550ustar00rootroot00000000000000# -*- coding: utf-8 -*- import sys, os extensions = [] templates_path = ['{{ template_dir }}', 'templates', '_templates', '.templates'] source_suffix = '{{ project.suffix }}' master_doc = 'index' project = u'{{ project.name }}' copyright = u'{{ project.copyright }}' version = '{{ project.version }}' release = '{{ project.version }}' exclude_patterns = ['_build'] pygments_style = 'sphinx' html_theme = '{{ project.theme }}' html_theme_path = ['.', '_theme', '.theme'] htmlhelp_basename = '{{ project.slug }}' file_insertion_enabled = False latex_documents = [ ('index', '{{ project.slug }}.tex', u'{{ project.name }} Documentation', u'{{ project.copyright }}', 'manual'), ] py-lmdb-py-lmdb_1.4.1/docs/themes/acid/layout.html000066400000000000000000000074141441346354400220430ustar00rootroot00000000000000 {# Strip out the default script files we provide, but keep some, like mathjax. #} {% set script_files = [] %} {%- set url_root = pathto('', 1) %} {%- if url_root == '#' %}{% set url_root = '' %}{% endif %} {%- set titlesuffix = " — "|safe + docstitle|e %} {%- macro sidebar() %}
{%- if logo %} {%- endif %} {% if theme_github_repo %}

GitHub Repository

{% endif %}

Docs for last release

Docs for master branch

{%- block sidebartoc %} {%- include "localtoc.html" %} {%- endblock %} {%- block sidebarrel %} {%- include "relations.html" %} {%- endblock %}
{%- endmacro %} {{ title|striptags|e }}{{ titlesuffix }} {%- for cssfile in css_files %} {%- endfor %} {%- for scriptfile in script_files %} {%- endfor %} {%- block content %} {%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
{%- block document %}
{% block body %} {% endblock %}
{%- endblock %} {%- block sidebar2 %}{{ sidebar() }}{% endblock %}
{%- endblock %} {% macro relbar() %}{% endmacro %} {%- block relbar2 %}{{ relbar() }}{% endblock %} {% if not using_theme %} {# Keep this here, so that the RTD logo doesn't stomp on the bottom of the theme. #}


{% endif %} py-lmdb-py-lmdb_1.4.1/docs/themes/acid/sourcelink.html000066400000000000000000000000261441346354400226740ustar00rootroot00000000000000{% if 0 %}{% endif %} py-lmdb-py-lmdb_1.4.1/docs/themes/acid/static/000077500000000000000000000000001441346354400211215ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/docs/themes/acid/static/acid.css000066400000000000000000000621471441346354400225450ustar00rootroot00000000000000/* Based on rtd.css, copyright 2007-2010 Sphinx team. */ /* RTD colors * light blue: #e8ecef * medium blue: #8ca1af * dark blue: #465158 * dark grey: #444444 * * white hover: #d1d9df; * medium blue hover: #697983; * green highlight: #8ecc4c * light blue (project bar): #e8ecef */ div.clearer { clear: both; } div.related { width: 100%; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } /* -- sidebar --------------------------------------------------------------- */ div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 250px; margin-left: -100%; font-size: 90%; } div.sphinxsidebar ul { list-style: none; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #98dbcc; font-family: sans-serif; font-size: 1em; } div.sphinxsidebar #searchbox input[type="text"] { width: 170px; } div.sphinxsidebar #searchbox input[type="submit"] { width: 30px; } img { border: 0; } /* -- search page ----------------------------------------------------------- */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #888; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* -- index page ------------------------------------------------------------ */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* -- general index --------------------------------------------------------- */ table.indextable { width: 100%; } table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } div.modindex-jumpbox { border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; margin: 1em 0 1em 0; padding: 0.4em; } div.genindex-jumpbox { border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; margin: 1em 0 1em 0; padding: 0.4em; } /* -- general body styles --------------------------------------------------- */ a.headerlink { visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } p.rubric { margin-top: 30px; font-weight: bold; } img.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } img.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } img.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } .align-left { text-align: left; } .align-center { text-align: center; } .align-right { text-align: right; } /* -- sidebars -------------------------------------------------------------- */ div.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px 7px 0 7px; background-color: #ffe; width: 40%; float: right; } p.sidebar-title { font-weight: bold; } /* -- topics ---------------------------------------------------------------- */ div.topic { border: 1px solid #ccc; padding: 7px 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* -- admonitions ----------------------------------------------------------- */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; } div.body p.centered { text-align: center; margin-top: 25px; } /* -- tables ---------------------------------------------------------------- */ table.docutils { border: 0; border-collapse: collapse; } table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #aaa; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } th { text-align: left; padding-right: 5px; } table.citation { border-left: solid 1px gray; margin-left: 1px; } table.citation td { border-bottom: none; } /* -- other body styles ----------------------------------------------------- */ ol.arabic { list-style: decimal; } ol.loweralpha { list-style: lower-alpha; } ol.upperalpha { list-style: upper-alpha; } ol.lowerroman { list-style: lower-roman; } ol.upperroman { list-style: upper-roman; } dl { margin-bottom: 15px; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } dt:target, .highlighted { background-color: #fbe54e; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } .refcount { color: #060; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } .system-message { background-color: #fda; padding: 5px; border: 3px solid red; } .footnote:target { background-color: #ffa; } .line-block { display: block; margin-top: 1em; margin-bottom: 1em; } .line-block .line-block { margin-top: 0; margin-bottom: 0; margin-left: 1.5em; } .guilabel, .menuselection { font-family: sans-serif; } .accelerator { text-decoration: underline; } .classifier { font-style: oblique; } abbr, acronym { border-bottom: dotted 1px; cursor: help; } /* -- code displays --------------------------------------------------------- */ pre { overflow: auto; overflow-y: hidden; /* fixes display issues on Chrome browsers */ } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .viewcode-link { float: right; } .viewcode-back { float: right; font-family: sans-serif; } div.viewcode-block:target { margin: -1px -10px; padding: 0 10px; } /* -- math display ---------------------------------------------------------- */ img.math { vertical-align: middle; } div.body div.math p { text-align: center; } span.eqno { float: right; } /* -- printout stylesheet --------------------------------------------------- */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0 !important; width: 100%; } div.sphinxsidebar, div.related, div.footer, #top-link { display: none; } } /* PAGE LAYOUT -------------------------------------------------------------- */ body { font: 100%/1.5 "ff-meta-web-pro-1","ff-meta-web-pro-2",Arial,"Helvetica Neue",sans-serif; text-align: center; color: black; background-color: #465158; padding: 0; margin: 0; } div.document { text-align: left; background-color: #e8ecef; } div.bodywrapper { background-color: #ffffff; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; margin: 0 0 0 16em; } div.body { margin: 0; padding: 0.5em 1.3em; min-width: 20em; } div.related { font-size: 1em; background-color: #465158; } div.documentwrapper { float: left; width: 100%; background-color: #e8ecef; } /* HEADINGS --------------------------------------------------------------- */ h1 { margin: 0; padding: 0.7em 0 0.3em 0; font-size: 1.5em; line-height: 1.15; color: #111; clear: both; } h2 { margin: 2em 0 0.2em 0; font-size: 1.35em; padding: 0; color: #465158; } h3 { margin: 1em 0 -0.3em 0; font-size: 1.2em; color: #6c818f; } div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { color: black; } h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { display: none; margin: 0 0 0 0.3em; padding: 0 0.2em 0 0.2em; color: #aaa !important; } h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor { display: inline; } h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, h5 a.anchor:hover, h6 a.anchor:hover { color: #777; background-color: #eee; } /* LINKS ------------------------------------------------------------------ */ /* Normal links get a pseudo-underline */ a { color: #444; text-decoration: none; border-bottom: 1px solid #ccc; } /* Links in sidebar, TOC, index trees and tables have no underline */ .sphinxsidebar a, .toctree-wrapper a, .indextable a, #indices-and-tables a { color: #444; text-decoration: none; border-bottom: none; } /* Most links get an underline-effect when hovered */ a:hover, div.toctree-wrapper a:hover, .indextable a:hover, #indices-and-tables a:hover { color: #111; text-decoration: none; border-bottom: 1px solid #111; } /* Footer links */ div.footer a { color: #86989B; text-decoration: none; border: none; } div.footer a:hover { color: #a6b8bb; text-decoration: underline; border: none; } /* Permalink anchor (subtle grey with a red hover) */ div.body a.headerlink { color: #ccc; font-size: 1em; margin-left: 6px; padding: 0 4px 0 4px; text-decoration: none; border: none; } div.body a.headerlink:hover { color: #c60f0f; border: none; } /* NAVIGATION BAR --------------------------------------------------------- */ div.related ul { height: 2.5em; } div.related ul li { margin: 0; padding: 0.65em 0; float: left; display: block; color: white; /* For the >> separators */ font-size: 0.8em; } div.related ul li.right { float: right; margin-right: 5px; color: transparent; /* Hide the | separators */ } /* "Breadcrumb" links in nav bar */ div.related ul li a { order: none; background-color: inherit; font-weight: bold; margin: 6px 0 6px 4px; line-height: 1.75em; color: #ffffff; padding: 0.4em 0.8em; border: none; border-radius: 3px; } /* previous / next / modules / index links look more like buttons */ div.related ul li.right a { margin: 0.375em 0; background-color: #697983; text-shadow: 0 1px rgba(0, 0, 0, 0.5); border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } /* All navbar links light up as buttons when hovered */ div.related ul li a:hover { background-color: #8ca1af; color: #ffffff; text-decoration: none; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } /* Take extra precautions for tt within links */ a tt, div.related ul li a tt { background: inherit !important; color: inherit !important; } /* SIDEBAR ---------------------------------------------------------------- */ div.sphinxsidebarwrapper { padding: 0; } div.sphinxsidebar { margin: 0; margin-left: -100%; float: left; top: 3em; left: 0; padding: 0 1em; width: 14em; font-size: 1em; text-align: left; background-color: #e8ecef; } div.sphinxsidebar img { max-width: 12em; } div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p.logo { margin: 1.2em 0 0.3em 0; font-size: 1em; padding: 0; color: #222222; font-family: "ff-meta-web-pro-1", "ff-meta-web-pro-2", "Arial", "Helvetica Neue", sans-serif; } div.sphinxsidebar h3 a { color: #444444; } div.sphinxsidebar ul, div.sphinxsidebar p { margin-top: 0; padding-left: 0; line-height: 130%; background-color: #e8ecef; } /* No bullets for nested lists, but a little extra indentation */ div.sphinxsidebar ul ul { list-style-type: none; margin-left: 1.5em; padding: 0; } /* A little top/bottom padding to prevent adjacent links' borders * from overlapping each other */ div.sphinxsidebar ul li { padding: 1px 0; } /* A little left-padding to make these align with the ULs */ div.sphinxsidebar p.topless { padding-left: 0 0 0 1em; } /* Make these into hidden one-liners */ div.sphinxsidebar ul li, div.sphinxsidebar p.topless { white-space: nowrap; overflow: hidden; } /* ...which become visible when hovered */ div.sphinxsidebar ul li:hover, div.sphinxsidebar p.topless:hover { overflow: visible; } /* Search text box and "Go" button */ #searchbox { margin-top: 2em; margin-bottom: 1em; background: #ddd; padding: 0.5em; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } #searchbox h3 { margin-top: 0; } /* Make search box and button abut and have a border */ input, div.sphinxsidebar input { border: 1px solid #999; float: left; } /* Search textbox */ input[type="text"] { margin: 0; padding: 0 3px; height: 20px; width: 144px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-topleft: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; } /* Search button */ input[type="submit"] { margin: 0 0 0 -1px; /* -1px prevents a double-border with textbox */ height: 22px; color: #444; background-color: #e8ecef; padding: 1px 4px; font-weight: bold; border-top-right-radius: 3px; border-bottom-right-radius: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; } input[type="submit"]:hover { color: #ffffff; background-color: #8ecc4c; } div.sphinxsidebar p.searchtip { clear: both; padding: 0.5em 0 0 0; background: #ddd; color: #666; font-size: 0.9em; } /* Sidebar links are unusual */ div.sphinxsidebar li a, div.sphinxsidebar p a { background: #e8ecef; /* In case links overlap main content */ border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border: 1px solid transparent; /* To prevent things jumping around on hover */ padding: 0 5px 0 5px; } div.sphinxsidebar li a:hover, div.sphinxsidebar p a:hover { color: #111; text-decoration: none; border: 1px solid #888; } div.sphinxsidebar p.logo a { border: 0; } /* Tweak any link appearing in a heading */ div.sphinxsidebar h3 a { } /* OTHER STUFF ------------------------------------------------------------ */ cite, code, tt { font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.01em; } tt { background-color: #f2f2f2; color: #444; } tt.descname, tt.descclassname, tt.xref { border: 0; } hr { border: 1px solid #abc; margin: 2em; } pre, #_fontwidthtest { font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; margin: 1em 2em; font-size: 0.95em; letter-spacing: 0.015em; line-height: 120%; padding: 0.5em; border: 1px solid #ccc; background-color: #eee; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } pre a { color: inherit; text-decoration: underline; } td.linenos pre { margin: 1em 0em; } td.code pre { margin: 1em 0em; } div.quotebar { background-color: #f8f8f8; max-width: 250px; float: right; padding: 2px 7px; border: 1px solid #ccc; } div.topic { background-color: #f8f8f8; } table { border-collapse: collapse; margin: 0 -0.5em 0 -0.5em; } table td, table th { padding: 0.2em 0.5em 0.2em 0.5em; } /* ADMONITIONS AND WARNINGS ------------------------------------------------- */ /* Shared by admonitions, warnings and sidebars */ div.admonition, div.warning, div.sidebar { font-size: 0.9em; margin: 2em; padding: 0; /* border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; */ } div.admonition p, div.warning p, div.sidebar p { margin: 0.5em 1em 0.5em 1em; padding: 0; } div.admonition pre, div.warning pre, div.sidebar pre { margin: 0.4em 1em 0.4em 1em; } div.admonition p.admonition-title, div.warning p.admonition-title, div.sidebar p.sidebar-title { margin: 0; padding: 0.1em 0 0.1em 0.5em; color: white; font-weight: bold; font-size: 1.1em; text-shadow: 0 1px rgba(0, 0, 0, 0.5); } div.admonition ul, div.admonition ol, div.warning ul, div.warning ol, div.sidebar ul, div.sidebar ol { margin: 0.1em 0.5em 0.5em 3em; padding: 0; } /* Admonitions and sidebars only */ div.admonition, div.sidebar { border: 1px solid #609060; background-color: #e9ffe9; } div.admonition p.admonition-title, div.sidebar p.sidebar-title { background-color: #70A070; border-bottom: 1px solid #609060; } /* Warnings only */ div.warning { border: 1px solid #900000; background-color: #ffe9e9; } div.warning p.admonition-title { background-color: #b04040; border-bottom: 1px solid #900000; } /* Sidebars only */ div.sidebar { max-width: 30%; } div.versioninfo { margin: 1em 0 0 0; border: 1px solid #ccc; background-color: #DDEAF0; padding: 8px; line-height: 1.3em; font-size: 0.9em; } .viewcode-back { font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } dl { margin: 1em 0 2.5em 0; } dl dt { font-style: italic; } dl dd { color: rgb(68, 68, 68); font-size: 0.95em; } /* Highlight target when you click an internal link */ dt:target { background: #ffe080; } /* Don't highlight whole divs */ div.highlight { background: transparent; } /* But do highlight spans (so search results can be highlighted) */ span.highlight { background: #ffe080; } div.footer { background-color: #465158; color: #eeeeee; padding: 0 2em 2em 2em; clear: both; font-size: 0.8em; text-align: center; } p { margin: 0.8em 0 0.5em 0; } .section p img.math { margin: 0; } .section p img { margin: 1em 2em; } /* MOBILE LAYOUT -------------------------------------------------------------- */ @media screen and (max-width: 600px) { h1, h2, h3, h4, h5 { position: relative; } ul { padding-left: 1.25em; } div.bodywrapper a.headerlink, #indices-and-tables h1 a { color: #e6e6e6; font-size: 80%; float: right; line-height: 1.8; position: absolute; right: -0.7em; visibility: inherit; } div.bodywrapper h1 a.headerlink, #indices-and-tables h1 a { line-height: 1.5; } pre { font-size: 0.7em; overflow: auto; word-wrap: break-word; white-space: pre-wrap; } div.related ul { height: 2.5em; padding: 0; text-align: left; } div.related ul li { clear: both; color: #465158; padding: 0.2em 0; } div.related ul li:last-child { border-bottom: 1px dotted #8ca1af; padding-bottom: 0.4em; margin-bottom: 1em; width: 100%; } div.related ul li a { color: #465158; padding-right: 0; } div.related ul li a:hover { background: inherit; color: inherit; } div.related ul li.right { clear: none; padding: 0.65em 0; margin-bottom: 0.5em; } div.related ul li.right a { color: #fff; padding-right: 0.8em; } div.related ul li.right a:hover { background-color: #8ca1af; } div.body { clear: both; min-width: 0; word-wrap: break-word; } div.bodywrapper { margin: 0 0 0 0; } div.sphinxsidebar { float: none; margin: 0; width: auto; } div.sphinxsidebar input[type="text"] { height: 2em; line-height: 2em; width: 70%; } div.sphinxsidebar input[type="submit"] { height: 2em; margin-left: 0.5em; width: 20%; } div.sphinxsidebar p.searchtip { background: inherit; margin-bottom: 1em; } div.sphinxsidebar ul li, div.sphinxsidebar p.topless { white-space: normal; } .bodywrapper img { display: block; margin-left: auto; margin-right: auto; max-width: 100%; } div.documentwrapper { float: none; } div.admonition, div.warning, pre, blockquote { margin-left: 0em; margin-right: 0em; } .body p img { margin: 0; } #searchbox { background: transparent; } .related:not(:first-child) li { display: none; } .related:not(:first-child) li.right { display: block; } div.footer { padding: 1em; } .rtd_doc_footer .rtd-badge { float: none; margin: 1em auto; position: static; } .rtd_doc_footer .rtd-badge.revsys-inline { margin-right: auto; margin-bottom: 2em; } table.indextable { display: block; width: auto; } .indextable tr { display: block; } .indextable td { display: block; padding: 0; width: auto !important; } .indextable td dt { margin: 1em 0; } ul.search { margin-left: 0.25em; } ul.search li div.context { font-size: 90%; line-height: 1.1; margin-bottom: 1; margin-left: 0; } } #version_menu, .rtd-badge.rtd { -webkit-transition: all 0.25s 0.75s; transition: all 0.25s 0.75s; } .footer_popout:hover #version_menu, .footer_popout:hover .rtd-badge.rtd { -webkit-transition: all 0.25s 0s; transition: all 0.25s 0s; } .rtd-badge { position: fixed; display: block; bottom: 5px; height: 40px; text-indent: -9999em; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 rgba(255, 255, 255, 0.2) inset; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 rgba(255, 255, 255, 0.2) inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 rgba(255, 255, 255, 0.2) inset; } #version_menu { position: fixed; visibility: hidden; opacity: 0; bottom: 11px; right: 47px; list-style-type: none; margin: 0; } .footer_popout:hover #version_menu { visibility: visible; opacity: 1; right: 166px; } #version_menu li { display: block; float: right; } #version_menu li a { display: block; padding: 6px 10px 4px 10px; margin: 7px 7px 0 0; font-weight: bold; font-size: 14px; height: 20px; line-height: 17px; text-decoration: none; color: #fff; background: #8ca1af url(http://media.readthedocs.org/images/gradient-light.png) bottom left repeat-x; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; box-shadow: 0 1px 1px #465158; -moz-box-shadow: 0 1px 1px #465158; -webkit-box-shadow: 0 1px 1px #465158; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5); } #version_menu li a:hover { text-decoration: none; background-color: #697983; box-shadow: 0 1px 0px #465158; -moz-box-shadow: 0 1px 0px #465158; -webkit-box-shadow: 0 1px 0px #465158; } .rtd-badge.rtd { background: #3b4449 url(http://media.readthedocs.org/images/badge-rtd.png) scroll top left no-repeat; border: 1px solid #282E32; width: 41px; right: 5px; } .footer_popout:hover .rtd-badge.rtd { width: 160px; } .rtd-badge.revsys { display: none; } .rtd-badge.revsys-inline-sponsored { display none; } .rtd-badge.revsys-inline { display: none; } .rtd_doc_footer { background-color: #465158;} py-lmdb-py-lmdb_1.4.1/docs/themes/acid/theme.conf000066400000000000000000000013371441346354400216070ustar00rootroot00000000000000[theme] inherit = basic stylesheet = acid.css pygments_style = sphinx [options] github_repo = rightsidebar = false stickysidebar = false collapsiblesidebar = false externalrefs = false footerbgcolor = #11303d footertextcolor = #ffffff sidebarbgcolor = #1c4e63 sidebarbtncolor = #3c6e83 sidebartextcolor = #ffffff sidebarlinkcolor = #98dbcc relbarbgcolor = #133f52 relbartextcolor = #ffffff relbarlinkcolor = #ffffff bgcolor = #ffffff textcolor = #000000 headbgcolor = #f2f2f2 headtextcolor = #20435c headlinkcolor = #c60f0f linkcolor = #355f7c visitedlinkcolor = #355f7c codebgcolor = #eeffcc codetextcolor = #333333 bodyfont = sans-serif headfont = 'Trebuchet MS', sans-serif py-lmdb-py-lmdb_1.4.1/examples/000077500000000000000000000000001441346354400163335ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/examples/address-book.py000066400000000000000000000041651441346354400212700ustar00rootroot00000000000000 import lmdb # Open (and create if necessary) our database environment. Must specify # max_dbs=... since we're opening subdbs. env = lmdb.open('/tmp/address-book.lmdb', max_dbs=10) # Now create subdbs for home and business addresses. home_db = env.open_db(b'home') business_db = env.open_db(b'business') # Add some telephone numbers to each DB: with env.begin(write=True) as txn: txn.put(b'mum', b'012345678', db=home_db) txn.put(b'dad', b'011232211', db=home_db) txn.put(b'dentist', b'044415121', db=home_db) txn.put(b'hospital', b'078126321', db=home_db) txn.put(b'vendor', b'0917465628', db=business_db) txn.put(b'customer', b'0553211232', db=business_db) txn.put(b'coworker', b'0147652935', db=business_db) txn.put(b'boss', b'0123151232', db=business_db) txn.put(b'manager', b'0644810485', db=business_db) # Iterate each DB to show the keys are sorted: with env.begin() as txn: for name, db in ('home', home_db), ('business', business_db): print('DB:', name) for key, value in txn.cursor(db=db): print(' ', key, value) print() # Now let's update some phone numbers. We can specify the default subdb when # starting the transaction, rather than pass it in every time: with env.begin(write=True, db=home_db) as txn: print('Updating number for dentist') txn.put(b'dentist', b'099991231') print('Deleting number for hospital') txn.delete(b'hospital') print() print('Home DB is now:') for key, value in txn.cursor(): print(' ', key, value) print() # Now let's look up a number in the business DB with env.begin(db=business_db) as txn: print('Boss telephone number:', txn.get(b'boss')) print() # We got fired, time to delete all keys from the business DB. with env.begin(write=True) as txn: print('Deleting all numbers from business DB:') txn.drop(business_db, delete=False) print('Adding number for recruiter to business DB') txn.put(b'recruiter', b'04123125324', db=business_db) print('Business DB is now:') for key, value in txn.cursor(db=business_db): print(' ', key, value) print() py-lmdb-py-lmdb_1.4.1/examples/dirtybench-gdbm.py000066400000000000000000000072331441346354400217540ustar00rootroot00000000000000 from pprint import pprint import os import shutil import tempfile from time import time as now import random import gdbm MAP_SIZE = 1048576 * 400 DB_PATH = '/ram/testdb-gdbm' if os.path.exists('/ram'): DB_PATH = '/ram/testdb-gdbm' else: DB_PATH = tempfile.mktemp(prefix='dirtybench-gdbm') def x(): big = '' # '*' * 400 if os.path.exists(DB_PATH): os.unlink(DB_PATH) t0 = now() words = set(file('/usr/share/dict/words').readlines()) words.update([w.upper() for w in words]) words.update([w[::-1] for w in words]) words.update([w[::-1].upper() for w in words]) words.update(['-'.join(w) for w in words]) #words.update(['+'.join(w) for w in words]) #words.update(['/'.join(w) for w in words]) words = list(words) alllen = sum(len(w) for w in words) avglen = alllen / len(words) print 'permutate %d words avglen %d took %.2fsec' % (len(words), avglen, now()-t0) getword = iter(words).next env = gdbm.open(DB_PATH, 'c') run = True t0 = now() last = t0 while run: try: for _ in xrange(50000): word = getword() env[word] = big or word except StopIteration: run = False t1 = now() if (t1 - last) > 2: print '%.2fs (%d/sec)' % (t1-t0, len(words)/(t1-t0)) last = t1 t1 = now() print 'done all %d in %.2fs (%d/sec)' % (len(words), t1-t0, len(words)/(t1-t0)) last = t1 print print t0 = now() lst = sum(env[k] and 1 for k in env.keys()) t1 = now() print 'enum %d (key, value) pairs took %.2f sec' % ((lst), t1-t0) t0 = now() lst = sum(1 or env[k] for k in reversed(env.keys())) t1 = now() print 'reverse enum %d (key, value) pairs took %.2f sec' % ((lst), t1-t0) t0 = now() for word in words: env[word] t1 = now() print 'rand lookup all keys %.2f sec (%d/sec)' % (t1-t0, lst/(t1-t0)) t0 = now() for word in words: hash(env[word]) t1 = now() print 'per txn rand lookup+hash all keys %.2f sec (%d/sec)' % (t1-t0, lst/(t1-t0)) t0 = now() for word in words: hash(env[word]) t1 = now() print 'rand lookup+hash all keys %.2f sec (%d/sec)' % (t1-t0, lst/(t1-t0)) t0 = now() for word in words: env[word] t1 = now() print 'rand lookup all buffers %.2f sec (%d/sec)' % (t1-t0, lst/(t1-t0)) t0 = now() for word in words: hash(env[word]) t1 = now() print 'rand lookup+hash all buffers %.2f sec (%d/sec)' % (t1-t0, lst/(t1-t0)) # # get+put # getword = iter(sorted(words)).next run = True t0 = now() last = t0 while run: try: for _ in xrange(50000): word = getword() old = env[word] env[word] = word except StopIteration: run = False t1 = now() if (t1 - last) > 2: print '%.2fs (%d/sec)' % (t1-t0, len(words)/(t1-t0)) last = t1 t1 = now() print 'get+put all %d in %.2fs (%d/sec)' % (len(words), t1-t0, len(words)/(t1-t0)) last = t1 # # REPLACE # getword = iter(sorted(words)).next run = True t0 = now() last = t0 while run: try: for _ in xrange(50000): word = getword() old = env[word] except StopIteration: run = False t1 = now() if (t1 - last) > 2: print '%.2fs (%d/sec)' % (t1-t0, len(words)/(t1-t0)) last = t1 t1 = now() print 'replace all %d in %.2fs (%d/sec)' % (len(words), t1-t0, len(words)/(t1-t0)) last = t1 x() py-lmdb-py-lmdb_1.4.1/examples/dirtybench.py000066400000000000000000000157151441346354400210510ustar00rootroot00000000000000 from pprint import pprint import atexit import gzip import itertools import os import shutil import sys import tempfile from time import time as now import random import lmdb MAP_SIZE = 1048576 * 400 DB_PATH = '/ram/testdb' USE_SPARSE_FILES = sys.platform != 'darwin' if os.path.exists('/ram'): DB_PATH = '/ram/testdb' else: DB_PATH = tempfile.mktemp(prefix='dirtybench') env = None @atexit.register def cleanup(): if env: env.close() if os.path.exists(DB_PATH): shutil.rmtree(DB_PATH) def reopen_env(**kwargs): if env: env.close() if os.path.exists(DB_PATH): shutil.rmtree(DB_PATH) return lmdb.open(DB_PATH, map_size=MAP_SIZE, writemap=USE_SPARSE_FILES, **kwargs) def case(title, **params): def wrapper(func): t0 = now() count = func() t1 = now() print('%40s: %2.3fs %8d/sec' % (title, t1-t0, count/(t1-t0))) return func return wrapper def x(): big = '' # '*' * 400 t0 = now() words_path = os.path.join(os.path.dirname(__file__), 'words.gz') words = set(gzip.open(words_path).read().splitlines()) words.update([w.upper() for w in words]) words.update([w[::-1] for w in words]) words.update([w[::-1].upper() for w in words]) words.update(['-'.join(w) for w in words]) #words.update(['+'.join(w) for w in words]) #words.update(['/'.join(w) for w in words]) words = list(words) alllen = sum(len(w) for w in words) avglen = alllen / len(words) print 'permutate %d words avglen %d took %.2fsec' % (len(words), avglen, now()-t0) print 'DB_PATH:', DB_PATH words_sorted = sorted(words) items = [(w, big or w) for w in words] items_sorted = [(w, big or w) for w in words_sorted] global env env = reopen_env() @case('insert') def test(): with env.begin(write=True) as txn: for word in words: txn.put(word, big or word) return len(words) st = env.stat() print print 'stat:', st print 'k+v size %.2fkb avg %d, on-disk size: %.2fkb avg %d' %\ ((2*alllen) / 1024., (2*alllen)/len(words), (st['psize'] * st['leaf_pages']) / 1024., (st['psize'] * st['leaf_pages']) / len(words)) print @case('enum (key, value) pairs') def test(): with env.begin() as txn: return sum(1 for _ in txn.cursor()) @case('reverse enum (key, value) pairs') def test(): with env.begin() as txn: return sum(1 for _ in txn.cursor().iterprev()) @case('enum (key, value) buffers') def test(): with env.begin(buffers=True) as txn: return sum(1 for _ in txn.cursor()) print @case('rand lookup') def test(): with env.begin() as txn: for word in words: txn.get(word) return len(words) @case('per txn rand lookup') def test(): for word in words: with env.begin() as txn: txn.get(word) return len(words) @case('rand lookup+hash') def test(): with env.begin() as txn: for word in words: hash(txn.get(word)) return len(words) @case('rand lookup buffers') def test(): with env.begin(buffers=True) as txn: for word in words: txn.get(word) return len(words) @case('rand lookup+hash buffers') def test(): with env.begin(buffers=True) as txn: for word in words: hash(txn.get(word)) return len(words) @case('rand lookup buffers (cursor)') def test(): with env.begin(buffers=True) as txn: cursget = txn.cursor().get for word in words: cursget(word) return len(words) print @case('get+put') def test(): with env.begin(write=True) as txn: for word in words: txn.get(word) txn.put(word, word) return len(words) @case('replace') def test(): with env.begin(write=True) as txn: for word in words: txn.replace(word, word) return len(words) @case('get+put (cursor)') def test(): with env.begin(write=True) as txn: with txn.cursor() as cursor: for word in words: cursor.get(word) cursor.put(word, word) return len(words) @case('replace (cursor)') def test(): with env.begin(write=True) as txn: with txn.cursor() as cursor: for word in words: cursor.replace(word, word) return len(words) print env = reopen_env() @case('insert (rand)') def test(): with env.begin(write=True) as txn: for word in words: txn.put(word, big or word) return len(words) env = reopen_env() @case('insert (seq)') def test(): with env.begin(write=True) as txn: for word in words_sorted: txn.put(word, big or word) return len(words) env = reopen_env() @case('insert (rand), reuse cursor') def test(): with env.begin(write=True) as txn: curs = txn.cursor() for word in words: curs.put(word, big or word) return len(words) env = reopen_env() @case('insert (seq), reuse cursor') def test(): with env.begin(write=True) as txn: curs = txn.cursor() for word in words_sorted: curs.put(word, big or word) return len(words) env = reopen_env() @case('insert, putmulti') def test(): with env.begin(write=True) as txn: txn.cursor().putmulti(items) return len(words) env = reopen_env() @case('insert, putmulti+generator') def test(): with env.begin(write=True) as txn: txn.cursor().putmulti((w, big or w) for w in words) return len(words) print env = reopen_env() @case('append') def test(): with env.begin(write=True) as txn: for word in words_sorted: txn.put(word, big or word, append=True) return len(words) env = reopen_env() @case('append, reuse cursor') def test(): with env.begin(write=True) as txn: curs = txn.cursor() for word in words_sorted: curs.put(word, big or word, append=True) return len(words) env = reopen_env() @case('append+putmulti') def test(): with env.begin(write=True) as txn: txn.cursor().putmulti(items_sorted, append=True) return len(words) print st = env.stat() print 'stat:', st print 'k+v size %.2fkb avg %d, on-disk size: %.2fkb avg %d' %\ ((2*alllen) / 1024., (2*alllen)/len(words), (st['psize'] * st['leaf_pages']) / 1024., (st['psize'] * st['leaf_pages']) / len(words)) x() py-lmdb-py-lmdb_1.4.1/examples/keystore/000077500000000000000000000000001441346354400202005ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/examples/keystore/README.md000066400000000000000000000027431441346354400214650ustar00rootroot00000000000000 ## Ultra minimal async IO example This requires a recent version of Twisted to run. From the parent directory, execute it as: python -m keystore.main It wraps LMDB in a very basic REST API, demonstrating how to handle database IO using a thread pool without blocking the main thread's select loop. The internals are structured relatively sanely, but the `keystore.lmdb` implementation itself is fairly horrid: a single GET will always cause a large amount of machinery to run. However, given a large and slow enough (non RAM, spinning rust) DB, this example will successfully keep the main loop responsive at all times even though multiple LMDB `mdb_get()` invocations are running concurrently. Not shown here, but may be added sometime later to demonstrate the techniques: * Combining multiple reads into a single transaction and context switch. * Combining writes into a single write transaction and context switch. ## Calling LMDB synchronously This example never calls LMDB directly from the main loop, even though in some restricted circumstances that may be completely safe. Such a situation might look like: * The database is guaranteed to always be in RAM. * Database writes are never contended. * Disk IO is very fast, or `sync=False` is used. In almost every case, it is likely better to design an application that handles the possibility that calls into LMDB will trigger slow IO, if not now then at some point in 10 years when all the original developers have left your project. py-lmdb-py-lmdb_1.4.1/examples/keystore/__init__.py000066400000000000000000000000001441346354400222770ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/examples/keystore/interfaces.py000066400000000000000000000061131441346354400226760ustar00rootroot00000000000000 from __future__ import absolute_import import zope.interface class IKeyStoreSync(zope.interface.Interface): def get(key): """ Fetch a key @return None or bytestring value. """ def put(key, value): """ Create or overwrite a key. @param key Bytestring key. @param value Bytestring alue. @return deferred producing None or error. """ def delete(key): """ Delete a key. @param key Bytestring key. @return deferred producing None or error. """ def seek(key): """ Seek to a key, or the next highest key. @param key Bytestring key. """ def first(): """ Seek to the first key in the store. @return True if positioned on a key. """ def last(): """ Seek to the last key in the store. @return True if positioned on a key. """ def next(): """ Seek to the next key in the store. @return True if positioned on a key. """ def prev(): """ Seek to the previous key in the store. @return True if positioned on a key. """ class IKeyStore(zope.interface.Interface): def get(key): """ Fetch a key. @return deferred producing None or bytestring value. """ def getKeys(key, count): """ Fetch a list of keys. @param key Bytestring first key to return, or None for first/last key in space. @param count Number of keys including first key to return. """ def getKeysReverse(key, count): """ Fetch a list of keys, walking in reverse. @param key Bytestring first key to return, or None for first/last key in space. @param count Number of keys including first key to return. """ def getItems(key, count): """ Fetch a list of (key, value) tuples. @param key Bytestring first key to return, or None for first/last key in space. @param count Number of keys including first key to return. """ def getItemsReverse(key, count): """ Fetch a list of (key, value) tuples. @param key Bytestring first key to return, or None for first/last key in space. @param count Number of keys including first key to return. """ def put(key): """ Create or overwrite a key. @param key Bytestring key. @param value Bytestring alue. @return deferred producing None or error. """ def delete(key): """ Delete a key. @param key Bytestring key. @return deferred producing None or error. """ def putGroup(func): """ Execute a function in the context of synchronous (IKeyStoreSync) transaction, in a private thread. @param func Function accepting IKeyStoreSync parameter. @returns deferred producing None or error. """ py-lmdb-py-lmdb_1.4.1/examples/keystore/lmdb.py000066400000000000000000000077031441346354400214770ustar00rootroot00000000000000 from __future__ import absolute_import import operator import twisted.internet.defer import twisted.internet.threads import zope.interface import keystore.interfaces class LmdbKeyStoreSync(object): zope.interface.implements(keystore.interfaces.IKeyStoreSync) cursor = None def __init__(self, env, write): self.txn = env.begin(write=write) def __enter__(self): return self def __exit__(self, e_type, e_val, e_tb): if e_type: self.txn.abort() else: self.txn.commit() self.txn = None def get(self, key): return self.txn.get(key) def put(self, key, value): self.txn.put(key, value) def delete(self, key): self.txn.delete(key) # # Cursor. # @property def key(self): return self.cursor.key() @property def value(self): return self.cursor.value() def seek(self, key): self.cursor.set_range(key) def next(self): return self.cursor.next() def prev(self): return self.cursor.prev() def _reader_task(env, func): with LmdbKeyStoreSync(env, write=False) as sync: return func(sync) def _writer_task(env, func): with LmdbKeyStoreSync(env, write=True) as sync: return func(sync) class LmdbKeyStore(object): zope.interface.implements(keystore.interfaces.IKeyStore) def __init__(self, reactor, pool, env): self.reactor = reactor self.pool = pool self.env = env def _call_in_thread(self, func): return twisted.internet.threads.deferToThreadPool( self.reactor, self.pool, func) def get(self, key): twisted.python.log.msg('get(%r, %r)', key) get = lambda sync: sync.get(key) return self._call_in_thread(lambda: _reader_task(self.env, get)) def _get_forward(self, sync, key, count, getter): positioned = sync.seek(key) out = [] for x in xrange(count): if not positioned: break out.append(getter(sync)) positioned = sync.next() return out def _get_reverse(self, sync, key, count, getter): out = [] positioned = sync.seek(key) if not positioned: positioned = sync.last() for x in xrange(count): if not positioned: break out.append(sync.key) positioned = sync.prev() return out _key_getter = operator.attrgetter('key') _item_getter = operator.attrgetter('key', 'value') def getKeys(self, key, count): get = lambda sync: self._get_forward(sync, key, count, self._key_getter) return self._call_in_thread(lambda: _reader_task(self.env, get)) def getKeysReverse(self, key, count): get = lambda sync: self._get_reverse(sync, key, count, self._key_getter) return self._call_in_thread(lambda: _reader_task(self.env, get)) def getItems(self, key, count): get = lambda sync: self._get_forward(sync, key, count, self._item_getter) return self._call_in_thread(lambda: _reader_task(self.env, get)) def getItemsReverse(self, key, count): get = lambda sync: self._get_reverse(sync, key, count, self._item_getter) return self._call_in_thread(lambda: _reader_task(self.env, get)) def put(self, key, value): twisted.python.log.msg('put(%r, %r)', key, value) put = lambda sync: sync.put(key, value) return self._call_in_thread(lambda: _writer_task(self.env, put)) def delete(self, key): delete = lambda sync: sync.delete(key) return self._call_in_thread(lambda: _writer_task(self.env, delete)) def putGroup(self, func): return self._call_in_thread(lambda: _writer_task(self.env, func)) py-lmdb-py-lmdb_1.4.1/examples/keystore/main.py000066400000000000000000000011561441346354400215010ustar00rootroot00000000000000 from __future__ import absolute_import import webbrowser import twisted.internet.reactor import lmdb import keystore.lmdb import keystore.webapi def main(): port = 9999 interface = '127.0.0.1' url = 'http://%s:%d/' % (interface, port) env = lmdb.open('/tmp/foo') reactor = twisted.internet.reactor pool = reactor.getThreadPool() store = keystore.lmdb.LmdbKeyStore(reactor, pool, env) site = keystore.webapi.create_site(store) reactor.listenTCP(port, site, interface=interface) reactor.callLater(0, webbrowser.open, url) reactor.run() if __name__ == '__main__': main() py-lmdb-py-lmdb_1.4.1/examples/keystore/static/000077500000000000000000000000001441346354400214675ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/examples/keystore/static/index.html000066400000000000000000000035351441346354400234720ustar00rootroot00000000000000
Request path:
Request body:
py-lmdb-py-lmdb_1.4.1/examples/keystore/web.py000066400000000000000000000045701441346354400213350ustar00rootroot00000000000000 from __future__ import absolute_import import twisted.python.failure import twisted.python.log import twisted.web.http import twisted.web.resource import twisted.web.server class Response(object): def __init__(self, body=None, headers=None, status=None): self.body = body self.headers = headers or {} self.status = status class DeferrableResourceRender(object): def __init__(self, resource_, request): self.resource = resource_ self.request = request self.closed = False def _notify_finish(self, resp): self.closed = resp def _on_render_error(self, failure): twisted.python.log.err(failure) if not self.closed: self.request.setResponseCode(twisted.web.http.INTERNAL_SERVER_ERROR) self.request.finish() def _on_render_done(self, resp): if not isinstance(resp, Response): exc = TypeError("render() didn't return Response, got %r" % (resp,)) self._on_render_error(twisted.python.failure.Failure(exc)) return if resp.body is not None and type(resp.body) is not bytes: exc = TypeError("render() returned %r, not bytes" % (type(resp.body),)) self._on_render_error(twisted.python.failure.Failure(exc)) return if self.closed: return if resp.status is not None: self.request.setResponseCode(resp.status) for key, value in resp.headers.iteritems(): self.request.setHeader(key, value) if resp.body is not None: self.request.setHeader('Content-Length', len(resp.body)) self.request.write(resp.body) self.request.finish() def start_render(self): method = self.request.method handler = getattr(self.resource, 'render_' + method, None) if handler is None: self._on_render_done(Response(status=405)) return self.request.notifyFinish().addBoth(self._notify_finish) d = twisted.internet.defer.maybeDeferred(handler, self.request) d.addCallbacks(self._on_render_done, self._on_render_error) return twisted.web.server.NOT_DONE_YET class DeferrableResource(twisted.web.resource.Resource): def render(self, request): render = DeferrableResourceRender(self, request) return render.start_render() py-lmdb-py-lmdb_1.4.1/examples/keystore/webapi.py000066400000000000000000000034061441346354400220240ustar00rootroot00000000000000 from __future__ import absolute_import import pkg_resources import keystore.web import twisted.web.server def read_resource(path): return pkg_resources.resource_string('keystore', path) class KeyResource(keystore.web.DeferrableResource): isLeaf = True def __init__(self, store): keystore.web.DeferrableResource.__init__(self) self.store = store def _get_done(self, value): if value is None: return keystore.web.Response(status=404) else: return keystore.web.Response(body=value) def render_GET(self, request): d = self.store.get(request.path) d.addCallback(self._get_done) return d def render_PUT(self, request): value = request.content.read() d = self.store.put(request.path, value) d.addCallback(lambda _: keystore.web.Response(status=202)) return d def render_DELETE(self, request): d = self.store.delete(request.path) d.addCallback(lambda _: keystore.web.Response(status=204)) return d class NamespaceResource(keystore.web.DeferrableResource): isLeaf = False def __init__(self, store): keystore.web.DeferrableResource.__init__(self) self.store = store def getChild(self, path, request): return KeyResource(self.store) class StaticResource(twisted.web.resource.Resource): def __init__(self, pkg_path): twisted.web.resource.Resource.__init__(self) self.data = read_resource(pkg_path) def render(self, request): return self.data def create_site(store): root = twisted.web.resource.Resource() root.putChild('', StaticResource('static/index.html')) root.putChild('db', NamespaceResource(store)) return twisted.web.server.Site(root) py-lmdb-py-lmdb_1.4.1/examples/nastybench.py000066400000000000000000000042041441346354400210430ustar00rootroot00000000000000 # Roughly approximates some of Symas microbenchmark. from time import time import random import shutil import os import tempfile import lmdb val = ' ' * 100 MAX_KEYS = int(1e6) t0 = time() urandom = file('/dev/urandom', 'rb', 1048576).read keys = set() while len(keys) < MAX_KEYS: for _ in xrange(min(1000, MAX_KEYS - len(keys))): keys.add(urandom(16)) print 'make %d keys in %.2fsec' % (len(keys), time() - t0) keys = list(keys) if os.path.exists('/ram'): DB_PATH = '/ram/dbtest' else: DB_PATH = tempfile.mktemp(prefix='nastybench') if os.path.exists(DB_PATH): shutil.rmtree(DB_PATH) env = lmdb.open(DB_PATH, map_size=1048576 * 1024, metasync=False, sync=False, map_async=True) nextkey = iter(keys).next run = True while run: with env.begin(write=True) as txn: try: for _ in xrange(10000): txn.put(nextkey(), val) except StopIteration: run = False d = time() - t0 env.sync(True) print 'insert %d keys in %.2fsec (%d/sec)' % (len(keys), d, len(keys) / d) nextkey = iter(keys).next t0 = time() with env.begin() as txn: try: while 1: txn.get(nextkey()) except StopIteration: pass d = time() - t0 print 'random lookup %d keys in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) nextkey = iter(keys).next t0 = time() with env.begin(buffers=True) as txn: try: while 1: txn.get(nextkey()) except StopIteration: pass d = time() - t0 print 'random lookup %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) nextkey = iter(keys).next t0 = time() with env.begin(buffers=True) as txn: try: while 1: hash(txn.get(nextkey())) except StopIteration: pass d = time() - t0 print 'random lookup+hash %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) nextkey = iter(keys).next t0 = time() with env.begin(buffers=True) as txn: nextrec = txn.cursor().iternext().next try: while 1: nextrec() except StopIteration: pass d = time() - t0 print 'seq read %d buffers in %.2fsec (%d/sec)' % (len(keys), d, len(keys)/d) py-lmdb-py-lmdb_1.4.1/examples/parabench.py000066400000000000000000000046041441346354400206340ustar00rootroot00000000000000 # Roughly approximates some of Symas microbenchmark. import multiprocessing import os import random import shutil import sys import tempfile import time try: import affinity except: affinity = False import lmdb USE_SPARSE_FILES = sys.platform != 'darwin' DB_PATH = '/ram/dbtest' MAX_KEYS = int(4e6) if os.path.exists('/ram'): DB_PATH = '/ram/dbtest' else: DB_PATH = tempfile.mktemp(prefix='parabench') def open_env(): return lmdb.open(DB_PATH, map_size=1048576 * 1024, metasync=False, sync=False, map_async=True, writemap=USE_SPARSE_FILES) def make_keys(): t0 = time.time() urandom = file('/dev/urandom', 'rb', 1048576).read keys = set() while len(keys) < MAX_KEYS: for _ in xrange(min(1000, MAX_KEYS - len(keys))): keys.add(urandom(16)) print 'make %d keys in %.2fsec' % (len(keys), time.time() - t0) keys = list(keys) nextkey = iter(keys).next run = True val = ' ' * 100 env = open_env() while run: with env.begin(write=True) as txn: try: for _ in xrange(10000): txn.put(nextkey(), val) except StopIteration: run = False d = time.time() - t0 env.sync(True) env.close() print 'insert %d keys in %.2fsec (%d/sec)' % (len(keys), d, len(keys) / d) if 'drop' in sys.argv and os.path.exists(DB_PATH): shutil.rmtree(DB_PATH) if not os.path.exists(DB_PATH): make_keys() env = open_env() with env.begin() as txn: keys = list(txn.cursor().iternext(values=False)) env.close() def run(idx): if affinity: affinity.set_process_affinity_mask(os.getpid(), 1 << idx) env = open_env() k = list(keys) random.shuffle(k) k = k[:1000] while 1: with env.begin() as txn: nextkey = iter(k).next try: while 1: hash(txn.get(nextkey())) except StopIteration: pass arr[idx] += len(k) nproc = int(sys.argv[1]) arr = multiprocessing.Array('L', xrange(nproc)) for x in xrange(nproc): arr[x] = 0 procs = [multiprocessing.Process(target=run, args=(x,)) for x in xrange(nproc)] [p.start() for p in procs] t0 = time.time() while True: time.sleep(2) d = time.time() - t0 lk = sum(arr) print 'lookup %d keys in %.2fsec (%d/sec)' % (lk, d, lk / d) py-lmdb-py-lmdb_1.4.1/examples/words.gz000066400000000000000000024201551441346354400200440ustar00rootroot00000000000000‹$‡Sdi–㸄ÿûVsˆÌÓ 2ª uz ‘Ë~oñEb'!®*Í?ÿJÿJ뿼þ1Òó_ÿ¤² íïÔþþÖüõ ·Z$åÍ4e¥A’yýëŸÇ¿Ò#}$=v: WZ¡ ‰`$:!\PâZ„ûvu¥ýƒtpI9(O°WµA¯|u¾F±³tñõ… rOe#!j¢ö™ ƒ2´æs-´š;1‘óE eÊ^‹izdÑ”§sä7£“ÊX Þ ƒ0ú×à>jY¡–ÎG0²Ú8ZíÆü™pjÁ>⎄$ÝUòT(Ôµj«“þd¸CRÚMó4B]pþEVÂ[ä$²Aþ ùÎn¤¶ó-¶å†¦hÔ ÜUhÔ""¹£2F>®É®y#ýæ”E3h§U‰Q¡I·)Z®œùêbúÁ¯EÞŒ­à˜g®%Lmwža®†^Wd«W®çãC{ÊH×RÛ©q* èl§>–ð†=!T,44‚8¾=ZÛj‹)#à9:ª½žTDñùýLjzD9•0y×T5®ÍÛZ5i OePçÙGþ“ ”Ýk·4ÚF=çÿë¯Ø«öÿéºoõE¿\”Gmi»õ{uÇwzbâî©ó&þÚH¥tƒ!`µ(a3¯ò”N¤MR=”ÑF{ÂŽu¾Nç¹h_ ?ÕN^œ ÈI¥ˆn¤ìy(üYûv`fà?Ö¢}æÑåÊF­¥'¡ và¶èÅ㘧ôÕvZ‹ðæBCS@NÈÄÜœ¦ÑP–‡­˜²™Ú„êIƒŒ±#ÁWÙ¬Ì@rR)C5÷¶Ë{™H04 îWjiÿèA¥Í¥ÜéOZ€ÕýÈn’6B3†ÓqeZ%F+‚åùÙbêï)CÖðš6KZž¦yêë|É„¤¯04H€ŠoªkGA)! X¯nÌ üP[úLŒqÝuôÀ”†¨ÔΩBxLhNË n£Znùì7ipÊ¿]žæo•0|AÉÎõ)Uƒ³çج¿Ñêë¸ó\óÉÞiHT†ã @®ÅŒcí:€?xù«aµþ›6;%à êƒòT°r• *_û“ 8’Z+WÙÑ"°¡€amSTNÒÖeÉþIš®sèŸ#u9pä´"ØBhÜ$Ô¼)Ê~ÊZe{¿S6"Ú ×€ü * ©y¦!°6àu¤ÆÉ±–@\` _Z¸[QYryÂ4¤}@þiûCU¹@j=!Wzí¡2 ý€`º©Mð[ƒËǺ\,éLÁœPÕðíQœZ 5øöN0^Mlmç ¸Ÿ7ÁcÿsŽ0¶¬˜(]/Ä®“Zzà´T?¾¦¶/|´´ÜNH±¼@s¥Ç¹RÎ+ÍÜSjF(ÆüR›a0£0ãf~&c§¦ý: :@Ûi8ȉkq®M“/OÌ_ò[ÚE²Jž‰2./±Âå›iÁ’Ò.Êï¤He(}¥íæŠju°Þ}Ãßä§#¶ ̽¶»\vj \žAy‚‡¤¨þ&I±RwÚþ=š¿Z­_‚}$n¨ýýIZÚÒ¾Dø`=•!@"8µt¤Ó”7§=‘ó¸!o¨Ì;B§¤Ü,«¯ìˆT¸‚²À‘"<ȹ^ÜÓ·(‰"ì—<0EáM£fÀuB¾£´ ÓUØ%TêU6"À[…ìO2ÅúWÞò4l k‡O¤iR¹¦íÅV«>qx¢¡áÀµ8¾=Z9¤°4Uÿ@F*×)ÄU®×PÁ¸hYÈCr±ôÁ•ö”qÔîòX‘VqÍàA 7êÝ”v#4.Øj`.»h'U”uÓä@F^¼–vSºQžÎ(©Ü”¤¸‰ì(*ØîÊDÜOg\æ©i y*`)(² ¶èæ²ëéŽ êµqy9.ã N9°rÞœJPd÷ó†·Â—Çka´çQ—Ôã„äkCžŽ˜‚®Å±Ÿã†¼…Ñ‹¼Éñ=¬çÔ¦åßø„(ÞÂdZ†QSàQ½FIZp]ÚCE/ÐÝeR¤Ý!OGl 5q>-›‹`Sàò òöpZ~ SÜñ(ÇÑ/lã-|q|Ó ó ƒÝV'ûŸ++ëʉ‹)5#[ÓƒN¥ó¼4[0 @îÃ\4ОäP†bGEÅ7ÝÐ[ç‚O­ãtAœreKÛp ý†^Àî<Â6GŒ,8å»Ó@Øsû¦;G×¶‡Üß²~ÅkSêÏz¤í2*l_Ÿ~€¤X õ_WvÈÓ›¦A¸Õ« ¼É4O#«…q„”³TÅé0R¥&Êå¹àçç“®mÿ‘¿éñIçú×OIS6Íï’â¹åG¹p*ªZg…›úÌãP|QNÏ•±á•Çvp ®,P>ÀIEÊ0«Bv:I•SvZ5A›…¼˜žAÂtctæÜOå; £AJzÞqG:†Ëš¬U‘džÀ" Kþ]¯%ëîù…&t *F•wàÄü\È KŒƒ3Zšh0¨%2ni¤;£­y¦¶Bç«ËdЦi7EÞ…Ç!‚¾ %²ª˜Ù­Dc+Œ²Qq £ê±a±º¥öÂ#µksei.lùÍ¿³UotuÏÎi¿eî„vK„9ÐëÊþ6Þ…áÀâCáÝ¢™OŸ¨?z ;ggë—öJÔÐfø ^©¤o7ª*×V¯°u¿á¯Œ3_¾‘ó †ùºã{j…OÛ8ðò1©Øô¦äÆ[xN¦Яœè’4ouAÃVjéÅvçdºXÒTT;w¡÷” ´v$‰b}(¥µÍø:Å}ÕvJÑ¢% ©Vë©nôéÀªÔÚjaX.åч󭽋E­¦>8 úÍðEZ">>M¤‰”i¼ã0à<£HNQþLã ¯ñ:R0¦ ìac«L’>kÃÒ‡iz¤†Š¬Yj^ØGÐA€L/“À\4X»¦º¥•ÐN*e3jÐ,OãœË^ƒ‡ã îwÎ3×r3o SÛ½J}¶Ïös‡+z¸²«°Ü„¸Ë$ØÑ¨j•¡’©wEϺ0Iãì„¶ÝäàAèÊL4Ù¯¡’b¤p™qIÖ •#:”е2í^ŸšãŒèÕîô&¥jÕšªuReÔP¶’½«¤Æy—{Î ÂóqºÿÜe ôh-A)S3~S×ËÑ}mœrpžÁåW©+e ' ‡”oÈýüåF8L3\¾ŒÁ,íŽtð½«ÏI• å)úbZ×õ ¬¡–r`›V Q÷0÷ó’à€Ï‰OS,^ejB'V•sm7œ`þ0jšA wÇã`u(üƒÂþo6ݹ¹¹šf””¼Ã7ãÄn<•,V¨©(gHN;9ìJÈÊÈ=ö¨N# V€Ý9Ï»û]RîjîîVÚû —òÝ¿é—ûß¶kóJ…鯶Â¥¾GÞ Šp&t¬†·;âÈà–ÇtÓbó…¥ýnÚÍ`¤aEÛ®‚æËvÃé8‚²E©)pyy6×dÓo¯Š³e°ëCÅGÓuAቦdæj„-»Ø)'l&c_sá£\Ùn’º4H€7Õ1{ÍP.ÚIôêЖ #•¢%ÞhJ!OC®ÅñM‚µ+àVÎ-ëÎi ÀÁ/hÝgÁ<»N}¤üãÈÉãü%_ÛéîžsixÃf•޹§NwûË´ÈÔk9w?yârÃW£R³`áÌû ɸ£Ž¨s¸b½4öi¶^­¿áºbÔxÉìãµÕÀ4,Ì›Èo¨iŽšÒÅ­®cÓhØÆ9Wãù>Cù '÷56Á=0ÌÄ€*6äë R³Z'ù–ÿr}µ¦òS­f}ïa;rm)«áRÒIEótÖžâúH0uG}rwy†7¬íu°u#›¡†F±Í#—NN›bÀhœÉL¬R8‹_“£ÍvfQrÏ;©Ã†§ÁûÍr¹3…©nøE-ÜlV¥§ÌÛüüSKª<¦RÍ×Ã&5F£ê>YGïýê¢ojiDÏß|Ílð{!Úü~.ÞÐî]_§HÓI̬â{´ÿ ¹“ƒG×â\›âZÈTèæ*ê„õÞí;—0[jôS3™§œñdÍüQ3w3ÞÍQ¬A8 ÚWY¼9úô¿òU[´öÄ«sr¨ ï D®{ÜN‡ÁÀÜQPSijçRmDk ~G›z óÿÃjµãˆá]¯iÜÞ†’aŽyFN«/ŠV®FéƒëeÒ‘(Ñ“ ßy¿a¢›ñR¥îUq Á„¥zJç• ~#žSg u€ò¬ÈjpÓF‰‚­Åñ‰Aº(—d@9c°«¼$œ9)¬v@ÍB-B¥[H„SV¸N¼HRÜ-ÚPµ•¤P±o7Ô1•؆¥+S’¾ÿí ˜ðÅESÜ67À3hNm |®3!”Š£qP! bƒêãƒËn~Ÿ…Ìù) )ÔA•jå©’' I·8cº9sÇîS¦D·Ý›k[«Ÿ“šOí™±ÏÌëºY-ª™U±‰?Z µ8Ù(i¡3ýe„ÊÞxP oÆõ%‹ôn-»Iºãb€•/DcùP´„Q4"HMÛ\%€eÔ%¼Ó÷h\~™ÔµÎ3ׇåqÝægêrŽÀÍ8“*º4îìáá€ôc—ÌnŽz%–ÇÍ•Þ+õ3š¾ÎˆãHêÖŽ¥á#¯ÞG¯×@a_tãƒóÝrº™þÛÍ0¿Ú»‚¯æU6Ž^àýv›N^Æ™‰—l°£ñvx›ž7䂾ÂÝ„Uñi :R~PÎ*ã”1^² '’Ì jCš§0”>а4•õM5ãÈ;¯œL›Cž†ƒ‚vEì~œOxGû- ÷wda„7ˆß[+Ǹ ÃÍkÉ5¥ •džjÎ)ÿvy†W¤ªþG¼–,Ô; òÅ¿Pô\£=Y´:žX10­ÒK~:w…Aë9H¬Àw·AØJT†ZÙü'&NMRœ¶Ö6â¤ÝÞrfä)`çf–Öñí@TÍq´$ÜT"o\¸ÐH¦«/@±>¥ŽE™7{‘.( Ò’Z.FQ;‰Ž ÷ø06 |<øE¥S ÂÔ”±¾1\såf*Ê…!^í\ æ5¤à3•%¥þUÉ´?éÎò¡¿ÿ2yÞ,ö“Y&$¸žê‡ž!Ïã’²¨T­×¾d®Òg¢$¢Ó¶³Ç CÝßñËAôäþª ¨H²ö€Nœñ ïiÙº§,JŸhÝìH’œ¹Àü‘ôÁ9ƒêÈ«å$ROœ´ )ÓÃ]1 eâY¡`Æ•‹¤ÈÏ鎣§¼#p\Éñ˜PaŠ^zCsæ U½ÆéÝSÑzÂ@û̵;Z¾x)")+X€“ÁfP0IÐu¯S À#ÚëÕ¨3ðŤÈl€NJ)’6b“6ûÉ›j? †ƒdŽ™i¯å†º®ÔOèv°ê„âPmÔ$V#¸¾'S8_"ýL#ˆ7Á;¤|Ã<Ýp*Îx)ÚpU©ÈëúÏ•¸ ¼| c/#0Ãܪш3,õeê9áV#: 3ofÜ9ÏpÍ‘ËÓ2š¼k —IÑuWÀŒËž ›@gÔ7Ú¹–à7Ý9Ï»ÃÆ0_›ãu*Q“Ù);•ŒqžøLïã[Ú&„ð5Vh"DôQ/¢XX¢Ù`÷>P\¥gꊻå{î‹°Á„ª¶38‰Ê'ü7C~PBìÀSõÈ ÙW´®0`ÏT }¤¯¯E¼KšŠ(¬ã?tO¤”ÌâÀ›Óu*Ž)5<’'ëX¨RˆzõµBh™¡_9½¹jµ³¹ ÎóîГzÉ(;ž_ këØWЫÖáRD ‚£PÍ«\E±šü„ wº~*ܰ —ߥÛ8VËšÙ_Çü¶¬‘ ½¥Ö%`½I‚R·Èoi{Ѩ¤#Î3\wì§`N}µY/ÍŸ}ð`lpý4¼È¹ö ];0ôÄ" Þ‚§bNùée5!NYak–ËuËém7·ˆøŽ4¿S7{àï°³ÛyË+}K/´i~P+^)~¾–µÕÏøÄŸöþvñ¬;# J%xs¬W7¸^ £9EÒÔ¶j½ºš¯Q<‘ÊSxnªxx h„nÁ§)oN?d御õä•ZÂCs±Œáõ›íî”h¤„‘Ú÷™ q[èæ†ZÏr3q7¼î;ÁMšm8¯¶ƒ®SÂ=µÍAí[&ùš¸[ý¼«Çe1Dê©ðÙóå««ãfñz£jù*˜¬BÊ7ÌÓ ¾Ž`L‰"ƒ·àÊ{”Âl„¹×̵k™o`ggS¦ Ãi(#A=Ðú§"!ÃkYß#Ž€£ÑHNvIa?/lkµ®ï•NÛõ3Kj—dê†o¢þš•Æú—ø¥í_fø(%•’Fj1å]bœv>ÎþÎÛ 5 )’¦lš§Ò5p¸–)ßZ€TÊzâ—Ä<Ñ/ޢŠ1â¼™¢_)ºs Â4Q&žÞÁÔv*R¨x êî N{8XÖp FÑ"ŸòÍ2¾p¶ùÿHÿšæê7œÌá]Íuº­ÛayWKr?÷SÊű*^9ÔËï`NÃlÐ,DMH)S—=øš™HG‹WÇJý*Ö&D*èÙŸƒ¹¨öÓ`(Œ”´ž*kíu­Ù¹%m’êcªÑtè(}!IY* ÞŒÇTÒ—‡îH)[ÌØ8å <‹Ò4ÅÁѶŽÿj$ÂT6Á!Û÷Š»ö>¦ „ifETú l¹vié’Ÿ*\dÕË/ìSÈXa9ìB8­ â¢áÕ…DO*.(¢ÄÕ¢µ“ÑÕ•.kî…ep5 ^&ŒL4lû_[X4ƒBoP?2f9Ryê’o\Kó- /Õèè[/šð°|™ÌŸqBv“Õà‡ð+§2’ÖïtýÞ$Xê^»²þ”nêý‡Ìà ·ÌÛRêÜ¡C|F‚oÅ—«(š5HU;ËõI ¬ú=Mñ­iÃï«Ý ®›Öeæ¾OL99õÓ×Öû§BÒäIH9eQ£ ÕU‘üÐ4r¦2L)C.XÏdÆ.ÒîîžÍ»bD;úZåëµÝÖR†¡œyÈhŽZwo*);ä‰â\HBƒÄó¼9¤lØOv7Tª•Mä™Q»ôZ8-z¡Ü‹wîp©Ý5˜É¤„ˆy…ÉÓ훀þLÜ Ñ*9r?•ǵ“â; OÇhÓ.ÈÀ®,[¾hb a¤]±¿Hi¾$„ñ}벚HÐß϶ÄÖÒ×*¸¶–®$¶Ñ€™ ß+¥Ç  ižÐ²«$Õë4I5¡/î‡P±ÆþÖâ蕵WÆ€ íØx0røÁŸT,–H¹aBþH(˜Ú„C;)ß0Ï0-˜û^îêÊorÈÓ‡bm€L’>ZârCÚÅ”nD¿8Ïpºà1-PÄ^iPÐ~Ã[™\ˆË³+@këR¥¡¬(‘S3úºÖBÚ=Ž:+‚=r-sm¤R†BÅ~ ®ÅèmYµ­¦æ'Yüæ":‘¾VNN’òN<¾Oµë«êè[j”yPJ¼=©C9‰ÓÏ@ OÑAÿIðu£fËão‹×w0v‡fÕ{­ã, C?åTq¡ÂChV¶ Æ"Œ76s™‹´nº¹©à¡®Z,þ•€ÅT?±¢%÷Æ›ÁP$\¯:¾8[‘óuàg”Âê}ÒîMãJL¨èÐz ®ÉŠç9ÁOÆÖ*ïæÚ¦'Ȱºû5D™œò•½¿*_\Dݰx"1 _øìü½Ò|}KkÏ| . '…#}á@ú?\y#CÃí„R#•²M£á-Ö þׯa¸s-)+¾É!OG\š³ísðƒ‡©4Æ ï¦ƒp±W3÷Ü-³¯CæÆÁ g©Ý(öÍBðu"¸Á9¶”ј´¦ûÅyÜù^js-Wkî:ž)ß{#Ê›åÍx(êe*?V²QZÁÇ\–Ð,]’~¯Ð“r_^ÙB+VàѦhÔLK+ܺԃÊ:ò&RpŒuÂ_¹mAØ7î0YðÔüÀ ƒ÷ߎ^šwQ¼4VòL¦Ãk`% ¾è›“£Õ金eªÌc*Åÿ…öjÚ–õÔ9©n¢ž1!3¯íÝjÙÓögE’”!(ûï„op ‡,±çJi*\KPÊÆï_˜§ ºE¹ŸÁƒ1~R[Z¹¨Ðî§"—§Ò€^­˜¦l¤wø~ÓôÈÎM!Êá7ü1Ë0o S[ðÕ$£l蘧¥†^ kÓ(©4h*½ã4|Z){]Œäõ*øZ ÑpÀù¦âûׯZ´ñF ·ÿsâÍi®”z‡ ã ºs!EÀ™ ÒöÄùüÍ9§6SêW£ ŒÝ]A”[ôd$…·LFWN7lwž73( š {ÊØÂû9ew û,\73(LôöÞŽ­À»Íó¨í·“½½ÏýOàÖ¾Ži&“ŽTî¬D6E—ÊV?&v›C ·‘Ênš§’àòtÐ<ûé«p™1H·Q¥£7)UÝïCR| ËfH»Cž†žÙ|ß’bÞB²”qïz8PsÄÌÜa­‹A^%âÀaBŽyš©Í «2̽Œ¡-€ÚFÜž–$eŽ4ðBô:¶wÊ€«)|KjŽvQóAë¬8ÊÿÁ*([4ºª×’ºþ=h¥™úP~ñ Ž8«ýó1¯Cåê Jb¥夲«"Œ«ƒ%; ·t t R­Yàµ4Œ0+ð4>z0™”Šåc_i7ÍSÉrš(§âÀý¼ñP®Å!eC”u޲WWz“ƒtmG °Úf4;«˜Ç9JZÔÆ%§DIÚP”† EŽ ")5QÏðË€Úí`Óeë]™Ñò_ìÃï„T¿¯"T¯ÔÇ `¤Ø›¯TWÚ¨whMK8?䩈µÖÒI™¶CPxåSÚEN2? ÛHPBñ°JWøµÀá°H•È1JW‹R{ò&hu¼F<‚© ÷K¿,¾Me ÈU²ó°¸ZcãTT’èÐ8é•¿äµÒÊC%O…µ²€%4]'² úÛÑÌ…tUêk_²QÙ©  ?¿›ZÊe R ƒßtgé¿l’¢’Â.ÄCKè¸û¤)ZVè¼¶ü;áO >Z62Å:RÞ058f*7.Ï <ß$„{ ']”k}ù­$èׇß:t$TH„©lcÍÑ‹ ¼wê§“ç~ò£¯0y†!"ð&¥+e£FA_W„±íµ@\‡«'ývyþöAD‚¹ΘEð­ûÚC…SÂZróCardøj=•aÔ8b j¦’®ìàl9d‘g÷ïi„½µï#*X ŽÓqe‹rÇÂ7s£@ì½pÍQW?o$bûœ{\úÀdr¼ÜY «†Ã$TvS+J¤ØL±´Àü&‡¨\›)çiø/Yç–å8oá÷ì*KASh ¿)Ò!©î‘W£žäœiÖWàºydÙ®‰RÀà hpš(µÖ¶èÄn,‰ÿæk6ñËlÚ¸õ¯Ð)3©µ¬/ýc$MÓZý_úf'“ž;à‚0•·¤ãÄ›—KBYcëñdãìPí~.ØŸôì‘…'í§´‡¹NÀ*ÙÀÁ9²ÂG ÈÆ´c¼wµ¸ûÈì‚Í*Éu¬Ð¸ªµGüMy3ÁþäxC/dí´ë ³LÌÎÒÎTÔs“ ²i€XQÈßo|£}TÑâƒJ$ÐÓ“&…j–á& £pÇe4Ê5°î…Þ”œVúù—¯V3cœöáÀ˜ ¥û9$gzÇù²æ;0!f$á–Ȉw©¸P:T˜ Ä?ëö²Ÿ4¬Ÿšjg-’t¥j–bš\0)%“ ±Y…\ÝcC¢Pw9]uÖPI ºIª%0èä¿2žTewñj~q?—¹ý‘éG¸©)H„²«y|e%?o|é#¨¶"‹Æa]VMßÿ¹ÄR*¦éÊyRÆ»öo®ÑeÓ?Ú‚ýØà:ƒM¤ƒŠ ñÉ ýö5uÊ.ÒGиr€sÀd)Nª±Ìœ¼×Jtr#Çæ~AítPî…¼šŸµñt™ÑÕ~<û¶ùáy‡Øàká ˜Âân¦Õ“'Et^ãSþtXÐiW-ðù…cæ÷Ëú]%v-¡ÜÉdIAkéýí/ÇØÈËy¡R»S£3ày,â¶XÒâ˜q¸¾Œ7xèqokÁ"àÏ%,›©ð²ñb"qØá*pLÀ¼ÂIZÔØóƒæø×ʬê'q:¨HrW·‰wИù¸QÏÛ^¶»\c#Ђš¤‰ÞEÕ² ×k¤…Ña˜|ؾ¸ŸÆü ]ŸåØ$ÿVb p“¡eÎO+dî ýû˜|v’Lƒ³¤¿-ª,OÇAŸUbˆkv` ,Ô&pÐøÜ5ßÚ±dËôàÁ ì‹ÚDŒÌWÑ{mxä¦'~vé‹#Œuu’´ÛkZ'6‘MW}ßõÿ­¶bKõ`eÇÚ¤$MÄü—é‹kTd:AƒjÿH7âtÌýïOâ¬Àm\Kìêábw_Eã5I`ì¯7¥c(]»à¬¬*ZO_MôtÜ™©8û¨pÕ¾ˆw™êyWöÿ@d<…Êâ7¨‘ëîãàÁ3äë¼8ßË •e0×eƇyñ2ÝÐ/Ô`ìÂÐ ‘w_A[e ¼N×>HÒb9 ¾ä ‚O«!¦W@ó—(puRBžø¥2ئ®¥ñrf#¾:(c9ãûŒ‰µjítµ (àŒ¡þèià›k*z7雚²%šÉÊšn& ýj’ù]š‹dõ­PQ¤ö›ø`æÐ½;{ž^œ@ÒL s.¨îyqœ-–åy›ï‰èØMsc¸Ìe_ ÇI”?ù³L 2ÌßyXàmò5Ã?¼(ß“c¨Ü\&œ\P,RžRz:Ø]RöAµ(9ÆU{U*‰'4§ݰ¶ŽïÝ€,Ø6Ž#hÕ)”]Wˆ]6×|È Ÿù2+/âh'p•¶rítÁ°&F&æ8‚Ðb0š\¼ªŽÚ‚¹9Ì}CþXJÙm¹™Fï†+erº:@ÒåÍ)vÝpÍ ûèÂ|»A« óª‹É-ô—ÄAcÂÊèæ‹wQ[âPìàÍÛÈ}Lø+Š%˜n5±6„ý¯¦2º2»p°ìÇXôuðÓ¢-# ŽÎÑ^Êæ{™6wE¯BØBÓ­ÑÔ¥½,ãeƒsÙn6ø¦œƒÎˆ1oAxM½Ò#µNMМñ%£;_cÎb§sRwȲq`ýuª¡usjÔûÄþžXfÙú;ç‹ÚXºN Ní épäü škžôä «uC9iç@<ù2WHÊî…otŠ/š5›å{NAáp†ÖÞƒbö'µÇ¤&¹Þ' qLz§ÎLÙIr´5÷ɲº/µ–E=°sÐpªÔ ž$%¨ ÄôpNì˜ W¨én£ø<}¸Z¿ =؉ӣ®ã¾ÉÆ-ðÉ5vZƒ¹l“:ön·Ç[U¶0Rxâ3¨¦‡c-{Ð5Û~2§#¸É,2HÊÄÁµ8ƒy¤#̵ݎ¿„âhÝÇ”•€þ˜4ØñòˆU[WÇex Û$Vûê¤îX¯t86&¼–+”¯VŒ~d,¿”9¨MØõÀ~82«Hßê9™ƒÆÌ\ÛcËMŽÆ(¶ßž׿áïÓ¼¡“J 1è»/¤Å?iÿýb|•ÀŽ¿/*Ì z-7°ŸéPè*kºk–Kû¥²)f$”†Ð¤T¯nø[ëfôGÈáÖÆ3r•(E¬š †æšŽ ×éø„žä2ê,¯½iKš‡Ì>‹.Ò`¨XJÅ4AüþÐÚÒáÁã­PÜ·_s_x 'ÙLË€ú›ÐÀ«CQ°ìYj‘¤¿…MŸO@E2—ì¿¢þF ð»ýEBeq‹[AâŠY¢Ú|»4$’\pÃÍ9n¸™ÉÜ=> ãý²à2ªv ŠV:`Ùƒ³Õ×CVµ?5Ø¥ƒÆ’ä`ßÎDê[úK ÆA.pÔQèb! ßÏ€aP7Ò¥üËHrû G¼9a¿«ì§'Þ[c}@…M_¦U6(j_šü ã§vV÷K§ÊKc/¶Ts“>0zÖ¿ I¾!…;2´>gò¯B럋/—g\¨“¹O-ÁµìªE ¦²‘ÉuB¹ ¤€Àq–jã¡ì𳈠ÚmªWE¥ù djšŽ§Ñ°Î/ô M¦-‡”H-†¶È» '×HGàmÌe™Z–Ãà—« æRâ^åò™—)cñàÅÑúrÒWQt·ÜgwR¾x2îIËʶ7Ý®râfÝbÊîØ´lñk3á>—ïe›ñ`ÓŸOÂ…tq¾—«eñO® È;ú7ÄÃïFƒ!øAù^Œý?:£Cgt¸Ð+÷*eR]ˆMMÌ÷2@XïGÏ‹/Øå{1šp·V¾^ÏÐC¥K{Á‰ó ,ÌÐ>\´EÍÏô%ƒ•j³+•˜Qʲ©~iºˆ½\±¥ù†Æ±ÀP¿UðD…ÊýÎõÁ'þ¿l”=*Ýcóñ¼Oëý/Kù¯Àí.Vd™U2|9Ô²'~n #Fq•Mõúfˆ`.÷³9T;:^a\„$áÚê,ö#…4¶YÇ#Éò0À­TÐ/ó¸5•LMí¥°PÞ*¨Ñ΀~¸äÛÁÏ(W!dYô®s¼…¯®Œ±›xCÝ7 ÕW<ïêúô¤@˃šfQé¸îë¡Á6(ÓÒU’VaÚ>5=ßÅùI£>2) ÞïDÎN*eC:Þ™ÒÞ˜¯_Ê¢Y'é»j›xCªEË7çRõíê©PvM[g—/Jͼ:Cc÷ÛágšÝ_‹:9i*N–GG`ècÖ—þÑȬÊ¦§&eçÆ›Q»¡CÓ†ê]×ä—´¸ïIïY uM~1hñÏ‚|!sÓ?½D@Kr*ü®´q)àÓ•¿¯¬’¹«e5»P¶çþ=ÙO›Ë_]Kf*ÏÚØh À%9/èÿ¹–A‰Å:ê‡A4ë•Áív‹L#í$…ª*kænÕt „%¥ì*yhzröÛŠøäH©ºèyÎÉñY·‰W7²!Ù¡(ç;vÒC‰©aVÃMS¬4$ß 6¦+ïŠ ýP|YÏߊ{ýV´PæC;‘”*švÎYu¼«•ëMµ Ò°nËF º@Ïg…M¿ôÀw`:^ýPÀƒäN*“û_æ·~ÚÇ¿¡Újz@[=Ùá©Ê:NÞÈÆ¸ iŠÇU2´‘U'FZx"[ÙÎ.ŸG0¶X¾!XaÀ±ùgfù¦6-ÖÍI’M‹ n¦Û#ÔËÖ²ƒüyî ÌÉ>æ§W±Ã”©p€ô¬ ŠëBOôd@¬wŒ¡Kz„Æûh–9`ñò=Ñ‹ãmœPÜ.>ç¹µ×®:ŠjÒÓÑ*>N-¤×0…ÌHÃ肃ðÒ;Õ‹µi|p•¦~à œÄZkè_:,ýª…Ð&o_*r„ŽªãE©2?à/ãÁE+]ƒ‚YþRyþ¼é•5ëUýV¾Q½:‚z¥ø‡þyÏ5Ò²gVmHD³uíÒÀ–9)?òPWwM¤ tûϵkÆåwdÞ*-ø Õ¬ ,çrOýÒøYU ~\á…L|&j5;â¿„ö^;™HÑ2éàã-Šìòõž”¦¤‘‡hšùV)õ‹e þ”VU›ûû]ñ Mt‹7…L'«ž‚ד£Ö²©¶:Tn*Ú†.§ÒùUU ’-3”»P@ èƒ]%i#ýÁ'.Gu7<Éf©Pqè:ŠóÚ¨™Ì»êõÓ…TñÛ§ ²ëÄj½2e©Es~ÞÉ“µ×¦%¾h [óVÉ?ê6,:¸IÕ =@Ю#_SvuG üÒ?:Ok÷ÊH‹Nò—žz5{ïNúÞD_tN-8Œ6*N#¶tôÁ-¨ö †v‚ /¼ ÕUæ:ÓA‡¥´Ñ jLXªÅÓÉ÷퀛SŽ·N' ÚÑÞFj·MJ¨¼øM *vÎ$‡h@ Ì@©BMy*ƒ¡µì¸&t-|R)2ÊĤ…NÞZ-Ý´ÁÛ¸ 1è2ØhZ#²dƒß㸗PöL[Ñ"–†²¶:ÜäZLkÅoap8/w#+Ö¾®ÃVÈ$!ˆ®ýI_o¡ù6’²O˜±~ 4W7ß|ÿh(ˆ{¢ÕS%[ T,AÒ¶«b7Dsƒ-ÝLZ ½:H*º¸62±• ÂŶý•wúõÎÃ!Iµ1à DšMR ´ ìÌ¥sŸ(rҘ ßR5ÅX@œ³Çä:ý)ïlà°öîŽ;€ÉV]ðú l2´7.làþÝAqPÐ$ž$4óûˆ*#ò«G®>(ssw?„¯wY8Œž>a´i3‚Ä–I•0°WÀwD—ùa3ßQj|£å[h"&´Xú kmʦܻ$×~ŒˆUäfÖÕ„Ðn-ÆVx°‰$Óx­ ýÐLcT|½[ª&j_µJáf/iÔÕ”ÞˆŒFéFÐæƒ»àI¥H1l~Œ¦Í=´q:À^ƒ¾¡–—e]¶\Éd—ç0¦ ŒÎY†8WÈi)Sq˜ê‹°,`3–“ÇäJƒbñÝùÿ-–­í M-×îéžôQ/F¶,ê%?¯þð¯k\ñI×°²} e7ñ­Vá|\˵{ºÂ[;˜ÂÅ;×á~¶|}bá>-Ölq2žãµÖƒ'ÌZ­¸ mg·ƒJ±3Í­i"$ôeÊHµS•¡y)þßd,V#‹àü¢Á~QC씀R¬BÔIÔm^zû¦åxC!'\:‚KpÕ œéyà”é|u Z;ø”4²c|âÌLÎñ>IúdÊ˵;øÅNiä*e7ϒѨ€tݸ ÷Ú [¹ûÄxäKhc*àôΖëãÚ©ê+ë3–ç6Ó¦R‘Ð`èÎÙµ0à áPs(BW›f«g ŸBÁ’‚l—“± Ž éú¹pÆÓáp€/ËÑT˜¶F¿.J†‹¢ËRþ+p‡³SØ«û™!ÿ'zs³”J¨¤ ˜b+5Õ ÿ\ ì5£ÜˆUÿq‰³Žæ^RÄö•[/_JØOg œaíñZ×LrÀÙ8J\§Eý$¹á¸¼¤„"Àd?kó¦/ÂÎí¤mÁ5›Þuœ iRáÀæun: ó'- Á“Ó=‘{Ÿ,é)/3Vù,^fÅÛBœú`tmUØ2q±(uâFš-§¥lb«O3¤üµÿ |ð`/‘‘ÆÁ†¥–¨ñä2‚Cd3ø#'únõ‡ÊFЏ&hIHGÅ´ù‹K: Z»µÔ—õÍ ¾£Çè…FÒ®–ÂͨÄGÅÞ1»Ñ,…§ÁMfçY¤ž”Ž{:lñ(µ>üéëÕ£@Ü[nf6©e‘_ánï1\ôç+q=UPãI¹r ¤/nUa§¦rÔŠb:4¬Ù?T6+q"Á§¨ E&P™˜&õ¾$…Ò`ÃVÇr‚ÈÒ“27Z•ÐpIНKÁvz–vH¶:T³+¶ðó)… P°%†t“ai¾MýðäN2èrƒž&ç?{Ê‘ø$;¸>K_ܪlîðâŒgÐFó²6ðëÁ§-â÷P@ÃWÐtÇ'Å^qÅ~Ž ¸ÐâIN– /2|ýHQù•oÿƒÄ>öFA=‚&±l“Ñöbéç²…cœÎƒ-Þ!8Z!æŠÙdR\Â?ñ³ ©–¿ìu~X]†²Û»1–^M·Øà†Ò”-ûBþM ½mó‘̘¿>Ôƒ „䆄ýÏ%¡E‹l š îÃñ'åüÉ\uEßÚjkéR*´ýƒüÆ› šhÜSÈF˜¯ã­¥®f)w6Т;!aK“lFë‡åúXæ®]¦ÃdKuS¿gRhõ‹&aæÓ+Ú±‚îoäxþÒsj£PI‹(r¾§ë#ЯsËZÛ ²U—"iQ~S.Å‹|Aq@°Ë R¼—.äš\»éZ*ßSw”ˆt³TÆm ç6b[>ùö‚ÅRlà¹W‹n¤ž¾M¤ÁõùÁíÅšn*€­–„ýÐ ú íì„ÈÎÞ.¬oÉ0™ö"´0-ìcò н,¸À-ž>(tÔ$-ŒÚaò=­7!T´<"Rþs}"ºò—ê ûp®_n¨ÑèË”»E¥Ÿ$Ž 36Žs‘G}3ÅÖø±U÷·Sƒ0µ‹^’zÆ:´ D¿ x‚¤@< I¨@çeù¢óz»·–]ÿÀ‚ÏIJÖÇm;(k0œá) y ·¾óC:eÐ2F…_ðÑtc¸®Ž‹¥d݆Éì´Œ RK`mFÉ+2»z\RÍ丣7ý /Ïò&ñ"4Ü2YhÓúF7¢â”숀Ž)–r3=¹X¼1cÉäYYõá){Яt¬ÔãÊ×÷Bƒú6Ç!J'!E³¦”å{r¼ñvå`I—ùá¿ šXö³nA’‚Võÿ-_Òþ:Ax^Ö y uÂŽV–ç(uT•ª½W$v¥‘' ‚ò9hHÙ»vŽêYÿ¹¨ ƒ íü”ARaôÑO2ñÿõ:bcƒ7S ÊÝi¬*±+õŠ<Ó zZzpAùÅ>²Ú¾ü #mWy®¶KZdõ®²¡¶o”te[Ë?¸ sQ£ÁNªƒýÇ.éý£ƒû˜ é郱0’ ±Œw3 ùrŠ·–¹?Ì0—£0 ¾c'Ìí°sY´ ã טe(‡]×™. #bqsyY¼šÏ6îVG¯†'4£*ÛÊŽs—îtu¬9¦²Ø)%”SŠâ"•‚ÀóÀÓÝJ£–ŸÅ2 ¦Å:·.~pÙTؤé¡öå¬oÀø|ŸðÁÕŠ}¦6*¡ÖQý£· Zƒ¹7¤ÙRÌÔq`}™’\·z9TL dýÝ(’õôF8  b{޼k°~¯öó'&ßþ@;#pâÖ )Õ1±o) :H2øpƒ3\ZÂJš´-ÂaéÌè/¸,#惨s߯Ãõ ?$Û¬¢û zëɦÛ{µøÀpå4F·¥ÜLý"—¿jÁ¡§ÆÃÀo7e|è-@j ¬Íˆ]è+nùvB'† ìø}Ø2Ù âÛ¿ÎhÔ®MÒ"ÊŸŒÎ¦Ãi8|?ŽäöaVË~²X–®*Þ]ã1ª£ifI®ý4¨‰åÛ{Šßiþä¿sfÅx¦k™¿³nãKhBt¢{ü6ªeøÁ6ÉB-ßFBiY±féÎe‚$G!‡)}8ݦ¾¶ñŸ^ðÐàIxXb¹ZÿðäÚ>Њ{Ê›© 6ø%äèW¼è´Ž7×ßEClm¶} ×»€[ËÅy#?á`wЬœ²’è|Rac—£æ| —´p .Ãóf]„àès¨moàÂÈw’Š#ë-BküýmøH¤Á £D[Vú[dLpYˆ3Pm‘®¡Ò°âY¯q(hq-R¿ZÝmî5aké÷ –0Î œ0ÔÀÚŒB ¿fX°*ó=Í,’k³+ûV%-<ù¤ñ‘ƒÝ<ŽZ¦“RèŒb™:OšMi÷éaÜâüs?Gð5Ø3üñèM%–Î~ý}„é§ô̵K:Ir½pû ½¢÷hàmÀ…'ÈXA”4–´(ÖÚÎ Êǘ¤ã[®¢v˜J<$<$_ÍÑKúpâŽHà ™xQäÇùy™Áf®äeJÅ’ï34BÏwB›\§»qLˆ‡ÁÂÌÀGÞÿæô19¢˜Q —ëÄ™ö(tPÁ"–ܧYáY¾Îà •Ÿ1u ^/3õs—å>x,úŒÞŽU6ÇšoXsýN±`z‹*/’~º±Ší¸õ&™y»e, ÍÄÇK|B]Öøu4¸Ë†Ýqš(2,evÍùj‘u0Þ0lB•8¤‚ÑÖ²±¯¬Ð_ùõêáb·^f–¬¨¶Ìª†—q &ñqí»µUÏ\o2||Õø§½Ã]mæÔ'¡zð_Hy™˜oX®Ÿ‹_<óqŽÒØO¸¨8ò„fp?ÙaãÇ3-Eõ \þ¦»Jb#Þ"æmü¡Jƒ% ñü«ŸBa>9JßÏV»»-¥¯ê‡Hg6}Š ¿zgP[\(qm i!Ø ›)j:ä{b¬¾×Óá‡'ä{â,ù#šOB;à—×ôSêïÁ d¼Y_Äõo(¾&»N$èÇÿoë8Ð!#ST׫^õ@À]ÃÓ(à$;TÀ&äÊÐû0hVS ¤ X(™nR8h€,‘wNjZÑ ƒ5$Jà;`ó=‹íÆ¢vsûÄç­ ˜Ä|êm¡<¡£”ìVGº¹Ü¦ÜBq+ÜnTkô#Û"ží÷¹à,Ù˜7Àw̓+Cwùá$eâ]}/oÿ­N—=ïfÈÍR3»çj¼‰¬Š?ÚÙ¥…brÿ~sOµEvB*,¨(©j–d:aw)5#6èazxæ4ÙjV®2XõžR° ÚR¥X5Ùϼá0ÝåP $pLw`*®ÍñH±¹ë„"‘lH³<ÌžïBÔj€^³©~Ô4$…’åEÖ7ªìz™X È·a?¡p‚ÊXž*ÜE+diI(Z)Î< ÝÒ~ÔÆø®àN¶ˆm¿ôêBÐWÕÜúmi¾M£ùÚQù‰„&fÐ#Ô‡S•Ís¯vyöƒÒâPñMÞ1«¾h µ`=~‘ Èл ¹¢‡§þQ"H·¯xÓõÌE ˜²kƒ \'@}Ôôø@n0øEØ ¡2±°âA–~ñ˜@(NÒR^&¶Ø>o-×?yLŽ;=Ëó'¿]5m³à¨ù’„S1MºX %rB2b7ƒ™Ï<Á×ŒÒø¿´Sç) ûX­b+¦ÝE n4(T ±ðÙÙÚóõ^’o‡æàïo* …&¦ˆõ3kèc¿þ¡†KÆ»²47Ó廙ht¦ ×ç[U¯?¡Ô oÑw2UÛè_”ÛûARTçóõŽºÊ#T‘T”´_ªQòŸÁ1ÐQ9/òNF«|r³Â¿,9¿A'>H¨˜&“Íä=u•Á°~=Ô,¥ x3•> 2;àƒž†¿Ò^r^ãPäf©¿¿&ó"¬q¸(Q†Ãà©eâG ^%xÇg9IîšéVq¡t•ıŒFzä„ÃbÖÎaÆå{1¦—ûÅ«\L&Xús F¥pÑ|x+·6GvŸO ûä7¦—R>²;?ÿÊ~yNM\†ÝÚ·/©$¨à—H e€Î-ª¥­˜^û¡õ%‘ËÉÙúÜsey˜êÓÐØXÓ 0Þá ŠûðËä{Z£bi¢†^×'úÂàx…“’¬óg¦RAx6ϨbqŒ:½ËYAãÚ8@ åÅq9Éκ·}`làŠ©.”o’¸;eß_v†^ÒÏ€1AÒĵ.ÿeëÜ£Wm(|ß·ê£(X{¬Ãpú;Oßxéäìö"è[BŒ™°3Ë®rÞ»ò,©.lulœsãz{¶A·ª–^wV•ãVš|ÔÞÛ{p…C ŒßË7r‹k7.–“[)›»²žxBÈyîN+¢ÏÈýv_ÿ©aHq•‹rR^®&IÅâÙÔ3qE{?ú&§œ¿t_o6ÎMŠ_›åm[@#3l¶ª3XhwS· kA_›P¨¯qôŽýØ6­ú9Æ>–x6ê†7½îØqó`¤/‹™û2Z„4~¿hGz×ðEãNN]°µÃöJnGöt¨ËiqÒ(½³Û²úá¥Äì³NüN:ÍpŠ¡] §P½mø/aîØ°(ÇU¥y(i¯3e£™bž¿ô£›ç¨‘í,6˜Ò4%øCÍyh%¢C‚Rÿ¡KÓ;HÝPúñ&i|3Þ›gÐß}q[·zK»Íœ8`ù±ØW^rw;0F?®ƒî¿ûDà ®·Ðã› ÞB«$ªß°Ñ-W[…ÿâéDF?oÅkï톿¤½úñB£ûíÛO*PÒÎÅã†Oþà;ÿ³OdWKe|Ò]ÿj‹²^t¸ÅáŒóz ôˆñÔ_ÏÈï‡èÃùQÀÿS¢ã÷œ™|ékö" ÌA˜ãÝÛÖoÂz‚ÛHSyNèRÑ”%sÁb `¥°eõ÷­¡Qk5.©µƒN<©(À7A¿n9n5HÓæ«¥B RUØ™ JõŒ’–Y835ÎYì^sr­¬ðÕ^}v€ÔjÐ̰ÚunNl—Í-U´pà Y2ÁW­è”Qn ¤nKj(†ò4°ÄC­>EõC‹àX8éSs]wÀâãã¼õòM,Eå9ÜÊÜX¯x©YÊÕP»À#_ì¶^NQ´W5CèAõ nN 2qÄ8ÛëÔÏ®ÿQmË7kº™©—ºüë¬ ÷ÀðAø1UHu{¹­²z3Cf…܃¡PZ ßYïQþ $/V#8(p>gR}xÑKU÷–+° éДÙl­²à¹«™¸êtŽðöDŒýoU¯Ôس!ÏéâÅF½Ê®¶“¾µ yÌhÎÓ¿dîJ¯!S)- +tÙ™…úðL=QL!½Anügñx ¬+Ô l•¦¨¸Ç^n….ÏY°ÚžßÄžh”>4œ-TZŒ®[jѦd™ä/¯³ 5…þÒÌþ¼)¶pJÓ_À™÷îï1Y¬úª•>¤@,M©ªå¶ÅÄ€Ûï\pÕ­JQ£À9“žÞE–y-ò‹*F?ùJ^Š<•50Ò^nëêK à¢ÒÏ)dÇ9ÿ¼±ð{'û·ù©Ï©¹`™•uU«¯îwî-€j ,Vî…ÆßðPÇA泃„ ­&úbZÄ,Qî}¯2 pEKc¿ZÙ}kæâ¾©TtíEGRø½ºlÉãë¥sJsË“wP­LÜ4Eõ74ºà™šòŸ~žZf4Xv»´ôBpØøùW°‡GnBžV( XˆŸÔ‡@LÕ¤zEޤŎ-€½D7×âÑ+gr ŒÀ¤uV*ƒj Î7BŽ­pÒp\‹¤'µÀ/ÏÇþsÂÐׇ8—¢´ÀîH€Ç‡³¨Yh㤡¸› mÇ':Ù‚dÃ^){ÇOÒÍüaO”¼q¿¼!m·Kü™Às¾è6÷8í¨ÌÉ-“·ˆ º^™LÆAJè¶WF¡xН'sŠ>Àõœ°ý E¥@œHuCP­&qº® ðºÐìMSD9e؆ªÈf†Zì†j¶º"óP»Ômñ–$Öd)Á1Ö@Õƒ«Zkÿm³À81Ïz:ÁŽÂf°ÙŠhNq¨²y‡‡Aݶ€tñdglzòz²”TKf?YKÍO!êØesÆ‹ “ïý!§÷DßRa©±Š£y³ms+Ô‹V5³K=S*Xôë*F$ôÀ–\çÜÏ|)Õpî}“BõÉ´_sHcpç"^tX7âqið›„‚Š‘~”þü¨»ã;;å1—,¾q`|äå¶tƒà€•aãsÖ¼¶v·˜Ÿ.ðC`x†·Ëö@ª.NTZDËàÊoÛ…eWÖtƒ‘"›:FÿbÔÜž¥2-lHhªp'&.Hµ‹¯†`+o;³ þ®)^T“¥$w<ÑÔØ<ñ¨ïðÁí›–ºWÈXbëê=¼…¿êÙúœÂÂ^Ü N*ZW¼,üÉË{æÙÇÅU¬ l@uîóçÏÛ·e€‰²™¸Fôwž¥VӺƽS°µ }÷jÁäpºÜjà oï,NΦÒ23˜àYÓýÕïÔ~q¥Þ¢ò„é'6ñ‚±¡kHh©ˆyÒT‹¦Ææ¯k`Gês#¹Iõ†l²$wk$g/Ùä¼8ÙøJuŽPmíìgxÎ3è‚ÇU ‘S4=12^:E·¢˜•!6¹{yUUìw¿ îogÌQ@=pŸÔ›-¬OWp\“÷9ÆpT³ÍœÕ-¦3Ó7QЉÑßÒ[ȳYùJÆØÖÑœñÐ>ã]®]Ð U_TÙ·üžìS´-RÓÇm»l,7Œ;n€¨íEŒ]Œ’¹kú œSS{ÞÙEe%]ÛÈ"M?´Î…,)ñ fõüú–ŠØJw"H>iܶßo\ƹž' Ú¯®²94·êH»€ ñ“P?'°±}@«{Ί˜à^­å~׈ÿ UvâE†ãš¬Øy=hâÆ‘2?¡º…m×âidñà;بš]ì€Ãª™Ô%a ÕÀóp\l„²ÆÅláÃ+Š“‚</ƒþ/x¬ë x|Mû˜ÏLšž+%©7ãß( s÷Œa`ŒÅy8 qß÷ccº™šÞ¤½…òoòn:²fØ&Tð’üm¶U,däÛ B°=~󉤉u¹1öh ©u½®Û iZÔh.–:ý¤/öüNñ8$dá†w”›Úq&l¢òÛs⤷aÂàys#6òjq2¤qå1KŠÃ’iØñûÞ?xÀ\0üAfî¡„ 5§ó0ÂRF gJ”iXÜÊfáØÇ°àYøèÂÙ?¨,¿„°Úk’€m÷Ë ó0>§ÂYé†O$(Q5•ª9x †'@&ܺÑí¥é\°ë.µõ›$Åì¡¶šAŒ–ÓºŒpÞ†¹ /3««ûü#—Wã•Ø¹áM‹Õ¦CæŽ \ý7êjÏé¶"ǯ<£$VÂJ@qhèø&ï?Eô’ƒËk±‹E†ƒÑ´©Ñ쥩ÌÉç0ÆãìÁø›à;ïã¤ÛL$ŸLØ^dicg[0CS^Ú÷¯8CWub”/$Ô`ôbä›*]¤ÀjÛ‹ðz|ˆ)Û×ó›ón\ˆ~NÏJÿÃ;Í·ØAŠ’­™ë)/¸‚+-ÅÝeÃi8¥\ݪ÷¯H¨¡)½XÁÜ,ÔÔÙáTžÔ6%Ô³ÛÉ)˜ Þ›¥<úêŸý|ªKyÑ!Á‚›š¶T;õ”ir.Šúv ¦®B jNeǾ0ÅërÌ—¥ÎÌ„OYr4†­ ¬Q4'9äyÙQoг’+¬^â[Ô‘£ÄAB‰%Ð~ÐS7N^OÎB¹åOY¯§cu%gS?¨ì”ââ꾓 7%âGÇâÏ#…=}•޶<ÐÄ>ú“Òú•ÃÆ¸ÓÐRd?±¼s‘jbYù \ßÛ^M¬«· ýRå!.kö“ì{j,)ÉÙ—+§Ïf†ÝÎq*P˜'w裂Oq¹š˜ô \ ÚXjß&{"6yZò…¬€Ø}è¤ñ\¸? ÅÔœ8iÊL=ñ™“\/SØŽÙjGçRÃyQü¤»:?4` >¨ð0”‚þ%Sý­êåúLÃŽ±Àðဵ9ŸØ%†Ñw\ŽóÙÜ›[)F$`#N晌Råõ¾ù½zc{íRŒ+-ü>ªˆnÙäJ¼ŒŸ¸äLÏ )ž›„ûŽˆUª‰-Ç–¡²ŠÑçº*_’C­ØškpÛš±c­[`MfÅI£áq{²PK…ã”ꜦŠPK«@*=*zó8²hÞsO‡³›±KJ*ND¯Bœ3KûgF‡4YJò¥¸¸±Ñδxü¼=ä úTR~+ÏM]¯ð`urŠóH±¯Ñ›qÿŒp•{Cˆ‡(ºLÐÔŠŒþ¦šüˆ9»S|±Ÿ9ä^û¢IÕ°¨à»GHßh”Ý…ÆòÆ“PPþC ®—Ço3é´öÛpýñÎÞ„n»xl¤—$×ý§—1ϲ—þ#Ïòy+–?t«×)ó¶•ò2# îFÇmF!5nC|ÞÎ1Î[cÍ#ÀÒÍL½ÌóMЀ±•$ç|uh!5íå¶^N˜Òà/v‹\箥U_½™AU8çýÂIÂ]äºmÁ«ÁŒæíåÊÍÑßtù­û©<0¤9u'~mTÍâ¨`'¸!±43c9Ú¢xWRœò\4DKâÄ(Œ)ìÜe{ ÕUÖ¢•lKk µö!ï™ÚÕ´—o¼WË´R-w¼Ë§zÑ‹ØÔÔL“K-B Íö ¢f³œ:pƒéš¾?Ó}²I?…èô:£ÙŽ•‰ÒL\óÍï)¤òÅæ·ƒîVïˆK·©£-ÙÜRuê]ù,²XEÖò¬à0ˇbSóæ²ÄoÚpîóG{­yGÚnI%Âb31½æÉfe\míìò<Ôè—ñÕ:îê ™®k¦éÁ¼èR·|{È“Kò<ñM0¨â"hàÆe§››º&T¯j:AþÑ«ËýæŸbí6tÛb‡†[+Êï…Æ×¥üTÿ&ë•<,gâÛªžê™ÒØÉ]Ó<‹ÌîGŸ†R<ú‹@ò•Õ@ì=%ï_å76ÇX³»¦»¬)‹UT)ÍaNõmÔ^°ƒZٕк’u³Ð~Ê¢DV¬¾}ÀÇQ.ƒ˜2£ìSÙÖˆE$Áþ~ZÙA°X.¤Öo¦B°Éaç¡ÎE›l×á1k§1å!| ðDŒ1 m;¿ð„ÙiXîÞ‡ ¶^×A)MÊ©¦Àø„DùdZNÏz²”§ú{äßkþæ` N²G¼$›YšU}[ü›9Q¡2f@Êy(K£jåÅ‹wn1®þÏK“K²nHêÞ”ÛFh{powíÉYr È鯫Ùdù;cdT^®ajI š‡â9e:!ß1[=ë:+N!‡¢à=ºJÕf7>Ô4!€XÓàlü9{q’5Åy Ðè‡Û~¢Áíê7t‹Z( 2[`/§þ£jì ”¹Y(‡Šg`o\ÉSf 4Ÿ•¥ãÌÈyžŽ¸ëãìÓ6*Ê\&·Ê›LýÍjÅ¥ù[¾¨RÁÌW™ê}Ãø±C ÔLyµ>?ïýAÐõzïRÑTЬ«ßC^Nh'êCÌ`½;óKF«é¸R7`ëø8Ïè/6+%€êëb©gÐá_y)¢ë)QM:æñK­§úfW{ ; ð£BìNç­wYt[YúYýdäê —”À~ðø%,ϾâÀ£Ÿ^zõ¡ƒZ‘ÐGŸ _0Evå˜àÈe‘ƒ§©p¹øÁ6º 23ƽ¾¸™BA˜ê 8¼3iz•//ìÚvN¼B¢Ò+»ˆõ ÚÒóUÍOÕTòðj«ÖÓ¡ ¨&f€¿‚ØeoNóZIYá7õæpΤz%?8ÙÙþ6DNÖ¶RP}HïÞ5í†p¨ÊŽm3—¶1»Ó@–Z´o@õõ aE¾­¡*¢icóa 8®uxBH±[i=§˜Õip!2-–úlIêôg®—æ!ý-…Ü.P®m1–âît.Bµ¾!qÆñÕœòÉ2S,N>áoHHÓw¥éÄFj6R3hJBˆ{Ýź|ü’.›ÒY ;¤ MµóP»ŸøÕ„k FÂ^³8 . Ûx®)¤š{Eå (ËRÀˆeW³S¾úýŸªeZÎdu±j!µ}$T'¡ ’dù¸Õ?’¢¤Zòýœª.=xŠöýÅ—‡l¡Vÿó(ûG¦± ^¼4°®ùØ­—8{Dc2뎞„_Tãpâ´Ü7–‡û€l ÕÞÚ¼×a©%wPƒkñ¸^øø¥àz<œ;åìí¦ñSÛîY±që*p*ÂHÕ„ù¿õ až‹Ñ?ã©îÝ UI*éäw1 •”å¾Ù¨KÛäK¶“j†öÙ‹üv\ ˜DÅéÊ(k½/i ^dVŠAtøu>AkBAÅ©ãh2=3ú9CNI>ŸX¯øåT)ó芡K"A3“F è§å| \6’`Æÿ«B¶¬²Ã÷¦MhVѺ߲Q@á`ÖÀEuJ ¾#S( ƒ <ú“gðŒàÓ‹ P©9zœÜÇI‰¾}÷<Ÿœ(3õ)[%¸LÇpÑw­uÑdX¶É¿v>(Í%SMeÓ:õz®ÙJ_Ùeœão΃·_\ÜײÿÏ÷ŒÄwg†¦óÿ´=ÿÖð<‚–Sî(N†ÿÛ¹ÿ×µKí;ùcF`ÄÆÒ;X¿e*c¬O¸…í$ää;øDcç&ÛDüAB¯>˜Z°mç¡ Ÿöß>áín™½iíèãw_ç€þ@rŽûˆ²ðЃÇÂsõ TŸ\/SƒjRzyNC” lŽhk'MŒðÂ4HZž §…ªŽÞú!U-­¯I7f‡Åää_çEßÓ̉Òeƒêà Π_Aˉ7‡á0§Ó ò@ª)æþàÃxïÕ«•ÅIsKIÌ :g…5‹bq¹âd~éNÀœø¼‰`¥0÷e‚5ã}—Á2‹žÖÈl<§ó¯Be5•ÜZÄ[U§®{/¾(•üîËoÏ߃Î鶯q±õ'%´™} ÷TµlÆ5ªVr%FQùcuÙÅÂAÓÝrï €ÂAˆÚj¢`~°?„>Vÿ`jØžíþ#$´h²q‹õF2\ ïAÍ-OFn[n¥udþû·>>5gj5šhÙpy¶±ƒ,Ç)ÿB•û Ûj0a0â?Fš[Vèd€øþ ?>`Ð?]aPCÖ)µòºqÐ&‹AöÆÁç]f°¦d&s3Dåilöž}°8wPðøÿüƒ`|7 !3Ía"DŠJ†ŒzšÈõ)ÏÃT•†O¾Šêð**WàŠj¯ÅJ›Ä3Þ)çaêjtDÖŽ9F /\/i¯ß,|esp à)3Å’âh,X“·ìEÏ¡Áù!ÚuÑ«llújTÇÌI²Ò-”8gtÔùVN6·Þا4iŠÕ Ö$cnê¿ËgxýÅŠÿ>Ù7 B$¨ãÇdo±›SG÷ãšTÓÊš”ðÈC¼¦–ÆCx9,(xÜ–qnè{êÁ‰(ãâ<œ¯Zµ#ïþò>M*lTúëå›7ù`£p½wiœûКÚã˜X‹Î!Ÿÿ{ÿ1 ¤k¿MÙú¢€Ö$™‡‹È—’„Øàz…šëÆÊš–5¤ö“—]JKyNÈëGã¦Ú?›ÝSKS`î=„¿Û€±ô7F@œˆˆØ’t(ûÑysãúLà’ìá©ê•:{‘:»’ž¿—3l^7~q`k%sI3è„Rzžá¸KåD ¶‹K«|O1'®½*†oÑŸ@¼-#YçM.K{Šò¹è%]ç|¨_âoHy¼¬Ø\0–²Ïš·Öñ®Ý3Ö~Ù¬¼v™Á@kj]_0UM—Í­íV(/|áÂM%«5µL$ã÷PÛJÙ–2þõùÓq¥œŽÞPÞ†M™åã’Bj~p´|ÕÖŽóüÎy~HN<t‡Ùb¶òq„hfç€ÎB\ð*PM|méîŽ}óþà *ëì“,ëJuÎ'7ž©qHõ¢C`î£:˜*‹Å\×°É\2oöOØzû¹’ Z¬°õC3¸uõð2{ñTÂK A{`Éžê®'Õ+›æÑÍýR‚¾Ù±4‹oäù÷i¥pv‡p+í‡m`|.x˜ª´ž<< èÉTSyÐA8â7!ó¾wj±Ôâµ ˆ;'8ð=-Ð_½O´PI&,ýà1.ÅMÍÞû§Ò»› ßä¸Ý#‹Y»âêgqü,çÿH{9M6êºãªPS[Ì„Æíÿäo®Wàé2“–Q‹=UäqøQs>®dêÒ|œ­åöÒ¼¹›]n¥L`S’¶ÝeS×A-€ƒ„XÀzjáØ?(ôäòOÖ†~{ð`<ÌPÉ“áP94w®sg僕Û;ƒkhHê¥GB Å°ðÏ¥©N—¹t±gÂy 14~£ÕU+ ¶P0¢]`XÏJ‰(åo븹±[ªN¸¶ ÌFÞlµNè0»[Þœþ:«ã]Sb½ *™nÙAÖåhó2eÕˆÁ`+/؂꘡¨Ö±¿äï{q=¥¡qƒ2Dãñe£P;Á©ÿ3#·Ÿ>0Nß•›PUé5ú΄‚äJ_l"8LÙ3tô¹Æ#{r­¿ä{Q}*Ëüµ%x$a'{hЮ4ž‡yOÙ<äþ´ÃäÀ;näí‡HiP5è €aW´Øãú ¸ûÏõ.Û€Ûн÷C¯0¬Öææ.Ö|ÝX g{ñàÍp\7\ÆÍ ó!”X 6ò¹™:ò–Óè¯ÚKŸ!õ©9Wç4Â;ÁsÅÕ‚ûdQ>èN ߺ`ì æÂ °n³ 5µþ€v2U¨aWÁ„ãkE¸-Ø×®é23o[‘PWsÂ0R|Î@RÔlfØlø±…ÊÍ-¶d_õ)0k ×[ Fßíhu¤éâ+ ›Û)½ýVTŸú‹«ß¥×y¨¨fî½ñ@~ðHæDiO1§X!0!NÂéü?˜R Í©8ðpš{д’²Ìº¼æ/ü8óƒ³[6ýCyT½Pu×b·[@½ƒ°œ‡´W’…¢NópÊÆWìÛ\d1š'ØrùÄ H¬£^§YÖì[ŒŸ¥µ³Çû8ÁXý£×UyÓ'§ÒsG W©ìˆ_!»M}ïogz yFIyªhÏh‚p£ƒa|1ºêìÞF k SeÔ•%¤©­ìö,±9èõÁ851 <Ã;¤öt¯ðÇ[¬S=U^~£¢o¿"µÑ n¥Ú¯ú7u³A})L}ˆŒÇWŸ¢•jà#RßÐcá‹â#jò;ûæwÄ€xÍXæ,>zH×…¿ï#TÆõœ«G]F•̉ Ö Tõzèy¤@+.,èÒ§†Å7¹íað»× kç;rÆþ {ú_ýüáOXêo¸†1k:ºs¿“Êš~ôfô/*ŸJ ¦ã8ó³WA3çÔt§Û^UoË4ý×óR—¥Š…Ú§4eo+Ä«ö9]áC8d~jé¢oÁyMjô’U± Ne¡l ©`+—À€—$§~pâ¥x^û°h»cT©0ÌyŸ‹·l·¥„ÿt‹~®ššæ0‡ ÅðÛ¢&ª=4åÉ ²¤€Þç°.Œ %—¦<Õ®~g¢R¦j† ,nËHzUœïÂ’;¨¹‹§û„"¾Ÿî‡VZV¸Ë}³¾ó¬¢™ r-†ú£)™ù¨lTÍ¢‹‰¿ü2—*j#Ö3ÁK¦Ñ+Ü,ópÉfË¡›0Ò<Šo²Kµcà”5³V w6…îõ§^©Ñ}<7¬"ظ›I/’¤ÂA\êÌC™¾ÑbìY¬aƒQeëá m_öE‹†úøù}$]ŠÒØÁk<[á › ìtiJ(Ê,·UAÚ+ ^oà¤jFærúf£z) µ\y¼°, Ò­ —¼Ô ¹!Š5貸åa‹6'éM‘—ÛÅ'óPÀ¼s\AYØ;_ÿKÖ™%6¬"Qtm½‚*v½ pò Y}[·&ÙýÕ¹Å(4D–|ßåM–BR¨  ‘À1`kf”e<QZˆ'…hÝØNŠvÙ¾X¯%{8r£i†p´œ×MnWmSC²Eÿ g58t@¼dm[«jÐÐV0«’ZNYA+EÚa <8©•0,¢æxìNðY²Õ€™ÊY©[GN\°­$fª¡®°“ø aËØâið´fíNBÖÄŽË¢¦°ü]ê¨òA›áØfç+§ò®ÊRݬ¿‡i+Åcxhš8Â!/ÁÕ^ÛeNŒcúµ|š1áß6 ŽTVp¥a!è  Ä[ áiµØy§œ€l&“¦“¦X;[!p>!"ˆ“0¥ê`máPýÞvÌ‘ý¦´­Ïfµ–ÂTb‹AU°Ü°ÿ›To°™Ki V`V¾sÚ՘乔¡Q /šUÕQõ½Jk½Ôñš|§‚¦ #zb¬Ø:'¡yOe IUHµ0è 1yÌ»õ¸Bì’ÔÔy×4všrVYi§®ØBse G„ ë)7ϸäMy›€}Cˆæ:¾¤6=ýÀàÐ(Œ] Ǥ@y¦bÄÙ¨Yð/'…{K5pv»!>XC쩘å)®¸eõyWãš'9]œáF¯qˆ>$Ê|w”õærõÂN.8âá"H*‚`\ìz´ÓÈ<ªÏnˆ%LÎ\SÙ[|(Èö 'Ù®Œ,pSšjŒÀ£¶ãÌUÔ“†µÐ/¡Ž ÚÔ†¹à%Sˆ8OÎÂÖ#aÓ±•· ›j¸ÁO<`Šlw5šŠ Bo¢I¢Ë)ï—¾‚ìäxÐiƒïÀ¦hþ¥®FŸ±] ÄËÊÉÓr½¹³ ªãéÇGB7™7±]aÃ~ ¥*öºá1>p^ó›HåC–e}—’.ØJæM)܆Ø'j.%èÄŠ >™^"¨ØWŸ„ª1é“é’K2Ž^ü´kŒýŠá!§Ejùž”0‰œ0î:Š™®uÙJ ¹Î rvÍ«#*S:†W¢Œ´ O,W.ž¥}gQEvËVúÎãq_ÙÞ[ïÉð@#¼5ì+a“ò[`b¡ÏܪÈI s¼¥¢jÞz’aØ!Ž]oêÏé‹+MeÊîî›Å–.d‚´%|È~We™&‡š¯¼‚çS¹ÏeŒÖï¯]&çÇy+b«¡þÆãèù.XÒÀ-TU¶‹­pVš3­ªª£Õ5j½JG·´¿z|ñtîÏ4NP[šÿV.Ç“9DY!q?=ªËF}hÂïó˜æ_³Z(OÚŒ/È­ =§ ¢è¿¥¾QìIã=•"ÀÀ™E{ªB˦2€äÊÓöôŸóèâ{œÈcãÌ©/U]ò„,é‹ é–ŠP“þ1*dÀI}GvÚHaçj…ì©£w¦ žÆ´±cçÍ2”+9›0âR¨VOÂõFu ·î™õ¼”»zkêì8¯Ä“C²Â“j2ë9ó+2„ˆNçD¡Žá±–y§§œ¤¤]1\µ¾+%õ .gá—¹ÒùàЇ_¾-çãªÒsmê¹P0¾¼Bõ¸Ì醅c¯b¨()b|ž ³sê@y¶~ÇP¬¸ç)e^÷ô®&‰¾3¦@Á…!z¿“%;å&ç¦<M¢âì˜ß¬6=Uœ§"hãŒkæSG <‡ºh•³Švç/”cZgZaQW'ãÿ©ì Nçic÷©SQÏ8z§|‰‚ß ‚ÏVŽˆ¿R;§M¡užË¹â±C½ÄfwK,û_]ž·ÊQqc Õ[w?e®ß(Óåü”Q†ôÿTe©¶›N+¾í Ô™¢"6¢¸«.Ë<ëf±ñ%Äñ¸¦|R¨™«¨Ùmîü˜‚|«©êt®7Áÿå†ìxð± µó ð[&aþxàzÈmê™ ŸTÙNëè3VgËÉîÊÿ&äw§ƒ BŽé +ßÌI|Å,òí\'g»š¤–*)áa°Qrg«æêBoSÁ%¶K”ŽUV„Šºt’PàæÀ©ËhÅБ nÙP­[H¡aîø Å›Ñß§ê-è†_\«WF󩨀F6ъ𯌆B,μ%ƾq)ðÈoF€Ø¦k?Aà\ö‚âÍdoœ:¤:4>á»$°,œyA«yV±R â/ÊxóØq²¾é1MƾÙàˆv†Æ÷#`ÞÄþx ÛÞD±!Ê Ùjð˜Áäl±NÁ¿§ö&Ìa§í8‚.ª†,¿ðìâh‡¦rUÀD=‚Z‡¶ÁÚx_ÚB“†È©†°¦óNÍÊi)¼¨\¯¢­бÛ3yˆEŠ3hðF§–‚¡v†`d¦ãY߄ࡱÏ-ÚÉı‹øk¨ Y¸¤%¸§Œ;œq¥@¿ÏÀ•`[„srÊN‘²:M äl)Âñ®Æ"^—À±UÁìÉZæ\ðfˆ±:Q¸®íùW]ÃC¥ú³þÈ¡ú%ßJ¹_ë£ ÁŠð® &ÙÙß=‡ò #<Çñ£ÐU”6n¾Ü5ôwIOKyz=&:ƾGÞÙ±r J“Bp6nÅ©’ãr¯“.ØmêèXNÚäê¼EÁ¨Q¹Š÷ ÈµߞɤÙ=•­.M¦{´Ï¯YÜ0M¬Òô°SµãÄX+Õ(‘òÈ¡ÝÛã2÷•:9+¨Ãªë:`ä d7æ‡g¹Ž ;®zìá(¼§Ù|zWøð ÜåFíwå»Lf¾cxxü— =9_õ‡ŠòýYÈu>ìôÓ…†út^R–6C´Èó3"oŒ¶·éuCTS:ö5”¶zÈŠ'™ðNÈPv®|êâyùq a¸y]•f2Rêí*”Õ?dT$e½»a蟴£«ôÈùSGyá)ë=¿Â3öOÇüpÌÏ$Ñ0á‰âÃ÷™µþ»ùt~d‡ñÓkMøéÿt žy§ÿÛ¯¸bÂqɽڬ|W=®9†ô¤¶Éé]æ7{®±¿ëIo:bcµ—w•?d*ïŽÊ©¾y¬´ÐóSf:é]ÿ½koÎÐå½ÎWÅåßž C¨_ÈÏê¬Áq 'ž Lc!¼k!ce;¡Çî)"*>o†jÙÿq|ú®±ö4?]q]†¹„Žè“ µ¬9„ëózÐÞù!ýD =æU®‹øåj;l²G¿¹èMn´*S ²H«˜¥*~àI 4`–¬[pÒÃ~„ }ÊÇ™,,$ãøàèi¼´ 6xÝe±2oc²eÀ Å+c$šçG0¾0ƒ¨u…ÛYDµÑááj²ÓðÚ…”ÒÃó$‘ÜsOßV¾Ž· ×à6HEnx`xSc¿J+,ÆV@ЯgȤ´µLÙ:¤¯ê¦j•dÅÖY¥Ãõk­i“‡°ŠØxI°÷!ý9ú¯@N yÜ©¯‹çW¹fzÄox¶#ÏÖM}ÓF=}D9?¦\䙊CvF¦ŽgĘ<ã[ç§+r¾zË2çLöJ>”¤ Ç1L>©FIá@9»ûŽ2¢~Ýl5èmp{Syø!\É#T5s1î3ˆ©› Oª/€ßeœUääñ¤­Ó#ˆzð%£Ç1¼sAhRɃ‡ákˆéÑ Z¾Ó4ž©x¬õðv‘­Œ`ÅVéÂGzE>븊g>X§X³íàFÙÖS‚ú.h8U»=´…àü!SqGåd¡½Ÿ.bz‰ì‹2AŒ‰f ðfœSýøù-ÿÎùý} ê*ªçùÉÄÓ›ü ­ï2j42? W”¬®'W2l=+7[+b§qgml?ZÏih@oUi¦T–sw$mäàˆÍcį+¥›BÛSqäYèúPÎæ=4ã‡v¿&0›2gç1] œ®0ð3äaL9ì)ûJ¡à}·BYÄ[4ýƒ>bwÅõÖ¹GIUçvõ¯ÿ[‰F£žø¯ŸXæ~p&¿;y?S#ËèáP<¦It*°P»Ÿ‚×à•4pVÑLºÏó^-ëãFÎÏdÓ>B{/™wåÿ>RïŽÖqÑŠšlG–YÐöúN™ ½ðnΊBxše»áx?Dð&^‚õ¸†œ*K«AKo9ö½ã€ûC“ zH‹<¶T£ üÕ¹ÆíõêêØ(bw(iÜæD?r—Gñj•ãW ¥ÝÁãú¢ßê•QªÈ-ä(Ô#§‹@'ú£@ÐÙcˆdišµèQ7í-ÆáºiÙ²€§þ†gûê#¢Ngªf9ñ\"îmàB‡àÛž·[ê<ï»)÷£\çáÚ1 —c%6àƒ ¤ãxNê÷ ÉUpÕ|·ã+Ði ΊSiO9‘º éVÜ—ª³ü'<2”=8 iáÒó+ý ôœþÌÕÇ:[ âìuøæØ¯œ6 šÔ9ÎÝÐÑ$³s¼§ ‰t…2gzº(©JçÓ…«båzÃ,ÄCZð±+Û§iˆN7ê†Ø¡šÜ9öÀI&æù9Š\Ødò!£¬é%œ÷%Ãx¼ö¹ˆBXZN;i*÷öå¢ðLV»ó*—ŠÊCÈ§Žøh5å‘é†QጼCRW…7å@,ª`•m§^}ÙÊ«ÌïÊBC—õéÑ7iáÓå$C¤wðæ";mAä½ç ¯|ÉñØ;Í«²B^4>«Žy•ËÄh­/‡¢ÔÓ…xì!"¿×õʳ‰8F´ëB·6åyŒ¶¯©#’‰¿ ª=«…ˆBCGâyt‹M·Þ‚¬ÚU¾h§ªêá Zð™Ó-¢¹ðúÓ e‡ÜÎ M£¶xí¨•#j¬*¥â<¦áRè»Ûp`ˆcZ¾S%C+Fq˜ú m€h±%¶ø+ ìŸUò±;¡†!¦¥ŸŒ­ºê·øe±ß[û…À°è:ƒ9ã§c®7UëFÕ1n8¡[¿H-ö‘2£B/¹KÐ%=p^³§èé‹öäBúĽKήK¡ò&°tNxð$ê½ Á55}b8 ãgㇴäáè±+á[æ‘§/ Î ²ÝÃ`rÖày×ÕI…C¤ò!˺8ì–ì.”¢¸¥püGÎxD7±@>¢ì]¥ºÍ+s¾*?…šŽâýÐÓboµU–’n³ªÇàj8[%åÎmãì"Öí =ßÃ?‚?B£©ÃÅù*yô S1&z‘& !þµAW¬ŒÓUeç‘.j¤ÄEû.}êTÔSÚÍ¿b†ö­: ‰aY!z0õÀk&WDÙ!®Y]J3gG»;#S–WÈÈ 嫈ȫ”öK݃×”x!¼i ~ü)VšŠ(×xRñâV +wcàC6utŽôGÇ4#¢*»=.ÃÑ69¯C´ê¢‘CªŽÃˆ³Óا"MÀuZª’º9쑪0šÞ”¿š…j sšˆÇ8ZqàzS~C_†¸ÐƒÏ¢¢&=>~ÇøQˆ'ukØžü d¨1UDåjr£I}皪Ç@Oÿ`Î!®=R§-î®ÆäoúÖLLH`ˆže¦w êŽhášùQ<ÒØ•Úvähx¾yuOÃ^¯ú#Í?”'?y.s<ìÛ_ “ ÁÙÔ¤4(D¼U†>ÇßUÇF/ëòzFŒTâ qÅÌæ™›9Ï„©*ÏNñúþêxR8F¦:]ò&¸8+´ÊUA”£³£Ïû l§[yФVÿCË‘ ùGWY–«kÄyÉÃcL ÚqÖ¹äf)ÉlYFˆ©Ü¸ÞŒÆ4š¨œ«ê鋳 ÅL{šä¢ág}ˆ¸aÃb§ù¡Z5u&RæòoZVÇ?pBX †žŸš³yf±ª’/È&8’Ð×¥ž”ûÁ¹™=¼08ü‚o~¤ 5¦ªÂÒó!Ä1Tí­ŽÙ_¬ºV äj8¨;Æ.=Ž/ôöS9¨?í¶j®Ù:\ª§Mùõäqý9„=<çNGÜ‚;g®F?4‡òNÚ Ð%gÅœã F¡zHy¾Ä´¼~òús5?‘-ªíŠ7‡Í®óQÒ“úº²7A9/„:L<ööã‰kzX'L Zý¬ ÅùM{Û‡oš²Ë:F8€[³ï‘2mük8x8îxÒ45ƒÜKyv ÏOßíU´^ö¦Ðõ(Ò—4îÔMP½ñÄmXT§´Q¿úï‘öäxI3ÓvoÅR…äTÍSJÄF—úxR‡k’ªóT¦„ FEgUCwô5TÕòR§ÇDy©|x¢᩟žc˜‡Ȱ}u/âÀ9„¿× Çß5nóâäÊoÇ׎©˜M™j6µµžJpœuÇ÷wǽ4„·æQÕ>¨ë‹K´ú‡/â÷Gáì‡síñ’ºnœ#‹ÐÓtÛ”0˜Þvs¦/ºpi¼)cZ$ã…^yÜgêžòW,Ñôu«¡±Ž€Ðj"gªœ­g4Ö,6¦ïi„l ç9¿‰T>dY権Æ›à‘T–ù öxƒ†#_qþ#ãé¹½ÕÐêr(÷¶ãI5DÁ¯M­éKf¦Vg;‡S´+WÒ›ì…Y©?h³D¿œªPO GöÇVèÛ9_ð.yìÎ-ß_@Ýä#Grâ|ÁKŒv ç¥tŒ©´p³2öæ?¾0%‚BÚ/´p|&ðÂŽ^üçâ¿\°ðÄ‘&õP愨Îe™2èmD?ÌmÄcŠÀ^EòÈãˆÇärý)ôL9GçíОk¸Zy ìÜÐPT雳s§TLp5j{P¤ì»>”CJgzs¥å‡Xª2)ôTŒ,Ó–‚³Ë«ò“GÌpuÕžºöðS7[ø‡”ÇT¢ífD›OØ_ê_Iþ(•6œBvÊêjhSàIJ…ÆrR#ÃN K\m¿ræŸq (³ÙTƒð¨1VmVÙR)IˆÍâÛ5€S=†z›8Ûž§`©DˆT>dYáX’—zÖn¶ÃPÂb¹Goíû„žd[ÔÜX$Ûl#Q;W1“ e*$TÓÐô2HÔq(ö  âúNl2ƒ‹ø}…_¬ œ`õ^P(ËoßÕ‰Ñð@‰s ¶Sm ˜Š˜ Cü¨Íð—‡ÐžÌƒéHÈŒ #¦›<9!‰sY®ž’®Sø¬ä6 ±kRgÙ Ú¿új¹|SEgö“o‰8 ””ñ±s6@é*³‘{ÅR*j«X‚Aþ1Ó)Hø?øQÅ3&1Uc»~ßR4:ÅV.ܹu&Ó—pÿÓž°?’Ú†J•ÔÕð\B~2’öøŒIäÓ-\ê-šššÊ)¨¢$¥^TA^\W«ˆ|3šäÄù‚ÃN£C™“Á˜FÔói&‡Ü˜ý§`LþÑ»ÀN6GtˆŽt¤ç«»+qQ Œ "(°\6Ã\rÔÓ¡ÒÑQsúf-4jî•d«Y¸ò7sXáDiœ]¹[•Žö°~.`i;ÉF‹1P *›"–phê;·NŠ3ãl%HΆ±ª,ŒqôÛ»ÀB*õÅ]úb¯)à x¤¶ }Õ†'N/svGÄô`ÆÉCƒ$Q¾sžËõcá/þx«¸5PÒk ƒž©a€½iGyR¬šÙߎ:c§ ƃ±¹wG¹–$€Š£÷é/Q¾sžáôx&jKda,–Qé—½|E_ü–Ÿ`ŒGX”tcÞnæ—Ã`¶¯G‚Ð7|gùbG~ç;µyC ­Yv(-çaø ° …¡|³1®±ã»»_6ç ÖÎA}¡F.%°ƒê¡‘FigÊÊõE’k î‡s=;ðl7+>_lª}ÿaûþ™õࢠû—2õ‘øáLZ/¼â°íÍÙDÊ3(OãƒËz²ƒt5gWâlŠÆ%ñ¢é4äˆaÕ‡¬°”ÝÔÒŸ?º› ƒæ˜²‰¿KÕ]fCn˜y§<ƒÑ¸fB˜—…›±7ÕÑ| Xv²+ÆÈ¸ 3Ny:1(Çì˜ËìˆÁ5Nƒt@ƒ)/‡Öƒ·»Éóî0Cîkó7WlÌÁÓ™›7ÓÙA¾îhXÓ·6 sí½jµ¡´5*¬x=؉›ò)}Õ½(µ<=¿œ€žMÃZ-ØéL¬ø-Nõ ̪Q,¸iT; …äû>w™ÑHØéXRàp¼Hj þâ;G#£¶ÊŸ cÞ\³G¬ÎÿNà yN_&¾2YåKzzV}>÷:ÂP „q@PsÂT˜žsÅ ßñþ8šÝ†‰Ô„).Ç-xµÛcaÁdVrA;ë’Ì ^§#­ô#ò³ê`V5ÞHБÅÙ‰ ÿnš“”ç £5›Jã$h8x..cáà@m'l-atÆÂ~Ý™ÿ˜hc}>G ¶`[mÚÙ$­~í\¶ nÁèí²}íc#ù»çÕFûæ^ðOÿËfÚÙ`Hº#NÍÂbÁ…Ålï¼9Õ$”oæ<Ô >H:«þºbÎ P)í |…ŸïÌwƒ][kRž‹ó½Ìšx}ÐàERKðWÄ},Ý×vé\?T_Rìç¦áÐpxÓ\c¬òaÆÎóîЕðh;ºîoéèú¦ˆbf³CIl¸tËsá­§s3ˆõ¼þÈA9pðo…lvÂaÊáîecö<â³wæÎ¦hN鋃ò·Ás¹ æ¢á„ð#d íÛ]~f‹ÕëÊh“¬)ã1c@)%k×~,A’œÇ¼jÖtËBÅ¡žT4en gVÀ:¯$Ÿ zUtþRª¯ oR_…ŒÁèŒ$îࡻ闑²kžJl9R3ƒàq׬CB­k¼å+å‚ë.ÜÞå Ù´¨Šä<ªl§UOL$h[q#^Œß¯òxf"-‡‘6äÀ˜ÀÏ¥BÅÅeœ;H¡lã24µ5vÔÁ*’.”…úJ;&yêï’ÞjOóòül/½º¥†Ÿâ_Ú¸°êÀÂvÈFНG@Xöÿ; Ƀsf%y@mX7M„a0TÈj}à¦ß~²Jc. ûU7ž¢t–´mœs7Ù„T±€Ð6À"›©XFT>˲YnÞ‰žÎqÀ!É•rPžÆ™ ÊX@‹¸Öð}•šjsúE™ËP(ogR¨OÜþœÕÈ×WÕÜÒÙ,aÓ<|Z~#Ð\¾± |psÅ*aÍ~?P8kÛJe2ÁÒ}׺)ò“ß¹!%¡b`e¤°C”tê.îFºN®x‡Ë¨–å6J"ò¢5'·Ä#ú¥óY‘$zõ3Ën¶á7j8çy/.ƒŽC §ú <¬Tg௚uóÎnïÿïyoô¸àAšÍáœ5ŽO <ƒ›0Ê WùµP2Á(VÖVuOÜüà TL$Ô΋¼¹nr˜-áR³Âä] üj™añö;¦™èâ„'ôiÐL¨5 °K2ÝjYüžw¨•)”ÆÕO0[Œ©]{Z¡[®PîGð錹éý¹†âXe "̯2SÄÿr sk(~¶››Ö¶½&“=ËoOu+˜fw=ÀÕ+åÚÇÌl8Õü[ßè{vP-ÜÙ›ŒÒ`ÐI éR‚:Ÿ„:tÑ7ÉPD#™;DÈÄ—rìJÀ›e3®’ž‡†Y£õüœÙ•£ÞALEA’«ü²"–ê³ÊИÊ;ô Ã « îJ§¦0…ɵ cå‚’¨(Ùîq!÷›/^,XHÁÖ .þ0Óðì€'©TÔœô©þ—6À‹vÌ-¨jDdáúv’`ÎòÄÄÿwÒÏ+Ò.׈ԷU`U9‹zy¨VÕ!šÖ­ «ìIšH •ÀjЄœ|eqWVFÅ›–aÿkå äÛÒO*º&?®ì‡þºªÁÌ},à¶°q x\¼¬DÙz5Ë­Ê…bGèøŒ(«qv8¸¬`“<ƒñ‘înÅ+ùhS¾»˜ŽE×vCœè»mòcÌ·N­î[oj®©š¦¾9ƒ³i›Ë1åy:ƒM5ZÂs¨ß̸³·€GÃáJç¡$‰²SÍ(åfÖ´ãÀénù“>Ôc»FÌŽܰB•Íï4ö‰~É Vü&dž=e6835GÏÆ£õ Ï0¨³‚ YºŠ éý‡OêD‰ fcØMÈmxDú±8Oä:Q¼IVeç5;ΆÉrÎ=Ç^¢…v$ô¨‡ÿ¶žMR£¢¿U†Å½ö‹§>º“ÿ0ë°OÝÙºõÇ¥þµ”ÿ¼4–hû½L€ÛÍ`@ÃÝË­i…Íóèãæ¦ÍT¼Øýà&ángÃ?îZ‘|µ¶F·2#Ï 6µ›­>œx–_mj$¹RÊÓYúa0¬Ú¿¼ ðê› ¬t‹éžA9öyê=±£4ëƒ{éí6a²qÃï8Ó0'µ oéAeS`Jµ8nÖ‚½Ï3{¿¹&é:ÒÎÍøüÁ§šóã£Öb,y³Bi§ã%µ¸ye’eZ¦AîðIçC’¡ðÈ^˜½ŒŒ©PËG»ª–[¤W”3óìÿÍ·v¾/×IœÏ2Œ~¹x <Ï‘²›!ɰ~¥óõ`jV~£—|üe,hx] 48>fõy3÷&Ê^ep!¸™ùà²-s¬ ¾oµýU‡á`ܤlîK²’ÔÄÊͰñ+W¿¾w>™›Ûq¶‡;¼ÍL±>½\6h§lJg¢ì´sï‹§Ñ'/ØêfM¯óh1ß²‚¾Ë|ï—¸ŒæfSyÖ‹í:úcPÌÝÍèóŸÇâi ø¯|—Z4œéìF\¼Ó¶W„üåb{‰+rÜI2ËÇ4zJa[&ö[ß`o·¦9X›ÅËZ)„{7ú¾}NÕnòª…r˜50ú ™À<—áE’nˆâaò Û‡òYδvÕŸÚ’çã]^JÂe3j¬éàâ87nê*›ÖlЃ³l^ª­&Ÿ\xìY(©­›éÁÍfBßôT›š³VÜ™6‡6@þ¹pHR®}œAúf!Å©?ߘwgËo Ï8}„Ü4þ ¼iìÁeì”oFÒÍÔn&S7”Ÿ×áÎL6‘spÕŒ„'8·—7~´óÐâiÏtÌ çdw_ÏnÌw$ÿ#4-P9³cñU`ç`§è㆓oE?!tcç:áÆÊܨ'{®×=PWSý³nµ˜Ã–ªkÌZò÷÷¥ù×çØüüáõûP<©nÁíÌdÎ_ÝS‹¤…Ø%,7•lÝóN|R›µ(gÑ'Õƒíõ ¤æ›•zbVAuÅÎîX¶XMÞ˜J°z#Ü’Üļ/¶½N?¾ ?þéWS¸¶¬ç±6ù™xxð³‚büAÇtijcÍyñ8Q@ñ)e<.Ó0í ¿8/þ‘ô§YÈà¬0!ö-ã'~½LC'aZß)+ó&ø™f{çâg“ñæ$³ü-Ijjú\€˜ã4.—Ü †µrçóû<^ÆmãæÍn]Öxø•Ñì£öÙ¤ü §Üµ@ü˜8\qJ¯(äAIJºU®8>þ}?k¯1¤eذ~sîO—¿¸u?¤»v'8Rìþ‘¯üpg³¹^8ÁÍüÌQN8±QþÀðšÉäØh°"vaºèÃN7“›ac1™Â ¼äY]e‡,ë¥Ù2äãl÷K0Œîðî,é¡ì6v„á¬j¦Û§Sö2€@ܾ«ŒÙ#Z”’ñ„~çQ_õÅáÆ4Ïû†i2ŒíáêÆ}!S¼ªþÁžóä2 ¯yó·Ñj¨>Ü }sig¶X§„ǻҨ+_Ê0^Šé:nœÕùÃÕÁlú푯5oS#EµÔ@0l8U“—ÿ–²­®ÎrÛâ8ÅãP#Áœ€™úÙø¯‹Ó˜q¶’* 5³QQ<›ïê¾èIZ63ÇK+smTÔIÎ$xšé«7ßô4ª\Ò®$jûä¶ð î‡êZe^,1ô7²(Ô³+J‘ŵ€òDy]U?yƒØg~ŽêËœ¨¥-WE=œÅƒ¥ƒ›¯ÂxÂØkBŠj‚øÇ;0ò䗰л2®~A‰•z"…ó€V=>»º'1å@bµí"˜SÑà1»‚‹øó¥ÕžMÈ@Gî¤lªcéæ'ã²ë<Ü`2©èÛ¨wÜáÕ6&MæÌ5.€,„pΪ%MÕ"ƒ•†IžE/@n;ô¤m5…š\%¤ïW@ºk²©WéªíJµø‰D|zg=»kžN×$ÁM³ùú#$i‡lH³¦¸Cí ¶!íµ°Ò7!7Rïèj(›” 6,®¬U3kñšQ>=èU΂^£·ü‰}þ 4\±¤±{f»2®¶y9õ’BH­ã@L¦èý.ì´ ù$ʦ)í|¢ú“ ’*V %^$#øjeŸÂG2°Ê¦ÚÙTÆaNý‰`;" F|1å¿.ÏðŠ™Lšéà›“Ô¢È&ŠkA”ïœçr}8j 7ŠaN)/ƒu­¾õJº3¹ÑeUïç4lOY½pÅ´©±Ÿ4"vÄÇoÝo“xRÖ”T‚{%Þ2ÚìØçA qlOoáÖ¡A}™µÂ”šU‡ e‡C¶rp¹á ©^«ºas8#I &•˜Dк‰L]¡E(¡1*‹åÎEq½èy¿ÁÕ Õâ´æªþ—Zí7Ÿ|} ç«bD–)¸IVÊ‹ÚÙ(†ì<е>‘ „3¤V,S]H’5;{Áð…¼H’a¥Ø'Y$QNÔþ‰ÚõÝj;ŸRn%ds:èY¸  x¡"…¼öÚõA<˜…úbSÙÈÚà/„°t*ˆ 8kÊÁ,T ’é†-tŽ´H’¢v®ö H=óËææ¤Gf€¥ ò!ó*~æ³Ã\Æʆ±„ó qTwy.÷F¤¶?}°;¾Ú‡Çc¯³|ê†Kž…; ÍÌ*RŠ A@ï|Ôóf±}Âô—ll9B¦Ét°‚Ëyþ(=`6-<ÈðÅ™Ó*ÛÙGm zxö»Ù©!HíÙÓo:)Õ+ô.‰óz=ÈÚ C‹¦¤"ýp’nHÙÌ//hJmÇ©¤<MÚqð¥…/Ý®àÆø©!¡¢:&4«Ør¶ Á†ïiù­ˆi?6¿P6 aUtés&yN4+A?©¡XFÂ$S›ƒ<' Šuc9=&VkˆÔ_®BEqìÄÊxøÖÙ¢©e`tjg• Áœ¼^=ï„Ü_Ð6(kZ CSBÑA-íA{7Óp°`ê ²‘{HËvaMÒ 7”ôÇPçK÷€-õI?þøˆìèIøûTŸv… Üî/ÛŒÖìŠ wã‡ã÷vÑÃîðå‰Ê8~ ÷–0Óп6´ö_;EãíjØjlŸ aþf¦àF|}<}·t?0\”Ýø² +TÂÙ \áÙØ›ó%&¦¤/R~í̪tPZ†‡î’tq|‘¼è‚ßZ–t¤súßóòŸïÜOz -ŠCwøÆ—`|EQ}Ií&’.íçÐb™‹ ¾ŸÈÜ/£ëÂqýÑF*‚[¶Œüù»aÏc«Wyò¶ÕrC¬L—+”ødvÐßs„›àò”Á &5k”D»ƒTjæî$(b×!ŽG-д“´¼]hi‰Í¦$Ó_V¨¢ål2ÅÖ‡ÌÌÇ™/yÒYà÷šYµ¾®¢Ã*:u;4>¹¹RVŠLlI@ñÑn8mÀòDÌ—ƒô#ø—ol=xUðNE|Õš¨x¦]þwVéþ2£|'¯0 >„Ò'”µíŽ$MdÚºuúÕ ¶äB縸<#yhŠ-ÌW*H*Õ¼™H Î },u 2­WÎióÇÏõM•Rô°¢¿•¥Ñ¥²iª+6¨#RP8Ëy@3J–&Siã²5)j†$ì^aü3ÐÍà ú×5CÜÝsg¾º[=ªå20 žg”jÅœv4v– Ò)«² ö-ŠhþûJ~æUêÅϧPÙêâÁ›3:ì¦.°ÈÑ–ñžÁ ù¨çÏ›%Jû‚kƒ„4ö Ñò,®Üœ®^ƒ†”çRzäÅ(f܆Iž˜h‡µ”7Ó £‘ƒFgè‰tjJY•›ªO•©™Ð“Ai˜TÍ)†Q¹ŽúYÏf*̘bÔz âµúP‰¢Ý‹‚™š”gPžÎ_l„YQÄÞ_ý sç‚`ìúžM¸*(æ(ÜKRø¥làåpªCé†(&Ïeïµrydc‹ZŠè­öxLh×tWù¦Ù¤3苲ªYÎú È“JâEÓi,ÈÃŽAÍ`ƒX0µ,übÇÚ@ÿ¥M¬ÞK¥{¡oMgß•xSÝ™näÑÌôáÔ»Ó0OVÂ~_±ÕjÙxÅá¨Åò¿™7£ZµCiBf½Æÿ$=³k‰~Ð)ÉæŠz§"YÒEŒd“¢P(›`Ü€¥È;‡Æca †äÀT“—_.|s5»‘k1{–Žš·g#gŒ qŽ˜ëÅ\nˆânf~æ™dåÏmô1¥U|ìÜè5Ýå‰sáþ' ÉìéñŸ5ê3C»¦5 ÔÎ\ â‚âK$©¾×]ˆ\ý°ñ´•Q_­~!XÄn>éUC‹¦ I2íCÁë`ùªÊåÛ½’ëñÌHõ4³ˆ?z Cò•g?ñ¦©¶5R£ÔÆÅ$*òA]UÈ´» ¦J‹ÊÊ­çü&ôlä˜ bÃóâ<q×M—n¸^ßîžW_+¯˜VmÊ]¢—Cx ¦4ŸLÙ›>Ù8|t |È£ÕðöõFØF‡³Ÿ7‡™î2/’±/®Ï(¯ó¿]Ì-¿e™:ê2…ÓŸŠ/ÊÇys#:‚·½ÔQˆdœÓ‡ë#òôi9n—9¿)),f8,ÿDbÞþ†$àMÓnüN¦ð]ã×ÝÏïÛJ÷Ùz3GüuÏE_\þ¸†Õr"†ÛŸƒ%…ÁdÍ –!7×äy[ì΂±f¥Uh–úmØ fÐÀÂéØè´‰Ä+™`üõÌpÑËÌ®êoE]¥²Ð6½³™• ÔÚ i¯Ÿ¬”—ZÖéϾ ›yqŠp [挑[O^uän7ŽšöT³°RË#}Üü‡©íÎÓÄTu-õ8J3ðo `%ñ‚„+æ„r žâ„óî~ùæò=kÍgÎÜH‹gÐA%ÌêŠ7aE½ Š­¥13ÂÆtÏðÆ£4Üt*®˜ x˜lõ0bSI (ß0O3 ¹w×¼"eED>1¸zh߈»Û2zjæb¯aáL¶Ÿg €«]}Ô«BÕ‡ŸIojЫç;ï¤t‘\ zwæz¥Ç8¤\¬{ð·n8U]¦ø5sMÈs"^!9/¤]Ób?.þ¢|¥8¡øâVäR¿M ÀÑ÷:/¬gÆ ~þ¥[é$$ESéÀO‚ÝðUúA¸ìˆ&'¿ä™ëÐUaf$8ÁZT•"ß‚aÎ~1ù_ú"È7]±v|ÑùÎ}O«¿Sz m[æK?X/çvÚ9_Ï+ѼrÅq¢p¥bN’ùÍüF¬tvä´Š†=(%TjXA;²d0´³ãimÉÁÕ·EÖgXâí! €ãõE+µ"Cyǵބ>6y`ÛR4} W©eá Æ Î 6ü¸ø-/jyóµ[g¦îÕ7t“¯?ji¿450YöÒ]ÃÈ@9“üd!@&ŒòÄd#ôˆ$Ô…|Ñ4XA4v `éÇÂ_6ü°ìš]¥\ôsRv•1í¸ ,;b:ö‘Lׅоè“!‡Ëæš§öŒàr¢byÖ®0˜ Ú¨ËUWÉ/H6.W>7p£]öˆ °™q¥’'ä8¸ ›ôx=*µíjG´À·Ë}r¡_IÇ•ûY?륙š oRž k8ã–Š·ž=úp:ÔÌJ5ír`>kC¯^T 2 ™  Ñ‡ ½UW':¡é7ó­ •®IŠþDè­ESI¦ý´´»Ò`àäJ9(ÏÅÅ ­(Ú– ±êÈféNeS²ñ÷ : ó.£^š¯ý'„p¢üÁ˜È!…`u±Jág…¾É5O# ×Ž« †xc,ÚrÉçõGÌÐ’L¤i*—0 _)Ž,¯+ÕO¡K_Rû©ýòW ,L•oé übä0¿.©–"ï<È<(}BòàK™• W?Uò†ÂE>>Qt%¨ôy¥I(_ óIWªwQÌÁn0º¸oŠ!A‡j»’sìo¹ü‹C2 <°øƒP£§¤E…ïaLKMÐÌJŸ™ 'I3cr]ª îÅi˜`ñJ-F'eú¦) vð’íyg6ÅnÐ-"y:¦¤as”÷[pÖàÚ¥‡;wmNÅ‹þ¸w‡…ì0ðaØÅ¨rð’+ïy*vvÝšÔâôÅA«fm ä<OÍóY pêÀ¥_7Ö›òpå ›“¤EƒÏÄx2Ú\7Ʋ`Q.'%Øz0ÓäT=ø#´ /*cáà@ŒÕ2_¦6gÞŒ0€˜b¼îèc"›Ç6¡&dˆW„ƒê8»aÿd§Ñ¼äyh,.GüµÃ F€­„=ÉÝ.­¯ý$<W¬îA%MËÒÕf¤0l£2 9°ƒÔâX[ÐTdË‘âú\ç½Ãôý’|Í>+ßÌEpâ Xe³¨­¸µéÝ×ÁX0ÃVƲžÈmô¡L˜@ãMe¦"Ӻߴ’®ª–)C¥ UìjúõG鄵6T0ÎŽ¨¤Ì^L"_j ¢ìüÅAyc¢êj[ ”ïœg¸tC” s/vc#¬\Žòct€ÞM0§ §!ož)µQó‚Øžk[ ”qYÂUšvÈ7W¨‹-l-attÃÜ ÚDv&̃ yH¦ÁŽ~¸ßíÁæ€2NÊ ò4”áTÏ”g°/Xá2¤Ç ø˜g1ñ+Zî2®è0@wysàa3ÍËE±j,ÓzH¶©‡Í¼xÚdÃ`¶–ÿŠ’¾bG ¶;O v‘Gm±#ÐÉ«ì&y Mà0¡’xáâ-㡎KšŽÍàãÌF˜PŽ YÏÙ#©è9(šåEpf )}'½Ö»Q“ø€»Ëˆs;8h»áß2ѲƒSþë¤ÿ Œ{àùžVR¾øÎyÞÝŸ.Övà –l‚Uü*éF›ãX@y¡$E½] „@&èŽ1oC7Í z¯NÚXõ¹yÆM¡[ÍóñßóIC™Çi•zä ©Ä&›ëÊhªRž <Ïð`^]†‘íÂ¥ß2Î~ç[uÌo M£¡³J%- l²¹z-QpS}²kIÓÑ[Âìh#³ Ñ¥8›PY ¿ôŸëÝm7wÞKNå*Z»-9üÑ;sàŽdV:;ôS¾ùùÒð¥š"«¼'aS¡â´‘–éBP¬žñ>sgé‡aaƒß€Ba¦CÓ€üRik‰³$Õ iW‡Ø_IbXÏnáÌFzM Tí¡apB¦kÀʼYLgøY=¿Xf!‡(f' â¡²"ÑéŸÇÊŠÅ} ²ØDkÚeø$ªl PG‘QɰX8ó Ý ×_6zy@WÔ»õrýUË6³ tØô×û²À/t°˜ÂÖbü[­‹öMèØ¹9¤” «=¬8ÜXÅpW˜1¶ç—P`rôG5ÂMèA&hÔ‰òótWeSÔ³Jpm¬j«‰^¥Ã ?g=µõ@ÊaÐ~Ø~c«1ƒ›×ÂúÓPîÖ[2ˆÆ¬v˜6ÑÕŒK7¡e@^8ÿj%5¸¯,;Õ³+ ©z o}_€½ê2m!v™Á·Bñ¹=š ©/ˆ6u–Íûzc´¾0O7v’ŒwÚëòj¸¥AcL¦ž€m]ØcøÖü¤¼€ÚB»‹Õ­8ÙãA ߪéÓî|¶Ð—Þ࡞÷°EdÈû9óX4QŠê'^ö`¼#›ä©Pl¾ËBäšàcq½» a:TDÒp•Z~ñ ó cOϸì¦ÑU­A¿* ÎV¦jfINÖ¥ßùÄį+þƒÞBÊ~ª|^&…/HtP1àrCYŒ<‚°Y§ öþºA\F×àÇàvEäI:U3•+ûpé©^á£ö„æË3£ñוàÕÊóÒÑÓnS?˸äK4M*ý0®+Ç–ÜÙ/ù¡×N]¼äÙè|íÆØß«%•RÇÁСúÚù° èÀ¯\M=¨_­§]z-o¸–?è¢GDpEieÃy©uˆ?®$ûóœ‡$å8‘¿œÀÁ³âÐpƒâ¬e3Dª¦‰Ú&ŽÇ{©}æÚ»™Bcwsúœœ=üª›£¾SÚ¾ÀÓãÁÇ«6…‚Dúa:.m¢}EÇíÚÁgÚÅô¼r>(Ó7ìô žh*ï”ñ. Å,…‘ì Á¢÷8•@ëO¸á¦BmÈ~ÅÄ4о´NĦØ\ ~˜WIA”ïœçÝá£þ—] ™–'{Mô  _Eç¡Ä¬YBeMsxi‡õ•. :·¬ÑÙQ©IÂC–à« ˆ‚lälÏ .f¬½¢1°$ƒª-èéd*X· ›C¶œÛ+u a°º‹FüL!È–ËÜ{XIÁÞÉpyÞ}ïƒiAvª×þ²Ð55íÈ'e#Õ}]͈HhHpÂCúºšö„Zºê§¡Pqê‡ÓðÜõ/RÀ^ªWIA”ïœg¸\MûB³k`¤@HqmX!›  ´í<¦QVÐZ¸v›Rƒ©$o_‚¾è¦Ï?„q•¤2:¯Bä’ÞÑð‰©ü`'¡¥rÁKÝ Ka0Æê„Zà?s¦³Æƒ wõigÄ^8pcøÉ’H†`„(¶¹Ø§uúJã î ýpxAÜxõ©:$ºªyË·l!M3$íBØéžFŸ³‰Ý"\:w'Qª©â8©ÃìBVúâ2š~mŠÀ ;2ÿÀžÇ%Ø0M3]Q’?”g0–‹º¡áLɱ¾´Å—^«2Φ‡VÜ… Þœ“à áÑ^vªz]Ÿ¤lÄ) ¤޶y†eC/â=mçƒËv*ÏS {VOÖ¶æ5éù¢·`]JIï6»(UÕÝÛ} FQ-»n òtl8RQÆ ü4AãŠ^Ã~—w!ºú䢺“‚¸øm î2¢Çf7nF VŸ$ô;›v&3!”yW/|Óôyf@Çœá-—ºá†+‰ÃŒ?œg8,úpÕÛ®6Óa3;ssÊ6ó\6Lá\8‚²G­»*cŒ¹Ql«õî=ñÉ ßŽœÆ"Œ ¢i ìÙ ¤÷ZÞeÓ•™¤¾pS Øÿ€óe—bM©MGæ´‡îžé| —¡Oá€%(Ï`,*8\"yS¹TLÜ0‹b“PÌ슔5Kbáf8 V­"õóE`£䧆Îd§|ŽMR0º­#òÚmZø]™ÒÐÔË`Ôæ*”o˜ç27<GìMŒ-Ÿf Óšú’Î š“T tcÌÇù°»߆Ç5NO\ª¿€ß±'Sgª-¤iªº#šf)ý"¬"IÕøñYc;4ÅnÄÙÆ. ·°:œaòtË[PD£®Õ<›¦”M‡…Å#õìŒ7Kÿyb…¨#³”=P ĵ, Ö·`çi€õ]óÑ›ýú{ÿ{Ç>߈?Ýn3!¹ýŽn[t}yØó@FÚ„Ê’Ò‡Ë'ry¨²IW•¤ŠD8$iª3•+êëOAè. P–E¥-‚÷'&u¾“ãú£'A$_òhóV‘¬éFí]¸G~KIœ/¹.ÿå!ã÷²É^ëVé;c˜NMÁV—}Ò[š&Œ4kš'ôLñh[4´ – :ÌÛÒÁ&Û¥ ¯š§Ve©¤{Þ¦— þj±Œ³j¢n¸\&S6•²ÀBÇL<»«õ¦'‚j†<Úµ(œ4Ýõ­EaÎÃ8׆²nê>·U-³ë¦P Þ…Ø*þ ¼¨ñ £2vÑÁ÷åžï™™û=¯ÜLÎsñàn7ÎÓÛ•-&XS£"”—Q·€]g‹Àý뉈µ!É M*1®°7ôñ‡øQŠ’\×Z†«È ÚÿkÄdS”¢%-$›j¡äƒ–é‹j ukŸ´Fx§ö‡åœ%³©iH{¢ü ºñy˜©/^4•ÄÚýª>÷ã²5Œµ4LWa¬›`ëÌ‘ßVãØÔÈÄmvÍS‰Mt󭾺áˆ08gô]Ý.µŸùµÓ?6'>k{:/83—@{6ž×O±Qð]*WÂà-7±ÀÃ|q˜ÚnŒÏX˜ºÚ wåí„ò™ÎáŠx-ÜUuú‹ x(µÑÒn ”0ã ó ƒ#W³è_LrЇ½nõÍxú´“TéÉ3„]ótB£ÊØ+ƒ²Œ_ –¸ª{\˜ö ö¸PPqôcŒp¿Q!-ÂɸñX®¨ãKÆÎIŸ<öÿ£ÐÙW ½ ûêS@t«ô´¾VògQÀ=‰)ÐgßH .ÓÀ!ù ùÆk8j“—ïžû‰äQß2(a8 (s® nïFBeˆÃáuT®’‚°ÔÀzky–Õú”´€²cF(ÅHÒŽM@ VÊ <ƒ wÏ釂_ ¦ü×åyó}„±¸ šÛñÈ ÊÎÞP8ô%üà0¶C[[83L¾ñjPž\8=2sC¤½6<¿ÛMpˆ§(”ƒòtîû¢Ãiغsw·lßËÝ]4¯\‘•÷‹Ó 7¨å8h l†9ÚËRžŽ`'ŽÀ1uE’~¨ ÇŠ„_üÀàÛ ô%,+nÆü|æsH¡¡“ˆWˆ˜ÍԣϙQÎl®O»'ìTSôQãaÐs˜!ºÍeR=^ßö¬Ð¨?>ñx à H»[üþ2Úº>Kmq<>ë¡zÞcç±êtͰGœSþc¹ý±’þaÿQ<6¿õñÇ{.¶låL^¦R–8ËÆŠ6‰¦älp¼p[ˆÆÀÍUúp| •à´°®é ʸèKÞ],úp‡ˆü²ê¼=¯‚îfÌ›C–[9XñÁ;ãZ¸™š9Í>ü—ˆµzp`D‹.óc¯å†”oFÒÝôãæ¬áò¼yÿ(ˆˆåÊÆ…×@fºãäìóZñ˨ó0·sãf,›AÎrø¦¾6·èðxœ]>*b‹ýán®l\:Ú]3Ýíÿö±:÷’>[<.Öj_õ¥é4Hº!å?&GùÚn(énü,ÆÎX û¨Á‰]D›}Øó¼Í»u%œ÷qãkàj´¥‘×;ÿ`|ŠD°«F͇koS? ·¦¥7×ÒŒøÇ7.#ö±ˆ=Ü“ûø‡ûbu¤ÐÓM=Œf¡C’³ùÚ) ™³|;T Ì3Ll!8Z2ŠòVt;znõwè¶X&ÀD „ýº5öìÜäȲW:b… ‹þºsþI2¢‰NgÙî¾\îj;n®ñ>ÚOáø NƒÓËqaÊ }ü ,ýw9hza”˜ø”|J«ˆ`\¸¦»ERžn‡×D9˜[°¤;ßKYÿÃ÷ãnF½|~:~1W;µ‚L›ÕÁ‡ŠV¬òÇõ›QR¦Ïnãå@ðƒ›n)a£¥záLn>šl¶¿°È CS Ó›»×”µ%ɳH„ã|ÛæO¥Ø¹‡ûbsŒœ'>üÌ5vdü1çÊ츜of°O¸ÕgãÞ‘¥~pìáw^®KZ@Ùpº¦]Rp|ß!ìî7‡Fh•’P¾ažËÈ0žC£Äq³5›Äëý€5ÀöynîÉEï toÌfñ¡vPÛ"Ûæ1ÝÌÙÕHç¦TGT°©á£§ÓÙ$Hª§7¡~ܯmá}Ø"⣱_6'\’s}IZhq›¢c—ãÞÌ^ ‰!³Í“ûó0ú‘òT”ç>œŠÁ`ïÏ'g>ÕÌ›¼êAyQß0‹°Áà† ³1¶1'I†¦’ß çîÉNe£æ¦kƒ›1ÝÇ~fIýX<•Î'N4cjÊ|÷>¹°ÒÇŸÈ——á^A*]†¤ekþ‡¡ü›§J½¾]{{e[»Á™±•¹“d4ZÎßìT¿Ó‰—Þ¯ã½;ý›3FÊ0J4zñ‰Y~.> ñ©ìôËŽõìŽ^ð‡°"›±ZqÈVÆ ƒõÎ]q²˜Ý¡è\úujËwÝJx}¸ú_K#Šð‹ÊÝ‹j˜i®¾ö IÁQàÕ¥¶ÆgúT:ÜÒ™¥˜mŶh|mï°Ç¶/É)v¿° g“ /JIbÞà#/ópú²n!‹}ø—©`‡jajs–ßµ!G s¸;6ðoµnüQu±žG1¡¼ OC¡â4°?WÈ.ÅþÐ13uÅ‚o ñé \§ë?Ü¥C‡$WÊA5ð š·Ø¢ÁNçÚWáóµ0 h*I5&[ K@1æÊ¾ÀÕ %ýçÝ@|(éÆýSÏ®f|äÚœNíº®WAÖØ^›w k ªíñAçŸT‡ßKýü‹¾èúÛ¨˜~Ñìç@d—+•¬©­\n2î}9+!åéxpAà •´3ÈÃ_'ÆñEåy^ãØ&\„TêÙ‘káíêŠ4$´5*õÊj|ÔñþCë奉MÑP`ž7ƒY@µ¾CQ²ãæºz–ñÎä7â/g*®¼SQ®€Zž¬ð{ÕÆp³¿Å ødÕ,À òd“3a,›+÷®(å¹ O 5ˆï#@>MMIFŸ†ÖÈÙOHCBš>Ù5O#/°C$«ÈÁ:`­PVÕ©·†d9m¯¤P¥‹F$­p–Dƒƒ±†« ¦S Q ³IžXìÀUF¾04EGA¼¹æiÔ züòoPÎ+íH™\Í‹§öAâ†MúP˜Á*’ ^³h*”o(cº3Àº¡$‰þ¼ûôö¥%&v‡ÕwÈÆÐO¤5ëi÷ø©64‰Ø,QB6âpøæƒ8Šž‡eʶÂãl>Rl×y*U³^b¢Ct–Œà“C1ÌF3õ,µpGîÿ‹ñú¬‚XÍ2¸k+Ž«(&Ûë•Ê*‡à€>Œ-a“/FÖ/•í¼¦S¯¿D›é`(úéôå±Ú&ˆÇ%›4d;ôl‚À7¸$èHUÏFASS*Ò½ð´Í&L•¤&³åÆ’ƒ½z-›`Ÿ08izu¢®\6鼃ÊPÕuô< ÞS*ª›J=;@ «Õƒ2¥Ý—ºöpó¯ûã°Ó½{†÷› À&X‘kc :© Õ+úŸ=þõ ÷üé[TÿC”/—A4v¨t×Ãt¨6•DYñWC}çãj¨½Ý5™!Iµ Òžªj?¡3S¹j<„UƸâwe4 êÝQ¨,ì‡c›¨d¯ÿºà¤G±©â܈‘pÈÓ°ï ,f2¯É¥š>/‡ð¬Á+ÊYÓ­ˆg¤^>Ù}w8 ~µ- èSš\”©}% d•LØ©ÝͰ¬F®Ca°)Vµ”ö«hÁNÁHPÏ¹Ü æñîó û'ÏΟîv3pP_(ɰ¹Jwª²)òj\ÈÊcù<ÜS6Ú|:"¦g׬ÐkÙ#Ó~Òk\Û¡ôU=º_UvAò¦Ù¤¶X3±Rº‘~ÿòbtb™¹ëŽœ­¨i}‘´Ëë»åæÁ&‡µu*²3߇Á)­ªÓˆñ ¸RqJ²Q¾¾±$3þ²Y ¶ó“K”{ÆÞÜ`£ª…ÂD!»ƒÌ]Ï8ÛŠêü[ÎhïÝÿD‚åj åé8ž Å·b¦†Rà’vnÊ2Ø!BøØR“ë·B¥¶^!œAÞMYæ½°o…‚½K‰^¦}(ì$ÅÉBõlF­ZÓ[­Íà»(´ªMñ¦RTšÊ€|PÎ8 çÍ(çÜ¢³àÆ+–éåÐw£ú­P½áF  ž­YÁ'²ŽZ[=­äN7à;æy3÷e›áH»sV¨ÕGŸB qyˆ-mŸÁÿÒ·j•2@™ÊÖú¾À+`}P°òï‹Ô§éý£Ú‚ñFYI8±R¦¡ÔêËà,ÐNߪ©Ñ‹›2×ÞgÏßåÃJÈÆÏÝBXhÑy5•QË©-ôwÁ¿(qPs,O#á\ Óæ(幦=èãÃéÉNÇËip3ôé4ÒnX ;yÍF‹8 býv\ê'/ô¤¼°u®î”L3nêýBµ'ˆW6ÑaŠ¥6ÚM;dÜm¬èÎèï„äDÐz¢@™¾¹ä‰–ñÝ®ƒ7éÏR f€(ÎŒÜK^Z@)£JÅÁF:Ãxä/h)ç­w+~ËncpŸð@Ço‡°$ÛéÚ¡§E2B}ÉK•øwâ wäJ·ÙæÓ|ë˜ÓIyjº ò•÷[ #‚ё˦¾*¢¥úó]7Aæí*ITŸtgÒ€XWä^ÇàúÄrWÉ‹ƒ¢ôP6ØMÙ¥š ˆ°K ;8À¯¯Ð:‚Vé[¶'H%æ %ßCg JHún,Z*—s vRø)±dAÙ¶A)›Åí‡rk¥cXé„Í…]Û1; ŒÊÓÎt:ÉÉF8­þm¼!ÐmùŽ+Áù@ìÊС­ã£ô?”ò{ü5¸*;Ud®;–M(ß•™!rGûÀ–ñ$©£pJbʦ<·h@ã ðdÛ|þÂAF,ß/2­S9 lü|“èLé0Å6²D;ŠùÖKFGŽ.dË#Œ˜wkC±T%ïåÖvÖçMÌFýÊwÑuózX .'WÁN6±£Ò‹ª ×1í[`ïýFo%:]¤ó$Ù¬mGÉ»‘Ò7’d«É™\e“—Ÿ°À¦È'bÏ$-ç(xu®ôiæô_²S6=¨µeƒ<-ÎŽ*ÉÍùTyãPzèä4û]NÊ9÷àð–ÆÎ’w£Äա҄숳äf¼Ó0 ƒ·Æ.ûI£›v`}9´H‰Sy(ç\j=˜<³±úþ[z‰>m´ë) Zì—½Ÿ½š‰ÏBÉað‡±aJëzé¾òëêB³i$a~Ÿ^c9í•âë¡>ÿ.IH?¸I[n[Xð…`¸ë4¾,WP¯€+Û;™Ä®ÑkÉ|Wë ™«-ЛL®;ÿ(©²ï”÷˜täÜ'¢[ÉÜ„“9!à&ù"N‹ea>¸ÖÚjyg»T—DíL ¾;¼‰-á5pú ³daH3 ÊÃu }r ŒÝ*][·•“Þ¾ThCɸ® Ú&jp†à6àÒPAÑ/‹¡éŠh{ªXð“D•ÿDóÄÁÒØüÎÕá FÜèª*¾ýsó$vBbÏUªBàÁáîIÙE6‡¸â ÇFÓ0Ä>ƒ—†º¥”\8”kЂ2(ªË6a帵sRúa'•ç¼;žÅGm™UX‡6àQŠÁi’]ºi›J;r šMwre×R2(•ÊɤºH&£î"›C9É6=èj/¥þƒ±Øz(Mà ÙýêXN(/ƒØç¤e£æn¹ë„ž’PvÊ™»AÉ¡Ôe®‹ÆÄô%혬åÍuºK1´ŽíXØçú¿&rK‰ƒö ®hרu§Î'g7o4Ã\ k)_ _8÷¸=A× òfN€añ íéTÊ®†o”‚ªã‰@ÙîyRÝJâfü>èõRFÑÅ9;(FäÄÍè[+)¨™™Ôµzk-°D6Þ!õé¼(nÂ.&ýp­/3ñkæŸ ÿ¹àvÝþû›úc±HYTrcÙÈ~ã[2“뀾p XÛSàæ)Jyß±‘ÅÓÅ‹`¦€˜(L¹Z¸ê ÛÒÔáÆOÑÂåh\¢KË}Vã ìó±-¸ýa§âMâ9l­‡üÄ‚®Æk)Ýñ:°Yb= Bg1©&WCÑA*H,n&g©¼ÇcéžG®›¯A¶ÃEB[Ç”à{ÃàOƒ-a9tÿÓ¢t'HN„Òvt®89VJ¼ð3-y‡ÁX¼©V´÷ƒÖG\øjkëžùI*/hÞßÔË~`Gÿ•J°’ÅՊ˶ %6..?Ê“pðZ®¢µÒ,s)Á_×ÊÄFM•ûDt9ßJ7ÐÃd/§Eé P‹Ò‡šÞ[0D)§äj&±U“Ö ü˜Ž:͈ÃÕ° å!^sÚÈ¢BD4‰.`U¯¸shuÖ¤{Ù“L5´T/É™&p2¬.ZvУü Å~ï<56¸z÷.°EºL“ Î|è '¹/ÊN-Sߘ/i}“A)¿çz€j‰ "ˆ8lò$àÃÅi7í.ÒN§:º”]Z› cb^ù=)»¶bq7Q溈“³d6Ê88ßäÕ*CkQh‹9à+NÞ¤}w©¯&à¼K}†Å©y“Œ€+!Ð×¥¡:3±Äì7Î2îæ³ô›ÜÐáPÞVÒ$p× Ä+ä¨%dâŽåjžVn–õ¹>˪ì’L£<Ægï$Š6ÞôäÞ°†-P†ìˆJ Ú®8:»mÇòMðo“ùO±(­Tv•lt=¡OÜ…ùŸðœ7rR¬“Iu!×TN'nͨCCOÊÐ*‰«Ñõê¶1QÚ9YåÉˬ:¸ßæª n©bšPh¶"Ilýx³/Í\]89¬LwÀÁÀ;¢#ºDÛ ¢¸,vˆÇZug»¦áWµ†â…IË·Øaò¿÷PæúhÜÜÊÛá·‘Ò~ Å: ÄÔéO‘vÂ_°v3Ã…2€ónZ]&à²Öy`¿¬\Ãh^ÅEôB“^£Üò/m`½3®Ô½ãõƒÒòÀ³û÷©Áë‚”“ûÙnì”K*(x<Ý ;œ¡¤‹txýî9,¡£l {“ãÔ Ø…+Z+5ãl­Þÿ anþÝàºY>!úã"ÀrI^$í@uéY…ÿˆjANåÕKžò´ör*Í`§h¸SìÔ × º22»¹m…°•€.K%¡ìTš•©K/AóP%ò$G–Û/ö¤Ä þVÜ4?f›@ú:”«}`æ6íj±Gí¸¹ŽÐHÐlÛÛóŽ#»´¹lÅ¡³uMrR²ÅírH&R½X]”:^JW¾ºÄòÆÁ¸¨|¿ì.ÝÖ|\")eïJüޏxa'€Q—<ƒš~Ð,8Vª¢ï€ K—lóíêJ6†ãà:Äè-ÓbQn©EĪäP2¡NÁ¸'ÊlÚ(~SÄzWNÜl3]Üßý7¨l&l²«#¦5A»i;\O¨ nñDÍ‚¹úKƒëp||K÷g/’×oTF³´='p2,Ô2xÙF/Ú8-Ò±Ë'Ý´”>ÕA92-à…-)ï»—øœ2ÏÞÎZ±Q}œíŠ“Nì*PKoÙIr(ó¤T&ᜓ—›÷¯UìR]›'Žrª<ƒ %£“r@ë>±Ëa‘NSnPJÃ/·³@ˆbBdDuQ‚æÒ,n‘MJ6°O'£\9ìâ Èü Ê.Ø‹Õe˜~ ®ŸËfÆÊÊPï^ÜmýGRviÍ`DƒåäèÒ‹Y'|ä¢ÝVN`¶J_ø™àɧ(˜[3.©)°2=·R³ãQJÔ8ËÛ©‰íc1-î­Æ‰@’L3›èQɪŸ›â6Å/1|È(~J†–n¾EbX|TßñáéAÍA:; ”Ó¦žÀ/EoPrŸùrb€¦øN•ª©Kg_®Üz©ç"®‹%ïhí:¥A?6ù°H5ÝÅ>zñ'ç%¯¿#ñÉ ç]Ž•Î€×±È'D-.÷S[uk^ñbˆ…¤ŒŽ°1«¿vOú1(½TP¶H;pk=t•õma+tF¿Œq)¾GBf…Ôᇠê0]“Ø@ü÷B…P<»H¶$Å8C%:~LÄñŸ´ À H}À–?Æ^?“M÷ư×v,è(º² óoøéÉ«ØAó¿ÍãS%‹§°“”(Ü(;ÚÊ8¡‚ò9z`+‡˜cUrƒJgèÊØý¼å2°ÙIÎu›k; 9 rÕʾmk“ËpiPi õ£äØð—C«l`¶¸!÷qVÒ é À«3há6q€š *ðup5ìdÂÍô§xJ6×ÌeÃ*OÇÊÍK—_å94xýÿ*ÇOlv¡~Ñ&Žñ¾$7\þq2ºö¨9 ö`žã,[Ð,UÊéRªæFŽŽƒÔ¡HÂÂÂGÄWàÐ{¥Gn8t®>9Þèæt5›7/›'6TÌ Ï”NÊ“:–“4ÜÖ\ˆ .grjhË·¤œ¯ég@ó>Ù¯P$âÕßÌÉh4iApr+­Sä³Ej¤AÈɵ~Oì¦qˆ’²á™bRsÙäuHlÀñ»0Òùu^z•O|µ¾w ¿{bìRÓsÌÕÿ˜X’t^(›qgü®»~ºëüpE\¥Õê!9°´^¢_~ñÎ,IŒWŽŸÑ‡ùæÜ×ÎwO„ûPùU¶TwÁGÓB®n¾®HKÞpÞ¼xÔáð¦Êå¤<¹¤‰õ¹ðDǤP\¶ÝT¶ÃtÇàIpÏ9Oê8à pY_ñ%£VÞ ~d{’ÐÂmbL¹Öw±„ÿpø)ÉT2ØYTYQ:…U‹£t6ªäŠE´€ØKÁOw4ê6?!xa“<µ4(NÅbÉ¡Q£T±œÏümïfB©‚'ªVp+ÒK¥þ…Ų¨‚Þ„Al1›Tˆ$6UuÈ”§Ý´äPª#Ó¤näsÊÔ ¢M~URl®ÕïiðŸ(CÒ¤'øé9å«"m¶ä6H3+ª–ù«¿¹ÞÊdñrùŬùÉ NOʦœ; ¢RgE÷mchyk(× » ì¨q€H †-ÒCªI— `Ïqsäe’w¨rk€“²©l®í4ˆ?^&ŠÊ:•ú´‹ùƒÿT`û刅QE¥ó¤cÑGyàÉѳøbÄQ\4H-v(çNЯôz}¡Ùi6ð·èìä»Ô¤®™~¿‹Ì?„rÐp5]#6 ‡asö™/³9_µrîfþÎ*n8ÂãÅ5Êgêo"~ý1\çIÇ¢ò@ŒüÄŠôdÒ¿NÇòŽÅo»­Êþ«xn”ò³—l®±´Óñ$u*±¨Á^—ÁàuÛ{$¿¬r,W?-r5½Tò¢RÐNƒi¡]²­)u‘' bb-HŸ8AÄO7gIÄÓ\ ˆ'I­*>c!,€'!aòîf†ÚÖתdçÈAyaçY!ÑâëŒ*˜ýDTŠ’xߊá%­Ù`þËÆŸEe¼ãÑfÓNÊ®¸% î\¡o½~OÞ èç–~º’­L…Чª´sÑÕÀ¬.\ ²Ëô1ÿHà>®ãFÏÀT¶§#§€êðE³™¥XjДXS1kiTÙ%…–)¼;*øR§xu >ÎVîýŒ«+Öƒc99°3%ç7î/×™–ÆÀx†}™Öÿðäº,s=¥3@±]^­É­o¬ÓØ"pû Õ~°ê®‡²Kûý…rÛí°¨ }Jh¼nê²ÀOÉ€Zr»'çJ·’…îE`:îì‰VÎã®&&#”»´"ÑJvÁ:Zù‡ÚPÁþøí°ÜP†)„³Uý¢Üÿƒº¨¹„+C3Ê®v›‚“Ê÷ý—Ë7<˜oñ×}¾‚è€âüT‘À×ü€ù¦È·"p5Aµ{žïJ7vŒé?|(C„ò"i'JmÕÝ…A7XH\ ˆgAyMpStÜ€çPE;ôjÇ­ÛU¯[9!v4½“¢Íƒ i±ºšðf wˆ¶}_~»k”½\Š–Ê1så4‰+ó÷+¬¢;‰«¨ÙÍ”bñI·þ  ‰UïC®)Eæ: Ê È©õrþᎠWbµƒŸÔó’«Ò$«ñ; Ó¯ÐvXÜÊùXÄu±äÝ 'ÓƒÉIé¤êÈ­”Z†pÄ HÉ.´³Z0|KC6!°K…|éÕ¶Oè€bcvÚ¡Ê.©œNG)ÉQZ$ëpÀæoØMåÉ_®T‹ªÃÚ¢¤½‹#žvŒ{ wtc‰÷î‰ÀɤºàhBcFle± žR‹•D7ŸXE DŸ™ª¯kíTïë–›$³Á%휴3ô>FØ¥BâÍ„àK¡X ÑÅÊpÚC£¬PE@‡Æbœ'eh›Ð}î1´'šÊÚC`+ Êu@¿˜Z_ÄÕXXHR÷¨ÑŽR&wÒ'¨#¾™³xÕ’Í£6N&`(Ü ƒ¼1À_ñˆ±gà°g$90`+¥’E­¦Â®y7ÀxOÊÓ•Ó´—¼_l< ÞTÔüŠ9\“$6(—÷/f'íÕ4gªÜ¡±Ê뉈ð” øè#€R*ši1n TNìð aWí@ÇÌ GN:‚P¼/òdT<)Ä‚ô{ëôøP60a—lR]¼¥~ Ê—lH?PÇ2?XJvç52·î´›ö+1úWe ø‡¢¹°€×]xmÊuƒý’ŒÌ—ÿ…¡„ž(øOQ’<ñÕ 03*½¸´Ø›®®«ãm’ŽÅXpâ² eGN€µìÓr ¼t‘ŽÅhØ]¤±Ù‡K*§Óì,Æêû>õø—ˆÿyBïìˆs:ƒVé{›OQô˜°Ó8¾X»c-%°3{]ì+@ ñp&D:D• ï&™«gªÅ’¡­3´[<Üu®´ÍÔ:4!r•ÌNT»‰‚Z£~‡òF%1eª¦É¤5(ž–a¹ §ißÀõxX•²#¾mzT‚±œåÒ\雡ÌV/– bÐÕPr/HÞý`#U“ÓåäÜ/ÄšL^Ü ¾ÚZÙžÞDç ½Ê6ú’­ÜÄÙ2À3Ò§iÞ¼¨ž¦Q+ t}}ñeÌÛÓ´ºd¨ýŠ`2®¿üþjW®€‹2Ý%R7åúæ~¡- ¬ÒÙ¨B¼† ‰sÀ®’÷E:0Õ¸3JÉä,5àrÊ»ií¦íÅB½!…ž¦»I?ØàJ®Ýô¡WóÊãÍ€üŽ^©ŠêɦÅüùàdÀ.Í ç c"Ž=0'™¾¨5'•ØvJ9!•Ûh–¾ð]ð›-õö-ì¿×¹.*.¯Ð’Þ e¶9Ùµy ÉE1˜×KTèiÚšé;¹f(öh‡b™¯´³b,/yô¾îdóUMê0mlÚ±éƒÛ!Åù^{ „ŸÆÀâÅv^rf“$ïêùÊ&O΀v@®ämÉøÃ.XAÀå€?Y¬ø‰Šéñé¸P¸Ñˤ1ô ©>,É6Ù,5™~[YâqçsdJ&_.œÙž&¥Rgà~Q(b¶Èv’ùoÑÐXJ~[äjZ¼îµeÕò^䟟ɾ³áU6·Ö_éÄ|w®Z¸šÚjJ|r2ð£^Îòxx1–$: ]£v„zQA’wÃ’wÏ–­Ò6îNÖÒçì^—*4„nQònþMÿLѪƒ G8îVûQ¾9c¦i³D(£ª²KrÅ*]8óÕ»èâÌÎoöª§Äw\/Jéñ›}ðÞTÙ…Ñ¢ßðd¿›ñEª“MD…“c¶\¶¸ Óì帪1ü.Õõ0 AÕ«s—vv/üù±Œ¤¤ Ð퀆Uîœ Ï€nUîu¨ iâñ^Á‹t,ö­ìKi7É™ÕèeýS&“í -8ÜU×núö)®Ó¤y…NÈŽXÔg3Àbe—ƒrrD7 [çÈâ ½Ðkô+[öR®˜0ϓٯJ×~toOe#þqYh"œÓ®Ñ6ŒªiÞÙà‚‹L£}ŠA¬×ùRЕÒ Õ0t2¤>øéd¦öû?=Ô YT…dT‹n”pÆ> ê\=陎x%—µˆaÚy{BNÄn±“:0択˜ÇP'®­9áN¡´¨‡ƒt`^•u8œ”°—;JãÀ²jÜÇÈ}ê…&ùC Ë•«™Í{¨Ž 4ü;éAó’¯Ùwe€Z:[ܹä Þ¬Ôäb*Áû7¨2”ëo\¤²}˜ëÃàl?Üy]Il«F˃“A9M±bÑ .Óû–‚ð°Ø ÷ò&ÐqB2›à$ÔÇŒQek£VrÐÞ9OˆU]®y?M2ÃWÚØT²é·ûajlÀÙ´w¨œ.Z…²éÛôJ;` 0“»zºo‡Atû¢š ÜT”C¿.uÄ\$ïN~?ææì‚F¦êäDÌŸ»Õƒ”M¾ ~9h?¿x!öÎ ðÍ&RêÒ‰œ±K.îŸ,ÛrëEŽøÐw!uàê€ÆÕ¥…2 í¦šL^³ô-RgÙ Ö3ÉÉ…«ÃA3×pŒCÐTÑä‚Ö!ç€ê ywòOS¸ÌZ¾L^œ ºÉ7»bKX¨ãà5·˜]×®Ù¤– x£Å+ïöðg†¼Êæ'Ùö݃¤w$ònQ¹5£ôdÔ«tÇvïÕÿùÅßðàÚ‰!Ùb‡\9ÉfùŸŸ[Xß®?ü0’ýŽ×¾+ÎàIǹn‡ðײ=!Ú9ònòÄûòÁ­Ýò,wÌôÍP¬d€Ë7'@éý“t,ÆÒý]~÷Btÿ áQ*tãMʦ²›;î Iº 7dOØs£œÐØÔj1AÚéì’Bu€¢§à.Ñ‘+„+àg,^8,ZÑvX4—èt¹?G€öMðÂá¬L_&ûÅuÑ'ã÷2ùfèÖ¯j”öè[âÌ’p½ÔfR¶™•D1žÝbBÖ?âô« ',úNwÕ"”M7ˆ=:¬”¾…‚¼¾ºÈа´ò`…nO[ürÁn„ugN'V“ozˆJÓ) ¦4Ë¡ÕAò¾Hx?:ôÉ ÝU=q;Ûs9‘©=´|ÙŒJ†ü÷*%–ílÒ¹:(OÀàÆË­·;%‹…[)¿ˆD*9;ÖS2£B|[ªúœªCÁ¼ ”-&—r¢æ§%pš ÂK´åu”üÉs+Sîø¸[(Œ]÷ÊûJÞËËõj ’MÚéT/Ò±ë8œt/ñʼn—¯‚w®œ7þ4ãÃôOŽ9äÝôU:çŽEo®3w‚P˜Cqx0n=j–«‹8¡á’ÉU09¨8u¶²oÚÄ2o®-{¡Ê“ƒÑÓ0ÑÙpøºTÄ¡àǦr½©²Ã7W#æäÐÈINlPJr¨0,Òv°>“A\MqÍHqAêæRƒX–¡sR,:(–nà§W³Õ –X¥E䤌ÛDгuH“puHá %¯;'BË€ö:ˆkTLÏÑa§šv6wuÈ7»$èÛbë$µ8ÛA??T?›@5©PlÚ²N°¶Â eXa“º[±×jÈbc ÂØ3´˜øÕ!^àkúĶ}íd"&ßWLöÍ5yŸfcŠ îAbG; !Y¤Ó4á¹j°¨‰•ü‡[ lqW6èÕbíiÒÙ|·HK!?ÕóAˆ¼a…ÿÝåLj’!‰”SP`îÒT7ôOÐ3@ë•XÙÖR'Ìl ©Üw6ŒзBÙ…ÊŽ\0†A:Œ;d{BDMZç R6éãVŠ÷^ —Wð•xmOH²˜”°¨nôëËKëyU@c—ªÃ SŸ&*Ù«áœÿA·ñŸwж«Ál".‰*È6¢ìSn‡E|ÇjÈ5ŸàøR|©äÝ@)''î'e<‚éèWB D?[rVp2©ÌÊTH¹C[9ð–f€r Ó‹“A? ¿º”¼ø›'— L²áüÕ3Ì M’Ì“ý;Ãp%2éWGØè@°®’RÇlÜV©}Q ú"´Œf‚K]«0ìÆîeF¶Pž&)ê¹É/î(¤NGä'þÉg4¶ŽOF¯§ï¼x-µôP® ÙG©œ0jzýCò|õP_¨—Ò&½€m¥öLm;,Ñ•‘ûæÜ) ¡ü»(arŒÅƒÅs+ Õö»¹Ô…;‰+Ö [QQº»06WN‹0·pyR :©òdÎÝ8»à”"°/ÒÈJÒe‹5BA+Ú‹ïßÿ¹+ü‡NAþ/`÷ ”¡é祶g±QËlc—¹›ëîºô¸S6nV†Wþpܼæ›9!X,µP[šÆ 9,2¹²)ÖŸAG ¼C{mCOÙ&µsbg«'›iÉ¡3ÓPY2~çÄ-hGÙ=$šk*à>­`l¯¯óáÂiš4#y_¤Ã96š7Õe†þÐV%If3êB÷‚ätxÀJeQYîgñVŽ¢Áƒò1R•ì‰Ä¿–ÃÈÝæÐ°åŸœQÆýJçjönæs6˜Ô³«[öNIîÏO*A™'É6Ñ‹3éÎÙYVS¹µäiäo$M:?85zH¯²lTrþº*eçò%ÓEÍðhÆ3?œj”±dSxè=iÉrž(’@sìïQ,øNl“Š‘ºX,0–(\þp9]M„‹ÔyBrú¹ê¬õf°rÀrƒT|L–)êæKé;JüÇŧ»ô{Œx`¹ß±Pþ‘ÊGùPÃ]ÇVT¶éþTô!GI®9t-©”„i¢L]¨³S¨ü8¥¾Ž²f™éÞÚ‹º“^Ey™(xq-ÿb“Ä^ŒmyÜÊý›û[¥èÿ)è‡üߺÿþ$´Ô²ëµÉG#÷ÕêÜýe*ŸI¦­L7°ž&]æ§èg½¡±¥cuÆ2…]æïª¶wx­·tî1HËÆj‰E^.Ê–û,­s%°åM‹Aã;ViÑku*öúåŠ.·Ý#ýYùc.ÿ¨³Ó¥»lá6:_G©açf1{64mJÉa¾J=e wï2ÑÙ?ë3–ØLýs°êBçJÉx&_ø!PUìCwŒK?®g(å›ÞöuÝ‹p åWr‡U†¼¸Bëv˜–4 ›vHëìzUNÀnq;Ü¿ïÈTª’_>®b¿¿ Óºgß–8D=sT²Ù îØƒxs­ê¢.ä‹?q7 ÚzQ/ëX:üR‚$NFѽNK•ód¼“U’Ƹ åùi: LÛaКiïV"‰¡¥Aq½ øú‚dÄúòìÏÏ‚˜ï/ÒŠëÃz(/£¹Nœ p3•Ú}"œ1¢j%É&µ\€'¦lRºùW‡´Ð-²IWƒ+‹§Æä÷Öë¯q‘Pì´ ©x³ÃråjnWC©:îÌvð)dÔé.J~C´b ¦ ¦V¾Ù£< +àË rBy§*ôù“qY ‹ï,¬H6ƒvˆ!n‚:¢ý6×ô®ö?7äŠÛc )깊Fâ­ã WçÌ@ÏD þK–Ë1H¹CÛvÔ ‹ü˸_2,*Ü1N,ªÜFxöÇðQr Š6PbÈ^*òÎÉA:;)÷È6ä|”ž¬,”¢‡îÆ'£-°\'¨|soFoé?¨Ù©¨§< ’!ØìL«'¤{*†ó:¯D®Ø´A^5#PM¡’i!ÚÈV‘›©l¡B(–M=ã’q+\.UŸgy0fRQ…2ŠUá[+ þÚ9dh圊A‡ˆEN®Õt§ ¸vê ˆø+~#åÖœäÉF/Ùž\Û…\m̧i}†Ú£ .@ Ñ÷Ž@&\ †§°‡ÚÙ€“k5|uàœw›¨h PîB0¢%{¦ú5!3ˆV«mbøcujÐoAűá¨%ÏàŨŽÙs%ªÅÏy¥Å'Ï‚:j‘:¨P@ž©Ò¤_§S‘”1¹³,nÒ0G|Íúwý° ¡žÃvÿ'„=3TXMs‡f‹[—¯¼6TÜèaR¿L{ç âÜ¡¥n‡C6½rª¬Î5tgP¥ó¡¯€¾No5`ÎòˆúWýrý};¸ Ó a‹ÛÊÕ ÛBaüI˜°ø<Ÿ.˜0HGpL§òa¢N†t‹³]Œ ·|N¥Ðò6ðOÏŸ®oåbª¦ªPaM™M¿¹TžÐ’L®núvñj•ߦÂO‡oV£raZÙÔ^“Ø¥AyçЀ…w®Xø àý€¨wY2¢W¬l-)=L^&í0ýæÐ `öŒœS«AÞ›Áëå©òx½! —vØRL5”T¡¢lŠ=ÃëÄŒ³<Ù´ôàG½rù´x8Ð]¬ Se(s…ÆJÊå ±3ÜVRâ Ø3» W(ä´èÉœ¹JÈÁ¢ëÅãòÓc¯(ØØy|Pôá…/-zhçºè“Ѹ·B™ž¡ôPöiðÓ4AʋЎ¹N›z¥ÞƒH¨†F&»v6}CdcSUÓlR¥\°Ö¢ª—•'‡fÏÇ›»;Xq¥aÊ”²—HÆ¢O¬`M´¼8@ø0tjO“Æ èµd, ðŸ)S…°’é Ñ»÷¬;_oÄYÀå§tÕ?¸%”øK’Ÿ(S>ø\äK~àÐ ª¤j€7¦–Ò1ÍÅVv×—iN>Ÿ7m6£¡~Ý%™œ®Ü ygèë¥ÕÄJ»%ËÖ$D!OΡ\A™Mv\}ý‚ld™©›ä E­AÞ¬®•&ä‚I*ml*jŠÛ\ —É7{Ép¡ð\b‹À¡šMå4ÉOî ÒPÒ NA³¡{}94®^á:_Ülm7Q.Íè”F•žŸVCŽLçdR]&ìÔ¹9KÞt8 cŽ¥âfØ0ÉäÊÈGKeé] d©ŠÄ€A¼¶g¬­KÉÄoS9–«K¥“ªláµÄï‹¡°=z©¡–ySïêÈœC•dé#ð$IÁç÷!Êæ$³i7ùÇÙáN\‰r·«îKé¸3§èÃwY¾Yâ‘“k5‰{ur9¡Õ"í¿³¸A‡%C[CcÁ½Ü"ª$”­ ˆ:œ‚ù\hænóM¢.ôPväê y_¤ÃÝâÀ T…T†´Ã¤›íÖ SP~¹x^·r²QT}uH3Agô®ä‚ch¸pu˜³÷ã)©Ûj«â®ç/“*› é %§[ªl‡W¶ßÝäRf€“·_ÎÝ…ÙaÜÊŠØ:sõN·Ê/Ô+T]’l ¿wûó*¯¸Ýùó#ˆÊß½é ÇýtëA©ä[vºs;}SŸ€”ÐvPà#ýì.(ÑëŽ9Q ÀnQî9 ¨’EEÆg9~Óú¦|OÉö0é!ÏçiÇõ[,Š w<ïúå?¯ ³*¥Áwqз5WƯ¹NùÏ/_y— èwY§ÌPë ±'ˆ€¥&(~û„¢­àŸY0ÁËÑQÁ´A x“y¤â“ϰ–†‰ž\]&ä[•¾½m•,VFÑø´O#}¸—:—Ê)ÈûRòFß<)&Ïi(UC/•-”t‘zýÿ\˜¸•L¹G­oþ¨Ùõ@S“:ºPËð#IüD×Â4{¾uÏVÎAö¡l0å‹*%à ¹¼Í«6‡ö’4Á[”%m:µ:ÈÐÎIÝ©„üê”V%§jƒŠ™%ÚúÐ <©\ \->éV?gIø{” Ø·Ý ƒ|?Kð ~•qS…HÞQ€§i!noÀ¢‹HpnàÜ]H:;qr(ŒóD¸Šˆée—˜NNÎMJ&…Ë;¤òÖWòª¿t÷âEr'*¢o#üà*8r0®V3bM„·^ ~gÏlö)TûÊ2‚Æ ª¼’ïœ\¤Ïú‘e`Ù/3òÎ PÉD° A:næjÑ‹¾$ß"É"užà)éÃ@M•j¨gZ¿<é ÝÙÌþaxË%vNFÿ ØóŒ¢sz•*V¿l¤P1Ñd"ÚÙ©èâëÔ''ƒÓez_²9ÏZr% ²êWÝH:/J u8ÇÅÂ~ÿ'„S6×Ö'ÌÜ #: M*%6(%T¦ë&¼ãø>%ÓÔùSðu‚2×PëŽík  w: œMªIëPÉ&Í*•ÌȄȔ\kç…v7¶Ô ÅTñS `<|*(Ä_!N°Öü dÏ% ø]Õi0´î’F¥ è9…ê0’vTOth-6I?¨o¨qáØêzÐ¥ÎoÙ]vNA>áê´Ó·ƒñwµÝ‘:ÃV¯§²å²ýòãï?ä?„ÐHo-—ÅÎUØðß-øè5ðñòÚJ–.)ÉwgžEïXé¼åz^ªôKJødPz°‰tKiœ8ƒ›ˆÒÅÉŒdª“:Î 91Êã,&HÚùaúXF?Ø6žÛÉ|p­ )ÿ{q¡kYý3SU×v+#´^2h·8î™TpØrÒ…MÚ4Û¤âi¡,›A¦]¥dÊí¼Â_´Eaö²ÑÊ_mÇ9®ÓçCBónĹßËá2S èl´_¤AXËè˜\ƒ¤uCÙ«dGo«X¼Z¨7ààW¥&Ùðª¿ÿÂŒZçz=>‰O¡åd[|U/Á–´–¢.>xøÓ÷m¡eÿQî‡ñë=fhÏY|(;”¼ƒðú}3þ0Xw!˪ɨ–§ÄD—)'“jÒ]¦ÇqØ0&_~(^ñ(j%˜. ¦Œ×KË ”]kš ­OÖ1±aÙ„Mð½(@òÚpT‚)9”¤Îœ´3°FøË@kû?b¥§w®¸t“· zsÐWiëÄèQ븜Zlç½Ø¸W|‡² ®¦G ýxË¿ Â6›„êž¹”*È÷d @Á¨„‘âü ¯£¤’;jüÃþÞŽÛ´§Ô, ïP÷Í4¾®ÆÈžä³X˜Àvú¤{–5e“r5ƒ‹t‚`Ýqx7–lpv@;Š$§µºàÇ}kÿ–F]àÇ€äF Àú5¨â¹N*[vüÅ}qtFTq !8NÜϹ™bœ$Ë-'«Í±$ÒP騌µÎýPËâkÛ ŒØµUÜ7Ÿ» ±ý•Û0¬Öï"&3Q÷Rr@L~Õ 2›P;䆄ÀÕe@–S:ƒ%ï¡:œpŠVvéÐRÙo~¸r2~”‚ #ÔoêFQsG`‹rD-YQroÙ…R’$†ívOn¡­õü¼ƒ6r&‹›2@ònÚÍ—ý¯»aô±Œ.î L¤¦nK ¸àä¼)õ«²Y!€>;ëp̤“:§àh¯ž^Þe3-QòÐ= $@G ¼— ºj±Á¸6eª“:` .Oºî1ÿ±ï±ŠÝ²\·üÿ¦¼RëÖç²Q'HÇÐ0÷ê5>EÛÁ:–kÑ^`UJe€ ní-Æ7°…si¼PÚdŸ"îú”„02¡—I?LsƼٗ‹£ör:>|ëË ¿sv¡ÆNŒ>NìÁèîDÒeb6a›s¹‚¼t¤ûXËŸn5½¼þ©o&ÆÒr˜VàšÅßöWã˶¾ø‡'£ÆÁõ¼õ)k!ýÌuÙ~@ËÎd›@ú:¦)Çe_߬ºíœÔƒ~Øi@/üx^Mò×wØÑ¤x³'í™ÿr;Íôƒ±7X¶¸”Ñçå¢BçRÑ‘°Õ¡Ê¶ˆô“u,'”?LëË´À­–¶•\Fປ»K'~ ® -¨u'”Ù—Zg`¹Z ‹Î\©ìÐï݆¹NžG’•j±-¿¶‡•°>.Õ;”Ú9A¶À>Ás•ñÝ>É‘h^ІËv H:÷k%V¿–p£Ê£(ºVI!éNI²Ûµ'x'hCØÊ‹d +)›}vÐ~ÍÔqüDº¸MlËq•TÔ¨R—µšÚÈø9ô¶LÌb´Î'ý?×–ÅÌ>,¾¤/îTÄÊÛû•·ˆþf>›t6Šåd×aú2?¦ZÅïK© ‘õyç/ÚžøhþŸ›E^§•ŸÔT©¡+`ܵ7žX®fÐ99ÈC9s\ÉFy!Þ×¶ó"“¥dg˵í°ùóÖýTwq‚ñH*}J;ÚcœÿPrÄcpý¥¨R[ÉÞj'õÅ?¨±«lÎEÆΨ&9S ì¼(-Ô1Y¾dÄh‡[‰Æ[ÿ㼺R& ¨ •z•–&%}£´$D¥ŠÊŽ?Ø’Jî.’m¢ZšƒWõ•à'”¯+otRçÀ˳/Qõô¨tJZDjŒ‡–1æÿ½(UÊ–é¼P6ãŠG„ƒ’}ƒ­øæe‚´œ4è¼(ýî~]×Zu;,>¨>8›JÞ NòŒ_U Üöœˆêà~p´‘ª•\mJ¯WTúê TN(s†z…]/èàj–—§d@Ì@)'nÍ¡›Ê“΀˜¨TËø$¿ãÎÜúïYc/Ä­WÐ;Roiž)ÑF‡·îÁÁ}UÚ::0MÉæ›ÝHÞ9o\‡9-×û}#¼î¶ÆáA³XWžü{á 9˜’£P€$²ºbRù”TC®a—“²Q†žhtNŒojFwAÛg"`Û©E`±Í ³nŒ¨&È÷Ã⃓A"Ïcc0âÖŒNªÏ ÎFxu›áKiól]ÙZŠVøÄ¢†ïR½üžs»ÿÓ£(tó[‹Ç+Á÷ûW!de¹+Wк¯ÔÌbÓn´tO±ážÑ €äÌ‘Ì\‘:ÊW´RºdÀ%=Tòˆ]ÄØ_çºÌG5ŒF0:š„^ÔJ6>ç ÂÊà­»HÉ‹H?Y‡»RªlÜ&ÿí'çzuê ªB:AG`çE‘­‘í¥\ ð“i7¹H'`lƒû˜¬ÞÈzïÔ½ªÌÙIB1Gy¹¤r:qkN_—:á¸g¨(wìAòä‰yw¬²9áÌÆÐOMThsÀ†iøßX9%[2_Ô'Ū»7'¡$Û2öÐgSÆhÜý@Cç}O²='åžÑÂJf×וPTé0ꌩJ+ŠÄÕPÒIe›”f2¾— ›y¡ôe~Ôê´ŠËKi—’?2í$íËû;Ÿ=‘i§[K¶H¹tï ÎÙ$%—ÆAW•Ê®žÁ3ôÞAØ|]E‘òÙÅÞÒù…«lãê oÑ‚‹¯K©.ì<Ù'*÷‹-LÉWÍ´sðTê¤A¥±¡PZ3®å–ëѺô«sútR2¬bÓ}I2xÈJZhÙ¡JÙ¶|Æ=…ŤŽåoì÷z(Cñ¼HHÍÅ ÆG\TÚ8³Ÿx. ˜»«W-fø àv0¿@oÛïûÁøXø…áÏóvAÈ»‹ƒx†¡K»Ê Zt(4Ç‘Œ§ òó|7ëÂ>ŽÉ0e;(Ç“ô›ëQ¡#p2É&Õg¨ŽJ’'—r_uR;qÜLiaõ-‡°Œä=¨‹>jè®Ú:r誖¯îTK l¡oæÈýb ,ea=v`,^ïrË…*1°¶ª®ÇcšËtþëÒ=ý¥bGÉ¿x²Krͦ¸¬ ŒãhØx/SX,’½¾Ÿ÷!êw®ÌˆBjÚ‡éwÙ,U©3” ‚ü&¼/xÒòÂov½—€+^ƒì„žîV¡Üƒ:ƒÚ6‹/íœnÂÉ w¨¤ ú0±”TŸ“ºÆ#!$®¡Üƒ”[›,OÎ¥-¾z૤ÀÆ<ùýÁ˜·ó°ÅGÉNÉD¹;ÄŒ¹š` ß⑼›6+÷J¶Œ0.œÙóÑ¡¯/‹ìV¯óÖAÉRò½3Hfºñ,U:òèmÄ{–Ã餇r:fØb2ùºt‚މs2Ö?¤cñªS!XÆC^~€%ï¡ÖDFØ,’ ^$xÃ?…«Z Òa|RÞyaT.d‘Ð.~µ_ÈR¢å¿N–ŧð²Ëµc×ÀèN°Žép&’1*ùi‘j2x”â)N®¬=”Ó$®x/ÉtèŒ!V™±ß§Yæ£ZAØsœ-¹êá—ªÝ Ô«®E³®;¡¢Zn¬Ø`«d‚Ë:ÞJºEN®'MÐI]¶àIÕôëRƒ£(Ir Ÿwl ²Q}¡«æ°4ÁC'þ`U ­Oì옸ž £×a—‘ötŒç-–Ã4á>yVʲj vZGïÎ}"W^(›OuÜÇ›ŒƒÛ4‹dût¼°¥É§[U3_µ¼Jf_ö:g,G\i/ÃüQ«ß––ý[:T¯3œÌ e[ü;M]ݘß)/³ŠúPª†J‘düRêž¾”&¬T ÂuY/·tÊÛpè¡j¶.v©~p ]ÔpÀp3ÿ!;ÄË îª[†kh˜`kƒFU| jÉ‚-„zÏ]ò¼S×N þý›¸áÛæðFðOihFÆ~C‚Ë’N à^?šyö}ú2[öŸ8e–÷± k=hGÑrÛrLŸ¬ËHž­ÆZ§?¦Ï¦îƒ?ý óÙò5¸œ«ªß±ÜáuP¥€XÓkýîÇVÚ*äÄ'M£ËÎ×1Ú]þ?–À_­¡e÷휈Š^UÊêÍJ`u…Ç!ý3±Ætå6ÂûâÐÏpýcl# b´W¢–SR-’Zòõa‹–ÇgGðçÛyëòýg’P¬ËÈŒvÏ@Ö¤xñÿÎ7AÿLx²Rû˜cŽñ{-ó:äDéJÔñŠÏÛHÅÖ¼2ã\Õÿ:Ùþúñayÿl©ÿûø»Šn‡‡Î·µóÓõãÃ’·Î•·^αòú‡aì?+1°AþÉd»Âþ›ãíøèøçF¢.ͶQµZíQž¦×fÐ,r Õ”Wi5•¼OðzX Û2÷<»‰*fü–~·%¾ãö´È÷yƒìX„[» n,ò„ê€Nép†âÏÝ/D$s²H;:Dn6­srõ¢ÒjºõR=‰kQ£ROÐÓ"ÕdÀ¡542˜…ƒÃfb®s5ýá[1¬­Yüºt‚މ™£‚N*'­™r B&êƒ .µ£BgÄ#äQ™’3ú¤Ã9n~ÂáæU`Ô8™ºcåÖk(ú låäԱ̚_*üêuÂþX|\û> ŸU-þüX¤š&è˜X®6ùΖû?u‹œB1cãjj.„'×jЦ6„§EJ<¡:ížz\­G’“iøƒ)-â?¬c9ïcxßö—ù¿¥§›¢\¯Æ†‚ÚŽ»C;&蘸j*h w~јs6xQg#<BãI¬ÀREòlö{ÉœB¢³¨$‹¤Ê#ðeð`êAµG©Éh»j˜L#y7—jy-j†œL¿$;àŽ˜ñ~‰öŒ ¯í0>p­Ðá°šP¦/'ä‚t,þ¬Ýfò\,ƒv–‡èä¼Gõÿ%ëܲ‡m úŸe%+E´„"’j{õÒœ3ƒº>DQK²ÛÎåÊFU^¼hu^KéFíà´(qý0X¤¹ÒuÎn^¢˜ûiV‹N’?Ó/ƒ‘D"oG0Ž?Ç̵<ƒ/Tpâºx.¹R[ÿd®Ÿ.¶LXÊJüîÈ+ãDl$JIAõœÔÞ:äQ270[ê´H;à< ŠŒ´3°xë/V5¨tLÄÊÁ<%`ßÃBÚãªByogò²ÈÕÔP1ÐfuðšæúÕ`NAS0\GP—“ƒ‘ìÛáÂÉÁ £¦øÌÒBf0`‡È¸ë!íY^ÀÆ.ÉÔÛ^Ëo¨¶â™TÞÀ.‚K%€è~YùA5evB§=Ôµd€Òù2ÌË—¯/hŒö%/6(’=UK±Jø-P?LJÝœ®®Īý°K2ñá±Çõ@xp ]„Šu„9)–«¢x;¬yÚ¹ä œ~”2¶ ŸB`ŽƒVŒêŽªµ#Quˆn”Þø]Çòtè]èïëq®´Ã¡÷’½L uƒË_â•wQ5(ïlP©5_Ç-¶´Ï9ã½èî†E²‘òÚ û  Ü_üêP‘zU´²¬ÇfQRPçÓa^,«·ü¬œyQv‹GYŠwš/(ÎÌ€XÔ»Ë`½¾¾,ÒCÙˆ«©z9V„ľC¼7Œ‚jÀóž“év9q }\­¯ì×¥v:\Ìÿã2¯°ü‰:´r2x©Ð§Åp ’9C»E®¦GPíìFص:Lc\˜ñŠð°(­*§PT6®¦‚Ší°ÈÕ“ã c"ú€‘OÜ'D]¥xåYQçŠ;ò0+þ&j4ÃyiáÊ߀?R+ÿý½µ/Ä©ä›wÊ|ûü¸*¸î÷á`$í¼±"lÒ,ÒCÝs5Ÿp•oNå4LOÊoÒ§‘•Ü'.MAȘzsߥÁ¸š<%¼˜ªQ§¯/X…Z·ÈÕÑAÇÄè×Tßl ^Ö0€Ý'`À%š¸.ö®ºç¾Hµ|Ø·¢%f$&ÑË“ùeuÖˆ0Ï/ÓBi׉щÈI9ÓiÜb¤å÷x”—$6ˆnڛĨ“(àM5HcƒÕßö§%ÿ¼oqí?!lwŠ’h¨PžØŽ@좸36©.ã®ð†•ìÂ5 ;ìV/KªøL°¡:@ʨ cq£)¦¼èæË×êûGCoü7ׂA•ütmSN®² NèóiêuÞ‡wï{øFÛ& ˆ5™k’ù†,ª»ÊªäX ÷*n[É‚4#$ý]t up…±éßž\Y:Àö´­ÜÃO÷Ú)W[¤¨À_—Bw‚œœ; [|0^Y:ÃVÄ75t»³Åê‚^±Ø¨÷oô)»$W<>X,y‡ñr®.%žbŠ#/ O# $VÝB¬ý@ü¸HØÁ’²íëØv©lOpÆz „çèmø™ŒO‚ŽR bëñ:C % ÞKæWº5ÕrÚNÀÇÉYÚ¹°OììX±qéøÉêÞ$”¶[+B*'ô oÁrú!” ®&8Mì÷B€¥šLú-¸þ½=žV+Êw1‹ cÔ¨²Ë£8T(ú9Š‹GïU0î]þ-ô¸½RN¡\Al1•Ó£ðæ§T¾ÛctІr€¯wÉ;2+oÏnêµôоRþú°_Œx"6‹±òoR’©MÒ@ð!i¦Š—ƒŸÌø ï| ÓåS¦æ h ¾ *3I@A¨wÄõÞtýˆo‘;<ËVz(îV'“ê‚s¯˜ÎØõ ±ó/Æ4¹ÉNø¤3>à< haŠ×Ù`+-ßÞû¸ÇŽ–­#úeÙBËÄ6ù·t¾å^ç'%:¡5™ò4í\Ø?P¶OƒaÍÄ Ö§• é\Cùµ’vÚÙ4›ß®î­:+Ä.u>r’w㢠ÄHãxÈ“8¬ƒìbN»_»:ƒjyà 7ꕼ—ë…kÐÝÇZ]íîoíRçýÿÞê'U¦Û<—…7l±ƒ±“›©)”'¨.®A² Î%µÊ5H6£ØŒáê°Aý1ñüwÉ âdR!²m8’oLÄ–Sꋤd+Î(ô ƒ‹E%ÓìK‹)Á“=~wØèÞèÛ+Ùïkæ`ü¶#­J QÉ]Æ‚AžSYå'ãÄÚ².*ÕE‡CæÖ€ê©¼›üÐÝá«@(OÆÑ7¹ƒ¡I»ô›s¿î p²¬×Æ,fæÆwL´sh50át7K¬íMµ7ËU—“2è«èà_&(¶:S•[DC¿A·Hâ©—Ñ»DòÚ 3Á´Á°€JÛÓ¨2==›,–Ч<¤âÀ†p€Ž‰y廩<1å¬j3î6î¡}¥pþ ãÐI€ë)ƒú èX Fbyd×sy/@Ä£œ‚ÑÈí„:Á|‘mðõ½Á0¥ž«7°ñ]ŠÃ ¨2ý@¸»p ¨˜ZC̨£<Ùñ¤ ’ë=Ö,l^£B|ÄÍÿFÚað-¨Z²º‘@^ÂzCçGy:\›Ó.ÚwÌS·B;œþØ@Bì5?l±º ¨-­Üÿ\TÔ´”'tX$Uaäç A¢!©œNÒ&ýDi…¢ë¯;ì\!ÂoÄÛ6º_hþD ‡2À …c²äݸPM ð-3 Ä¤\ Ë åñlôˆOË.…ÆIX¬L‚íî´›¶#TGЪÕN¨?Ì ŒÆJ9  ›Ê“¢n©ìðí]ôtŠk`Fji}¬êx›:0ï^Œ[f£«´= ¸uƒâÓÚW— cN­j±2í`ýr*/ƒŽ%©åä«'mÍi8HcƒRŸ§.€€ØLzO– e˜a‘n9°v×ò(Ô‰”« å$Ku€°u :´Tï­)Z±a÷>Ñ:#àI@sÂÝýÂz¯R¶Œým(p§:ÖÚ™ _Ix¡§—@*‚´#TGPìÏÃoŒÆX¡ØÐ@4ëxí3*–ædÂ&‚‡™·6X?ûa‘+ l,@g@¨Àƨ% ^Øõ)Ù ïÐÇ€”66à=tç:1`¾tLÌ3/èÑÀ;8郢§f±Wz†ÅXÀ[L&":LsÔºýëþÏ yIë·ŽŠKI(qd„²%±©ëýŸÊÐíb ›iüÅ?Œ~÷Éq殢¹§"¢"“-’‰ ¤mdúŸË:nÍÔòçÎ> ÖÅkû)ÛbË'ÚÙ´ºˆ.1]buÑbP]8TkQ»#(ïAítRÊiáê›ÓQ2;â,lÝ6I–½O €«r(ºd„ØDxãÂͼºˆûlåæ¶âÍR9¡l1CvêУ(£•-ÒWŒ½qElå´Z6Ç;Âa‘ô…OÃÿó6ÜÐ E²Y|JgP2É.»‹»–ºñþ Îl(k‡É éòƒ~”4#`”™)›K…JÞM;»ÊØAQ¹€6Â(AºI®IÎÒ+yþK¯rŒ„vû›Ñ&Lï:6FË¡ÞrÙœRŽd‹Ôç¸0Ú,d¾PÿÈÀ¡²¡^-.d5RÙ†bËz'ñMQËxA¿òÞ:J¦ó¢k?B•{ ¿Á../–‹}a%FØû& ü.úUÉ÷ûlE€ûª"ä`Cˆ““eªÉv8•“)Ù3´›Þ.8Ú ¹:øøÚv¸t¨¿ì‘‰ –Ú¼~ˆ?÷¯ ­ù‚ß^ÙvÁÙhëvýù›j÷ÿ{¥ÛF;C‹ø»·2cBoü¦útbM7ñ]‡•^zmVó¸³50×Ûý›í>÷“ž\M:/@ qÇ|·ÍB›ëÓÕó>ÚrZääZMÇ]ë…׆Ù1A ¹ÚšÊ åd¢Ô?PJ6®&‚¡;í¦í„ª×¸w7Ö­SÞÅáßG)j/~:nì„quÕ±xM¤•/’>™ÔÝŸ[/ôþƽû¢ü+ÝÎ@;1öû?!dÙBIépnÝ ª‘ÿÌ,Ø”uñl8 ¯ü®*™ØÛ®o‡EN¡:œjèÊ8Hd°Ý ŸdŠ,ƒ%ƒU Z‹Þúe®.Ø3œg2«Àœœ»ã½ŸýJ?°m 6”TÎÛ1NB²J±ó¼Úô’¨Ê´Ê¸Ä†¹NË–Ä9áÔ÷Âþjž2m‚AÅ”oÐq7+Û•ÊmKf†âfÐv»ë4L“ì9b°mª:ÊÎÙIÒÒÔáF¥{ûøƒïàrÒ‡iòYÔeóF¯Î5~Hm%Ògi4lì?R‹:ÝÊ;?Û§Ëf‡²’ª!©ÉÑÕ·…¹Ôé`J8Ù»Áaˆ+üÅ’÷i²Sæí9±õÀÒØ0ÚGÛrºÄO¸Âp ¨Qßo,êø0y•¥uÇ:­‹íR³«ŸÈÎLçr-B«àUG89àÒ±ø£r? *³Áp‰þç²ýeÞŸ^õm ÏŸ…Byb;¢à“E®¦Þmu·ÈEÚ"^(ŸÜeÃ’dÇòÆÂõpå³h/[ÄúƒpÄgsn½¬ª&&¯y¬w%\`Ñ¥]Ùi;Ãwܘø:/'<¶BG „‰í¬å"dŠÅœ…+ƒ‡>qäã¨@¥÷ßð×I; †Cç[8+åt“l’ØàÒ~UðýâsG‚ÃIÙE‡ôš­Ó(’ ß´mñî`xk|+n/ð· PVm¹CËÝí;ávåN$tøƒ¾—Ewœq¸€Ô¢çUg/] Kdéæ«E¼8‚”»ÁI’8{ÃëŸ7zf¸“v Ö_‚†{¥ ‹ñ3Ý[Ø"ŽSÜa¹(z{"(”+$t©„È»ËÎ)Èg®BÂúÂ0кCg^ÔAhhcšI™aí^©¤>™í(úªbÐé› *Ú:ù°1™ÅµCm¯Xð|ú P¨&ÀÕŽ[7B|øåWciçm¿¤ÐKo9È• Ù þØû7ù\üÁZ°ÖFù–~”j€1½I•P)É´>o½‹ñŸò©“ F*vrßv+½‡Ò>S\ƒ¼6ºó.¬ð°`4Ñá€]ˆúJˆ¶Î£hÙQ±qŽ9~oøCzÇr‡û¬tÿ Ð.åj@\¾˜r ’Ì(|èTÜt8W hÃx_¬ÒFˆu6 Õ™É2K ”-&å>!rÕÅë7Èq/z;XGÇÊcÕà*× É»c7Ò »ÐäûVȰ# âIRòäRã)4ÌãäHÇ—láý'òÃ]év¨–&³±ÿÊùrþû[+·“}ͧc‰R¥*ôËäp¯‚VŽô‘æ–Ö?\Y«?øñéd•ÖãÖ„åÍ_'…mta¿ ^=Û«îš…ø±pë1¡ÿ—Øþ73G»RŸÝµdþï¬Äêã: úɱƒþHsÜð?M'å­GwÖþËDYØvþòñbú;Çá× .ƒÒŒ@],ÛâÕÚW=\æS¶èªœùJYfg‰¶>~›è!l;?½vùNh/yu\R…†CS÷'écŠÃñÄÜ?p $'˜]KkËeê‡Ð§C»e× æOí-'ÛoGú釛C>6–=ò'ßû¼ÐoÛ \5J^á>¼h~û›9É´IÿcI#¡|Õå2S þÒ|™µªø]¢É¥aXnûç>ä?=äο×È]Û”+K ûd•-ÌÐé^¬µyÞWq¼Fa|Ï߇ÃX¦_®Ë4^ó=0©Aº0 lÓð¤Ï.|!’÷PA™›•>-òãjÛ!ÝæPNNÕµ‡¢_÷46–vLXË8©&#; ܧ^ Èzè™B5 ³SrÅM†sQ”;OjNÊ­áÚ}X ·"ƒ¿ Ùÿ ùUªò@.ð±OzÝP:tà}_!œ|_g d^ujé²ý%Üú±êá´æ=„™](ÍöÊ&–=0—v5ÿЉ3ú„êÎm1Ÿ‹+ Âpž&ó¤2±¤ 8X@±éaŠ$/ˆñ5¼µºôÃÈöËü*[Í^öÝŸËcŸëÐ:i“f¦³r‰-³2˜éY§lQˆ‹ÃU-Í_´ð,pR†6I(Ùv»î>“:&Ö@¯É5t8xä}‚ÇvL°ä]ÎÐ8Nö‹{Ç&:NÄ{¯…lUñî esÈ¡4¡½¨K¸4óÜZ :r– Û"ÒÉí\Ø?ð£úqÙ\sè̬~ˤ&”ƒ|2.L—$‹ZMñ2@;:ŠV•]#Ÿ-Òv°ÑF/|ÈÕô‹vƒMsÔ_¤cñGy²Ñ‹²As‘í¹HÇâÕïÖ¾©¦ v,âºXò¦Ï|))¨>Eù€ÔdÂtˆÊŸiw8(''&'L†Q‰N×1:ãlP]JéF-Š„!Ø•NÊö}aÛì|(‡âîwš«ÁÉyµûÅýÙI$#lT“ÁáB;;ñ}ÄT¥äÈÖ ÃéëR' ¥ ¾3ìÉ•?l¿\;§}‘ªÄÒã&r1–8Mþt¸j {éYòš„•áÈÄýá2>£Ëæ_ÅW[ÅwÌõ²ñ¸ý·ÿž›ô‡“X˰đˆW×°k•Ï™ÆÅfàšzå¶°É“'æÝñœÓ‰Oœ:¿i8A=¿@€æÇU÷Oæj5–Jö báäð5¸J÷b¬Ñì´dËTî‡eÐé’©:bAoÉ ÜujrÀ#©àêóûæÓ¢°éU[ô¨&™k¨tO HS6-³Ô1òNfHÔ ^^[\“µÃ¢ ¸h@D¹÷üÏÅÐf‘vv¨)àï‚ßEÉr¼¶«v ë-śɿ~£k{šr5wI6'­A: °ŠŽí0ÀŽ zS *õ¹ˆëbo=\ÔÚb{öÖ¿  ÓvÈÆj꣰f¡¢ð²ë¦+óƒq@˜©BV*‘§×å¿Qç›»–Pi'Ð â;vÌè0Åœª‹HÞMÛ-¥3àªê5Þj‘«)zqÐaØÊÉFÃ¥A³EN¡šq5«Ì20À¸º«dÀ¼žù!DcÎ.¸~_˜>Y‡» °ºTà¡Ã@]Xr®´B‘” üê‰i;\¸ðï4 ÉâƒÚ“»1®H ÕøÇ€©f®‹%ïn²éW½¤q*]”ÝÅq z0Îùêµ§øÓp¿¾¾ ûÊ9Ku®’¸N÷¦±X¿çÑÉ1žý`èÓ"=”ae §Þ©?¦x7Ò¨dö–©¼³×Г<õE­/âº8Ö3g°R™cAåëËáêßÑM;®ýpÄÞ ìG-3½LqUî(9NÄš´u—åˆJ†èÈ) :|ٗˇ»Ôé`Ù¦”§£p@4Ât8žT£âKxãÉ9H©óäòv¬$X^ìØ®óœ}3§@iXJšèËî‡ v˜ÀØc`94TÌHP?x_¤Ã+¾ðWþ£q90¨ó ;n›LÕ€Îi¢” ÆONß*2O‹Œò„p¿Ig°E¹#·Ãå¡e{:oZú±øêΜÚÿôXX¬9 ¦ÆIÇBÉ«'‹Ø u§¨™Ü äi=ƒ®Óà‡]°½@¨ä(Ï(Ó0 ȳ"2ûI.}ÈvÓQ²‹½EZYšÒS:ƒûA׫»{>ªô†»HãÓ£S¿ôãS‰Öz¥C/\örNä’¡>a9ÓÎHtØn|Öê~Êu'Ú&Ö •,°*´fpX¬lUKH´Å‡¯%qÅeRè*¢l–|“&Z”ʹLÌÙµ®’ù›¹»l T:\Õq£+Q#/鸭Z†¢¬dÙ ¹š~]}î‘·BaÖk-×ͼ8ä yöW)IÿÙwý4¸v'™›v¬òv†ruÁ(¾$y7mûS`ë&ËÏ鿟ØŒPµˆ«¤k2aÊW³:~5 ¶è²Ë7׉’wcÿ;pÈ0íxÅ Œö³kÄ_{§¶ƒ³kï zZ|P7Øjùrduͦö[2 ¹š9Jñ4– h‡ÁSÔ[+ ®gMeW¼Îòä Ìuâj4LqÝ5ÅÆ­dÃÆ}Bº]ÎG0^üŒJ} ª Tl‰Ô…C«ƒb–òœÊ[6z²ÓAƒ™ëe°—䀿ðZˆö`JN%jãsN ¥¸5'yFn˜ž$içÅk9„ê 1Íî²SŸ+ö&ÉNÌ)HÕ©ÔÚÙ…ˆ«óÉ=Òñ^Ëaf£þÁŸH‚Á41ŽØo£;7yRë³Î«tlߨûî¾WfG<#^Ø&'ìhÀX°²K2]ÃV ɨšF£RPÀ_ï4m'éXœgIdWƤ"úÉ È :ÏUþ Ô ùÆàwJ슾‚°3ÁiyäJ;r ’ÌÛñ:Âà­`ç$äÅ}öÐëÄ.µsïõ÷æ"”A«’‘ØøŽîÂy׉x f<¸Ez!ÆÒá€)Úî—“?pÕÂ…8"ɤǺ©ZÊ/s¦/Bû0:c±ápcà®(÷îæ“QûDx”*%O¼,ûui¨Ž XÌ)y‡j$NN®ŠÞîðáœ52BRŸýÌñ"oˆåNʲ[$ uðbÉÑ}›ÎÜ¿I]k §Å¹8dËv0tÎã.—H´§EήÝTÚa Ã4–Ýâ´Ð¼¯†}»µÒ%/²¢®SRSðVVùLbèÁòäàÐIÔ›ÂYòj80€^þªègÔN’MsZ´’Û"ò=Õ8,rE%Ù¤Fíå„×KçŠ:@¾Á%›Ä*ôö$dì/×nàlªìŠ÷º‚u¡ çÖù ÆItríÎ~>Áƒ9ülJ-´.\É"m•þ˜âûuÿ Â1ù›6j}Qô…›VCΦx) ªÃ”ê¤y eúr*åt¦g¹¢cÌ1 ÛAu"sw”ÉWeJÎïR±·ü ı¾xm ˆŒtžÉæ$_Ô@»ú#IÞ3íŸ,„µÝ(qh2¨Se3ꬴ·¢8,Rí¤³qH„¬Ï×Á“«2ài‘v·œ\»©"ŸW(ïJ­þç’lTqx”$Äd€¦;eÈÎ5T:ªé‚³<(3WÃ¥ÃÀ÷I\C?¨µÀØ3CÕ¢×Ä ¨óðô˜]|ïýíÐdy웞™E+W]°PÙ5 ÐG¤;AÑ:;ÉâÆ²¨$^¾/–mbÉžV—ÇuJ6>gûº*ÑAèU?л|pþA»é8/ Üè|¥WnÅÒlQöûtzâå9 ˆw®Â”«M—‚²ƒÆð¹CÅðvVê^ûˆáƒ ë,–/due3Iì:ñú³ú“ŒÞœ¤dç${qŒbigÐçJ’Ä6€âýE¥îùËó?èÝ™C+`ÎF‰}›t±l†¾—jìÒÍ¡ñÍQ\¹M”%ùV‚—);{QlsøÈ(¶Œo—e¢@Ôsµ¸‹8™y®µ‘ž”…ÙS2l?(ó4˜ Å¤¿Žå3á××ÊÅte«’3“S-#Ý㌽ý£‡>*^•;ö oð}Ï#hÓy³xÄoº•Pš ‹tL®[_uxó_º\¶K,OäfCü–ë2U>Úù¸†Sª‹y¡,Äȧ»ãg%ÃÍ߈ŒÄÜgW4(1)Óë7c8áÛ‹ë.ª~þ i¤6úæšË×çÊÇ/tY¥%·{GòCæw®Ì¥'Qêä•VfUà½¼Ž’Çô ¿D^ÚV^‘´¹sð?c)åóÄàÂK?>Y¨­Â³`ñn®­ÔøûÈý¶/êǘæ(Êrc™~Èjç¿=ºcÀÓ]UÚ*Í|% ýN¬EÅgj4YS°ìkósÓb.ùÓ ÛåZÿ´#Ìç~9wËåË9kvî”—+'ðG÷¿ÚTÚ&~¼Ž"éÓ®}ñ››l×Ú«£¤¸ØÏÂìY¨¦8u<ïsKîL™à;—ìð:ÊCÈËí>x’P¾†Cæ€(ê0• Âv@’E®¦¸§ Ü'è0T”u‡Yo@žík‘obKp2õ÷Á®Ýý;uyrÐé]êȳI“äôæXÆ€(âi÷® ­ÔlÄÕô¤çÆúœ•^ìTJ7jå§!~_&P¶™­ô6ì$j„‘•2©v£Ɉ!?j V¸Éy°¥CÐØ)»Xî°ÈÊ5é\‡S Å£gl…`´ Ο%#÷ ÿ4î%Gk²U| U/%$/Å3?âÈÅ%ص.—Wk%³_¼h;0[oRõü¢ådÀÔ'p5,——&ÎP6+ ¢Ü N²bø„ˆ+–œ%*»æhkRü܇9€3 OíI­‰ÓÕw¹ºvu*/ì‡ lЀ౅QiVÒØ¥šbä€zaµ®-*¶+ 4iHز «¡TÈ$‡²i7}êÔ¹Yo«ÜÉý@Ìx$á-%#6v©®X] äÐ-Z'Fg U62õäŒêç½ïB„àÂÈž´ó ¿¨\ Ú:ev*Fy;îf3æ AóVs9ï*swÁ„v˜Ó”¿X›òÒÚUYìGHæ»Gä2¾VX,æ°ÙÇ&µÔÞØ+~Æ×¶«A‹x9=HÕIjršõ8¹V׿ÚM¿.5À¸;t6PÊÉ µ‚ò‡ëòd#¼ LD§ÆÙ |}¼j)Ž8;Õ§Ñ€àø6ÕÈÌÓ« ¤Û´ô;Û H;›ª‹´sRwŠïù7œâ<;é°ÅTN¬=È+`ˆ ùÅãî†iÞMÛª#h¶w®X± 韟¿fÄŽ=lŸFJÙ4[”v:t6è‡ÕÜÐ÷¤eÇy1¸õÀq×·Ëoh’ljüïXƒ± Œx’l(þ)w!4;”ë¡%‡Z£;ýãqÿ#½Ã½E®ÇýŸÔ"~¦Ð<Ñà[—ÐÑô¡!Ø·8C9VSÉûŽí¸÷x|÷"ЭänSnc$“îB@¬4[¦l¬Àë ݨB6²¨.: ² s]$í0soö¿Êªø’Z$%S¨ôR?p ‘ø¨€¸Žp.’¼Âu Ê£RÆÓ³×oÙÂí’wù§ô`|(L¦FjbñÙGrßÿÖ‘wö×}Î7íUþÜ9ήzgq_N“®¬%´ó$,+8”);HÇòéV¤êk¥Ÿl6ˆ–%]w|"P-€wÑ ÕÂIÐ(€“ gÓjÒ]¦ÇÙ$ywÂiyñgAv¦ƒ¡G©ÙáÊ $ ‰¶ÒŽP ?yÿ}¯ ¾h¥œ¤³qHrÕh‰o‡²D,Q¯Zñ‘V£Ò¡•\¬Z£·éÁìPºÁSò„Ìɸ“jÐp(™AD 01 RúzÓ^²S;&p(y7>˜ú"®‹UžŒõÆ¢-jÝi %]¤#Ø÷ÄR¿%;ÚQ_)³«à¨½Wÿé‰v†bâS:,’ îi€þ‰ÂÅ2²¹¶3 O@a ©¼¨ É;T%ÊBîOÊNŠú;[¬.Ìv:œe§(/oƒîBu81× €¯ ÃC7Ø¡"O,餆‰)u#”w91òëyôÄøq1­ç­?tÏ÷ž¹ MŒKÓë‹vÉ·~!à %ô¾C?H°êN&Õ¤»¸—¼C•]¦Xj–ÜMKå:qFÚ±ð¾©2-$Ùº”¿ëù¯l nÐIQc¿ÿÓ£(2Ê eª¡©œÒ õ´{É—§w®.Š [аxÚB|ü—uÿyí‚Ù]|ä]GÙb2©&Ý7F¥Z®Øý *ËÇÅî }6ox‡Þ¡"Ä©G4Y¤‡ºçj*yŸ€¦Nº^Ð~ÇštÜÚ¶²¦OBäÁ÷ØžÇm$eÔx¶CþŠÒóoV)'ºÝÁ¯9 âôê\êiô÷Ø‚Hs¯À  º©<P6zeÉŸlñ0¾]íÓãö îì\’\§U;9]ªTGØóQ Íàóµ)SE»¸˜µ’Ê['5nìú’¹~=¸£³K]Š%n‡ä»óª‹„RÚÊëô±³Å Á. B—r …n¡˜z .×n°CÎÍ ÑÏ“I…à( ð"ÑÅ0ŒÚE^ÈâÆ¦'måm˜Mê0횤dNv‚ ãnÊûNÕ±Öa$5¯¶QuÀ²SÙCwNˆõ ;‚¤Ž?<¡‚Bº 'LÛÂ_ùX’tåbßW¿X[ŒI€Áiį3†úÅÔº‘ìÇq]Œ¾`òv8E+ø01 dF5Èâ‘×Ý~”z¯F´³iÞ& ‡ª3cÏŸ¯×AØøöÉ S>yC9…O5ý›Eî›ë •í%(æ#8GWÏõþOñ¾Éª–ü¥‚F†í´l}"ŵ$”]ª©eK‡Ø9¾&Ò’ÄÙ…«ƒrkŽå Â^ºPLJÉÑ@øO’TÈú-ÛÓ–èrÙ*mcqÿ@Ù~Òÿ±úÙÎ&d¹ÏŽâ±ÿg†ÝýªEKv‹ÎoDëŽ@;›ªôá¤Pf“Üd3*Ù´µÐTNà^é›A‡ERhü0–™GélÄgéN5”vD·†±0Ë:Øþ–)^Á‘_ˆR µ×‰Å:¦ûá@\¼†ñ )Þÿâµì’¹“‘€¹qêÆ÷cœ[rÊÊÄŸWTûÖ¿jOº¯vƒÜ,šdä©Ãq2©lQšóퟄÈ+äʉ~nRzA8™Tžº,Ò19*t—N÷È”­†¨«£@{·!é¸'e—,£–+WC!7KK‡fz¨¹Sp2©&žŒÃ'I5;å=T‡Q;B±g®AhbxrîàROHFWsõ*߸&¨¹á|H<¡ºÅ7{'Þö]Šy ±Ü[­"Ðaò¦¼ƒ8™¨I…ì•DÅ+J;L{>sé€bo¾]˜SPuh½¼3ÃkdQMª‹DÇ–a4èìÚÙé òÈ8XWrųØg»É¦ìpiô‹=£. Ð-r5õÛç“2°„Ĺ9z¾6—‹‚¶ç)CÊö å4©eìŽWÔGNQxMø™ç…éòtÄöq”';ž«¿(Åô9–8 8ÎôÓÌ>Û\õ5㳟aÑóC-Ò)™»/ãÈáÖ¾K{²"úa笡‰‘Ø]w-”T‡s¥Æ†ö·Y¤î”¶^b™ñqúàÙçªqµ ™›œ=þø™`ç™?ºN¡EQƒk·–Ó¢ºËÜÐK¹sñÐyàB{øEõe¾e(ü PM¡ØZÁÄÕåuoµk¡'H¸™æ=Ô›)CÞb“Oùã¡’°6Æíov+xÙ|ÿG؉%ßpäEý¸µJg¨:´^ÙÚÚdívÊ ÁeÒM! Jí ™‡ÒÛ¢5Ítò-œ¸áoñGƈ BM’©.7^Í¢ÞîE­¹p5è~Ü¢tWªŒ`K¬þ½# â9Œ â‰,hSîûå¿’-â^ÔP(O §ÍûwpshGÀÐ:;ü`¡õB›V²œt'ú1r£çßd£í)SóORÁж«ÞÚ|×Z&ÞŸgv-M¬$¾^,ÉT¥3È :å„Yž»Þåä[Ê;K_dü&}ºpŒ;–l®Ôdr¯Ýå.”ƒ2aâ—“vcÎþõíýýG'‚¡äýÖ?àû_Ããþ Êí 9 D-’Kkå2äÞ=)›k;ú’þ2:Ì*WÉ Ê R¹C›Åæ6†ò C¦ü.%x@¹B”MÜ¢,b•o®A6aVÅ'ÁÕbæh½ÀOÁˆEUèåü뎉Ìqµ e°suaXŒËE“‚eT¦l .ùÍÕ·†²Åd²W:”[s’'” ªI7yÓøX¼Vy nÌÕà(Ù@ùC9䊳1ÊJR‡§I3ÛN€nÑ·se—*Ýéú&€¨:å Ý‚ƒö†«²<4î!mþMªr—mtÂe‹–Êý¨ôhu+Aú*‰80Þ›«Ýmâ‡J[þ -Ýà‡ lqë²B‘é&„6‡•G¹ ðUy ¥äeJýdkY´ää=ÔÑ xÜÈ k&Û…ÿ;y`Ùè›T Ì.Å]±´ó¦'WV€² †Tîq9Ö2qèÂó·$feŽÊ‰øÄŸdürúé¼èæEÑ|¶^F?ÌgÁ/SNš]”Ü'âÉðPž¸‘ƒ¡¡Ô9ЗÇÛ½„aü’ÖÉæì¥÷~äe;)m]ÈMë5 8c'uFÖ)’W‹vZZ°ÿÂÖb´œLºÜjÙ NÚe‹yÀ»éFÒº²ã ˆT©¯Chq‰A籡x†úh|ëâϘAþùr!w%âö¤¿ŒŽe[_üÓ±™´Š·á”ÚöXx-s;ÕcôÃW%~°¯…‘y;^\+åí˜uz‰’~Pn“Y%sp“æ8fí*Û1¹¼~ó¶xŽþpž Ýð‡I'”«'𝠻I农 â13¨HBëå:%“Nê¼PJS¼rýÓýŸ”3ÎAñÍ¢Ah†ß\Ce›”yâÏD,m¢Ž“¹¡ìAÒ¡.¥£u’mêßµ¼~Jsáäp„êŠe$etQ,RF²¼!¨Íª¦y›š†iwR£‚V‹Ôî%0jEô¦¯  ÎP,~g‹":Lcä;¼ (·'W`æÌ€vB.–rÿmÕ´lÏ{ '›?…L6“ÄиO_g¨ü0—WÉFV§ Vʦèã"‹d#—: ˜²ÃÕ d–‰ý-ͽ€i„ºw±쉭ÔìØ‡Añ^1ëoR òfl?ÞÈ¢ºèðÖËihÕ¿nR¡‹F9r’"Û¥ þ0Á°¡Gठ'¼„æ‰ÛM*˜ V{ÌÔuš´[rÙ‰iQ6Tn±ô\×,ÆBËI·TÆR«Xo÷ˇ긱‘¾pö\'Ÿð~ B…ê’ÊéĔɻ‘™–vNêN85€Ê‹^´w×W^«5&ÒÙ!nR®¸*…ª&ã‹3®Ú¹ Ýôe‘©³l®™8`•a|À€¢®QÝ¿¡oqK+PeHQÉNã S~îØ)»`ÇÝÿ®öNÉâ×¥PåÖ äÉyœÞª"¶n€g8€qÇQÔ¤ßñ´¥Þ[ñàÜðéÉ›EïE’7Ùà;ÁÿÜ&Kç[ËS-¥C,¾ï¢‹^” ä÷0âÃ’î §J eÚŽ›NÜžž"]T‹ã}Zä3h§¼\ʦíp=M;»b«á:Þäߌ’úÀˆj‚áÌpÙ"'Ó½ÔsÒå8Ð#l­äPFOò B]¾¾þºS¶ˆ}ûßüºú­EÙåä™:ØìŠÜÅJwwW†³ˆ.M9s`¹ÏœOúÞäÖí'nVžŒð(L+SáSs Üêa 3Ñ;Cñ<È!ÊÆ½QT¸«÷ºoœ!5T<߇ Ug®PÜUUj¬ê½UFÚÉsB¹d‰$× / ¢Ò'íµ4œçáòV‚šxçMwqÖ «ÜVYžX$à0xÐæP® Š×ê0¥žŽ­ 9à>ßä9\Õ-¾¢}çœÑ[$18G,>PG¿˜ ;¬“’8§Z|KN’½à%}4g\®‡ë´Ã{º x‰âŒÓƒP¤$OΟ,^{§aЩYi?™Žÿ^ä:»³…·MJfÃù~0Á÷C(aÿ1ƶ nÛÕœ}Ÿè•¾­ƒo®>ùZŒ¾6ÊLTp¾“Rý¿T‘4sÛõø´_ò¸>›dú–íWæ…ÙX¾mô:>»èò5ŽëœÔŒª ݬ áÛÆü8ˆäCzÜ~Dj+5ÿªÓDeû¹ôu\õ#õu„ñЭ-á°I‚3ƒ8™¬2>…°2ì¿G¿Ç:ôŸK‘m0Ù\”;]„Q71Äà=ÍqþG¿ñÅ á|ܶӵ“NäI«¯ajÏûƒëd\z:JæI‘Äá×XâQ˜CS@4–/+)]z¸jþô_\ërm;˜uùï¢Rû13/þ3œQ^(4“簾Ã.õ#_GPçEéuÕ¼ò*‰¡“.÷Í“K]8,®Øcƒ[wÂúƒìü¸d‹JlRÍúk?SÉB‹PØøE›pîÁþäož\ê°òf“~:ã“Ò9‘Ô ¼PPœoŽ\'L\¥@ðpø;WÐ ×@F’ ;n…y’O:¿¼bÛ8o<…_øŠ+ÐQŠ´úU€rkòd‡¼ÚÓ^êåA¡vót#×PNFe¿šŽ— )yr©Žlý]5O((Ú¢éÆÍû›¡zQqÁ€†>*A8á;RÉ¢ôapmå_¥f¡‰Ø¶Á_'x'—ÎÉ(^u˜)è3Ê´ÛÐs"SY|£Í2m ЋÚaÀìZC5ƒÃ…4 ³Ó}çÁ´û¾z0. ¦‘í“I?­ˆ÷öí þƒäŸ.ÙÁfã‰@;C¹B$»ì·âÕS ¯NŠ9ÇÜ¡2 \M,+h-”©5ú`IÄaSõ’ê+6B•ä"}8en^'à@ú`®F¶_†ô¬ŽÏDëÎKòn#ÃÓþD¼ÜÕœñ,p”Ì‘ôklü \­øoÍJÈ%­4²Jr˜± åÉ%–^ëQØÐ¿ôr3ÎÉn:ã(2Æ5m›È50jãÝBg\Q/Žq…!ý´±ÈHL.½TçJ‘³‡ª€ÎžùY€#û  sÅõŠ£tÓËÃúavSgÓñš Û¤ÖÃÖò…@›Ë3”èR;ãú³ˆ^éeZ ×ù Sî¦Y¨s`l‚0ß¼L©Ÿ<Âà›¨3ïš[ìÞW#Ø^í¼ómosÜP…î4L»±ÅdRMêHvšÔÎI}‘lŸLúÛép­{S;L»psP_mlÀqÜMAó¼¸,j‡çóìXF2¯~f­îI®Þu˜Õ1›Æm|ÔóÓt^nUÄõ›c& bšlqžÚ`$MÀx¬Š½®-ư§É^òSiPž(ÛÄâY\4uþÀ<“>ˆTr¨áɾRçIÐ×1Ê9 vPAf)z0Æ[GÄŽå¡Ô:£Ïie‹ÒõB‰1à‰ØÚtbîœ'b›McQXK(vƪÌ0­ó.6Ú{>ïÿøÌ$ÃîÅTÔ…Ê5eüÉÛ²ÿ*‘%—.[NŠ€l± ´’Kâ*Öª’_Ó @T t¿4CÄ|w‘L(øÓ]>n÷ U×bŠo åŠ<¬B1ÕFøøJ—Í\;]{hF׉žJª޴ *«kÃÑ~£P6@ÇPeú_¡ìj›×W{bÔ| ¬qÛb[)VI¡ÄN¸¢°C;&àô ód~E/*'#˜ç¤ìå—·>)ŒÀ€És/ªÈ:’Jû°h± ñ‡þë°äÕ ÷Vì LlÊV³XŒ[†À®ä¢¡ÒÎ…ýeûeš»Ó·IÅ^hÀR”l(÷”2H"o2©’÷bå8 [¯¶Rq$HÌ·w/ÒßV€š,Ã&B¦E‘Pî.Ìèü¤zaÍON²=C1Wåe@IŠ©.µ’«´sR_D¨})íüõæ×]íE@Úó„¢F²ç \ 3¹rh-Ö æÊr8~ƒ•'ýÎ+f j}‘lÎE F< ®$~[Ÿ tnøø.¥Eq(ÁÅTXå¶ÊêÊW¡Oƒ–ËŸe‰xÙŽša~qšfŽ ½ð`Å11-3þ¦5Øâë Ýwêpy‰^Í ª Þ7âY*öZ®œ€e-¨¬äP#Ž”L¨Åe£ûoÔ†F?E’ƒ†Ê6)qàè3]C}Å븪ÊÏL–ü²Mø»~ý4xDí¡ì3+ûÜ÷ýî7@Ë T©‘’¡jö¤M Ꜵ $EÊ7.ÇS˜"ÉqXÝ\ºÏM)&•ÐN’ä= ÷eJ7è¥(¨ãwêØÙ>_l¥ú‚.•û·ôÓÅrySM€¡ÒÙ ]‡‰Ï ™É|Õ’£ï©¢Gó±¸å¼°´”¿: SfƒbpeÉ; Y´²=‡v&gÂúOjm²l ñêžéaM7f(tBà„òigðüsùåÙÚIèE¡²W6P5øwÉ;@-ÒÎBχwþeÒrϲ²ÐǺW3ÆýQì¯Àh† ”«ƒÄ¸OòJM¦Ï?JpCÏÄ”vr•Ë–óbɨ ª˜w”ÝgO”ÎN×iÐ]Ų['WòÕQï›T&  ý>¸V¤6ÊVz(;bZœ™kP€b´ÓtþÀ´xõ¡P®8éäÜ « º¡çTË«9Çrü±P˜v:Cr¡pW[¤cqæ%µ”îøfN¥Zö°HJøÔÍ©!Ö$î×€8X [Ù„ÔM¼I óCÙ±Døµ®YÃö)ìA‰6†¡ÊœA¬ú¨ Ñ ,5r‡ú£¾ÅýuÀHr¡mu^„·.Â]5JfkL,“k5ýX)Ý|½ Ê.R d:'Ö:‚Ëù˜øÇ ï¦Ú»Q»ÀXÌéÓý®'yŸ6áÓX‹ñö€›æé|Eå—d§Ê9 ñE“«|Í‚þW&ËöüdþUò¦þ“À2½»Õ^Iëœ |–ùVU¦I~uº\¹šÙ ©e@=bf&ÆÒG3Áp ûõÕâÈb„G¥§‘Z”°¸d†ÆÀ r.¸Úá"-€'•æX‹€P)ŽƒÀêÝ2oi¥b²¾„ƒHgð…¡ï”!Be— ½`R^w?‚X„–²õÞv¨A H¨‘ˆMÅ*ª—fRS·89öap5hÉœúò(”­ÏÖY*  £í¿i»å‰ÀÕÇg°ÔäÈÔƒÒ8MÀÄ7:¸)W¤qZâ´ˆ5 Œ èwO‚ð:ˆU›ñ &@ö½l9,ßí*(-¢Ô¯›VÞØñ€r2Qê3sUžIür2¨º ӑ馪 ©Uö1Ps(WP×½rrý2õ¼×ŒË›ŽËñË.Õ.tüMÍï.že-SdÁÆú3sRðü¡$’v õí(×öØ _÷ÿø &P9[ÁØÊ6Á:}fQ×\§¼ñä¾[s™oþ4³³Ï‚Rƒ¬4greh•æ]þ¹ãFx¯ §" Q-r7•jÕUÉQ£"â ´Œ6Uá0ªÃñòÑDò>Az¯#°óBÙ>™ô·Cûð1’\¤sZ,¼x¶r"i×i fñ)]v!¼íB\餡ù×…ñ`¹¨B|Ž^j¨œw‰PƒlAãö!ŒTÄ!ç\í—Ìizѱ—ÅŽ6ýöò}5 ÂngŒ§Uýš£ÀÅzpÒÅWäKcþ„ذ“†¦rr ’v.ì(Û2±…#ñƒ#o:ŒzY\-0ÆQ±ó„$§StèÇ^àååxÜ´°spÌœ}–éÆâ¢¡Byb扳>î¡&gò”KÖRÿbîë"‹®fXËeJýäh`kæ2ú–[ž‚Öês«fq{ã y7B‰ÿ‰Ò+ã·kŒìuÿ¦“ò†…–m;„@gd‹ÂÕᇵý%ÙìuØ“IrØxQu*¼Èc3+ èÍ´¢Ú¯®ðG’ÃÆNÅ©f§éÍ1Õª­M…qÔßOÌ`oVÎEŵf+[5¥?ux¡š¤¤£ê mIC› 13³Ð)ÃÜŽ‡ÐEÍÁgÝs}-?·Ff|˜« …Lj„ý0u·QÀ`ÐføëJG/"É¡0N<Ý\§güñhŠÎäß3׬|2þ»Ëy+WLȧpn6vÂ{ &Aý|ðð²v¨sÇFˆÿùôµò)äØª‘$‡m’qñ·‹X÷ÓÈÎ:Ýa«ZF6vAí¾N'\¶†ÁÄÜqP3Ì8!áë·…m³Ó¦™èd,à2ó.¼ØFÇo—ÂàEyèU6ïö“»ø?]ÂÙ$+ÿ–ît«g-Ô=[ŒGòê<‚1Fæ¢ÏÓ„7@«&'eý,°¤ÌA›!NúŒwQhT†Ó`'tÀ¹6Cv ¢6G9_Êî8È‹<çÌ&k?|ÜåRø²@á±€7E]OÒ}48jGŒiWÍ* 6BßPó ý… 7¸9eˆC«#ñŠ×Ȩæqñ€l—†Ø«r—þ°’ÜÈfﳆíãáæâÙ¥„ÑØIAãɘL8t&ìåÎÿyÍ­¿õâ¶æùÛ©%›dXœˆY Õö–(ïS­:x’Þ e³µTO ÙHm¯êupºT7•¬Ò GÍŽB&É÷RAŒ<¥b¸7 :ßÇ“§™ìº -ôL¬êÎZ/Sì›±á¯f¼3G³-Åwåòt§ó ß²¸žÓ±ÕÇÔ¯ßl#ð§Ú $.+)§AOSñ½¼pÓ8§ÅÎ÷Ñbê¸\ÅDð.†"Ø®*&”ÐàŸAaØ#ÚÏ`»M.šÏs!®;Õp7ØU+¥Ä™±ëóHÜV»úFÊñßX0œÙ1Æÿ!üðøh˜ÈÙ$Ç”íl,õ°B‹»¯@y®C¾Ï 'ɹÑø>ž,é香ƒß4V–l_R8ÂY†7å{²p}„™Ž3úwR¦$äŽwÊs™L%FOÁMÒÃLç:$ËXvÖ,o4²Ÿ“,éꎜŠº}1‘{Œ)‡ù(Yûåü¦†Ï¾†Üe¦37(‹×&ƒ…–i\Âáñí2¼GNáëÔ%^©Gp pså³jsù’ÆÕØíÌ5 q¡¼¸¿ÛŠUõÛGáîŽ<Üï5Ñžé—¹Õ§¯ov~Ρ•¹×¹r޹cÆþŠÄ¬öy¿£Mƒ½§»zI‹û®3Üÿ4òM'Xn¥'^kÉ›òµ­=Öß‹»ß­Û[$–“ºÎ¶Íp–/à‘ƒ“ﻪ¦Y¥˜i’œ­DåfP 8ÊÛŠûÎ4-»ÕzúAíäÓÃϱ —Ýâ6¬W×0g1ÒÖIÊu .&´³7À’˜ªSžÎ}€~5f…+»æéT¸wp~Bž WÂL1•a´rЧ<¿9È£b)È^\½qiMç¹ùÑ‘j+ÈÂ¥Ð/j¬ªö²om6›éVMkGÞQß*—z¡„' «kÿ?µœyiJYÕ£/b1é‚_õB ‘‰¯Àzuãq5 ÄÅb¸ÌÒ‡ש_• 7ÕØ±'ŒÅ½ ú·‘ N¡E¡z=/Ölîˆý«õ9ײ ðÕ` ©ÜƒmBFc Øœ¤-'ämàTJƒþ=><©1•²+uä³¹š¼¯B€&&TT:¦f€7 oÖÛ!ÁÔTóeÆ(ayi½«ˆ°JA1)dÖûkW臫öœÙà4Њ¢•6W4·°k¡®!«ò-e·aÌZàÚê·$ÏÌTœ$°ó¢_Αo{øÿ6ÉŠx~CQ_Ì •älB(À™ÍËÂh‚ë kƒRH—˜5:†£$‡ò!°UºŽQ¡d„}³é¦M¤ŸNƒM§?C¶¡çbÁí&Ú„4Ø»ød¬.6Œ Þ‚¥5׋$9ÍŒ¶y^ ÅKT³+\]aB¬9¿æÜ¤8ÿÄ=5wÜú,as6šè“ÔLVå›òn޾ÎÁá³ENIÆ —ò"é§³v>8ϧ[ˤv6•²hL¥áKÓ–Z½M%¤/MÕ¤ƒ‘/$#˜•©¨² v¸€¦*&w1(9°ç°GöBÅY¼EëdžêOM_5ûÖQ‹‰$h=Yµ@v¨²)J2Ý\);1Ã¥| 9{×K¸)uÊìê9Rö ]Zo$$…²‰[=Ìàrƒ bœM2µ¹p°b¦xÚæ„;—= ®ÍykMe˜¼hÚ‘f>œô3ÜÃ0U áÌÔ™{7Ĺpp”?k‰‰ÿðko޵}-üæ‚Ù?¤âOÛ?ðÐR3î¸G»lÜÄÆP6¹Nž²í®y ü§<ðê u㮹C¼©š(ÝÓ½;yK^™ßezšU}\ü­oÂ5BE͆3AEW× ; ¦I ë*Y /ÊÁשÍú¹ÕùèPŠÛaò ÛÇb‹âjȃb8Â{çÞ¼ÙLã:µWÿ1~egÊîkcÇ™óÂáѺÉû¨à²šÜ•ÛP5‹«XÇŠG»ô?6úë Ï’‚×ìt¼´cð#ÐPúRÝ™Kîl5rÕLÎÁé¹ÒðŒâêË›¨›~Ê8–óۛѨzVË›iS­Eu¤cwŘ¡õÿT]«•¯8Q,´ Ú=ÀÍo®úVžñVÇ©zuÎJ?è žRÎ Rv…a;ì®éQßP ×ÝLº„ëQÞûñªu D<Í&ÒÏEÃ)žÖÀaGƒa€¨ëB%È›ùueÚíh s²ƒ¤EwuÐÕ•®Õ¦ØÄ$Ó΋¤0ò—“gN<ÂöÈ‹ó¯ˆé7Üeå;]¿ˆˆ#ŠO ´¾ä•Ÿ·GÇÍ'H£äö0’> åÿ±y>Æ'•dXLpBô΀¯t0¨ÉfÅ:e€¾ ú!Uû÷Ó@ŸYd_„4az€l:ØA¯ütç´ž<êÓÆ lƒŸ¼-c è›R«Ùi©°¦fЉEÄNT€}4Ï•²C+¿)e•“Ë8¼X5ÕÉ>v1 jN’¶”2•ÅV4£~MÔø½w¾zO=öxvxˆúî3SÊÃ|6¼ÊI–ÁÆ»“löŠƒ›3/vz™0$kŠaétRK*õ›Š$p­2rÈ7©°ŠÜò¢ãüv'?drÀ ƒUÕ|8TÏjd*9;Ö¨šæ»]”f5!8Òp•Z@ø½K…ßÐ é¯+«NÈAm㔤RL¼I}4 \þê:ë8œ.Ȉ•“”Ýpð‚M‰Ëpð˜=}vV½Ô7M ä:!8öjuh_ ¸9žè3úw !M_™àè óÁ*ü6ÐtÁ 䬢5viXP‡¼*ÂÍ5ÈçûÐÑ"öO@CËŸ0k®ßëò_t­˜)»J…4¹å ˆ•øÊò…ærESoj&B` èJŒK|•Ít¸rvÒ¥Û‘à§u ã–7pÃöשlÍ2ó„ÕÄ(Ã{#)²ì<¦B!U»^ïØ€!æ½®¤{þWWج^B5ÄbÇBlÙµL ^zÓи¢Þb&uVÍ½Ù»é ¸¯Fpä‡vÏñ%ßm@ÕU6¥Š7ô´\}ó¡–`TS¼N w„\7ñ Û¸Ôô¥šÑ'`1¡Íù¡6A×yjhhŽƒüðÑl†€½`iÞ˜…§»cU(ŒÑ§zuÇaÅp¼0Žçu·ý¡ `¤Ø“9 ƒL%¨âh¾Ü\Ø ~à,ÕZl&k²x&’dºc€ ‡ þŽxmœ˜iÁ(*erà-¬¤uÊÍl²™b§¡8LñËîÎÒ-Û[¨éK?¯ÕÑ)ˆ9îæù:„²ebÓ³`q+ô‡7+Xe[ Mh#“lzòÀP™¼ =s«¹àfo°•°Î^Yn½(›H? §1²ƒd.?¹ì}.gû·…‚t£ W¯G±u®n¥&TúpåÞ%Q~r^ÕšR¦[~8gÛ)üý ‡‹2·ú£Ðp{m|ùæŽòÓëD<"‘))(¢^<V6÷}8ÚH…eÇ À/ÝÕµÕ…¿ºúLÐâ¦M¨8NƒÁ 6¥˜x©b±+{Á÷•š¦TT½ j+žŠWî]Aÿûɼ=.'á¿Iõ‡®Ä-X_¦Ü_ÄZx¢î/JK7ƒ»,(g¨ôZëpÕ²û…èAš6q-´ˆú¹ha c™Â±Ñ[JÐn»…ºt‹ b'öÜhÜÖÌà<ŸNßE3¿óŠ×,å:ÕMÒ®1mªi¸JZT­ÐÖhAâ-¯…•Œe½Üôp˜X0}˜Îç;üuª{ãßtnÂClpsÀ²söåžÅÔ^ãÓ$™»ºÂo´ ¤!Ù|Ê¢9a¬vº€ºQ6`SI VžÏ7Lý•¯ø.‹ùý0«x¾N)Å£ðGÑ̦’P~`ö‚¾Æ…QC½x¨Ž!nË<&ñ1Z#z9NŸ~ÝTßXš-‰VÕÎÅÊ/Ybo)ÕEà»Þò/ÒýÈ—›ÑLoˆ|±j1ÙMEË”¥×=Ã(‚ªõ•ùMØ6kÂ2 ²ùæ7¤ ä†¶ °saI(c»)\$W,C°-%½t¢ì¬…Ãõ…ƒýp¸aÓú÷e§Ìxá÷ĉW¼>2tY¾…+¼¡ø¨ç]¨ëïž tð[UÒ—ÁHG7åZp¡ø ×¥*Y5W(7 Í8ÉSõ¤²ÕªŒURiWí‡kžN«Tf|Mq§áÑåðö-hBð…<´ï©U¸r¶5øÛö1?”¿ ÒÕÛ&aßS»^ÌZñëÊW¢.Tœ’ž\éÐTr®J*W¿e#M7VÉ&yàÔÿ¼qh…PvÝ ¤£Çç`<Ò¦Ñuø7DwƒÌ܇QÊYº¢åùi›º­¶NYùŸµ¹É4x™!/ùdµ¯ý(ôƒ×¶nÆø~ÝIF²iÚäé§6orð{ºnêÕÕ¹$.ˆyT¨Bð•y‘ñb°s®Ÿf.üáÆð)í\VáBmÁ4bU#f¿cxPRðÊ8ÙµX19«§¹ë„ñgüé¹S³Êƒp<6œF˜Ö‰„4:µ’Ž»åR;D;÷FR5-Œ¬_rûFýjZ²Û÷'3+d“]H)Êäl0ØTj ¢Œ57ÌpóÍAycÕrçDY<ï`§”gpY9ÍDXá‡æ‚“в†ç&Šew]MuV±Y’\)åé,[ð¹pLG;y ËQ7ZDWÀñú•Ùy/È® rp6©åŒ–àš •aä½rÇF¨ŽSŠ7§»ú‚챘°•|Fš5M´™çV„ÛéÇ“Ñ`øsqž Ÿe¢I\ã©É¤Ú¦ëIˆ )( Ç4LjàýŬ)Uùb@Ùl¸Ê¼Ännˆ#šQ¬'EIŒµñµZ¸WYÀÀç"¿…D?Ég ܈‘§iÖ”›ª”}Až }í[ŸhÓÆ 5 ÚÈ 6  &PxS˜‰–jÃpêŒÝ?÷ߨÂ_Èù-MnAo~%8ÏÀuã¤7©Ô[Ÿ´ýÔíÎÈÃáåFÇÝì‹s¾E¨@¶;O6b8Í*0U6HÎ2¸Ú]ýI²­ÿ'7¯SÁ_N‡±âa¦á9…J0zäŒ~…«WGfÖ”U„PÝX¡ 7 zõwÇí_QTY¸zλD«o!tþÂ8ù皦¸ bÓ¢òCjµ,Ôd$e@Њ¾û†«{†Þ³µ5¶L.ê%ÁJ1aÕÆCá:¡5«Tº::p¡Á»1yÝ$¯z§ kÚ ²ªewåÍé‡Úwÿ…0΄ ·O•ÁÈâR*›î Ëôá¯b.ƒÅ§3¤{ƒoV¸âë« 7â°e48h{ 6˜e›!¦ü•k{à4–¡tJqåÒU =‹5oI0MÈaL•>U»õ>T(¡Ö28LžÁ˜SsÅÛÅŠä´bAåÁ‹® %„îˆPRÙ8ã§óaöf™y¥¥i0p ;HZÔ‡¡­lñw8ͲR;×Ó§ÅdHà“ Nep_ñšßÕÎÈÂG>9ÏÑÅî&ž~§þ‘ÌþY Ïó}(ž#ã“ wêl„¯¶Ç•t½©QÌ"³Çw Ü0)vÊo)ûš^„b’þi7õÍ…ò2Ò”Uš íàæÐ»Ó0²åÈ=©ÕËc?4ªçû¦ÿ„¾åÎFŒØ/ÊIÒ¥Œ Æø„6èÚ)+¾y8ö|^«¦/©Ý²¹J1êC¿Ø©Øµ#WªcT-‡ksq^ØÙi£p1ƒaòt[bÖÃD¡!ݰ¦ËÞ@ôÀ/yaZ˜K•¿‰7Ï?ñ>%ñÓ¯¶:/’´0†È¿ãý–W“zcíBÐÁ¿ïBÕò;HQ«U±´h«'T^Ü$ˆŠr2Á (J? §?¬´­£š½<ƒhÎón²«s9LOÓ¡Õ.õvö³*ç‹úy Œ0wª/B»xƧþî‘Q½•Ë0¡ì€);×6¹)Ä¥§ûƒp©g&swÄkôÁRv3ú­'7']'À¿ D‡ ¥ÌP|Tðš©#J%ní^IJ:šfm Õî‘)ƒ$Q~ržËõÓð2Ð,Ì£ øZt.X‚Ö‹.ƒ¦Â›“pþ%éi¢ÅAïc¤…ùSïÀOÉKgM› öÃ@ùfhm&ôÊì8œ„²–r`žS¼Qý]àEYµù­&w™ˆªËz!vÍ‘ÍÍ!¦¼„vVÍ*ÍìÕ\± Pdò ÚW””ËÂäµe ’k5z£•­'¥CèÃN/§½þ¤©ð]¡\ȵ9hW‚¥ŸËN#áæ¤¿Äc®åf-ï…± ñA@cvX¥ìFX.ŠgíÃAŒ¿9K2ÆU†¡tVìrR~`ža?XjYNU§Žqe<{`ñ(¶³s±yZÊ /üªë8ÌÞhã…§RfSÜ 3z·ðþS˜úïkjüdWÔV×ìS/µùpÈ›·²Q¾NÇ*ݰn ë—¢Ï,¦bÏ }­i´™fS\+t¡´ãx ¤eÆt´#YX~`sÎÓ ›¾2ÆÍéòhK–åbâÈ©+ë·¾÷œ5ï UÙ,Û/Í(å 3LF?Ý ~&Ü5œ£ú¯_¼9âÄ,8Æèâ§ÍÜ>ì|¸ñ,ùÙ?°$w5;á„/Ø–mØ<ÃYá<¯' º#qÄqä®>Š]ÝÃC¡R’BÍÌ‹š¤'S6—²”e6^ÐÏÚŸÎ'àÄÂÄ\UÙ¬"™“èÏÍ™}ÇiÝ3P} úuìíi¼­“–+e^UôÒ*ëSäpW7îŒó `=9+­òŒÒon'º©îà¶Ì<ý­§ŸVsx¿®SuBnù–DùÁC»}{¨ »9ìó.ONÁÓ^çÃáp¹0ý-‹Z±ÑÆ'9ó)ä8p;PùjÕ»{ðI86;·†;%æ%9 2€Vˆúé4¤cŸ¥®ÒÕôñ¶µS_ø‰yˆˆ·¯…DÜÝEG×Mð-a#uÇWäµmÈrCY¨Ö»žÝû×cÃejá?æaF¡ÍvŽOGOÞæ)ô0Ïœ9¿(IŒ_s¸mt>ø}¸9®“›U e3‚±½f,æ|õ0è^˜²ËGvãàÁÍï‘ÂÅ´ê¨Qn>›+ ¨Ç ½i¿z˜qÌejß›‰ˆSõ6†[4cvãÒÝžknå“òÂ5û'•M^8æ­€M0è}´ÙÇgF"àÛbD®3–3{¼/ä–àm•ˆqÀÎ&Îg#â]ˆB;¤xíN¸Máæ]Ë.Ú`Øâ¹÷¸ØÎ'"œ³uÛw7ÁÙÊý¡Óæí*©éÑ.ø}¸ÁqËÍû¨…ÍøŽ0óžÖ‹S1’d ëA¢¬Ò„D¨áJÌ™ w;I6‰…®‘©‰_—a¦úF—ô®9âŠÈY¶k¡· €Øc÷HjF¸ÏÜú™}ysÕÂøZ /±¤Þj±¹g$”MUZÐÏEèv½Ðî¢fèÏg¾ymr;Ø MãoN¯´`$-1•}U ^S×!uS0²n†tØš¨mBÉíN™Ò¨#Pö¼z^VÙŒp‚é|RP¦$ay»ðÿ™(‚³¸ÏÀ£»zré¦,ˆ>¼©ÉcVí<Ñ o‘ƒ}ö4V/³}¦£ö˜xœ¶i >²ìzÂÌe"w×- wÃXuÕ±ìÕb qœ_\ž12ñ}õØìãñ  iæÞxhÀ}µ@Û8ÂE1Ý Âå¹ ŽÆÁ‘ãÜk†oH»lü¨|^Ó#¦H¼âõ‘¡­èÀØÐÛCUà˜s…žT –2š*ãX T€õœ‰»b1Yý¨oËiÅf 3dh;ã+ F—uY™œŒ/Hd\A—uº"Á¡2HÒƒû3Y  €m´qõ[+gê#HÒ“{˜ dm.)’L‹êÔmÇ'ó6 EšÍ¶(J’âš§ÓÀaÿ^6ÐÜ!&¿ìœÁXÃOçdóOEŸîû™WÛ‡™îx[ä%,¯6j²pð˜N‡àÅPíRhQ¡µ+³ Y0<¯fJ#¬ x¼´¾NÙKÍ…Á'U)”b3‚]XäM+£³J·õþ›Š=ÞÑø´®¾-è(Å øŒÄñ vc§wæßκSu7¤Æ­­ø-88¹Qd›ÅÁ€rx¶¯xàJ)²qO:Ü,Bnüf\ÜÄÅ™âÃIÙ¯‡½ÎWôè¼úÇ zL±§žèý,æWûî¿iǹå.Éì½C‚ôú `Ú…¼Ž}• zéýXÐÕ° &ö,zŽÞñŒò-#àµ{êv4éºGìo2×ÎAy_Ùâ •,û€›Ó7+}Ëpƒ „*IãÅmkƒ¼åÍCµbËÁ€>d#WT 8šYc eä(%th!Úwæþp1±&^ƒŠÅ0(a:Ðb€!]'‹nðÍ\TîÍàA’4• eƒ-àÚIÏY‚:¥øpµqŽó.»~5ÄQÂØšT‹dãnh«©^åb\ñúȰΠ¬ow´Ùò$LJËά)V@©o«Á‹¤°1ò› : ªÙe¤¨ »Ï43í Ž…ýØH«°–úýßä•bÿÜ|Ðý‡ä…„º°ÂÔø/eéˆÔ¡r}A]F£»Xº]¢ÁЃ2%ô¾&!ú…ÀWºÏ\,ÂM5³©N­\aj!¨6¾!¡Ôfw!.”†tÅšëër>93ú΃Tv½qö:•ypw’ÍK܇.Ò&ì(fñÁ‹¢tMG®dŒ÷£Æe‹¨ly{¡q ˘žTžnuw±)Ø_®~úÿ)ŒAY¶^îpõïD¤ü(=ëú2+§3–°~ æ6ücÞ¾µÌï©¥.ü_¬i3™ª?ôÛ€yýÒß3mÊ¡NRÒáĽ;î òTÌÈÉ+Túš&ºX¡ š2†uÇœìT`Ì5)Ћšj¾åP'wIÉ™‡¬…*ESÚÍòfÚLǰôÞh(à ¼…Rvç¢PMñ]tÅÊlTÛ¨iʦ˜(šoÚ¼sqÀ§LÌpÙ¸¯â?ÔNnÆÕ+wMÙäž(†g 0tó/¤_–6Œã}÷/ÑÈÕÍJÔ×mdrš~SR`:ªd$”ªj!ÕŽ;ßJú¶¸eüYš ØT¨ÙnÅ]õ8~"PÒÃLgÙd0 žTc—}ö[tˤ`LÍÍ|àoåãZbW*ŽhËè:QÔˆVuÜ„rSQÆ‘ÉLåtuãneÕ›ýê5˜ÛÓIút”?|O;ÕàXmà×™K”*®xÙz ÿag Óeã[yEÆh’Žû`§X $- ìØO%¦b mmÜT›Íˆ$vÝ j—î8nü4b 2,}æ×ÿ)pj ™Z `a›æ—¦¶»b—­ˆ2È)Œ sR‡o&Zû–6XC™U.;Ñ+?Ü]9L[ˆ£‡:aÓ®Z‡N+^‹Ê=ûP-gçeyÂ×× Ð×Ét)?®¢#<_ŒRJƒq  Ø-f; l'ˆ4MìPSUâ !ã$ç·jéûuæ¤r3ßÔ¤›Ûè}6“¹•@=r/XqÔn²JâÇ=ó<¹`ÿƒP«½¾%Y ý×>E{ŠÓéjä,ïM†ÑãìgÄÇ.B™W`&Æd|œÉ‹—nL©w¼9E )»c&)OnóépuÏã¼=ÌÄÍ<¢i\5.•4ÚhpV¸TY¼Kz:IÂ~º ƒ¥$éÁ8ŒoÌç/n®NÍ–’iºZUÚHkI§l`9X÷¡ð_TŠ r¤bÍ„Ú9X³¯4õ”œI±µª sú†y“J®+P³Ñ^8'/î0 `Ù‹“Ã)psõW_<•p+Îðk‚‚a_œ##L?Äæk£ ˜¿Y §ê…^”:ó%± v”Ny£Sê²+o‹"3s›‹k{ ~8TYNúùp˜µÍuàtàá*£*™46ÅùŒq•-ˆ²óÕ•&d£L§*gᆡÚ—ÌÍóâ,e_<•jU½Ltèî—]–¡ÖJɤ©²‰ÿ'†»Ì¸íÖ m”Ù1J`9/Ê3øQ&"J¹yï576©JÅ «^R(H3}¿P¾4•²wPáìú’¼˜·EÍ úóÝ°ìø¨ù¨ú¬‹ÿ¡6Ó ½W\®©K± @Ü\9G «³òt=©(JÊìÕЃlE3 VÂj¦„¼Šdg¿DÀ6€Ú!É•rPžÎÅ.Ëê%Xá° ySºäС‘ÂI}k”ªÂðªõ ÀšÒåú[aSÉ&Ü»Ó0Ø+·…p¦–iˆ¡4êcUl–eªØJ5¨eÚ4Z½ú…SE ˜`ìuÒ\رÀ eÀpµ!Áœ@£x½Záñ@/ü¦++x€›ª°iqÝêê„t¤CSòÍ&,+rs¥ìôëR\WüØÜéE%qSN(²îØ­.Çq†Rð"œ9RÄ«lÆcMGûFèiÒ‡ëçÓŒ#éÓFÍäùW[Õgð3d_® ïþ0-œ¯<á>ÛŽ›ï‘>>3¬"~C ÚD‚0ÔfìÿdŸŽûÊ-ìè—“`»Ù_]1{]•W-ˆ'‚M•ò‚©t ±‘Ø4­é Àš6•a24¼»Ä±Η@;Ãz!6Í‘‹c…âIŨ™b›JÙ1;’2 !æ—HÝÒðX]69á¥ìPu'™dUÞT%©Ö>¸^=Ì4ÄËÌ` Ýó ÉÔ-ð®Ãèj ²lÜQaPª}bƒMò4(®Üõîˆ Â .3Àx–¤($çvÓŒÆ\¨a€vú ðÀ©ë§þVÈ$%ˆÛ4ÎTÜÖ Z•œkQ*Zu²uRI8j~¯'©`Žÿ *µîôäbE†TCήG­›³ôÓÐÏò#ö•ÊÍeݼh_X;Fa)ûóts¢ž£7aýËoꦆE½x8ˆ:î <[å§ê£Ò+éC)‡ wއ®—ß¿ð€ÒàzK.AìKSÙ¨ ÂÙ~ËüƳֽѓ?œ$Ô(Z¢kÚ™O–ÌÈ÷GAéÚ·Á*ä[0G Ç%}Êz8ÿ¦2x¶úç~ yñ¨Y1IYÀF–gÇâ$T /JUI÷W?Bp_H3Ò»'ð iÚjwy?° eèÃ]®îÊ|ÿÑ[S.®ÜŒÚT²ôC![Ž^ßÔeÓæRlqA(ÇlÚ\§&b-Ö„ïÖ_”R½#/N*RwÈ•ÙTôˆÍéàƒ‡æ+}iŠn)í/i›ÓðX­V7Óæúâœg˜ÖÂäZÏe*µm™ÆÔ‡»hS"Øp’â\›õãX=ÂÑtRqðŽ×_¿¥/#–bTsvª§Ó›~ðØ€úÄɱÑ{¡”]ù²~1Å«Å`˜¶P(ƒÜ ¹j—I:Èõ«‚¾4}ÕÂJÜT%O¬gŠýPÈ+„v(NÈ[Snªh€f€išòf ‹gœó\ˆ–Üà°#^“rܬ쪚™6nνåmyT¥³ ÖÉÅ¿.\š©IôņxYÞùZýñ% >Jí&ËÛè¬M†±Ù Ÿç‡u÷¦Æ-8jY0JâhŒAìš94¥C•›ªð­¿îýÂ}7Yè¶{eHã;~P–~ƒàØÍJ–áѺ‰ý{.Ë÷C=wõêðMSÚ¡´\wÊ&W\nª)õœÆ8ãv“¥8Õ݃xÆïÌ;e7o„7ÃÌÖMú3žï£æû¥:õ/‹-ž6zÎô7õÓêÄãqþBÝ/*F*È>àN¦ISœ#€›J- >UÚÄOGh¶$n ((Ž(i´¹Ö²€F…Jp Ä…¯ñuûKp¿¸ék¬f°ðÁµJe¯ oÞP)³M.Wøºáw#V²IëûŸÅ íˆ=ÁgÔªàçë€o”\:W#èÜPO±‘ƒ5®²)bæOúº´K§ÿ[˜š)2Eø¸ø[æ»L—#4š¤À>O¥dBÙ nņçÅÙ«}q3ªÔGÜù³ØK4òé§[ûL¸Ûm:£0Þð7B¿æâ±“ÓAå9Õ»L£Ï®à?ûOJ|Ïèìûþaÿw¦¾e¸Áã’f*çêƒøwïý%F7¿?¸;·ú–ô4ýT÷>êªÞMØu ÇÓ´¶×¢w,Ü>\}YŒùæE«öð`ûmÒ0Þ ýízÇGô+5Nl“[›»_™;wéƒ|¨jgÝó‘÷Ó|2& žÅ·°žë#«u >Ѓ˜8ÖŸ¿ýññüìnTÃÒ ¶ ‡×ýyÙjµ]ReçyÃ8Bº1„¿å7ö7O„v¤’H5g^Ð@ú&¯¿;Ö^hqŸ9œ¯üŸ¶n~÷¡ÍÞ/&ýÒPA -ÕôàQ>¥÷ ¡‚\9ë$¥~¸â"Ø›“”ýyº9¹ 4üŽ/à<¹«ÊFlÔ@©gÕ©Âü±ŽÖ/f„jÐ&¼)L“W®½×Ó\–/öªŸµ¾ñ±›oCS3r½L$- üÀ<Ýœ $>JLòêIzun’¬Z ŒC§7Ói(ÖktMqŽ«¸ÕS³iS•>N*l0³ÒÌ2±x|}yê/á¼!ÓPñ̨þëÊ ’§AñþŽrò±Õ <¤C¾T'ä› ”û¦U³‰ps*–U’‚¥Å„›B'É ¼É-u¨í¨ª¨Z ”ò‚”§3®o=8H $/j_n)°¸ÿ¡„aš\tŠSw$ û$¨Éu‚^ö£äD‘MÓãÞ‰J‡bjõg`“ Mmx8¨!¬« UXú± Ï…X 0_R¬NFÌ©„“/Џ7‘ÆEc½TÆ’ýPÛ@ŒÎ3W»8 ËZ.á ¶¸h_4¥Í•²“$£½£ƒ·¶LKGPð4ì§ÃXàbût:ísË72•,³ž/y†t¾l%Èš’É.ƒy3mª’§†Üp_àÙ8çüPúÒXÔ¨*¸© ÂNÐuº¦ƒ-6!þ Ñ[çò0õêægUÆchò[c%YIÿ W ´BTâºÜŨŸ@ÜÏ ƒ¹eÅÿÒD…ÁM›þÖA>‰9àÐoDìÑŠ°# n¥8 ™¾~ØñM ·¡{ÕÀûlyM¾¨,¬(øÊ µ´™©¤”˜g,{µ]ß#€‘B»vïä>© XxºL›3v Ƨõ±ÿ`ÉmÞÌ™vëΛÊÖ¶±ÃDÛš¦8¶+Þ;"œß=0¿-XðïNT‚»æ¿qÔ¬ÜLjZnÔ›Ì56ª>í• “{RÐ~ÍËb8µ2^ÚºÅmXvnÑ+ÕkWbM7L„Y¥/µAÚ5= ñýM?€ãÇz-_*aO©‘7×è'^JVÈè*â˽:UySÕüª)©dL½Ö/Wë~>£°ñžï€þ}Ñ[ °kdhúbϹ¥¦š¦’ˆ⠤ˆf (ôÊüî‚ÑòÕÔ¸¿ÅÐþG챺ÕßhiHÎð8|i’r¨oäñϤ‚Pæ¡*eœWù¼ï>í÷R‡–²Çšª7ðžŽÔ‡âß— *NXxL¡Mvñ€Œ©„Aµqà[[êt{jBÅ Ñq\4†4“ÒÛô[†ÒÒiÕ4Õ~²ÝÛ²'(F¥ž’‚m¾0÷£²R(Ú|8nƒ*a(?¬Wšg!Ÿdܪ “gØG9‹ž¸þlÁ(í&Š IÁöß”î0lþÈyp³"«³qW(Z CˆuÈx™«¯"Óhž€xçÇkpÝåàôÀg¼'·h¦^}±Fãٖ٦wXÃÔ¶Ìoñê'Š •`ì&> ‘3wAÕ°ŸÙ10½úëuñ€íÆÁV~ö®ŽT5Ó…Œkéµ=y.ã4ß zkÊMUò4ÀAßp_àÙy5Ð4½Þ®ì+pµkYØpúÔyc,ŽÎÙ„7‡f€ã»á48ë¥GB“éK%CÒAcÁ˜(''¥ƒXPBLì"o†5QN„O·ydçòpâ%=V‹J§S ;{|t’~Љ=4˜›+ÆŒÙÿ¦Üðå7’œ0ñ…y†Áå˜[³¦jÄ>®rÈ>4ý¢Œ“‚L[‘Á sn®!»®/¼<ï·ëÿ þ¿¢™#†„¢ògH¶ÿ‰x–3¥c•†ÆïÚ"ûN?3ï…¯ú˜_Çm«°ÜOºóªÚ¦)%4ØÌ~¯7ÆÙõ~TL§lì'öÓÑÖΰìXûÂË‹£=Dzð§.5›/| =89x&Ànå>€Æá 7,«û«GÞ4|cõ2ƒ§²aüYÓKµS1Þ¨X‹’3i§ÂUïGÌ!—tÌÓÌ=ƒ48ŒÍ{è†lG©Å ¦@ëUžÙæ´–“àhŒ)-3KLµ`ªajsf‡h{źEkY euo,äd«WXv¬²zìäqPy˜™½¡ê+|¸¬Zøéîõ1BXkƒ#^‹ÑÝÓ\XŒËHzðÊxqùÃe¹VcBØ·Ë×^µPø£Õ“÷§—n­ü¸¬°WøÌÏìë|šÕfã^ó2×½8ÍÅêSñFI g†¤§é燋9"lnç")8ÆÛG cÃä]ãÌd¾Ãy’g*Ƕ`lkS¸Xˆö+/Ê3ñX½(2 þM9(Óf ,’ÜÆ¤tåËËÔ{öqô@£ÅSw0áêÕÃæ~0yÁˆ”×ùiå3£6^0ŠÐÎå¯Ðߥ>[ü´ºy‡íŸ¹Ñ’Т«ÎæŸ,éÃmá†ïÝÂKú´ŸÙÏYkË­¯®üû’î‚ßè ÛÞR8»¹òû¨1ááÓú#%Úé”}™÷Q°\ï-×ûÒ1ƒ ™ÜkÐ Œ5Hƒ5ÍA9ØŠÔ_™vΙ†•‹À³„\þ °Õ‘M!¾…×ëI9˜ÃdÞòº“Dš¶ížæ+äKSzåÅÜT³ÃI5«¦T®>iÐÏጴÈï;ÊXŒˆÛ“™º“¦_Îã."j%± ž²ƒp)°<ì4ˆ˜F²¦Ü –¾êTÀè¤âЇ•ÆÛèRŸèéí µ·& k³`:"ºÑùVj&¼)`‚ ¼t­øÃ–-5…²»æ j™w¿0s„¨§{Ý%-¼X1{¬°é.U†ôå‚WÑq4öòCuCÊn9M*R–é#w–®_ÈŽn¯‡/ƒ[üHôg¸–Ý©¿‚’‚1;ËÝ›è_ÅïU÷ÿÆþ'´]uãòWÉÿÛ<Íø°Ÿ3S%ó_uþÅÿºþnÿKŠ”ðúÅ/ê6[ó_¡‰èÿŸÛ7ÿ~Ø¿Çù¯ a·šŽ ÊÁœ>KaØ—ûºÇ"}Fc?cõ¯r1ÓÅAèðŒÈ_ {ðIÃG[’iaÝ“BgÃz¡èsØèn†ùSHá^äÔYÍ» ¯5º™ëÊx@ž ±#4ƒÓIå8‰€+lTesÂs7ø]fwí ÝMT8°fgƯ˄‹'k‰jÜh„Áå[8I.OÖrá?K^í™[s°tøÿ)Û¥‡›VspöÉû;•0«®hJçk¤À>À*ìÚöˆa,ºgY<“ 7ìâ+œ^•°²ïz‘Íodÿg5²­¦±IÒ& ¶¦ÞÛÜÛÏõñ›ÀÁwtã î:UšÚ¹'TÑÃ`Ùå»sëx\oÖÕö,0qE'É ¾dï~:í\ˆk7uXÅâ€|ãšjËœüÀö02ÂØùW8ó>ÕF¤ÀnXiÃom/›_׉›ŽÁQ; ÄÓ à'¨>Ì£t¢–¤<œyqÖY¸± ~:M¶ð}PvçßÔ{Úë\vvÞäƒ%-3‹P˜>î=Ïß‘é.[ççPð[ÞÇ|ÌÂ/ŽNâ·´¼pØ«EÝ©èSúdžË ‡ÎûýápÓÙ²ëi£¤ž¸‹ÑÅÀç,ï˜ì\®ÕÁ1ñˆåŸùŸ1ËvS>\ÌFØñ,ÏïqËI Œ2_œyÔÈŒ.¹‘G¦îê×JŒ^8 žÎ¿å}ĪqevꀵÇ{ìJÅèß—´j…ì©C­o¤ød@NàØ¤©JÙä©y#!¤¯J _Œâ  )&jñ|ôæÍ´¹zDÊ®0!xCøž©÷U ^]ò«îFhM¡§ë4ººÁÔ:¢6›$ÎÕk1’>Œ²Õê§ænšâþu†eè…yØë\.r²kžF'÷ºq;­ÑA¬À›æ°d¶VdˆQ•ÍÀ›1‹µÉ±ØdYS2ɦC’’åïî1€€©ê8·TôGëÁÜžNÒ§£üôÓŒl8 U~KOzß/œwh©÷](›ž¯’ÿðb«ì¹Årü(ì.g*£Z©ðÛÿøn>Ñ?ºòW`ªÃ°{ÎlÈo‰ã"²- ìˆ¿LM3åψ´OßxH‰P4_\ÿš²~&ôÆ=VCmÓûS@ý¥6ln|ÕÇ †ëü¦‡‡Ót¸Ò`GnAxcÔœ$§8õñ@ /¿=®eQæ,)Ø{VwÚêÈía$…‰u?lž€±l®”˜Œb økðåösñ¯—SÂô±x‚tó L†ì£‡w·n¼“‘ ghÊQfvm 5.ÏÚÕM¸Ø«~µý¶7+ÊtÖ´Ü2pÃðBBÅĶï‹ÇPØÈAòhðFúï(×5e“]qª?wû?Tj‚»ÿ7S\ =™Õ}!ÕÉNBjïÖ?tWn|Ò8XúéFúx ¤ÓáêàtwýIJSÆ%÷!éÓõ§EI!¤gçû¤¡I‡í§ ¹f‡6†®%xpðŸàºêzázºf;Àա¹© + zqvÜ8¿¡ò¿~u¤V{·ì­žFX&TlÂÁè–2om¡”}•>©ã…zE¡ DòÁS3 öc9afÛ{=üaZ8lLáfpáÞÃÕË,ýŒ˜í‘"àofGàM;•G¥$;;à<Á¹Ð"ÏÇ­ýÀüÈyšipRÂú°±è0‡óRgl’Üþ²´»Î™ÆjØw§OÛÇÃyA<‘|Œ©`#¬4*Ú«/œ¤‚Ÿ|y $3'.tÀxS|am¾Ï›œÇIA”Ÿœg8¡ò0ý|˜1Ãô…Û¢„qUÆÁ,:-bì ¯ˆþaÇšæ³Í^ßBîãj íiÞǧ“ôéç²1X†ap!\  Ï]aGü€«Ð§Mv†Ó¥†?œÐ§Mö9ï~ó6lㇺa?êfêg¸þl'æóh1¾¢…›ábðâÞXØGŸÚ£‘«Eæ ÿ¹š3›Ð^¢u6±lÿ&©“äºÖ+Ü;q÷<¡ìAð0¾®×3ò®Ó±E¿ôÁ¾›šÙ¨{áÁÞRÕ>ø uLüˆr8û5NxÖò0²»ãñû3Ǧ‡jÎy¢Z„þ®µVø•ßb߃M:ð¹~áZV×ÈsOvoðAüÀ¨a7ìÂ=y-Ǿâcnå^ªíà~صôü•wò®²-3ŽJz˜˜ÞGÀ§¡¿ªÅ€?wL¸U½0Æ²ð‚“ õGMÝ´sp –üdIÕ±ÇIa?ø#ã£Nì™?«F„æ#ò÷ÐáÒRÙ÷`Á’n<Ù—‘ßpt×…c Ûâ€Y;•Q‹Wµ=`°¤‡™Æxj̆¾W ãµã#~ºÃ3XÒÓô3\T™o”Kà3ò¨i‹ò÷ŒýDø¨teV˜&Zȵ¶A5¿…±ÓTäJ9(¯\ 35ÇZŒ:Æðt7ꋚ/pø$…ãÁƒF]%fÊŒl l,_ŠØÿ`”–ëòtC’9Ì~`œž…÷9ŽHÌyÄúx¢‘è`ìbÂ}–‹I…ÏóqãÃèåñ²Kzò³”µ¾‡ùÃa¼ÐI%=8Ë+¸EFlªa1ÙßÎ1繊@ Y„üj [Ķ3F•0èIó‡¤Ã×ÙêpÏ™÷m?Œ]œÕÇ{«),VÍÈÎÜ#·ÊYV¬¿¹ÙÑc èì”]e zF¹ •e /ìNu5rF>ÖbG»”€±wï`Š E7]’ó8ø”òt×Có²Î5KR؆Âÿ³­¬De«AiaWlÓÓÌê®$›JΙñý®üÄ@5Å«jóh«¯Y>f比 ªF¬œpž?Ü{§b_o8®îY…¢=Ì0”U)bˆ:{´xìýŽáÆœU²/¯Òe9õEJ+û8£Â‹Û¥Á§&jï: á^HÔ#™>ýGÑgͧ©sÉlˆÎܤªóÆ%(ö³`nO•ííIµndg•ñÀ˜hÿ*îøÞçðVL÷dâÈ©…Œ½cy{ßÓrä^BŽohsÐNe!¶êi0@3¸E{:QéãéÏjz¥!«â¥Š,çóˆ,±ͦ+ -Ž© ÓÃ5ê³Ç>avÛ¤8õ7.h9+9ÃŽŽröé÷‹r„½MlÛ¶óŒ/H J8tz8üÅ8_H^œC ÷n,z9¬Ø½œi¯…ßw4Rn¦{U6îe› —¡rèΔŸÌÓ5‡Gµv¸Ïð©’!ˆú9Sƒa¤’nár_–~YŠ–7$›u¹7,ß¿Ðþ·µóvýæ­¥QlÇX}çA}§bôG>hcn¡—¨ƒÉÛRú&éû;£ó#š¼„Õ뻼‘wêy+†e 5A$í~#È·¥˜~F@G@‹n¦BÐaþMßZ zžˆª-í.8Eëœ} ç\§¯S¶Êm¢”-¸ÉˆæäÙž| ç` >x êû¤#h°“¢Šã’o|6ªÑëAeÑ3Šu®¹,=Õሸ,äòa|ŒËÿå§"Ð'_AÒ9°®q^¡Ñ;+DÊF³ÊÙt¯Õ óç ×Ä9-³aKã7u`båâ àý6ꃾ¾îM´Õ‹B­‘Ûd;ÙŸöDŸ:€nú§Zß [Ú …ñ©ðC¸'â=ŸpQú† õÇS€qøß猳¥‡ Î[¿(ázÃ2?¼LmŒŸÝr–4Py¹UK²HMt*ÚqVvºú0’lzHjµã×V©e9­áõpËr—sîÒ—’ÌÌèØk£_p4q6› #æÜj©I‚Ĭ€c2Ü]ÐÚ¥L¨»íz#g™•ë-¾ºLðwÏæ.‡*au•S^ñÚùÁÒg©ó0¬ò$/jBPêÙAC*B÷5Œ;%—-|!ÓNOqê`Y8Q ‰²¥wýDñà¥Å$[pF” £IâE}¢NVžXûâSiñ*ÓågòoÀ_*cñàÅXúp¼¨9ÖûØÉZY‚\ÿ9¾À rWPy ôãéþòtiiôPQÁч¶+&J©’µÅ—C˜ØžÂ<³N DJfL¡‘äÃôû ”F=±4÷è]Q P0<ƒ™éWs÷œÂÕêÃ9Gý½¿=aD™2¡Äé©’éŽp³Tú0 ¾åÚvÿ'%HCŸÞÀ1œð:<¨V§á ÜûM'Y:¸Ý¤q볨À ~éÖá~phÐËIj%F$ä^°Æ@ý@ˆU àQÀÚ,óDu?dûðl~k”WPO¯íßÖE× D0=)·iÞ+cÎĉQùg³/l4Ç«‰ ‡tg³ AïTV9”8"±l@¼…2PŠq• (2PG¥ð]áà&4¡,²ù=ªZ…’vK¹™V­ò®åÃHr{Ä. W( ö¿0X7î)+kLš”=ÊJZüÈxâ³r?ý£nYÄ7m3øîê8V›ØÍH)÷ß"§!¤'—(}v„ñ™T‡Ï…Šçº–ž åû:;Ä6| Ž‚ *N˜[Ð…Â,#Itp#à—èP¤ÆÍó‚;xHZDúd½Âù®SÍŸŽÛ§&—'ýŒxóŸ±>>žÏZs£ƒÌÍ¡¬Ä3~ë4,»l4äÇLÕPç{¯…ƒÚžð[Áû2Ÿ…À9à(Ìé<½ ¶ÌÀÚŒ˜BÕÍ‚dHð5aëzS†œJ-`ð¢ìhÝzQ› iaaãƒtBæýÊ3>‚XJPáI—âåÃ€š¹Ø›*ÍjŠ8b\À2óDI±„iµŽ0x©š›K'HŽáU'Ëþ÷IR Ø%qÒ7®:UÑrv󦄦†í½ç½×A Ô÷ÕZØŸN  ±ŒõˆÊ2ÅÌW–Áþ¼ nÉŸt¼ ¿ï!ØMè¥ì˜ëá4sw›ºwE¢Rn}c°-Ý›qKÄS;³á…ôˆ-õ8—»Z”B0x‘^Î~ÇØG!ƒ@Ù%»Fx¸âû6Pʨ?Ô¢ïSF(æ$Xƒ˜[à"©%𠉵M:ûõz˜Â}æy\ѳcAm‚ôcñª5Ù—ç'¯tÕAÿa07nFÚ\ü³âµ=ЛXà)‰;Zßÿ×c× 7ðã«úÂþ‹bµ/w=Ýp£ü†ÊºxÔ¶²j:?Mt¶l^_â‘>ž‘5%7¿¼ì³ÉC6[ÀðgÉTxºXhPÓüÈæ–Ÿ6Z]Úþ×_à;¾»3)S›n é0Þ𲫙ŠOÂ0sŠ@{àKÆtoJ8NUyTÙ^Ÿ1.ƒ¶ZÂú[ržNVnUj‹¯í‘Óy¡<ê4Êrö0\HƒkÌETZvÍE'ÑÀ$;[Ø&/z}úO“?\{¸÷xšè~ùþ_¯×GdY<æ>ìS^nétœÆ“Ñé²Ñç²z=Ÿ‡áw^Û„ÿÕÓ䇗!>cÊŸý´ÿ_Cõ1¤üé‹<è…Ü·ø¼]ŒZºèª¿Håö<^¢O_òs;öÁ°\ÆùG¥å~øáê,(¾ðªœeN䄉öÂÖv-;ÿËEÆ Û]PÒ¾IµF#ô~pâ,È4gîõÍÃÞ ×9Iw’œN ‰¥¯F%í`?ÿç\Ûa´=¢8×gøÆ  „3Tpœ kñ _ãŽÁÛ«`¡È2éœüëWëb Ôq)ÈH²éñÞIk7óÞï‰<„`ñEn&ôd%h³§É¥“Ú“ÉA3&ý@´äÈJÅ&¯§z§ŒD!•=÷_g#«£,öÛxˆÊ›?jÈ\Ñèµ&¦b½){a¼.ͱ–À¶sñ&:o¶Éè]Ê­’CIQêD„îȈó‹ êùáŒ"Ü’P™è#…+¡4AA’ 8óûä³£3W¨÷÷C8_x _%¡™Š] P[èu#¹°êÙaÒ³Ó}Ç”/ì0ÒÇ"r¬œåiñÙÁÖ´p†Ä%=7½îþ°‡` þr ÍõäÞqêÀYú¾ð˜ø—õ jA¸~~sµl”j¡±X’¡š’Ù  ›²- (1¦fS1µZ8«är*¾!-ƒi‡U“â‚ytf×™íÆËÌWbÊìĪô@]Ì %-®j}Úé/ôä÷7[v èTÅÕ%ÐÙAÈš²Î˜ ßUƉ¡]H’ô«éWÕoƒS¡Òw¨rï€Ð½„;.îÌF2,Uùv_ @’¥¤z0 @‡¨¥BÅa\±k:ÇJ[†tÙÚf%žaAÂñ¤f¤^9JÙ%Ï6¦Ÿ;û !Ä7Ô$¥×‹[èuCÚ©Üz¿CâNé ³YúnÄÍu„¢fF÷‰‚ÏQ%…ËR6€†ÎÛ(ÿ ƒëAebT¯™]…Ô©–±è^¼ÅÄî¢úÆeöU„üã|tg®F‹¸·0ª,‹†§Wî‘{©>ð<`ât*¸cœñVîOƒù'Tž™XBË{§ç¾q¡Æî6êû0¸§Òþdnî¸ tµìêë§^„¬e®ež¥æ€ÆîÂðÃí *aù-AUS½ŒpèûOPm¨k(¤“­èËRúfn¡N©aï[7gèô¢—vyÇÍ¡ï—Ëöúµ¹p€ôáTϾH¯ÅèÁ\¯>®·¥ÞLßYd·_)$ø*±H/p¶Ÿ}òg:\^†å~±jýÜ,ý:Õ7†ÖæŠZ¨ØÂqI ÑÑñÕèZÌ~ï‘ñm)·˜n]1 Fƒ&ΦQ·à.º‰³nÇ_6Ð.oƒƒÊ„Å]}÷’Ù‹ÿQý?kÔ˜ŒiÐ7gך”þ ÔÔÚî¢B“°äÈ;©Œ0&hú ã7u†=£SiB b‡f€aý¥IŠÞcÂ…æ€X·0¾rá‡æ½@"ˆ-EóÒ‡±ºÄšpì¤4ž˜DH]ñM˜øx‘ÞÓóîÞkËDÿp8±PÜ(;T„œ°Å…á¾XÈ á$—3f{¡œÇrƒ'ŸÝñRÜñî~ðØyÕçƒÇéA£Û„MïÔÞFzþT5}sµ‘»©™uTɆOÏT e/€Åÿƒ„³Iƒ|[êN¹cQÜ’•oƒFR8ƒ¹˜4+‰£S£¾CU¾pP1­Ñ~ý÷YBo*ˆŒ:U9¨±£[¦´CÌdv•²K¹A‹¥øXE|§‚ª‹1nóLmD&ÚôÝ@E¯ U)b+RÏaÐW÷}js@û o)^ó|C›¥¨m´”ä”jdÆ€½jŽLÃK¡…¹¶HŶY;Äõ`È›†­Û÷mßÕn¸²ÇG}áqe†M)^)ׄó2p Áfo¨òxPqúSƒ%¹N~N%í ù¶”›ë€b֌L}0Ø Ã…6RΊ\ç 4nØ¢1Ÿ~¹Ÿ])gSÔpX›¨P›—ê’Ùé bô‡£ 2PÇœ¢ÄAw‰ƒRñºÁšŠ¬óðø°½g1é§Ó+ü*÷,õQæìƒBÕ]w×h,Ú ÄI)˜ÙöRк7ý#p¹‹7†,%—ÕÂ}<\äØe"7þª¼'¸Æ¢üÙØèò²Ÿ^ n¦R6€…mè7R“ƒ‹ƒ2*¹ÉÏÃyìB#œvnø ¿¸pïpŒt³”›)ž8Í,Ô\Õ·>j´aÙB&É…t‚^ŽB%¨'¼ÂJ,Ì·¥ÜB]1Jàè•+ýJ7JüÞI%}¸~A¯‰åQÀ+!³³¯'pcèŽóÆvyEºÔDÇ›ÀþcQ˜”$í¶T•&´ ¸ÿ&láÀóŠl“M©ƒd!ïDÈÄVÒ¨éz±QC ÓùËÓ0•ŸgZÒ§©Ï¬>áвƒ[hR ûC aKþºýÁJ‡`9+%rÑP)lÈT ¤­àú¶”66ગ‘”͇Ó08è›[à*‰3• ?ÒdþàâŠZ¯×R#\”†²KsÃ"ß–¾¤e£DÝs8»6Ó/Jžƒ¯³†ßÌo/€%r’o­EJ¾HÎçH;KgÔÄ‚:Õ†1f$¯ÆÑ`Ρ¢—ö'þOÐkâ*`±)ü'"} Yy@ß4xB6ªª7à ®nHòý´q3Åàèh‘24&kÃ\ù6Ü"¸Ê­RÓ^©ÈÛ+®“6Ü&Nä¼p@a0œeÊGÞ5kÈÌê EaÌÚñ²Ô¶ÒB a¤’\d\Nu¬p? /*Á{Üâ =ÊØ¾[¿¾‘K]!Ôhãbж«É`©Y0#8»ðï÷6Ì&_ÒÇ'ëõt…£Bœ3µY-*ØÏÎ/Œüb²Zj&}Ôª†Ãä>²fÄ7.™Êy 4_Çàñ³ñ­ÉëlP í–¾êY²!»ôÐm û7éÚÙ÷0{mè”É•‰Ç–îÞR&bcrsQËÆ…q @3y¨lØ“&Þa”¬úSÛ̾ ƒ6øztn¦V&&Ì¿jÕÓSÚØ¯w<[†‰ÞQëëTÑË]:nJ%;!3H¯Åå‘3䛃¢)üân.Ç]|`¸±kR7´ ÛiH‡¥œ][¨^F¶´¸¸m.œ”® ¦/ÇZ‡ÓQî’b)evØ¢TÙ™ÔHú>A¯‰˜4˜{@ͧêBâ[°AmªWÐ,¤~^XÏî¦fƒ~ï€T5r±l•^5³éY2 Ÿ")ñ{Ôä† æ¥˜ÝRÿh £lô:E3·‡‘²™c6ÜøèŸj0K+€"߸à¯@˜>¢4¾Š,\Mÿ¡Ëõ@ÒÙ©FË8Æpj²íÃØêšÁ¤üð½c‚|N32Øè=BçÔfþ÷IžOk.¾ªÇí¦ŽÚÜõ1áàfÐBvæ ÂX&ÇÚa¶Ýáø.X~à ½£CŠ`=-Óæ,¬@ý,€,`¥Ã°Ã€–è¥zF¯íKu"7mÿð“õr+ì‡Ë8Û73’ýú’v Msµ±­„³ &`ñ­ñ†á,ÎÓDKñÔPmÀ#Áku@''àO%רWÃ)–Ôgla‹V¼¶F»eí¼W˜hïwª´Ÿ¢ƒ¡°d¤ýFr·(’m¡7C)¦õš™YKzâ 僯ňácxý½*æmpøªrëð\äL"]Ìm±ôaæ/»z®rï€8žAoÐFß蔾¸Ô=xqŒ#ÜçÉ8³áe)5Ìöñ¢Þ)×f÷üð¿Ú**¸¦*ük*»¨ßµÀ75,³¦6Jò"w.9¸ ™Ò¹9ÖÇDómÑËRÜœÖgGK¨U2—ÀcK‹ŽˆwvÑË¡„réôÄ%:·10žÙ®–­0;ö1ó´Œgœ‡ÍÒPŒÎ¿nÝN¬ã‰sR6¥âf^—ÌF“èÜò¢x‰MÑ@ÂÙ„MD,e“£–<ù,¹1.\f´ZÀ Ñ œ ¹ôà«u9Lq<ŠáA|l‚ÆŽŒËyýuûCm®ì_$¤ôâÒP½ŒÊê‘;}Ýÿ‰ ¢ÃÅžcp#iÂEå\æ§ý§+2š v»¨ÎF–Ë‘õ1T|¥…4ñle—ŠNgéG Ö¤1¦2ørÀ<ãÙ¶å5‚À$zýw‹~Ù[€|¹x«þ øáf¨²á]!pE¶"ã·Í‹ü!Ñv&,±ÒV ´ïõ}÷'xŠÊ ¤l)9¸¡Œ¿Ü¿EÕò{‡VÂèʉ±T%ÈY2J€¿R¦±3HòÆ1:{¨„KÑ7ÍD4 B#Ì?ÆÖô~¹àq7 Vp b~Ì› ¾Ð€¤°«ôcÒpŠbñSÅ„.c_Ûk¢ƒ\Ë=¤0"åLÕzl¯ú{)u†ë»Ëæ <;›úŸÜ®_®¸icE •€X„ÄM @,Í(5o^h‚¡džù~=uîÓµ½÷U°K>'œÞÇ® ÆÊá© ñ êB Úy¼®RÕÒ%Qõ–kÚ›]´F劋ٌ<ža̧sŒ·J6UÐвRxfK¡_dÆ,ŸÊ®1÷ÿ„‹ì—+_EÈp#Ý&3餄+¢aÚm[¸pIa§úìÄ6 Œ* ñGž¤°«»g¿Vù¯õÄe4«±“àJ9P!Â_wá]ŠÙž¡L¡m¦„®¿ª ~Únð¢ìˆÁCºc=$ V| ±Çñ¼+2œ‘þì†öñÙð ÔÏ"çרøÂ®·ÍßVT©¨Ùó e\px´~Rœ™HßH(s(ç›d+Rœ:Ôj5¼7K6Ìê¹xµá6x±ªLhÙ Ò0h$”vúâfØêŸ ˜” ì·œ%¬oN¥–Ëp˜\š_8§2)zØ™²Am¾ÐÂÊü-nô‚âü°ÓfÚw¨² ÕñlNÙ5<àtŽÒä‹ ç5zÑúå‘ §œ€#íA (,T‚Æå4õÕ8çzrç…=0¾NaÉ'ê#~LüËJ%Ï ô-Ú*ù2ôT×"ÎÆ¸6š2š¡3à yëo_8€1:Û,¾³ôÅzMÄã“9HÔ`l¦çâ ¸5´&Eg !µEÅZ½KÔ"ÅòKñ—5ÁÜÏnÖfÜñ’ì'ëõt¤yŽßƒ{ËÓ '—an4œ#´!œ‰JæÐZ\¸] &©Ô:P§ÃŽÁÐ.T¢O\›1hð—Õæ¤1 µ-Âæ—%2Î$¶å Q6­Z© ÙØÍ»q’· ?¥TµB1FËõãya}\ƒ©ÜS޼LHü[S¶rp' DÊUvA†_£šK/kÌ€/.™Ê{ó¸ÿ €§{ƒ(éz:ËŠ#a¼ Ô,•ôäÁ¼Iš—ø½S|³rå¶ÝmÁ®çŠäù[Fõìäó0PîÈL¤¦áEC%)µËxÄVŸ@n¸XYUrehJ€f»étµ{Âåd7ÿ:K†c>¸_ê«ö ô_‘(Òƒûˆ¡ÁKñéµÀ[8±ÁÀ5ÌN³mªÇdÚü•ïÿ‰r"’‘`øœÀœ‰Å“~:éÇÿþòg@¯Û}q’(]Âe<9J+¶À…b+%*c Ž£–!~æá0y9yäUÉOwvs…6½p Û\ä<¬¥>â™»Ø6ÝF¹A(‘¹¹b~‘ǯº]ÅZà4B¥–ÀÚ‚Zõ2vÔwæþÌ‘dyep£…Ç2¼Œ¤ÅÑ ¾XþDá½B„\’«n3TО¸æ‰Ò‡eûSCàâ¦õ¸íà‘¨×0ñ‘àQC»´(éaNµEŸnDލA¸eà´öî«k­z¸x©3èÄ“$MĹÛ0ÜJò&êí£•Š»‹ÁëÕœîqÁÄø­TΨ„cùF—8Umô·Ú*4ôâœ9Ö|4J  í-øÆ±Hë5y"Î2„`ÐA¤µ…ûa#JÃuEðËGÆ‚èÑÍ9]<3Î|ÿˆÛ ØíAõ´¬ÓæØ_Úÿ@z².ã+ry¯ßP_ÆJ})y™¶ ô¯zAë‹]…ZP ¨’c‘|ûY…ñ× á("h–ÈR9I·"7’NLA³ŸŽFŽZžU;µ´ˆt1&F;½9 ÷‡ù’ôéHõòÈ`Ò‰1ü„³ãõ ogì­‹žÍð×WÏ¿OÒP×Ä¿¨3X¸wçÁ²SlÏ-± 69Ãf*vÑ1Œò"4.JÔ2Ú JÎØA€OÐ+͆Á«D*7~I&+}*W¥4|mô'c¼Ëꇋæû —Jß±Èæ­ÅAøŽˆõ?QŸñh*ž[ Ò+8Ú±6~H])à7íxõÞKÙ¬ž]~Œ9á‚ÿäÚ&6ù5n#TjJ¡\?øZ<€o*y;r“»^3' ´öèapÉÏ` $ ¬”;¦Á±ŽX¾(iðGH:œïk¿czÃTˆ5 ¡Ë@s’ˆ šCP/)¹$%š±°~È‚bŽñVEUYlùCáÊÎcBêGZÁ©$d¯¥Û˜Qpgz XÓÏ'³Wÿ#ª9ý¤îÔðåó™Sb8Ò@x‹(`ž'Þé+[Ä„n‚WÓiW->>Š*æÿ-©ùoêa¹yX œcú-- >½½á. %='¸K9H#ÈhäšGËǤlé%µ:7'DÅ©‡,б0V0c gDÇ8zG/_ɃI*£¤âµ™!Üß?á.‚пæ›k>¥Ø\›ü /r"üšïfùUðzC/rÎÐry!Æï!óuIéÂÿ‹‘-òµ ^p^3ù$”cçA¶ “>D÷b›4¿Ÿ §;ú­í»¶dÓN¬ÅBfÙȉ«¼ ÞÍ/ùe8j!‘Ì%›G)•Mj›,M”cc Ä1)4¯ÃÊ~=Ê7eP,¾|ÅðU²“¥ÂËN:ê§+Kð*ÔKÝ ãrž`R:)×B¶áÜ"J·À.‡Åˆ-ÿ<<욤)D>°êG@hÉŽG_N´&ê–b›šÕð…®hÿyŸ/Alµ!vËÇü4ù[ð¢ÙáJ±Í×rŸ=|ÎÿðÏm}|µà/_µICîDßÉÀ ãBË3oPì‘vŸžÃsk'ÞM÷_įtüFÄÊ‚ðUcGÅ#•RËOËuX¿ˆ€ ÖÄûrêsá°¹(—YºÚ;¡·/2ùW.Çäo ;ë˜Æ· xî¨á‹™ÿnµþuM~:GÏó%yâ«´z ”$ðƒY™”;&r%ÀÀzwA•z¼“XÌG x>ʘ8?B ›Þ)1™tãBÎÝ(5Ÿ> aÏŒMËÆwÉ*ÄûšÜÞùß>àþ½þ/ÝË}k*ê"'“è">‘– ñž«ìCð»Gš’9uðWŠ?¼jÒr™Ò2â1_“Îø–+µS¦ü3VÅý0îiðy„ÎA£ІÔï!¬<ÿ^kÏ) %s©Žž ²WBâJ°ñWIÍáÛe{Í’÷TþÅØ=ÿÒ„ãÜ-'`—oügXàÜ.Ã,±žÕ¿ryÅŸPmö³ÎMŠå81%rŒ‹†sÅ3a{â#OÓ±ymS^±,ÈÇÂz÷Éß]⊌ª¾¨yÀÅŽcn kÇH…ËJ˜C.ÕI¥wÇ+•IøŒç¸â‚–”ˆ‘Òt—McöHÒ‚-Çp>9wÖV÷‘mIzÝBÂ4ì0ñÁ•ª²¸HZŒcÞEN’2ÖÆ-6Q(ÛÅèˆI7‘¶ä#²¿°¦b¤ØC|?¢bþ™²]âV+R)™P¶)å¶ñV^ÉRα9ä¤$¬ÆK ïζÒ&ê `¢¨¹–ûš ]þKÒÀBb>ȱ3®¯óɆrÔgQ –”,s -G”î„a4Òä¤d¬¸;à48"s&‰\ñ\µ–wìÛøõúÄ¿¤(žaìk‡òˆ¹8E8=¶ˆÃ¡¿SyE1¼µ€^Ѽߖ""Ãx%#¡°s;IF†!©ƒDL”mP”l,ÍNÊ+¢Ž ;©wÛ=Õñ&™D²–HãFÀBôBùe?òsG¹ ¤ÎQ!îä[––Í脜"Ç¥UérmÃù-WîFmõbƒ¿=Þh8¸6bT<ó|VT>e% iž˜`9ßKîkÒëöT>#&%e!hiâ\›5IWLÑ·9Þ¸*©Íñ_÷‚œHJô3Íh ãZ¦\Ä7NèÖÄͶYÙ+Úû. L×¢|,ô‚G7÷aœõû”ˆmÂåATãW2H`ïtúIkã§5°—ùä¤AÒAc¾þüØ1;ÄßµœlâŽ?ÒT‹3þZ¾æ¹ ~åâñ¾&àNüÜñH~<㞨ø•g< øh4˜Žž«¦€|LÅÞ$ïþý[¾££ù{ óF^©e{_èõU9Í&H\_˜‡IÒ‚J,,h1rFÄÎ:©ÌW|w4™ ñA¸¿ð1|rN€Ýžlä³°Ž@ìà.ÇŒ¬sÁ/Æ©*`ž.(hÁ]´I%B:Å̳xÞÞ–¿ýø¯mìy„Ÿr9á·#!œEdQä¤È¢|8Ö² akOÆö>ˆÝÈ&äûZ<@üÄkõ0Ì/ÌjäG1œ\Šåsçió•¢BÂf X–ÎT‚*> ›8sX œ˜ô!:–~$ðn‰èÙ#u›$\}HíØjSOmÆ_¨ºuŽ…\Yü.aQ$/1iä†2”¤T¤LôݺmåJÄ—C·Ñˆð™¤ƒÌ•—ª £“øŒèÜßkz¼ñ`SûŽèCíÝCÒÙÆb ì* ûò\öL^ËêñÑ&NÝüÿYjlVPK„©ÉGP½{ ÷ºªÛø~W?æNö—ø€®3Üm“¶¤çÎåLÇ{¢y®¢â4ºmúßÒ¾oDžè& Cš‰oi¹Hý)c· rþŸ¶CC—÷Äê.’ˆW ‹˜^(mÑíˆ3'q¹s«¡-¼xö®õäþލ#(öNûγ ~j?é÷|O¼¿Ðè|VÏLø—“@ÿÚ‹,}·œÂ ‰•KPÍ'èUQêÂ-.Äøº"%ÀÏî`\Í 'É5ª‰jrÄv›p®T‰Ü©Xæ«”æÄÿÅóiðeѧ¯ì“,ˆC¯ó„û'Ê5©–-•墚Hh˜/pN’XÃV<$ h r*dÁ&§#!*Å ˜£0všË+¨[п÷ºqJºc@m®˜ Öê“U±|ü؈DGÁµxîªÐ9¬Q‹xÌÀ<ޗ࿦û žç xeüÖxL‰ï:ð€¨x½òÏЯTæëñ–‘;Ûl¹xÍo÷5™¡v‚Ž…8º]²EþöÜ­) Ÿ?ô…—Ôj™`pIâX")Í!„¤ƒŒÞò °œ^¿hýã9¿ÝKD;®ÅHèxŠ‘°§“Ò¶òµm˜“n6œ%â¹@ÇÂmPøñapsxy RñÐû‚‚#(jT­¹N?ý«ñda÷…üÝ$b9ëBszE—w\NQÚùTž°nã+Zª Ù7åjYøÇØ8šxÄ5‘Ü}üÇáh÷\ü½î€²ÀœŽˆ«”"fɱ{…êá754kÖÊñðEø#(“¼W¸áu2§Jl¾âÝ)pLx{ËGĤ“pË„'y£$m–£—|:h}y.f[îïïTð¯lî& ÚÌ£ùdÌ}K úuk &l! +!?—ì]´k5p“ˆƒ"ÿ/?:g sá1ÛÔEh\†Ó²Ë(¬[Ï|¦ƒ cZ!ß­ö´YK/9ÇfEl³Íáž°ùö‡D™ïI?ôò 2¡Î&­ Ñg9K걘ƒù3ÝòGï>)§ˆŠVÍwÀ¼¯€!\i¾–3"ö‚àb< ¤-$á†mbmêžßÕ/a×uÁ•Jp[…{ǹ?D„ÍíPKP¿@’úOÜ4ÇóT¼/ãHóTL«wŸzU4D1òêš–”›Ž¦ãé˜fj{ÈÃ'Sp9Væ3¤9Q”<û¥Ågm‹¯E8¯¹`-)µmÌRvˆm”=) ÛbÉǦ6(ºøæ·.L¨Ð¸ÒÌ<ª›<˨ϪûXÄ„  VŠ>š·v0•äÕUÙï=Âc¶Û! p°¹p9ËEQ¢—f´Ø t›ñ’žÙLYøŽ>^ÈJ² ´Eþ0_Û†Ãù¥BÂYÅs·Å7;ºIèÒ÷Ð~¿Û™Ù.؃(¶³ïâôZh±´GÙÚ\z"ÍO1ÊØ»€+ú\˜r“]u“ͤ=äš|èG6Ôr·¤d!âÛŒ©æÛÇ ¬A"¤Ü/Ê• ãZö§î Ùƒ´ Ì¾ÖŒÿõ`s-±•ç>0³(ì|_ޱ¿Ú ê àŠ(s°$JÕè¼x@)Ç×"E çÀØž±-Cbqîï ®îLÒ(Èa–oM‡ìŒíBÕ±ÛÿVl.=¢”›ƒ:v=’B©k¹ü‘¤Úû!k„-•c,4§, £¢;&eQÒàLòx—Q ÓŶs>h6œyâ¤ËÎm‰ŽÀv:IÄ(•x¤«ìâÛ†‰A)F6Ù™‚3ÝnµÐbŽh:žþìÝj{È«…ÄiÄŸÓqì×"# ›˜NNʱXRbË©ÐØÀ¾2~ƒ6lqÛÁ¼¼ÅFS!b B‹™±Å¸ð'ëXV›£Dô7ÝIIÙð¥Hñ®ùDP9n`³WzÉä>ÃÝJDiAþ™Ð?òTœF¿Óaå$é cÝÃZNÁµ²â^­¶ »y­—t\CÙ.‘ Z›Š •§yïÌì¥_²‰Q°7,Q6á勤?i¸xôëX𠣡Ž@ÜK1Rþ$ÝDv^µyhÒs·eµ9JÄHä^K åÅó¶‹EÜKøe9éÓxl=’òLèØ}-î="fÏYÚ¢„ƒÅ±– ÷ŠÜ¶4OÇô1£»~„˜m„°ŒI+k-GS!¢jj¹Ú†ùØ¥_0I-b*‡m¢øbõ ˜òXŒ CùHˆ[Ø‚0Å £™rF”r ²æDjƒl²¸Þ}g6Í‹,÷ûrÃáAáºì,‹è§TŠŽÐ¨OIJÅÔP°ñ˜¨mç" |ye+–cñÐH:Èì6ŽA²4ÚGvÖ±Û£ÊJþ)”ÊZ UBò_pæî®mÃá,q–pö‚†/¼&ää9ß¾ê¹'²m˜“>M÷‚Kr Àù€Rl±´…¾gÐ0iá¬â3MÙËuœÛYÇn[µ’Ú"“@NµÊa äúô“>DÇCgoL´üÿ™~=|ìc¡dsi›Ô|º™ðò¦#5–< µ ön‰l¦¶À¿½K·õ´*&ÆBf×EUòX&'³4Ýû6V ]HûHo'|ÕCÄÜPG`9„Ȭ‘VÙ#Äb M6õ0õä½ÅÚ6ÌIiwwŽ«UHü×"ªŠ³E¼[¤qwÇU~xmç¨ ïr.Àž2'–Êò¹¼‚Y¦¥ãê|Ö6I ¼"ÆûEü%¢´M0TìÐô.dÎ 3Q™£ejìZËnyÊÒÿ·±µÆýk˜<%' —rÙû97\}r¡«<¤ì­`ªhµìœ”ö‘·:7ö©Ä»I°MÈ$\Ï.Ö H­Õ«’ yî_Ôžm® ÇÚr#]RÂ>¹Ù¯æzÖ»¥‰5â«${ßÝÍÞ:¾óéç8iZ½„\ršK[U•¶1/So]WæÔÚòS—È鄵 ´Ú³ÙG£ÜG¡³ÊsÙ®çÚÓs‘¢Öòû):¨1ªöÂ)€RÙ7u¸peùÍ–› 1²Þ9)í#ä}NL"6‡ÜÍi®XK§DÔÔùÃA®^¯Š»Õã·ÌÛô–S™±_ˆÞúÝ®»Í½½”ŸéHÝdR›Qçë×}å¼äüo¥’ŠA1uî €IHÈï‚á™pwÄ¿ÞÌ‘.¿ÁD>)hVÒ'ivùF{ÀÞ·B&Øs›QŠVÛ”»' òÒ”u–ˆ:œ°-ƒ›C¶’¤±Ï8ËIÒAFSa-gð)Ï:£B¶ˆr’tÑ›nE>¾·SUvF}ú–€ŠÊWK&N¥‹(-MLlë›0fLv>)Ïbfx¸1SÛ’|lˆ++j¶ewÒ…ÞÒ·EL‡ ùÖÔv»/7 ’˜t“ÜmYg…±®qV¡ÙÓò±» §xËÈfÊÂÞw+å$é sœ ¿$êØd/Æ=¼­('IGð«J Î%s·%D¬M kâIó4ÉOå`j@·ûø áexÍï=oª»´±™4 ?/†ˆ:(ØBc6ì/ øž¯Éƒz4™áœïÿù—4¯Â_5Cj»K.âX5GËÇ¢>«_?#åsAÒ u¸ðñ´çÒnlÒ(„K!r> üv9ù«—Ìüý•šÓqÏ¥·¨—4ã$Â)úa¥½d’FÌékçû)÷µ¬-2!Îc†¢cÓZ(¾ãÐ?B©mç¼7²®»˜ð¥\­R²ÀXï\ þÆÃ×È6±KDAìm.š®Tl¡1ÿ‘€X9½ñ©0˜Ð‚0e u¸ 7bÒ‡lÅ>²!ó<æ 1Mü㎔è©QZb9V_®ìaà+pE›ØÎ>àø³ رk;g’1é"´LnÛ0³zYb¤ÚVšÍ ¢c·…Ø¡ø¼1g“§"¾Úwëj’,Èw)æØ! ;HùAG ¶ð’愉IwicY¿~„ÈöñäèÛùþÂÓßÈJÄ=yÚ +lô®õtó}„b‹ëÝ~ç˜4šQ| i˜'Ïx/ÍCC;äA¶ uÏ£5W½ W1½Ž5 †ßWLÅQ˜tÉG&Ú:OCóAг>ÛœIs‚ÉU"â D‹Mˆ¹Jm#DÎE-k½0,ݯ½©*‹ËAn,bÌú(I7ý¥¶`Yp’t±±ÂiÆxq žúžAµÝ%Ná4OÇ VÛšækFÓñôU;ãtL¼=}ž*$œe`//‹þ³@uBEI7n^¤ù[ÅÙ²jâPÌóÌÄÆ#ûÙ†jµAõëxªî M(rnÜ&òšÞ·'Áâó\Ž•f²9`³‚¸I㩲Áù¾&ã \ÍÎãŠü‰üŠM‰Žg¸‰ (HGðGHØÒÓ,"†ãìß‚RU‚Ÿ pUº¬’ʆI—`w\ö‘ uP¶.ªwAkùXÚH9)E¹‚~›6ÛVèvÊ6#ï|QÎ͸Š-•WÞ¸‡¦¶]$°%ä]jÏýáw¨Dij ]Ð+¨æ3èJ$Cnô]qÚwL[z+¾ýÍâ7F; ­Í—¯RÖ,ø[¤€üzU¼íÁ¼šŠ!â¿Ðá1yÀûõF²Ô.€ïd/ÜçkÏEP£[}ax¿Ò—‡[S#š±Áhµ=dL;lƆ‹32+›œ9Ì#–S›I{¦õW4qJKÇ ë†¹Ídç¶I®)O{6‚“+í#»ý›¶&GüÆ,¸‰”ƒ—ÐþP|Güœm±I ºã 59çÄ´O ˆÿ²Rï¾LW!••­8n•W;"†\laËw§Œ@9•Ü‚°w/d‰µxFÉé¹06 Ývoc³mYm$œÝ¼B>S1'‰XŽ G ËÅÆ¤dW*ÿÊmÐtã½\sÀìé ³ðënI‰&ÁÜ×iQ’®ã™ÁT?¶'>lß ïÖŽ+î¹sŽ…X%ã=<¸9`@kªÛ=—3c‰qStPkËO]"'‰E8x˜,jAðBÖ܆õt®^±X™`{ÚB¬…µ·±› ж6Ù_M¯–Š‘Mȳڇ˼KÊp3Yp:±™|ØÌYÅѧ3;©f¼q I‡ó߈~FUÙymÌz$ЮˆiÖ¥ª½.åtQ9„l Mˆ¹JmÁ²(w \ƒ¹Ë¹Ã ‘sCì¶Ô¶›ƒìuð.J*I)8iqûi2!§æpl‹k±I‰Bj /)†7¯ûÈ©r¿(1U7?@»©#+Ï\†ùrÁ´×BJêl~)LYåŒÒäóµ9JD$^ ¯8£:iD_E*‹ÄÞ.çÃZ&ìU#$"Ÿµ„4ÜîæÏŸ¡ry‘¶ cq>6Lº¤Þ}gŒÖÝVœ””mlòo¡è £!7cuC) ‹51!Ý"Ê„sHp-1Yx“øJiÅLuPÐÀ ¸•åãV8%´­þmy£TlJT¡~ðYáUç«tWÝè¾P£Þ-Ù=÷7Z±ML(ìštOÔö´õ¿æâ,/ôëŒ#žB4 DvNõSÈ#c2ÜØÑÁJñ1†úlá#»àÐd¢6o¨WOö¾@ÚBôJã8·„ŽÝ÷ÅþÈb<®Ç™ýÿ©ÌdB>“W«ùœ€÷aâXh¤œ”¢Q$÷k‘‘òlQ²Þ¤ƒ³øgóÏ»9þéa6ç>?¨‹ÐXr‘Iï¤G6—•]ÕÕ˜Àw;áó”Ïœ"j@qð;‰nh ä“¥ì¥ú7—Ýà—üì=ˆI"“KPý~;ä/¹!µ]hBïæË¯4ƒøÊ£`Lq}µt]à9ÀähÒÆ +ø(ñ²ö-ÆÞj7i >´: Ê{ÉÊaóG×#hc3%Ç‘Bµ±«n&60;)—ˆr’t,nA¶€Kíæñ‘reœ?Á8¿#S¾rÙ¸\²%K¨’•Üè$ê sdqú$'}šú‡M׿˜W…ؘw9lZ''}šú'í¬›Èά²Nµôl™º•¼Û†I70?Oƒcõ¸]ƒ[¾xpYUÐëo¼¤"æ¡#¢HÁK:ðÍhIñ—ŸƒëÝ]²‰‰îê ²M´¤Q½7z\ €0Älƒ†÷Dšî‹ÐX¨—º_oɱ"vöà²Òr’tѬ[fU ˜˜tÉggÙP%Û’Ú&©fóâžùë]âÚ!ÔFÐGݱøîØFY๼füÆØŸT!Ž…FÒÈJÄbA øÞéÈÖÜ;Z ‘»íŒÝÎ&`t@ÖáY.çÒû+'%e%›Þ×$¿Ä%çŠkz¤ö=çÍŸª}_»`롸y4ù.âé³äÓCÒ:ó± é†:БÖï··wå"*¹˜(þ´¸¡Ô÷»jž¥¾ñ +b’™Ñ”Ë$<œ~.þoôJd¼oBÛ|}çâû÷ þ¨iÐÝr£Öã¿õ»TÍ¢© Ô¿n95¨EÄGÆQNÄm ¢ŽœåœksêžÊ©8”ô3]!ÄnéœkØ6KÃ1G Ã<þt>/¢z*¯ ‘“>¬l†³ãSul‰lÓŽŒ+X¢ú$P£"åYæ?dk‚ë& Fו0¶nBG†äÜÒÕ·#$>‘þ¨uŽx?š›8“ß¹£e›ŒÇîè_¹†|–—»ƒb Zþ"§—€r-›$Þ4w þ&:Z’ˆgdÞÀ6–I쬶ÈÃDÒÂ[Èɺ1~SdÁl¹à&ÏÁ†Yϵ8Þ‰òXÒÄã:Rä?óƱԎ2âHÍé×ÍÑ|žª‰ª•GÀ-†Öµ¢Úµ:þëÖÁ,sâÝlAà×y ãÅMÙÓæÆÇXX"ËB!`®e“ЩŸäð~Aö’7mÂêgÿ¤æ­EÎu³û‚úÍ> -ÿíB šR>ø{‚p¦(6o$¤‘yÛû°õ†½i7›¶®˜<@dõ|{wâQ÷ÑYR\ ¤¢„¤«îÖœôßÈE6ŠŠÞ‘xÔ¨ >/B¿^óš7ëu¶ºWæÔf0ŸYÚx€% {ÞÈP¬GNB޾÷Ä›æ~“ õIlAPÏW}¦xQ‘û²{h\=ëåÁ´38ÊôrR&zTŒ›~D Š|B|-`¹KL¼)Xm.åZ3¿}˜ë2ÐÇ €c¡€ƒó¸_Aþ!°.”™Q½-×Ä£,cjN9ñÂZöká½p]mþV‘žŽ¿òá,·§[§E>Ä+w–±X§ æ­DwpzKÇXXd¡Îò&Hm`\(P1¤…aiAsÊåÐ{¹I£.6¨ °."¬ƒçãÛíæÔ"Ï‹Éb3N² ¯'¹P༕ÔWåü®vŒ¾ æ$u}]hVKˆYÓÎZ†z­$!0êåW"/óµ D"3J„6pì wº ~ªÇŒ|fd|dð¹éž¥ 4l»ÌtùM› «õ’‰jµ” ÈÎB3:#󈦽ÁxžçØî¢"0Ç|¢œk ò&HmÎåAÀyìabrÛK%(“ó! jàêøT ‰¡8pHøY—àoÚ$´Å‘BÂú‚ ´6ð|Q ¿¹¬þýjI¼vðþê6€¡®©©à;"A}~1#Ÿùì„?B»cF1óÙóÛZ‘,ÈrŸ.;æ’x³6¦²…ô §¶ ËX¼HÈH—|¢xÔÓ˹¬4šÛ ò&HE5¢EÍ)—‡¡6òp© dÉ sºV4ÑÕ0!ZÔœÂèa¿ÿùMŽwâ€<–´Ä` x*çu'Æ[@*w–áhëaÈȇµÈ…ÊAÀ±PéŸcS‹%¹_»Ê¦2bS½– <`‹:!pÈKÀœx7Ý%d8¶ eöؘAY„omnÆ|V° = Üòqˆy4!oڄǦ{ËÚœiÁ ⎠©9Ù¹kÒÅ‹£gc>öy_“:id¿Rëܶ’“qÏoCý©4ieèñ¯Ñì-`â(BÁÐ^€Àòá¾ft7¶-YøJå ˜ŒÚ–ûµ™ì†{hõ̪ñ‘ôp%ØGñ›Üò;³3×ã[?Ø3½BŠ€ãPBg@=8P6C|¹δÉ쉉5÷Nj‰œ¶-Ê\0`ûÈS¾Gækù49éKóÄ «bÅhß+XâÍïþ¡<>{ï¾÷0»Ô¯m“Ìc÷ÿUGy?Zž¯ª‘’\Ùûˆ &‰ ÜGâqçþ\™w>Éä—Ø£ŠT·ù'nL‡š\;Öc-¼=º{Ðîbúfv(§ÀõýF»ÍI¨%v[Ó½Rûë&<À¤&¹è²’Vw¯Ô3±>Üè9¦¿+'üR²¥ Ô?0¥§;õ€Y"§ Ö13kÕŸßEæ°öÄ®Ú øî.w‘Ä›Ìþà<‚î…ÕØ¿5æJS–e¬ÄUKÿ\qOÉʼ+ûÛšžËZf”€‘¶k̤Þóˆ¶Õ 7øVãý“Ñg!âYÔÅÁîS±„Î ùòÇãá>2w‡–Glþ¦È¡ä¢ÐëJß|GA3ø(@\¯º¸T¯ðNúm~&«®‡Ä làØ„Z†K}sÔGeP{§ÉtÄD¿ÒA޵‰áÏ>õÉùëÖZ?ÄAß´ ¨Ýý‘¨-rŽýø[¯ða"´€‘ ‡ùÉCfO‚‡3-ÐsÂ¥Mªìq}gÎÅfªRê®AC=wÝ0™ª'AâÝr¿>ò‘ø‡öèµì–xw ÔÇ ,©AÖÅ­¼¿ûK¿'ΛÜ×”+ù#\P»I!!(t"¶. < {äEåÔèßÔšÒÉ¢fœè4¶sëþ²GõŸ4u‘Þ' m>w9Û}ìú˜“I{jõÕsŸhm«gå¤r,’ d‰Ú4†Ëåþ‡hÆY¦ß}?(`ù°M6a/ãt¥¦¿t®¦»^eÃm%,Q”é‹:Y`â%o ÈÃ¥¶Iú®,p’ÇÍA¯R“¬û` È1ïçÐuìW|Á<`L‘äæ«% :ÃÕº¹ì.cs¼$‹9ÚœGÔZ}ì}äÐçx!:orÐ[°‹®:x€Q¥±V.C» Àz<àc±57y ˆú¾f †âHl™­?,\à¶„ð÷:¤ædÿ†bža¶ ïsÙg‚qÅ#‹ °9Ù L`;$pÔ+€[­NÀk¡ ‹9ú¥/Ïÿ¶@ç u”)Y<Í(ô ²C9(`¯=–͇x\=ٿlj—ôká›ò€èzºêud\mLžÁ âÖ.Ü´—ædÊ´¸<ò‚Žß‰ ÈbN Ê]‚ÈòA¬óz¤"NBNs!Á‰7Ck¿Ú otRÛÄoò¨Oßë?ºÒOJ‰@'‡óœ 8ñfm¸bl`_ÝW¹Ùÿ ­w~‚sÀ#p‰¼—TÎÆòއ†›{*âH Nör¿ß@™×0q”æ-p÷ɲ7ĠἺ9’OjÊm¾;\þûJ?Û“5AºÕZõ×»\Ÿ3“ËÂŽPÿÔFߺI_L _ž9륑h†,ÍÂÐø¬w'¥\3ö§GJL½+\)Ÿ õ­Ú(ý™Žo£úš õMJÚ ë&ÑHe†fáJ3ñ¤tÒG]LUŸ5ç¯ôœ`^y8­v¶olE+/3}[ãßDç„ÚDAë_ºùÒ­&ŠnŽ4cæ1£w[Z­¢Ð¿sQ”yB&Úä¥j~ÞUÿC)'Kén)iƒFZ£=T2i¸ç­?:|§¦A4s?"º™òËý™´W“Næ•tóŤñ ɇ•™É_É¢^•¯¤ßSžô¶¢·µÉƒ4òÜO2¨Gcû³‰g/ ó ¼‰é5éLm¡%©È雚a͗аa¨?¨"µ-ð¤¤\&P²\ËUŒjq°“áE?‹CÏTT²'IzëT2à|æ2ù²V—ª®Âý'ÿæóçE’æõoß͸©8Ù‚S›[ÿLE%×sYjúºs¿–å4«ËŒýJÅAh’Ô¢˜ïõL=ñO/O’;i¦ö¬ÓÉöV†1Ó„W–ItÎÐ4ð\r[ˆüSÓ ;uï¬ÞÝ#¯ŒŸl[Ñ ûc¿c÷ë×ä’Úë’)uÿÞ•ÒýxÚ|¸þ6ªœÚŒã"Þ{FBw󕈳L¤s†f!uƒ¯*R/“Uü¤tÌÝkèT&õ§Æw##¦ô˰ÔNÀ5}VƹÕêÕ{>õ Ñòxx6¶+“…£Õß³ÈûÒþ›n’néȯ,I(š®•ú•“á€_eÂ0ÊÏ™Þ~ÖeBI³,—#¿²wŸÙîWL«g¢û2¼YùŸtH5æô(9îâÂ9<Œ³Ð¢ç¢ìÅõ1&]¹×fX… õK¯œSà.zwÈpÌ:'ð$r¿ ¡§!dØ2ImQÖ}¾Õ>×¶ö+YBRÏÝ™ZåÉÿÔ9j§¹ý]ë ¢ÉvJõñÓ©î¡PS·†ÙóÍÉ“Qó˜ïËPÈ!ײðMy¸Ô6±’X©ÏÔ©)ë°C7?/Ž$õá@t*?+¨-´]¹_E£]Ü£Qòê-?ž²5³:ööÿ_·mühΜ*†÷ñ´¬X¨µµa äû3 ÿ’un ŽÚ0}ïoõK£u„Mm‘Yúõíèb9Û‡EçÈÀ@–*Ž¡Jå «3üñ§u‘p~fþ¥á‰Âð¶Ÿî"цÌê¯ëÀžv7ÚŒW˜åÔK_Gë§®y0àZBÅíÔ+àÐÞ~›I‡m]èQàÌÙØ/ùh¿QYHPñ¥SflÓö~;^ãe„›E{˜¯1 1`]¶Ç—OÙ†sÔLJ=±§ùF5ÞQw®`­¶¶ùÂhQ!ɾc§- *Élzžk´%{yë/ú'–æŠEŒ.{kbôݺ‘U9¾]ª ¨.‹Ä#PÝ•t·Kœ|†èažŠíMÕ ½m¡Pyµn‹Z¨kÐ/Ztw@[¨M'ú•ê'’øšø†1ê™nÈ,XÒ‘¬bQ0"ßF¿´*Â¥Š›¶,è®æ„ŽìЭR¿M¿¡¢f4AÀIî‰ÿ` ÏdÅ1Œ žAÑ;I ê¾j´c'#fì°`5®Øv‹‚i(0ÂSá€/¯Û`±z¨(ºjííƒ|±Õ¸z»'ø0~Õ Ø¼[³Š·vuÏu¾Ù U^×0‰cÆ&¾»¢½âÌÎÞ x^Ú“î «¹Ùñ˜€Ýñ8¥ãfWº1Ñ:{2þòævU!èƒ š3Œd«ú`'À™­[Ö¸l!<1ëÓ^#úBÿÕÈ—„cÉ™üïÌ,Þƒ†övXB·tÕݮàuû¦§VÛ+¯»üÁ3ÊO†!T’oEë~ØSƒ/`ÃXûXÇîpb jñŠþ4+š÷Œ=hbã·m>­ôüÁ'5A†ã¡‰;êT¿vhÈŽ» UãºaêMwTÅë0ìþáå’ÝRÕ2`…dÝ'Tm^ukÕ½eÝÍ+˜V4—WD‚º Ž¿/\œÆ±Ú?VÖªÏàÔK}…~…Øÿ¾t»É£Aß”ÌÑ¥kÐלv‹ãeQ¬¾î€AQi”ŽßI·âw”ƧƗæu!(ÊÈô¹|J~4ú½4¥ˆ‰TŒ;T1º†F :šñ?¹QóØ-õ@f‡Þo#ª¿†Sß £ƒH`‡ñR*ð…ía±CÑ!R¦H^ãåÉ­m»#‚‡«[$wF¬ë…LàNP#uyãhÔ pŽ-ŠÚ(Œ½ •pbÊ¡IèT7G ˜…'aAç!­Ã=)–E<”ÛA¨¶‰Ã‹/F‡Cã“7#n­}£áÞ'êÏÕF×øš€=0öÓJÅz䀋A’±O´ƒ*©lýäã,Âpsjý0Ú—f^-–åäë@ë|¼"`µêf€c´§(Øû [ÝÛ‰Þô¤:•/ƒÖDaðWP//ÇÖ,yÙØ£à„ÍèAP)Ò¥úѸ¦kòì†=Útа䉑ô„`ÄÍj¤šÆo`¦‘è-t/kº` ¶¦ViÐPÞúd?R¤5F«Á6eˆ¨GLH'à•ùž6I0isŒ)¬õ#ø ƒê$?fíÿp¥ ÊËa‹H‚ŽýW‰d*n'lA|;Xz¤'lAÔj`›ãR}yý‚€³DÄ-hÅÛÈ¿Õ)êp¢êØ„†Óu8üƒíƒºÛ ‡ôVÅÌÏâNß0±¿êe.wì&z¦”‰T´‹³ij”vÞJÒƒ´äÔIë‘'Ð8’åžÌ‰:Ž.#@0)ëú½‘aÔêÊÀ«a_Æ‘úÆÉ-k]=ÒœDC‘{JÞs” Lá;Ù–:lâÒ[»"›ÁáQ©Ù`@¥aÓG¿6ìÆhဪpéM¼‰÷DIâ%;öŠPƒ.†¾2AýP¹ÜÒ0±eÏñE¾Ã† x’d2†¤GñЄ‘awMøöó fX$"<'×™Æ-I‡À–êT÷ùžÒê‚ÀBCÇ>E® §¼Wä{‘ua²`Ͷž¤G“[_êt*h¼Ó l4BÚ}Ü“ÓÞ¸2ßi¾Øé4ŽÅb³ä—DÓ‹pælGcûÒµ`ìש÷‡Ê§ðÿü[‹ßÝF33}ßÒÖÆ¶s¦½ñÓ¼®nŠÜ m_&Ü€Ñ2ûŒuƒÄë˜,NqÛJc¢nW»ðoØ,Þæ  }÷DÁI±òíñhÑY¿ß$Kæ½EÚ?ïÅ[ÿú­0,ç¼EÔ+kA‘íýv´qLc ÌÚu7Q9ŒÑ1=´Õ$àà7&ñ¼´Ì#FË´MÔÎ[7<%"nI|'ë<ÂzÐóâ@_·TÆ•×ö6 œmZ]†L{ã‚Ù ií>Wª{v@±°£EªâÐ5¢MÅÀ®®šèïFžÐ0☃¿<¼*P5ChA4Š:vMàŽšÂaúËÂ?¨Oà;P0i›HuOnÕ‡ƒs§µ~L¾vàUr^t¢/¢eš^ÑCƒ§½±.s¦ŠÁ'nWµ3Ï œtRž&Ø[ÅÔN¹îs]ªˆØí=Ö!³Þl;¢S†º ‰m²«4 ¬¿ÚËô XQÝì:± ëu(œpkª åÖxc· ‚íg&oÚÀ2ºYŒ˜Û¸Œõ Eô„ÅF›ØêÞ:y@• v¾<Ž,(™/™­˜éñ2¾øA5Ñ«xñmT“ׂŠÚ!ˆh7`JÒZ†Ã’3Õ¬«Åÿ8ŽíÆT­XÝ5ô¢ãá7ÁÄLûÖúáÜ:EyÅÁîW]Ó¯Ãý²Æ5VÞJKî«\ÎDÔëy¶Áƒ³¤iQÊGé5*zõf(Î7󭨆T¯æŸÀ$¨ð÷eñM­ÿ@Ñ+.£Pm¢«¼&taÔ¨åVi½=´k„Ñ*°¡h(6…êú² úu™f£ý@¯HãˆDE)ž4ÏG¾“E±¿ÁIïÖS2aÔ¦/@wCË„÷ Tw'?U6» x’-TØÑ Âú7³†×°M?úIXôŽãAÃ@¨L^ï)5x:þtfMR‡¸åœ¨xž@rOfÇqx­t(÷DI¢b¼cµµYK¼tWÄ>‘Ê‚À)C’ÿÁàèÏneé‹PY%ºJåµ¥õæ%  ’nIæS²×þ`Ï8û9Abýw™F¸S¹“G¢@ýÛdéùKÆšÃç{ѵˆÊ‡èX-fÛá€ITw¨ÁÃCi':¶9ÖãgëyZùêÕõ…6“`Y™Ê´äëýOƒIT‚¼»¸68ü刊oôK¡Ézxä“lóA¶¾Ô›cÝZO¼”ÇÏ1? |YD¨š…¡m*ÄüçƒB˜W¬¢pwßJª?ÕÌØÃN‘àÛ ê½J>ÝÃfæ‚7„ÑGHæ•ïx®«a÷°µÃÉ~÷W¡]ˆaÇOÕçSy û;ö4ñÿå[?ŒênÑï€3±ÓQã7Fä;(>…WÈ,%Z›ºAƒ‡½Éž]O*Á«ô)¯V·´¼·Ê¼1•@»¿Él#8_ö$*ìX©>±Sëfç«gÑÉxu`—Š×ÑNüu»_|´ë7M™Ùë>]®s™ƒ¼Z‡BÅ­8évêP^vI/¼ý›?þ-êy‡–é/:_±òh‰!ZùÅQ¨Uã#ö ·•ìIX÷ !F£·¦x=þÂâ¤÷®€ Úó‰}‚ãT!i–í(·Â -ûFð&·NŽ7+§?!1‰€U:]ÃÀoØ=yE|^¬‘½,nB˜ù[êjv­Êw&ºq…Z&‰ÁÕQ¡#³yâ jg‚ÃWí¥8ZG%Ÿ¶NCiX•fÕ¯>#ð$Á@Ü‚jà5”tAiÖÈ ;:‘ÞÒ ¤ïTÕ¨Ÿ¢€žkžôþhXøñ!~=S›sÓ iÏ­ÂaýÊæ“ƒ¾:ǨY«£Öÿ¥‰¿/ß8l²cåy fX NêœÏõUç‰Öà‚š(´@À¦kìq èFЭ€6Ý,tÈ$èô ÖÀ†YtäÕ±G¤q>[7j´Y¬`C'½=ÓqBê:—V ¼©Ÿô¤¡ãŽG»$:µÓZï%N°Tâæ(@ØN§o-7l-кò!Ö¡¸H40h¨•Dw‹«Wú¥)ßèßT=TÜ”üø¹ís,ü.Õ4I!ÁU?›2ÓÇ‚úyVíÎÐcí±Žïe4ÏWc†*K¢7(¯ôeµú’ïû…«ØÃ…˜±çŽýc-F¾1'SWÿX3(_iù8ÝLQÇmÑÜ2“{Df>÷Š·½Ä/=>LÓÖò°-fhï°/:Á~OE½”‘Z·äo’òšJYÂ0$¥}OnKs»ó= “ïÒD¦v(¸H-¯Õ¶„!ß­ÍÌõ|&oËš8N ½¦wÁ”k¤¼ î¿Ù¶hßqµ#Ë×"ا0Ðñ!ËÞœÏ,DãÖqK=¨«ÆÛ®)ª²&Z½Së†G…6ñ Èôx:Kdâ¿çôékY‡ç"$Th™hc¤Ü/½‰à7åßË×±Ù –EÆk2Ò¥Ogè Ÿ©Ž˜öÔ玧ë(§µ:ä÷ÎK~Ë ê˜öFnçznô|R¹XîÌì;ni_˜< LuÍ`ÝaÿbÇò¸ÑLåƒC#ÕŠ~ÁH×_'Æ1º S¨¦,ŸN]^S~ÖÎ~ÀÏLë2íx€ã¶$Ú÷¢ä´¥ûžæ:g†*¦ÉëãX2=›ÿ}ÑxmÞµù8©Õe˜íQé4^³|ûŸ$„ÿ‚}GÛC2WHlA3ÓŽãªT~«ˆ½ÐÀô“¡þVe>a43ù#J&ÅÆ-m,ÅO(’Ì å^û4$Yù³„ïÕlÓ+Ž‘Þ?‹ÇÀmuLþ5‘õ7mØi8í/Iký^ä;ùÊqr/¸Èq1,*“¯åla‡ÇƒW£VÓŽIZï4ÖÒkÇéÓè)É}Ãmš®‡ó}¼à)ÉÇa³"qŸM^8hD†6„•yÊ;Ùþ•©8‰Ký,ÿ—­sQs¶¡ðÃõI¬5ÂNm3Söé»I¶§í·ßêüG¾r C!ŸKÛ,ωsÔXSs)æ#BWÿ»Å—^ë‹HðÛ6áæ/4¯5:^¿ü§²Oef«`û…góE¢V‰³÷é;¯þw—ÿ¼Ò.yŸöüÌM©Ô•QqØŠŽfâg &n—¦¿ëÊ×,.Û{í·$žü=ù:i;|#ÏÔŠiez)/ž¯o®‹—/n½ÌDݎż®B;ÏÔ®ºXî“[[kÊë)™'·¶•¾ºG¦ùæ•O^Ê0“à.ù—I(÷éj¥uo‰'P‡å­ú§å‘)Òxš.ÛpW 1ÝH¨ìô+óõŸ±pMÔa>œ%ïÓâAÕ}õM:‡›ìÂ%^Ì>>.ŒÜ‡”ÓbîÉ™^+UJåß«Ue]|Q^\½Ó'·Fù—]gÅ™´ß‹MË"Ç ïð‚ŸO«Ju8¥¼ð½2/µ˜VN¿Œä}õ§+}p‘üÛðo—Ûx5%O§<9'®´vÓVŽu¾¯Ó,=ŽšÓÞ«]抷—/þžÌ´‹ûÄYôL5¼Â‡—ù®Çt¢KiÙ–“ŽÉbó•7ÁïÄ–%[¾ó¡r¢ÿÉÈ^s÷Õ–FºúX}3ÕyûŸL[ûøæa.ÕÉy;ƒ]qú6ÊþuQíþ)òšÐ{&¸®¦a>ÃËÇyÞS?’n’÷iÏå>mçÁL±ÈáÛê¶wÁ‘g&Šèêr&ixpéÌ~q]ŒÆÍù‘(õüíè÷ TöÕÏGÍÏÔGïÅTi¤Ó·xÐáÌôRéwªW¦>í÷·Ygÿ¿Iiÿ§í²÷Uy^ŒÓÕÉWNÃ\’ƒ)/,œû°ʦÑòá´$êgšòõµ˜¼ñtñ†gZP'o±û†“¾4Òx‘D"·YìO{PZÍWÿe$ïÓ3Õi$ó4åšÍ$ñdÞ³ç•I¹¾.‘ä÷`e¼“¶|f½StšLU‡ùÜëÔ;I^ÌùYLN‹‰³Í°|òïÄÕyZýÄ/ ðï„ïÑkêjÓ—í=M¥N;ŸK‚iuòæÅ•_îÚw>>NŸ˜ÏŒ,¥yÁ÷äú¼fyx|1{˜Rg«ûüP?îésIapu°èdÕ{šÖyÞŽì·Á;z²úR§©çÂu)9øäÅ”zOW.ìTa+Óê®¶¸ªëë  ×§;'¯—wã’ñâ·Åå†û½ÑÕÌ)ýW#Ü¿1}üîEyÛ‡Z›^>ø³úu¡êÕgãkŸXóÊœ†»?üM¢ וïi4.eμðΔ·5QÎaäU÷#ü3y¾}TQù/¯|O×9ø‡v®Ó¨N®g?¦ûæÁ,ûñËôߎÓð³#ú‹%ïÓæ4—i†-5-ü^y™y•X¦Ñök\TÄHø¼9UK5­ønúÊs*õý*ú>)~¸|”Ã5¦>XÒÈÿPMƒËh>?LÄ0àí õ˜LÜ)wƒ QvI¦8Š;ÖPnͱ‡r”JÞ%»prÐhÖºloÿ᪴-W[PïÅ`%º­¹‡²ÁǤSÐË"m;UQ§v|lIdj}G5¥ü|´\\c—äZM}©k·øªœŒðI!mÞÁ±`pŸHW×FyR½'cS»‹ôTq^«ŒÝÇàÒÎÁzœí$C±uysPžÅcMD§¯ÀžÙ3µvtSMFDýEØžÿÊäJ9Ê%»Ð Lt”’õv¨ØÐROÓwá]ÕEÙ >KҹÅ]õvÀ$€$ ]û©ã¿qÓÈ_W ø6´¾ ø*o”5Všô úfþØ<-&F%ïPe{‡6ƒ7CŸ ÿx´ÿo¾¾:mäõÊd‚‰}¸ ÊA]°loÓC®kð_ÙpULŠ`®í`Ó·d¨Ê'ôãE×ö¶N:‰BqϨäýB‡?Ì z0¡èFÀî‚Ùü›Ôâ.°òûö›É`k?°TÔ6žoû*™Qk+ç+”ÛHá³l“HW–~¯V§›uPÀÒËl%!>ù²qE*P6pº³è‹ÏRIÁŸ’¼róÇâvxü§üÄTöG¤.þ2»•Âå›)иܱ ©Å¼¨etú¹žhG·?Ïg‹´»åjŠVz?(\!î|2þºJ/„§P½ƒPϸ†z¡äÝÀ¼ÀLÝÉå(Êån*oKœ”MEÐ$y]œŽ‚°¤±Ayž9_iÛ"‰Ø jlo‹ÏNÿÉW%É rZ Ú©üx½¨²–r Å3 ÆqöšŸ#¬ùÀÝàŸôc šZ ú¡Å£¥ú 'e¯—Y >¥´÷¥êxR6²vå[8gôšÒ ÙÍiž“ç¼¢Á_¬Z~Ü(åÈcÃâFÙɘ´›<¨³cÔl’8°Œ&]NÏâ˜üŠ­ä¯nQôvÀ ê ,xN2‡k«›ŸÕp7פ¨!v„²)§P Æd3g™X={Ìh‘d;îgÁd‡ÛÏ’»t†ÉˆoèÓ^õzôÍ¿˜;È6ˉ@Mð¢óu)¯FžáÎR!Ø‘ž³Sb§L^KC½n± Wƒ=¹B?9¹b 9W×nŠSä}€Þ†%‡ffC”dÚйƒ6K$R Ý’UÞN'eƒjÒFâ‡nl˜,ÏÃv—\5To§ì­{4ìl°™ø×ÝÀecå_m «Ô¤-æ\¸¯}%I÷yE“xèÌžË)ÛbîÉ-_U]™ëê¼Úü–êêt-m}šÈŸ¤Ï„†û7>â|rcÓ±Fxõ„“AÙÞ{(W#kSùÚP§Jðƒ@W •Ì@8Jp3nãPúHh6U÷Ò,¥toŠWœ8o»VDÞ“cu~ÃïT4·Ø‹\¡Ò N¤A%Uûv¸pnAlñëR€Ÿ‡JÞƒ³Au!uàç/@õjÎ’¼ßp noÉNØ­{¼ÙÑW¹ÿ¬):—Ì>?îVÙ&c½á3W,É@Eù7u#>ïG!Ü»gVô·ßîôvÀ–VÆ1Õ;hT*OüAÀ`P¢Å PJ7¸ê‘k¨üaÇ;´F#ÅÔË[9䉱?'+¸Oîá?7WHÌè.ÙEZwÂ|þã1¹èíK÷QЙÉû)ªàÛâFÝÀß¿0!ì‡K‡¾-r5EÏtí¸GÖäDÄ·YŒ6z³Óõ1àz8)ÕKº!`@ N’è/#GLÉØwYp£Í›áÍ è†äC«A‡4vÁˆ†Õô ·gb¬vC¬%®í…`óËæšyÀç(íùs>ËP:ð wÕÁ% XïÁÒÎ…ûÊc¨o ÷@Ì×tÏÇ/¹«¡¸\â\¦`¼›1îåßc2}ƒäßW% âè7Œ¢UÉÿe÷iîs—¿ŠùUñ .êáÚ¥Ûtý6ð¥Ü$OǸ½=@¾WÄ„Ì&rh¨¸Vé¡B¨·Óø£êœ•ÐO/î.ämÂ)z»°³%æÒY^j¶¢›:*ĦK™+¾Öû ×§“tfãO,cd É"i¨´sb7ŒZ#! 0÷Ay¸³T6j'eŒù†÷ÈÕG_P“ÄNýúú2¼!jÑÛœˆñc‘v6àÊ)SEÙHB1cÇ}€Þ†ÏéOô¬Ic“ÃE£Xêî++.( éb6ãήRò$içjº›Réäë|ƒ^¤žËÏÛ–— ž'òC50³iuq)4“ÅΡ)@o&étU±º ]PrD gMÝai»´Í¤;à¤Q?§Áÿ0㯘|)…vž”£k{ÖÙ?)eùã„7ñ€ì‰v:ü™]iÔ§ Dåà>¸\mð jE];¨N¾ðÊã½È3¿$[nìê¡­YY³D'3Ôr¥jó‹nJ¶…ý&U‡Ö dŠX]¤u'åz;ââ/°B”[ø_ÑçX&/„ílÀÕTòn  eÕëÄJêÚy€ÞR²!^4†¥1Àç…m"ûsV 3{òjH½-rå„Þ®ÊÐBõîŒM:/ÙïÇ]¥Ãá‚ÖôQ†)ÃÏjþp)$°Å—€bED]ÌÚ¦xbiOïîÄU6Õ <¾5”L: •s07,í\¸¯,Ûo'”'Ú´ý¬1«0ERpçARòäï™/uÁè1ŠãYŒ‹“Åß߆tµ­/î^z»Ò{òXše¼EÚÙ€«©äÝ@½A7¤•ª#ƒJÎHfR“,A~"á+Ä“I‡ì좘°š"á ÷@LF*Û¥xß¶:+Š'Øýãat @ÒøC“;»Æ„廌ҷEåÐZJw¶ÚER(.î˜eC•ÌF-Tú º”ÐÐŽQåUT7þ„+m0•0+P—Ϋ‘-* *ùõù8K¶Ï!ÇÎ7ˆŸæ•CS9±æ«ƒäÝ  ”76‘ÍÄÜÇ"u‚¤äÀ«zy”r5WŽMy@k»Þ¦³ 7Ôt«%R× íä‚÷’ªd,(³S(Ïd `ºþ\ÚG*9—Ó—¥—©ÄåsX¾o„«PÃäI¤Á6ñçWâž(IÈüÉ™ìû`Ù\HH¿ëD¬:7­s]YÚ9m6Òè¥<Ì9¨ýA…0 ÕØ ݽ%;὿á=üë2ˆðÏ””ç?ý}ÖçÑñ¢¢·x£j·HÙÔþ’”íqå~ðyÈPMP–Í5‡²A¹šA÷¢ƒ]z(× É;P,¦b{øªdÙ y[äzÀÅD3=”“‘Õ*Iý‚°“æ™Nij /Ü'I£ÁÕo´Æ×@‘6ZÈ4H6kÑN!Ú-bËðÕ-r õ3Õiˆµ PÊh*x¤«Q£l«ö-¹(›ô$íÒhY®.Bé¯RSTQÞ@©™¬Ý«ÄŠÍT»Ø¾“Ù">0쨂amôm1öÑÜ:§˜bFË’,*Cß_´-ÄÉYT'EvªÞAÐ8»b¿ðÇ9šL)ø9P9tß#—y{OÙÒÛQ.M\‡—4°sÍaz)ýpƒõ\N!¸l‘«©ä}€-Ýá™4@)œ”¡2áj*lªüW~¼Î i‡dÙÞØV0þÖ¿}j«°"6ìéíuÃ×PN Ì êÑ/¤†Qvª§Á‹r ªLïAgv'Qu*Ú'q ÎÜœ”1Q§Àx>ÐjfYйN–¼›a—äZ]{÷’/Ru’v8iù™ÄÕ¹”ntà–°àœ‚úv^:iLûh¤$æûÖ@Ê{ êc‘ñ”‰K>³ÓmŠÝ„Û')¸s½wAV/n[9iÁø)í_‰rEÇß±r>XøÀ á‹Ä6¬$êT(Mj?××—QG ð€äT¸9áÆCGf£ÒwÐ= 9ñ+€““4v*5 ê NÕ&ПópU!ÏÈæ9Iµâ„œg:j§S •ätEË«!ƒëbƒJØy"f¾»·ÛN}sŒS—án'SÉè÷B𸏇íA²Ä_R¸[pfô…k¯„tgmÊP«~m‡ åîÄ) :HÞ'é ŽkÓæ>)±ƒš²KŇ¹`áê ÞkŰ\VÔØÅ«v‹–õUõƒð"éŠ?ÔF¢ Hy¨ÞA˜q5Å ²JžÿÒ‰¥ô^ù(¨ä=ƒÄû@EÌ_L5rh5Un-¨;DÇXâzVPµƒnƒÎŸNβ½JfP/Ð!q6-Ð?l±Bþ(›bÉ®£òµ±Åfb_þ&B*ýT'/¡¬Jžë< êa—7|)[›.¼#÷…ó?â‘+WsÌÙӠôï1Ž1“0ù0ìº/ciº¾Ÿ˜Ø¢åÞšƒ¼ÛäÛðbµ÷±ÀÈ6ÐÛÍA.Ý rwë‹-cåÒØ¥š¾9¾‘Wµü‰ð²ˆ3Ц¥†^oÙW7ƒÓ Þ»ÀÛÔ„³ ) ú:…Ck@ó¢²½ nÈÇ"W×nªšªƒäÝÉ{€äípÁ0Ä Þ'é=y©ƒÃ‰¡Ux[ôK"u°&[0±/B%…ðÕ ¸PØ=Yð ®SmÆ ‡V‡ò¼NÚF°VzXôóÖ0ê…œ\+‹ V[ØÄm·H g:H€tb8¯¨® ô3ý=ÝÕœ;¨ëïŽ~õ²tÑy@ ’’ 9…êíT¡øxfÒÒd,8vCTˆ§P½o‡ §€ê ywRy3Ð*ûdp´úÂk'÷óÿÙ`PnxlÁè>0¯/z¡ÕšÃ˜EÙé_οú7.tîœCe›Ô­Áq§J{U^ð>èsˆò ÙK]ðjŽ·¢7AJùÝK†Á¯æ ’màmÄjÚ©qPàã‘\Ôõ̱¶Âln2éݤ­.ú¨Û1é6ä¿Wd ¸–°°¿1€3]ñ¦’NRï½ÐžK•Ê‹úQTú12þèß,Fè¿l,ýLðï‰~'._ü¸;#P¶Åàò~¸›‚q¹·ÔäŠÙ„)s¤øqnw,i–•m“…Q-ÌZk5çÉuÒHÔ»uòï0¯™¸I³‰¥uï>IÅ\ódž8!•륣äÎtŽõµÓ‰>A‚Nƒób¶•I×ú41Ì¿9nå¹v%sŒ¥œ¦bŠÈO=OÓ›™Ö×ÄÚàs¬Lº:®«ûÝ*Y½ÞkƒNeWn«™ó—ü¥ØÞ³©Jç@ü¡™æ¼ò²NƧ:ŽB3=7`¦™­K¦„æÎ¤ÜV/9ÚeÆÅGAÅ(¹–Áò}Nšé}¤õ0\û ÜfòŸ†qÛÒ³´Q|Ûñ+\,y ~äômjÙðâvÓX£ÙôÒÎÈܲ ¬µhT­Ïie´6†«Ç½ªj=¸Éêæ‹?Áw0>[›‡Ö·F¹Á¥žÉX¶éxq±V;qÄÔÆ#VSøS2ÇaÐ|ïññdØXÓW•lB?’…ªlãÍÓô¥žÓíÿUšä…1p–m5mš?qºf”ÃÆawñ¼rZM¦¼ìïÄLlÇÁrÍ´^çÐó–€5ÝDâ,é¯ÄÚ_¥sºy [ÞÝšX;\h¿“‹—´òÚ§é.Ü ¿a7Ù“ößKG†oq¬~û™å™i<øªsxÏ ŽÞlIœ•q¥X²'›ý¾ëÖ¨&ú»cwÆw¼¢ÿF”$¤A× Â>ŒóÃù înÝ(ÑÖoµ:I>«dA‘ßR$‰Ø]ô")”)?e@‰¤P6T¹lñKAuá<™'Ê6/k¥LÀy¼™æ©6,ºŠ¿P¥ú·ÝE¢yçÇ$UÎ.895UTþÒëo'/z€vg˜¼+H÷¼üA·˜\ÜømG¨ÞA™[ߢt5Ç›Hå|„^ˆÊýžU.+«O`3}Ç7Ñp‰ò×K~ªoo„£h,ZΠz9—¸ s’$Çä¾ 2Lë¥èC¸‰è™ÇõOI¡ä™«AULP°ì5›ç3(…Vi'éíŒöΗW->õ œT…Å4p¹Ï`ÎçôáêKú“Ð$; œ®\³þ,°åHÏú¦G^LõÑÄ¢ìB¯­œŽÏ^‘°…"Æ¡!í¬.\ ª À.É]ó‹TÝè‰ö’ã“2Äž©ð`M(oX@ÆD¿¾¸B$Cn‹ö Þw®'â_#ÛqågTy\¦­ÔZ(§ ±vM2ÕÛ‰¡j èì’¡Ÿ=^ºRç­<©Þå-OòŸôLíÍQé›Îö,‹¾®þ$óãøU Ú±o(ÿû1»Õ ;”F†4ÈSØ[¯t2{óŒæ OÅË^Eé‡2(S½Š@­;å ËÕ¤C$ï¦%›6:98Cd+¸âþâ:xç<8“äÔyr¢ûÒ;‡6ÙFÿ¢Ÿô:+ÈÜZ/ÆÐ*˜Š…í€Ä7MÂ\ͨâ'¯ Œl&;gƒZ~÷Ãp³’v¸ž¡Å¡›~Ç„Sž8²5 Gõ镇Y(ba‚KVTuHFØéçò„‹ºHM+vÔz;rhrÌA­;Å{’pì4¯k¯ÏDë‹óLò›« >r4Äù޳ä<ê¾ùvê¡´³ãOAö9„Ÿv]Þ4;”«¡(2ŠèŸH£$Ó^zAïîÉ6±Ù™û‰/ÎÝ´º PÊI:‡ãÖÏÙGü‰z/&G ,ž&ðA¯X €òæ„åyU¡l¾\m€ÞG÷×9³É.ÝéÖG¿׿<Ù“äPd‹¤¦²™ÉÊ9|¨“«ËëÊ (Ùeï%û̬ŸÏÚA?^J¹;T×Îô”’¶>ð›'ÎÚñ¥_³b‚—¡£7†U67-²—·4½Ÿ—k¦¿˜éõÌ6#ÖÄfÛS¼uLtâ5ÓßXê$ü=wwÕÛPì÷“˜N«Ï¤&Cõv’ÍÁ«bQ'Ië0ÅÏiÁóŒ¶mô9¢°û6ý_E°úAV(Jü“W“ok‘ÍgQÉ[¿Ú0»1n²û‡éA§P$õz¶ãS¥d!W?• öµ|óSüç©„MPìhôùë?”…¦û‰/¦ÊT¨¦6z󣬭xù“õ±³lÐ¥OŸøn8$A‹Ú¾ðxIø6…c¿ JÅpÊ 5p…ƒäÝ(›tÔ,J.(U×ÎñR!ÞÏ#W:O¬ÁÉ× Ã’Ù ‡ÜZ‹5 #ي•ßZrx[Ô*›Ibhœ¶€»åJŒoî%í¼ú(ÜnÊ’Ü$n›ù3J%¹–Du¿gŸ'å27·Y¶7«ñG¯ó5*¶í`ÖiCEe+ÙL¿òÞbJcþ6áÆœ Ý·á¥äÒÝÿ݉;?œ£Ÿy$ªÏÿ8í*‡b·7¶²Š©ÙÊ&’ â/~˶V~v6QW›:l®%;|ó½æÑ4îE©×Û¹† éÀë œS(ÞßÈÿÇ_øæ0ö !ÖЋ+DòÅë o`óLª@t¾QƒˆWJåùÔñA¬b@–„¤3ñRÒºdÉS0Å„ ±2’²K5Å踫˘~êÅWÙ;¶¡ÑP?#©_Œí,¤.ÒÎA}’lÁýá’=T‰WÙÀñ)ƒ!>qw“-²É)ˆvN§—Ó¶Áž=) yƒF®˜¨˜^-Tï XÕâ ÑÖw-Eà䢷Z«É îÔËv±ÿüž|{.<:2ÚC½ìCïý¶ÞS2Ò²½Ñþ¼ÒÎ%/Èõ^œ´cqêE5Ö{FàR¶÷£Åp¶Ãõmº»ÏÝ´—ƒÊ;ˆóv;ôP™Xðø¹V°lp)MªçAjÍÌF×iÈɵ†ÞíÕ‘s¹-â)¸ /úf}ö Û©)„-&½Ð°Bü „D|s¨ÞA£U©.ø.3ˆ›ƒ`”SÀz-ÝI¹Fû+’V±[üºt€zIèèÈ:A $Êi’ÞƒkŽ.Æ9Tò¨Ã»X1e2ÛÙUJq»¡bWIjèÁg’£w«⋞º×F™·3J·¿ÿŠžñ®f£3ø#Õz«å‘o?‰œˆ±ÍÊ(ÉÝ´3KätUËyL.z;Œþ¸BpÁpÒ,îÙèJ1ñ3Lâ<ÍWQYL=T2“.\W–~¯VÝáŽ'ÃÌXÊ0cæÕ‹a¸YIã*1dwˆü4à%Vë¥1jÿø¦=Pü’YÛÊqïU2›Évi®mè×ÉÕO[ƒ‹Õã Q¥£ì@ Ý¤›ü@ObJÉ¡<2ñ^/ƒÁòæàû™Í!]eC‰ÒY¶£2ÃÝO°d®å÷>¤&ïÖƒƒº)'ˆ„t$%;£9¨TÀ¥H4N.z;dŽ¢ Á;ÕÅ#“@%ñ€æ ¤ƒÎAy³î¸:ݦ§ ½”q°Œ©…‹t¾¨¢»ÓzãMHµH©J·¤ ŠOËÐ4]q¿«Òù(ÌAÕúTŸ£ATJÛŒ6Mië¥>Ãg[„=;Z‘Ô”ª &ÄÉÁwG7åŽ2BÞÀPí·êÙe#\¡ûõ rwÈG;ßU³qåVá0eQͤÚUªÉIÉ#WÊ ³–ÔA‹ª §gMƒ…L^%⦆Z dhzÞ›Ôý~ÒßÉÆa·ð*l¨Ð?Ôqù0Ù¥A)Ç3½ßå¿MÿfªÛ_ù[|¤‹„ŸK£énO #IuÞ/ÞI)?Ë)OáœZ¯XSÓÝ—ê¤z×­­åï!À-ÕWɼ¡>%Ä(eÕ‹5€•xŸ¼×ÒX­þ©HšlÍÿ(ãí:󘼙øÚ‘1Î<½ð5 f³Ýô[õ¢~ÒU)/+YžINÂð¦söð3{”-îógî'`Ì N& oƒÂ»°·iVíh$|^­ÞÓ;Ûk¦ße6þ_Tuà äÖ÷,Å‹›n_Ûóê“Ú²±(j¥” 0"'J½­ –^çs ò‹…·$„šaÛêÑÕtŒÃ²ñài£‚¤ýYÀ.Ê@ ¿Pª&“ÖÌý´e ‡Åu+ænZ¬šô³â¬,lc+¢BšnVƒör)d˱x»¸Ÿè†Ÿ¡@³êf’d‚ Cn—ÒNªù€"í®ÞÎ `' Æ-I¾|†Ê«ô³&¿pZ§¼Þ‚1k01Íeç"ô‹³º#el-ÁÄ–SÓ5é}.HUÍIoí;L û'ýà"«Y²há!м»& ’áŒíÎ=È);–^Ë›àlo• “öhfGÇ+o+' 7´‘k¤ŠºÎÞkNb@¦¼MH²  7­;u2ò;Ôá†3†ê¦ms ×õùN5ý ÷l0PåJ;§À-PGFFØÖsO;S¦Åÿ4eµ”çP¢øDKÁøì7¾g™Jyâd%樹]NŒ„NÁ³ìܺð§×縚i'{VÛÊO3G4TkºÒ$z­gzŸˆ»ñŠ¾â€®ìyoªöZu%ïCyÓm?ìZ¸&¡ÅQ¢0úÜ»¨…Gç;Æì†Öœ9)ñ˜kØ¥$µ`üY}©\ žÀ67ÄšêúëdàI—Ó])×IÜ Eð¸(ÓÊÛbŒ1z£58¬éÒÒÒx-Ýó¹óûY³PNÙGW…ôPÉljeüØL}w·“Ø#S¹x Î_á¢k@ >Ê…óNuíže«}ººÃ'(Nå4`«Á¹ð>]ÞÎqÍLÞ‚’¬Ì}¬VÂÙ3¾á½…Üà”eš>ãöÅ9ÕàAsÞ"àÇßð…÷%`ºTÙég/ö èŽ÷Àµ¡˜ Û?ÂR_Û/’Ø cûontg½ç²Þ•øÏSB‘và‡+!ñ¡^8G6&ñØ.pEÚ¹dƒñWÒ”žÉ>ƒ†$ HT8“SëFØä‹kVè„VIDÛÄÊFÈ"œ@¬ÞÅa¦ÃT-ïrh„D¨C3¬Ý¯~ðiû©Qö²Í/ x9¤&4H»Æ9ƨΠ÷™2MB/`ÊE€øPr‘À·$Ôpƒ¸®¯šè€òAÞ-¤¢å”·ó™OÆfWAÞÑšòݼ=ô§/¸ˆë–žéU:ô Î[PSdA©sPNOœÁ©WNNVÕ±?ºÊù‘ÌírèDUy¤ÜM+À’"²¬Øh òtn„Þý©_¶š®—o a±"ܼ¨¢*€ðH‚úؘü·ñ«ZL Þ­Îþ51ÛoŒ€º„X>øY÷*óúc8 Óì}9â„Ä‘·àY| _»ôàÄ[`ëÆåE“laßÜO²Ç“§-¼«+»Ïx­ç3G¨ÓR=¨)nìA¼ÒÏ@œÈó´™xaû°uê''W`DЍúþkÞT}Ò€˜1„µÈI"iB§'¯ˆÜ«†KNw§fÌízJÔô¬(Ö—B"‹á°f\x‘¦Íd*íNµ”޶8™dÕMæ4É{„)6§À%Ó™å3Fèì%}Ó¦¶:­ÞméÜ7ÜàlwS(Þ„#*³Ñèy³(”]wt ´ÏŒ`jž“É#évânÐRXÞÜÞÍÊé¦ÑË·^¬)—G('xn—²®§Ê¢©$SÛîœÑ< *8¡ d>u˜Ðp6I4 gRõ÷û[É«k‘ѹÓ§-ûoâeì“íŸ@¾/ ¾9ìTû¥­#I;år¥à–ê6br°.ΤÔ:U%ýn3À´õÔ8Ïp¹ wÎäÀ›’l3ØÎ`ƒqÚæ~tR¬ÔOn o&©¾ðíùTí°&É´è=Üí\¤?›7»ŒB6úYÎû´³ãR-z ªásE7°Y](Î6µždØTÊE ²®â²¥ºñûâ͘„ŒŠ~f}²í(@’Ñ«ý½D‹äNui…Þü–Ÿ¾Ÿ$<‡ñ‹__qa$8 kfx‚ÛfÊí\Ó¥d+ÇhNˆKMAº9†ç„¶§ÝÀs¤Ë¶§‡ p# ?si2mëSµÍ¼ñnڻƎ†+D2°ÛÂêObi¢¿©Áýdo2V ˜¢íZ¶®«ÕZ·¿n§\¢×Ûƒƒ„;/λ–' Õ´óZX07ki<Ž>0[,ŒžŽò< =ûÚØyscgËn8*ç?ʱÏD¾þ!Y"w¥NXÒðçêí©‘ >vúI•Ò„ì$’íT¡s¶çE„µeÆM5Pã¬5šeu†êÏúƒSFç[tx[eÆkÌULpˆw°ñnAÁ~¤è+Á_*£8l„V#¾ÎÃÔKÓ›Væ¨Òã ãÕ-Ê䀢Î(œä§“±zn}µÍM´QîDM»‰0ÛA¼MîAˆÚñOi¨ÔíÙO¸±uj@ìa½|ª‡‘4‰sÒìnR®$Én>ž¶À?Ü”ÊÄ”2gUºC†y Ä,èé¯AÉ ãJ7Ž>ß¼aŸ™ð*’=5ÕrAéÃ}; spʪ›Š‡óÌh§éeÚ]½NÿN€òí;~ƒðhÖ?¿i;5åÍ´YÀïÃÁ”&哾~˜g$ÿúÇþ=ýý—d§úW_ÏMRª!·œ 2&fj ¡gT_ÿøWzñ‰´32…ú#…d@ZGÓý-¹‘½X¼;Ïv–;ï†é)Ë)?î¤ÂÛ£_Úhán’2Ö‘vÊ8¿‹qª;Êq“ò6üŒÿ_Åé+2üœ¦D{á£ÁòÊöÁŽÎþGë†ÑYx´MͶ"¼6'.k¤žœõ£Þ¢ñ”%Ÿýá×üÓ—ÜíµŽßÁÏ9E­Ë‹gÓwsÚ\بՊ`Z§ï”#ÛO^`¬y!©:t2âÍÇg7åñ>:+¾õŸþ¿%†[¿½zo0|—r„¹RÞÂåIý¤Í—“›‡cPŽ¡çÛmòà¹1¤Åw¼ahÎI¦ËåšüN=Ïþò/ó|·™Wvî®’–Š{™«zõ9À™±3ßÕihR§š“L;.|Vz‹:ƒn¢£ïË{·g0š[çsüÙ Äí2í¾áF:·S…AÊöå:–æu I>ï}¨<-éÇî'voçÝàÞ)÷“ÿ¡SF;¢ŽÒ„lÄA›CTÇøA…w‹aÙézú‡ð‹ðfp×UÝ ÃG±ô¿~!¡: œÕvB… eg™ hé^~g þ+ý’ô;üH„;6õöÉt<ÿÓ+A.‚´öÌÌñJ×Ë #ƒÚùXj=åÇ )Uˆ¾¬Üvt«ˆ?‚fÜ B&=±,hµe@ž¤mKÁ'èq¥úHybå•À—.F{ÌMµ†©ˆ‡Ô~ºúÃòöÓ¶¾zì?çó?½(=Óp £¸Ž¬Jý¿îÞž ’w!•ñ„ÿ]óE¢EIº¸£¤þV 4žô¢ áÔI¡@J6áÍ!B­Ï¨•8#ÙÎíÔOþ5 ÎRvC±cè°$ÍXÊH‡¦œ…+ñî”~Æ„i‡Mmâ>ÐìçI¿žÿô¬î¯“3?ŽáJG6Ž®O«òüÇö!©fݧåEUÏUdK­Yž’JH·T…SFø2­HÛ¯"_JžÑÞTÞBʾ\¢³*ü´Ç¯Tq$Ôª’6UÒ´A8唨BRL£6Á“Nšb甕°Î žHM»-MGB„‚½h¬¸ã4ishפ§òõüOH2ñ_»Z›Í´^è¢Ü «©•ògÝŸ®T¤á»Æþÿ´Ö‰œÉjÝMƒ_&DY©‘)k?#åÎOèU2÷"Š µ ò_$Àü.µ?õ$ù΃eÌ'w>uLšVH†ûú7ÕÌ,üÅA ’`IÓ áv>š‘ØÌ |ÖÝh6†lTªÆhW©ø†ºñ "3«Í‡« §Ù 6†òÅk”»¹ š*›PÊN @=¡TáFéF(kJgÞ à®6Io$)PÚU² U€ [)n§« 'üÛBÓã*ˆj°7ˆÄÑŠÏ‘ˆåx†MHŒQËš>å!ê™' UãìYÙ²šÚ®ö‹^¸£Üë®F['K« µf4T»•ã|¸ ²v$ ) —¬T!œ¶$A2”cÛRgÑ™íú®©+}ûPvq©ªšÕÃãqÐ¥{¹¸ù&´ø¯¤³Š—™ôsÀƒdHú ÅÏ^¥bÀª&¿n ’a,Ôša¹’œ£L+ÅçqÊ8„VUήÇìz™‘¤ ÙžLÜÔ„%1!SÞ ,rHÚ8 jDÚ ±:Aì Äx¿þJÂ0˜(ö<° ˆ{Á03½jÁdº 6apE&«+Û,(5姇ZÊJwCÁŽ=­Sʪí?7Î’Yó¸u(N”ðùŠêÏAPÓØkøãaPÿ~‘ § ¨üÈ7&X_åù|Ò[äíÓ®ë]R6°lw˜ÎögÓ»å4Þàí,ª*z˜{¿§`+2ÏŠ ™¼·+LÁÝ̯­R†«àn %$é„hãä -¶+eÀ¡0’—ÖÐÁ2e#EaÌ7D†Á3ßÀ‚]ѧâßDb¥¿P6¡jàÙ¿nÚŸÁYÙÇži:cBtã`9r¥¬~V©¥\€öÅY¡\4a–C}4l*3‚2ÿRÆéè“‘‘àà¢]ETªÊˆµZŽÁÚ¨HHWP%Uµ­´S?¡k+ù“$È6–†Í·?ñžŽœ2lª Š÷1¨B0 UN¾ü]H…¿p¢ûh)Z½ðfº«6H%•ÒnͰÔÚùÍ™ƒ¶$ ÊpÓ®I=ˆ7çNNß §ozº~VQÛNûâßN$˜¹ÈP “¬Z!œW+wÙ·»væôåÊ­;öï»ó­¼%uR*úû$Zã§ã6øc3 5&JtŒW•¿ÉѾt» »š Ù‘êÃóŽ °‰ÿ¤kWnÍ®\2rp[ ôÆå£‰ÔqT{¤³EÏ!⭽ˎþwåÂ;ÂúW£ \&ͲFZ§÷³í£Ä]5ó®V ˜ÐÈ*cóë ÉKÈó§< •“*ìvjŠ!«A—Ðtn: Rl(vjѹmÉÔçŒY6C³á„Òx'­È*r>ITÉD†B9¨ÞygÍÇE{ÞêeÃXñ¡Ýïš`*o¦èà~!ùÛó“f=¦cžQ š (çÃU4R‰¸“£8·n5ÇÓª~Ù½÷'9Ndœ¥Dô‹ódL½’Âdä…= GÜo{úN(œ·S#ÊÌp]SªªhË@ÆDt#?HFp”)XŠ÷ÉSÉÀ>FîŠ#èH%~ÿM>i{Îa?¸îò=AÊš¾Kí ªé>ž"¼kÊ)l®IŒêñÞðë/©aût¡PÑŒ‡5Áü~þïB&ŠÙwDÊí|ä Ÿn¿óÚX…Œ¿ÂjôE€Ö+¥/àïTwÀxª·’M89ø^æ¦ÜÍ]G¼S‡0=žÿéu¦ãif¤¯/ªÉ“¾(]ªµ€Üí”òµñgdЊ:T'¥{?è!ûÆBÖQt†mPÓ¡ R4ÿJY¥’)`ç4£!99ÀJ·wµæ[OUÕ‡Þ“”wÓk*Z{¦ZД*¨òó¡‡Û8ß„d×T§n ûøí[Å7’o!äVU-ùŒ‰ÒFv—/˜K†ãù=ü•l’Ä¡“†ÂG‘¿=»ƒç ´×;zw;’¥®Pª†7<)¤l2=çäAÐ_Ip¢]nxžËgS _îF ïˆÛé*Ãi–|Ô°Í)É0ÈdÊö°2Wʪ$0K¾S6Ð^òqð7æPQ‹jêäÀ%;ÌÒ/$”!˜Â à_¥Rë ¢xn'ÔJúøM œúÔ0›‘ò»/ö-G¶râ ¨0v±!^”ªÉ^.#ߨÄÇ+¶˜ò•PˆÁ1GŸ×ëÖP˜R ï©‘SBa°5)åÔ&õ +‰…_×»Šúîjy’úIWêV*S5ª­Aùš ì» ýŠÈÿ¿H»þ/ãZÃÖîûM¿m‚ÿsÏ¢‰ïÈ• "â¬%–¡6ü  þÔÎËõÓä×­ÀÛ²¶ðªî3ˆe,fvŒ`;‘²@ÞŒ=ÇÑl/Žöû©é‹v)¿•ö4~Ý2A"†ÎaphdÓÈ“$#x)Ã_䄨ó¡äµj)]©“®”•zMo%|4MjŽ}; ‰<¿ÔK ]|HÓç{&½þ2þ§Mºª×«”o‹UM_ñâ¨ð¤üe‚lc|°ƒðRrÇÖŒ¢V#IQ]±ªâÐÄ×%¬K'/†F «*æÞÀŠÝÛéJ{P䯏àhR ŽO—Ï$¿˜ ÈДø ¨HêA\òäRYÓ~W Ú¿Ÿƒ*Úæ'ÀB*üìɸ§Ü'vZpwÖŽÃ|ÈÍd-Ù5¥»‘ÒÇÀ5€\y&:õàY¬pë2œ|>KN\'Ð$ŒÁX£Úã0¥¦¡º›ø:/í4!ÍÂzVõ2•wR¥_ª Rôèì‹Qonw$¤l¾J5±£ùëaoãÎ_&T |<Ïø'm#å ›Ü»kšrÀ“±¥í,uYÏÁ‰« £ºA3耑É$oAéOàvMÏoÛ,Âx “ñfÚ,³¦í¼L`j8Ò€ý"¬03‡wèQ²k¥š® èÛÿÓD«c/[yŸ¦ä¤’ò³½m‰[&¡hºÍòðT'#»w±šMÿ}º0= [‹Ü©:UR*8ö¡ž*w¼-ÿ“r7б]TŸ/ÄJ%a(ßÍ*URz›\¾b³¦I\euR09nIU‘M¶(ýÄ®øá%,)v´®å0^À‹ñÖ”z’:‡„a|–L–Ùu"·OD¡0¥*—¿W"T“’LÊNøÕ˜›9”7U…†2N޾ê«`fƒK5“žVÞW3kýè*œ¶>Zˆ—¿+ò¦ó²áIy;]‡ÂÎ9EC&'ç»)b)|èÒèâÍèkïrI<3º‰~꺩N¼FC,vÇfÞò†Hzñ¶Ys¬J'•SI‚d8ß—QùxnBÕÀKã<аÚM½0}šØ#@Ó¬9}ŸQ¾slºpBŽQ¤ÜmA™…ä|(HF0–È÷„—Þv Fwî|Yj6á~W]>}­™hUÿó¾±x!uz¡û/I9‘RÉsÔ+5já÷<)G³K­qB”S%ÕÎYéEݨÎOÞÓKŒ\vWN˜5媊£‚â\Å¡>»7¨#DFܹ–+9Ý-HFðì'ŒES3Ü©* —ÔOð•LÄ•ÛØmnÃ’£ £NQ°—ªD8ˆ™N.’&‘A£?½`ª.[þ\ª?épðczx¡ÕDÎR ' ߗ¶S‡$†š câ\óƒ™;ÓÜälìö¹ ‹Ò_HiW• 9)i‹Al’¨J±‚íwz½´¶$¾\S+ ìv!üPÆ”:æn„ÊÁZYÆt¥.È?2œÉuŸ cb ªúÈ€âÔdš_Hë00É#V¬.GÁ6뜱ȆâÐiÚŽ2X,ç»’ñÔÝËå¦*Ø»|ÜÌ}DpSÃÈ•{¹Ûäaä±»oh§¤'åÁ;\‡l ßJ•-„Ç’>»/Àsü+qR¥ y ®FÍÛâ òEœßíŽèÚ¹TCêé ÉF¥º¦Ü'F.Úr8Ý3ÃRà,u+\·¹ÏYPCa"OèQɘM3ÍXá×Ì…öÀ:‘;£7ww%ç;ï ¢ý°â=WjmAÎÇêJ^œ¯ø¼¥N9uw8‹YÝœçð¥ª=¨õÙN£ ÃD½Æ;ÕÀ5«ÇÍp‘[‹(}(ë^é+óý¦XÏæ=Ï?AÜMò>.;MØÐj ·>݇œÍùé–ÛRƒ¬Ìl¤Üm‚Œ‰Q½ÞÇÒQÇ x0Æ®ÔiJckÁvæÖ½æÐ”ªê•ÐD#l¥t™6š  ¶¦@ñZŽã‡]0õŠ˜pÅjª9AÑ%viÅ7÷ ©S0zw'c"&ÓͽØ.nï%¸+ö$¸yL# òŽõïÀ/q§ûRø ñÒL»i…–ßzï>f¸ ŒýÅø±Øß­wºHü:ø®ÎWÊ®Éá¹ì ªì±:^ÉĈö ñ(¾8€ß2µÐ2´ä >¦ŠÏ™À1±‰G9J8¼}(ÈKöÙ~\ƒc”`Óiš6TsÚe£5cöZ¥ÚIèM)“oJ¦¸”»§¬)_¦èvÇ!$}¹)wæý¾:{>ã¥B§ N(˜dš9–ÄI##Œ!¦øü2õ‰v>ú¼îíŒïoÛ€ñ‚ ~ Šƒ>Ü•º³Ì&ïLp(Æ—k¡ Üy‰)t“¨½`z&É0.Ué-1µôüß‘¼Ê¨û_·¸Ê±ë328 ãBBÂià×SHÊ&T 8A¸Eï_•è›öln'T˜ªÂ€\¥uƒ»Ÿ´ƒ}¬ïV.àϽéÁE#Ïqör¨VMüÅíp&® T-Rj6¸³†„:ô¢¤€'É=ÉÕ`·›¼Q+¢Äq¯àC©>4 ,Œov¿ÒF&é%†Øì «*º6ìŠN\òäRµƒ+2í+LvÓªí·– é-SSžHÕ [˜ñ]Ñ8¥–ò¶ânì1ß©Ü b·RÛM¨p»&y&æ 8ûÇAK¡[sáXªR7ñá¸r,9]š¹›ã‡‚dc)ÔI ~öã\ðú0˜=Æ©7 y3ÝM°ÉænDÕ z™šŸvÃ6˜§êð‚e¬.G®O“;¡”›MD×Ñ1&*x©XªŽDÓ PÕt.;>ߺƒ¿ÂÑ-'Yã+‹ëÜÔ\³9tæ(´;T?mrGJjÛŠyuÞǽ'±ŒÞ¢‚€î*ÃÉ'Ž_TUq”‚1(wÞÉÆÈÄ1±‰G5fw6%í¤à²»bdʘKŪÊKœ Ö¥ÿÊØÐ$‹‘Éîêḛ̀ª2Îj&7£NdLİÕ`ˆICQèC ÊXÌÚ–maɱT§['SÒáß9ÃJdõ‰h2L©`/€Ü TGnfV¢­»¢3cÚÐV`,NDhºÏD»FåΨªLü âNȱd£»j¬lÛ-)÷ÅtZ ª„µ.qæëeâ[œÿöÖÁð&ë ×Ù¾/%^Á!Ûø@*œrê 펨à\*°ndŠÍØ9r8y.µ´9¾L|“r'ä(üílM' ÷!cÚ'ÈpÄï¦:ô‰Ü.'Eç_J7z©éÞ]ѹªN˜ð0Á‚ŠU/ŽÓSoÑrÙ¾T[wÕš°yOje@|ï¼uS´¸ÞYcd>šh¤be?Ïÿô×èWY¸š¹ ¦i<ã–ªãPh¹ꤎÏ3^™2Õ´ G xš¾¢D!=T†¶â2Wø¹‰=.¬•ì<{®— c‚ –è ]NÒÆèS6!wGÝ`”0¾[˜M.u€ÇF•ó‚(Rê­ çbŽy7²ƒ“„ûñÔ}‚Œ‰˜c3ؘ«ç#HFpTÄĉ1&V¥ÔhBU"A#ÀßìÅpñwâ‡Ôü}©Æß„fpizQ´nâcÂ76~ý@§öD(õ“lÃÅcçŽoàSöHh‚ÛF®yÁ®ÔKåÍj|iÜúý KÆ1tr ¬Tª M¥› dð‡&—:Œµê-¹æ­è°¤¸þ&Tà `ûzãwBÆØkÊÝ©‘SB{ÆÅ+•Ô¶R_¼¹ÿëÆž„3yGO·ûƒ2:×W§…ÅŒ¹»î-ºnïT;yÏï\l=ófi…ðžÄ@ã7×$A2Þ) Öøƒí$»¿ùL1ÄëÄ”ƒ±æ”­|©—+wÍBzä§í«´Çd½°š;ÌÎÜÝ)Xc´únîn½rÔˆXÔxV;碩= ’ÜÕÔ÷’'Øorg¹-ÝÕ+õ“ì #çf?¦“m=`Æ"”lóûÆëƒ ånˆœåu7ÄrÙù-únY <¹œÌ´â?þ×8¯Xº>HÊu¯@£$P¶W%8´…6P×5IŒ`;bršÚ·ÏÓÖM’)ídLD}5,äT²Ñ,YªÓ] TSw@ÃRAw&WðxµÎøW²ÇÀþÒ;ÕF›bÙé¯ò¤Î|œÏ¤= /é›Øâ ¼U¾"gëÁœ Š≑ÿndê‘N&Uu>`–€+Õ•q[ÒïTiBÒb¿URœTUÝ¢ÀùPð«–ò"¿…¤²u?Ov'ˆsž°Ã±È&Ëøn€M(mC³m˜»A§ AØ aÐôÄ9–4€yOÏòQkT9ÐY»ØbcìdR¡`«›‹?Ç2Gâ½ÿBÒ5õUwò“rÒ5ùEñüÛ irŸØiAa°F®mÙР^ØŸ5KU‚nXW€N$b¨í¦5Z9«¡ÜK¼ÅB\ZÑNôÿ“Œà裛ÜàÀ7IP,óqvSlªÎ´ÉFãîªö—‰2³Và|,Åd)£×òƒe¬.ZÃÁDi~ cŽ$ˆ_¤ÂÝ5 Q<ÌgæPuò*&ÆçÓÆÝ£h.øñR“ïJÊÿ¹)o+ྠhÜc>Ì¿ym£óO×ͰmøÆˆ±ÈɃüÜ9ð"؃dÏ5R½>Çf„±&?T]1½Îy›%Їb™Á1áÒƒƒ<ë_Ð÷”òzÚ<9ud”xH4,í·¥Á¶Ì商rï3mÏ+œ)sÊS“¿óX-9ðæ%xJ‘Ÿƒ"Øi–½¯‰Ñ|AcŽ”–8çY×Ë—í®©ZFKµ¤ìÈŠ˜º™úÞ¦Ž7UQñ­ G‘sTNâèùVwäfîu‹ý0 Ì»«V¹_õ¾ø*­äRUOÎÇÀƒ ¸]¢˜÷ÛŠádÄ!ÉDnÝøCdLÄîSªE» á*|4EìJG¦Îß}Xºðkž×+‡+oAIV–1]»o ªÃ`µón‚aænDÕ€ó$Cùˆ/¨áIùYq ŠOG#”u.Õðt Gªœg­/“¨Ü:¤Óú5("8ñ}œŸÍ8ë.~’”MJ¥òÊÛPí& ]Ó>AÆDljü 0œï“»+w×âÇÜpx?éã‹h¼%Ú |0íJ8ïWήl5õÑR>‡¤l©«ŒÖ@›•g$i¿¥+åƒD©5>2ª«ï'¾Xwð ï93lZ<˜vsýT äõH ÊËôz¥jåkj-Õn†´“ñÝîí«¦ l¿æ4ιdÇ >ñ]2SUs¦ëWõ®›ÐÄ[’ò§²wuEî+VVÀ•;oŠ7?Ã7–U¶òþ§•ÃTßÝy÷7’ÂáƒSwú°(ñA­Û€ôU„™é%ÜuQ\K»!9FüÏmAI[êΓʕö¤XéâF 7c¦Ö ým(p÷ûMšñŸ;}¨kÚ„Œ.U¦_†oÓá©uç}½”X˜>EÙ÷$Üxx«,t¸ËÇ„ÛcŸäÙ.©•l¸•¼ú¸#HÃÕwC®]©|¨Ö~=£ØL¸ä T‡qÈ4‹Ͻ¹,M­‘g rÌ–Yg§ÜäÆ7 Ü/‡êBw=hB¹›3oAIV–1]»€Ÿt½jÚH ׃³baqíÝ'á7¨fÅ"Ø,2û6U^š²ï„a ¸á{ŸQŸÀ)o &ùad„ÕgM·kál Oà6tüû}úG•ñmJ¹lwÓRv{>L©àƒð=ê¡R-àš'˜·•“üt2ßzó®ÒH„€Âíœ@u"vJ5l`ªcqÞ‰èº3ÎëPm¦øUöP¦Ö |^Ã’"§mB’eLÃír‡ŸÉ /4M\ŽÀ“{pGŰ?x—±ÚÆ7–pIÂÏM2úéÐrøŸÃµ1Œ-zPïŸ`Û ¦îÙÛAÙÁ†'aiÁªŒK Qk¾¡Åö.ùàDjúI™Rc[B'XhÌvç±íÎScÍÂúúyû‰Ø-¹æ®äOBºû5©dP%˜p ×Ó‡ Iâ»UÎG5½Kñ›WO$§º•Y"<)óÝŠÊ€t¤?iY#¤îŽ•57÷‰=¢kùµvÂÒ‚ü­³œ÷„´¦í´fw¼ÿÚÞÜ,ô§d%ÞLqˆ‹pÍC¼%YY†;´aUo¼´¦ëÎPGŽÒ[’tÝÍUÔ@…iÉsO®¥#®Æáíÿb­ÿoÈFíâÖÛ,$hÑ9/†.1È"ém÷‘#°Ž³—¥Çá˃ûÏÞgÚ’Ñ‘hA‰ˆ+tŽšþóæð>‚âlYÒÍ\¹×áqÊäaÞà˜j›ä0åna¼Ñ‹ðÊRãNÕØc8„R°Í7\9J~ÙziZtÝáö — <‹h¬~RwŠì»ÿÜaep"¨ ­è½Yª&éð€…ð0ªÚt.ˆ ž¸£0( ƒK5ÄíŸÜçï…)xÙ }4u â¿£¾Sš²}»Î™úc37Hë‰öΘörÙÉÎ=ÐZ“ä§µOÌŸ‘‘åèºFd,ý0k^©àŽñbH]«Êƒ&·÷¥D&8#zwÄÃÏ(ÆÒHSª‚î@gª¤@U•-kßU£¡Š]kbåmeÌÙô†½,u:‚I:jR‚Ú_™±ûÀírêÃóoÅþ厌d(¼Ï¢;´½¨`y=™’ëîàÕ£í^p­% ¼·£¯Ò~ØJy±jýa»]H÷çÛóIL0&Eñ¬»U•?8 žO[u¶˜.²vZYF8,¹;RúEÕüc‹Ñi£Ê)KqQÁÓ/Ʊp¼v'dÊù¸gÙòŸ›[3€¶]³I’ 'ç6ÃdÊ›¡þ-m7ºk%qϻӕ”Þ) ˜¢>Ó\“¬kÅYõ¶%yvWÞ‚’8ס4§ÊGVlVÁë´•XîÒp…ÅÜ]'Mß›PêÄ­+@DбãÇ¢.zÙméà1Y&刖̡‡0ž“7F£Î¹OìEÝ0¨FFØRWÖŒ^ç¼"0/¯Öë½õ‰”ÁÛÆ;Å1§`Ÿá©dhMЂ%Vòã•; ªæøÓÿáZƒ1½©Fï7 :0Œ¨v惜ºsž95n=†% ¯‹WÛ}}¨”·Õ7¯wÿõñ“ÛÒü#%,Þ1#›—Q'#þD¼TCª; ªÀ¡È£¸»¥úwù?GFÖØ;!ÑrîÐŒw&Dõˆ\ýRÆã"j\hw¨ÜÐ…;4ªŒÚI¦‰OÆð1 5F?¼ŒÅþ…(~W¥¦éæ#iè7öô0Gp´Úf;xåœâý¦ºp‡óA…GIÊ‹ÂnâWÜ â¬'¬Âæ;1¢=(ÊVÎGe—·õVwî Y¶M€mý^¿Fh:çáNUµóVÆw¦FP}J÷[­Ðq¥¬=…ûY®ÔfLg·ÜaqÐám¶~ÿˆ®J{Ÿqx‹ˆw>Úú¢¹ˆX>o_bÐM¨* ‚чŒîªDûUæfËv˜I©/atì6ªˆp,5híuØÀrcžÄLΦí*27s¶B¸ô êdúÌϦŒÎ>–ï}Ká¾ÄKrÜ bÃë…ÖêäºO1q©OÕÛ½²‹Ï´ÜØö&í†èÐØ³ßò¹/'R™wmÃÒ‚U³gÀùPEåLvÉð¾£m˜ˆÂ|(L©àÚM0ߊ¨fLäàå/ï¸¡Š’¨’IUåîšêpDënˆŒ L2͇K Ž÷5©°kJoý3;®é³2¹îd8bÃqS °á8w%Ú0†=…Õü‰R¥.È2V‡!„÷éJ2‘“¡]I†áÝ5"ö2*8 Æ~üs×ü±/Úμä”{O)­Qñ¥\¯s"b{^ð0<…^1õx†Çqô­®ï˜oßÔsðI¥„­QÏñ¬1d™ñ’ºÕ³õi›v’Õ•l®6Kw \>±8¶¡ƒ?iÛü“$Ny«&L˜ú²ó>®»qgÝA†!ê9~(p)RjGؾ„…Å4–^éJAظiaL”9ߨK*Þ#øS9ŽWÊŠ;©RSÅù,êkãìµô“¶¤|_ÞóôÎìêqòÃít=KÙ¹]Žö€`KÛv¦¸Ÿ¯!4ø¿žÀÒ!ïk‰¼CôY"ÇȾ+¶$¤š»+U'n¤¼»â”Ñ9o wGBع/˜ä‡Ñ…_}ÿ_ÏÛŒT'û¾Vhr>/ƒåÀ$‹‰Ní,ÚÿôVÛÎt½'Ĥð7w—Ú¡•_v:Vhá§ Õh»OÀ(ƒ1²°B­…ÿÐÊ2V—×’¥zžW§´\Ķ7ˆUGŒ üP”§fÃZVnñ·ð´rUӭ̶+uUÚ'Șˆ¥4S ~Ý4Ëò6¡H¹›»’Úe„IœM`çT\ú­ òF†øûœÀ¹îdLDKfdájÀù’<+þÑ4^:²xô}>¨Ɇ=ݨ“ê"^ꂼã¶ïÄžÉQ ó¡0÷>ÎîzQ6Î&Ø‘ » þD¼Ô‡qô”iŸ ž­ó6%'ÁK-ÎGÐ,ƒUø#>+ëëçÑ>Ã1îs.«ù¡:ÁK…§…­`ÆÁÙ¨Ê^ú9jùÃYsÞŒB‡¡WðÛn„‚°|ì®2œ¢8a¾–¸VÕ˜kœ>9D,f¹u|Tçvã“eóô…Ä÷sá z%M·sè©EX2]éy¾ÒÏ»)VjS°ÿ wõÅ w~¿­}Úzjœ”ßÜO¾/XÞTvTâ=š„±öÌ 5ϙߓÃ5™T;7@Á9•KÇ_ô¯‰²Ž=°êÄ{"s¶(vyxPž€a‚sê'–À ·kq>çþå|’ýå …QCGªÞ}FÈ.}‚ȿՕ àÜ?æ,k¾#É…QªùÃÉp|áôßcÿ°-tۊІ٠ÿQà[v?KM›6‹o¨Fµ¼)·`›Ã²q|4„'°¤ Ãûð4Õ‰ó±`Gˆ戾ϸ6òë{⟄GÊÜ gs/Êßá6ÎÛY2g/샣S-3h¿’p[ùUð€”ÎÒ;qu¥I8M”±LŠYLÅD‹™Åh™ù5@npÄ_ÝZ´Cñ¢I§½q»Üt ’©Ñ0o~èv'ˆ:a­P從^¬!«Û¢™æÍ¸rÝ#Wo²8Wƒ˜QîäŠ31òcÅÀ–{E+VX\©:Ížýí²jòîŠÀàÜ”ˆW'ÎÇ‚^¢›¤¿GK5‹ð6!‰Œ0X´i#§]“º‘¯ ÜÁwòÅúÏvD<Ì'rüä©!IH©v×ö.¨ÆÖKc\}VD¤'û&˜³jÞSÝ=J•c³‚œSB 0¹~óÌÇ|u£¡ÚïNA²D1µî¼ýrWhõÌÊd‘2\±±G.Ö´š;^^h5è>%¯œdq¾ta{Ø­,cuè!<š ·Œ­Ô‰q٢ݯÖž$Pk_ÁÔÉôÞ•ŽTMí]{í–_åïÊÏÈ„VÝ á°s“ˆý0ÖN/,#K>]¹Ã ЛêIþÉ6Rç ¤9½7ÇΛbÉãòEëi;MüàêN(+$¬¢}Â[ÊR5¸(w ‹ íd8¢®›jÀíšÔ•² Fi(^ϿՀgÿšÙ àÏ“ÒÖM|Ü Î(nH˜¡jÀQ–KvúÐ$,¸T@N¹\P4+VMrÍÛ‚cb7Â(€\jê {ãá¸õ Çp¥Nƒq;÷¡ŒéTŠ7ø‡š&6žŒ0Û¹¯œ$\§•e,îgãX°p¾TáP7üÿÖ.u Ú”±Ôž6êbÎ&÷•y›®°5Œ;í­xã’>$#xöߺ‰¯ wB(Ö aÎŒuÎZ°Þœ°ÞÝTШ…w[`ΚRW½Q9uôêø™ÑRAµyö­?ø¹ØÄN(é¦xq?'u‹Å­ië®Tp ˜¦ä‰Z0ŠÄÌÖ4ë,ÀÙÕg¯ò+ÎIÓ2JMJ²2÷±Zùáæ˜µ´+DW_]{-ì3p駱1¯Ž¨Óú‘.õýB9àEú A˜ ÁÊ»7Òt7‘ñ€´&lÖy ÓÍøuðÞ ômÿóü à 9Û·»êÄ­;êA88ÉO·CqøÊ)ÿ ŒÕ.Õ ïÀÚõì«Ó|¶…0RÈÛ0°R ˜Á n×jº›•:a€62ùuKŒ`Ÿ8M_\w¥½\ ´›VS¯A]õ·S ÷’AœäȘˆ~Í\ߤðÅYAøËBWÊ”»Qɇ©U<¤ êÂí/%nd4‡9 ån®™#¬ÎKƒ±V•ª&–׌DuÃe°ÉÑF#תZTãwXaiÁÝøâ<3ânýôXªå­»a È›é®R!’:Ï"rw´˜êX·®îC®naÿå¬)'|ÞA;)àw üšˆ/3ŠÝew•á„õ¥L®Ü.E Á°B± IÔJáúêúXœ¬ýOÛi²·pWlŠä1Tq>‚dç(ƒ¥º2'ÊXL޼Ÿ±ßOzË¿Û OÊGªÆ|ËþýüOYS"Õg×uª®FžôEéR­u<°IúíJ;èF {ºTk™úÖ¦þ¦ÿú›ðîèüWJù­åXÄ–ò·¤·É›vgà¾/à m•"ŠÁVBf×{ô1¸l©îœÀzï#·…ÛFï3ýÁ­Â[Ç>ŒÊÝ‚$¢X¡p5í¦âŠêŠâ”MïY޳kj4±Oäï‰>ŠZL–f愉,ªôŠ’ö \ðh±úš;äÞJ#w£¦¾-¶Ô6Æ*ië¼¹á«dÊdöÍ‹©úv¿0?íÚ_mI&Rxù–¾K&78s‹U>êÝÕ&£é©Î¡c¸«‰E\ÀZŠm&~PýdÓÞî?å¿‹Þ%þN‚ßœ7,¶±š„GáqÙ…þ3=ÿ_¯'å'ùz’+—òhFr¤ ½¿TÚùýÕOÊ=UTª)'SõW2ùJñ©õ:ÝU¹³›{f´$JrWýÀüþÛ=ezÆLˆ—R¡'Íà’Ÿ´ƒoyÒ§Våžjj§öv?ÿóvðß"wÞ™eF¤Ïhøï¿ôJLyP§f0#ö}0L¹­Œ½ F¨2ŠàÝùWGz·@t^ É‚2ÂàóÍllî‡S»&u#ÿ\qG xpÞÌ0 ÆC³Fø^ꔞà–2nÇ+ß­ó¤ž.ÞɹE6ç žW2ö@5 ™@Vø,mkÉŽCJvº/ï*o~SMßÞ¤6›“·)–Ç9 ¨ì\² 9pRB)…NFœ¶’'Þ—â› VrÊ«ÛÔ0ưœ’8û/–W®Q°a;{£]SήIœx›Ô®§ü: wÌÁ›#Ö7Ø*]ɵÞ­z½\­fÙNú[ÀèÁ°“cùâLÓß­Z.À}QV¤LJšyUêÔÊ”‘­ˆ| éÃØ¾„®L°Yìð#ÚœxRl%®¶S8ÛÃÃsZ]Û‘˜“Là>‚¿i²Dø77Û˜jº\¯¤ “$¬&ü7¹Ã€¦ñ-Õïso &YLS&ÿ0ì JH7ÚÎŽàN‘'?ÙÈ6Om+Q= ,¼O ¥Æ;ç-ÜUËžDái,(¢q‚‘û‰‡J©&#˜w’+)42½LKžDñ¶B´Sãæˆ³Ësã„n÷pX°ÝâÕ„ó:S¦ ܇3Ïh|bÂÍ 3옮ÙÙZ¸Èëcɺۂ2“©Í<‹—Lœ&mAIœ½F“å§¿ÁQ¼r'Àøl\l»Ô×tü—«3Ip݆è>çÊEÐ$b#áàT§ùOŸ¸rV½GQ³,Ù7¢rck$Ÿ1üéiSÞS¨œ B³’ÿ¸Rq²Áj]’Á2ê^_˜‰µ¡õdDí—QÀS2R'Î< hcÀ”¬ö‘ž&htR6o&‚ÚTçrµ2¶3Àû¨Š“$'Ï?¹IfàzIN=£-3Öëa¿ìFßfz  +ÄÆófA +­Ã6ù€\ü_„jyIÖ_`vf G°9 išØÇ»i•%Ép²C„[ÚqÓhѤàíA[Ḻ’²îusOª½°ƒ$£[¹AÅ ¿žˆtçYÃlàn뉕f }ñœ4z?yTJ;¸¶[Üv\aû5“ø‹ÇN 6Þh¶À½ NI‡6Þ¢º?;×ïÅ}Gžu6‚oõ).É'QÇT§Å‡NÞJs\A()8j«Ž ŽVŠýÞ‰k4ØV=þ'i·ýëÍ:I2' ·‰D\Nµ’&•mò%#¥M<#€oÔüXŠd\ÆZP¤Ir˜Õ¨_Ù·m‘=%›§žYƒ¸ˆ‹$ÕÞ -ï"¤¼tº‹+çÞîL}sË󞈞˜=dÛ5Ø»pU‚aÔlöœ‘FÏâ~¾å¿* ÏÕÛþA޾¨Hr˜ÕȺ5®á}YØÄqS­ Yâ‰ù7.¨?úåÜ[ço6êã€P¹3ú¶ìpö”{|‹éƳÈ1äÇè ’¤Ò›©/'ûÅ'D¯ ÙøShbÅÛß½Ü-›µïÌ=¸u¹–ÖÉäôƕр£7ý¾¾¶°ÿl `ÄkŸøù»‰ç‰nÎ^Ùqq¹³$«h‘CTƒz<©ðô”SògÛö³©If§æÔ³P´ ›¢*òÐ\ˆq%Sœò€0  ÄÀÖ±™:¡C¡0vŒEM™Ò“M±×Ó’t€J Î>Õ0B-xÖà[éôÍF»ˆBØ=€_/€™¨P §ƒ}D£™¤°ŠY¤qy½O#âK9£v0ʞч Üø„§»äƒ×ôô}ÊᆊÊ{’è´iÐ.¬ç0]ï¤þÆž9Ñ“ó òa±ìñÇS•‚ PÁY—0^C{WwµtaϦ݌΃.]uJ‹„L—L£ËòtÉEz5Zén„œÚÁä„@ôߟ/Lô^2'¿±¡PÅÖÄüÁí‹ìªÓ‹q¥ÇO=»åÂi IX¥aå/~ñc)WLp€Þçÿo¦7tw¼k‚é·”‚Ê&?™rÇ ih„†€²ºÎúÂ„Š ŽŠ ìîíVEÈ’dó3æ=©uû‚ vÓÏ 7Îò™KÊ^ÍD oÐw Ñ––‰ey»§Â—æÈVƒ×en(K†àûmð/6úG&–àæ!üâëQ¹áÐñîfþÁcHooúƒ*«ŽÁ´<ÊÄ[â@œ»‚„‚íáç°ånlY‡/ûn?+]÷¬Þ»ð}„½WÓxNsÑcIR8yÔ]e•ü™Ç2úaÌ®-® ²ƒ£¶&VY¹PPÒ‚6œ}TWÎN^vPZ¤·ào¾sÙw‡N¸÷[{°íá»Âm)NZlt4(Û1MoÊ]á@»ÑY7ýÓµ ™õn–›oŠJcDà¢Oºnõ¡· ïထ$@åå$s)Tr]œ =S¿¦Â†Ì¥»í7F)nŒ, )N ¹Œ,£$Õ“UbL:ÎÊ>ˆ03 |¹+ˆ! »{ ¢âüÍAeß*©ÖåY;iWä}.j²,RqeiŽ7šAÕÐ?aÙßL‚†ÅȇÊVŒzü/(AåùƧâ޳™—´I¿HŸ!lÆA¯‚ç.Í ¹ªá4§>Yñ*£BYhq ô¦pŸSHi™,I‡f D:ù•Ìàx~=]µ|eB‰Ï šãTv0Ö!uÅb+7n‡=´7mgUî¯>l‹òËù‡Îù ª‚~C%8ãèÆ;x)ÎéŠCÒ1½ÝÊÝŒÈõÍ7ŒÒ±Áv-QÓí‡þ*’jSÐ|R‘Ì ]Å.Òü Ð5òã‘ÃMäÚ_Cò™œ-ʆx¢ÚX’C>¡åÔÓõ,íÃKs÷àƒÅ¡á»d*…ôï3Ã/JÏ=ßJýì y¥$MRDV/—Õ‡rV¡úe‚A•ž%³B7±¹¼¸éÿÑþ‡½hñIËfàÏ+ã1=ÅØþ"L ©T0¶¥Æ}ñ0’ÂíÅwI8¨àaŸ<}+ûb—€a¯‰Ô¡SfË=%+¬nÒàÿ꯷ànzQ(ñ @Ì#Lýʸ@W#MS~Çÿ•‰fyIFуÙ™ÃôöìÝÂfãÎs´th,6@ Žß'ÚGf“ìZ¶S´ÊVÎw%ˆêõ$'xHº™m<\¥ìƒÑ’õ +cáäÃÊUL´Ã\+¹.I7¤òaʆ]¤C|C™ÏWowöŽ•@ Sïí~PãÐvZ„–Hö‘е¶”÷\nB~ßËM¿æq$:å¡úýZŠíÌp±É€þãñ­ÓL¨&ŒÅ+aÑwL^Üt±Iv-Û ó¦Ì¦'1Ò¢¦¡*½|³B×”o!×r@ærndVãîAœiàCÆS°=¨!²R+ ™ˆÍ%ZŒØÒØ“LÇ~‹NÚxÅÞ‚¨ÜYÖ¾Ûrsœƒ Ïéî›Aãݤ†šjº†¤Àá :©’Ù`V?ß„)bÉýš€… EªO@»Ä͈p=\“rOÅ7»î‡@/8¨ÞŽ3@œýE´É|°½h¬fàq;¶ãp†sqËÝpQqb´êøM%˜oXvô ¬üb‹áLÊß3Þ õ Yc«Úh+Ž6S9› %àP™KUEæó]KÃ@{Þ^[‡$Õ×Ó5"x DÑñ[­%¯Â&Mà†LbìW( šÚÅ×Mžo¢Ú3ö¥¹ô„ià@Ò¤úK/_Zæ)(šwåæ„.6Ædè›5H’j‡, _`BòE š»ÅY§*O× ‘¢Š£¨° ^Eu–‘ 3EM®t@Ç{§öø‡ŠF‘éÉ¢}×ëÏl¼õ=bhØæÂŸI9à¡î›&¬þEJŸÀc&½¸‹Ïö×»á¿ÈrULí ã×x˜`çf¸ –T6ü‡†ã~WÝ¿Æî „g-´iØ‚q‚x˜îB<1Aÿ³h+üGnÉÚD•„pÝŠ?㧃—Gwbkn4™ëɘ_eIÁèéaâpþØUdm¦K†™ta»˜m?¸e‹J•¦‘Á–Óe7».…‰/1lRý‹Ë†öò–Ä“šÁ»žž /±Ð²Ë2Äñ¿*¨·gäÌB÷þ²Ìúrëœ0[ÐfÐc'ä‘W/ûA5"Tvpãé)³*hêÄû¬ŽWuÂÂí¸ÖŒ° 3#ÉJLøi°æôÊ™ÉÁç­aBL®‰-µ6™ª»šPAêžBR•;—ývÚÈë©o8€'ÚÏJš,š¬À ëäµ/­Áv<¶2žÐ0äZI:€TDz™FÖT˜áy>ƒªd* ¥QÉbSKZÏ>eÚ…ç»ÊÁ¤çáá°œÍJs”ÆZär€4YS*ÁTiª}²ƒL#ëØÔ-нöˆ.À –ÔQ{AïÿÒ·âú¶c|ÿ¡ÆPɦմå^€8¯{ýWË ½‘·uUÅ%‹Ioà™ô1O¼žÐô^_ äïq)Ž®Ã@€ Å1;'šÇÙC_cÞƒüÁR%‡×ûO÷ÜúLXø¿/iýÿÁõ”~ &ú|xïE+Xrp’¬§D×Z–ª{â–·à¸>Œo3˜ÇtÉw¦w^Íöö¢lw Ã–§âa%ŸËŠ0ÌN<•àÿvPoä©!ìX c}r`9ØõQU¬ þ¦š"ކø .-2eñ!™VÞ(øã#]Ó> ÊJÔì@öÝ0Ì5ej$ã$vÍHþà  %#©HŠÞ3õ©Œ·Ú:£×7Ιþ…d#ªxš0ðu&uÀ¶ÉÛ Uü©‹y‘åÚq´œÆS±¸è™4[¤ “ëíXYòÓ0YDJ._÷ÄïÚ~Tò.OåĶ?¯TÌ9å?®sLj½Nø ×q¤ý)8’Ÿ®÷¯ŒtÆ¤Ž«Ë*l¡Ø~}É6HX9ªä•õ¦qIàV’†˜-OAYÓ~0yš£~<·u9ÇÊV–Øû®íŽè‚ëì”g;ÚK›i ðš®ÌäÇ; °hÂð\:HËvkÉb²×€(Œ@ÛO@áˆ5UÈ!µŒÇèQf¹ºÜ8ÈÚövYî~iê‘UޤA#‚\ÄZ寀5|i€JŽéÕVœÎé>/<ÜÝñº¨¡¤NÂ<ä“KÝMÐ>QòCô^µ/b-Ðô~:VœÌhj— ;? +âÞ~ÿ¯~dÕÖïÐw÷¶¨kí–Œ¦dY°“—¹ôVmAúöú½œ¯öžvX’0-cœW&KvèX/Ûï=Õ]Dk¦Vdû†æ¤·=qƒNÇò·á)øÜ›|—£ é06Mÿx~›[²CºA9„‚3+Qo ÏÈc¤R‡aébtÕI×xIÅ­ÆÂ[xŸöã)6³³:avîN±Ì? Éß8¥ýž å 5{ÊX·äÛÒÈ-òô‘;yî½§ÖíMjk å{¦§~D=•jàM\Ù’,}RÏRIh~Þ{8ÖÑÆxE#÷LÇhˆlø“v™©Z²Iœ'U>&”.ÆCºÓuNz§­Œh§gO1pcéNøäÊJuéïK‡Õ—÷ðÅ(­OîÕS‰HA÷dì×ô;¸î 2ŽN~{jïV©*Áì>¼,]…òKé˜Ö+ÙãPLv!aAÈKiLf2úžxàó“s+_ÚzB}c5nV´ì‚SJ×4cu­äIo•-ßü“b‡-•Å|1Ñ…ë Øw¨ñU%Fô^u;gRÛš+ vãK“aß®ã|Û;GDÎ3p” ©·±tÃxçÁLÎ3 |Y+ 8Ò_“n¼g|J@vb&&;ñêŽW´´½†Ï=.ES.MfMíxÇ%R¹Jó2¼$ µ_D’™…ßHD7¸‹(I–<ßõx1wÑ{òKþJ±J¨0S\¥I"YëZ¶—Tçñ2j= !c3ºI^{²+O¤p¼¹\‘‹±’¯£ ©Nüø*ƒ$|uqi},‡£dÈÎ4½Í©yAkŠÊ¦ºWÅ éÒ]Zb±‚¦÷ÓÑ #ƒÙ•%®Êû×ñVÜ:Ï­+æ•õ^ ½‡Ï墬e¹îMð9Yð¹døéµÕTçS‹Cb)ê&},(ù!蕊!2`c¤éýô_Ë·ºvTÓÖ³a¾6!–Ød1¼ˆ±ÃPc«Ô½_”?bÕê¿-(™‚9ScÎ tÊœí#Oû¥jóªgÉòà´´d:^EïUÑ,Ϻu~6L†Rý—:ÔAeóYà[gØ}ýö •,D>»’:ÒÓmQ‹ç3P#r†-G³={е%ßä± ®q¬†é×ec™%ÕÝПé|,ñ3ËvðÂ"5ÆIítÇwÔéi_­Q±wR;yŽ¢7•ç1N!é#ÞqPõ^mmlH»ž‚²ÔgáÓ3-öáÆ=Àß ÓUVaŽd"ëÒÕYóuIC‚J«Æø³s¤ *f2ôĬ§¼± oòXPBäèÎ!ÙpH€ÞKŸ¨FLú½Wíå§}dA]ãì«ðªk@e1%ÏISyCVAÔ_ûŒÓ8u­À¥£>:‹éQŸõ[še¶Ÿ ¸[*°4ÆQ‚ßn€ú‰>(\FÊרj k`€”GåÖ#çòàH¥=rFŠíã\‡£t§Â 1)Åþ­¤°8â v;ŠEs*ÕSdKwÂkw Þ‹`L-C6±¾³ÔÆ oWg²=Œbå²™áFÊÆ· oÿ¶”÷Z)ë÷I§xšôÄ@M0ŸÀÈÙZÍvìIÞe¦ü°©å_~EQÔÞˆÙ=LXž¡Û¤–,@ûZ ð÷Ô÷øMB3TlE·ž0hÊš;†Š±dÕr¾LÊÒ[ – Zr»öKd\Itü]…B»aoE qq²5^¶™âsŽí&±Íw´‰½–„"Ó6Â=Zº ·W*5°Ž¥SìGG³Ô.çÚC\úÙˆŒÂñ‘ËÔÜ~¤²ü×¼ã¦5Me‰=íBÊD Ô¥FéÙ×òv°Ä!çkRm±ìõ*ÎWoW6ÖôÃv©ÑÕ-6RQ;öÛò¯yÝäÕ“.¸2Ú£?µUYyÉ+#znÇ拉.“9Ç!‚ I^ þ€=}´ø£€^v®$w“¢ü\ÕŽ^ìRžØmÇMþ¼"§$ ¶ípuüš‘è­ì©kªy"r {9[ü~ÒfX®Tv$Úðª¼ÒÖòLû.è×¥O:ߢ“~*Òž6 Àk'Yo_JáhÛ¥;•vy‘Œ¥u¾+@d«"[¿ ÞK«“d’ÞdŒÖM)ܨîTê>Q¿fzO%“ô&£ ·î„5 dy® ý꽈{áÏ|óu£aéÜ5²ÆåTÛÓµ•ºTéG«e[9) Ûv‹ü-”ˆ/;6mãåt ¤Nº ôEl-hzÓq6ýxy&ª‚AM9fÚ-‰j8¼GÛýˆHd¿dku¬ïL_v…ã¥rÃñA ÀgƒÚ9E°ÕÝ¢í™V9IoãÖì Ì]„›ÒÉÞQ¯žFä” —Á;UO¿.ö´#½Ž‹ü“°ÀŽ˜ù4ÒI÷Äò–îdÕpÇ2;“MU&”mÅX¶ L²l½Hø¯ÄÍîÜE.çX3{j_;ý#à#í¥ÚÛm0S¢w|W·ð;õo§ÓïÅNJŽžáí# FNÝR÷{PÙq¸)ÌÓò«Š!/ÐQ×¢'ÇÀTc±\>%óíN©_² Rª‹HF”PZ”:)­5®¼ª¦C‘EvÁ%`Ê<ûQô™Wå´|;¯PF _À¢ÖÍõ:ŒÎ+Æë²wT§Õ±È  –óQ Hmýi7µŒE° S*.˜ôl²ä§éMç‹%#¥î¡Ø¡]ðÚ¬KÝ^Î<ÔOâsÔár>…4-;öd· ¦àéü– ’mxZZ¶)6‰ñ¼ ÞÌ7tɹº€¯º ôGþÈÊz‡µÈV~ãhi¤Öù·¿*iºº(HÒ×L÷‚·ú[_ï´lRO™ø‰OŒTË«µìÖ JÝ'u¦õ{¦o$-å™nv=3LÅq,”Ô(Ì¥…béœ[_Ðjä]ГK̶},x' (çÖ;pLŒ7|G*u¦:ÌËèo1RaäÀjÉP!aHnÞAÇ AßžŠ;-rº6q[‚IO”À‘Ü_—’Ô«•ºËü‹kA’Éký›áÀ#·)µ´êëXÎÓS ØYÊÅØBZ üˆcë7°eÉ®:¢‹‹¯5Í¿ãê¼uã‘°IrŽ™þ )ÛKí” ˆËAíw¿{e¬¬·Y¤I¼ -;Æ&$Á1HÖ{5ßèmÛ.^Q‡Ý \6K¯€ßC9µëœè!ó·t~ µõßg²áFÐ@\pv–€˜£ÞìžTÖÐòȉ:xÇ—C8·¾§Z6¢mWº,ìaó¥!Vÿñ;ÓÄÃ+þu︅ÿnÞí;½“÷´/„VÃÐpXÄæ&ëí6„´F±|n¸ /óméð”]ãX³–iz¯Îø2¶W€ô@œ|À½¤á…¯·t’¯¤àŵ*R³§Œì»d½Ãpi+’]ŠÊ.&´ß±Møîƒ!–ˆåÁµÛ—6|«O‹Ë·ñ3zÿÑ_½Œÿùo¥ÿizÈQ¡ÿ«Èé|0guŠŽÅÔA—¾gZ·1÷‘„q×»øm#3"FIBu8aÌäë|jP×ÖÖøÎO{”lÝPKìGѽ²c I[ú¿C¼©xbæÎݘ©/ = xÎqhv¬ 9‘Ãì˹v2þè÷ G´î6‚wrD’ä©u¿é!ÚJÌI¢¢îw™«®)ÿœÑœô­}b¼¤|fŽTw';ž`y{Xw¡êüºä!2ŠA­¤wxz„ÛÛÉ»`¿µ+ƒüpzV‰JqÀhRûÐÖR b[ç&#zܾÖK%E;Újù"Ä“r× åe±uƒõ[m“ÎÏŒŸnï*¦ â’rëËn (ÃE ª5.doVM'©s{áÁ*îáÖÚ17Ü™ö‡È³í93Ú.Îm#lh£ÔgÜV¤¤Ÿ¤ÁùXXrÀ$Kn–:‰ÿЂEœA¥:¡Ï$_¥œÏ/Ѩ.Ô—"ßN…åÔc`ºR—\X£Þˆi¨uÄ„‡ªËÔV†ª·brAúâ|¯±U‚½%¬â\ úðÿŒ½W;bêÄ8¹X9”[~“K©Æ7x‹ˆ“.(FËScjïBÞñ›ê=: «äöòk¥þÖ ¿v©Ù“”€ÝIÆäãÝ+'¶sÀVq²¤û&Qšs§ÅdX©>Wq¿vØæ¿0¿ÛÛJ]BN–üèN0ìö€2‚Ì]­†ÖðM¹:S6¶W`W¡Èº¸8ÅYô„ä¾°Ý‚Üh)y{O<(£’Ë:Z× œd8Çôœ$·ó©Ýõ&c|4Çå{aLá¹/¬ ÎG@ôÙ¾DôlwZµxÅ)—h¼ÒN ª‘¾\o (ÃE7ZªµpGÔ힌crˆ¤/Þã3pL í ò‡\ÄøÄC/‚$ùOe„ø“ú{.¦-=í3¼^3ržQ,E¿RÝ›²î €P[Ùay3êˆ2@yÍÐ:-ؽ.‰,#Úšg6î5gü¡êdÿÒYF4[.¼NÖ£kÒŽ¨s‚Q‡?ï¹ -¾‘KV|S¦ 5‰˱ÞL£pCª\eLAÔC|8æ}a'G.Ù¥Ô¡}Qu@ÎðäÜ'çÍ_ùäÈI¢ µæ~SdÑr¬ M!\´ˆÛ;²¿ð„”ÐŽ•Ä܈NûÓþk­Ñ0H®ÏêGDÙì ßr&D» ¶IiÜ\.0 8åE›-C—0ñ:g{툴;ÉpÖA€U—0ILÂìØ£5m}íe@lÍ®u!N/w¡%6°°’oмª8/ЃBëBÝO²òžt £ëx[’Z[@{@Ar,{]YF´G%ç#2*ùË~Wv«¡‰î‘%ŪêŒá…$yè? ~'‰F kÃéí‰R«·à *WC§®Ö„œ "XÆ2 "ÜîÊ4cýBÔ·:pç{ íN2Wç#àªÈˆ»Påúj;öŒKV•Wɼ^¨·ò¾°dÍCò¶øw˜áªÔ­(ãö&@î(y·3p7î´ ‚†BKäÍh†®'¹!>:ßIæ—¦!3KµÓºvãf,ô.¼M¸$?¾Aú+ÕJY‰òöV(eŸ±vMàƒPH±è®êß?I'ò=ÝÞsú•òO£«NØù8\~åIȵ6©ñN“p9jW7¬ÊæSн®Çöyç%Ú,EÜN@_À[@Tžiå«…¡‘õ±,…7³CÆVdŠg3bêôFö$ú8Î"j:¿œx lÏ€—æ<S~¢qR%{_TÖgä¤ÙÎÛ»ôr¢Ä¼éÈ›‰/Ý©e{ï}Jy!°àb›ÞÓ9fÌ;U#ËÌÀ´k,sªÖi×€¼“¥“¾§×y³ WMD¼4n:oj—ù²øãŸæ¤ÙœQH‹”õ¬œH3\¢ÐµÐÈÎûûû'éäH\²¢PÞÔfCådn—V:Êpá|<äÑV²K©Ê]»B:ùIô¡ª(sª}˜´Vjõ0Ãå.ʳ÷À±°; ²ÚU²Í!Êejhe»sô…¿QÄ„¶N{àº÷ìq-W[Z„­úh­çâ*Ù)Ià: ÚÃRÛ'®Ó·Hsv ´ËV|L„ ·€—¤¥Ç&îÜ‚–öÐë„äÃI†³ï­nßâÝdTªBë3h?Z¾*x-§!Éö?®W,ìˆ2@¡(£¹ÎÈùX€®$ ¸‹W;wí;|žVb™ Ç °T§1‘,\»9±"®Ô1¿¬Z3‚\whoþ¨à²:M¢¿ÁC„Œ0¶0T”¼ I@.Õ™Û¸GæÍì¦2€aí¥"r ^u¦JÝQ÷…1@Ip5`/ä{RŸÓò.ùËÕÙ`Ç©ÃPxs݈Æ( âŸy¶Iã¬þÅW’¡=§£û]Ù!@Úé—ìEÕÓ錡€ÙûrÎÁÓ¾}cÓUS T*`Þ>?íúø9wðG¯Ý_œum•/áiÅ8Têðˆsƒo’<…-Ú ìñæ{ì¥+}SÝ ‡êœzÐÏÀoÚ ÷íßÔè”mÂ'ÿD>h®ò‚4úé|Í•éÊÏz!DžRåJS;o*"yWk'–¹^/ÞT*D²É3ò ‘ Ú+i,Srèæ‹s7ÁƯìĪ\q"+·äÐîŽß<‹I(, èؤ^ÿ!F6Å)Žl`uNÔ„Œ°÷)º±®x2vȉ@;C9«T•9˜6…r5ÙÕÂXs‘²vKô“dÃlÚºm²1`PÝXÇD˜:[‰ef óƒ;Ã4Ê€^ª Åq8v6zIÝ ·’Œ¸5£i‡áQŠ÷ŠN¢þöݱQD9E9WvÌS ˆÝ$“T~°´´\¼ÉÒnúÃôq›¸φ”Xþ¯žýanììèð¬ñ„ODzlø5õÂ5ÅâQÜÉÝÍ(¾œVßæKÕeµ\M–_ɻр C<Õï2.’è†JáHf>d3ÚK¾‰¢±¯´Œ„‡Y›¬ÅïŸÎ+û À0sõƒ&”=[$8v[$Μ¯úf¶†ã¦aˆ/øpî#òƒKsãð´«kçTê°!öƒKö†"ÁqÄ›<{½#wÅ]9³¢÷Ûá±n„B5P‰ª¸7àOÁ(l‰à ®ß?šÉ„oL¼LVZ`s_)Ïñ|áó«ð&áªW›¸ÏüŽÁC3u††pJ†æ™ñãë”n+Ô–}¾("vžòÒsa·žÙJZ,-¡ƒØ–±üêªQõjÇÔ@µCõ“þ·‚ Œà&rk»°íX5F¨ìGWh´ø7“8 pÈ€Õ„ã‚GNZzp¿ù›Ÿì ¨×Æ0TãpZ{.3»nÈc'Ø÷EÕÚY±DV-毆„ ú„E9Õ£N"Y¥“©„ÇÃ`ðn…òâ•miQ7ò ¶;¾©ËÕ1QXåPKù˜çS%DyÍ,öƒ-•§dhdÖ–nsÚI"TÔ–Ò’wp•p*è¹òIºñŸy6trqdï3FÞ HeBÜ5¶)7ˆOð]PHóçèä.jSv‰¦H¢fM‰j9'”Ÿ0ßI$„W]ÚÙ¿üO”!rkQPÝê•\ÛFÀ àŠ®qá°;+änbªtv „Eg=ße…’xA }&‚@ˆáÀãôfƾ¨ùo'ÿØðoéŸÄ7?v·z&ÆmkxÔËœ®R–{,¦û§wÙC¸JðÆx7¼9Þöï×tWK+ol¦¾ ¬JÍžðž lMè›å/COwµåJ¢U çtôÄ«íªk kë9ä2©¨+8%M€ ¯„V•ˆ@Õ÷4ÅÙ©$#œ¤Š‘éøb®ï†»À{ãò¨p5‰m„[·R;\ãpZ­øj'É;°¼!í…¡1QVøCȘOì¢ A£zIÒÙA‚“_6—eÃgÞ³%+7uò§87œ®huˆc¡¿ãÒ¢‡xþøŒ’]qOA‹Öéóv¸ÆádµÓ|‘dŠY º\I¡¼òšæ5ÏÝôâÝ( £7#D9r‡TĶÑPèàÒÿVã.>LçÅ>ëË}>ÛJ]Õœ¿Ü;dœ¢%h¤µßñ'qŒ¤9‰¼ïÊŒP}ูóâ5XÁ‡µ §¾ z®ó‚ÍIòîí’xóŽ¥*± ×”¼/ö¢ËáÌ€ÇÕ,)rbo¤ìtZ+›–¼@Zzp·-þ»¼ëeÍEåjÐŽ“¤»ëBY½*#°L)‚©zc:çœxÍ*ÓSÐë#È.‰™¢Æ RÑZ¤/`“ÍTËu±ÅÁ%[²%‡¾@ÂB›F;rq(–êj‰Ê­¾fÄ99KmBÓ3†ÃŒÍvtÜKtåÆÈëHµÀo¢“‡É‹Âi(íX”Œyÿ?¥ž³NâcJF@ÍL`såÍ #-š·âÙ®FÆ Zú”R5Ϋ:èÚ”(Ÿ:ohZáD*¯Ê”^*ó—M.²ÉëÚªiÓ(‡„“‡ÓÕ”2r ËýFÅ;D Ye@D£æJ´3ôe•WÈÇ¡MãFC!QVèLÛ$ØŠð"ŽQ¡ ÕJyj¬p0Ÿ Ö–J‰A‡®¿)½öO‚À\4‡‡D€œ H$›Ái½ýN ÌÐLøMC©´hbÇ›sz”ÌNššÁ4ªÌ–Æ€.èÿ&„Ä‘²dpù’ƒ{G;#̃¨ˆ­ŒßÏ ß,ùk´¸!a¡z›¶N¥ ôBÜÀÒºê Do¶hk§ cöꋹGÔ s½YH¯CýÀêà0åݘ[§ :èjÊ4B@Ê ‘¢ª´dðÍ ”U¢uûFùßh±ƒ^#…Zú”„€; ‚f¹šð6±v‰%“.¶FŸlTê•«i 6#p8¡TÌ–€I(¯ÉtÞðè; Ü{†F/½áÆ¿]ê7•h¦»‘4ƒ8 RiÝÐNgÇæ¨R!bkýºY'îÓ³ú€§ôÅWÊÎ)IkWe÷5_ŠÛ:È^å‹7ÃÈ_7IÉ·)U_© ‹›¹Òˇ“xÊÎâB¯ø¦{ÿí½¦\>9÷ú‘>žÞ'·¬ãcÿ§Tso=Õ'ÿ3“%еÑöàhüعý†JÛÓIpW?QþéÖ¸¶‘…ù­–‰lS£Ë2†Ò:Å;Ѻd÷˜T76©`Lj|pvnžÎtãçwä«.SÚœ'Ú–}N[¥{'B]è}ùé†MÖ€ûQ*Ÿ=FÛÓħÁC8®û>IøœÀåU¬¸^—}•^Ð|6ýOÖ¹&¸jÃPxs݈‚P#ìÔ67õ]}ÇG’IÛ9ç“üÀBxd2©—½ÝÁD¹Ü€*™%ï£Tìsx$°§™Ô©rr¿©Êö…BùŽZÆ¢›d!dð\ÔïSÆ’WIƒÂØ­ºqˆ'Da'æ³/ڦКܤN:Ì;›IɶCà IÐ:û?$ávùÌ8—«­åŪ^‰3ã ØÅËJBl>ƒÝM‡Ã*j‡[d^66õÐ/‡{dÿTíU¿šuNfÕ ¶¼ h‡+»a½{© Gu(ä¢:õ¡ì–ÂéÌŽ;åkLåäõ#Ðñ¯ƒŠ6Êa܉þ޾«—šW±2=¯¼¯üWýêÞÃ9•|V^Ø ÖØJ4°Å…]P”pZTÍŸ—.бp ['@Ç»‚þ‹tÜ|×ñßu—Ë“~oôÚ lªÃmAv0L²„3´ ÜSÜU3*Ã7ÉI;=(¥á<„½Ò{9gÙ %ïÁÙ _Ý Lt8¡?gÏ Y i-[¥ %UNdK}C|Y"™á:`ÑscSTêã˜éßüæj$Œ)ÿe²•jùp5,žÃÝCЋ‡¹X¬Üᘃ¼*´“èN7ÞÅñ¾q(`_Bù5üî3_sG†ï\Ã¥7îÓDtÀ1ç a:;x+NP…VSòh6è"ôòœ2¿ë3UÚéÐ12_òZ°ôí·(„P=gȃ©.HAÝ`À6j}Þ9,A9yA ’¼VorÕ_œ;<‘²A¥§¥¼=Þ3ª 8/ŒÞŸì}νȠhZà…;u6(Ù¡R *Ÿ~Ê;:_jÀݬƒðÍ:¾£5%‡ø°E‡9ŠþíáB(SÊÉ š«pxuØ12ãW”f‡R^œF›-Îâ[pï]®º ªU<Ó]¤ãæÕ°^íX wóƒ*;• IùµHï‹UÒ¿Ê›NÊïru£N;ImoªŽ•é\È=°¼Øð‹îä©~Ôò¹)^ófßÄâ©UVé|ëê§2¥¯ '§’ço^sÚ¯j¸0 б5-ð$srý¸©aÔà{9ºÀ4W`£+€M+ “õ÷¼6þÿ€îs”<ѾœÏõfÙHïhµì‘Ö»ä7"7?£†ÎÜo“ͦ\ÍûG$:`>S¿ýÆñÞ„ùãGøàn.í0P¯D¿™“E¦fö†®´g ðÛÅø‘…s€(à´Öê×—×iQÊ7I‹ôÜ ‘ÁŒFÚ‚3Ztn W?](ߨ$ª|×ȼ°3:_Öó•·K/´ãëiý=Ÿ¦+°nJ;px5˜fÇÝ}9à*¾Ç`ØP#è®Ò>ÅK‚ﲯ",z‡PbøƒªyÑØ9¹WsÑa€î ¢X9<ö²àè1¢hñÝo”˜ó¼ ¤’pR†gîðbŠ´u^,Ûí0ÎnÜð ǹu‡'ê0ÂGf`)¨étýf§—䨨òŠl¦XK鎘9ÃO©žûÓ àtã¾+¨–·¥}Âc›at߉E¡Š…8íøw†ìa ÷^ŸõF+õ–7uQ£æ]½\[/ž(Y:è„©â¿…ý1ñô¦øÊÐÒ/Ô±içâ¶èRvF¹Sú“pñhE|Su¼êÎ7Êöͤ_Qëw0€§)íl–Ü«¹äÝ l/@cU®†GyOÈ;ôÅ‚ÞöøpBͤIY6E!¨ºqkNÂÉi˜w{®Žàí£±ÿWnNŒL—-<¶B‡l«‚Ú9™{_¸ÊsÇî.˜"8);Æ!2¶ÀëWŠÃ䊼|®Ä/Iä.”ƒ°6¿Mû@0k€zÂñÔÑ š3y;@X#'핆y•´ck}6ÊM¬³íêðy~`6«n þåÉ;צj å—¥p ”Ú,Í^¦YžìT:@Mç¶4ò1`:â¨êÁË ”൲)wxy>Í}•ñxͨH¶\- ÞúÅNÌÝèMÙ¡Æð¤Í`åzÉ{3ºèd@h·Àw‘߬?Æ”L±ÝA\ÍŸ—.бÐVÛO–#¯H}gïꑽ3öÜ|šÒÎ\ÇFã wnuvEÙH¢\îRŒÕ±J99­z1üàüUÒäÅA‘*ÕSMt¡­±çº›$6ú¢Ò‚JÕd8`Õkn( NÎÝËsÄ=2`T¼ ‘H;»abAÕÜö#fÈÛ}¢9jàÜÉåŽí0°"¨(®¢ 5Îø°øÒóv¸­à ÒÞM Ç~S¦ö–æ,‰x!‚„À¿WbÜ"yNE’ÖLW²‘µfJ;pr¯á8¾‚E‡&#p7PÉläw£ƒÇâÕÖR}Žî3ÑD:Ör<¯&í ´`¡6õy(‡cgq®e$R²Jœ Õô¤ °>Ÿ®´³Žõ ®æ²ƒC¥œœ0-Aù+ê'eüTw ç>4˜““ä RœP wP'¨šruïæ’w,Ò õ¨Õ:?W9†˜weøËÔÿˆ9å›°Vy ®plP€®J¸öboÈ›«ùlP†£¶Ñ€µ.ÛË©dTjs à†ØÍ]éCÃèQ¨©>?AêÆÕ›Ö8›áôTݰ‚@ìÞ†m«ü1IJ¬ ª½÷yÀqÙŽKtBJ×9ýé;VÙS®á'eàÅÓ¤›¶™]•4ˆõgC—×›fBÕ”ë`eÛ±[Ùƒnp§Æìð$.{¦~ưBiçWŒ³?¯~5°i¢*”on}ñ0ê\ÑRì)ߤÍ‹$â\ÍQ¬žÝÞÆY/]sB‹R³4˸õZÞ²MÎdº3Ü»¨ÂöÃ4µ#Ü3>à×^É…E¡oS®æ’÷:¢Ý Eoþ䄨²ÇÀ¹»”»¹ìGЋò8)ÃËÕás\ð¨àãš5æd éM:nÆð-ŠÊÃm^+Mq¦(õ ès‹µíxqq%w¿µ\®†àx ¸›íÀع&¾QºQqDCõ:Ñ ™²ºWsÉEºhÀz‚_ й6G›à5õ›V >lÊÕSll&£kÙ¹WsÉ»¢t{qžžvv«áËrlç/Ú!s…€hk>z¸äÝPZ_õlNठÇ1 —Ê“$™ÎšÙÂIÚiP¼?ò²ßuBð  žJ]\O©ìÐÞ> „·A_‰"ÉðH ìäj.y7°|{yøèùgÿ•wSªð—)ÕdÀ9\Göç¹Û¤×1§éMÐx+ÊÕ ƦêÆÝ ¨ôëø·fs!P0eóTPÑvÒ¿±×‚fŒ%St ’ ÞLÓÕú$<àp+4?ðFâ,”ƒúy–‚v{)É?,GÜž’wX;¦é˜M3Ù>ü–ú(RÊåmÁ›ÝÆÃXðMP?x“„´“|‡üUxygn« #`‘4¹‘þ7  §pôÇW¤ç1®mÇõ˜.JÙ~lÎÑPL³Y;Ý{¸lA~HGÔÝãî˜á:Ðûyu~"a÷þ.Ê(¯Ûá6»x̵cÚB¦–aí²Q…IÞásƒ¡;©Î¤pð²ÍùÀÓX¶D“(ºZ¸®L憬í?h8åmQwè€Ãä J^ø‹¿P1Þ"¸$4È e93zŸ#ÙHMuÀOªx3¬›·’'$:Q:÷Çk;¸e&'ôùí ò2Æ‚^‡¨¨ädT¨.ê®n>ß]€x .%àjltå9g`±T„ú óÄÁɾÀ·dóâƒÂE×Ly²CÞçÊcŠ:UÖoW:+Ü®#»…q|ÛÁj]T2\£E©°KyâR2³·þ•æ‹äœ–¸º ¸p›ÎÎÓv.pÉ k‡DWÊÕlîlÓÈCéhˆcÞ5‘‚úŒi‡·.HË´¹x&·TN'ßLóXsqk¨Ð!ݺ{>!”¨Xͪ[*'Èñ,‚òÊY:;•Ñ<è\Ý9aÚöù"êÁ®\§—¹À$#sõiš ê?ÅǬ*/{”פó§HfeÈŸ”b¼[\lè/L Á€U3Ÿš×‘§¢w˜¼yö¤”wÊÜ€súà ß8L‡ÃÜ@¡N€õ«béU®æ<ÌwβžsCMÈnLØZ“zQ‡+1¨48§Ý¼Nšªª)\ÚcVÿ|suðƒ)ÔÎÆk•<æí0ï¯îßÔÐÊi€ ¥Iƒw[ùƦ§Í`‡’±6s¾bsr> }°ê®À­|àÏrå„Ü⓳uá+§œ†æ+rú¢¹—†rtáýþ§Û“Õ¬rHtvSi§‘\'ž£ø ŸݨváAs“ŽþÞÚ¾Qí®0ÑÇ œvóv„ëZµ”Í¢vyY5[ÁyJž/’ Ó©öÛWÞe›¦rà³Tü@m!ËÊFjðæí×ÈÄs";aöÝ|“ò¿´´„ï ÙDåxú÷9¬}®,㪕 ¼½Xg@e.9œkP,b÷Ô!ª ¨XÂ[SBï±ü„R)s„óJ>û„!’úr÷ŒÒ{–«dDQ¦á®Õ¬5¸OD,7—íǨ޲½”g_¨Ü:4NÔr‡€­þoáú)ó¿Ùt}ý4ÎwTrD«ç,«’¨Êª#'òÒÇW¤w𔴸ܤì|½3…k@Aa `ßz9£ªtiŽe;ŠRÞÿ›âm´^Z4Zé4í;ûÿzøÖü¿S{¥3øOþÓß’wøïÚoÊ[eê¼}gÛVÞwð]òÅ× ¨„#rÜÄüº*OTSéìÛ×NÚtô.É,NmÀVÔJF2d~Õh’ŸbÞ_ã÷p¼§¿ç+n—i“TNx5E )yš’i˜M»ÙßnÞ­Ê ‰H90§ 9ï6ø×/uáU#-€ÿlóÇÍÔ½(ÂÕäÍ9…ÚÂZâYÖfsžÁË…Ø*A|Êá8L[™äióvêuz|RŸI [*oŒJ9Qíl©]º'÷b.VÐ-ê„ð­Ô|,]ä´¿“†ë@ºP}¼˜xÀßS´XôÄl™: ï_T4ÉnEá­¹ÔÞ)Ï.:g$”aI2z–œp^8iwÓ’‚ÐVé¤Ö§£1f¡l@\å€þº$J%¨°Y†¡ëåz]*>t¡p`ÓŒ’Ê4ñ7¥ÙG£í5mSžvL‘2õá æØòF{—ÄÆí×´jzjÅ;ä!Ù¼ü Çr³Yu;)ƒž¤ 9‡Ó-9ípEÂa•F?ow<ß]Û þ)Qg@qj.êÊ?Šoj@Á\Íå9 f[ÀlŒÃ®‘‰Átñw—³2€ìyi¸Ž hYiê€Ä¬\ø}ëpÒEØ‘q7sÝælœ5ü"é4-§_?þ!eèÏuÖß[˜QÞ§Ö§)’:blœ*Ñò.Dƒá?RöCy.UM9¹WøìÐêÚó‘ä¤~r¶ÿTóE%È|25è5ù%-}] •T·C¶¤ŽcÖi†r<©ñÜžcãÁ‹ Ÿ÷Rð`eúÅmž°;x!ÂÖÃq9>øC•áÌ ^ÊôÝ?ØÇl Õans:^ 9ðTèÊü‹†¬”âLøœáˆTeûBR "‰Ì"ÁÍaùЬ>:ÕÈ jÐ]/–¬cEy_ØŽÏ»¡ßýŒ€ ŠÛ?livë° …ÿw]íB ±Ð@¤KRÉSV_ë èמ“ð~DQƒeM&¡l³6&[T¨sÇ9óbä ëxÐx¥í¹{ňÌÞF¨vÚ"F-8ú8LØËø}B…ÎFƯ¦‹siÌB£6Ð}o„ºyL#P®iÐqåm½Ÿ3¤îXY­=–ºb}úç 8yÈyå$átÒuìú HhP §²˜¼r’pKumÓG¨§\ÏÎ)°K’kð¹[v{[1O¬VíãNÈÎ;7NJ­Nˆ^¥Ôÿòƒ³û{M·„RN21Odèõ×sî—ýfe^0É4èi'g‚½L£±sç¤æ‘ úØ©/lÍ|ž%ÛÙuóÊÝqÌèI&ZAÛò`Jµ©aϦÈÛ\_ÔÒ˜† úœS“$úcPÅ‚±Q¨W=yàêŒù;¨ÔÖvJoFàð$ š3Ž}NØÈÕmüÍxÞhœ@sÖb7cŒwti^¡³Õݯ )øƒp ƒa¤%ÿ°þN²½›;ð™t¡;_ºmä!”rJ²²h™=aAe#4¥ä1: »¦¸¦éØŠQ#‹mxºè!*®û­Æñ4ßúPz ²;r`8Œð‹-&3„{µ½G± À£Kß&Îìr…'%…ÿœ˜Ç‰ÛÂÅY[ø×mún-ƒ¹#Ö ðæÑ£~9ŽdµF-Ó¢?IÄ©mAݰ¶¯I‡fð'ýðCÅîÏvs) ¡¶êxi'$Ø~Tårº«€ES³øêhwÊ.}@å‚xeoÍ飞J¸œó¯iõ,@ÃËJ „Róî‡#¦ :jºpv!ÁB” 0K7ÍÀø;h£š<*úæd³8î?¡rµ"¸ú_/)ý‡±˜õ½â7PAÚjH§2îšß„dÓ´Õ' !íš" òe´ôñqÿßçGþõAHì XRªg× PGlFè—Ú mì$’^¨ï4äÀÙ)rïÜzOE“‚„ûP¤ú«z½Rü®fäXÅ »Ò¸ µ³ÓÙ]厜‚J¦’¼&Ž ñ¨~4ƒóñ´ΫóJ84sü& :tâ\îÀï– TRr¨¼9]‰=3N#SNÛHN÷”n,[º¥mx9Õ¿”¨#ÆÅ µAwÖ¹¥ñ* @ä# Þ@L/œo|Gå~sR¹tÎwÕœ„ê‡öEßÄ5È‘sP’•å Ç#Ly8úrÈy¯e{Ùܹ‡õ ¸ë@!¥î1/,Ô9MI-ï+_ÓÜ;ƒ‰Ô—8ç7c…•hľ½¿û_zóÓqw®Sj³¥šåmÊþ¸¾[Ñ}G¸¨ª§«‹>‡—÷ò}¬6òôûÌmë³á@>ðÎli\PO¹sW°òW:ˆ4o£ƒ³é @«ÅU³. H+QG©{ÔÂ宺k’ AJµ¸â“ë_àªPGÅdÈÛŒ¾ÅkdtÀ75Æ„x+¯ý"ô®<®-¸[Ÿ@b:H B½$N¤™5§<Î>MãÉÔ(2v©h|oAnjγÔFÖùswDÐdY3Æ’e¿gž³­mfðfÁ˜O[ÍÂ\Vć ×HÓg4àBl¹´Ú³Os•¼O‹¯wç1ÝžpCGÿ+°´†±^Y3iVæÔçBùõ¥ ¿Û¸s-nðŒŒw¾Ãtøœz?O-w6Œ§B²P1 ²²-Š„„3'²•úa:T г3“²õÀîôÄ/Wgç?Vç‡;:æÛ³°~ÂðÀœóïm¾hOížè—ßaIÜ ÎZ( Πq§”a ’,(×4˜%cLʸ{4òû=L•ŸÇo†jq<™\›wzìÄ0ºXq½pªvmÔÎ$Q®¼Ý)z`ûo‡$ Êå¦#DŠ-ÇÆyeNeµÝÌ,„©Êå&Šöà ” Aókî(¨¢ÉçN…þ±RÛ=NÚPRfê?9G¿úðòW„nZ’ôzºrvðð-»sWÄõuCWN>cîÔ’Ö¾uÐ '’>ì°šò ;; èRœ'¤ YP¢¨WoUFÚ4¥Â $šŠævD½>µA…T¬<=9ײ]’ìØñ÷@|Œ]‡ê댮þÀëÀô¸©¯8”á`2È£­ìÜàpÀzï¾€öø¹ÃxF¦PŸyœ'®eN+Á…¥•EM%ñª>ûahaŒ\+Ö’ÿÊ ø,„}¹»Å\6Û[Êãî‡:jI&rvÔa×mHß.?!r/ÆÍè÷:H1–¡ŸåvæìTO Š»=ȘP拚úÜ5ràlÔcéjÇ‚8_ÀBϽñæËü™|Ó ƒãˆÅ%Ëé1«íR9^ƒ&y­’·Å8’GHR¾‡ÌM?‚ê»[x_Úb«8–`W<¤r=*oê.H£Á%)>ð²(e#{jy‚·Õ¿¯úTS$N¤ðÜ G[aÐis% ’Ëx®^ø©v¥ú‡ fUO:#¨˜Á¿5¹ƒ™£ýl¾Ö§7×Õ^0±b-xêN,ÁyâÙŸ\‹ÓyÙ§!L¿Ê2Éë™D•Tü‹Õ¿ò™¶ÚRqÒéžzOÄMúê$Pg.ܸ'a4ãzî$v¤øKG‚ÄKzÜVÞ&vîÎØÕ½r¶”ùf¹&ê׫l*évX‚P5¾fj¿ˆ“ÙTܨ݆3Rº#Ü÷[ê¹´¤Õ:^@ É£Ayp¿U~ˆ;è@\g „¦© y1Ý2ÖÆÆ˜7’¸bP€#YlÂ) Ú”ôÝß7a(GòNô€F=®»]ü*½t¸rA|ÄP=R{e=ÉG- R¡Þ8'íÄåaX MS·8‹ÞÚOººѦÀYŒex˜ÈuC£Ÿ[n¾—•=÷2±ºœ‡¦I\å(Šc°@,çÚ¼ŒÉ”“(Qƒ^š¢¯1ë΋ÎÞ<Ü$/Ùalê˜2„“ñ/…ÑÆí—`z¿ÛºÒ+=jÙn9!åÂ*\SîûM…_ià "ýÖ[݇[sŸûØ“`mçk}D8•wŸß¬®âgjèÛ‰{a±Â:–àq )”MuDhLÝ<µ¡F8Y™ûñnÇjåZ\[ÌRjsð’XF@-ƒë ö.yu Ï~Ïf­UÉø=â@tƒÂnj»·e¤á’€ ¥Äý0Ã3Ì…Œ:§I¼%„Åp@ú"¹ÿñ(!ôÃäƒÚM9}‘êÈ»†<½nùL Ü÷[g«ÂZñY‡Ê í{}B¿¸@Ÿ”ÐÞ5¤—ˆè^l˜PcBªìazðñù™>D5»D ˰ÝJy˜LÿyЍá÷BrcòîxxŽD¸6œI‚Peš_ #K¦ânP ×spIùš8hAYãhÉ-ª‡ù%7üû–ç9ech£2¾©gZ°üå®Õ0ÚpØÑ†µÁ&Ñéq$tгf˵:Tq?f–££#:‚äõûb-öà$ÃC#e\`™q´,–'3CjÃÀ–¿Üµº¡æ‡àDi§Ëi(|sš “9ú‘¥Û³;ž‡ÒëlÝ'ª8!ÚÌUð7)lO lrÁônÕqþαä;­ì›n«ePCÝSäZrà-X6H'»¼æ¦|Ó¹&|(ò×+"éA"ö…—¯¢×< ;à›<6îê^kyUy¤íN„^³³2÷ÇÇt'ÔÆ-õ„Y¼_^Âév}hj†kQÀÌ<÷?.îÞϧÉç)7á"/é½Ï†¶“Ç ;¥ Za¹ =¡¦Ò;”¿0©R‘û”TPºï$˜Ê=m–úì·>G}õ^ÒÓZ/(Û)©M¬Ýƒ‹Ò  î^8;ú¨÷¿_à äqM‡Ä›ÛÙïà^ëvë‡ Î’,(ÌPù%“v« I£U4n‡ê9( Ø&ª·¥9¡á~•aA»Å:\9%YY.8íc£6ìIrêÈ áZœ¾É¨6Àkí»Ó‘nLJvø$æA7´¤8ô;Í«üõšr*¸ÁöñžŒªÔµ`Î+'Y\a^{ïipOûx:_‰à€yo48™Úé¼½ý$ÙxÜx¦Ÿ×LrÞ?¨=PãÅ{m…54%*ø%ƒiŽ:qì Ê¥öƒ¢š–‹2L™ГJ±ìžk#Ã#£zXì2ñöË=¾_µÔÇÝg^{c!*/9Ò×+~P»Ywv\¾j»óJ/ÃéæF©””w –J£ÎÔéñân„Íäæºq¾uж}Ö-ð=®‹jà ÷ß)cížÄµG¼¶_³óït¼”‡¦ÉäC„vhÄ@.G†øôa œYõµd¿ÒGmµÜu>÷t§‡½É€nÓY8kÁ‘ÊH‚’tÿëJlHÔ`I}½6›¯Ê/ÂÕˆ—iµhªÅ—~+N Ïs®òú»»˜ÉåŒZÝF6ø;jÔ¶ VnØßHÊ;÷‘‚tã‡/©’(=Šå¹Y³Œ¸#ÛN#rFöz5À­·ã~rÍ9)nT6,#˜šwç#µGjœÍÑ ¦øÄ {ÊyOí<ÔâÚ‡ÞÒ ΦÅÕ"å)UèÌlUõ¤²b¯†ôàáÊÙ¡ïw¡’ ²!¥qçÚà=w2ù¨‚y.­›óŸ^?ÌW¦¾°-Bfõ¦³‘šT<;‚÷iH"…ò¨V+¡Å;©±;$õÃ~éïÍp*ïÞÖ¸°æãŒr€èÌØ©¡Š²ÏMGg×4AärF ƒFäÿÒ‚ÍxÖúöZ¸dÄyò ܼtÇFÞTm&r`’Àf‚1WHä±â` aPŒªÕØ„}ƒûvcÁZT¿Õ×isV>^Åq­’îPýÑwž}WÊ{â¦H›©yÜö¬Øj=”®—äôïtËNwövÿSÓ߆ kB×€nWáÅËŸ–Uü.p°—;Rà<¢÷ð(«cÝœÚu£nK•­ 5›Tã‘÷WœRÑ´6èàìÊýþ¦{¾)§ã™ ‡¦éCÌ“)jÖ2!µk2Q[yºoš ×D ™hk=PLksM¹i#G Œî¿n¾/¨âðÓù2‰czb=4Ó»“×âaÇRœe[˜v8û‡áün…_~OíÀç”{:ªÝç‘zPÅCªiƒ}SõصµtJ4ÄÇó”NÓ–íì£qŒ6¯“åÖøñ¶u|q!¬Ü="shÂF¶0µà±×±~BàÓéÍ$Ym‹‹ZçÁe^{ø;6«`« 3haΫñ©†•+¿~ x­CžVnnüDÙ»ãüî£+‰ÞD¬ÿèÇßüÇ´”÷Tb:éØÞóÛ‚œWÓp#‰øÏ[ýŒþDìZ"Ôƒi„‹Ã˵FÂÔzsk«.§pßÎŽ·ÃûöèäÙó))üõ÷ö]&¤–×f¡¾ô…oßõŒlÎ Føïöës¬&Vœ°r­hkîÁÃZ[aß«Nëá8ö;œWgÛgÂPËgï1Ç~¯r¸²fµw³t4ŽÚ¿ܿ·¥·ÚçZ7N¼EÚµFð56=—X£²Nòê:ac¿õw°ÿ‰EÃÜÉvf"L[—ÇbÿL.tÆqFbÙ!X¹–0’Z˜Ž‡íÂ\#•ü,éWÞÛ_CxÊ.yøä÷ýå×ù¹þj²Q¦çÚ«æw¢Dà“c…é™{\?¸ Ãyº{ɶ—éãc7ï›…ßU¾º$ác ×HK$‹)ñq´DÞ¦@pŸ}D¿Íz?ÛƒÚµÚ·>]Åo._1¬xú$Ü9lÏ¡?ܧ¡¼û6É[ ¾ÝGä½l ŠÝÛ{h-„#C?Ȱœvø±>&賓ÎéÍeAÛOg ÂJò‚ÿ§nï±ÿ \«=’¼Û’ßó9ÿe{øƒ5„ð#œßck€Çûöª—rWÃãZý/-îŒ.5¹òðºÝ…‹µÉÖðà•”ÇêúƒùÄÃF.aû™–{®g;b1ü°;…ÓN\ÐQ;~µAVë÷oE¹T29xd¸ŠF8e×$FÇç‰g7ìCÁÕä— hÍ®›à.×$Aú0ãÍp—ã#4VóKa–RÃØ°„9•7 kš­Ó*%ï&ìš'$YP.7¿d48;Eaâ¸×/‰ýëEyO;‚¹ë•,Š-«–Ú´D\Ò"ÜðßÒcõž{*cBšÄ)/ÜùÝõpyAÞè-Qd•`á¯0Þà$³~}ž=²n—•é·ÜÉsÓÙ¹§ 2±*b~OìÞN³«á ´` ®è…r?œýQ-žÿœQÝî]y·9<.å†}’ÝÜ‘ý’÷H§'ÊÄTñˆÆbÊí¾Ó ×m‚\±!¨áò’˹– $ƵMЂTLHsü àØ'X»hôóþGÁ¯›ì*Ì'g¤EÓöÝD.ëûç—–•T6(´f´k—m>ø“ —«øþOHЦœ¡w›l*á­¾=ç8‚¸ãÚ&\7m„”­ÞÃoÃ{ÐoÅwsÝ}ØÏ;ýwÚïèÁ“6,Û¤á4<Ý þŽxm b"¥6Èw‚V ÊsOBh÷?'šUЉ{ú ±ƒöd‚>v›l×6{O·Óú±ß„-¥²2÷#¬Ÿêúz…¾RIû­[=n¡žx s¯­¨že»³jß-« ?ïÈy¤ÛÚš$¯ÜÜÀ¿@4H³éH¥pAážÚ$$ùëŽQ)Wj|ÓƒI¬˜w€3©|Aê0¹ÇO»vvÐÃD7¼%q.4‰³âX É‚r-«š[žµNsØ4ë%t»‡ý vÓõŠå^q~Aa)×”Ú†Z0÷±˜_TÞî†7J&™)ö;÷AHù<îàÎ.œúa:\1"•Å„šÁA…¸cÈ/X6'Ž\þÖҬ垖¢1P»³qU>1C-ó}0F'P®0ø´Ws †´g4å¨EÂ|S˜ÚV¾^ }¤­µÜV/1©Eßp²˜Dk^1w˜P38¨ `ù2‰H¡F°iú¨®Ü‡â— fC9Zh-õ Ѷ²\á¸<ÞÌš·4KÀu£Kõî†5?v2Å…(Îê†Ð„mÒlüÒþ5ža®hÓÔ‹Ñã‘Ú¯OZC³ªp߃¨ÏÊMÓG­ÐH»éHAwIÆåÅ䬸û+hÒ :Ĩ¯À­rÙÀñà9¨iV53² Íxå lEÇ 6aA_rmµLXb¨á¦]@:L’ëà¼`’7#—Û8‹ÿR¸>‚#îwáá? (e£¤õ¨ö^Ñݺ154¼ ¤iòIÊc»] H±ã4ÈM#iS ©¦‡¦­>i§ÀØÉZwåºq¹EÄïæ‚á4œ¨ PMó@À)I°qÕšX1L±ñ:Kúf,f\aæ]Á 02KÒæ´´µ”ê}å2ý7¹Êå´äjož)ÑàÛ2HRh*Æ\Ÿ¢õžÔ -mÜIÑ*À_ †Ý×ã€Ù3óKF÷â{ÒV³P*wŒ¸Ñ‘­ð­6W¬ë`­6š=ã\Ïn':°§NÝ€'ü’Òà9YNøÈôC·Ô½¼çÕŒøÛ òf€ú%û<ÅÁáuŸT¹6J`N;@1ðÇQ0оf³¼þÐy¶ZÃvkšzC|[u@µ¹^7PI/ÁÏ+”ôo>n#¼ÝN¸¶Â]#è’E½§‹)p’ôVA3…³iw$ÔTϾ¶¤rÏåáÔ‡‘PGé;˜€µ™¤Qh›€õG †xN.“û;R>5Ìu6d ,iKJ7®ZMq[9Q¸:³tTâ7b‚G]ó:›iœt¶¼.¡#¡ÜÊ£% Âä'' §å¹$QÅ7.Åš‹TÐs·PËB0øf,¿k`¤M^R£¡ÐŸªßäêõ…mÞ±ëšdA¹`júRÅ[ ;¹zàl»Á¹ÝZSÞ¡Aî‡Êü(w @d£¢ ©)TÓ'WË:= Y•9¹öÄyå$ïN.ó^ŠÊ– ýœ7Ìy(µ(Mž4¬á–w×KaPã$Á(iÆÛêOÞ(0†mÃÛp-12(5¬.†´MË_ÍpyÉe0sŠßµM  M€³Í,‰èÏûÁœÄ ›bqæaçîÂzV?…©€š¦¤‚7†1™V‹«e³@îô‘´¯œ6:žÔå±üoˆPï®r9rÞ­¼T­~è«—µckúØêý!\y0–:Lm#ÌóùÎ3€•"žÈÕmõFx®ÃQRAõ_QIòîäZ½O.§RøÌ7ìG‚%SÓܳösB’‰œ'VÞ”Iä”ÔÌ”»Á-õI¾ûp7Þ gwßXÏÂD÷pÔ—ÄMø{8Ñcxá,X¢Ž¤T 7Œ §l,˜¾ñs1÷:ß±p=@ÃXÛÓÌv?èÐ>³ƒ½JCGiçÀecÓ\}¼ù+œ©Z}dû£8»q,¤+ MšA:Òðp±¹Üþ„$9¢¤ývz`Ô†×˱\*˶ç?˜ì¸o`f}êe'tÅÞ²QÂŒ+^xüuå$y1õ¾(Ay„zäÒàì„)N”ËÔ_ô÷|‚’s-jÖõ˨8Çêú•Ú³&éãj\FìMä•_”D®ë‚NÜl ¼Žçtï'“,~p7¹s©Ê±ó9ȤNJ¢¿Ç/Á(ìæŒB—ã)ÚÉèøE±Âq^¸a.,>¼Iq’¿ ¶sGïH¡½užñ3 ¥\ÅtüFRÝw†Ã°ûF $ùžØ8öàÀŽ>ÌyL3j‰’¸•&ørꜳ¡ÐÇR³¥Çˆ’„¹DbŒü)¶ÈCOÀ#ÉDšÄ9[Ö´³£’ú”9OA­–0ºí„#3t¶´ ó Õø4êæŠŠ‘Ýj˜iPŠ ÏÎSébö’B±p´:k8l?V?›m)ïì(ª¤²s,ø†_A4ÄþÀ˜\7àXݹàxÜ“<íô¢ù–'Ô‚O+…|pq~-ˆóDkœr£Q›»g÷©0~Ú(0ÉjMw–,pöS[IãMøóëagw}Åî8"º®°ÝweøyÒ ÎÆµÑ$>ÉsxL% ’Ëm\äØ  sΓ–ЍgDN}f·”“Ï.Im"M²YÃOŒIà É¼Ä1÷ÊÂiA Æ1ú¡| Z,oaæ'LøÁ9< sýíÿ¼ð[iÓGqÌ9¸ž=Ìëƒ8çîÞL9‡ùcÿ±àÕø¼žTœæÌÞ›»® a Ú/»9zSÖøwÊÙžý0ßó‰ÚjãXäGSjªsOð[1Gú×áì,n<™ÕOÒÔ«åAµ€ZR±kán„‚ õ>—(™œ†™4U. rMôÆ~ҥʯ#Að1v«ÉÕ1””îÒ”%•rÑ^š ·ÐÝôäyHKíAœ :w£Á9(ÉÊr­=žžûñ>› Mb´™öÃaüÒ„¦tT‚ªñÁƒå\ËÄï­håÌ;äqËgʤ‚Å´ã׃s½Ò8èCPÕMI-Ðúùé:Kõa…†Ã·*?¬y–´MàòP$“íVýa’4( æ–ú®ŠÓµ@Û<>+ D6*ÍÀ;ZK&-Õ2¹Ú¦VÈy› 3m7~k‚£l Ê_}mé SoÏ$“»² ß`ˆTÊ/¦tn› 5ìG0Èæ*—Vw0š7lªXPrMœuª@Ú‡‰‚¤²)¡MPã^ °ÆÇ5ö7ÃöÔz¿÷íAr¤‚ëÈ/>âD—Càœ5}Vÿæ½ö¡³Ì¢RÈ„ÚÌ£1v'jözv2êÝ‘¿dSè_¯YÇë[M¹$2Äò šÄÙ°v‡S驯ŽM«YrP3 VWN÷7fÎúäðÛ|ÞY#™ ¦S’•åZÖ÷}8Ú­õaÉ1ÂZý5­ÔLdžñïÄ9>Lh3Àâ!‰\ÐúLm Òà¡~åb²Q3šà-UTÑ[šƒ0‡î¬5U. žg­}QË;Ó§b¡û¨ø‹‘lçä² Mh7ÙåhI™LîÆ€mSy+zŒ~ºß&È5q)€v›fÆÉêÐ#JŸ*“ß³ ¦OÈ'Aûp¥DÛÊr…³Ž…oÁÚ¥0k½9ýòe2#Ý…6‡f0Ë|Sq¥f„éÊåÆkÕüÙäjYú€ ©ô[¨ï&^»Ê¸n©ZìüüDíB)×2ÒNv…f Ԣ̈́S©¹É Z .¾€µ¹`NÁ^>^ ·_®ÓÁÙñ¹Ã™pã ¬¾DÒ‡70¨M\Àº×¾ÑçZ?Ä#íÜ ¸<‚äs†ªç½ÍÕ¼kŠ˜Ÿ÷¨[T­ «I嬂CmßfŒž’˜Auà*¸"š÷Ÿ'îaðî’—‘WmHŽy3~ÑßÀÏ CSÖæ0ð$bvd‡éÄù¨z>vHÉdêCŠ]œ Ö%b‹”ÿœœ¿¨(5rm÷[Êy¸l®r)a*Àb…Êä9LÎFA ˆw¿8`ÙN7›CˆŒ[º¡?ÞåùiÞM¨pyÉeìm{î7zZ?\¯Ø ùk†DSÚÈ¡Ì*Ab ­\ w°ßÿ ?: â2 ÇSP6“$ “ $SQ­%+ܜ⋣k’•!u"^æø…ç)ÌÉV·î>!Úƒ=m®õGáG xº]IÄtP1Éh\h† ¦ž÷±LçOj|Gð04àQLòe€oMŠh@±yvßù ”ô ƒ1kQ´÷¡ðM §Žûš”ôM®øÀsƒ‰ƒ­î‘t¾KjdŠBÎÍ€Ë#H.cê˜Ö– {(g§ÙûXŒÜéxª6•A¦¼gÃ*&h­¦MãÊcì„!;±”ì0 ê¨A0O yî§Æ™Àþ`E1ÀÁÝéCìLXðf…Áy‡¼Öš;M0,&è©"5ƒYS „š~{ÕˆÛ«Âe`yMØ‚ä ÆjáSrÓœ°Ð'Zå§¾„¸$ñ@Ï;¯E¿¸¤F—O¸X>Âc_S,©|úLÅj_ü*wZ]d5šØœ­9Ü–1k]‰é8…+®t.£û)äê«§Õýr¦?œ‚gx;G ÜDpMC¨SèìÝvƒ¬pÅ-qÃĸús*á°¸#ÏÁ *g\wƒÇçcÏ9_Æ6Öù~ݻ™õÊ¡Àkâ:fÏâ¦" üÖAŸ1}‚9P¨÷Ŷ`Ýc…ñ•¤±þ ûàÄ%{ëé¨kƒad©og#àb{’ç $ªrð_ õÕqV7 Z×­Ž2a R›ˆþË5:g&¸š°Fí[_XžÝ•S?Ç‚œßL’¿¬\KÀÌuØ{ÑV“dZL•ÒL&XjŠŸ§(a& ›*†Ä@.ÃXtxvZœ0×jPÔž×N‘Ëm(‹±®sz!d=ÕªzÇBgpüè­ÙzÛó€ËIr*”Ä\«ƒ7eR(t°¨ˆÙæÑKZ¸òæn†g¨J@¿+|ÂWwaìnOc›[Ü·çd¢õ€Æñé§¿^l¥÷Ë€]0¶ÿz¡ØÇn=>L¤Fœ•B“Õ¢`7ÛÖ‚½b8¹ßÇb~)Ì…Þ¸©v.‹©gŸÅXPÌøÎ áf‘ÕùkKÞ#Öp„„ú[™µýkDq¿ ÎîBA7euÑÊH.Çzpa4^Èd.®*ìÛ„ß&²¨ñs÷ãdôvAšÄ90’Ϙ³«· ©“Є3¦7M-j^–%Áðø}}†>¿!7sœ bºÞE7^Ñ?ÈÃp^Öh4¸$Ňߵ<ü~»÷ÕÁ7sÐVKy‹k7(®Ôœ°6‚ƒD©dš°É5eÝü¤™Áå± Wð²OÔV|RsŠ „w%W´íEZ3¶ ©4ºRÉû„(ÿLÝ z¤Q¡³½N²z܈ ^Pñ ãÙ•ž\Kÿ’›ó0ºTÏÇ8û0yº4=RQ°±>[#øáB®¨ÖƒíË> p³õ Iè—qm¯’ç×ß‘C¿Û;'T þŽxm7–ïo1'ä8‚Ð ØZ ¯Š6n¤iç®08Êýžµ™ž øôtHŸ2n%ˆÔ§+MhFXEÁ¥®˜˜†{ì@‡µ‡yvÀÁ“› @›JƒºRÓH=»«\N³~«Åóa(Nœ´ÇÁIÞ÷ãïÀ_åårßS4˜Íw¼Ñ pijÛÅ7,®§š¢Ý¿#à‡7*вAºÚz$ÓHÝ mì¤thKO,# N4ƒx@±MÝy¿µ;j…ëÖëÐ4Ýq©¸µ]-Øö´a<Ž¯Ï“Ñ8¢ˆÕûVšðuãyöçÔ>ü…ŸðTè%}¿¢(ýH”L`÷TRÞÇ w~ÞPõ³×8Ñ`ÂùUâ Œ8þqQ}&I„O5Æä‡Ð@Ͷ_U™¸Úð/¼>Shš†YΪvÀÆa-Ìi5y1U[ǯDbŠÖI|¤A°ê?S>g‚àMêªv8 F®#:4Õ†îÓ…¦œ*‰eâR½‡í+?Ó@µ’ðëÒ1Ù‚Ih\p>bòà¬|ÏoZP”;*†»=ÊÔ7o/u«&{o8z3ŽthŸöláɸ¿ø¬Ðòn‚å¢T,ÆIŒ.Õ3 5Ë<…L°±*N¥Íi"SC?œÄUîöiùå› >äžÄ¹—p6Ý4l3O¿np·òìuãZnô÷ôÞl¯(Yð-Ž vû´ƒ8‘îÎu–„ ½Ÿ*𗌽Çþ|Ø.„±ºíQZéjHíĤþÐE4˜d16ì{B²#µ[±‘Odµ‡gÕÚUOÕŒƒæl-™Ú6 æ¢$xT2+sGɃ°¸ÿš$A<®0²0>[Ý#¬6NiAŠÔ'/4ýQºÕqž¾x£þ"s§ÎYçT|þG25Ѷ8É Âû^ŸONâ¤Ã_7¤MÓ$®ã2¤ÀŠãZ%]NÏ=CÑ®<(óÂ}Wá±[é±'™È©œ˜gįíŽA9mN›eù‚¸Žb³wµ¤rÊ ü‘úýeô†AM ñòx9,•7¬ˆ*:ÒdΊ«B¦œúat©ž‚×+ð@Q?Ã%·ÉHÀ¾}®? èÜijñ˜zP”‰çaÈÛ¬MŠ”½Ñ§†Î¡mÓFªhשùHHµ¸r?œÆe4¨9µ$Ï“¤–†¾Ï†>¼Ìn¯¨³¸’:,.„š‹Jñ$¸¶%qäó¤Z&v¬´·Û¬cö j+#4ù<Œ½Âè¨8]=o‰éée:ƒæDœ‚r`q¬Gšhƒªkg\º ¦@4a&Ê.ø& ¶¥\w|Ï[¼­&kôL… /W̤Òyà£ÄOÞ¼èJ¢Š¥SQþ"NP!ÛÓ|Õ³éJúÀÑÔMy/iodûä·–À 2åZŒj»@¤g6ŠšãHDéÙ/ƒÁ9Ãc—CÝØwëp·¼9Ε°Ú ź‰GØþå”)MsšýÀsžÄ± (ðKF'šÃq•Î…ïÉv>ÀKc¾}„û£%èáÕ¨ø™ÀÕq?þŒ5P‹:©´% æ<ù´j¡#6€žçQºp ;³`|z‘žÚåHI&ê‘‹[Žœ%8&$NäÀ9(²c•‚ë‡al½0Km_ÞIåkÔ²2gsý˜±Ñ’{MœM2<[ Ã?Ü•j¦ âÈÙaÌrÞ4îuâµÖAä8‚8;ž‡’pvè3ôK Fþ ‹¯¿ÙØ&<¨qvòaó+é0çgd·­dœÒâcçEƒL=kœÂ©€ÛNG B3ènO-sQÌ„Ït PKA2c SŸ¸,æœÑ •~'=†ûñî1|îû±˜McÅü?<(ðlÓLàÌ[=2 KŽUÒhÞêÀó01rþ`Ø!Þz$³~Ë$Œßáî¹{^Ü£ëÇàþöåµ3uKb@¦<#œ',±9VÏ´qÊ{X<)6Ác\’( ¬0µéFÝ‘ƒÇFò÷·ÂtîF˜èÇèð˜þÀçÊ>/«—k¼`µ‘W8¯íøåªw›ß½ÛV’F5ÜC2Ùçšåc†%5rµ@½5$Œ\aG ui8qJâ<ÄŠ ‡•?,Fóñüïê9¿û¾¼£Gš Nä0gºY9¿˜d1gÃ9øR¼$5§{G`­s ÖCMIRÉ'tù•—0:*#å; zî®Ôœ8I`™˜ƒ–}Lü%G¡Þ•;+$Õ²q¡ó0cÚ“¤ƒÓʲš>—~«VÝüR˜³_ŽÂ…”)§ 2iãl˜„S8Æ;­"’é9j ïߘ# ©l§¤¥ oÆñÚ«ÕöÕ®m­ö—ꇷוFÄ[Šb¹õ(,9F7½p48\9%YY®pœŠ›˜Àð©žG´s4a Fó|Ì~Ô/‚b,Ú‚—±gsždA¹ÜôáãGA hgvÁ\‹E}pñÎ/½ã«uŒk-Áça<ÈÁ:Œ‡q(­Ü¦AëÁIÌ=Éaç<ñÔò)¶j„?aýžÀàóP~î8“5Ί¿~'ùÆDÿ\ÞÔ/ôŒî(\EL‹icGή¼‘b-¦ƒó$ÿ\¬y×4™ˆ«X6÷ÃaܰR´…3tzË@=ê¼¢XË…e¢èÂÙ¡“†Ó/aîAÐ4_ËO"H¥T 89ô²”º*gUËn…ròÙ½‡ûÉt§×+iõ£öÌÖŸvrÑ3¼«j¯Çíª]+i4¼¥0˜…Ó>Áí׊@¬USÞT»‡µsgÜ«õbÖ›ºDÿ9ýÎ< k¡Þ5¾“,……Ëàƒ¡ëÖj¸î/€ïÝЄæ4[– «<ûWØ÷ù@ã@¬²Æ£ò€ Ì ‚~MH² \n0GÁC¹6WN² \n~RÛVFO¨µË7Êõ,t` Ô‰‡û¥Å½5@¥ ïϸ¬ïî!F>‚ÁEX¿©CmœO™M`_®ø‡6ë1$I%“2·´±×ó·Ÿ«ÙS±7œÀÖ:»)ßôǰY¿aµžÍÊnšRé4Égcã„óÖf>õÒ…¹ã.¸äön‡+s’ÕÊ5]ã«ÎM~sŸõà2Û<Ûœqa=[ªöO&*ù‚ÅiS‡$}ý¥dà–ÊÞ§ì³*iÆ-X.u¸a Öy ÷½æÕöf¢9N ʃÂÔϦ•Ó›ãn\ÁçüKÊõ#‰´åe–Î9:GÝ’IjN”ÏpvÛ,Ì)ƒŸB0% —Lø•hsbÀÉtX f]¡‚Ås¾S;»ñ(n©Ž–[ÂÏ:|6žš¦Gr ,aÇA\‹›ÁBÁ=-QŒ6×$FñÉ#ç7)³S•;a¥~3×bÆÊò–ƒ}¶ú²Qó4ìõfÇê…[ç¸ö˜cŒa /˜p¾ÔðL Õ|zöã/?VŠæ·3sy¸{ÖŸ/kÀ«ènSMίèÓãrz3„óׯOSÏ>³„ºçpöèyhŒ7ÚŒèð׃µ¸b)LŠÏ”isìõÏÏOÎŒ®¾}&«Ïß ,jw—Qyèbp; °4¿I‘ŽgmIVS0û0å>Úú!ècÿlU ÞseÆ9EÆIAÍñ›‚¶‰è Iͳ35§(Ak ‘…1Šî9úÓ1ak SÛÊ^J΃˜è|nðlœ¡N òfB ­žBºÒÝÛë/Ýÿ!å4Ð `ƺ`X†“—ÔG¼¶/㯃øWKVûà~‡åN nnú °ça¨º÷¡[º©`j|õ|éÁÉàìЀ÷#ø—”OÐÙà¿ÓË}°¦çñ’íþÿÆ»£å}ìtÝP×çMÑw5UööE†åaP‹Á7)ˆÁ ÂÉñ2Ì U©ÚÀ‘r:;£3º5«Œ$äŠcSeÎ’8ö}Ò6kÞ„¨rÅØùIZ®Hiq\éà³iÉ’ò­?·<;èÐ4uRà õ!;gÓÎÉ阹c"v¦ ßZ‚ðõ¶Ùýì,䀸¸ÿ“ =pgÚ ÁwNªƒzæ¬àg®færjÎHe›7!¿{ÎKäìa.E²PÍ-å+x>®BhÁ—æMaí@L|q:øiê¦ùxá‡Ãs²l«‡u ïg¢1§Æ9°¸hZ¿-€÷NÛåDÔŽÇ÷j\&VM±D§¡MuçZhF9›×Èê‡Ãø=Rn€“ŽAžºÝ÷&`-D:vìH0EΠ„Ô”êÙ7Ñ"B¦‘Ä€s”†;ÀŽ©(UÞ@\f«l]ø‚óU¸|ëÆ]˼Ý÷ ÂI¡U}ð‡ KŸG¤ÕÑþWBÊ*)“žK£KFçp&êø—àk‡¯u´+s:ņ-Z4[‹b=à·>‚9 ³3×gÆ.à6µht=yoôäÙaxQw²y‹xz=ÐÓ;ˆú}$œSº‰³k’ ¹îrcOùì F ü­¯T¾¸<^á#!)©qVb•ÆØõ¤ [Êf꾫òpªè¡P&¬FŠM n¤é¦R4h«‚]p×Çzx\Ž»ãàl8¡žž{ÝmÀhBšÊÅDµ¸&qâ>¿ :Z A‡ªwcx'B’«LËûáôKFºÃƒñlŸÑ0hÞÌÚÈ k%0ƒñºŸ ^¢ q‰}Âý—®sKo]·¡ð{çÕ3FBd4é’”³™Ñ×Zæ´ýö׿À«¨‹eY–ŸÔ˼ÅÎ?Y­õþó7D@!¨Ÿòƒ¯¼ò6 nß„“y¨«X5Ö“ o®I‚dϺ:«Ž¾{pÆP9&2á‚cYŒ`oªTM?/QàÖDKÜ»WKõ¦ÔnCï¤ÓGÌS ¡ Î}]Ô6ÊwGîˆÞûå…­ÊSÞ ¸¤”!vbîš&4 ÂkãK£Û¹›« 'L3ïXrÐ冶ŽÔÉEA¥¢Õói‹ùÔ%’¾h‚ GŒÆnïØ£žÙ__üätÒM8º~sFªûÆxt½á_¼Ç·”n¶ûn(·/é³ÝÒøƒTO-ÔøI’Z ¾2†»"÷û/߸½še=ðÒãÐñÜ+èÐysF7nxÓ:5Q ÊŽþ: ÓÎdH);œ&–“$É‘LF˜J…4C4cèÅ lg’É7çNNk°ˆ¡}Ñ8ŒÕ [{'ú×b{²gæYà‘š«…kç´’Ö†£cØÑ)øw†8þAõï@ûøÝ†Ÿ)D Öýù]©mþ[;‹Ýé lsˆX=9…ûÓ«,^TÃò6\[”ÔÛ¾Ýñî$( ÷3œME˜&¦ ¶=óyérÆ*]‡²ò“ò¬ÑjÊÕ²ü²÷è),Þ>„«fˆü2œ§]ê`ÓÙ§-¬Ó n¶-cª~¯~ž› Þ©r_|^Ky1…†Ÿõ®s2ØÃ§+y11ç?œñjåvœÎ~çþ*d{ÿß’½²%íÕ©dU¼P(V&ˆ³æIÉœmÑÂbÉàËÓ•vÐùÁÅ –  ŽF»Ãaàâúy‰‘PkЏèdXUqúaØN‡¨øñ>°¾ñ®fŠGŸ&Þð#I1¨&É”3Þ:oнlE ã»°­/n€)uWLŒó1£2.5Žþy;½Cs¾M’8ä ©¢üû‘þc5F排^ÖkùH&ûU YÄ©+HªÐÜJ<©ëædõÞÐMÐ2ˆ|¹**Ö£·Q‹ >æ}C.kóÚËÝé%éÉ)#"hÐÙB¦}{PY‘v5þs]m¯é(ònò í-ôQù ÔèôG}9›ž]ëQÕ”3ôÏ…ñ?Ð/nY‡ÿÂJøâ3])+Þv‡^Iö++ÕôV|ðµa¹umb %eý.8Ì–:ž–}¹l¼'„ýt·Ù/1ß´Câ÷aúã™[|§ËMNµ?èPo%·_L^éà䆒扛>§9l9‡;žÐί6MçÉeÂFBÓì#Góºþh´ß±µãr&I[Ô³S wþÕF÷x86˜ÕfaZ»z‘¾6w8›ÇNöËpÏ3÷?G`]¦·¡0KŽÍ'6'l—å©Ynï‚dAÓp;î“›SäGî ècà1ºjntàä¤c¼·À§ýt p/*L{±Pݨ+4·€½@û#YäÁOŽNáˆwË0úñë?•:o;·¾¸ÜÎà(£C°þx{w‚¡ ÉIT"¤Ä"EI¥ät KRN»†Zr/pµ$dŠ™s®÷*Žü7åC+\yÇÌcëû÷•ÎÔÉÈÎKÞÌÂY£\§âá7nör:âµLç²¥|@†¦TM{'%llJíáp:ô ¼MŒ*B(€ãê;-™H(»rÊ(’72ÈÊA¾·ÓxsMbÔT£Èµ×9M ,D˜¾˜>¬͈Œàl¨CŸàÿpÇÐ…u‚ g"‡j`›AÃuU@MˆÜ')˜u§wJáh_¸[{áì~¸ÿaÖ¨¶´`O¢ÊEU¿×´Oʤð4I‡h_¨p'“vêèˆN,¨"ö œ0 P5M°ÇÛ··ÝÄñvü ꆄó„ôÂy IúžùM俆8Uld ÙC¼'«Ó89{§íî ¼2o«að·ˆ­ WÑJØ(šé›¨x7ú»9Ïë:ã-$ _ÝŒµ„=ÃÝ0ê䀷Ó”<ñEŽ¥‚ž—x½W:D5rÐÐkž©~ÝZ6¤,t¯<»§¦Ø<•HP¢³¤¼#ö¢Š¥¨i'S.2©+áE”€S໣›ªôœ­ˆJ]õI¦Q™S'…ía!>*lA¼)fR½ôJbÚÉÀgïJ•“8e2Ðϱf^GZv¥«2ŽàFÝ—É{ºÿ>’߀³Õ~+Þ÷„ë,zëý;Zï$U*½{ˆ*‚Œ¢7äã ²ÉÕ*u ¼‡¦_wrE׎ÝÑ–#,9ÊpÂ*sk5«Ô8ÝGMwzŒÞ#zXƒž¼“¢ËÎI&–Àþ÷æäŒ¸¶Í§ÆŠ¸b&ÝŒÆÍx ¡œ¦x­…ÈNÂâMµð>!‰¡©5¥?Oˆã^¸üväΛ«š¦N ”Ä+)¸`›ïðQY†#Ö”/¼›âzµ¯¡4^-Ü–z:Tñã9ЊEyrŒ†&T%üÞ›á…aò¦iW4f؇£8a•9eƒv:tƒR(‰pìö~p¨Gwf‹p_|%áƒçàJ+{¦ÆvMÉ$+˜”Ýsô 37¥Ô´W)Çá_Û\½— Ÿäw$æ%bn×׿¢¦Ûh(sÁ×6¥T'z{1½a$jxK1íþ)7X¿h¿šh0BQ·©tÚîµ½ºu¨ËÃÙWL+ÛocyÖjQ?xÔ€ø2HýÞIaléó“8»Ekµ·¨‚—‰ٱOà’)Ó„QØ=o“"Œ½TQ^ézVš¹^1Ç11«êaµß‰³ªÍX;qaôŒ^‘]ó,cºÖ/rB®\£\êÛVu~uÆ1Zü÷E½Ó$ë6ßäL8—ÌÐzU‡¶Mð…oî I­wË]îôJw²ùŒ oßàÀ؇&z‰˜”02[r˜Öƒí•7o“2 ûo×éÇeW:Ô¸Ü@õ°ƒÚAo«Ï„4Þ&5£Î av ›k’ Îܺc³šdvx‘"®©“â¸ëHÊ;ç¤Pl}ÆBÍ÷DŽ[*ú9qN—K8ßXSf[ÊJGªì-^œÉງ_P½ô§Ï'ÞöQ6 æÉ?tã(xüÇ6%¾ü÷o/IÛ£ÜkRô1.‹ž$bOuFþâ9ýw¤#ƧФœL7×$A2ŒËÕŒÚéÐ'ðˆúa¢ Ìb¼z»¡ U åGãN€ÎÙ‡¥“p ï­XµÐDN”²£óŸe¼æÊòUŒ;ŠÂEN WÖÆŠFVºpeêÃ/«o’'ïäˆYD3Eql„¥R°íw™¶Žš?Çw ïjm‰ó½»æ XÈ›Ç-×ö0Ib€J?dTxŠ8è”ó>Q@çŠ|Éã4ál€¥Í"ãÔÌúcŒ†¼!Úþú«4;B–+ÝòLwwËH„CÓø@XµT9r{Ï…ÒuzÐ WÞ'hGôlœ †jçm·3¸»åGº§ P³ä˜FoX4ÈNðDnÚ9©ñ¶r’ß.jÿPP5Œž´drEó›1'ÏEÏ2Âàb•Ûr­(c1k±v:]“~ÈhŽ2®'æµÔNN~‚õÌzû•“Ãf «ÔOˆ@ê”²Æ i¨´‘/ÒÖ/n§CŸÀÛ‚I~f´¥!RžeGï\2A{·i·›cî’B>Sþƒ}G ¾ê¡DzöFÞ]Ñc&.vþ xj‹‚8éMN1­ÏšRú£*= ÊÖq<´+ívJ µtßÝFõÓmÊŒWºš>+o’Æî½ ¨1B ÜNgY¥¯tË£ìœÉ¨È]ˆóÎà©‹O7^ ÚéÎ)Ö½ñƒ3B›Œ½(>“ ºV¤ ÆÙ_ãÂÓd†ú|Žù²ª~•ívW»Ó‘$‘+Ö‡Q¶ÞÝ9yðjˆ}à›Š”'ëÛ?7ñ^ÎWœPì¼iäH” 0•7eí%¸aŠ åî0k’øä lfpÒfl#:­’aŸ$gÙƒSQ?ü~Öâ½»o¸jÓ©¢Ç4Ãè?˜ÒtWSGš@Nº `ñ.qk ´þ êC¬Ìõž8Ì›ñ/J܇BÁ<§DÊÖþÏ8t½âæÌ[éƒSÜg˜Ì7~á^8¥šLQLièku+r»gÉÃÛÓS§;ÞÓæªO3¼Nöˆvm5a¶÷éAc—Þ‹ °ê#û„ž(#·§œ9þðfÚÉÁC㽘ÔQ ›A§ú$×”‘§‡¿þÐ'ÝÝS[p€‚ì¤eAXãÈ8Š“‘3]˜uG .WSƒ™4¬å©\NË/xgÕßñdŠ®íbNÃ`Ft«é¤;öŸ”q;—#oN%#HY×Íìð÷Ï_i»Rî¸ä‰¯-U‰L {úK+wÜìñ‚8£Ša²r!_©;D.ƤˆÅ@8SÛhBþÅ#¸/(3ÎÖ_>H\SŽœr N`ÃE¡-ÉÊX'‹ícµÎÏÓÂçà¥;×5“iÆK”og`_0U” oK~,Ž·Õøh#ЇûÙÜF›ör–¬X ûH÷¦öp=}ñ¬Þ¸£Ø³Ä7Í 9ö Ôs~ÑÂKÕ^ª!ŸÔiš2*3Ü)ˆAÉ®I”^ä*à ëôŸÈ¡[Ó Û㪀a:$¹KàZÒäC®öíå[CT!ŸID¡Ô®E)߀GÊ;í ÊXL¶‘dÎCR*{Ö-NŒF&Xê-tM?/™ câ¬Õy'ƒÓ@ç$#8jéiÇ=]μf”ËÊÙ¾’Là>‚h²Ìp÷`´ðÍî)GÉ_ˆ` ×Tw˜J•êD·²”rR öŒýºË  ê¡CÒNJ•(Qa¸Œ¤ÖÑX°ŒÕaâàùåÏR }â…Zxaï0*Ùàe‘g©³³®)}àz©cG{ƤÌbP*ôûÁÛè@‡¦e7ÚSÀ\€ñ(ß Â_¿ýfò Kñ’I¡?|ÐãûA9h£ÉuE´v2÷·½Më ê›ð7aá­kÊ%t‘yGWür쮜dAaêäˆÚèXì…*àA©vÚÁ2 g¹úÃB³Ö³–ò ÂÊJOJ_+s>`¾¹=Œmü‡ÁØXœ†Q> }Qkê¦>1m# #Îâ™Qð"ÝBeC€PÆéEA2ŒKà¡ÊÞ›RÙ9ÝTú²…åêdŠÖ’¬,cqu1ÜÎÕôÅü›—Sáô²\0éÀ 8öøõÀWyáEø’#uL°‘ŠzýÅäo|Múû&ü ¥¨HLÆ;½“?ïÿi£úÖѾ?[[m‡³Ë¢ªÊù˜ ‡,˜’ úµ“á+ Jzõsvy¥ªV‹ì÷±ì:o<Ý÷•e„ÓÁ†‰°0>ªöÔý#p_YÆâj°Îr˜(·´ìû Œ]6ý“®ïÈu\èØÐ«é÷ "¶aBiA»Txþ¸*Âç‡ ¹÷vò±pcu]MÎ+¶v¥ˆvý |í^‒ܺ»Rƒ8I˜¡ˆhKÝÁ›¢ÝÆG´›P5à|É0¶ƒ-œhJ¹“Ò·ÇÄ$m|Ï2ÃÿM~ô¶Ÿ‹uâ-hr0Ïn’²çéä =­Î+"cq²2z û»àßš©K¦¬Y׊k¥É^ÊØ4UòõÂ=»+cáÀ‘M×ÙBk&Èr’œ£Ì™ÐžÜ<Áíá…V3sî3%î¼ßaA¼äÉ”»’ 0?ç3¶ÌT§½ãn.¥ºY~KN.X',á¸X¸ThE„ Âì¨ËÛpê˜{Ç9–duÈdw•á]à„ΰªr>&X•è)~ ÃüI=áWªÝŒpšRWfâw.`óÕë\;³Jo´UZü+EuI|ºÒŒ`!&ÊP㯛ÁI½hå¥N©üË[ùÒ®ªtáÚ¥áÔj€!9ÉPÆ–1)Õ%L5˜Û¹šîæEAÑdìap¨<¹w¯Qê¸wˆB[ÂÅë7±Y‚{ æ0̋” >Ï+ûÓWÃæ¾º¾æy›áÑlxo9ì€Ç}qÖpeôh؃жq©ŠCöB{DP’…ëÃ×<ž‡ßÕËZ!ŽÊ{‘š¶ä_<‚{`tÞ“«ȵ:4.9h.ͯ±Ç|Ž+ë©4øÚ0É“#ì§[ad,¶d7¾®[q81È+FÕƒ_÷=3œr­”»R#S´à”dá:ÂP æv®¦/æ‡Ü¼’ŒÕ¬®Ì. áükÒt¾*[/0BAèÍ—UL˜c©AVŽL>/ Ï”Ù2YUÎÇ/æ=hÙѺ ɘvÛ¿vÞz¹‰ïÚ”ún¸ „Es7Œ: }Ç-eK Òà…C›cÞÆÄnD®»C5@‡NI‚‰p 5|]Ù—Â/À¸yQŒ`,¶;¼ë2WêN29J,K‰^ y£à?AKEÔÃÙ;´¦[jÔ 8 +u2åmB’eLÓœP©x ”Œy˜®Á=J9ñ'Náü°>ÖZD^¿k”–‚‡R7at¤TrÐ\Nï!Ûíi5ÛbÊÕgf/ó·ÃyÉŽ·¼6€ûa®ªÄI°5ÎZÁÕ{!tSj £e|©Ç•Ä€ ÚàlÌß·ÀøìÀ]èû“ý½¶H¨¤CŸ;&òhC3eg!,ˆ:­Q ì‹£Ôå”çá¿UÊÝ rQM‘ Wë®´ÉÆ&î®:±íà MÎÇ‚eJžø¢e,fíNþÆ2Vç%©^¡½#þàîŠiqÎ3LÕu“,& ÍWÝpý·ãmõ?4ÝkEnJ âèU˜áPðË&;꜇‘±Ø’ó¢0¥['¥vT ~ÑÊâ…ÑH ‡É‚1– —hÙ±Ô +H*hƒÊ9 ƒîJÕ ½èc±÷¡P®6A"f› .*:¤N`K÷rp6¬T!œ²ê±ÎpíñXt–SæN“¸dð~5N?.Öí[×ÔϬ`0F}'Y[éjûj};À­VÆt«*¯Cñ¹þµ;rG‚ _¾ŽI|:‚Ÿ|g\Å< V~‰ë¬ÿ|›æÏcw.×ÌrÔ˜~ë åâÔt¸(R¶”3`bÔÖSÐ(†Oè|²ÜÆOî(·I¾Ñ¾Ü¥Ä%kш…$U§âÍ©œh®èOä9_Mó…;Z{•p):ÈG06Á’caíNšÖÓ•ˆ7•Ö¡%wNN3Ø µœ¼9 À¥90”ñdK#+jϼÜFW¤sB¹šÑPm˜åÀ$9>#Çýˆ'H"ó„Æи“ c¨Þ!Qr0.ØÙ\A£b„ÎpR à´ª§Ù"ÅÏGý;í㌪^ÁظÑ" ªIê4 Ý;¿"^*÷ì¡IN(è—þìç ª¾·øs_‡Aãädu°k8y¬?’œ¿Li0’Ú (» wš¤Ûªýº{G«nÐX¸v®Ö7K…pFó×)o´ðî JÄ;Ú|ãlu5ä€×‹iªÓ9!‰c©Ã±OàmA+»srõÀuüàHÙj>R³aV-Ï‘6zڶ鿚l%NÞTK#nF6:œé+”šÄ‰0:E;„·Nºïà® íNÜŒ¼‡^“+fÏÙ–ÏœdAnPѹ´¥ 2©“£ Ýï‹vämb¹ØBÑ%Ð7¹ŽÞ'u§îE£ ³)þáÍ!ð`ÄI›“Ö}&\“åÝ„dLD¯fªç#ÈË62õ×}wB ¢¹i‡c”)9(ÉÂu„ÁR„én^$#½º‹±ùŒ0W%PçÔª±¬áJ~E…R´â5š¬Q•¶n‚CaÞ{xtm ƒ0Æú3¬¼q”Äý‚{ĵípk_HÚI…Sw¢¼-8&ö NòËÈXlëafFöu¡ÝЄ}RÔÂjŸ¦­õm» ‡þÝ]me«›M‹¦x3혻‘CäÝÄ_€Ü ΂1Æ|Vþ3ùª¤Ü\qé3PÆb0d³ÌSŠ%HFpÔÆSø”ëAŸiÃê ;[³g¯b9ÃîÁ: °5˜×J=ˆ“LïcVÿ»° ³x¹ L²˜h&|ÿíhõÑl<Ï2¼Ïlxßð¥.–öÕÐjÖb¿‡ô{@>œn2'ÊE¬SE;É{2Ö »rÉAIœ[wz‘Q©» ñ6%•Y«¢k¥Ü ºE¢B Ñr%W+Áù˜ VT¥mh„Æ'—¨…%qvÅ ©:¡Ÿ‰bµ2º¡‹à­¼”/uAž1£á=¯»F8¥ J¢Œ~'ÉžMÓlX?ô D·Ý3Ðgð‹V–1]© z˜û‰Øì§àÀh8uwÈÝ©*pwE=ç#І[_ü‹ÜD“Kðª†5Ú÷ 38I¸­,#\L9|© z12Å:tö‚œ oÙν 9–Ä­»yQP´£+™Lò4œúN²²Œp˜µ>¢R»I¼ÂE>jS´$ªd²»b¸`/ÊÝÍ&YMÓ½hA™ñRƒtì¥8ŒíªagNá®×a‚m}†“±ú’ÃùXÃý*[j˜èüª¸òîŠÉ6ÖiÃøL‘ë|L¤Ý)ªØVVhሗ¼ ¶Vóy¹‹³ýpý·ãmñâKÖ¼–yÑ‚2ó»1M,ìÚaT?Sv\›ùNÈç\ú‚ïurÉaJjNÆèÔªüÔ;EÂô`m,œÖ¹Žlâ/ö‚—4tjL®Õ ŠéÔ»y‘‘×Íšä:;´§;W~RÕ Õ'¿"^ꂜdqCýýûâÆ}!ÁX%î¸Æ±çãQʦW»ázújI/ºw ƒÁ†¥ËÕÂqaÖãóÅúU~ö«&¹¿2¢ÜIÄ mÝ„…œJ6Ò–ìsT`í&´x½jõìl;6:1ôlÞ¶”»SO4Ñ Eƒ_/(þþ°¿Ã»ù–´:Ÿ· Æ7oº¶­\MÉë\ŸŸ(è¸ÆyóœzLÅ"ô™?Ž(# Þ=…µÍ «ƒY­ü=ÿw •e¬îo¹‘GNó¾áiå “w 1ݘñ ~øv'䘥F¦^ÔЂhÛldà‹›’ƒ’sën¢õID×~ÊÚz ðÒשÐU®Ôi–.XF¸’ƒ_Q£Ô@ë¢jÊ%}8£-w܇q¬ÌðQK¢Ø\Öjß Óƒ­©p¯È³a‡áì„$,ÿ™Ž[WÎ&I&p;î+ó®`[Üð4Y¢Xsê4)ªy,þÝl4ZNÚ9yü: no}u/ 7gÊöX3ú˜{1'‚á|Q#€¡DÀ’ÏÉ[7Åð¹EÆ‹KU²Àqq{,¨ÛEØÜGûjêbì%ذÀú ÂÔcpa_Q¬Ô¸=éoxsƒ|û` (šº 'cªØ?}Ø%HÄ-‹A2”» Utâ”êXL§_F–¼¨ŽÙ0c=Ö¤éG‘]Éh'nË/{m[°|¤ê\)]“‡Ú’PÞSŽ·KÂf}²•Ûg‹Lÿ¼ÚÍ3ß«™–D¼V8î+}DY~ñ¶`’YNRkµ”sÚ«õ¨'%Å0‹áY,Ó_'‰$·¹aó k'>ûá·0"VŸ¥Òj¯¶Î”}fE[Ÿ\Sæiº+ö5ç<ô;ñR_¹˜¦ä‰/r,5§]ê.ÁyŸ»Ê ×Xíá¯Ó}÷ƒìÀ!¼“ß[ ÇIh[,mš Œ\NZZ+míŽÑÞµ-5cYèü¨£do×6§yòó1Ͳø©Ê¾póWŽ~ÙØð>SÛÖÉÁcÝŸlbO\s¯ü°§=’àAbîZ¯n¸«þëÚyØÂÅ$ušcî4É œ©œ“¸»;˜Žö ¿à6Ïùõ{cVWräöd¿§‘úÛé/,ÌÊžÄQ“è¶&`8ÞÂɂܺ¹+ï)“”š(ÃM Ð.‘..*eJÙÉæÍWX ¬ñLÍóxŸÍ`½_›/aÁÒ~.k3/n #ÃíÎ9Uþ»·QDdæx0Ñlî•:9ÆPž©RÞåf /ŽiuÂÉ¿Úá¡/7aeæ÷ÊþýXH^¼9ßãO7û„kýWn/9üƒr9)‡_·Äù“NKˆûÅËÀ%mXÐi3­¹tÕ™W¨óNR ì´0—¼º×šWf¥ç2ýµ|Ƶ)‹ØSÀÜâ™ 3û’³äç¨éŒ­ïßÿ(UÚŽTñ.Ë­õF†ÛœÄ±s˜‡>cÍ}KÕå0ŒŸyÅ#ÃqÆGcŸ‘—¿¬š½Õ Wê’…û'ÍÕàsÔb Ù3OÚÞ"îð8a9Oî Ÿ8‡íäH•ešr¦Ø²ÛI¼…Ã##ð|°ðâ[/B«ñ¬ž>°’ÌԖĘDð«õZquÎÞ ‡y‘›Z)»‰÷à^þG VÑáÞ•ÉË‚ëý)ûÈéŒP©i›®ÔÊ»ñ;þ $îø#¸<9º¸"cœÏ”½±«ã ¢æ•Ž”·_f,æýX§`jkŽŒÕá þ'…é4™† ç80ÄW1áô®Íø|Üt#–(ÂEhÆÛ¯ü?eç´™£“\£7N9¢ÜÎI=ˆ7çždâéÇu3Ú)h7ŒåçÜx J²2Ú+¿†¾S˜h~~–æ‹bmA4A†" hlºhÏVM˜5§q{À\;¹V·Rc!§’^óãÝõ‘:9X¹ë´¯<Âäb\úë°cb’ˆbÃv×i’µ·#¿4f©õ'ZpD7¨¦ÔÓ5ň†SŸ ‹&;Y.çÃr/±ÎO¼wT ‘´`½9ïèÏiuy'/Ž a„Œ\Å´[À«Æ^8ÞÿÓãN„ú-íÐý÷‘DLOÕ ¡¤–jáü(Ò¡•H•w¡ÝðxXfù¾u»ž· c¥CjAæ§$Õ 9Ó¢¤øõ”AØžI2E{ªyr7!ªF݈wÆø"Õ =SÅæ;y2m¤Ð!…3 "¡´=¥ Ú’¼@´«ÖWÊÝ‘ªo|¤Ý€Iv%kËØÊIªUõiz’/…’I¡&ÎFœ›z)cüNÜ©*5‹x€’*Ö­*Y;$°Tt;Þ‰¶}÷„ŽKGrçÔt't'¬é»Ÿ÷­õ?ôÅ$o}ùëŸÿø|Kú@¢_Oø”«ÝD" Ú ·sR¿ àbà Bšî&Å¢VNHR¶¼3}Q5,ùøÍœX‹rºTóqw\a\•7“”»S§I\rð+â¥:â*4šä¯Â™b%srðéÁ)˜*·®P÷axµ ±LMãu§ü†-íITéMlþ¶{N;h“Ò xì_ Â@˜H'L0›Ö/v"%Idµº¦d²›Ê0ÀØœÈskŒEv’<+~s#…¢£á¤©˜h­h•)ï¦]µA„Ld  nÕtԖ¼(L©Î1¯7‚Î>ÊGMx«nÃ!Äp>.3þCûà¶¥ç%_Óü/$$=å 磨"m|²Ð$n=øqpñÌÁ–Ïëüë­|¯t(ïF%»& âvNS‡#QuD÷£øÕ&ˆ×‹9Ãy´³w·TŠj0/ šÑËî¹¥šøK±;!ÇÃi/§Æâ$AâÕ}ñâã1wÒK¤†Ã5bý:•ÿ@¯$®Ü‡£Lò òzW%( \’LªªMÎwÈIg$X†9¦Ý里4/#ãæv›³}g Ô®Kì4íP«„f€”¾“º]S1çM8d¤õNÔå|˜È0ðZúZ„¢nP¸ònMÞ–î¿û%ﯷuCS{ÝùüD"¹óî”Ãî€r5ìÈjКî(ÝLÂjê† (©*ˆpFÓå9*&râu· si¸kJU•ó¡ð¦âԬиëb¨tÞ©Pý–JÐ+s¿Çû¨”Äw=Üà|« Aª2@6ù`!ÈU¡Iâ㢠 ¤„V†SŸÀí‹æyYÓ®©5†#Ï@]ö_…bÚd¶Ç„(é¹1Aüyé T$¤òÉ$;wÍ8 U·RM­•+ï@–õBªå|=­-œ ¼¸•9‘úXkë”vPç“8—4PK÷r*|ùRÂc­AJùÎòÁ ûmÉ0èG@îM?p>üEU Ö«Œ‰XùE2‚£ Î$”ðsGÈ ?À庻ü"$'娚Ž[PP5Õ3Ú¯òYn—‘”ÓWzßp)ŠuP{¤»ðG(Îçþºµ›ïäºpÉ ª* òð0'A ¼s²ήË$r5>S½4\(ÙäƒE I„«–ÍÔ<Ò-Â{"CôEÍ]N¨tþr,¼Õ¡ð¤šA—$×êе—+o—-Åž‚RMø$ ´^ &‚*§¬ƒÊ­Ü¶” øÖ/ÛrE¤LqÆ(# ¶.³>ŠU¥ô4ë#m_Úz9‡b6™ Q…|r{ìÖ%c¡ ¨aÙöG¤<±öojè ôm­Ͷ:ŸðA#m©ª’¦qH ƒ’aÑ¢J±’^$«D‘ª‚W(ÇÀY?ˆwœ. bÏšqÞRÖéWªrPÛ+[OŸŸ6ký£¤Ø¥j2ó$ãnâÂÀb]ÑÜ}Jw÷q¦Ò;Ênüˆ&ŸR¾©*^Å1ÍA†#¶¹»=ºšÖ‡¯“…“«8Ô ÜÎà>‚í¬5<­\ƒÅ~AŒ &zi}Õ1™·}œÃ„Û” ¢Îîú¹±\ÍD†w}IªC§GùÍøKHé‰cPM$#­šÃ"bn²íÌYŸó“>– „F´«z¬[ŽèËŒÅ#ê‡Î‚o_J¶wäIʇSŒ›Žd²>SÅk 5-yÂ](˜ó‡-TJ¿õ@B;DÈÄ-Vœbk('®ðÂXSXÜG¹¢L¹+”l¢íââŸÂ àB†çC u2‰J½8s‚cªªù@ýj'IbQmœhÂîԺѿ/Ïmœº+oAIVæ>V+îb ßi5\rXng˜µ‘ßMÇêEƽôáø°e(ÛÆ™ 9[pWÁÛ»»Ö7âßD;”<6IÕŵäwyLqÉozR;ï‘Ôû/íš&Þ †ª{,@RnhBU:©;–­äŽ;–0ÁˆÅOÕfª¯r5sÏ$Ïh>ïEÔ.I€ï4\mNëFš U•Þ€“¸ÚxqhpÀØœ%p¶Ï´«~Zf>LË™”Z‡öÔ €‚;i*&Ô¤˜yBR‘~“ à½tP•ûõo_P_xÞö:ï:í½   $ç¤âo†ƒe¨;T V—q£ ^ìÊýî /S¾D?ʸYÐuˉG`À¡JÕ„ZsêÝó°â€¸@c8 "»ÁÕ(Hs9ÐÒ:·~€ðÖ*È öòCÓT÷ ejE6˹¼8¡N¹m!n…Fˆ w͹¾n_Ó¯gÕ¼»Ê0êF”:9pÉ@¦jŠÉq ­Fù†\[ºµ%IiJœ ,ºªŠõÚæ>:о ŒÅxÝþ jŠI7v@Ih²Xõo’NÝ´šJ‡p2ÓNöI2¹dÅMÈÁ êá%PF˜N+ï«Y‹¡}wQåjŠí8í ʘ³¼æ”ü¢É¥NÄž¢†\ëûU⦢²Sãf,iBE)§…yOä…º§ÆÍ‹¯e ï†øyÖa¦—Ó°™œP¼­VMì9¼Í—Ð4¿ó,焪ɀ¢˜ª]C+´2¶ÝðÙöIÕ‰[ŸøC޲´à'€á8f¯6Á;Åcø¾¸L6hH’˜íH(›P5°–»Žâû àñÁÕ4W[P<î#r{JGê´rDgÉ|¸z£í•”µÞlÿ*W€Œ‰Qà–{ééxÿ»MM¹}ox…6Û~0s¬§þÁu‡ÖÄ™€(iøy‰« '¯ëgýAiw¥…¼ ¿ V“­¦Ïn<ó¥8bÖ1™êÐêÄãqD|šÃqôUx^ZN솇Nɼ<(cšï¼¹& ’þÄM|À#öQ¡ ´w‘«,±VNs>‚¬—G‚ˆ¦åß—ž¯t>“ ïȲ{kûMÞÏ¡6éjŒ¦»·S6Y"T&,CÕÛÀ~b:c•D…/n§jÇt9¡8œ•+¼«^ÍU,'JëFvmI Ø=@ÔT:䑪–ã$ª ¢øñ¸Ó¥Æ¥\zu¾kšR ªúÉyZ£˜d˜K&ÈPdL¡W„œdGáv¦¬„ì|7'`­‰×iV´»ò”$Ø+ã.ÀïAžFó/AvÓ´Ñ}ðYxh×x|§¬ƒÆ5-@1ñ}øzÑ]_ ‡b¨¯8É|‘H2Å¡ÝXo€À¯9fB¬HêNZWŠhª­¢?HCF¾“¢—ÖZªTM±CLÂJq7”hwH”£jêÎdž¸Šâ5™ÈPÀgÍÉNkÀ…w . ÒªÉ€b,ª2#6öol€öÅpŸ¥Ýå InJ¢ÃÔmìC0ªqØâ~I¾/ ½‘Þ]Ýp\ð_w"H:âõN0ÝÚM¹>»À Á^§*ÃÉ é<ƒ!ƒ%6‹ærıÙAÆD/ÛRÞ`×Ï…PÔf— éšR6µ(Ã@†¢¹#yPuÅåAgÚÄÑÈ-×È*™œqÞðËD{9i:håȨNŸô=±°8ëYFpTÅñ0Ìá(”>ƒ[[9ÿò}"‘ó™²£ŸÒÂé78ƒc ­sß¿Ý2ž^žŽßiL$Úƒq Êê:7š\Ê\¿VŽQ€ÄäˆF¦/—êU“LaH®»6+E̦3çÕ ÒBª·ýÝÀfÄ;9õatIRúô{¢`pŽdÌ›Áu$™HJâz7ù×›p4âvÂ\©òÕµ÷ËÞVÑ–DSî…Âû tר™*'üB‚YQ•Âä8,±ìqİ´œt9 §È»Iêd„¿"^ê‚Ø?'õIX3ûý·§| Õ´½ç åvvG{'–e8a‘•»g£R`´ØW|Ñ‚2Ü”z’Ó–zO ÝvŒ§?ÁÅÇ€«“ñÛc° ä|´@kíH¼ÛQgÕ’ênôJò ¤qkx?S†¶ ýúü}§E*H¼G¡ ±qb˜¦Ø 5;X†» _ÔŠ„Zk=õv°Š?3oW¿éH÷å–·àÃozœØ?ùþû¼“ãAš5¥ÝU†ö²èÞ@îø_%ݹìÜ(bo—ôìØ°dÇ•À3<£’9 ø î­Å«`ËÅ"ÔïœÊ(ßø…;mã:*Ñ×]èGo¦²#IbÂ}(UÓ^”>?5%rÅ|RîJx…´W¿y „ôšé#e„ESΈž¥þ з|PåŽò;§ýŽìßÜo% P¯ó†O½ê $”9R¶Ú¸×¬:€­˜ÊISìC5+»È0Àæþ×C RkW'‡K\¨†"t&–»ä™:§Œiš»«]4+4¹Z­xNr˜ý22V‹G Ô™KuRÛ8:óo;¸‹æq¬š¦:]§Rõ­–-Õ¦:#Iyg[E0Qœ0jú"iÀšÃG¬ Õ74ìG ”> ZS`k¦=Ò·o_€þ¡@í¯Ël±eK>»¹‘ËJ2‚1½êº†TQ?ë–UÓ^TO\ª¿©&Sj¤y}êî@Ùˆ(™–«)tªœ£^ ”5M)l&)•wŽ”S_Ìcìo¿ò¯Z堬ΆâoôÁw3e­ÿ¬WkŒ®ÂZžãÃQ¸+­ÏÌW™­—$R†ãur¾Nu¥–¬¸%ÙP†*{™íQËI GNÉú“ª«+Uí:S%f*ü/Þ£`ÌTÁ×S K“Tç×ùB€3~tXÍ™ŽLS^lGÉpít›”©yÕ"ãc§9C9õè5óöE¢ü|”öþ«W3_9wÅXwa½÷ÆÂ›ÏyçžòœN]äyãIAUÑ;{¥œöYñ‡ëV²Ûë`L|0—<¥`oîr­ § Zš- Mq;.7à(žÉÊ|'ëë”+vy|,!WF8sN?8Ê»™ƒ—dz ¢\H$™àv'eRÑõò "ˆò6 º«ÌFÖƒ;wŒ$úº,±)¢Y-=Ë-e=wä>`.Ä’µ+¥­#Ib"ãn©kUˆ¾¯S œòFŽ}!ñ˜ecB³œ‹úW’ 2 É5"Xxeî-bö¢ *Ù•ê )\[2Õ¹é÷_M¹ ±…ô ÛCSÚM«*çc‚Œq¾¨ÜÓ œÄ„`{Ø;@Þ“8}`PS›ÿøLÛĨñæÐÎI=(òc™áÈÈ S1)Û—+íJß·”RžÔ«Ò|pšêäòqµ‡áŒaþ½«ÎÛ¥1!“ªjóÜëþKAên~ËŽ$‰ æÂ¨ñæÜ‡a0Eî<.àÏ~vÖ(Ä;*¯ÔÚÝ—®.Iø‚\{ÉZ,\_XÒ©gT/ªšâM%ó«´]OêP|f8®SQVAÆDlu0Ä_ÂÆçà•j)]©×ô4úæcR߬'\¸QÂB`LßÖãw+'ÝÚ©šT–»À¸ÿ¬ðÏ{*~R¾ñ‡v8FŸoxä÷ÿ´Uº%o.¦œÊýõÆœîHE²ßiÛÊ-ÉVò'ãÝÅü¸ÿ>¨šŒ[÷r¾ÛA0R\ÚV¤]³IM#üC^ó úN±=„DÈÍ\\õTIjИØiÁÝݸ‰°pÂFwR9Î"Ù½(EÙ\ON†%ÉÇurŽŠ?èÓýA9POÆÂ®fmDF㼚%'ZÀ-ˆÿeó´WÅÇKî9E{ÑçUm©JÚ)¯\Îiø‰V`òÁ‘S©ø2—{Ž1ÀblíÖ9λû¸‹Ülg½`½ZÎK…F¥Q˜È±•`îQò^µãðè(¬>„Ï"uàD‚³7þöA¼G+£“­ Mùo½áV'C{Ks§I³ôƒÎRë#Þï¦Ùµë‰Š¨>ðVrN…ð­¯y&ygríAè×¹q s9ÓùQS¦_.r¯-ؾó`nèWÝa5ÇX†õ6jÁ·_õÖ¬?hŹ¥ºÍ@¦«†±ÇX†™G˜òLOAQX&b„Ävv!Ûæí ‰Nw5`éPÍh'w­…('1á>ŒÄ›$°“)— ú ª?r/»!f1L'µNpWƒ.œMo8Ã…’G°wjÔc¼A±^œH+È0k-Î8ŭ8š¼Y»K$ÌÐ¥f[D² ‹MýM 5ªZþˆrG%äÃDã%“7Å'SçÖÝþûÒ!>)ïx“0ùn9œ“§`;¹ KŽE[yš^yómÒ'äÏm‰Eh‡`»T“-=•º‰ç஄MU±ÍüK (¥*Ã Û øiB”•fg²2eûRýæN ´s"ñ8÷¢ê£P5°œ¼A°•d¨b8 ö0íª?•”w€/éYÊ€&¼“R¯ü¡Ù‚ä)×LXR*ø<î¯7¶„H#jtª&þÂåNhA,ÚYË :S=4åÏa ¨”Išçýº2ê+ø¡ä|gA*'Wqè´;¢¢óun(l¥ER—ˆ —Ó—æyø±Þtoÿ°­a”£Žc:˜·bûÝ=üÙ2fŸcð!äZ¢)©p;ºA?¤ È™r'T #Ùj­¨½™ÌÛCÓÛÓ®ìj•àv[«ÆB ¡ Áá@œè¿&…x-ú ÜÜP¡ôiК€œ^2{FÕT³ÛóÊ \«Bg‘ ‹öò¼Õ^1õ6á±&SY޳Xh5ñ…8ìsçJiïs´;x5ti(å{Æñ¥jÇòeøNŒ03Ž­MìNüEŽQ+'Ã'Þx¸©œûÊQ¥–â987p~rvìIdrÉdÜùi„ A†¥ú hå£`r¯ÛrÚ[WîÃQ&aýƒ¹ _&,à ¥œ Á³Ì'oªã’6Ö»Ô[qiš>L°-(ÒîP ¼N'bã3‰2¿HáÚ PÞö /$„²xmùKU»Ã¦íþ¢»žáüV´Ó¡]¥ª´¯‚"¼™àˆsÓSí‹Á”íÁwñ’ó•pH-u×”ö;^©wF€³ Ž Ø´ž÷iKÏ'fÏMâú.Q?Š7oéN æPOWÚA8|)ˆ(pµ,¡¼“bI‚ºgv2øc:TkÊ»S7 ôeÄ›Ñu˜Ö ؼ·­&¼ÛT¦¦Ñ]Ót>Ê¡ZÓ>“ˆA>&Ю( _…Tæj„£Šá€—/=îaK°·­E!–SlÏ”]ñîR¹uëá]‡Fª¥|¡7ÙGS5-å´ôIPÈMŠôÙ8“ïuÒp{–«ƒpôrz>}H=±(”§jM ÷õ*ʆªÑ®PŠCýš€™v3œ°|ÖáªFóR0 ޾%QÎ&¨Bì §Ä/jnpVFW®'âÓïÚú‹_T‰o‡§² !_„Š:­kº•“ªâ#å]IPd…ÑÈ× ^nÚ†$‰ §v‚â wd$ðð šM“Î(ŠÖq´àØ Ý´Ö¡T¤dÖ7hW©&8¤8#jÍOÌU<¸Š!VèIå)dæ»DÆPí*ƒ 8".Õ#ÕþPâŠ'}|MhFW#U1ÅÚP:\-OèªüEÙÀkaüqCâeCÄ/(•¼1讪áe¥Úg@O,€ï4T‰v® üI€˜Lì™ ØÑ›Ó š¦ŠÂ¹éÖfcn¼•Ö§ÙÓÖÇ{×Sn“º= |±åjê…\1Ý`îÿ_Ópòœ>”JvÅÖ ~&91š0(§¶þvÜÎà>&cdÁ2Vc|âe]ƒS’ÀN³†ï(¶–j±¯u„AUw^îEÐËËÚ•ScrÕÛ%òž¼Þ·cù:ÚU*Äö§Î)'…Í$‰ÁõùDu塿Ó§t@}‡éÿ¡ëܲ[çm(üÞµã`DDB ‘.I%?3úF¡ÓËZ'Øß/¢¨Ë‘eÙ>IJ ×–T1zhY™æ©Æ)P×Í]åìfPP$ëIÁW7¶œRy-™¼¼v'oûÍšÂn4î¿íÐHÙ”L›ë4¦ß·bÎ!2 læ†&N*hàÙzÁ¶Z¡¸‘ °«R6A `Qi&še™ª¨§´»Êt*ºwQ '$§ÆO¦¬ôfW²iß„ƒeül‚Á$˜V§kú…KOM_„ð‘ï§8ØÐ¾p=x£7£2•¸t@CTî[m¤TOƒQ Jÿºÿî*Ä?Mk1ø²’ÚT¯†e2¡,ÕðL* ìuhl*Ö@S?$“hçý–j!Èo'ÿÔü’|Gµÿgmûü³¤û»=õñd¬&X¦† Ô ‰¤Æ×¹Ì ÇhOxªM8 írS¨}Qvk½5ÕmãìÊc:Šf|è¯Pà¥hqå~Ô{i¤lÚL*Ö« NöÓÃÖ ËûüÔ¨íw„û²€Ï(?‘ûi'('NÁ¾¨ðXÖª0R ê?1ƒ×ì‡ù¢0µ=yš‰ûy°±‰`úp¬»ó%i¡Õ­Bô™D;5שÀâ€g¸/XÅýPPÏ·ÅúÙ£$2f-7ƒ‘ªü"ÞúqÂx€Z]h¬ŽÞUÐRÙ‚¦ÓX ‘[kµ.è;ˆ·—Q-ú¶ÍÂ¢Ñ‡Ï q&ÞÝ?«ÔÁ:q/„´«±ˆõ0 Â2U‹×€Çu¦âß+ö·Cà€~h¤t-øË¨í ubÆ‚gðÄÑ ZNVj Ò˜!öÚŒ5u ˜=P1Ùª&ˆ×ÛŠ òIßPÆOqFUÅØe:U+ÅÍQ¥- ð´Ån„”°R7zÍ̵¸!:*[jYá0!óøºr`NEµ~wj@-ØM0ƒ†Íô;MÐK£/æE®M•Ë®€ÿóARH\ñH½1åEc³nNw8¨§“¾vzšè«pïLÒaK/u¹n/ƒšÅrÍý÷?“[—à75×\OG¼œ4æ~¢F#Ö¡ßkú 7.»«Lb§94¢¥¢ÐPemf/S÷^Œ»YŽ/RòÂhZ¿|ïT p\õáåòÒHÍt¨Šm‚ðQŒQOà–Þ¦ š-OòÉýP¨uŽdJ)¸ÕT² U.»Â„ØI'e…Ú 0¨¸RsBk`sűjŒ‘+b—2ŽÊÑÞ¶nŒÀ¬å™L½•¯ù¨o¨~gSà\8‚$²±š—Êwjd0]­„(+p'…Zs7j/üŸp}PÃgÃí.«+5P*áY¦†ä¼­ªƒK5èèî+.$ãq4zšj†2NÅ_Ô8!aŸ (çd¢óf’ÊPÊ*Å„´úÕá+\ýHÛÀ‡u5YHõÝê .f®öûÏ]3¡ìà™ÏKŒl†ì“‰†õrêõ$éz¡oÊ;‘/¢3™ ‹ç " þBÀÙGéê ·úP¿p&Mt¢ ‰€L¡l‡’BE;P,_5ȧ06 %„TH‡Â}NÄ{€ïµ:´˜wü`AÛá2†ÒK#Ó¦ŠýXQ(;D ó V)5'q"ÀàZ$Y¸º Ë;™ ˆ“Ë „Í%}ˆc6µ]ý8ò‹½ô0Á= Ë4(«¡fšFW ÊÀÚ Vw6¨ ˆª~jtcäÅQö­bt"¸Á)3´l*L0„ÖÐ[?4~´Ë‘²i1mª6d»ìôRÂŒ8î ,%«Ól$Ó){Î'Ýï+¿«%QkÜk;p;`6ŒÖÁ3ÜÏàAÁ?„ÊÖèj4\‘b-Å ýF  áÁØÿBH…Ïzi‚2„ý2,´kmÆŠ½4Ôâ*^½6ÈU;9 :ðê $rXLKb@®æD ,Þ¿Õ°S->£8x¿uÜ~û”´^©™â@”éSnFbq¶œµ#ûnz Ê^€]Ä2°"λ‘D²u¢Íù)é\pR ¶ñ­ä±³L, ˆ =5 ÁI&8c_…vNšª}Áì©©jòŃC#Jã'+Õðç4Œ(Aü"£º½@¸rj¯ _ú«'†úF@xùxãu®ÑX ‘ÃP`¨¹buQ³ 8¡ƒô``’08TÂ^°Ì§+«&5UÞy7*2 û± ÚʪŠjý¥f l‡ !~VÉk?5×4ï3 ¹)€hÁ¿­Û¯/íå/½Û,õ×Ô44Æ+o!£Ý“ëøeY\)RƒêŽä¸/ Œ¦²ªá¾“cQxK*¤Ø‘êIôöðÞ¶øœ1Ü›JV¬ÈT¼+ê\ÆÂ¶h#ú S›3-(Û“gðx`,½vr¼º’éK#5U›H¿–ñ‹”0= }x‹ú]ñÒ4!U×"ïÈjÀ-©¿ÿB{QBuw„³¢¦ŠÈÆÒw;U­\³Fô¦´`7RÜî•Q6mª{¤ÄÞ!¦Ãhð~<1êò‹”ðhÈ~@ŒÿŸ¤„'6§ÁZM4¾2 ¿ž¯HV†—ä N[CÇÛú€ï$/jÎ-;MîúAâ€7çAõ‹àÚX¦ŽM fìjßVQ4%ìžÈH¦ÂY›BQ¥$¦ƒÐ‰OV2¸P n™¹ »É†Ö‹‡aô0¡lpèš“Š“1PƒìÄÕJ·äÀ—Ø7r?̧§§á>Ôf]pN®Å€€ŠS½ºóJò˜FâàÛ/¾ž+XæÓ=jò«ˆw5”v* x3Ä·¬(¿R1 ¡Ý7 Ÿ©p ôµ¶•,ÙÊüqp-™«rßê›´nï8ó—ò„ù^®;6O^;yz\kQÅ¢€—$So€.ú¦ïš;a½+ˆ7ÑÕ.¨=ðêÀQ¹SSÕ—™è­3i.6ŽÚ²+`\!iÜIµhœ¾Ä" P'õ„Íu•\§—])S[€d°h妑û±'q7Ðstà¿ÃêÆÒ8'ƒ4ÑÕ ÔT½Ï¸ŒøFÀ»*5“HPvhÃàó#–é„ÃÆywêÞFP¼°<ípÂJõó‚nª×À…³â„bQª²2«ó3³?M¯%•f•\~¹èNÈÑëc N\‹qíÑ̺#„Œˆ :“fÊ6U‡‰¸/Þº!Þó @ùç§Fjª,ÓÍ€ów.¯ä¨÷E5Ð–Ê¶Šœ5¦ý…ß µ„¸ÊTú£x—¹á{÷ÕFw¼©Æ©À-5Çi€oÜO‡a0&Àß—tC >*¬,¨¥°; Ûx/Ò˜!Ø&J¸Óí4@,Sý*íPäÏŒú-6..µkêL¨e†šëT¨©ÎG­÷ËŽøÒHÍtæz:âÆ”1÷cá)N•hòhNç¢Á›ó %ïϾ¿2§ãMMë´J>j{ o‹rP{ÍVOOo©}TtwOj g‰~Ž™m9öÝÞ¶iLÅuTÈÌ; n>¨ü¬*˜bÔÓNŽÛƒ¸¸‹×ÕHØzõðEñ±:¡9 äZÜxÖ°^‚#KÛ/0ª—̾²^õÑAýc‚t[»ÁåW`3;• Þœq9f†³A,Ê/n‚ÑÔÍtæn4¦×îïÔ”¦@; >öFûÂ5G”,çEükQâÆ ðŸfZAl™ò™†¸6"£‡¿¹ ¤æz¦¢¸Û‚q¡±@û´;1 M¼4Z?#½8r-n¢FgŒÿ ôÛÆ¡\Ȩr6º°…!â³%J&¸>átÅÁÿX÷ì; n(ÉtWíêMâ½W0VÁMTAë…2Ýø©}Äj‚{=Éy¿8‰+¼-Rܪp1®þñ(8Ý©%m1‹HÔ}ž)ò¾Ïƒ»'µF}´èû«Êæ;á_˜¶{ï`¡ØcÌX±—FƒZ\“É\Ür@ ÔjEÊÞñC«yo=èw‚ÇSPÕBP’•úíZ5 U´ß’¿å1) ÄOIo×·§ê·—ÝD‡…GK ½ßª‡Ý,fßÉzx"nžü]fߎÛ÷7éZŒÄejЦc°•Õ_ØDà¢}è÷CÔ¿}Ö$ŸµÀQkÌ;žõJ ‚Sd™ª»ÒîjeâEÂ/Üùß¿ ¸!™ª•ó Œ€-îÔP£rîP”VYtvuéÃ=5U]¾ÿrB¤f²+òêZ´“F¹E¿˜F•ïžèþ;ŠF[yâ~Übý§ÏTLðhØß+üÄôygKÁ܈Ò_ÏIÛï¿z•¬ð}K®»Êy vWÀ¼ãg»xܰ§ ”U„eB±]•úEþ¨ ËB´:gB²"(^wÄ|CK§ Z„ûV??uá:›6ú‰¥Co§q*ë¶dAHî¨A¸ìЮ£âb ÿ¥¥ª]q¯Åä^ äѹGjª˜ ÅyË]ð÷úz¡\2ÆØUïÓ`«W뚣l"S¡¨4ˆŽRp÷Ð_ÜèjÅ—4Ð’;5 Nˆö|o †»“k6ˆª¢ÒL¦ê ×lÀµÙ¨X£ðüI-¸¶T5êk ¨W2ð¢Æû¡…öÞ&ðÞ[åõ•ʾ@«§ Eê*ö°ð&¸Ã8èÉy™Hß÷¦Hîn0ïÁÏ‚ËøóõõÛlj"µ8µ©á²É#®ÿ ë™äH×=Y'ì˜ÆÔýŽú«¯(*9½TÊ€r? B&Í×i@~9”}L É½µ—FRÁ¢´J±Õ; î¸‡4J°ILd*ƒ”!Ÿ—æon)âc¥ö°¸zõUÈÚ@hüjýM×í¨ß®„Z35çï97ø?мãgjéûAÈõ„RC©w!ŸÜÀ‘Zf\t,'3‹Y»ˆ» ⲫöÃU¦Ój}oB@ÝZÚ´{RЪ۷ôøÒŠÎC¡J!íÅÅ¥‚Èj ¹ã’°ßñrÌhBí›+Œ9ÛR6©–¤¬Âƒä3‰´•ºd(Uy)\Ýñ¸µ"%É€#ÉP`…*Ù ¾ ”Ëî*Ó©„Lši·<A1ÜäåewXXm’ñƶQqÅ~dܦ¶£rÓÆ¥ZAï´‘AvÍÔ¦ñ8ØOÎ*5.Ô‹u˰X¦ÖÓàM€®qK’•¤î |“ôÚhvP˜‘äµHŒèm€!‚jP!§* oô¡à™©êû^0*Ìz鯸RÁhß÷Ÿm2ßݳõ[¡šP3ÀŠƒ -ÀQÓp+x! â¼x$ùtˆ‹ºº½ ê‚÷j†NgÊdP\±í”Ûv8½Æô¦},ÀþìfõEFâPtÃS6×;áè†cyôý>çíîÆ½ÉÕÔ>È4\g¹’NZ•è»+àž¨Öb0hAvâzŞĀ·È9ò˜'jjˉ˱ϙ¥æd1„áêÄ6é;eS!ƒFetça€ÅÐsߦs-—ƒ «5`ÚHIRPqˆSÇ» `¯õN±ìêËn”yK±\ŒU×/<9ÂR]Í8”Áx3ÇùäNŽ_œŸ¦¯¥\mýgú¯+µAÍxmö–ŠëKÒvqÙÝä‘Äe›óË«§ã¾ Nº¯Íbòðuç/’˜ŸÆ¦x|ßù°Êµž3‰ÒU\ µ@œ¥—å²w˜žr2äì Su£B‹†ÑQ«<£ƒkü¶:”z-Žž#W{,1¬3N¢nšÿxyÉ}¥•ÍÍpB´VGÊõûÔÜ|§òrz“‘—ò碷AÝ^Nä°Ê-TžÌew;.ÉÔÜ|/X¹V¯¬È™ öcQÖkŒðŸ—„‘GQYÀŸÓ¸¸î |/.m( Ñ)úå’¾ìtÚø“iåƒÊ潓ôùé´“7'Yð jÁ8ݘÇÑÜ Zĵ8ϱë¼gLÙÞN§AdÚ‚Ø1b¾*Ϩxn{yŽZòd!§~Ŧ~;(~ìÜ’8EÝæ¥±¯Œ+{oü[r.ô)úö£w¤íµ@ÈP^ 0×à>(¨)’Èîn¼ÂÁå´²õÂL9\ìÔae>ë®[¤$|óÃyðI ²R}Q1O½]Ïde-md»Ð¸šÏ79Ä!puR>=_I.R¢æzþŠ2Ó·AçZëµA”µâwjçjŽeAäôD,ÓÜ Ö‰ŠÃÛ€÷C ­JpÏõt´ŠS*ƒ²a[ ‹¬Zã1È9vƒ™ZV°>Ÿ‰[Qh&dÚU/ .+$®ÔœºAÔ*Š'.ƒ"ɵÛw-‚ñ§A+Ë9i/÷&TŒ÷#ÐÓ{âÒ¯ÞA„èÿ{ºKg±’ÏKÎTš‰U&¨èä­ãÐã/2z$nL͉Ëþ@ë âeü…¶èvÙiH®ÅTÜ ¢_,2xU®©©“A%hUnõÛÅG­&ªÅ\:m Ò?Óé?¢ví&ÿ¤þ¢«Q é…à³òú Ô2ˆ\d`˜À± ø:(e¯²€_8Sâ'@ÃÎ[ø* úª*µWÓQù2OÛI…,³SYÀ›¢˜¤.dœé˜ùOÓ/yõ¯)iüŸ‚Õa®ñ镨ã—uÀ\,Éý\4‚xsÇ¢é·7à(¨Š×ŤOδˆKp ŠÑÎÎCÕEÓCPç/ ’CÁù ô3@³I- –•B¦¼)42 Ö²l×<Ù‡}ÿ$™MÅê(?óœŸ%•s˜ë\üÌO£X,f)øËó¼q^œm™¾@ y²¤ WñÞp^\¯n%•3YIöãÂP 6QX«TLÒ £*¨l s!:ù»}jƒ” ÆBZÚSÑl'hì}—$SŒÏpoNm÷óÁãÉê~ä„§ÅÓixu׸*“i,>þ\´/Ø5àý€`j“´`“÷TÒ¦{s¹¿g Â@¥UÞ’8 ÊŽèÓ¹6G\чa]Ž_m€}QZö¦áBªjwø–²JSåLªÃ¤×S3¤§×Ò²@¦#Nún€Dê7´ÖqðzP¡d…F \×&OžñàˆÖVøNÞç8{ë@HÂ,öí jЇÆÜÖ¤¦f«'Eµƒ1õ×PÀµ'È×fO?dT]Wg\^ ïkŒ•Õ;=2KkpÃ}LB_\n‰Å•2¨–ýB£ïZ‘¹€¿ÄƒLy»Á>61ؾhª¥ûïáƒôŸ˜n™@KmI…2Oy!âÖžfL¿GÊ­¼ñ›GÒ$ Ô² ɹŸO÷C'3L{ð cájy¸ÚܬOÂÓb¡á|õ ™Á˜O¸º]ç%—»Âç‡ý]#uñE)à†Is'Z€ÝâvtOãžc ÷#$Xrôs ìR™N¯² ¶,Hò@™aÿéÐQø(Ãt.Gy!÷ŒÉ ‹I×—šNcDÎÀñ…(韵(q?dª®f24Óɤݓˆwx‹óƒ:'i4ƒÚNQ²Š¬DSÁmT ¾Äe‡ž< o¡¦Pý”í^Ù¨«;¸'YHAØœË5mÅ›éݺ-H(•r?—«VùòÔ-°ª¯ÜÍ —Eƒ¬ß(füKÅð}°P0ywõƒ¬ÓŽßÝEvgõö0»¡ luïT(ñ[ ~ÈÀð¶¨Ùüa[yLºp7BFrVÞ‹Ö§Â)H—®^Ý ýA-˜¦úyµáì_ñú42ÿ°…ºõ†—0€²Qéô‡Éîv«Ü‡¡E’JƶƒÁ¨ <ÃéåÉ)ÌØÏ`,Å8§aø©zúCÙpXAÐ[([vðæšD¦sÐjõƒÔáM*vÔõ­B0œN-Á15(š„í0¡ìP¯îØÆ4R½Bˆ¾Ë,I‚¸ŸO3fÌ0<(kqóè(Zú܆¥6ã‰1òF"üÀ¤Íjã¡5šUùTæœ$˜±ä+kü¼dX‰PïAÏlY%øOѾ5xÊ3¿z• ¨ü ÷ VX¢?Ô:(›ˆ{ïzrÙ¡qø‡46 äGÈT[QziÌõT 6î)°L,R± d.Œ šÓ>ên/T\) U!×¼=šÁª©Áðúatï”2“ªæ¨ñ¶ 9aD …ß ŒÁ?NªcµÎŸ•{ ö î'ÒY㙊BµôwõRu 'Ê\&f„ütŒŠá¢f•¼€Z ^z/ëk°´X‘·—µ’´“BýB5E_I[>ÖH Pnƒ=Ýëƒx{r’pèÖMõZ©†±áb*_ÔÐ Ü u#ᎂ™Z4=í±`¯8ZÊžŸÜÔT°ÄA$AÔ‚½—oÄvÆÝ;%—¦ŠFº7ïi$W2àœÐŽ?¨í<”© }Pq»Ã5í+EÍI¨wç“Êk©²®ò™5Š9ŸüÓ¾b-xyàb‚ÎZ'§š©ä¦›ŸÑ¿e$R?°^ø& eó›¢úUŽQ)yNùXÁ»gûéôCF˜ Co}¦bT¢÷~ kÔÐQÐàmA’Z§ûÁH^’šÁuL~Hx"S^ SÝèlüëÂì;M§±ûØ2{°Íh¸¯(£¶P¢OŸÈ¾¥L Õ„š÷:4Rq¥fdå~Ò‚a¯/ŠiwÀ_7¼9⌢f ,6Gç^µ‹B¢Š±„ÏK\e:y/Cz= 04¦Ý,æN‘L²iSå²/©¨¢?ý¤Àj{-ÐÿÊœÊî§qÀ¸aâÔ7ñipø NàªÜãb‘2Å©\² w5ܲ6g6¥© ù@@çªÜOǶ`*¡£~(¡hK%SºŠRïD l§/ÏýE”:`M—‘Ê\†¢Žmÿ0zö•+sš–tæ>jEߨr¿1©ÙÒ‹”Hx6ÞŽžkƒ+Ù„0€Àò°ü¢…2þQ{”¯b SCì„]å&NÅ`Sµ-A?dÒTÑÕŽ™ÖZ@»hæ&˜uE* þÈR~ Ì‡Áê,Ûbw Ž6^¶“ÌàGxR†z??IÜÈ2xFǘW=1ˆ±Ú;yà*÷¡FÊ7‡Ï?0É2Óé$_›Úcñ¦Tzc—û'ö¬V1a‘ê8@ºˆhÄw±€(›6שÀ‵1ÜZtÞK>}VÊî’Mý{ð`0Îè8¼ëï$ƒFbÚÛmF~/¬^昱§TŸŽz”–¨Y9—]+ò~S£æ„”ÞtâN½žúVömÆ d9UFþ¥‘šéPý¼De*`*÷^¬R…H¡@âÕ‡ÆÚYPWèxÔˆÓ¢~Çç/±Ø—Í;OàÐHÍ•ªÿÜñ²ÛüUÅ„š÷sÑpÓ里êÕƒdûÌüe§éÒØ šZŽe ­á® dêµ½ò-õþÛ^µ‰ý¾‰¿H ߢsã½Ý+}¦À±Ÿã®µ#|°|`Uiô3mÜ€#ÀZ`§lÚ¦ÖÐq7è‡Â„µfƒ{'J*YÒ§Án: XS€÷{¦Å{Æ R;î}€ ¤ïó¿kCŸ¬µ…7 Ì¥Ò4¬¡".±e>ŒW;ð¢Ëù’5¦(›–aÐ7 *OãU⬠SÛi¸?ó_5Œ5­ÈTôZCcʦ;-hFâÊ}јŽbô—BÖ†²ª{~6¯lYãŽKb˜½¬|ÙÈ´âVñ%·VÐñ¡J5B½É .’¡PÓÕüköàigåln§B»9™Ág42󗞬ÜSÌY-©/®ÞË ß>îÓÃb•É\T*çU|¿I}Öè{Ðù®mÙŸ¹×3 ÞÔ?&“¬4’ˆ"vY£Ùì˜Ñ½ºuû84â WWßFƒŒê·eӦг ÈN7`–i€íe¸+ÈJaéunàªük†Ò7Q6ªíµÈJ±<0N-öpÍ­¬–e*`HŽ»‚¬N  :+×ýØ“ -¹z'ß©eW™NÅ«PƒbÑh¹òyYÃ3©ˆ…€4ч [ ›scÍiü!ó¨¨(”¼ òC‹‰½ˆ6'ÓÀº¹¶côí`ú¤‹ªP;†Êñ;DañµIp¹Z?qÒ #Óm¼< ûEËú`p²uôÆïôèø«†©8^©M£Úy,¾zÌ`Ÿ—=‰ ÷sÑpÓHVçÒk·GåAk<4¦L»žË ä~ªÃ«CeÓæú Þ§vIŒ.œÕرSsÙÕpT\-}|‘‚ ¶“Ìàò(Þ£}/pðIJßÜpŸÆ±f§v*a)8áã¥ÀrŸÃ63oÔ̲8`°ŠýX saTRE™VÆ$3¸b8Á_Q½6«~ -(ñvÏbíýà @Þ5€h£tu£Õ“Nø»‡wýþû¸ÿ>æïïн6{ûP¯Ž”PGf +d`5ŽÎÉõ·°”ðöùƒ„¤P € xi·º•³É}£`®=UX¯ÿW*ãÐÑ “ï¿,dÒnÕ¸¢™{6h×õ!A á…†A~"ÜS¸§ 3²H"‹ÃÂÜдh¸‘© èHƒ¸ v™ ѳî§£-FH㙊n‘ªi·\„ˆ#ýâ|p»Õ¾Íî¨ÜÛâŸük$¿(úa PKb:Há:]ÓŽÔ'‹¸RsºÑ»Ç_›Qm¿¦2îUs6!St?† If9ß @"Cû¼’òÕ‘½»„$q(#H¦óH‹h—=¸–ŵòª¬{†é¼—Ë[‚ØG®”v.øoË .”GÞ>uÛK’ƒöè |ÝAÒ ùH›&©™`U@z¿PØÕØ+q? x‰DùÉ2á|ãIÅš ž®AåçýÛw«Ãó†Ë9å‚G¬‡Ó E’ój†M8É“ äÍ RØÆ‹µ.8Me:ùºã^‡ñsÇë}gîãªçj goöeËüNwœŒ?óþÓS(WÈN*øxÞ šni¨oœLíLîŒ~`6Óâ¥×©P9/Hb(äà §@GEKÃyÇIƒÚîr"‹ën@ÓXëXý® Î×°ëHàžÊ0äÀµ8Öæ„Á…™@QÁìv+胬¦7©Tx¨¿º‰Àß¡ÜéüÐÏ4sZ˜¹oý|ðX\7i±M[bÓ:ë Ê†%:$ ´ŽÃ§óé~èád†ièd¹<(ø1<;³­_2î`Då¤2‚žÙ5ú°#¬?¬üáŠ/{„u‹‚(«4ÈQÅ‘5nü?§4ª–¯µ9+±ä²Ãõ{[e?’%¯®©²3@=}ø©…bm*P’¢9’=v†ý¾<‚ùA¦\ ˆQ“š„d<¬RØLp^pô²*¾LªÎ˜4ÈÕ>Òðn¿êjU5r6õåù‡‘Âô±x*u2õñ{§K(¿ÈUyx»=å4VrîÎh­~íû’jiìÿDõ;ó⇳#À]fÛ… ‰ e,J« øÍ]‘eªúÑT°ÐÔxêv®o÷ˆÆuâÌr/ú¿NúP7&@íë ÀEcå øAŠò’ú à~¸â$`LÍÉÆÞ¶¤QT¹ÊÙ£¿DþF†²W½÷F.Á¶NzÙŠ†-‘¶ºdi3¸Î2É]óþ ÷Ûb‚ ëH #Ó­,ØêQÕÅ|¹=9¸8 ®Î\¼¸rvÏÅÒ§,àLÚˆSÐ=ãêûÏ·t¸Ï ¼AkO¦<¦QU½º«XIìÜuÈ‚€ú÷4I bu¥–]õÚJÚÈUøµøLűð°Ò (öý ÁÔu¸Åšr?\1:cÊNQËôý<®FA¾*5sú©B`ÞT²JXÙI㘢XK´iaÞ¦µQ†05×ÈL1Åô+íÐúmBÍC5ÄÜ'ÑvÓÏJ¹¦²­\d©G™Ngm5z==oIþ"W™Nöò¥]XÇ«lB8+çàÎ=Ìž˜áÒ¸i(e\Š‚ÚTõ ¸mO\ “ÔN‹î“9ð:5W…²!è…> ¤3 ‚ÑÁv}t¤Q³’v…·\û ºóÿ“B¦˜=ãy7I™¯S¹n›ÖNw¬MD#SS”ÉhB ÷¨Å$‰÷Ó(êˆE7•r§‰;¿ê¦ª˜újôº½ È„„ÇD*7…áT\¹cá­^98aPε=p*˵w#Ë ‚`ØAý©Ò黿¸ÿ¶ƒäVºÃQÛv+ ™È4@ïÀu8 æßü4À:âG4Sï$0:¸k¯J&ØVŠe!o¦ýt V!&Ìp*زñ vÞøƒðƒð‘D,Љýúù¢ß ø¬õlùoÿøÛþ·¤¿í÷¿ûOÝè¦¡Ô B&8K­¤U޲ðÜü]Ìz ‘¥ÙáLű0 %¹ÊƒmŒŒP‹IÊä´;iÏxÙGHˆvâü *ßÜ5Q·×=ÜZË-I\%9áSŽ·¹ ¡Vñî:ßš>Ò¿\¾Q!FÉäêÇΩì·Ï”U² c±ì®2•úáŠüËèôSËwÒØTÆ-ŒÑqNW¸ ‹-äT[ïêJðÂ…ƒ¶Eƒ^ç­Öâšv,£ÔÌ/.]Í•¡ÂXá~¦ÿ]kÁš\ŒÄóDn÷SëënO‚ë åÍ„û¹hùÇ\Üh¤í¸g„PÐF¡ÆXiB»qI*ìŠòÏOB¼7Ó¯¼f‚Ív¾ýþKƒnÑ>DA#[™ðK¡!â#7!™P!¤m!¦Õ:n¿züÂQxÜ+z´ï„ÀfãÔ{ºMnõÝS³ý€iÌ;+’ZÖÚ2ïX0tÀ®úÁm -‰(Ô“äóW™N¶¿â'´ ‚„AY†'¤kLÓ•š U¾%ˆZ°/©“Æ_W+ ßl¥“IòM áS5îb½ Ê*ÍÄWbX­Ÿ»ÿþþÝ3€s‡$}¿~i¯ûõ‡áÍ]qèdD''Ã3~å[»+¿š[¹»AFu#1ŽO„íúØ£gv}bÞí˜áì$üæLOW–™{˜G_grÒ%†iÓM‰êï4Ž¹Ì‘vl©°õêa…>xð31ûÓÖFO£uÃÿÑ×8þl;ÿXTeBiØñólɹµƒž¦†Ã/º/ÄùÁ}áHOwµØ"þhªÛv×ܪ·'Ûw.‰”*JÄ’ºêžL¹( T.㸺%¸Ò„¼Ó^Qg$ÍJê9€OŽ Ž7dÿBî/TRè8A¡KøHÅä:ï÷]W2àXîÖÀ =nG‚Ø‚Q¨!iÜÍ¥@ËD³]kï\ža9Ãø ÿ ó}•…¾$5œŠfêg #ËõÓaXÙ …úÁý¼FxJÍÔ Ö¨VÙ›ÇAÛÕÍu6jÛ±ðà‚†ËaËÛÇþ@-©øÍ;˜ëTµÎ{ºš5H¨Áû̪Nêžæ1ßž?T6NEapdNª‘z! Ý; € gœ:7iQ«ôª æZv"¥ysæB†õNFú½ÒëÈÍ’€7»Òı¯é4®ü³R2 õîÜ,;ÈôjJø¾¥«JÖŽ2ÆE{*êÙ´š6-Ç9à8yãfG'xº ¿,7T¦IàŽ¨Ò·"¢ÈN,€á8¼-¼w)`±TË ¸Ób™ umäÝlæRYÀý4vŠëFwÔ¬£ŠÓ­dP½:Øn†¢r¼8ßÿ‡« ËW"oak³'< >ÓõÙl¦Š_S8—Ès¤15ä°W/ÿq"ÓÝU¦æROí[/vn%ï9N¿fÀën¿Á§§ûZ]§êW*#ˆš³'k[SûúT.-­ÛL…Ë“Iͧ¤¯evI¶cà(NÜ´j1I;QS¨Å•²ÒÛ$eRÂ4dþËø`¡@î§›úAœ¬.»R©”4( o.`ßæõ‹3ûj~§©…˜ ã¥x‹ÄM¡¨ðíÇÞÎü‡mJ)à¡T@m05~à1í{2ÞZý¾{ªÜíð®u@Þˆ z.Cª¥¯´“ %Ø»F-œ ¬³k;ÒœïÃt°MÏÕ„Ü@ÑWÂT$y L7ý\4Œü”ᎂr`3¬[ºµhôHÎekúÍH<<‰Ÿ³ÎÿÑn—‰õ 3—k Eax{بéoó…‹’Ù¹»9Ó^hüé´Ëð1?v¦ñöt1Ãáe>3˼%u]RXo‰h©þ‡Ò>q5èö*øv%ó~i†·§›Ë\m§æ¸7Øî¯5uqö\©¨PË£§f#ç³< 9°^l~§Ù¡´Û!0Ó¦òºå‡é…“Çyÿ%ÜÍ:“0 |?¨+àŠšHÉoŠ)“iU-;”¨©öZ†É 'jª}¨ª™4S¼ÂÄi –m5ó¦°“)§bäEÜ)+ ¤ÑRÊJ¸ÿ‡ka¦ŠU#„´›Š¶º½øÕÐç%ÐÑ›ÚB)Ir°•Ð[AÿÔ¢™:)MH!o‚ùp¹0* jÍs#‰iÙi_§²¥xƒú®Ûìc¡×ôÏ’„ã-¸^=Ìt¬ËsãyÎ{•Ÿ–©O‘àAÁ6d‹2!E#¾µß±+ì*ÜΤW‹®®œ¹¥†CB!‘çŠS]ÅÞtxS’Ú‡R3!1è÷&@Cú+Yg¼½ Õµ˜P3ಃ°ªõæ´fê˜C”ÆF2Æl' ›ÛæVz[c\Ê@Ñ›FÂ%°³mr߈ŽÓhʪÑÒé­ú ¡E¼-D{?:ÚÖz#6¡¸Äz—û/ˆec¼Â,éß©í¸mN7gj&Ô»Ñ^k'ã³Ö²ª ¢¡mԒ×s?š^¢rª´tÜ@ŸwÜïú{¢;ÌÙ Æ]sEå+Añž(×JÚÞÛþþ°k×ê’J^@M‘“ëæ Í¡ƒJÔ” iõœ0ú¢ÆwòÔI}˜ÁÙÅ 9;É©,HmZ¬ã{µ$OGO£=‡îy Œ5À۱˼…þºÌMÈ™Ši6ÁoIåj$¦…ômwÕzëÞzqðÍ88à"lø‹$Á§éj°wðOÔ(ÔTÆÝ°nô>Ú..c£©¿AR²"Î&I ðšT‰-Å©(©à‡Qˆóƒ›Î-¿S±DeBBÒXv¨ÐPåB€Z ©+LŸ–Ñqn˜'erЪ? ‘ï~ª |pËgµ ¤APì&ï_|§¡!vD`÷Apa "Ó =÷¿ëpåˆÐî¿„ð‘FdÄLôem»ÏÒZR62å¢ôN#¾\¼Î7ßò`]Ú»Ã@U62IÍ´w]ɆӖ ôjh²Ñ=ê cL9•%*Ð%X†".¹Œ);4¼¥f—ÆŸ—á“Üÿb±€²`wú!#¬!¿Vvà¥spô€M;s'Ck×ê‡e¾léS£Ôz!|Öoˆc$èwÒcÆß®j{*÷ÍUÀ¸RPA) “ ‚TQ™ð yÑtÂ"Ê#ÞË9¾“`â$d"™ï J:ëkõohã«ã]ÓNŽò(Æô·éäs+y3yM4SÔçˆÍØýŠvRYŠÅc˺¹9þ¶³‚‚@¢ÒLÒNJÃwh½–†ÓœëpõzXšá”7R¥Í´ñ°T?\qÈS^DAXmwÍé™mSi\ Gj½mµøº°¬–>TOAMW:„²5£3õa†{E3§÷ê0!׆:~ÓÑpјF˜Z'™Áz—Ϋ¼Óe#íºc­ûq†eŒZndÒL(pÙ|w‡F;Q_sva¿Rù©š}*“´§r“¾ í[åWé¿T4QR¦ †2Ì ’­žÇ ÄcB…©j÷&KµP²­F?¨C>/ £"pBð€¿ÒÕ €û­`܇Ñú¸VT@ƒ “Ý‹ꪼcå…V_XKõÿT»Á @·úÂ$LmZ€¹i “FPCsÇ$n´¯÷½Þ©Sc‘ ¤fBé2Ú«fÔhwÕÉÅÛpØ~od§‚ÚíPTI2r¬j&Iöû*¸ oljøsn„ëœpÿQX¯îÅïƒqD™Ãÿ²ŽÉÓ¿Q°L¢gö…ðõÊÑû8hKñz÷Ö8P®¸ý©•3 v;'ôQ[á q¬áµ” ¯ÌQZ€‚PÙXœ®SÉ3˜ðÀmá4*t5¯¯»àfÙm#õ?M_¦žÓX¶º xså~ á93õ_'y:T 7îÏvÓ¸˜_ZL[µY ; îᘕëä¢Px®üJ=kFmô‰[ÿfbŠ`?„ÊŸými¤_ŸÄ= -,ÃÞ¼ƒ=•ô4¶7À:u¢Â•§»º»J²Px ®ïÕŠDÇv ÿ§}ÿágLJñŽ2'™ýißGÜÆ¶\žç5úËñª™J’°±Á"}Eê1´ÂD¾¯¡¾SÙÅN‰ÁQ§é%<…óo{Zv¼=Ìt¦ÆSÃs²7Ƀ¹Ÿ¸ñtvAf®è܃cŒöV T\æÂ¤/—¨ð…®S§'|õöq™W9†%¸Æ k# HÒÓ¬J—œ~w3|,qJmîpÌŹԎÀpä%}{̇½ÛÌÛÃLçú>Hía¦ó;õÓY'ÖÞ ]†ö$CÁ%VÇ<ž¿YîzMçkÛžkç—ƒÁ⦞È[ðÔ…Äåb˜âîú@M·ó|§ÂcÎ_©ãÃTfÿš%Ö$.4Û%iA[4(Ðv7½¯àt÷4î¿t‡íÐx—ÜD)WÕ]}Fô`#Þx9£À/à%‘Q¾kM*Ù8t£éêíq'P=…5QÒ¯ªýG˜îqP3ÁËCÅ•Ã[Û~*±×t£¢t g¬÷uÿ} Ì;n™ˆûB½6þÝ¿nªw"#P›w.Ó øÏK ,SÕÛgqèg*Ôø¤y(e¥FÐ%c€v‹XyPƒèL ÎEò¯jÈó†uý€þÂé0Õ,RƒbÞ;fÌi¥ëu"p? Xm¿€Õ.C#eU¡á¹©Šy5Ë@Þаn-!²ÎqG°˜vRð¯àÿÇm¼æ æª4ˆuÖ,b5@ß\vË„b[ƒnÿ•Dn!E¡¦úâ’ƒ<{¦¢ ÷q¾8iDœDp7_9#¥"[Ç@íyá­ËïûïcÞqcºå…pàÝd ã¶6H&ë¡ÔW™N«™óèXÎ3 âh|ë”liÜ’9aþ¦î~S®Þí ̵í®â´Úó]ëm{=Q|o„~ÃĽŸû/}THÙÓvñ_D¿?„ Å¤?µXÎ ’4!dÊEé !ޑĀ\©¥Â`FÍøñúÃe7‘ ˆ÷u~ð~;  ¾)iãë¼jcûÇo%ú)ÓýÚ ý:ÃzõÛÈ ÂàMp!†nnõ/(e—úêx†|ÏàLÚi¨ü©„Õ¸©£ nÙþÊ v+ê Pº{Âã@*éÖ¦[®»ò¦ïöäDË`¶BÕÈYup*NùnHd¹Šä]i{ hÑUË™Ú-„<÷Òï6ÔÒ8x²Õoš¸µìP<ÓO´šÿ§ÊëòA4óëUßÀ£^ãüˆç -·tdÇÝÕÏM?˜¿Jß<—MûŽ@¤ÒLæoµƒøli€J¹'ö*:b~ño⬋öÆ-Ý…Êݽq?¤ˆ>‚öÀ$hÒ«Ô3=pè=ñ?õê–ißû›ÚÉåO‡A²j-uOçÝ<ܽ’¯WÕˆ[lc…D–«ž÷2åþKBМ %Ó?¯óí,øÚ]7ݤ’:§bpb8öØ!R£núgÈÇ·lšõÇ`Šk• e'{ã'lmg˜¹pÿ³Úˆ’ûQ‰gB(–ØœëG«'gZ~;¤¶g‚óÂ1ß‘¿úe>L¡®e±üÚÑ0#ذ…Ê€Rƒ°nÚpOÛÛ(ÑÍŸõäRïr-ãÌö® xLK^§fdªúy/<$逖:4#w[¡6`ÐPß-•‚JJ¤Âê}‚ýp4ÏZNÞ -Ф~vl+tíüM©%ÞL;ÊÒhœ¶$Àë‹n%ÑHY¾^ýìÅ ò"™Ž\˯ßÁa”&VŸ?¥¶êb/WüÍ¡¦}d[‰uŒB)}:’ðœ^DœrIe¨b@N_š[u©AÖa\¨»ç-úÀX•dªêu h礹wjAÔò˜ÎºÀ`ë®rV•ºkæ’dŠa“ésè¨_±‘ûG}©^›ÂQÚ^‚8ø}ÉHåþK‚ø~›P´ípM pqcÆ9§vÒ‚6ÔLˆÎö- w߈¡„‘¶àzr[ƪ[b@¶j Nb.¾0š1䨒Jœ»`„‚°s¨×4Èq›N+u¿$0Ê)¯ì'o‹ûØùL¸n<0šÇHEÿs‡,,=0?¸9Ë‚éô\aìÆk¡e rà²/¬åI&VÇq Ì0˜p·µ95þK‘7×$A2ƒ£ƒ8òañ–¸áÕHäŠïÕÉN iŠÓæ€el¦ØÓŒ»Õ«ôj»ñÐx§ÍÑ;#óaky˜‡DXô‰éÎ+†& ’éÌý Ž]á¬,JõÒuôíÐÌHЫ©ÞO¦AÌUê¤ÀôeT‹ÐMœÄ„Çtúñ"ñ6°@6DÜÄ[4èùÁ2Ãp-n®DˆŒ¨eu—Ú{’‡á_]Í1£bø?Ê9+Jm*ˆÝØ¿ï©áw‚YòvMYS=µŠš}h"”là#‰+'§®À_I‚d:“BÝÚÕ’˜ù¤³†k®©ip5.ÉÝÕ`3ð“UÒ‘—yÇŠ‘ésÄA¼ñeŠN„ê„%ôÔhÆÚ: #â²×€· $OÏö߸Ô!‚;‚nµ@$®ÜÀsá9Êt †àE,¯cT“ƒ_»Á‘hNИD’3o‹ŠSíäˆ'æÀB®¹žŽ½{–7‡~: Nòà\¯¾ÌtŠÿ¨àH©~píÎoÞš³Ó"Þ ,#dòYå¥è?Óú§“ù§Çl[¦V¯|¦ôgk»Ì…~ý‡ÓÎ#ó~ã¿XsT¼’)4ܳ·7Õ÷Zåh«7åƒ}ìá¹amÈácˆ‘™p&§í‚µÂ6ÞHA‹/„¤Q ›Á×§Ðö ®%LmOžnþZpÕ«Ãp!W™N>r­3Sí:ïÑÎú>Ú´» °8£‚ïºõþKÔÇA̾ރ¥úÿÌŸ< Ë0èлW@8Ê“„yÔA?[joÞ@˜Ñ@kFæÃr?Õ5:èDç>ئšV14C¬;œtëV·mþ…\møT?®T‹/qn¢Éœ0u ÆÎÛ‚$Ž}MÕA¦¼ v Ìe8•ÅÄiØç†à6ˆ½žûòô%Tõ’“„ÑNi¯·ëç§Ævß4ÔÉåÖ—“ñ¡, VHqÂtã:gñå0ãú©_k…÷Oƒ†c@Tô© #Ó­ö‡$†(Ãs'Ôò¨UÃÈ|ØÜÏàZŒÚÇÌñ@FX”qÖ˜7.×5‘?äàTœ¶I(s™Gå>œ08_||ð9X›…íÓ‡áÍ¡ŸFSµl´ 9yÙpå-(‰sŒßo/ÙC¨AI‚QÙ†æ‡Üà>šQŠ,ö]/( y`T‰>*:q¤U{j«l€ga‹ãhûÅ3\lÖHD±Òü7[çšå¸náÿÙX² X‚%\C¤CRÝ—½ú4 éIrÎ ê+ð!Šz´,Û2Æ%6ªC0 ‰¾ð¨Jw<ø‹Q,›Éɸ.\Ú·& ×›Óâ<‹ÏË(kž©ørdP½¶À|×@ýïSt4`-œˆ#;šx:('+]Ðqz]ŒE†©Ž|ÀJ‡Äw.ѳR¢€9†¬T-'’þa´‡õCg9 Üø…4&?€tbuê¦Ubc½Ë}%Û†….Œ²ìÂÐ#ä¢êÔšç°E ;WYÙ4!*lžááí3AÀÊÉs²»0tœ3Ñs}Ëú³ç³/ª†…ÈOSÛ‡ëÎ9ŽžÚ“¿ù· ާÅôã#9–à ÊVç†ciTZŒ™l|·ýùÙ8€t¢7[Ï>@ÃSûÛÊæBj J,ÒÇELA±R±"‡ûÿoÎyÈÙ NEÉ)o\°ÐåÐÈwí2þÓù›)¤»‹$¥x³!8ß5ŒF åÈm®9Êî ™vÂB©3zŸ.ºèèŸÅÁWNVOå5vÙM½lÖOÆÈÃtCÈëûàB®BH‹Â‹=a(غOwÊt(žI{è}4“û5ôIºe þ¤²7±5¼±H(-Sâ{DàeÛಚKv.Nª=ÈoëñµA0^"9 `8€™!ý@íÓÔ ¸Í8}Nò=+ÕsÒ5©-ZKnÙ6;ZtGëõ"úÓEÏ<¯\qœ+ñ13ñò"lÌÊ2Q=Zf­H<úh¡?Üöép„]Õòw¬SWb+yf€ÿ°F 'Ÿ÷áäWÝàäB®qÏ?Ö¨‘[ =0m¼pe[PãI’Óâ/þdíÓåâx¸Æ5y‰7œÀʵÈ‹ ¢‰/ß#ÝÊP´LÒ~†æ-_B“6ÒàÀ¹È÷M¼nŒ|j.¤\d HT/§ºÚú‡iŸ,[¸'Z˜8_m£pÛ>^låÌ•n»¾]†xX*õ8A,6Wö\žO?êê™/×ê3Qo”4aH¹w¤ï´»é"íÁ_¤y‘W¨v||‘`0_”ÍVÚ\ð9 c_‹`í ˆëøOiÄó.bÛ®J;]6 âeUrõ?†Á8Na°xƒÈDÝ0Ÿ•ò¶ËÖŠ§·€òˆmTk„·¾¡\‚¤z2y¥w6ߨUrZDüå¸'½ø¾&w[ÜM’IŒ´ÉæBêp«ýºË²©-.øg­Æ‹1èps°Ëiÿð¹,£žÌÞ…ÔC•kuÆŒŽqâ}™F <¿©=¹Œ¢³²ÿ \YÌÆä‘·ŒŸ‹ÚÛïà·zëðÊ.¯w74nU\„a‹ |ôí»ƒÔÓ©t‡¡øOiĸÖ+RÙÕÍ~ÏŽ'=¥ ‘Ú†èx›ê¤4¸)4Q†–>Êj¥$ûHàG tî§:#ך@¾I]ðˆÓï¯&þ’ý—íÒhØ}§ayð€•9Y™¯áS®¼$ mÛ™3 ‰Iv‰«…p£GyØ(ÚpDH†æ²óX%ùÁÄ9_#Öfq+ôtÜ£„‹k­Oðú9m0®Ä@òÔîPÏïV)íNèÙ¨9ȳ½8Hg.Í&‘ó€ñ§Ç·×AßÌ»v jÝj‘‹[ ÖAWÎZnß¶Ý?ÿø§üþ£TÇyãW›E\¥Væ„ùp¸~Øà%É*aݺiqÅjýSüùðj• ,d¿¿ˆÿTòi…òg «’gŽ;u:ÝH Ê•'IëÆÍå[*£'ABù ÿ0Å]…æ‰^WŸù®¡:3‰«e«4x-Ô`µ( #᜼ª-XÒáb½*Ÿ&Í¥ŽV…´QTm€µÑó9ËÛÇÿÞ&ˆ<»©ºŽ±‚ºÅ—XH’áÉ´áÕ…ìœ$ƽ<ÿ÷F1':WÞ^Ví9þ?w¼å™•†o¼»hwC C4¼J:ßTFÑ0¥Æ”@¾[;Ë6ôµ»ñkûex2†à¦^A?ìdoÈ„Ùzã`•ÅqqÙ|ÑvþŸ0ó Ûîq‰ùáZ¡Ðpºô‡Í^¹4I4É/•–û£š2ÖïAÛk(« ½±ÞÏ[‡ü& ROÓQvÙóåtqвâZóÅ@lÀí†Ñ¥bBd°rƒµ Èð%“Ø<þÛQ(` ÀæS¯ †\¢ÆPiòÊš!XZõÅÕf+Ò £ÒîßêøO/òÀG>ÿT:8ЏNJ}XîÜè¡æØ<'“‘tŒ>˜vi JRGñq÷aÆ„ ‚_0×0:Еœ);€wTá$d¾˜¯pO•Ò@gÎÍË„RÂ&«’¤Ãô‹ cRŒúÛ¨¶|¿AÝ¢ÿåÇW{D1Î7ªÄ}ƒP·2bœš´!lÖu§2@#Ñ_¸Æÿ© ïÑ·3—ÅÊC¶‚ãÅKŸŒóétÈóØE.)…dXåæÂwGT¼H!\\ÞÜ@b {#ðnR ˜Wœ¥ 0ÚÙ §ôà‚Õ_’”é(‰?°Ö0Ñ9Ç»9e ¸£°ä¥5Ñ;ð-;ãÓ¥£r‡žt…òÓ/ åpH”ÆÏa¤Iu´7C?Jñ.´ã]+ÃËž‘w¡ÿÍŒ l©ãr¤4ìøQ¿Úïš,÷Yõ®N ½âû˜^£ùëÈà#»‹ó<8Îò0Êè(ñnR\ªk75‘t@•Gó„¤ÅÊVd_â”<þ¯³U.‰MÀÉ(7ü!~QÂj¼Ç\­Øóà¥S¹@¤0´3N@…žãÆ/”]½S°Ýz1LAYvPÚ³Ò$Õ¬¡HP¶Å~'Ûï“/F³åVÝ•Yå]K7+Õ ðÛ|Îw 5_Öþ²XÄl±hUðá‹‘ûa‹»I‚DÑØÄ áÚ Ôû¨Óy¦Ë¢¨[Ô <&D±ÎRK$‹¸èq1ÆõdQ!l1úzØÜ±oqÞy¸]Zóè‚vÄç­¡Úƒbà,õôì ñ"Ù99Bqãj‚ö‰³fÑJ¾³·;´Cü ·žè R:È’ù¼/.¤fdõ ç îû!„]TG| <¸t€šøXeß¹„v[Ô¨ÀiRqyçÒ ¿ƒ$¡¶„çÓ¢\Œxq EÁDíÓ4Ìw ´âwåPô“^ˆ‚mñãXÉDÆTKa?¼%>‡$dÙÄ#‡êËb‡TÚyBqJ{6âÖÔ8…b'jwSB‘KkIl§â⌊Àh»¢óHfº,J:Í"Ó™Ž^òƒÔ%|ãÐ`6 þÌüvøÌºãwAüáÿÈÎsì`Ü`BÞ™?òØ<(J–ÍÖÏ]‘Ͳ›VÕî„]ÕYOŠò÷I\fÁ]CµÍpôO¡…~cåâ£ð­OÖ…Ýrhsð÷–a瘲p¹\Áxá&M¸‹P˜Æ“dsÄÜìY„a*ÝuÑôªŒUÚNÙC±öÎB‹taZØxò}9Vè‹S} £“E³Îy£wEÆ0Ën¦¾s‘\µÌÝ×0’߬Mªq•qa$ôéÖV¼ ¹P òµY•<ßøxÁ¤Z {ÊÄÆ“I“:Íz$ãJUž|[úÊCͦ,)Uóeñyëí†2[Ðñ˜Å:KÛiŠ‚7›±À‚€).B.‰Ì‘!N~ <˜{ò†:á¸8uÓ¬Þ3ÎÔÒ¢ð®tåbJ·8f€UtP/ŒUŒH.G ÒÐChbwJí,ô·›"¤¨}™4±¶‰?lˆ—€KhˤÕÜŸï®^Q6Wõ^%y¯ØÚǯ·Ž‚evòqÌac·ªFkqÖ1Ìöœ¥|QxVD60'g|Ù)£•ræ7ÞÏ›Ë_‰c~ã!µ‹£«õ¡OßÝœ}æewÀ[3íä¹À¸×¿Ìo(=ügò}þOV…>¸¶ezàŸm潪åj[&Zá´ëœ¶;ðMöìŸ?íGq;{0·â›<ûS¿&Ïþw•"q×Ù6—Õ7<¦ë-V?¾æ†U’w^ˆó4Lü,•›\—ée¹x©;|W‚>LàÉ¡Á W‰UÀCï(\Þo4´L±5ÒPi<ñÇQ6×=”)9V×106ö¯À-®m™îˆâ“I—C‹08¤ï«K7ʾØ"X#yy7&J:Œ‹ËlÑ!^þÀÅeŠƒ´ƒŸ®Q¶J¾í";ÿ-~´#ýȨµê÷c„*CùÈ$re×Y€ rx!æg¡tಠö%)?Úý¼8}`¤qt+a Îª§€•úÉ“§®Ö²ìHVž¼Iµ‡MØ)Oº‹/ô.ÙgvDì1A’à;7¨t‹þwçF©§K¤/„qº¯¸ì廪•)›gÄù‚¬¹xCíËd.$Wv•fEo‹¢Ýu ëi€"ü†ß¯0]‚N0÷؆@—l‰'E²´S²—o'„IMU’AÈôù®Fñt w’Ž[Ò´o¼V ëm$¹PãI’Óâ¯ÈËOP®A˜°à».Ò¾S7{βC£§Æ%´H:&¨çrrEŽRÏ…×ÄvĸξbdaG¾oøRŸ}g·x÷$ä)ÙvJ˜ÈÅ’WÉÊËÏäUûg‘¤‰«Y>XâÏvX@'/Z}ç÷‰W²í¿y­U®ô÷ZîÙ]ØU6‡¬˜§ïRfÞN oÙœg¬ Šõ ³€«ÔešlÓ,ÄôÇ™6콸8ÿ:/T—ض Ù¢çý…Ÿéô‘¾1çêØÜ…)L•ˆµvŒ/w ›„’SÔX#x—ÜXöOƒ’ø;äÌ¡+%iB”Þe–Ε¹qÝä8ÐÕÄ~]цً?¤s²$,(ÿMJ•e›”y±\¡žèêêíÞ§Åpñ¢`1—åþ»^‡iHBIƒ0õ3ÞÛ j+éω6Ën.ư˜K¸ÃrÝJ‹6q¹·\mËD<„Þ‡³.g»=3÷bÅÅç¤D|¹,ßuØ÷I*ø:½1Ú'*j‘wSüµ4ìCêiQÒa‰†°QÛN.`Ü4]½&þ°c¼âó9a2fÓˆVR/³ÚÖÆötqwù¢Onèa:´›þ³•|äW-ì`•tð)¨&zOxû¬´Ð—ê¾è¡ àAŸ¦ÚAcë±Ôê"[@›˜eªìÔׄ›_ å»ZRÙ»HÞ6|‡dàÅw>ó’Í…t‚vÃMëéÚ v¸} é4Ÿu:hÜ„ÄÐa¶ ¤«ÓêÙ`$ÀU¢,\à8ð®ü©¤‹´G-ìÂŽ­Oüá,ƱûGþýGãÿŽP/JË€ßOègúK êé0J@:Ê&bâ¿(é+× Às¦F/ +š¥DÃV±¾ƒ©ìFø (€ÙÅj<Åó'—}‚/´¡ÐT{PŠR¥´È‹ÒðÚ%ç¨Jì„ÑŸ³ø%É å¨wo/.Àï,:ýåñŸ¶$Y<†<Øb1iI&^EÙeïGÎ/7Ú§óÁŠKK¢=,£‚Å„ ׼ɎŒ!ñÌû;fæþFÚ«Îj^%ˆ+'V‡ȨÑÊ4IF™rsáÝáy+H’ »âtà,õœtýDié°ûY·!Qs›P¡6±Íq›¨Žà»ÆFe¬Ä¦lly4ÅÿíÝGb§Ë¤ ¿ô>ÎÆÌ»I­¡gÎ3WOyƒå%Éà‡‡ZøÀˆBÃ=±£/B?ÓÙ¯~].•^œÀ…;SºŸL;4g _¾Ð¯/‡­«ö 4³ "/E¢ÝteÒE7F躀kœEÚt1;ù#|Ó›L 'LM%Nå„fÑ æäÓRßÌXéo*¦’\pL kÈö8¯ÌŠ`{4_täȨTF¨#ш!§õ‚mÙ\Hc&žO..¼DFÒÂá>ð8Èb‚(»ì®%´ô!ŠýæÈƒó/vª•ñŸ´cPvV Õ–,m;3”‹ ï€BjšN‹ds¾Çl¼îB¯û7£ã?!l'd§M;Q ºë˜<¥ÊÛFià–†§c©LŽ£¤R¼¼à0Šª÷Ý ×ft¿¡œ\p66äÎNOeÞœ$Åñ•r4×¼½jð8ÀØ»c1ïîpT¾¹4Ç’£¼2©c›ËÀ…°@žÂœ¶3(u§ê)\ Oº®@¦‹²Â&k…$A¢3õ¡ãxGK¼zEª2ïè’v.âò‘Žõ©oI/þp‚‰Hƒ~c‹ƒb)øüR Ý[dF¼F|"ìÙŒÕ=1·“FV¨ì¡\zàxÕ1ÈVåSíܬ/zì¤4.) "ßù8@Ø5òÀŒvï1…8ï]T\„’Cm­FƒÔ³à‹uèƒ:„9…J½€%gtÆRÑ„‹EBC¥sÈÅ*¨•Sà÷Ð{Ÿy£‚ï\Áà¥1òógaªTKNX¥Ã'Ú-’šÊ„Ít>”i™dæÞà(} CÕâ!–N¿ A÷zçÝ(CqùÓU˜ø9Ø1l´Ü)0'¡YÉ•›ƒp„rü%äM%É~ga,ȹY~ìŽ#ŠÂÕ|¡x†('t¿˜/ëᓵ9.Â8rÁ¥’³ÔkFòÑYt£.h+ø¡Ë4iÈÕ™”mᎠ†Ä3Ÿe{ôÍ U‡ tvƒ‚ËÉî„×ì¦.zÏt,ê’Í5c‡fÃè;o…’Øs±.y÷_qYæOëípbb‘í“IÿtÚ—wÄfÃê(úŸ.P5Žoì¹X¥)‰Jì· 1¾°$ÛbŸúe½“¼‘âÞð4|±ö¬O&ýtw].ЧÀ’NüÈfÙ'GÓÌjÐx“;óØx^ë‽b’lØ£ÀJ>òãÒ΂‹t¢—×|‘1Oèsl]Aqƒ&H ó+§æx±Aüd_ûŽ€shgRqÀG0Œ’ÏSÇNÐÇü–Årù^…^ƒÉÂß&üÇ‹O{U€Ÿm¦€è&:„Ë_«p}Çe±öpñsS\$4ïR=rˆÏC`Z‹Êv#(ø¾¼¥P@ôœÂÄ|š[ùE~ØÉ^ù²’a¥»ØpNFÙU)§c¡”Ø)ËnÔ!1aöâ¶¼NRÈ\Y•É‚š%Ü+ZXŒ¿!6¿…,>!XTeDœ Œ¶“šÑî™ßÄvûDÃ9Ùµúªã?I² =èûõ[½F޽UU*AÜ v8×+¤ß¬.\¤¶ vRyMìñœ%üØðÂ[)!—w*ýUº¸Là}bwzKbÃäW¥pÅZÈÛeÏ—s@qÀ]-CléÉÇ"íα0˜Q”›æœ Ý"ûO£ûò\Ölô±Ú¶]q*h'Y¼\ÄËds!Õî(õšÔ‚Ú,ýáEÅk ¬§ë];c9ö=G`N¶P9â«É¹²ø´qÚ³ï 'â› þîûÈl± ù+§!ã¸zɈïQy,bDK•Ý"›L=?Í…©M@w†B–M.ìz@ýæÇâ"ÌGþ& ÅÂÛÊ6Më„Ê9í'¬[7²‘NNÇÄœs1ªcm™‚­ º°„çÓ"nÇä ª––±ðg³-ðÈJﮊapa´sŒ%œ„VK¤a„~ˆ‹Zäbê}I²HðŠY4.¡heØ ðVƒ¡¬³žRÚfáEÉ ÊöZ´Z×Y㛺ç:äX+CvLUbWÿ©×`!]¦Êfu%‘'äíp!ÅÒÙ ž\Al16ö-8Z®ù(½à|W/@ÚIP¼0q +[ÖU’á²Ê¶\Á)à+^¼Z¯Ÿ,Û£ÒE¿É›K¨Pú@©W8lWã&Û"ÒOÖþéÒmpçxYô=Í/³ÚÔ¶ðÏe5ÌØì7jÝá#‹·/ˆ-mOG*o'Wdã ÿe[cXNûò1Þ·E2± O´“«¨~`˘ؒ‡ké¦]ï °Ý"]¡ìp§ò$wZ°÷ÀøD§S/e•zâ\Æ+PÇ»8|‘‚æ§ÛÞòRÏ{×òýÓa±æg¯¢KÍ¿ƒIÿaÛŸNû‡Ïwu—+/Ò>YZpÍ O#”–‰c$üì8ºº(´qI¤Ötíƒ01YÁ1Y᱈eãöçÊÄÒ¿Oþ®ÕI8ææM¡3´8v»°êãW¥°SNÖæ©í7|`¬Ö6e Å#¤¸búã3–å,˜ËñÚG¼œ%TÉ q¨Êkò7•`Ù&NÌc’ÃÅ™n}·5< ^K‹‘‡‹|–„swÐìý/NðBLù2í.ÛÔZïÝÀì’çÜåñðââµY§sQ4¼xµÃ¯Ú,Œ*•]ß'*cêrãú7á6¿SdŠÕ?]ÈTBe'¯™ ôV -¤õɺpRãEûÂ2QrZüÅÁk¡Ú|˻Önû/Œ:E¤Ô°—q3„›ùF÷‚ÆÅ˜½Úô^ç©4)Gé™ß0àÅ{¾>­Ô3ì]Ù—.‡RÚf!Î0 ‹’Aб¿5;ýû'ÜÛwdÞdÏßgÎasyMºŒú†Àˆ8ïhŸˆqÃ褋’AÌ“—ý®É¯ ¹¤Œ|ü*ËbÉi:ä×õE8ÞiŸ\œz(æsbÔTiA S ÂŒæ'>€$§º¸š´{gPãdš¥ni”Z`¾ëjÿ0˜G·ž×h¹&'¦&ØÞ[|¿Y‡~ÑÅÉAØâ¦yŸÔÎäjfwÁ#í*QU]0h¼8(A5ªÛ¥y˜îPrnŽø£çŒ5ñ©è‰X€q ¨-*xÊÞLÕÆâÙ¬x=´¸/n†ÅZU8¼²s’Ó=Ž´EÞ¼GR6¾¤ÙÌî"­;iÀ¾¯Ù²&Ù>™ôO§}yÇt˜6j¼¨ÆNLú§Ó¾ü;ç5¨X£»0î[ëpÇç‰ìsÔ·L €U´CO&«J‡©$‡¹H_’ E{^ScÀ7m¯ âÀñbó‡ÊÓ{¹„âÄØ ÒŠ1UvÁkÃ3—äˆ#haZw6?ù£¬¸âs@Ñî°ªY¦YÜò'ñnÌɵ˜b¢ƒJ[-ÂÌ¥4©§vÓø@7̬÷Å.»+Òã c¼7¡*?žª4¼_É-܌ߧèè‰v‹¢Ýcꤚ/6ê.ÇÝÕÑ1¿,îù2àÒªWz\ÍᇠtÖö½–9YÄft¨4G)ÿ â2 ó*åå”;‰º~ŽfjF\B»ƒ+>1XŒ $ªNø=×ų'ìE“xqi¸òß²³SÎ{PI‹æ ãÊÉpÎ%Æê07uŠïÝ꘥´/â²X¶ÅètšÆ«ä¢ä%̯ ZƒšÃžvÓ5´Œ_ýqþšXr¾Œ*¥=èÞØñ¤ôr”íƒÐ±»ZNïçÓ«²›F¢N§éíýÛ €;(AídÇœ÷ ØÚÝ%Ú,r1E7˜ÁiÐð‰k:@nùÂ@ƒƒÔ…]³ìFE(-Â1i&Ñ"^ˆwQݬ´ìÈë2Ï\V—Ÿú«špUê2÷ä?Q{¿ ÛdÚˆ‹ŒÔ¡¦É\\„Ò"©-LœJ—‰X¶ Iˆ•¡—BÕò‰öÑÅPÌ®—EhFûb\D¹K¬·ʪHÔš±5‚t¢Ý¿áFˆÛÉ À¨qÛÁŒ{;hýpf/ø¶>;ÂÌv»É¤Z™oñ7ÿeCÜvåÐ^“ €-ª$€” à]vèÓâóÖ Ú ±óOJáê™·ôEic£=T»SqŤ%¢Z¾ë„œ_vâYµ+ÒÎÙáN^ )”ŽHᣇapJ–zâØ6äÒØ’˜ÂOE÷ŽÉ¨Y´õ>å HÜ E†œTÛI NõnlÛQÕ"íìp8„ì®ÅgiÐxù ª¨z!ÐÆ¡ÅA¥c‘v0.\AŒø¼zŒ]Ñ[Š×Å• HzÙ8A2=<¦ž€ÙÁ½$:òØNÈnÑ~ y«å¸„^”»ÖÖA=§lŠ¿OÀ#»(G"~³ú×$V, XLѯƒvC“ƃx#°Å1¡€9 Õ ²Ým€TYônª¤ì .J¦œàMjÊ.Å'ð˜ }⪠ºr?·bÜ!•¶ ÿûS2«RŠ­QHTÙ¨ì£NeÝ ì €Ö8@ê œ¼$A}Wvt”Q0›vl’uê8=CS5ÈÍâ#áÝ¡g.!Ë)»báÎÝôÕE\K:Ì fC8-> Óæ|QĆm%o/€Y유ÆÉµ˜ŠvŒ ¨lŠ’/n„ý÷‡2ôªº‡jÃ˹˜>o5ÀZ:h6‹Õå;¬7eàŠ3n\¹Cö ®ÕI»nÝöÐ W™§£y>G<ŽQ €YZ¦Ðõ»¦Y’EÞ]K7°Ëu|…04þ¬d|(bBå—7è7«È—E.¦RÏ Ú •›ƒ¤Ã7YAòF¬ i­ä‹]°39Ê+²%/À˜“ÀÃ}½Ùb ÌT­ø­¨Pî]¨"<˜^€qeàbÒ G!I‹xW‹Tš'×b:ﺆíꊕe“;¾JÛÍgñÊÇߨåÿìBþp±Ú?1’†€]c‘öÅètE攀3hnB ºŽ”Ö¸nÙ(„wlcC¿È÷vºˆö ,>ø˜yÓ'âaÍÒîBå…=ðˆ$¾›,%šñí±|7‰Uƒ‹ÞÉ#épR4›¨ýä2ù4«ù¬Qš4+&܉ s7§·æÀÊ$:quŠ×³Ž9/,/Ç}[¤ƒ'`Ü0¼»S¬ 6e‡‹“Sœï)k«ÄÍ=`qÅHzq‡4‹^÷〉I‡üð/»‰ºp ¨Õ ë¤}q"ñ€ ¼›ú1Õt¿c¿Õ"—Ðnít5tIï7´²I¾ Úéò¼Õ {™³.Do?T”‡ŒAÜ„ï®%´ˆ _ eΜ­‘FÁ8ÓªÅF/Â=9 ÝÜøý=µ{?Ø+¤Ýù%É 5,¡^ “é +—f ß5oFP‹Ö 6ºö1`®p˜ñí£ÓçÓ¢hwX%ROƒ([E.–o¶~ÿËNX¢ßGqàŠ\bd`.„‡rh ¨¸dì_¹B Öq’vg¨·ïÖ“khuh¡¾¼X©+W6½kè,{[<]„º©hÀj!Õk£(Ñ¥ïgjþBÁÞÍw©×¤Ô•¸,šŸ«€m¹ e;Íb´*‡îvf«]O‹ÂH %ÓØ ¶zmC5¿vî;¨*.c¡ä¹Z&7Ò7cySß”°¬_:‰ ¯ÙPž«Td×à K¯ñÍŒ›4âF[68é¢-°dy ¾e98Cd³"¹\Ä ¾û8ªít$I2’;éF?T¤¡äü¥GɃ`&¾ÐÐæ’uÂèØ9I”ß—Aá¹JÉ[™¼ht­¾j"–š€Ÿ”6׿n|ØÌ%É©ºvô¶fYvƒ#CdGP~ ×|’<+ý˜¢q<ŽX£JWë5ßœ*ª)ëØ¿o´*dñq›n§'Ð h¼>ƒŠ{ O)2‰/Âýµp¹,úÌwƒ÷½ÝÖí(ÙvD\ì9¥fÀ{¨ö œ;Œ99Sœ‹nMñ†‰¡Pš°õ@ô¬˜Uëf&¢Âj…«bP6)$ê”óe´:«W /¹1ALÈÈÃ5IcPâ‚m¸«¡D²mk··u\i¸ÚHÕ·f£ëmÒø"¥4±ñ†6xc»0ò٢׺ëÜÄÉN1_d×€@IHuz„Šk6ݬ¯Nÿ¾°Ýåžà…—0j—Ü2àV$~°Z?÷8ÊqaÓîñ>$®hÉ#rI´ÝJŸ\>Ì}¹Á*OÎå…tº";Kn¯±NûøOÙbáQp6?iâµ²•^<¡I±Ô·<‡ÇœLÛÌú(àǽÝCÿŠó.ëût‘- ž“®Qû"’øÍPtÎo;(¹ìðPžÎ\œp˜€[‚‹l/¡d˜¸RåŽJï@Üi^„q…±§ñÝ\÷‘vh£¼V‹ˆ‹©¤c‚vC¼ šä5›ÅñWð)N¦áqÎ0Œ~±‡ìÝlÐ,\tÑêëú–ŠmÓ¨¸ŒÎž4¾!\ ’ c=Òe—64DÈ$‡ÏI‡ß9–&”È%™2VN4"·kÚ <>2•=0¿I=Íl…žÍSd$‰Þ¹ziqA%& ¸è›:à²Qï.»ñ¿Rbgtð(9Î×H¤¬CÿÊ£ïb'èn‘‹éIªF²™–n£Qœ¨Alñyëí×jFÿ í‹W_ŒòÅ-h<@T®ì¹/òÒ¼¼(°I¢ýÃ|"^-[ã€[Æjyí+Pÿ í‹W¼+²bÄëAe¼±…þ¾AÌ]”ŒB¿¸`ÞwA‹j,e‹…¾#ø @\Jm ¼Ió+0ãÿè¡Åƒ+X¤& ¶´#^” iGÛ€ƒWäŠEÛÎwN.nRše„:Ú?ZPy1 Ên€›%FÌ; èã’„±9ð¤ú{DËP:Á\ºis‘t€$¾ÓVðLN¦õ Õä{€z¦ŸYy,3›“lÐÊ&¾7ˆ$—#T;±Ðh]iü@ þnãÿ#[5m}Äíäo.ƒv9ŽE’`Éï¡ø"+@³×—“ÒPåZ¡òb(ú½ÈâÁ¦/.£gP#×|WﯯÀ‰kÐaÚšk¨Ô€ÖAÑîpJN€ö X7·‘I=3z;4ç¡iü'„Æï.=˜ P¦-rœFwœNÓ–[³» öù‘‡<¥0T%¡áknÿéo£Mùk„׊ÀµBó†dL|ò‰%?s§DzNT`Ù¢šq!W¿ÆÒ@è˰C…«i: ·+JóVh3²ô›Þ\Jš¿1YAØ0a¢†U(dëŠ÷îh  ²BÎüvmPŸFÚÐ*/6MÇ(N²™`âZC D¬ MÝä È „ØÙ!äö¡9ïΘsḲ%§šäÍŒÁ™{ç»9㕃a‡ŠÅMc‘'BÆPWV¹Î|¾ƒs¹@˜o²KÞJ¡0KZ¤\ é©×âÖ'Ç}Ùåy²®j™U#'ªsö+—ÿe%qøÆ’wX!0þ‡/Å ×m’Ø «à´6ê÷¡”ö܆Ùó5„ˈ­6ÕÏø?êÿø÷ëFæÖa”]¬ÿ´Ã7¿÷{Â;bNCƩ㛞•Gãûî8Iü³SÁŸ›Nu»Û]3#Ž‹œÀú5þ³Žø:ñê¯_‰vNòù]¥šMöåÇ|{ºl§ìÄÓÜ^§ MРQá“û4µn÷åÔB£,~Ád¹ äËk0pôÌhààù†1û—¡ƒu#JüÁµ\y˶3×r“G‰9<×k)í³ENB†;ã³¶nd>%õÃbAá1×áblþlí öÅœ& °fü¬ñâÆîº×¿”ø¢…XÓefƒ”›½‰wŒÀ9æ מä¬T}Àådu¥%ÅLÔßÖ‹¤¶eºã› fÚ-§Ñ#Û§©Ÿ°á¦ëQ’KÜjòµæ´ºMÒ$øM ó2MÆT/F¥0«¯Æ%k|¦€x’B`ÌA|pµã- ~;ïj#“^;={?ì6ƒ1– ´áæÞBdmPAÍ“»dÞÄ»XNûò>¿ƒÈÁÇ¿M ¾rBÛéVW‘X}á×´;ç²ÈǵÎ9Ó²QãC(œ/ûKãgˆ÷/¾‰Û]‡áÞ\FòGDÚ %ƒ|[Á‰Mcï„iHƯ¦ƒ£<¸c1øÎô?ˆ%„éŽJÞE”6.ÐûB¨qÏ—>³føô²“iwÊÙIêà qõ *ÞWZFRÙ)—ñǪÐF©ÙN!µ¨š¤±‰ä4Ô0—P4áÑ#§ß'aZ–iüieûp˜5XÔ±_z$bŸ(±‘µÊS.´åÄÓ¤QT-w–|yq¾ÞT+*ì´µ®è{Y_Àgϱo€pn ÐTT3°Z¹ø‘W7iëF¬ì€—Vƒ¤k“,¦Ž<~{~ÑÆÄŸÎg07 àPÉf¡X„šX‹e«1›4zˆÚWˆÌng¯QÔ&ȶ0: ‹yއÿ÷#þ¢Cn¶Ü÷ɬƒPsêï3õ/þÇ¿þqþã¤ßôáùÑø Ä…†}ð°…ì¤tŽ,S…$rQ×2ª /ÙïËàVšP@e§z.âòÉ\ë§ín$±ÑØ,ƒD #ázFðÆB;þ–çÝM£Æ¨´L.ÁÝ@y¬¤1¹‘m½båE‰k.jlÊA÷DÅ)tãI³¬9Le€!é4_lÈ»éM€aOþáɺÒX7° ç$Í®#‡¦Év²œcöJN|ÑH€„ªÔå¶7B#qí£»íÛ`;å¢{¤…ÓN^tQ£À\ô Rò·!—Ò²6ƒ»ž-”¹y7aH$½I.G¨Z²Ëã7:Ólu½â…r@rm‘JÜCyŸT‚¤^Ѹҷ©èƒ‹ashg.ɨ0Æý{ÀXÎþ;¹;ÕJç0Ü†ìœ Âlq{…rÄ£)S‚¤=SÀ7¡8µ|eÁ‚™àêˆg¡‹î&„eI:FRÆñ×à¿øD¥„®þh…?Mÿ2-’Èsø±êj¦Ò]P„=“7„¥õß"Þ^¬B)Ðf˜¯á/º2?è÷ösPRQ‘ê›·,i'—ëI?L¾«;I9M¼¯Àƶ”–…Òv YÉò«ÆV:JƒÕ pE…)ù´Í6M–ý“}†pÍŽ#`rt.ýQx_°·ÚнëÂÉ€öžOç~ªˆµx”†“Ÿ“ܴ놀#xq%:¡E$Δ€LÍ´$¨/=Ã2§ÑŽ“Ð°O±Òƒv í²M ¬mQT({¨ö Äµ‚y7)©.g¨ö 41n^]Ù$l‡ !âÎÈ_+þk ®bQ!X? —#Û†ôÓÖ¶\,/ŽqÇr™ô› I—©m²×öÖ`œ‘Z/Ê "/6MCŠì õ•y‡žò†¶œPÐèmþöøðþ‰½èL|QJBéÃÔ±S µÓ¯+e'‹ £WÙÅ߉Üý9 $&:J^'Ì7¥¡ŠÀ‚ç¿€*›œ¹0ô rÆà}t{Ñ5,cJ$&É…­Ë„c_”v¦â$…$91íít¾«Ñ¦¹9Ý-´q™(éïÙ¤p­‹¸,Žšlq7IS¸}°ò4IÑ¡ÒÆÈ8¤eši¬»æí¸˜`?4|ûZ×· ÖgŒ®b9&ë¶‘(à~C°Å9”WÀÀƬJCÆþµk…¿xy ªüõ«¯ñŸ®w*CÆÞ÷bòI¯Â÷ò†Ê¨*×ȽP7pÿú1`%„¦²¹Ö6ÁsjqËà•¾þÇfEÇ«¡PáxQ ¬‹±íDì9… -ÜÆB@;ñäôËg0Ò;%iHZxÈÈÆÍDAnìÈ&!$ŠÅ$«'k¾ÐÅWÇ&.{N`i²öO7 ¯’ÀE :KÞ´ñ„݈Sê‹ðå_Øoê¦R±îBÌíF?ò<¡Éæx›Þ-” nTÕÊ”>­„=3îšc`áҧ˲[Í\8@vo°»ä Ê7ÆDª}¹ŠÖ¶=ðâP|e_³ä°þ’-ÓÑÆÞ•ôÊ-Ëz+¥WËÉ Fˆ6çt4Ãßb®òabðÍ*ã )h:Ý}Y…íÚ6ß‘…*=Hs6<Øô4I.uÙ†Tv ³nFøà-Æ:éËý ›lfþ£Wî¾0y(ÕÓ0Ћ’kyMà}a1̹rF—ù-»í0yÏwõ_ýümþ{§î Þ'èÊùQ Ã)ÒÅSEa“Ý׫o%­Z[$¾2÷Fê`ˆ\,9ýéH?ý×gÝ\þ0}:Þ'bg€ùâÇîEUTÙð[*˜ ñAØ!IˆãÚnwJ½–éhµõÔN‰éϸ٠:8…Rã…’g>ˈMl^~ö½0ª©¼ØáJ>,Ü5âÆäo¥ñf’?î°;÷Æ“d›ˆë³Áµo'/”Ì:dhËúªàe5ꆱâ‚ӓ²­ÈvŠäoN€Š`È ò$;X\E½œËol/œ<‰«@äe#ä$¡ÚƒÆV‡{{q¼^t ®®:´ý ù¢ÄÅ¡BÙâñï ‹ \§‚Óc¯~F¼Æò7¢þõ‹;%¤öÒiGFá=Zêb][#llð©|Ýת!i•Æks÷«¤Å©´õ*cÙ¦1hа³À†0îázê¡&%«$û\1‚(DGW¬Bpulžü–vxRsiÖ\F ¼¤v`ÔØіÓT[,uÖŒ†éø‹%×V¨1j4RSv©¦²…ÊïÆÑ«ÿí¸”N7Þ¸8ŇŸÂ1H’OàØKL/ÂÔñê¯/Àx•à<›=¥F9Þ-[Èa$‹´;¿òÛIW·8u^”œðùQg\é;·ô-ub.¯… 8ÎýæêÆÊ1Ž\r£ìÍÅ…wíq¬»‰ —mþw=¥ ‹’S죕íö-°q1¹¸•Škcì·:ƒrõœÅŸÑ÷Xt¢§¸ ‡Do.б´Qò õ¢Ç]úÐ-î1o/¯µ#<èpUÀÅ1½&D·È %šhd²6‡ì-½Ä_Í‚7*¡Í@éPƒrÔ.ôl‹.JËÔéîçÀ;$®Xªx%..5_ |Rm$“µODG0¸ä1¼z”¯?—×YÞ¢×ãNГ¾"ufÝ ½'¼yÿàâŒÙXˆ»-Ó® Yö¿k|çU'fM´›Î••ÚJ~±ñ8Æ@/.ÛÉe±ðó£$»»Ðcb”h,,ö·•Ä\]´³ƒì8} ¯C¾ô«C‘dTH4`ö lÑ¥@žRÌ‹K:Bµƒ^ä)_VŠ#ŘS$5àj™|›Þ–ÇÁäT®€vbYò´(õrhìÐiœ›0¸¸LÀЃ´ƒ…!jR¥ 0‘ÅnW)Ƀt‚PZ¼ Ì_\P4Q~8œ#v¹J@*{¨_w,Ë@Fmg\©Â+dœ%”1% AQ×Ñ›Ò<þ+xшE~ãû·Æ›”!þ®Ç Œ•HEêoûÀ1ÌI?TöEÚ'®V§QÁÞXŽ"mª=(EVCóF·ÿî§ûSéê»]_Äž7 ëeÐu`ÜCË*[)iîòzò"[Ö%îewð©Ð¹ì7Á'N·OŠ‘h¤ËT9°7 ¿h[(›³T‡ÆWN³“Ö½6†ûæä"épªøDŒpq­ÍàÙM±qŒ<“"=!ß8¹°«l…]sÈæR¡þªø>óɶ8ß^»•Xõ`Rí¾^Ãܯ!ÿ¾ý}¡¿Ž{ÁóÖ`\Þ*\Ù@PR« Μ†¼k,8}83°m'új’ †®*‚bf¦ ø¦Âðbj0í`éXn±¶[ǃU rkê¹B’ñþÉÚ—ó ƒ¿ ô™s›à-1¹ÎxãkŒ’u'dT^ìð}{íË¢T• ¸0ØoPÙrƒ¤{á=ÝI’“³ü ë›í…€±è˜²P2¸¸²&mпoI‹èw^†K_7)—•íƒëµŒË/¡ñÆžis±N¯1¤Ë?*2H]ÈU%“ÖœXM äyk¨ö Ø Wtã½%Ú'Žј_ˆÐ„4xÑ6éj_#šöÌeŸFÕkrNkP¾?Qû‡ùìþ}¢ñdSÛ"Ùû`ÿe¾Íú÷„_hY{a8^Tí£5‹ßg˜‹Û¬ÕMcT-_<ɇï—„Àµ†r *ô¶Ý=+fö=øM@:rè¨(Iª±Êαã]ц‹ W«d•¼·gµA±‡äe½áëlÉœS(+-gOÛé ,ѺÆn²8–p·¤¡*„Ì7õvãOœT[p·è•zœ£þ}ó㮋hçe|½,PcN ÙÉÁ†]¤º w@c¤ò—xÝüíÂÅC Ò¾ÛÖÜÅ©¡#[¬§EN¦ õb´}3ï &‡ïÌ ‚‹?˜«•I‚ø*4œ=ºÓEi0ûD«g.ɨå¸Tk³¿;6ò»¾ùoÙH6^Œã+/ª±e¿¨ì¡BiâÛb@m¡ûä„ÝÖùZmJjry—ÝÅýŸÇwä+VNï'?Ÿè¼žô€`ç©§\^™Nð}8Ù™’l®—k5H$£þk˜)pc/ô•$o¨våDl|P©@X!ÊQÙ4²Ø8T»“¸f¥´qÖU'W:¤E£ˆÏ['h7Ä´OJÓ%.8=#zïìÔMÑÚèX ë Uï`4j㿟ÛÛƒÒÍCŠ\¦7Z¶Í£ß— £lÄÊÅhiŸpQrn¡¸€wÆÎ8]94ë99«´éºÁA‘’tè¤ÙÎ2F’öê7õ ^•|=±íBµ™ë'DÖ:÷†'—ø9^ÿ·3ÙÂë‹P=zýì4fO#qðµ| Žgx@E¡¼C¼ƒ¸:o˜¼Ý6ä’ê‰b‰"ä¾#!7F™¤Ãl½L,oG^Ö±xÿøFsz ÝNÞrñ‹›‹ÃqZTJ»QsíA˜ã™\¹x©F±"Ð#ßÍèàÐoêÀ±KvD.q½,vHm–MÛéÂ{@H:œ°% ;´!Fþ¶2pÌö]ì7ÀG¦¥fÀ©ÂJÃV¶˜ øãÔ,Uµ›7äVÂ*5V¥öïÓä»N¾/G9@<¥pbT(¤–iÜC¥6 ßeh±öø½ïÓ¹ô¯_‘—„R%2ኊ衇©"b¦y{’Ũ–¸¸âV…s3}Þj€n@^2nC€ŠÅ^lÄj%ø½Ã‹É « #„?ÐF = ˆîð«£y³h‡üø|Î7 :4ð¸·×Ðí~xÆjãWæFé4ü á!ª Ê»Ià¨Ú^\ÒaZO¨Ê‹énP\…¤2 xǪãN¸` •-žY.JoáßNÅ%ºÆ·R&ð>q,ÿi„ñ÷ *Å47ºÑÛ¤4¨í/}ÞêŒ>ð¸.@.¨pÄ…mWy6h6Å9Ù3*/¶Âü=ggè‹C @¬ 2ï¦ iäùÛ´É…†c‡„2›JA~|fò‡Æe†ì.8Z ¹8`gÉOb¿7Ì÷i_œV‚4Eb¸3òîZ«vÓt7ÜÜq*–Kˆžh‡`Y€cˆ­D¢P u~ÆNó›gÚhƒtö€.†“*ù>NðFoÓ“¤81Wv¼›“æf ðqï&±„§”ÚŒrá+‡)t±Ñ­Ðƒ©D;+ït@ãUµRÞvªuBšF޳-ŠÎpì¤Å ´O¬“ÆÑsQr-/»j]¨}œ|ÍJm>‹Ë¬Ò¬;`Î\Êøð­Ñ™“ç„7'¥¨-ÿ}SÁˆW˜B;ˆ0m§SjÕói”ƒœ/‡7jôT¹Añn¯“¼ DÕà%Éà"‡÷ìSJ»“l/§¼(±Saº±'jÿ0sù&i\UÊðrX•º)“'2êðÊÅJ :ö[E ‡2`·Èê⇄¢µ©vPìáZóÅRdÛéò²ÎËu‡¢Ó{ÓPlU¬†4ທ}Gr^¯U…ö_c‚â.k0FiNiß²á™ØÆ’†Ó-EúÄM \¹ÿÕ²?QR¼p…iv¦„wUehŒ ³Þ¦úâìÖR5jÙ æ,c|ôÆBÌœN^M0u#©»Q*ÅSr á»?T® Úüƒ~S}Õ´ Ü™ßJLv·i8EAœÝr5Bqžë‹S7ºÒ‚4F¡Ï*ü¥xÀø@ž”0W×ëi„ý½¸dëP Ò ùÆþ°¬ðø¾º{î9<1~wuz7”í&kçUñd¬÷N4+¦l$”- Ó¶s;– Ç îËSüƒ…fÞ÷Äf0ÁÃò£Àè•9%;—“à¬PÕ„?Ó!8 Sw%ÙÔFwB”z>¹rî&²ÚÒxÂÓB¦ KÍNÝ¢ýDâ(ÏÏáø^ðö„˜ýAg䶃¸š)pσ"ÎR”¤±Q)êó°@q¤4K)(­ØfÐN‡¾y#SIEK¯RÞG?(Öɵlœt¶ÇvÈ…ÂÇ<ºª¯Q…w\ap@U›ÈN´Áb>Yžt‡4®pôgš„àAÉ!ï€Þ°¬’+Ì³Šº½Ž„Òý|S?XtPJÔJë U²RëÕªën+#õY‰ÐÔñÃEÍÜŒ¯Ž€+Œ$õ¡/@S?i>`ŠŸ¸µa´3ø‡±ÈöKgÉne ¢´¸uÇ{&Ô'•¦™§Pngùø )óŸ®_);ø‹«;]’ç¡áNC¡›á¼@3É,æuÓ¤Þ®×tž’§Ö×(Ði8ºMÃ#‰ªlœýGºæû™º"ØË Ë­¹½¹¼ù5y|*‹ùðRèø)ƒÿC?n0•¾:£yéÁÇ4[‘Ÿ->¾Ð¸ISè²MØ9wÎ¥NÆ ƒÉå'ž.Î=ò:ãÁŽ!e_@ia4}§«ól ¬PP8Ñœ%²· Ÿå忚yñ "É®:WÃz=–»W>­.½cöŠmÊ®õ=O+5?a ÂõèÛkç„LãÃ!íüÔ]ãý9’Á²Ý„_xŽ>>ô0¾R¿ªEì%;TN¼E“9ÏÖF}áYÿL|ÒCŸ|Êz'd Ûý\ou„ t“Ö-áþöÆÛÀñçÿ8â´g‰aˆ©Î©-çl„»}(ÇýºÆd§‹Žè¢`JŸ*ÐŽ²U+Uf¸õnsºóÛ¢¢<8PèÆ[ð=½Ÿ÷ºc$ô‚+ïw©´} ¢‰Õ×ç—.êßE䵌²Cñ¤z§ì´Ýø¯4Ã+½GˆÓ»U+]EýŽH`,vûwè|Û)}ª4n:sœm,qã9ƛɈR—ÔÝzh©?û¬”w©©æf5·ùq“-xmŠ%ø‹ðÇçm|®íBÙi3@'[6¼Ú­³aÙ-ó?ý)–š þª­¼”~€6ê°{yÂòÃY²u®KqäŲ¢Õ†‘;ÅøjŠ©«ÍfجPvÚ°k–@ià;õ ÙîL)”—:ŠˆU UT ý``“ƒme5#×Þ%÷zoÌYùô=wÐSmIlpå$¾o„«Ú’Õ¶Ãm [j¿¼èå)k)0O—F`iÀ ÐBOôdXÞÕt3®±bª¨k¦Á¸,ëW%u;çL§ä~, 'î»Kœ@«ä¶b„šÜÔØÎàyñv Ÿ[Ü'{pZ5‡¤ôéhýCPxÄaiZ_x®ó3ÉGW'n X8vð}Rb ËÎÃ@A~xt‰J–ŠÜj5¥åÏBêÍ’a›4Dt¨NOV@·~ÌSΡPaßè‘ÀæëJnÓpòaˆÛßÌZ,úÂáæ[YÌwRgæhåTÞÒ:±I~úØÿ¶s),9ø˜€ˆ/P‰›ÇȦT5² -ÈN›ƒð¼äÒVœóŸdçPÛA¦a“¦,¿kè™CÔ±„ BÞ’ŽLÿR²Ý¹…¸eû’Gõ<Ÿéê’éSêüøéøþH!ˆÖ¶ÓÅ ¤áC¿¬ûiAù)å¼cG—¸nT7,Y©ìn1îÂM‚»lÆïc4¦tSrWž©öÛÞh¬&ž‰kŽNÝû°Óv¬. Y‡É¤–%œh ³7°¯âk:?·r>ƒ(c»!dv¯Bew{Dk³[Ùœ|kBÕˆ¼ªqg. LdÎ×阨uãx°96êUmgè(}ãÄŽÿ™ˆÏÄHW¸DíCDé%½¯%ªô…ƒR°½E܃òM´~CiKtÔmí¯Ùuxè^åý™â§”ò¶}ñyåÁÓz#µƒ¢¡ºl¡î¼ö%ža|Eø)2DŒAHÙ¬ô)hŸuô Õzˆá8Î÷á…»P›q´þ¤y`ëäàJ7ÎøÞÆÙ98 ÝEìæÌïã¾½ÑcoŠShœôW<ÛË==ŸtƒËowŽ lš u‹ÃK†ªäë5jâ9Ù!Ù£ÍCô_W˜ó‚‡3/ÀH5±* ŸNžs#?wÁ}R WVû?\B®º<$ÆÍ‘¡bn´×R™ø»:ç§P Ì o ÊòŽÛjuòUÑýÆBNÙaÁïãCDºø1¬ ä`ÙG¯”– Ô°’™„®t žç*“˃Þ8»»«îJ(/”ý†ÄK\Íp£”¤iøÌ^gˆ¡8úaãPè‘æH!wJ†GÅá>"Ÿ|}p73ÉÁ…!®º>Nºð5õp›:HÕ(­œ]gÚ®"=ù¦æP.W3É3cĢ̅ÛÂ{Šþvºÿ]éï<ÅœÜ6Jܜšœcc,™AÌumeGnÇatpM·cøg<Ë¥5mt¼ö8P¶;7BNoÎì<Ž1ÛµÇQ³W>K5” ˆ‰8öt¼×{!/’-°‹QˆñPžkx¦ozΙñ(Ûn«:ONjЬBéE)Ö†bÙ¢ø)O“š±¦ÊŠíÝm‹1ma—M¹pZÀ‹n±å~¼‰É=B‹¢±V÷çRŽÿúöE`g‡èû²ÍÒiÜTlô¿p>–o|ñ¼ =³·3Þ#Qµ@Ñ…±î2’®ußP²ÝuÅš”OƒøJôd܈­òj›Åà¼ÊJó¾pîáÂèô×^mù†| ݤ_-ž²%}¤ñÍ ~­¿WðY„wxHOKYþ}=Þ¿ÅP²Ã¼0¶Œbl% ùÚ|à„ÒJb5 8XÉ ¢•v4É‹šQÄþ0à¤[Å ù\™ŠÕ¨¥ŒbUÊ5æ«%ÿz=y‘ÐBßêP¨t9®à²—“9/¯Ð ·àm¥¶ÂbµÌ¯ü¼)YÕ ÿD×`õì,±¥6ã€çûre‡õ56ç•¡–­{½°ÁXiG­8¦¬—®ÊvãìÌäTöðbì-¤âv€¹/×ÅZÈâ×/Ža1ÞBŽÞ±âï| ²’:ò.lŽÝÁ‹ûüyÄ–ìì.áʱ°f·(ƒ0eñB‹÷©õ`¾Ø ÀêLòb@cÞzWðùð+"íh]úv¡éyþÓ>Ãe†•”Ôöi6Öðkžb/´_×C4¨ãQ†ÂIÙ?C”b¶£Ðo´áTßijäRr¡_>]evj|Fæ6R¢Ç¿ub×½¬¸ ‘Bûh 4`27h–­4«‘ÿ{i§}ICwØ 9Àr5\­¡œÕ¬û‘òYÒž‹b9óCðü¿‰U#$ÃXáÎòd»á#°ßP6³oÞ^jó¬ w•qï4£j)­Ã5 ÂÑq± $W˜*´•Ü­þPU+_f›ÚRvéÀ¡¤Ôø$TÉ!f­ïùOUCÉnå‡+Ÿ†ø¸|ªaâúËJ6‘€1ÕÂ"`yx¹’SÙ¯²s.í^DAO|úôÌáÓ·Ž‹!#î}¥³dªáùÌ{¤)ÅÝ*ˆß€R+¾Ò›Æ‡Êy´îÂ6RÈØ^s,´¸aã=b•õ•è[²‰8•‚âŒÓ&ˆømBvƒÄ¹ –Ý!ý´‹eB[Ù1¼Bµb8d7ŽÎ8iA¢M–â'¥O5–H”£Ÿõ¬Ä˳ó°ŸyÄNÄÉÇ#ñC“…ÆxXŽá µ#{ŽKí”\ôÒ„BD3cô©®1üÅ©¡bÙ<ø¯´PÅ£ôÐì-!"ÿò¹ê¼Î‡$ßõù =ˆ[çë\,”ƒ·…:°Ž~0Ò>„(„ŸjÆ7gÍÙi£w»¹bµX7w¬Å‡s÷cG eKk‡*瑟©t£’ÇŽ(^×Xƒe»«’ÿ~¤ŒåØ{(Ù‚ËßáY±,‰£ë9w® ‘8ó’·fÂŽÈVš=¸Gi+š›P6ß3ö@.²9y=q;)Ô1R(}š{à0.»lŽî¬Û±€ÒB$t¼û[_<@zöáø¾5 'œ¡°¨cˆ#Øæj$ªÁlx¥¹ò¥*ÎjÐQ// OuuÌ+Aå“ÔûMs^ûNâ* æî¶$€wx©UšÙ¿>6ì'/-i$3¨$›Ât`M±Ò–˜²“ìÁ¸§u‰÷œÞ:¢¯ÓHöÄÙ±ó'K;—”톔BXš—^2W)íf¸¹C6ä LÃEëN?lT#õtó¬8¾…}†éÖÀ.å LCÅ“ÝîÕ@VŽdFÚ¹¨;ý°R6[…¤EÙ©‹ºÓå>\S Â$Ù¼\53^à ˆ»‚ÒB6*É7«'Îí0«=%ߥ¢Ù ^$}8¯¼‰›CW+/œ¶™§ä'\®8¨*66ë•yE8-/ æ)#¦gôÉ<çÉL987¹É`j²RJ•ïð …ËÕŒ'“MM~ÂbTNÊ ¾úøø ŒO{TÚi4^\„¯‰PgÉO%Ëò‡†ç}Ìï’¬¨q»¼¹£Ã\¸¿ÛSC&¾qøOÎÝÆsž¡oÙì)![É0BB|³ ìØ~¯&\–²|Ñ)I(™L·À.›‰6ô’Ÿòßñå9L÷ë¡b—EWþ™̄ZNÀ““z$›¡GùfcìIcßG½´ ô@žbûº|©É0x´ZP5cÃËÜ OrŒ›¹îr¸JåQvºÊ’¹Ñe5µX‹¼·0ý¥ŒíqÕ9PJQª³ì¼ðǰ˜Ùt^`—Ó哪ü\yçjÔ‹ÂÛjƧ ýX "‰aJ7Có´¦Ùã³c"ñ"÷=Ý•7LìÒ…+©¯Tµ~LosB`ûþ$ ™²‚sO—ï£úZA(Ùþ%)}8b…«ÿÒç§Æ‘)ôÕÍ™¯$Û)…ò*C·8 MÑÌå i§ŠU|@Tâ5¸¸çjNákÚj}_蜃 Iz²SFÜš‘l (9F“¢‡£oÑ«F«Äyà@õ޲ÓÖƒFÒ¸§­,ÓÐóàͲ¼Ê[ö‰ØÈLyròû_B•«™äÆ)‹Ù«„ÌÌæL[áQÊNàó‚ÝIŠ%Ó…|£5‡µØ§!àûÊ[¿*›ô¯ÖP3/Jë!¤ À—ÙÜ¢ëÔî‘ÍPÌ–Œ‡¢dsSßÁ´+”¢ ›J ÒÆ<!ÝÝ+þ‹¯"Ž^nˆ‡aK÷5Ô‘!—a·GÊÒN§-Oë^Yœ¦O•ä¥0O:¸³†®¤³B°åY²QRÀh®ýÂãäñÞÖX—­ï9Àô ½hÁÙ[À`ÎÍ){P²;ùM^!(ýK&Ïæ[ÊcfçvŽ‹æ1~Єò¡j€K:ÊÎÈo¯ŒFŽÊùY¯¼ã äwI/ÄH~º}”ÌÎ\‘0—f ÛÚvpÂxwî ¶pW“¾`m?4AýGCû”\IÔ˜þ¦.°há?Ë·dk‚U@f³vgZÃá0h8õÉ}T'lþÂHê¢vYòÂo¾aä(ø25ÌY ÈN›ÆÏ¿€:/欷¹Äþp¾áu:ããnD«À\Vsšûº¸Oïú¶{$C¢Ðø¸ü+IYi´å M¶3lÉF}Fc·Àd·”qXÌakÖÓ9¶ƒÚé„ÏÈ&¡©;q%³²`s@n%KýI+eÙ*mý2|\iç,tãÍø…PjJx=¾¥µ·Ã+HÆ×_nâiþ %E׉ÅYÚØ ݳ2+3qO;â²wÈëïŠz$ëæPÞŽð¸Ø¨âB¢P؃K]mE5Žúôšjª&ýVhW¸¬:ÊÁŽvÜnHéCH7}ãÍ8¤F®û{,݃G&$Ž Õ.SþÔùS{„#öÇÝÉûÝÃw!tWŸ–ö¯ÄØ¢ã&0BCYËBöÏx”ò^R“ˆêGÉwqÏ—$sðgL§t|cÙè¦nû pBŒñ=¦Ä§W±˶Dë7\͉ÓâÄqQ×Ε±åF=œn¬“oÈvÞæÊ¥¢=åo¥`Ùî*àÌ­…Z6"B­˜‘Ù7Ñ4!PrH¾í¼3¥¥†Ó[¶…ËYK‡ÛE”óÅõ䬇ÖpuIŸŸ•'%<%dÉó×ÞÅgÊ9BÜÓaË]DšüLBQ:ç ¾!¥»¸'’>nÊj •î±ÞÃáirW]¶PŸüQ´â£ÊሠÒbºÅ­Æâ%sà­+ýó" +}õ`|·üP”îzxF&øSpT*ÛÏóÊì"ٕîËvናOÇG\twù} !b_ø .;*”ݱ5gTìÂËL”„ÿ†”\ñ&ýù+ýq?ëòî;SúTi„þÈf~» 0¸-Ž; ¿ã-Õº<©ó‡Æ{§UsâæŒ£òÂtsç`‰$²Ç<w_Ü%J˺߄pŒ8!W! :â>ŠOÊ]¡êP¨8dç»´1úúÃk¤ç®!òŠÂÅ…”¹²ìwá‰Û;<Â!Ò¹ðÚSu5Î Ù‚µ¨i„tüu ¶Ê9#ÂÅ=¦õ[T”ßä¶›ΜÐWývnˆ+BéÆoÆÈäª -Á§îÇPýSÉv×?|Sc±¤ð—*t‘$¹ÝÅq)¤=".D£w'o7nÁÑS$9(}ªhlÜð*’áã|÷·3Úëb8VÊí(÷ÿsPô….ëa¿Ó‡HÜîZvºçÃмë+$n qÜY¶»7!t‘ìc#Ç›e»óªó¯>•]ÞÏ[¸s“¥Æ³ü[õq“ïB¶P(r‰8Ù¶w¿ô“²ÒBâBéÞ¹šI8LwáiPó…'ÿ^ÛÁ•¦|3ŒÇæ]§Yü Šûæ™ÿ[~ƒ?óßNZÿpBXö.ÞƒüysØüÿ„àAmΓä‘JS§”ÆJµœ²+o³ëƒÐI~ÍD}”¬È0¶B¿c—)óÝËýG©;ÈTˆ9 nÂUJ‰à5ηñ˜F™õNh/ª›‘Li!%\¦qWZfÈ|×÷¼âQXRj¥ºBÀÁˆÑÎP˜ûB eÞÈ·ÂuæÀ"› ÿHJ)+N†ÑW‘ÀEŽ€’ÝR JÃYÂ-[°771ýcpê¹…+,f,aéGVŸ^Æì”Qn\1騭Œk'ƒ÷%d Ü9¸—çÎ7Çß~I+[ªàéÜëÝ…o/N²-j§c$Äv;W_މûÙïž+T{OµvT»ðîo=ø'²úõèt|›9pͶ ÔåT@·ËC§ÂdñÕ”vœËmFØráÀfv)Ê~ i`²¤Ò±Ë.ïƒóHÑoª]º±í}=Õ—OÁhˆ;–8F ‘Èm] ”ƒ7Cî4€8ßUKî ´(;¡2 gì1<*íBIq;Ü@ã“d3zǦà*VvªÈvÉ\r0ò¹ŽÏÓh$ª yQi@¿ÂÏÑ n t®Ž ² ïG*Y©ø†Þnjq]Ð.›È–œÜ8ÍS5dQ+ ¶õZP¯l¾>j3Ã|DGlCصŸ4èC• µ3LTYž¬1²Á¼$Sc`6c1 ~a¸³Z63?¥Ù7I¸0 þÏ©ê¨.<‘dÍC·Ï×HMmåVê&¹hDù¿Ó<{ù©%›Á·ç"âüþ)”éUz™*÷vJ0ŒPJ†ó‹<\qÏã/Iž†k¦-ñBL!!®ÓErèl„²ñ® Ð‚$ít±- tÃ4–@bç6¶ujSá÷ŸüC¡$iÛÕ½˜¼ò6»n›ÿÔ™§Ý®÷4/<`ð£ó¯mÒŽ?”Òôèjƒà-¸°O5é)í4*nÝÕy‡Õ-˜ÐPÈÎÙ ª¥ap–Ö 3·6ip )à!yW(×Vrõ%ÊîO’Ÿ;ÁשÝmZžUP!r™…»Z.öƒÏIöÐ> ßƒ ± c'ðü×ò9ÑI°#<¥#ú¤ãÝÇùg†•6¡ì4Ç*h~%ÿUõ–­J e»!ü!ÒÙÎ÷à^l©±a”n˜"ŠSîŒMÀÏŸ(ËwDyÁ”TíWâE²i!_”¶/~k1£)¹Þ„l!¢B¦qw´ ÛJ?z¡+A'õÁŸêjwí’Ò§£EiØBG®!°…!îe¬F&êèKÿ”Bxu±¥'mǼ9æyÈ0.™läéàµ%Þ@ï_„(mq¿!·›¸gˆA—Èã«pÿKš•S^2ÚrUl¹16ö‹pÃ/=÷ó$1ܤ30¹9è&ªÛ1á@ð ”8 )IÞ¹*–š †ÚÊ;€«Ì@³«‰ÁÏ»vªLÃc쥄i„À< iw=#a¨H)í€ým¯ÖdÌÃ7ßÌóñIy±õÞ´môí ·êgrØR*`uÊjQ-´º†å1 Þ°h¸µÒ.®å×Ú&¼Á<À'ýŶ\-(`T¬ªÍ俤fÔeg$j§l¶cÆì„uvU P¾«í.2ßU;?T¿©–„­Ð'U­×þŒ÷å Žòi¶âÁÕIRR²§Î€­¢ÎÈÅIUM‡óÀ//ðˆwN:)Öíå–w§h”xAó Mv󺧗·ÚZ:ÌЧA‰ è’5ä:Nž=w‚D# ƒr/o$ÃaX}PúùžAãô5-*7ÛfªAU6‡Î‹°ßóü§ë×™gM4%f˼#@÷+U’ Ú¨uÀÎÛ ÀÕ å —[7úºRPÆ’Ÿ‹Ó&ο7vô´¸œÂ±4ÇVNÎDiŸÛ· ¤§õ·Æƒ£áö=Î)r^J; ~X¡uÊZ¬u{~"` ·R3Wå¯Tþ8cç+É‹Aõ‡†Fi#2y$T‰oðÀ_•ÚÒð…ö´’´“0a*TíkàÚúj^Ðc¨Ø+•`:äºÚGJí;VË{þ?JkPgxPêÓÚ¿Ï’æÎx¿iª7áõL£dUuÎB)ÄÔô‰£“wu%BLÔDBPBÙlçêTe»!¥›hÁ­/J›–¼HÉNÖÉOµí€M S¬ÕÊôä¼€‘ÆÅ=IÜ jŽˆÃèqö•NÐZâ œ!(Ýä{ÇéA"PÓ†H#dë‹Ý[›«—=’Çèõ†Qx¸¢ŠO§él†’›-§¥ˆ£ÜÒQQx¢íáðŽ‘›¬Üኑ¥×¯â”%ßDŒ…*”åEwçmA¤Ô®‰Îe”ƒI ¸à^\6zè?PE¸«üÛƒ‰îîÙË«‹áyr ¥ðâA­À^tÚgº’þ])ÊÌuTN‚‡—,WP8y_TõÎÎ_ÃI[ü©'´Ý;øé‹6Å6zbO…oÉA¡WdœÚ…ŒÈ\Îh`tDìîØÁÈä×ú¥»ô¸rò"óù%V!F°ûÊ¢aET™GtØÇ<–“+\”ý×Óä²ÝÒ‡H#$Ʋ+å>ÿ·CC®j±ìæäNIÃ@_?ì¢>r‘ê@~+ÐVK {1˜‹³˜Äèt£ŽœÉª(í@ xr€ëôwélV¶f„öaðÍfi€ŠPÙªÿÖ~ÔI³ì$ûÑ^ÿ¡ô5¹—Z¥Ï³©ßöÏ?ªv Ù”ä§Âúª¥uÖbذ\YIÒ€E÷*µv9›Ià ›$sæͳXÀÐ0*m]Ó½ÿì_Ìj*Œí×ò˜ÿÙ?Ó4¡¬Ž‡KI*ÛiÖ¢uZD’Äfð”UÅ2î¼—ó.õîùÐb9Cbó?\«€ñd6®j±‹ Òš±ð(µq ·=”%G5]!YCže?)É ee’ä–÷E¤ý[Xlpô£jWm[ùØNô$ÐÁr¢„í5õk§Á©T5]:Û!É»ì ÏôcÖG?ãwa˜ “f̳öÞþu¥ižüžÁoqûó… †Õ;€§®™ô¤lf×jt*áë¸Sµçù¿Ñ v/ò´Z/W™æòõuRÎÒz0ªÎB07ùIµ:XŸÚ^°Ú¹Ï/1[éDÖ'ïjªNCm‡V“Õ´Ãm Æ',b®;¬ì [ 4 lFóOÚXm¦17"Ë”¹4†½ÐŽ7£•ùn½]Ø0ïä­¶\s¿$Ãv4 ³l;`™U—Šj&Ír0‚üSRâš?„ŽßÎò¢¹Å2ÿÑݨL#ìâ‚Wµºå‚JÁ’Ìÿ¹~K~!âÅC÷ã5«Kú¾PPÅ%å ]M?ªÀ¢AÌïZLyòF;Œ­üNÊ¥ èBjÄã2 …”`ç¨p6#•ª™¹€_Ôú#øIÈm ruµßVF;).Äkä¿°õñÆ{`Œ‹ìàd5°åfÌí Š°Y6§Ò@s¿Ð!„; ·\¤Žúç¶I’4›oª»³<Ò"p¸X@I³%¤¡tl«.â«%iËÇÕ ŸGÃÈÓ tİ…‘¬æmºh¸½Ôæ§Ú?f¸|ÑÆ»s)ÝÐ~ýTØzõ¤a°|WÛÁdŽ­Žð(î}â,?ؘ~ºÍ[]Bj65—&Ôí¯ñû{ØÀúu<8öˆ½|¸‘d6ªoÙ–«_­QZŒ%ºÉŒË}Át‹)÷¨«¿ÂàXœo‚cÊ7U¼€£ýºJ¶PZkÔ*AÆûÞ jq¿u"¸Jf£ñ^ÞxO´_e®Â.¸œ(Í& ÜÚ8ðƒQ¢!¢7ÿ"Bqå-Yv zD’íζ1¸:2P¶ÀvŸrO5È·+n+E›âÐ|BùCnw…êBbƒB\AXï’-Ø Š;9C ´ÓoÖ\˜Ã-pÇ[­Bè¸Æ¥0ðP锆óÖ`}U ´àÓ1Æ÷NîŒw[ÝÄŠã¿BŠ™//(nу€06œ:…À'"ñMÚ¾À»¦d¿3¥PhŠ‹•°’-U¼^êSZ¾ÆUðË›*4Ú Útïwñ!ÂXcü&¾Ãq•ó.y'¯Bm«$îBRàlG_§‘ìÌÁ¨ÅUø—7>õë¥SŸŠÒ]­3‘–,^L?y€¥Ò6Û qaL/ÌáÞù™o‰ˆ+Y‚6§°›Ùœ(œ”Â-{Dø|„›ÊW…ù)Úà¦ïMT·zpí3vR[^,øF ²ÃýIO7ôH†8ž„ÃÊv`ò9ÇKqÓ"”ì (Yþ\úÕŒßøUÕEçJ7ŽB×#‘B‰@íÊØ+¬üܳ„%ßq›éW}N#x”}Ôlpå]©²Â†u2P¥¯nTîÄ5X²VðE•«§xó¼˜ß7ô,8s°xœµ:¤±0‡¿«•/ˆXñ<¾Uß0“aOÚÙàÅÕÉûÙD<èS¶3t¶Ì÷ƒ;úkƒc¤“Ý-¥ éŸFbU®ÑÄvœ ´4q¤ õ™g€±d$[°Ÿù…ʲßc[áþ£dGܩ áiJ¢ªØ¤tºóÊ·Û†Ž»máÄ$³9½çÿd® Ÿ€NÓUY(ln)¥a¼»%vЬ­üòÞ–Û|QocöQÙd{-Hc!F¸ŠÎ å4x_€hÄ´quv¨Ü·ŒU‡4K}-àêØCCo>u<( gvŒþK08q_ [¥;§ª) ž—¾xµnÐÙàÇ@Sd-ظ'`„vs`*áRÃa=Òßq åF‡(²+hžv˜ñÎ*(K£´ó1v^Ù+oø õ ª~Ÿ¡‚о†w~Ë_ ¦ô©Ò0]·”n(=R,âG•¬âêéã™k¦c ÕÎxOUÚGÔGyca^þ„ëˆÏ¡?jÌh%­\ZI`½ ¸s=o8”Jîh¶ò_·BYÚYÈNh·óÙ ƒ‘Ä…§±-`Ên­vÎÐe þ:zëÿWÅWΑÔŒƒˆãÔÉSž±„[èÎù.°%¡·;S …¸Àuä –í®¢è8ø…z´ Œ"âŽ8†îñ­‡Š*Ž’ƒGZ£ÏŠ!°ÓB °£Ç;§ ¾4kÈ’]FDyÇñæ@Ù‚£çq(T¬¥úèÿxÌöÐ6ç l²âÄÙ 8»½¹(ݧË{ré#Ønà éИà4îê£ô&ÁØ®àhRø­Ò|Ãê|«¾K‹ÜC!•®P2 K`. ü<]?ŸA²#©-æErçÏäÕ>’z‹Äµ[ï|÷£—–ÝŸ—ާ¥A<)‰%*Oê(%»-ˆÒÓXªõ…?|Ãê\ò¢ëäL¡šbtg¨áâb'w5Éæ¿¸¨ü9l`l¼Q8ãÀ ›csÞ?NNÙ‚½«c+Ôu%ÙãÄ&á å8þä0ð8ÝÊf„i¸PˆáÊÀwÕCû¾¾L®J\ñPiÒJspæEá-™Éæø‘`ͱ¸’Œ;¢–\Þ¸Á.Aa^o Ñ[Îcaº%@¼NùAÒ—Û“âÊZ.Ê Ë ¯†´•½µ]õIÞñÔOã¿×êX ÕoÊ[åOªrÖqÕ:»OZ([`;—[êÒu.KÞië ƒþ2ò) ¥¦±Ä¶¨9!r=7*¸&0÷;Zê’ݧ£'0­oOßU?eÌiöü&ÇUò€W‰d Šèø¦,º=!² ®z§Hˆ’ÊÉÜÇ=Ò\‘$Ž˜•dš+o‰ ®Du¡fšcc¶#ï„°L½_•ò¾±,¯ `­›IÃíQŒDˆÄV€Êñ`v¨Õ}’w£T‹Ê©¸•óÄ–tç? –¯–·<°i8¡•à/JÉ?2—gbÃËâýFˆ´ ÀR˜Ñûíñg)9ˆk0nñ ÙÉ|“½^Û+ôp¼úáe¿Ë‚®€¾6Dv'®Á‰ï¼›øÃÜñêÛ@Åkò÷œhvÑE}VÕ|8Ä I…½ÇEâ ì‚¥ð;½+OŸ76ªB‹<«Žæc6[Ízò%[%/$­å2h'e¥¹Ívi¬Îåù§üª²J.Ð;‚Þ°¬r 6\Æ+ “Ü!¸N·¨Ð1¼? <)«-iXÚÁôe4Ü®úÿH~-ÀÞpÁÕ°©Ïövaò…àÁÔX¶±™ #¨ÔØ «•Nª/À»JÖ¸ZÔjŽßœ´à…€5µ” âÝ j®mÀmÌ0dÒ´SXs_h®B‡õæ¾°Hí$ù ôòr±Û)ýuyÃ^§U¸¾àmÄV:p]8@“<)/vÿ0¸l/X$ÏJ9é¾ð®¦Âؼ©a3­)ÈK=Øj£ [4¢uÙ^ › Jc Ÿåà˜}ß„«Û½œŽÜØÑ6¡# ÃÆ/É)߬až™¾qùªÓEÍtïùÿ̰ZðÆ’<[ej v„øDªMÃi&°eeôŒC WÂ:ë’‰Ðôéz‰¾ð0WUl½ó&ª•Í@׬ÚLëWO\ qøª£tžiÜzˆÒ‚‡–“ùäÚ™±T¾K¬ØÝ%6¨|}M3{ ¦šy\5îåg¹¹w6|VjÍXòÓñ$Ïgü¾¨ØaЇJ]mÒxˆ¶•¾AZu/„~Û(T§®„ !Äé±ß4 (fÑ¿õ1û±óÄ Xõû¨`¬Lfµ½8éB ãºãéhiú…üãW!€³[Œ9ãN)PÏŒCõqS±¾©tOœïUÈvCJ"rý±=¡ljžEmÉj[‡Åwû (q[‚‰ƒãéå:—Ký3³›•ÍáÇ]¾f2R¡»ãE!»§„7#x0 ’’Bâ¼s 29w1¿šV×8«–òðn{XÍСÐÍ Ø/’ªÀ©)H;®ûä„–…¡åk¨MfQ—ÒSm;Ìvµ½Àbä9ä]­¼0gh¥·¼ åÂ9 Ó0(™•þ”ç3)w’¤p\çCIÞ°8²(Ô—ÃéÐCC² ˜ ¤ËDA\ƒðE/¤òäÕI¶ JwNc)-/të ¯Óñb'$Œ%&˜’p7\oÛXÈ'°E2ïõ¯RýxÓäk¨Mj1Ï=Ñž¥áÐÐN!tåË雃Ò0.u„Sg¬Î¹±ƒ"A)œ(ýŽ÷dÞUwÍw!­«ìêžGsç+éiÜ7uT -k´½ÐžF9Ã2‚aBh£l 2YM¸š°å¤Ú|oÙX-î ÄLr8>Ù)- :s](í îž$ÎèB³sîN}ù"-ö“!ï /¯ÇK*;ÕB=ØÊí³K;éÉn«Ã¡`Nf¸Ôpݬ°š´lNy%B7ý°R~¢µ¨Üo§{!VnUciûüð“JQ(a*IÖ¨íÐð]º|(¼sÒp/§&GpøNtÁ 6K‚Ñbbw›«;fb³|£4‚³åö%ÊÀ4BD²r5ž 3Ð$±ÂØ=Y{_ÕmåyvÙ;!äÜKâÆ!d»q;B`„OQÍ ^OãW¸^ª³’k§<åóÐðAyWâªV:+œô¤¼™éyô‚lyc˜]C®jqxa(܃‰tRVhÊlˆEjãƒêK<(*ïHY|] ö™¨5 Än c£'ÃÎ)sü°kø ”Œ õ 4_Eg#l®áèYÆ ¹ÞD”QË‹o˜¯§ƒà–ª+ëF5yûpæbøEmQ?¸§ap%|Á GI{×`ýÈ»FSBÔÆ H×;Û~=B­Â’æ—SkAù¦ºdvòRN’=ˆs¡>-vÀ¤ŒvÝyQ”"åÆ ï°7U´çƒ½¸î¸ Al\Ê©„uMÅ^¬˜¦œ¸-<ƒ¸£Lî–/²K†Càzcôƒ+i‡ó7•ú2ªvZ|Ù©ÐÕl’™4`örMóMU~S}Ïߌ`§¼)% ±IXŠœ¡TÕÐí¬Ì! EØ?óŸöÿÌZ´û`¤ó¤KŸv§†+Œ0 òóÌÈL¿5Õ×× ¥0ýG½/ZjBÀUºÐPµi€¬)­hˆâA§"Ž‘s¢4açlǤî`̬jѤR5¤äVÚØo(› =¬jGay]]Ze­’´œ@¯×¦½>'(»ò_S€W[Âi×PÑEú 4‚WòË[nå¾àüËw šyEð +HÌ äÐ5aë6]\‰3+”_øg‚Öèa’×ôçùO™1ló¼Ów†xÚ:жE¼+³ÅŽivAXywKiQŽ\¾JZIOÊŽoÎy¥î‡ÓÆW-W¥¢=ÏÙÒ'U!ê âjf>jÆè@C÷agϵt ~RHØ @xÐÖ×lN×aLaX‚ÊÕ‚P€*µÂ 9Þô&8Ô=¦Ó÷UÊj73®ÛáÖ îìÀcMÿgB5ƒþÍâ’¤å'lõÒÚIy¾&Cü)§6aÌ• œ‚¿iI?*šY§Ö`;¸ä »pS«&±ÔªfÿHc R™®$]‘_³Š¯ÉOI¨å¥¥%ªµüò®¦ªfðu¬]팰¢Ãp©5B°dE@ÇtVAè1sŸð"ù .J¼»Mà ;M¹ª³h6¶˜i`hˆ­èƒ?ÎT}†0¼«©0˜Ô¦áä Â@0ËV˜•b_[[——íú–õ)V^Í¢ÎÏ…\¾„ÓJ}”²8QFÆòâà|N'eGŒvçád£½¡¤Zª0`ñÓ*»ÀYmRSaÐÛj-zX­{Šæ,3|! L¼«ÉÕL;*ï»II›lô„­¥t.søçRCTø´°! :Ó4élVÚ‰ˆ¡á^LzEÝ*ê‰ÍlôÙ÷z š9¹o‡†\Íþ6jZ¿„íS¡öp Uk*ëXÖ5«å Í+±Ð‰QéÉÕ´+Y‹* ˆš@Q§Šü4²cC¿^G¿~á›Ó˜ÑßÄšw<ÙæŠŸRfþ|SåvLÇBˆg°ýù=„ýöç Mr?~Ya6~aμ’\mâÎmÆržåL3Іuë¥)ËNæÕ—a8õÙg’×uòô&\±Ý¸%³Yÿ.çÊý÷[OÝÕ¤)v6kŽByçæîò F©ƒÿ] §´>9ìrœ@®71”ewõ&yãtÁU·BðÜ Ãk³NÁe‹¯>à?8³ã¨Ž‚+.!ìýýtã•&:ÀïëˆGà@½K^5w~!x¼•p˜Úwj3ïƒ|¼<iÈËf6ùaÊ›p58šÀVÙÍP2À¾7–v.êN}8ý`ÎtŒKqP5ÔÍß)÷Be[”Aý(;+Éîk$Kd¥¢lœ,ù=‘ݹùD&õú¡d[…Ù ü^½»jVžË„µ?uIãæõ^_?5v=Š’U ¾Rw1Ï·œ=‘ìê«d6ÊÛ†ç뜦bã§¿KVÇvd8A(Í‘Øü²”JɰŽDCÈf9»à§`«gçù¡BÌù®l»«=Òq(’Ù(KÉM‹ÏO¦ íƒP«ìÜÝ usxJÂÔejTº ¡;7i7¹Ý¸!ÊG²Ëcú˜P—qÓ+¨ ÍÙÙín %•j€§T+_[Él˜àéZ`(¡|}„xñ¢äà¶°uGoúì¼Hòb{³v8nTŒ–¥î‘þ²p—²9-ßH>…6…¬—¼¯É <²ßµ7Þ Ð—-¶¾x€<=‰Ýdåù¶cÎQÊ»·^ÊN}¡l‹vwvzã½*Ô[4$3»¼›¸`´˜¶r”´$±TŸ·t·Ô߃§œ*þK•¯to¾=ÃRh%ÀÖÞ„lÁÞ»s®||ˆ’oómx:ߥlwõ™¶õQ%-ÇŽ¨<| yËÛñJŒ%¯$™C¬tœxQºRi.1ze»«{êì!Q{ÈO5\TB/šðo­÷ùá°íŠ$wî‘<·äœgª¦ÎIñ¦“©`& ¥/ ý)ö{Òw¢.±#ÃukJÑÕh‰·Ñº¸Cò¯/Kæ¥ó­Ÿ¤¶{ç'Úå:]Øo”*XšûåŒÍ)J]¶AÑÆå•”0£ºÄÑâpœ„>TÖÍ+šÛBiH¶DvÑ©fä19¢×IÑË×»r4jP|ll;‚÷±¥ÊŒ'¨(ÙÝ­;EîtRÂät“Í„l]?v¡½8Üå~L¿ O5|dž ô!ÛMÙü o%—ˆçÄ›NBIw‡'›«>K—eü?²Î@;Vï·¯‘bv&gf!tKŸ~;1áÇÞsî¿/ ¢2ŒŠÚ/m”ô&Õö7·æ ìDö,yX¢ó»Ý’~Ëq†uÉ’HGö¹¿¥¥ŠåVÉAv+K£òO–"«¨ñpzPþD½œÊê VplϰږH 'Ø÷ùü5 …žµPGêXŒŸDøtÉrps.µG¸z}ü<ÈmI»Ä ynày꺚å“ÞUp¶[Àv½uôËÜÎ+®)0EÇG4xÍá&”¡¨Dö u²ÇX ™àÇ#¯=awCÊ7ÉÚuqDmjò"Iv> Q°·7Ÿô(ÜE—–Ä < m˜«Ü˜òÝòt瘦'•Èï¡Çè¶!ƒyO(›T9Âr@‘ò•¾;~âl¸7çѰùBe·àæ8mö×¶3öê=6@þF@I;S†yKv&FÊt”D í@ÍðѪÕ}CI›øLn3X×êMÎBà}{ÎzÆÎš^Já˜>lœ8ìõä, SI¨Jrm;×—Ð푨3zÁ5Z?õE¤+)qäÐ'HÒΔ7ë ™ŽÜÄ”£q!2NêÖZØÒà·¹ë×êÐìB°ŽbMÀ‰xE3ˆ’À>£3í¹ú¹‰2¤Ê±Éè¹ +Ä‹W†úÁ@¡ÓΔ7ë ‰ù2¢~6vìh_¦Àf eÛÛ–N¡›Ö{*2ÏLIÆ ÍVƒ W—÷åx@þŒŒs+`+¸£‡0WJÚ¸ŸZÀXޤ”7Ì3d?°82-Q)8&³ÐÐ Ã5ÄMíûÀþA¿Ý©y¾­x tݬƒïbŽ›˜päþù7r—µ­zL£}+79°'±F#+(¢ÿ;ê…Ô¼ó=)¤Ù œŸòMfçöŒL0Ýœia]lwó^Ü)¿¤|-Ñ –Ð{Çã³’v¦¼›èÜ´« g.’v9x³ÑXC_´]ÿñ8l%ÕpÒ†ÖªÃ8¨­.Æ.q°ì¸²()hÆúÂòÜ]¨ìÚCP“‘_OÒÝ丙îß%DF\'E€õ®¿Óïó{¿ŸùR¥ôœ~øá®’‚så.·|_Ò9=£º!”7ÃVDfp{qa—''Ú0/nôâZ!Ð÷È„DÓÀ߀}9¯àVY_AH“´Ût©gPô¢ÁýtíC֚͗vÂ'EÚ’€¥:ËÁAÈ0cJ‰Q*úl„~Ä‚Cg“DIŽýúeÈ (ÝâtÊnº³Ô²LÐÏà>Ó·”d×ÚL*y´R^T‚$yI#“Íh7öð…mtƒkKŽ&VAG+ ]ŸG}ØåÕbèì‚öE…mz<°R¶‰Ÿ±%ÝÙp’Š€sò‡xØÛ˜cœÿ5,dëNÞS?4îSIFQâCì\ Ô/´ŒN´b eö©¤+Í×,¤;¡”Øïalß÷`+¡Iº&…mZ?2¿žáz°üs½¨tùµ} ¢´z’M½ï7öMhEƒ)ß-O¸£i‹nVG‘‚ÒŽSèTzØGÒd?²’v¦ ‹ ÃE7 TR¤RϨntµy¯kXï[ö¦Ûeû)è§QKOI +)³}<®O!Jº>mV»'ÙãÍ£¿'>`ó¼H¨,L‹ [ÎÄ}¦$é™éÂzÊ8 /#âÆÓ@›xƒÊ8õS†Ye! ©^‡sÚü$ñÜXO#Œ Çs@ÝPÒ.Q­§Ïl}f@?)hKÇËù~ÊêýIL£;½ç0È×”7Èsa*e‡Óš©9ÿm7†¸Äé—É8¯åÖw备<‰•]×sŸu/€¸LG9“×Â^–tüÃõˆ©UÞ±«ÓUêºH ñ[i`’'´ëâ+zÝ‘;ËaŸïzµRl|Œ²$g'~É#Wջťâúc½S^8ú…3meÈq}Röi¹¦Žˆ5»¡Ë𥑵j'âˆz¡'•C>F¦›43.W»·_m;[CÀ,ÆRø‚I§u±Î¶Jñ¢ŽóBëææÔN´þ2°öb±Ù¸Ê|áëýŸ>fï” YŸmÃZ€}á8 óƒ»# ]))øÁFEmWŽÓѾË?ôæ+çË.´XfX7iÊ-úKºù|êUë®*Ó/¡ü^*ê«Åíú¤ÎB%¤×öR©á)Ù™_˜ :¥Œ&„ˆè ©ÃúB½DçOÞx›iìÜ…6î‹•7,Ü#åàR»,“צ3´q¡ÌçZÛ_RtÉ㔽¬üàF.7I»tˆ"Eì«°m„üÙÝ ×6Pƒ÷â)ɱհøß~ ké9Cl7!¹¾žBÀhMˆ)ß\îŽê·ô¤5à†¿¤§úZ¡ïª¨ã½ÿÕÑCUÐ;G×Zk&oa^$ ¥„îÒOð7f¯rìL9¬±})‚ËŠƒ¥ç¼îäø3"éÏØ¼…¹ÏÙÿaÌç}ØÐ•wä'ʉOXû SŽ{$®½ì¾ å`¥ÌÑ1…I_ú¤Ö朗 [^.9Ÿt·ö”Âɵ½Ï …¶€¤šÙžl/kM¬ù\,Ÿ‚óü-²V5Sïh°v/È—s¥ÇÈþlé=”9ü|eþ‚Ô.Ê¡%qÑæËöÿ–ƒ‹Bím›ðž„‹¿îéPá~ ßsý™ƒíµZýDDE‡JÅn®R•cY㤻øZÀ÷%ôS’scÒÑ8ÏpQI;S¾Û=gT2ô›C§w£îã#R&•ŠeÌ”90Û›T.»þ2ðÎB»M–¿­‹L7S;kj‘ª’•Û)…Šz@È»¢å™ýüÔýE½åe]k†)÷NmËüÍãKzhŠë„°~îZG=¹t´‚= :#ÖûÌÞè= ÖK¸ÖÂÁŸÒ‘ò^ågEgˆzÃßÁy‹¡?´X“„•Y˜6Œ8󃊆dy©$·“»ôÅ[\(±ê®¯'õÕ4Ùîõê§{íRìÒË*éGŽV±¼im²ªÙØÎ¾Ýzç’8DŸÖêa¨jŒòš {(­××JÊIïVåpý¢ìGîI}"™7õ§ŠÜGëòÉ¡”4U.ÇÆhS×ø»…æ|p<’l.…2a¶š(;޲º#ØïT)+ð ;°¦0»<âbKˆJ ÁU¹])ß3lt!°.É3~“a Cb´…úhËëqpï!9Àîô¿°x¬Ñy’¢‚O>j ±¿Œõ±ÿˆ>%SÃþøù¨©IŸWÁ’â2AH}%eî‘"eQ?#Ã8=:Ø:‡cgÊyŽÂ‹ÎÍðKŽ»•—ì~¨áŒÅ•>²  Äö¢”s椃ò‘¾—R>k[­áû³G2»öj£Ënêḑ¢ªö¡dOA£Ìäo‘på—ÖøòGh¤šæVt–—íó*ÇîúDkócx—ÑGè'YRÈ?­î‡§'þ‚†ðâc»¦øôpœrî?³`EÒ}¾÷¯%"³ÿŠdêB˹-l’v¦ «eãï"t³t7Ê»Oi”FÆ•¯šç!TÜ£§;ë^ .5~¬#Ò¢¶Í€ØÆØ¾®*™ÁhÒç´6L0/mRÚ·N¨Ž¶Än:)l4Ù{µ7vZ žBœÛI9XÙihk“Ö)UjÖ+ƒ‹Ë‡¶_4{4Ï.Ôú|ï€'-xq€Ð¢äÔT ú¬Búü3²V ¡é~ S }­!ºRôYúu“¨¾6V++¸l ²% :_þÐ!”çº×jY@‡ú¢ÂöhVh#?O‚ýJôÆ GYïÒ‘Š"³&Ê%I~u)Bamt¥ì›­Öqpñ>@¥òà_nµuoó–Î¥ž\(´6Ù9-îoÇÀD÷Ës÷î"Öi€WIw yàòÒá#´0e¬—襆@¦‡Ü½ðÂ.´që&:ýìßUŽ §sa ª kžW7·Šk|Ö†zµz ; Çw./kB”W ó—ÛÈg-ÔfhãEØš³Ñ)Ç’wq+ Ëùwб@£ý¶1®xšeù^b/ÀOwÕ°O;‘UÐsêó”´\ñwÛ^U)‡KÑ«ï`÷6^#o—P;§ÆÛü\ºø±ÚÐu½¡ß³à`!†Ê__x(]åä‚Õ¯YŽÀ³I6¬j"ç‹/T¡ÂidÂúùÍ]`IÈ+¾g¾¥<"–¹m‚ÕÐ'[6HÚE9¬"ÁnšYgØãÁ]ïûiü|ÜÖd´¿)-±†9öXŽL³k½K,·b¹n)y•Î@)×]¢†jßm‚bµÑ“ÙãH\nBd‹#t—´É Fo?U`,p6Æo:F› ¾·áhô[ŒÝk¦ Eç²Ñ[“#øKpËßpèËH-=qÁ5Mm’ü¨ÒõËM«áAø€Y' ›`!ðV§ŸE’"ÇhöŽ‘0ì›OêidjwàRûn·pA±;>åñãEÃzÚgÞÿÀaØm,é}¢yzâÍÞŒn­œŒ×xä“ÞGxO²ÎÁ V8®ÇŵÃÓ§Å'¤ :J ’ú„õ2c£jŸñØßýþ¶Ê¸îI·I›Ô¤ØFr†.7Eíi¤bMÖ‹Œ¼ÜBúdè[µCÔS*Ê3’ìÒìzÑ1¯)æ‰kL!H‘#¦”ƒ|KBÙÐo&R†t]ìK/>—ßûNàéXÏ—o˜ê•ì /ng`mT26g /·¹š¬¨ï—~.R2Ç•xfˆm¨05Ç*GЗ[Å«ÖÕ>(ɱ@t:«|2pÅ.BŽ Ì5FÄëï±ÛêC·¼Ë*·QTQ9k!õüßUã ùz[“>¯û+Òå\~åfýâL]Až#†Kq;ÉÍ4ë)×áeŽ,ä%bØÑ¤½È8×ûfÂÐ!,j‡C“á+`jQX<:ÿ×[žÄ-²?%/X‹Æàâ/Oð+CêèÑ„|¡« 1©#¾ò×â‹„¤»QþíyÞ#ÒÏ[ ßÌ7 \wû¬3¸«÷¦Å(læK”˜Y¡Y¥WÎ5°3S á9‚Ff`„mø"ýª¤›P¾)6XÕ™AL»ë,::K)7`¼HŽ(-ÆÑBö¤ÌQªtÎ ¥¼IÚ9°²¦ßl„·v¹ÏçÒÁ”ݺÚ}snºö÷5:ÎK¸”* ÕB ¦øuŒˆÝ¬çÆ9£TIÀ{1Ûü^ü&ÃÙÇP]0„Z1‚j‚TwŒŸÖ5| Aùíù¨Í¿þ&û¼œå{èýÒrÔÔ¤DÃþ=HX×h$vâ>ÞuÝJ*iãqBâQ(ëfs@qˆIõ˜Ž…té‹UR0¨ŽÈ`]:4΀.taƯFÜ•‹q@ƒD…JÜ»²ªQ aÃÍÿÙ:ÛìèM ÿïÊÚe(X™Q_ SÀiÈêk.bÚž“ ç Øf<þ“$,ºNCžØú~àjqÝÀýâõ²¢‚ÅË1Í2lˆ˜ÀdcGjxZOöûCùËÉÉo,f»/ä\7«4÷‡¿ty#ŸIj¸ªª×þ1Ýni¾Ü¥­æ©¤ÜCL’_&q¤dÜ@ŠFl q×=ù~ žØ÷*z¯8¾s­cØñ*ù}‰¼ß–Èó ŽXæ%'ù-—íØx±m0;† )œl`yGQÎש¼¬#ûŠx‘u¨7L›èJ #Ó…úý´ÊSÒ†l\”üµËoå˜9w%ÁÕj‡š 7w¡E²°ÚDBS²) oÒãÙ¶qpÆØU…iD*úƒbt’ëtLxFe'ŠÎ¡åS~øÝÑ]æW‘/í›;¶FªPto¢:+®Â~ʯÁÿ>u× ‘Ò¯–Ó›`² -lœ ÅMää¢/4Êr8©3k¥úRÌ•—¨éõäjº1UÌIQ"•…{'ž­[­c£Ç…è‹ GmAÁ0Ç«.ap ıIpÅ ­Ox^Ä.W–$>&Jƒ]—â¡jÀ$åhëDgVüb9”_ç~÷hé_¹YShÂk,uظ*?9±b¡>©QåERµU×^¬5 R|Ñ‹Y0× ÖõuåØålçà|••#saüfQñ.£FîõÛ\ô7&ñgÌYBê´=êØþáëq’¡æëltؤ0ý¤>‡­ò>ßà|õü¯³O×{­·¬ÿyr×x÷îÕ#.£(cÒã¤×Óž«qÕþ%Wiwÿ«Ì ù*ýL’ˆ79+½û®:Eµßâš‚“/¢»|Ý·/.Çvެú‹>!ç…6ÞXÂ&:½tBk&´„OëwAq“ZNêÜ+AÙ s ºèlÕ]žéÚ\¨ßo%€“-¢o;Ry}S^Ç¿µÇÞY}`¬PàªûŒÚK]Øê°ÄÓƒq¦ÎDtˆ)µ Qß„±!¥ÊJÙ{÷ 5(zÎcBª+Œ¼M_'Ê~_ ¤F®f¤5¿n÷0XÒÚ臊$ ¦Š mŒ.~¨Ò³·ËLU¡¸ØÝM‚#ƒJ¡at ¹š7,Xq½>Ä/G«…MeŒ• ôWª«jql޼8²xÿ÷k¡Ëu ¦Žž„L<8mˆ…w¹ rWÝX£H/*y[߸7³³÷wè÷-ã$ïŸ~\«ãsøM÷»æ.8ì}I ø*äÕðaŠÿ8usá˜Jþ»‰ÞPj‰¸+^¢äÛÈ;Z®B»òE/剘Kþö\œ-á~±;÷Å…®Ó&=á’)6€ 6%âÅxa¯±#‚^+H–c!¶â,Eï™\ëæÓòß¿ýñ›üö…0 Áæ:íû”3ÿ&tRÃÈøqûÏräÇU2Ó£Ÿ@`mÓþ0¬ÍV‡@#éþÇ Ý>H㑉&òM/n¨òêV+”FZ!k³q…Pßè@ß5½ñ{Nmo¢tH»÷½„ºOj8u÷<÷¥w—uiç®­i»f³«÷L „‡— >è·?>è@"‡MHèq.\ad¦¤&M¦©jÎßdØÆÃ~߉®ÃŒðr`Ò PÇu)wErËx;‡'Ç»À°m´_9 %… ¶> N,K ì‚èP1ÎW…ÈÈÎ…i@3Iíˆ Dyÿ\°QÒ/@¦6mâi¯tLø†™¿‡?0Ð ¦Ð'ª Ø'Å+õ9,~„ìn”#!¬i.FBia@1¦ÏikEÖ¼ ø{ÎI†øë¢é-9·á.†ÄoêIxÞ®gâë”áåäÄ£CÆÕý²ùµyWiÏÛká‹v“?|¸Êˆé‚ÉóðÑZò²MHîãÒ]Pü—Œ}s(G„Pz¢9“ÖÈpz4/qR ÀŒä)ÊLµ·:ÿÄHWw{^Q’“å:m§¨ Á žN«œ]Ð2Ňbþ œcÁc'VÀÏ̑㆑\¼ V”:˜C³q-”çԜ˅ª?éJd£CÙ¾v)ô.Ûì¦äp¢h=ï­/_$Ü_Ùå ƒn:{k&|Pì2öÝQÛ¦,GÇ‹&Aûg_Û²) orëtÊg7~QäœÚ[;ú£:›’7ñ–§uùûD³.» ‰^gf¦ì_wè#æÂl¬MíݨØ1,Fä%ÒÊj\úÃÚuþå¸N«Q’TçùÚÙ¤„·\ ïݽٿêlƒ¯ÒUP^Ùºf*íÒÑñž›ß³}#TÙñ4ÆPŖÀ­\›+ìI]uçoI›ðÈÆä›2‹^w"FVs ‹áß!„}Üi ·œ!$¨¡8¡ž°9DÚ±m(aö)sÇŠq\‘Ip¬Íتbϱ!—M ª Š»¬mS-RÓ¶gqѶƒpQÛb-rRxRtFÝ0 6 ŽX/.±VLíÕ³:Ã"agŠ®,¤iE|æÑŽ‹æÂÊûæÄI”b£ê$9mB3ZŸ…+ž”ÇýfàôSxW;{yú_EHµP`~€[Ný{¨‹¢#¯ÿ6å ñÏ”†yæ™N5Ú;(Ê]& ™ÚÔnß!ùfÿ„„˜Ï+ÂÎnãL¹ª”z´6D±«l z b‚”IÖ–WMæ9szŒÃâgýÆ0ˆg@Ñ! ¾PR;}¾rãLM‚YŠFXN± >Oÿîbϵ È&¹j8o£ÁcÇØz¤ÃÆPËÆþzN*t.8%#[i÷ZXW±»bš»+'Š;G/SÛÂ6¼uÀ™±Fsá…óN86•/eìàiã°suÑ'úÖ.¼u!„Žª²~‡ 4FšG7"#ù¼¦x2|LÌyÂIiZN 0ú (H+·iŸò´>ÌìyìwËùì,xˆÑ'˜£½Ê Í´6.“ ×j(aÑ;zYl…±o"mq¦_>ÕÖSmƒõ¾é7¹2›-;x7´J8 ' ïx Ѷ+ï N”­vÃ~C‹oËxa}žœx:SœVZŸ-Ç—¯J¶ROÒU:7Qc‚Áñ#èɤ.ÁœI –«òEªj²z¼åu£Í‘p‘zªmÓþ0lJ Á,E§Øán˜ËèÈçý7Ìç=ö>¯Ç¸|þ Bwú!0G¿~p¬M§ÚÈ#æQ*^QÊ)W»=‰šŒÂ°iÔ¦|U”ú–3ýuqžÎekà„`0œ€úŽcÇÄUe.ç„ëÁ:ÌüÂêðJ¡]%ýM8¬¦L+š§"²RN _êÉZ¡hÎNœz_³FF6ëÙñ&swØS’ ˜ó–㱡; bƒÎ«*¥ÀFØŒAãznÜǾpµ¥/ jìê lã»\òð^”èV·Á–‡M ‡fÄðè&…7ÄŨ¹³ mÂëBf‹iеQÍøÂr?ï›ÏHí¦ÈÒ†‡Êò·ü&žwü?ó ¸Î7¸ð­®ZQô×8Sú5€;’±nnÏóoJ·Î‰ît|pâ ‘)ŒTovÊhNê°9Š ¯sbŽŒPV9WD0µDBZåqf9¼ÐFèþm¯)"߉Œ¾ ú¹Ò«ÂwÌT‚ÚÚ~åžáMàkpÐ{-“òU¦AÁ“Fš]Å ¥N‘C覸«kÏCƒPµQt´G.UýŸ|æ¢üìk† ´¤Ç%I31ÝÂÆM‹Åëü |qhxìYUü’ X²ûk¦º¨Y‘ëC©R°.Õ€v”Knæ­Ž]’¡?a†ÍRë\-ج¿Æ?!I|›8þ鿆 ÏÒOì&ÞÔ÷‡Ó5!åi®„’¯ŠJÍÊhìÊ©m(9A8 ¤BìÀë@DC÷¢–q.}ôƒÇ=4TªòU'ÿ‚yP4+­/üaøœXX°îèMDvÚ YUirRØEã7ßòú`.­sROµ vVú¤‚ìÇ%@>¸PtBµ%ZwÀ&bw¶If6v£9À× }®ïI—‘wF×^®±£äd‚§ØWýžâŠü€,”Œê‚Ígùã€&MøëBëÊr,Ö­õ9•o\(ô…qQã cwµáò*(¨+Óòr hVZ7Œ“ÌR4BAÑQM ¥… ¼o®¼@ÞðÿCÖ¹%¸mÃPô¿;Ë2 ñ°…I—„ܲ«oçà¥Üç€O=,kdÙI#Î1 ›á:ò‰êŽØŠ”·@Χ§†ø®¹øqDUY\Žm¡É†'9oX7Ñ3¦$Ý´?w±MÞB©¶åêÁ²€Ô~û1 #³–%ÿD»¸æc¼2B„yáì8wMª%™¢Ä6ˈ)’mç|¸½eŽ…8 !µEÌ:îåžµ†ÙÛ݈¾)I©s:ÔÚv”&½‡I^2K°ÁÉz+Y+c1Oã,ß9i€IPãE9ð ›õ‰gVÖvYVù¯b=æ»qý#"–åQ¿÷Qµÿä•[KÿÉ;á’UGú^ôTìK:0§æó7á’øû2ì™2—Ø ¼ š‡œ”¤ÃyÆxyÓTˆ8<¨#Pе¬ƒ¼·ãH&N¾YÉIï–û“‰·ì¬c·} «ÍQ"®DTÊÝœê幪[Ä|€ê÷ò‰EúšÁñgjžÉî ýx¦bþØ1š5ùîògÒT•¹y{¯væt,Ò+† Ã!B6çó#£ Ý{ÓŠosqÊT¬OpNJŒù–.™Á“³ ·8qÒ•…1I&LÀíœá!ËA´IyE9ƒj‹•£é_E]">Ww¸¬…„­M1—XKû¯“ÞDÇ®8²™øG&74#ê °É_ßˌţ¥bA&‹0sçÚ6`œ“­œ-Pæ0,ä¡ÞæZý÷#sÏÂTˆžíQÛæ2?üp ª½Ùßs‰2P¼šëϬèÅ1>3¢ ðÄá M6ÔAÁ!HEOn t,tÂÉç“Z;ÖÂP¯.øàÍÛ·¤sm¡…ÿH z2?¤Í~)k•ß«ÝT5Ã’lƒüÏÞvmtºìÜ–(»Øg¥x¯ž"óºo%Ë*µ¬Ü[W™‰7×¢BÂèa¨VÙî–T3FŽË}ºïM°¶!«¹F\ç1¡$ä­‹þµ Nt•› «G‡ë9a݈¤ŒMlgáøTn¦„ªä˜=™œäÚœs\™À.cwýh¯ú­¸–»(k@ã 0#›é ˜ïpèÓj£øMgjþ{ÿ°ef?¦Æ‰½òü_ÀiõêËøæÂ„ŠÛ•λq¿x†×†L¨ìöÙ€g/Ë%dc”[‰í¬·ön-•mx»ÚÏX9&îÅœ3ƒ†MJãî-­ËBYaÝò#ѳO€Ê"î®Nx¥ul²tó€9:KX>jwÂÇ„KªC´áÙà7óµm8œ½øÒTlC.¸ä ¾:‰5b}`çù‘0…/A÷ <9 ’vàÜ0evïO†J0×#—‡DĉԹ+Íds¸¢+Ÿ3wÁ¾ýq¦EÐá°ŠL¢©å8ž4nCÐT6DcW6Á¬ƒqåúƒœÓVb2¥XDl…i <ðNŠÙ¬ÖW¼œ©Ê¢˜&}€ñ×Ç„3"VÏYÚ¤ó!¬))“¦Æó×H˜·f£ ¿ð’rÒT,È„¤ƒŒ• CçdöƒÁÈ{µg[ Ìq9u1[ˆõ”ˆ>i¿þqÄÜ‚kÛp8KÄ(D×A:ÈÖÑ뤷¼öõ”ˆç„òðÌÛ¯fÍzü!øUr¯e4 ¦æwaùýKNG“:bÂ.ù %ÝYÇn÷6{KôòñÊ)ó½0ÝÕÆæ*»ø¤˜`Õzyx(¨ áuiÚȶÚc8t01™0"&Bå"³Fb]]“¥9(»}ÊjÖRÆ 9l8]%d ¾Än¬ƒæ»–^Û!é c.ËX=6îp‘Ðÿ4Ñ Ñ‘c›1—Ç ÙÅ|ë$&]ò ß/ãÕsýy3ÛÍÏáô±L…ˆµ¡z%ó ÍG sm Ö ü\—¶úħ{¸žÉ„ŒÕ [ùFâ0{‰ †%`“rF-PæÖÊ_åŒˆŽ‚ ¥­½üž!¥mÕZ:,óÝš •͸'˜ÙkëÎ舺 ÞžœL‚°}ƒkÛ0ëØ,8w!)³«›“ëCWoôðP"zUª ÙW›ÎzÅ[`e(o¡Ô¶˜kóûuæÃ+=å̶:{¥¶õÖSÄ–«ã{!-ãŸÊ{-{*ªÐ£<ò="ºsÆ[yp ŠBÙ€/^:ëÕBäØ2*7eWL]õ&¹ÛÝí^YoÚÂøðÍî–OÿèM÷y¾eC”Ûêà•è\[ÐÕÄÑ"r³¼¥¬wH&XœcÏÐYÈWJÆã<ŽâqžÚÉÑK.Q¼M¯eFÙ*¬µ«üó”ö,ÓÀØÝÔh‚×ù-‹k‹:k€£I*æÌkÂ9àyyɯ¼^U4oõàNÝL?J9u¼+âä}¾,Ûuʲ‹”Ú änSê¯_ÒxN€éXÈq_x싌´Ú(x àx*€¦BÄ R£’DÄwnxûuÉ'60Åvöû…LÐʃÄlO&äXWZÒÍk»Iþ(\ƒ3ƒ#”ÎR!:(aŸJ%5à…­@ ”“RtcÄf½ð£E&6@þQ2å˜kÈmŽÁßÎÀGAà»f˜Š#¶¹³4‡g ‘{Ç•r°§µ‹G4žô’2æ–-Jj›TK&WR"f uÀ+ß)rQ«‰uçÐ-[*¤ÜŸ!0ÏÎ: ‹ØjoÙPek+Î(—6cóÿ7ž–c.LhÏÏ]¿ËúWþ^Ö‚Cåú-—ßrìfPm¸ø÷yÓrRðãH' ëãúÂZ»ðš¾®íÄWý#RöÛ9Ú\-D“ uP8ä×÷5fL235R׬òç•r1LejÆ7˜el>P- râw2!²Î{ecf±»Cb›aSEgzÅ!GU ÞëÅX§¼lÆ?/l%G“ •yn%(z¤ OŠ·û§jŽ-½þïWy‡sâÏÌ£…~+ôqÞRâo/Xó¿²(cÛ9zÈÝçAUÙ˜k¿Îø%ÅÿüÍ¿~±ˆÊ$9¸ý½,ÖdF—<“ùŒâßÓ÷RÓѼ¹f‰Þ¨*dŸ8}€ýÙ°­{?T²wAG=îMUÈlö晋$[%¸‚xíáæ]_ê@|¤ðT)0?¹ã#aDdLÑ Óo4íKbâø"@í¹W”¤˜µKßDÕ׎ÎÂrÆ#úp~n¹p¹¢äA¶@6VþILß ¹“™l~ÕoC”­‡&Göhƒ=Rßr×虉½÷/‰Ï¾è葊©÷*ºeTîºJ_ëCe¼êÞ íé¬oXúß@¯jQ¿Ùj1p;¾f¸ôz‚Êà,³ìßßù‚× EnrÞL5æÍvá$ÝÅ·)]ïʾæßÓĤ›D?t…öçu|z~fÅúÓ03è•…féøƒ"Õ¿eg43W<…¢BÚ+é=®1é"“…˜å-”Úv!‚4{Ùúè¯|à¼]tÜtMÒ¾üÉÙ†kmÙ8Í£ùßò§`‘ž¹<&µ ˆå\dß!7ûúŽZÿò€rº¬©ˆe†6³×Ô&)âÑо„Ô&zu¨;ã¬pe5ÄVPòLGü~é l®#éq­38]…²Ž&¼êº,§ì%69^š·4‡\ §ßÀ¤ RxŒ.¨²aù°±›ÝD½¬^}‚aœ“.«mÃáìµãí6MXÔð#—ŒZá–L(˜Õ»èØfdV²üŽ’vH»1jÑj›râ±ÎÅÜܸ[€ô39'éÌE‚‹Yä|4rÒÝr7ê[æxï¬* ù.ž±ã¼ qä(×®¾¡ ·5¶SÀé„N€ÒþÀ(PågË6¹œÿ)eåß«NGÎQ10ÖιzüÅKLšC~ i×xÙ Üé-$Î^¿qšm½C~?œ8ËA4’2¶2Ì<ࢎM¢ör"<%) ¦c8s0Y c!ú`¾øÊ3õWmØoùåXd ’n˜û^ cŒª»xµ"Ø¡‹m!¦IÁþà£›ŽæÄÛq=ýÓŒZ˜yÉawû,öèkî=éŒâAÇülšc-oY c!;«-bNè¯&ãi¢‘.æ°¦o^„—‹c›¯NGŸ•µ˜Ç;1)Bý%ŒçQޱÐHÊìÚ\š &LÜJ¼wrÒeµm˜uìv=7‹‰è ý—ßCžbQòB¨]<^m~+pÅsfîÒ&ôäQ<æZH¹[È[H:Èì3ö{M^9Ôuq“vä(yÌ¥›°ªÊâr ²m¨Ì㸀”ÿ,è–­AÿÄ`tJ9v1çÚ¡ðî#Ñ î;²ñ—æ:(8Csy8b9ƪå²Îm4ƒ<^ÝÖD™P¹›ÆÌ ÅˆOñ «²´c~÷ïzßS*ÎA™»·1ùÐÏò½‹Ì=ÂG­g²±VaÌãտ̯/(:nŠÑ#Á¯Â›{FåC£=Sc׳nÆã{ó¨ÏÌÞ¥Å$è*»ÜksøW:Œ´gÑÀmífºÊMnµÙ=¿>öéÿ¯±w±dºÊ.µ9 ì¯e—‚4 ëþelb;ë­d[…›ž •»ÝȆçÆ:(÷&˜tÈßA9aú”±‰í¬,9ǹ<œk—sC›`*¡Ù$˜÷N™àªã–Õ‰^©k@ºŽ=Ã.™c¯{‚³bò£Y-w˧{ fîÝr ÷ŒÊ‡~¶áD¶b9$én™·‰™¸³kf¢¶Õv—½,Û&õê.ŠOE)±?Ö%å-7ѱë>¯&kWkRŒ²º?¥ð³ &Thù³8³8)N'T9Ý®cÍúWnO§øJÑnƒ–-äêrn¨ÌçZœ¹C!ìêÁ½KÃfŠL‘V/ZNº3¦ÕŠ;$âÚ.)Ç.¶³ŽeÙȈ¬·Nê÷š ']ü›bdÖ,׌ñÀÅvÖ± S ¯9®x£}–rà.ú ÙMbCÒ¹1™Ò{æC·ñr<6|×ÿ×»šÜí³ô³9Îèt9Cz¼)ÑÆnvÔûjÔu“®r“Ú:(&;³d>#L12'Ão,íöYºŽ«~²m¨{~oÒ®m}.µÝžŸ2–ƶ´~U”jÆñLžþ9–+?òeâ^Ì ÌLÔŽ({‰í¼µ¹²Q¸­%¼n)Ye·Zª®£€:6e7ß“â:2ǘàš2éÍÞRâ”A»•ÙMöv<¤‘h³§£ÜæÊÉßlü9í9çrȹó^²:fB…¶ºy5é|Èñ–Šm¾™Orì·öª8QŒìM(X%&Ð í-›Õ¶D’îœûó®vS7ýGvÕA»Õ¬WwéÞ Éa¤\ E«äÖ_5¾‰OŒ„Ý<—‡{~Ä,áQÁDT­¸í²$oÒó;øzINrŒûƒ e£Oã<˜›ÕBÙ V£«ÙÜääY¯¥þå±'“ ÏÅèŸòH<@ÆÃeÁ©cñ¯KyoÒ‚°s®¦& VŽSág™n*DL‹: Ó‘ÓñBGÁØhd½•°cyÍøL&NÜlXSRRòVé…¦ fý6Ù=¢â¢Ô†KuÊ󽋌´Ú(«Qí=">utŽ=Síø^RIÆV»ºEÄ/F8ZZY“@LR[p~KàÚ£[R’òNÞõ3Yz$&]ò–ÀÚHùzRÆÄ1üã¯xBƒ26±çzPûó®ö¡ùؾ&)i.2 EBW¹ÉGm”ZÈoo•-áÎÇ2c[DHåâXh$ìÞ‡ªsþµÈ‚Ô¡zø)­ù¦®¿¤%ODZɧƒåcQ!¹_êÿg7’ëµøŒ7³Â8Y~¥UørhrØ9±ŠÁ:b'@®Ÿ>§~H+kï1¡r7oÊ kó>%3è€Ê˜bùµþØ¡ßåt«oþÝE›®ªMÄ6ÔAÁ†Xj²áVÍ·"%5/ä-³»ž®Ÿõc\¦ðÞó‘øló`â-ÿK|6ªk²×|†—–—á»X4~äÎÄG1w$3Q»v!²\Ƨè*”-¬ç«özäÝôò^é{áꕉA1Öäå$*4Ιè*~I‘Æ2Ëå0âÜ ´·Ð¸ké’™[ñ­ìqñ7B?“*ÿϰñ–ýh)§{m¶õÒòÏk÷øFZ96ó^ )¦×±!úµ?„£Œ)›7øJ$%úçR4»[>î—…ÌÙn¼îbFîÖn:_ÍÌìbB¾÷ŠC€VÙç>ØDÛ¹“?BeÑ: ÓG°_¶‡¨ÐvÚJ³®5?%RÐ)µ6š}£2á׳õ‘$-˜åY1ŸÔåXd t8ös™}k}äTv ¼$È[Ö|NŠÈÿØŒªBöíDè°ˆ‡ž}]jóÐ__RrYXõ·À¬„£™ŒµäIÄ¿‡FÌG®;®–ï.æÅKK¿lÆëñåôWR‡\N1£aÆt¯Ÿ¹^épÆpæÖ ³Om×!ΈQ€3ƒc›1'qÀH ·ƒyH刌,À„Y#‰\ )éÎ:h*½‡½…¤ƒ\ö:ÁÕwù¾ ”¶ç>çÔúÈ\r»è¿lm–«ºEÿgf†ªíJ’# ¿«7ú´U:"ÉZ÷Z{—>ÓðC"Ūw^óó& îä1±“4ÙMlPWÆ2ºUÍRÖìÝwO RŒ0À—9'$qÕ)YK¦ÍõŽcA§îÀ²u)èû hš,  iÆí.À¢<=Ô+jOÔvܬ/Æ}#²˜E°BCËyc«­%¯Ú8¤xk’ èý%f‘^[nàAßcHºn\•¯ªiA¹uqÂ’ß—>@±(²•\Ý&"›_ʃMø¦ýŸ¿p^×Ê'DC2 UÃLcH|:…‹ +1,Jl5è&”(Éï(ƒò–•ï9è7üL¶2:¦ÚÍ–ŠõÍ/ýï«Î5ËG¬[ܺš»£GFú LT ƒrËé+Gës‡#–¾üâ$ò¾Š ždLB —•É#åMˆŒv’·—ôÐLˆØBT/ägV!%®0 îÄèãÜâ8jBŽb˜õDD¯:pqÄO¨ƒËõyŽ O$§Z£D–ú®øüRCd3 yaÀñ( +…ÿ÷‰ÂY¤ÚSÕ”©#Ð&±¼/ÔôG“9oñNïçîö¨)Ÿ–ª«%ü6~˜~áóÑ­|¥.Ù¯‰FtŽ7ŽSÈ5}¼“Iî”·,®)N½†°iÆ%[ e!Lþ¢"p€iWªž¤+Ó'D­œzº ‹y›Ô'Ì\ŸO¸<Bä–,Ñ-ªú3‰Aš"5‡’ÑvŸ£9¿|Ùµ ÉFp4Ðæ]öd4EŸ†F}{Š×÷ö[ãDs’´®‡¯Fª Ù{¤G¹÷œ÷ýéŸÌr控þ|}½ÞüÄqa\¾ iˆûøˆý"îe`³"g5…þ¤­Gªùˆ]AKF61CÿÙ-Õ«cfîw—1`²GÎÈ]YÙB¹ç±¥õÙ—tÊì—(šýÓ0 Áäà¶¿À¹ŒtÊÊ%¯œŒæ ÆoÄ¡8E ºŸ½†ªÂP¸Œ½rÑMV¹—ö3Aò÷oä;m‚ÄÌ“xtüj†~ÂLˆèƒ:ó㢆kW¢Êቚ¦º Z‡ýí%J&žm‚‰èrÅòæéîIÔËOâ¡ þTùG¨§H÷â$ž>KÙuÓ=Ù"l$m¹à,N¦?uL8R×­GšºÊ¤ÅË <š’´ÛAÉàRgCã¼ìmšÉDnVÙº')É>a)&Õa¶„‘’´õ)g[ÐÆ"K‹úÒ-ŽaƒKu¨Ì?gógÞ'Dýw÷$愘nŸÉ:¹G3!6¨>R<Ï®ÀÉ¡Ù7¼¯¡Øók~PŸ ÉŽÉDí«Ú¸LK€Á}ÿ–ÉQ/{’Ì’û ÿ-“áJlO}¹”+-)wôçŠK§Ÿšºxà»–Ü“¹á¯­i‡ìš²Ë«´µ¥*1ÃLó#†ÙÕ„ÄhLt›iÝ“”ƒðfr–ê o™4ërFû¬¥_xZV ã›xt‹T7Rb´ÄÎ2èØño ´Û#•ÔŽ”Ág—¤ù4ódŽ+AY@M]ˆZò"odÅÊ ¬jƒBìBD;F…Õ°©¦4=’Ý-V}ܧßZìÏ@]ùle4Yp‰ÿ=ãçN|Ù䨇'©J%¶6YSž<‚ºLÒ’É} ˜ËÙšú0úõÛôÏõê-Z:$Ò}‚‰hÐ¥:h~fÙø–j²2Z¢³–ŽòŠ?µˆêÒÙxŸé>ÁF ÆRtÖåø1 Rªƒ‚éFé!oq:@¶©ì“8ÿœ$&»‰EµÐ“c©ýñDv‡Ø9†™±î©Q(šU7/K ŠQ+‡RÊ~¥¼)ŒÖ/ùË©1cp2“„Þ¦Õ‰úžá>A“­Œe¥Ú´¿É&êváOØ5Vq–ìÄPl÷Dª– „ ¦. zx‚ÞÍ‹@þ›l†½Å¹ '£½eeÖî¥Ë>Áf¬:èÎñù[Ú¹;u.RŸ;;þÙûq8ÊÕt½~¥–ÌQZ×)8j žÛ¼¥ÜŸ”sŸ,†&¦æ^)¯g2ÝÜ,½u3Y 'Táþœ—ÂE@kW¥´~gma}XÑÝ­GŠ9\r`ñ®÷øñpˆ¦×³¦Ç‘z ü!ùLæliSŠä¢{Hé¬RSîŽ\Æçy¤ì8fEK_š,øÕâiUm‡G4KªÁ½—¹²ÏNºŠš-žwÕðúÐ̪n…q<\·³b|TælÃÐÜS—3ïSrêgŒ4˯i¨&dßÒ£\™“_zÄ(ʶéK{²PN-(Ç‹•çô¥²kžkã•^j¶h—ºIÕ×S¸‚puˆ×ÀÁjé¢!ç—&çšv¨Ê“-hÃEˆ·-½¢&M[¸ú³åÜ_ØÜä.«œVBx‹ª«ÔLÑÏ[dÑu0¸—á¬âzr—Ðåx•Åj•,í…ë²?KM›nn%7l×߬§DQ|?~ý ´-NŠ~~% ¬_\ïôXdÙ{]—ä¾  ˆ>7ý’±ÁioÏË>ªBªçü¹Åo¥†ž¥ÉÂÚíl+›ç<’]0ï/¢ Èi Žsö -8÷ÿ¤tTœ&‹)>séç%¸Š€dc²æÇ4öÚ6”-Qñd·áT¯”;ˆ )Kknžíù¹;¿ËÛ ®Ø2bÄO)ºO>#Œ É¿òø¤ /ò.YÚDÌØG2ÃÙ)p—+yJ° ^-ŠáÐ*jÉu2ëû—QÀÖ"E®ã[œ£.‘þåIŽ”EþêÏœ’‘hNæPÒ×^Ž5°Õ³.vö„¯Æ#°¬)ÄîÜÚV ~úûWL=;²ìÛ“CrV¿†¬%£žÑòL_Ú#õ78ÕdrÞ™5Ðå-®9d'Ýâ5ˆ 5Ø¢CCw¥^$ž`‘„Š´Ø9“Q°Â±qÓ,ùtš'R/hÝÓž¤Úä‚·d@OòFA}‚yL=4· Õde ÎrËÛäRƒ°~ƒuò ¿!pò©ÏåÔK B…‰Úú´·–JÂXËQâ¦4šoš x{±o׃â+/E*læi;&vFÿ–@Eow Ð’‰Xr˜xR¯´à`ŒhŸÏt¼Å3R÷‚XÎö)€ûÉôðïåm*8ã„p¹™,x+wÕ/‡|ú-‡^vúZF×B‘G0 N¼ÅÑ+â•S›j29÷‰>´µ3ŠtM©Ô m}âßhÃ)GnH—-Ù½m„”JÒ5ˆ·Ôdýs!"Þè¿dëž`I€èû¢R×ñ«ÇšŒ¸Æ±®ÉkNïüzF4o=R-ˆÞ@Ÿ@‘ì‘F‘؃+R­lYö ¶~íl~>ÿq‹$àú<ú‘Œ×ú;úß×#]Ú?¯ßzyâÌÝE5Gªí ö‰ ñª¤y7øÈ~¼Ý+j4ýû×*?Gú‘êà¡\ÐOiúI^¥]ÓGj¹ò^ž²#ý´%u¢7ÓzÒì÷ ŸQKÆ@þÙ¯Ô i)—WíW£Ÿiþ îWòƒËcè‰TzÉ_×kHýÕ kÌ&éqÊ?ž¤‡€Ðˆ^åKùñär4æmøþóÔÛ'Õ?ý¬ˆl¿üùŸx]r˜ °GbÛ¨íø÷óD$íƒb`ñ˜ÔëÕÜŽR%¨uRäG§‚‡,9ù 'sC‰¨âíáuNjüÎ’£ømYÛwR4ñ#òºŠ™·RpÞ~Òꌱ<+Ú‡S9Éy–ž×Ä™ÑQˆç~§Ü<××1Ù"Úú´·–JÀ?ŠaÙŒrاä½|Vß©~Ì¿a©&+£*}{_g¯*¹b9È,C©~îK(¿\¾üâ8r_ÐÄRë_p‹‡‹A¤¾ï‚6)c‘¾² šÏxÌQX ß Õ/Í$ÛXm6òÖëX¥l©¾NĶí|¡]„¥¦ÃãÏ’÷ª]+G‚ðwÃÂLsª=2ÑùÍx‰Âç­Ggï­² ²ãˆŒdƒ‹)/íO1õ¾¿ýyóÎ “m¬†Fàñ¡h#§Bhy-ÇA=${"M#¢›ƒ7ñ0ÅŸã¬ýÊ6Åߪ¾4‡Fác hØPà?Ír½žÕ¯x±þɱàðÍO:c×Aæßľ ç+öŠï£È6VCÇtmÇÍúj}ÀæUŽóÁ±Äeá¥~áuÇGHsÚˆ•ØeA úHY7R²•mLã(i˜ðTÙÁú`§m3©¥i»¤¼€+Í5Ý®Ä-‡wñ´€×YRÐr¯åuUúKðÞû£{¼©ÃL±X”áÇ=Š¥ ÷‚-é*¹ƒÆát]Ç)õÃÏÔP®Øx”ìô”½ºÔŽäDá³=‘|bü©êKjÇê€H둞ɀ*=R” ±á„]«3ÎLýóƒv=ñÆ‘¤í ÷1¹œ Œ-ÄþðŽ ÌÝi- ‘æ½LìAÕAóƒdÃÙSlö ´LN¶š¶N}ËÊ6h¾3/uAMv7w¿UõÓ¦T\ÊFeÝÊj8·1ùŒÏòšvE[|ôtÕÇCö€zÁ³#ä물¤Ý©3$ÅËž_xÍxc;>^¹^±¥íÉwÍMqĈ ó ËNéù§êèO¢ ™s$6°Vúí1\þ…øTæ`.€_ž#vP×A˜ ½RG`ÒN\ ¬5e¶Þ¾ã yj©õÎÝoüõGüaáQ˜u@<àŒ®ÃeBuzõ ÊŠ¾¡ÉÉV“æï"ªIkô·¬lcÚY£•bÞø|N Õ$˜‹B_e€O{yŠ>,éz=l¿í"I®)àk«àá$3_v¿6›"`~oVê1ù|H°MÊ“Jzãüø…¥b”ÎBf7¸ÈÛñ(ù!Õ¥X¹‹¶¾Øp~ÕR¾/>«L°ˆ•¢}¯‚Þ¼}I}€â©ÀX¬7åBZê Ù˜Œ®Ü)ï’ ñ0‚¹[jBDóÔ“4Åèìr{¼õ‚¹ùÛ`T²†Îr]ô8¾uÕHÐÞ…²T-™”,øí5޺ɬßw´S¯×¯×hœÏ¦ÇПé-H%õ§“RÅ腤ȕ”~¥®{$õJýï 糑lc=~>é"ý>íÂ,žjrÀ"¾ñ¨ã¦ýnÞ~%,”7©B2Fg œo)÷ .“O¶A+™ü–•YŠsÕ½Ô½Î&_ºGª}Ú$4ÆäžØI^¸uOPnâ˜È|V‘êÀ%msÙºöØÀ9U‰ÌΨ^®'.7ÿ¬¦™±f¨#Ð&xì;U¤–º8`õÅ“¼‘FPŸ`ŒÍnM÷H}ŒþÀ.Š õÂ(‡h&Ĉblí #kš°aUcÙ(ƒmœÛKš¥_¡úåI>7üú™á¹ž®7ç+e$’~®të‘úrSMœ9{ %/˜l‘:í-¥’’-Ü…¢Ì‰tŽÉ'ëà“Wˆ@ Üù»™æîäõÈÉî¦í¸l¬®­Sß2¹ÔY#K¤ûQYóƒd#¸O`ÉŽ²d–ÆM*.åY?œ=± QK¦”\š6pù‘H3 Š^s‘³lrY¤èÒý¸H ŠÑâÏê€á°c)=Ò'àÃüýA³5—ŸVˆH Òd¬À¢^®K¤( DÔ’)¥‚%ížx\©¼®t]%ÓGÊ=¨Ë$l`ZÉä7K•ˆ‰6‹õ(¥®ƒþ^óï eÏïƒókÇ% ÇwùC*®ÅÖÓ¸Ü,äí9 çwÉZrH™ÐÇK ?‘ 7Þä3Í„ˆ FÀª¾­ MÓ„>c­ƒZŸÿÉöÌ~¡Ô—[œËn&6ù<¡³‚À¼OêA¯gP'4E~3^ª£~Ór¶Ð;Úy%3eËrY¸ b(“««jºzbùµõøäL¶J‹q Õ׉™l„Ta!L|ÚZÌWÅõL¶ DîÞÿÛuûßHlNFûêœ ÷˜ü·×5À6ù|Ghì )ûÍêjc‘NöLµ±ZÓ:ß‚tcï|2À¢±”þäDÔåš:æ‡eP0³¦åM(ýƳû¢ŸUÂâ¼ÅƪÚCq„èÅ2w§¼yl÷£8&v’¶ƒ‚ÃêËdŸ`c"Ê…mKuÀsÌ’àî+•·ö¹Q2Ûj©!ŸüŽøLmq¨mþ°]êäT2)ÙÊ6ÂÐgpDö$s Ý-™”Œ;j«Úb²“]è[H,Æ ÏX½^ÓW+_ºoi—C·° ß9Œ©g“`Í©’ËÙBzÀÚl,8͜کoYXûpÛÓËwÓî;¶LØ[r?g'ßßjº–ÆÞŠÜqCTŽÙÆÀZµŠ,x°¶¥d*ûäô–Â2Ççðf«Éî~áYSvθG;D0ç5§§VætÉ9ÙÍæ|•×s4I>píúUêÍ·ç$|…#¨û ó¡øÌ 7£»¶V6nÎ*Á]jÑ=Ùô:¹ÎÉ^•ñ_Yš;M·@Tv¼ðÔ¸+eÄÄõO² %úíÖaí¢¯„?C° þq’Q|jáÈ&9òÊ>‚°û ©å|óŸ`ÝKNdzå<‚ëfBžÿR¹Òµ‘ñ°)|{?#è­‘ b©=‰/b Œ'¢Ð–ùhRuKVÎ=ðür*©õd!Û6òßšCqkà43yÈ*šò]»Ð5SJÖdw³±:×"çqcÔ¥ÕÕôVó˜ð•:y/0 SH~²–~gŸÀôÇM¥ÒNŒ™&«Ü òi¡÷`tÆHÿŸËÐûJ•{÷:kǯ”)óòúM´•L7ùskÉ”ä#”“MŒ·[ø.¹I¥K7Ómµ¢ûÔïØÑ1RÎÌü,[¿‰–<½kÆY Jí²SñTvVa¨,ƒKm(Bçɹ[Ì俳D1©dÍš6,¯Û ß»Sφwÿ T1ϧrp|&¬º‘y*Þ“‘ï9eÜ0„{_éë&AömPp²ŒZ±ºV¶±Ú­’­r¦:·ÉwÚHš,Žz¨à¶ùÑ›ûiÝQ0wž„ƒ¥& ÉÒ:”z+ó “…”·UúÊšŒZ'b%‘mÐ|%¹óÂ%jeéªÛä®&«hrúUÕbåP½œ-ÄpJ8 ÓÇ=°Ô`Ë|l.,?æÈ-ýÊäöä °òWЉ5Ié“ñ˜ièÛù-D]Êüq*¶OÒ´ êN¯ w™Â¿­áuŽª¦ù6*Wt•N겇¬»J> rjÿ>Ýø«M&“fíGÊû5ÝÜ%û´¤ù[ÎÚ>#]?†jÝÉðž›’ñˆ¼ÐòµÚx=Kkú ~KÍë§â£¦£  Q%÷ißļô„Sx¬óžXÎW²)‘2±Ç —Gj|&»É&*®«ÔÍ¥ñ]†'›8ŽdA_U÷yà£G¤Úú‚h⵩6"ð’ª3;û+G«™‡3¢[ê4þ`+üö6ã“gîþ–ð&µOæ ÔyýUfÞ»X´€¹X'hä¿e²1ÌÝ Öªu¡›¥8¢úWòÃZÊX¤Ï´R£$>H%Y9ÛÛ:)’ J%aÄÆ=PïÎ üJ]Ym¬JÁ¡µ[Ñ<©uÇs’§åeIð@m”®›KÖTH‘Löاã·ä°FÃ7!í Ú `PÓ–ºø Æ,áºýÌØ¥a©" 9ÕUº¬¶Í3q9^ڌՄªÔuðP5~PY:磊ƒ¤ïIS&¿W¬Îú%6±¦:B$àÁhð=Ïxp_ÏBJ¶²ÅêÊzϺÛ*](÷^±éiŸ;€€Ÿm°³-âó™¦ÛôßÈä§’rÐWªÄ.“OcÆ–lA”.d,EØIØ¥œµÃÞ²X©”ùv§Óâ:YªnrÓ?aåôR ì' &yæìBª5YpN•¸´2æ69’Ùòí ?+™¢ft>+9|9kîON¦i–ÉUÓãf8 λh%OìE÷>a{â ±›Ô›±Õ¿ÅIÒ¼J>eßme'Ðë*mþIIÇgc¾ši6¦kÚV‘…máºêr»åÝ;WßÞÔRï6¨ç±p –d“Žø.&$VÈšÂl\f ¥²§ÜIK!ŽšOØvmòIÿ7°MNjé!Én»žâ{¶p3Ýh‡ÔU{ª…ÿš ;±þýwqT^ЗÎÐMVñÍÇÀ äNî¬EzØ÷rP9á~Ç«”ØLñ]å-!}B—}e4?þ£ÝòúMnõ*Yóã&,÷gz é+óí]| ¸íóâFÌV=mÍæ^ÒŸîN½}Èóaïš4ë6ÛóëoÕÍ OÑd«äEÎcŠn3™Êe<+3FÆ# Ø™le´˜YÙ“d숷¤,.“Å0ÉC&Ue«ˆÉìz½ îèk€#d€Ã\ƒr pÀ²iª|¾Q„\2ù=ãðqÆF™Ì?Á²î3ƒ rH,øyŠ}A ´!gòyLæ,>‚«b”¹’kÚdFOÖv„îÈ"ÛX¬ c žÇÂ-Xí¯4BŽdu+5ÓîéU6Ñ·„ÄÏÒ…?’Mĵ9«—¼XNÄ5|ÁúȆÅ#ï7±qS¾KxaÊj˜Ìч–³…b$¹êå%f’ûÔÓÚÒn h¯’ù`¤[Ì$¼Xšzæ‡ç8Ä{dÇ·DÉ’ö Gì>è&”ÜÉq®.„ìÑK¾[²Õßr·[ÝRo¢È¤¯VõÏ4ާN§IPxu’ì+Û ùÒÒ+›ˆ–7±±ha·¾Ð”µ`©+{FK&“ÎŒ«”õ<¨1I˜'YŸÅRëºÑ‹ã¶èª_ c!\%}•T÷i‡LÞ:)eŠ×¦$ Å·)ÔC3%w½ç¾® ·tݧù{Â’=àÏ„39ÞÅÔ>\Ÿi—@ýÆw+ÛÏÄÒ'¾œt—*É–€xQ°ô»'>zˆÎÌ#³9>–¹=Ê_¯´ÉÄUCl„ n~ Á)ߺMÙ7Ь¼Û r ]Þ±E$˜û=¶"Y­œ46¹/•%«âIûnÿ>Eþéø¬œò`|™›ñ‹rÔ.DöÙã›5ʘVÕ„‚­J]ºÒMÜ'ñw,uíZ}‹RlP97pe?¶×ؘ&égáƒ,}²&#ß›{=JÅêþÐ1ø¼ä~-¼ß?¾v1Z—cå´û÷d?A<õÊK¾Â9}»¤#(÷„‰^,UÍ4ÿÙ?Z‹?w#‚ó›.¸pDZJÚeŸVòƒ™º' ”3RzÌp&¶vÎK–I“¬[à¹=ÿÊN5}ñ¼)|“‰û‚+î¡Û¦<4±±Üð{²ÜÝ¢&K§®ÿO¨dF°ƒÀ,ž‘·p.ýï21“aO¯—pÌúÅæ”·ï@qÉ­L¼`ËFø‹Ž3òºs²ÕZÈ9×ñù…$›eú"i& [,ÄÆÔÖ¼²þ /oïŒû )]´䉸 ½÷ú•r ,냿\ !È$“AÖ|“ß“OÁFPÛ–R¢™”,•ÁBªãH‰6Vë”9¾ø¦Œ²öÈ›[Wï‹¿…R*¹&»‰¦Eõ¶´y•úÅŠø8žÒIòUÓÝ JµvëLå/ÞÜÓdålVÎ2ÿ&¢›P:Ñ?ܹÉËvCÝBpMfe^fõWª’ Ä[ˆZÉš7±ºXÐS¿¿'šLl}Šæ=¨=JÝ'ýÚDc~gžÑ·ò‚s¬5½‚ðè×rο&ÿ Áü(AE6ññðû‡#äÏ7qÜFP¶§3Þ”DS„”¥µixTó´‚Yémüéžxm~?k2›Â¸BÆ%î £Šã_Hã5¼É“m8D¼ËXž)Õ ýuG=Ç{¼Ô•GˆvÇ?)$ñµaÁ‹ìHLâ3T“•1V:ËåMä¾ ­ñ[S]v²æÅÇ·½zs±.@ž‡÷®ã•SúÓ{Áîï¢î ªüh¨üaëx8÷‰]ÜW¶±–Ö=–²ÑiÈ[Bb ?›¨dŸË/߇ÊTnç¶oqÿshþŸ@ɺµ5³îš¶Ulʋ̻£ÝyC´‡xób† üþ°*_hN4Ö­ïeøÏR÷)Š¿µBzÔ0í‚;³ÂKb%µN+‡naFäͧðõöÈáÞFÞùç\ž,TÞWÎ¥òûæÈžC³1}Ä-n–‹o¨&Áñæ§³šÎb¼{ :Úœ¦{òt¹Ç+"õ¸³ šn+ßóŠcÜU‹»Šf“¥9œe†Ï(ÛfÒgÉfì¥xÝïr¿~ïa„𸶆æÃ:óx#Ex½vö³øÙ æ"Ç13,mJá]ÐòEÃ5þ ÎJ£>啺n.£è~!¯ž‡ùêý×ù`ëq!qXñ¥(•›Ìäü)Û˜}-ßÞsåÄe¬\ˆ:ñ4ʶʃÑÎcVáu“¿Æë!½F 4‹Š²Ÿfl‡ØÁy]h'÷Zð•dÊá5JP¿( ‹’`gÞ™…™EÔv„qgA›#嶯Ω.܈¸NK¼­9„¬ûÄŸº"÷$¹mÉ$owía|”'O¬~6]ôQ¥Ýº4£õ›ÄÊ¢ßóu±Ç£éû.KIÞzÀÀ²ì–ØOtÐùÓ)Œ¬®KHÆM»›§qi¤l=½%˜3¢Ì†‹g(ü}/´™¼ Òef¼qÂã’WR»ðMÌkWÜÊöÔEûp{ë\•Ç·€1eµ^x/̧Çvãõ°§Ziå7‰þØ‘_›AÍ=o—¥±ëƒÝ¥–Ö¹åWÒ3ÒÆö„P’Ý•£æÏÐQe6›áwMÙU¶9èøb3,3£+åyoÁ¿+r®e6çßáPù/” üzòêä:'¾8Å× a¬‹?k9"î'†ÙùÈå­‘‹¼ÁbvVÝÜxê6Í¿vuÊ–,¸Ô´é6ª\ð™SÀÜÔØ@œK¥oOI¶7,Ï Âί—6Æçø1:äY4ˆŸsã}ذmÉóßh$Û˜ÖëºxÒܸ[âÙ¡»²©ÆÅyk'Æavhå†çâfoìM&¤Ì Ô‰‡Dü¥ûíc²çŽZ·´ .$ä¥4×'ž®ïtÊ<yZ%‰­j~,]fñ´MДle, Õn6^ø¤¼¸n3„Ï ¡ó™!÷˜y¥}—ìtnB"âïnZˆFB°2)ŵԕYÔXÎ JYß&H³gIÜmD3/\÷HOo77¡ %Z9´ñÄ&¶f—LaÅèWèÓ:%VïËÅí46UÅw®-YÌÎ_Þrë:ûÃo§qŒBhÉè<Û} Ìæ¸Òh6î‘hÞ/Õelþq± 3¹›‡ý2óxšR›LäfÀ„†6¦¼å&Æj$;™5”MáLv؉g¹:δ:h~l8ãÍlâ©–LJFÆz¦ô·l3ÛFÙó+uqÀ ‰Ê¥^$Hü5_ÙŠ5 `ö9jɤd+ûЩ}U4”¤ô›èF5i-ì-$äÌ2˜¦doø¶ )ߤƒëNü^œ=‘ÝAóÔ8£!œÑtg|ÑwZ«Ÿ…6AªIÑý“_p҂ܼuO8üì[ˆ7ìåîÐ=‚†K% qÅl_)lb‡øª\¯»'³>£@è_* åÜbt- «I¤6œ´Oú[v`ŸÕ¾Ó¶iNŒVaX®‹"©Hš‘Ü'²²ÅÜè) ¢pH©ÁÛz–2kj{‰}ZVf0.˜ÖOŒŸˆ S‡£|~®þ*´òwáÜLˆh:ó&DF;IßrÔɲZ¬°ØÛ½Ù~d¿ O@Ð,ÅNøÙ5 ‚Kèã©DÄ$“5$òíJ2’¼+WÌ„ÈγzKL°†ëp’êð}š;€±VtZ2)Ù–2o!Ù /í”à³€f+Û˜TÙʳQjÚtå>.Ô¦‡šösxNÜÉIŽE«Ù¯ú'Ä{ã_GÀ®“gºO°8i¶Îiy{õîIB{ñ÷Ö61ŒŒßB ÈMö0‚À<ƒÕ!6}˜I );p¸¾[÷$¡P|¤›t(ueÍ»ÙX½ä»%£c\´R)sJÑGØZ •Ïa¼5‘ß[%°Ë‚6(s²¯»<»øÕÔ äYó¡†ycPJ½˜iÊ}b—ÀXË7Eß ”L‰‘‡°æì?GW™uó,Ì„ˆÕDÀb Uh&DT¡ŽÀmRÒN4`UM¢ÇÚÏh£m$,“³î¢Vqy!&$t6@xK8™§¹; Gâ,€Y O"ÅŒ½°^©ÆÌm¿l÷¹Í!•¤ß:ö¾–¶lˆ\”»CÆøžÑRI¨› ý‰¤"5ìT‰ÚÇ%ç&FŠÍKÛCk2"KUÒR–L;s÷G¸Ð°~è‘×eÂN2fµä“-Âö¸§‚Dü-‘îlLäàüj&gÖîi™×~ÐM(sz2àEyOÓ_ÉäJ IÞq—#¸îžØp@s"•ô¤ûCv€'~sË_ºý ÉëëÏORÊŽ¤þ\IFræ+úxM/O|UøuO 4ÇkŸFÑ.Hçá?Ë?´ü¾îé(ò•~ÙH´ä<ÇŽIå¨Û$d_®; ø¯Í³WŠ}"Ð#z”×SmA݉–ÚUØ›óot€âIý¤/_òt}Iþ[²3Î,]¼¥&š/|Z©>¤–#E¡*­_߃¤?“7øy¸’ÓÛ‹Õ¬%¼I>©Zê‚îúÛ^MÛ™÷HµÀoÍ_ÙåS2ãE¯×°íJÚái¿Ò¿QãßxÑë5åOS8Aˆã¦ö¬a(Ñåz…}X¾OóĆªý³ŠaÇý šGrúXNu{BÑ‚¿êæI²oÒgtPw*Ù¡yzŸF›fùM¿±j§¿^ÕAMµKš°IúT@'H1¹«îÙ‘ õ3]À]riêbž<4]Ô½ÂùG¢l½BD!#°–—žÇe‡·&y3Q´[ ÍIeùæÉ&ò¹/h¢É<Ížv¹`ó$ dO<»l£â½Œç\øˆ5F¬Q62â} ¤%½ýXØu¡vmîbTS×®›ë³Ô¢ûR²Xù*G Ë×¥^¥z`ll–‹QviÚ5=rYÕ­d–üÑxWG²´M)Ÿÿ õ?W8o§W}¥º6‹•èˆk;ÇÁ[¿¡õ)"«m&µ`v]~h–ÀX륧ÙÖœ ³Rà Ž}±ÚV^¼IÚóz•z¥š²C;þ– l\éE°³UÏú«ÌÌkš‘˜þ âfÉêÛÛ7ÜÏç+‡Dj#È»8ÒïKy~ÖbùÁKù¼f¼|¥íÇ¡:à°t¶'`³tEäz­H¾èZùË£Oü@Ó‚6(8fu­^HA&Ö~g46ƒå—r¥íééái¿Ò¿©E¬mÀ@rà^N'ÍÇìië‘[òã†(;m€ç°Ú³ìýÝeÂ>ɋڟõØ ¥ê ²_PJ@ý™ ;±bI‚[PŒÏtù÷Y4å ö /¼okÚqʘ8&ö .¤ÝÑO‡ÐJ&¿Y¡TGü9MVùÖˆ£ø£‹n²Ê Ø‚ÚŽ›õ»éFŸÍóYZ4cÖœtUP'–¯³÷)ñÍ9êlúª¸‡2³,)odÀän>FMö‹Ë#ã9Úßl™“»Þrswã¶B󦯯1¹)ÊÐZAÈ~Ÿ®lŸ¡è€Î»×Y†]÷¥…·Ô»EkŒ°­³¡lpÄw‘¹¹è&SØ&,*»cîi’âÀÙ¹ ÷«L^6Áz¥E/çæE©&ä]8«u¯GgEN…¸8s„ò–›ØX]GàÏ,Ë[b§³‹šžI_3¹¾!ü¥jP™µ‰ê1ÀÝAeÖ}€©îÉ8¾H g-®''i;Vé‹ô±ÈßB±AÆÈº,¸³ïY‚ù·\l`¢ WÉ(äAî Fu¾óaòöµëO›ÉDÿ´§õÕþZÓ>hg[Ùn9÷¹õà!ÃÄḫÇ)¨?,z|Iea^ùD¿gFK JÉä·×*o_oTcÛƒs`g^Æ•÷Uä/ò™7†+š–hõP™5G@r­± $óFèk&›a пމFé+G1K[lMZäÉKIkÔR;¥ÊS2·£cl„7Élƒ~«Ã™ÁÀZ…¬‘µô[\JÚž\›Œ˜Ü”Í14Bã#ƒÚÙ&…My€ Å6 ç—é–2¤©©äîܰ §Äš ›Pfo ˆ?†Ì‚ð. ÚXä^LK™o.:;à‚G@ög 7¹q9ÞlÚ÷i!±ú)Õ´.µ ~·ƒÆYÅ sêÞ"ƒ½†°l¯IsôL¡º ù´…Û¦¾œÔ¨ç¿ÑŒZdöÞgÈýÂÊw9mLC¿4¢Â-ÍÀ-›+Š‘{ûŠÂœŠaNÞ\Ëô5ÙÝ´÷À­&enkº %€Ví,ªòW¢4rÙ¸Š ·¬hîåø¦ÔGZi8åîÐ#S€˜lm}Ú[K%i2Šwr–³‘b Ú¢£†3YHuO±ˆ·iˆ M…E‰CrwÌ[g¨Ë„}VÁ×ÌÄ%^òÄ·Ñsh©¤éj銕£`¢SbYp‘ s=S …Î/|k|uO0[Kz É>Ãxk¾^žÈçSΚr lGPÿdãá-¿''ZJÛç¿W‚Ds êɳl‚hË¥ u·’µÂà³uÝ>¸‹½žåD_{©hüQâ©n’-hcJ»(ZÐô¼’ü îÍtêO©Ç‡œÏoþ]Â'­ål 9JPÁ¨"»?^¥õbŠUSc®Ztÿ@O]êv%»köÕ~¡ÁËCr€gU–æ/´ü7¾Åk_Ÿ•¼}úét[0¥}–t{Ê¡)`hŠt×…Îæl‘>4£dÚkiêuJÊÉ¿NÇøýùÔsŸýÇÄÛÙL¬Ú§ð7™áø¹?š~-=ªaqÁ¸;”KUâF½Ð²³GÙñN‘GÕOMÉR¯1ø×8À—¾º4MFÁ"`‰¯´#íŸõ’È×ü“óø}ýNOLÂç‘Ä"Õ.DÝnÏ)>ûž/ÍòöL??ço¾¦ ¯×T½vó¿‰úuÅw> 7/|H‹îh£TñTSB79é§dÞÓßÅø°ÔÚ'ïóbé¸^uó´}ÂÌìâÀè_6…|z³”wO¤:¡d žÊá4l‚0X“íòûèdÝ&^Õ·t|ö êvÉ«–ÀúUÚ§òg"û³&]»$ÈK· r6 ? O!·ƒ‚!ãº% €gjÇÝ.=&$›(™²–-3n¥N(¯ç0ƒR5_bØpÎr=ñÿ¦Å\k¤(×WMAçDSd’n &£´ƒü7Ë—L<ÛÊl>24oÏršf «w¯=Æm©i— Kàœ“I€g–]"X,yyVòU“Ãøûh¾›„î“OìnÀ5máGê=T)­Ø…¥—áq$ ’Ï)§. êÎ`žX&<$ã’6J´±YÐ!Ñ‚tO[˜ý!1ûwM_ ¥ÀvÖÉsWEIæúw™€CiÈQ*‚@AӢ˂u`è<.È=ÒÈ«åÀi›vÇ*ù¢‘Ó¡‰¸}¸b²Å’'³A/yæºie¿ÇoÒ½H=·_úç/u\$ähÒ.’†bçCrA÷ß–Þ% ÐßþÏê”IºÛá<ƒX  T²'~ÀÈÝ:pBÁ8ÉÌ8£š7u‘“­æ5­´6ÁKäÔ±‘ƒ£í’=I6Aû˜lºàQ.Þ$~•Ø!¯çÝLvS/±ÜÏdšÅ©Š]ÉQ^£Öb}õÚK*.‚ýÀÕ§Añ–m¥~…Jô©Ç™e’öAöãT:Êñ ¬Ò5»D¸dŸj?RÓ™u#ÏuÆÈëéM”Ÿ’{BEPÕ§¿t›\ðJÛ³ØÅ]"Ý'ØpÔü*™„­Lé!o¼©ldÓþLvñ¹i nOÉš/ÎÅbæ[y`CƒNqh± >šæ=Òï¡‹­—&úDÁA¦sîÏâü¹þ Ir°n’-h#d— vqãÃÄ©Ä5ülNh;kî©É6Âø‚½4£:™€oÇ~K<ü´ŠÆœõ‘Šévq}8éVºæ^±FCÔ&–V€åð²ø¨pÂHý±EÀqx¢›ŠÝí(¾¥1gOÇÇ•à)Ô,[×í"3é*Õ3¨ryî)°ê!]j7-Ùêã’ž,†òL9Y8´I–€rÈ,Yª¦ E:yÉà CgÁ¤[Å' XZ¿aš¥ Gرè&5 ÿþq 81ùŒ˜'FçeG•²'×”pÓLpL4÷I’'›v Âx§ §+űà³Ý†¯”6¼ÿéG,n¼&¶ Ћ ˆE §É#6Èù²Î-ÍUžÇÂ÷ÿ\z}Õ‡‹ž‚*ÐÆØ|>T¶kô–dœê~öŽÖ»äBHBå«IÔ—(‹Qf×t¶Å“ó…çŸÆgÆÑœD‰<07yQÚ錩°qZy°Ôý¤¢¯Þ.ïýÎËb&]F…–e§üÛD˜…?PŒÒe)öKŽh>pæ+ÏÐé×E>‹ëA5N­¸Ë<@–A¥P© Ñ«²L¢ðÉÁëð‰É4ÍÈg ËCå4Ì}ÙãX¶,8œÃµËÊû¹þïĬ\ VZ ذŠ?t1ˆœ pàlã;Àñ£Òs¡a:Y¦oep:_96+c-ʧ÷†î’™ö'EÊ\:Ùýƒ¢Ð€å©ÝÙõbWY”Ó©C3ït˜ÿ¡FÈ’ó=Èth9íINÑõâ£!7p6ðE÷‹]eq[ú›ì†Ä Åÿce™nbŠì,ƒ¢„à5Rhçxü—bݵøgR Frš>izÚå|yÅŸd×n/Úö2}G9î혉ƒ‹ ­<©ìr=N–‰eÿàs2N^ Å­ >}*¼&q\´E£TÔlô tƒ¸°C…šÃT£ ±S̪ýÔe¨[ â€ÊN‹i’Õ U»®­W¯'Ogµ:I tߪ~ûʵÌÕÅ>Íjè©$+8•z“¾–Ü—€« ½Ä®ýÛ/Ÿ\ëPY@˜•#=$‹vQ,RtE½‰¡O#é©„‡‘²O<'Ökèç®ÓòæÁc©‹ …PŒX”³¸b£€|c§b5Sõ„¯u:) F~‰J'ªƒlWÊ÷ÿÉÙ·Þ7—;µìø¯Ó64tPE¸½(3¯€÷TÅ–bBX˜à‰åð‰ ½Cm•yhtm˜P'#àyˆËÝ¡šV†¢÷Aß<)ôÉ‘‹nâr‰¦ žd7o˜óR4ÅY½pP“N‘U=€x`$Öâ®e1G·‚ü<“­â_uŠX'…'kÏÐÁí|ò}PeÐÜ gºà!å4©*âª餡 •kg@¬¹öJíÖ¢_wiË„ÝtƒMÑZQÑð£ýðënó}/ã›â «FÅ”Õ@#-ŨTh·ä`£Ú/§wJÚºëãÅ!ƒœ‘±Ÿ´(yÛ®óêíìoÒ‡‰Ü£þ+¤sp )ZRHøuÇ-j¡‹ 6à»ýÞ?úVo„õö U^’ÂNÇ-k{¡4ðRÕXßí”›½ÕOÿ×þëÏ¿þ“H¯´ÿ¡×/Ò­¯æÅ«Ivy@â6)tg|å?ï´È Å«?ú˜=Vá\T„sSI™â*FP-ÊB/TmáŽzôüO•—'eͨRXzŠ–e=»‰Œ"˜byq‰(‰ÚNwHÇeE™!²ì Ýp¬*ë>íu(˜Dº¸<(e7Î)”2”s8ÿðØH”s`doò’¼¤¿®ºÒÊM³IuáÕAâæÐ)ð-…;ôk z§óô¾Ž(_ ¼AOŠÐ„xµuEï“õóføìZèmºdvÚé«êQ.Û´%Å¡B“f²²µ¨ÔR©ì˪>J<Í)­è¡[d•ôÒ²ô"¦¢< ,®q¨ÐCË$ ŸúãÊé8N,¦eÇ:!ôB‘^&QøäúeÿÀ™ÇÜR,X(EKµbÚ!‘«–ÿÓø”˜£ ¾²; ;T(Ö $7³ÑÌ6ʦ5¨0ðûɦrA)â¨%$æë; XNd²Rßl¿+%Y‘Òi¨»A"Ñ=x“œtkÖ€¶fšiy •Ò”õð IUe•(œµãÌ(þ ҂ʆ¢ æ<(vœ9Ì cY”ý¡:i–·ÓɧÏãXé°ÃwÆ,¬é„r)P}k•3©­ª¤ E*+d²¸C$nCC¤;ŒÌ7wíô[4W¸[Ä\.’"«žíàð£ë;‚Û‰¤·LQ~HG• 7ª(¬ý”;¿:>€­J2r*+S”Z1 RÙÈ£UŠý¯ÁEA¡ è„Ã'$êÍ•NŠEÔqÊ»ü& %²š)T9£h")æt¡ ‹QöÆZ¡›åmV94D„…!+gSA §Ta< »†î€½ë¸,D'Ï7!ì¤CÕ‹Ó°Ñ"³ka-å q( à8³¶‘Ê9Ýö­zi´{zƒRdhf:8?ˆÉ99tu¼jü¢†rIÙ¡)Õ¡VןoÜUBAç³ö¥XU­ûNïc(g¥KXåMápµ‚ÎÖô§o\4ñƒÀ"¡C±¹A·gœ OuœïA±¥`újPú·ß³”š®ÍÿpÎÆ\«˜D“™é¬B§Ö¿.ìÕŠEq©<@–IcCó’2S‰®?|êWGow¡æ9h¸4dÔ2 „ ¨ ø÷.!ÈÎeºƒ±_úЪ8‹­Øß#OŽ¿ Þñ ?[u¨˜Í¬vOß´›ÊâZÎÕÀç¼7]Ñ?-Rp­)±Kè˜@©ò—¦ñÇèÜJàY+•šÎî<±ézziÔ™º)Èr¨YÈ5™ò:£Ï«/pÝ4˜&A w}M§žŠ Àôå$‡nÍPÖD«)n·×'­”•ùG£œ¤ÉSB7µó‹›Ì÷›í´Žã!Q%âü.ÍplT]ËŒQ4¯’Í~9t¤»rA/ão»ß˜¾H‚êEyÊy–e˜ZùÀÐ? VÅ­æÿi’¥ê3í's˜$• \Ð¥åW"f8>ùëAՌЪUöñYƒŽV?å¥ñ@à ‘ÐM£ ¯JqÚF²CK:ð¦êÝ BÐp"¤HX»ôJtN6Š€ØO_£Ú¬%Y‚.G”‚^ «‡˜£èžWÏHe§Ó «ÚV(0†ö-d‡jýraáXet0¯F:+ºi¬¨ÍuAª+¬,djmZV©¯”³‰•}µ•¸ }P©i±Fv³% ˜ \¶¤Œå7ª •êÂë€Rœdy€Â†>LÙ:ªƒ~ØÉ¾Eí&ð¬¨úx1­ªZ¹î9™àx¬éB§J¥¡¼šdˆ¸ÅtaÛ•.Ýâδù¦©oÂKçûæ·¾/€¶²knM§Z9Cý2 Pâf0^˜»)Î6 q‰ÔuÞèKlyz5XºVxª·X4nªõõìZSD±ä‡$ÜüÃ/~T(Äó÷ÆC*+íZ”™2;e ·0kL ñý¯ÿ´ßÀý§Üÿ)v=-•—>^´C8Ct®ºFÖ ûBU4œ„–‰4ÚÕjYpyè=¸RDA¶‚,!h‹¯/„Àm»éƒNÊÌJg—°DP1­.ŠIeTvh`+oç+½@ðº#T­×kv´¸µ{œú*{®¯ dÙ$C°çå¼ù|QÜ œq²<ˆWå?z伎x!c= ËÒ*+^7ÝŽ:ÀHtÍ,!;%Ío4·½ôüêùÀ.«ëúHf×jŠÎthS’Å5RöO¦> ‹âB” ªg“ )#—JFbñ­-AukãÅ~Ä,‡ =),;)Þbëó÷—è… cø§iK½¨ ²é Íȹޮì·[+Ç5kÃ*"·ìZØ »ØjN+g—WÛœŠ«6Ð÷kwÈM“ E-Ôžÿê«çÝWº#-»œC¥²bDˆdÂ&xö'½ÄQMg½=heH~Aq¾¥ðâìÓ;| ”Ó]7­‰›iÙ¡UöVë;×è|R4)•3HJÍ£0ÅͲIŽ¿÷À*•T9HÊ]»[Pkgš°ÀÙ¤»`΂0d'ÏáüÖQÄÀ„X9ð¦¤_ò„–!¡;` ³Ýiº†’™¬hÝå¡(6 y¿þ±è´H¸º 5( ð¶+‹Ye¿Z.÷†ZÓt xØKgBM¿Ô“°Ý6}lœ!]†­Ýwq"Ssªv’‘vЇ+S¤C5ðŒDT^œuùÃVOr'TŽ´f¦³W_¸œ¨šÂ¦:X•…6Ô™‚²rR1H‘ ;¢§‰ôÁ¾ºîBÓL±ævÙ¨%"Ð+°A¬Ð•3ô‘•¸ –©ic^‡†î„)àœMÑ TƒðÔíò“i™ŸÙ832Jù4B/¥"byo®Gœ[F@Ò Bq ʈ8¥“ÀzÁT«ˆÍ(» úkA£„€€ƒ3HÐðã²»n\±$PµLº\xt‹çi)$ŠI3³ Κ&òo3RŸjX®Ó64tPEØX hQ´[ÄlC)'  âéààשá¹Xc™8/è-kZÔiÏ C–e³^é›´HÅñ8mª{W4êø0Šk·æ; bNUVbÖ’ ÑvvnÚOчÖ(ü%Õ@U³×îB®y=EgÍ:!‡Ùå3Dn¤"„"a˜Kù¨Rðdk`—“c5D‰r%ß|UŠ.©F!Øjõ|~TÌΦ¯êw¥öâ\Õo»Æs¿è­¢6°EЦ'[¯-.(É‘ÂP.OJÊ>ñœX?P–iü¨'Æ”˜–?0swÅayð,ÅZž¾Ó/“OöÆEc©ñšòMXƒèúNÁà'É2¸vFìF Ï\ÃÚ­ÓèÌ/ö‡—?™Âoç½zÙ¸¢Ð)eRÁ˜êo}P¶(*³Å®,¥»š.*\ˆÅjTH×Å…]Ý뢻%¿Zp ÝÁ7DßÑ9.%B‘6 }P|²U%µâºÃ¨1ŽzÝ_ð=Ç{ úEÁvÿ§¨AçG{Be•í 9µ¢ ë6¨ª„‘ËBѱòI“žÒ”½ St`S)ÕÁŸ n¼cZÑãr[Z$µã<¯­wr%N'F öO’'K9—^üÁB0»E© Å…††B7,§k*ˤYÏÖË™‡f@±hçÛ 4h†(jŽÿªÙP>"½‚Z‚²‰ž¯ƒð ÂÍ&QøäQ‡#V×Ñ!X¨:`=ü~²)O Óô-³!S™Ý?-ìX2ùgV3™ï&Ë,ȃR+“BŸ¬-±Šu×dRÆð=ÙïÀyc]ů*wÜîÌF ,22•¶YM%EÎÛ©úÕЧìH­"ã8³RvH,ÐÀ.Ø;†yh7¸=€·Š«~ý˜ÔÊS¸Œ‰žµLŠhÓéX¡¨ ê• Ú =Q3W;h»n.YØ¢®;@j Ý4ŽŒú?RKSµðbˆ”ÓµÞz0Â+éó!¨ | b­¤*£Ë°ì*¥:Õ¤}È »›ó†Œ¨s"•¢—T—J(H°­¨IÚ'„ɽP6¹3q’'Ÿ”-£Á¾Ð~ãI+Ap<)W•!†Ø|qÌP›@—dçÆ†RN@[(êq Õ%µ¢ô•›Š„ 5NÒx!åâìâ_Øï Œô¤rZ@a^ ÒÉÝ Q‹OmÍkÅMâ,€Cácƒ¯‘UFÛdQV¶£&žÎ(8~³AËÖÚ€$ƒð#£¶"½ÔtZæÙÑ®ÞF¡Oãk0ÏÎLà‚]V×"ëHá¯Ê NÉkˆIWªMÙ…*;IíNúZ¼0h(Æ8L+ Û`Â+Q^5‹sLˆ;\rMÂiœ“ç&UÎ7ÐГ0%f2( Ŭ„˜îxQ­}‰uá:ëC+f C‡bþ 5M?+·]EFÆgB²Yà-‹yfðÍ) Ñ9#퇿¥¨Š¦d•e(…I¡ƒã)KŠ¥…jf•1ǧñ¶ÓÚÞ˜t9ßlæÊmå¸ürõ—ÁšüöRêïÔ켺Èò…‰^϶SÃWr•Ä)4à¤}'£{†Ð+µ*åä_¶ª+ج¥ˆEbz qÓn”’ë7Cm甊À" ŇbÎÜ`9xp€'³Íƒ…<9î ?mà‡ÃCy’÷è®àg £¯±€i2×Ówg??œ“cº”™§|*q›ˆ“5Ñ…\ÙU(Núm|‡øOŽæŸH¨ÛÔÔ++°’,ˆe×ÌAjü&‹N^„C’kè ®UZÆ8¿éÛŽAߌ/ ˜ÎTeƒñçΦ©ÆøÐ}¸Á†s,çƒufØ–\ÉÕ¶Z*GÒŒXÄhþâ§5e p~çBã+•IR'bÏÿr>ý7»ë!eYÌ”Kžj•³ÝOüIätùÛ®Ž·I?÷}Ó®§¦=nõ•Àšø{›;ü׿ŽÝ»ë¿èEúY àöÇ-™¶Ô­(¯.Be–qÐ/Öi†bn*ÂU‹%_ø27¸TŠ )nè¾È·éoÁ( ¢‹Q¹ÝJA²T¾Ó+–A±N-M³D9(2 ,XözŠÚT”u||^_œS¸ý—>tÞ€ qƒ¶C‹N´?q¬‰HÈI­b± ¡Fž™!èSjJ+6®²ßýª´(€Š¬GÆžÚÒ*clu›ð±œaAÉ7‡¡>Ð7eͼ%–CH3Š·ê—½Ÿ–µ› óàØ ü¦;ÈÿHn™¦Ž:!m¿Â/úcõóÒðø ¼›òä[ÙgIz0zHê`Yr*é|lM²LþÌljEÊ4c £Â¨œHŸì•Ý>¦qvšñw}Ýè¹ëS2Z%:ôKS…4¼h‡ðÜB§àì¶ìd1jzç Ù"O«rJ–(SÓ·¨–[Ý‘k/vµºtŸ¨—£íP:ȢϩrjÀMü ½]: #ß4Ö–ÑÚsàh_ïX¤8UYŒ82J9O¨áÊù`åâ«È`Ìu,.ûwônü¾¼:xa*8£Âd“¿ÝSšq¦¨0“}Pu@‡ _‡q4˜ñçö§A}7fŽBÆÊƒ¼ ¶ñßʈ¥RåA£î,çø„^¼&.î-n‰º«­·]i' Ç`©ŒjNZWÉ–å¦Hqòñì|¦-¤—Ds1ÝAʉn³¥Ó* 2éÂݯh…Ë=B»FaÄ1™\ öj‘â ?鬧͡´´Ä¡Þ¸´K}iïý`V›>aT$|DÌ$šîjú*:º;÷—º¦3äfY E‡ßÚæý/{#¨¸èzÆÈš¤´C<è°ÈY³K݇’.*I“ߨóƒv?¢!%M´]ô5ŽIËŽˆSK¦j'SLo¾ãK„ø†àÜ—ƒ øl"q”Ѹޮ”-JeM­´«ll1»0|HË¡µ[ÙË®¤£ä-8 ÐÆÐ—„`€@‰ê'E0¯&òå5v ìÐ@à±FÐo‰– \ `ô˜é`@IHX D^M2$tHô.zpvA1K…™,»XËQZ0ƒx§\w`N[c݆h]öW@Õˆðâ7á‹¿ôñÅAE²E}ÖñW‹MÛ]¸éöåNT$ÚKÕ®E(ºao¯XI³u‡¤îÀÛ>RåÈ Û/Ü騪“[Éà ‚OŸŒvÄñÒÊr¢d!JŠÐv½™Ñ-vŠÇ$« ¡Ñ…À¢¿CÞ”ØÚô¬œµïš®«ùƺ é×nÛç¤`QÊ9@û8_.Æ T†“R9*¢.HëáA_êHÀ™wÕqE éY«q8Uä*rj:¤Ìª'åC "¿xÑ,ààìÜ¢2*¬,\Bw8)‚FͺÃJ܆ê†'üeûá*Ëd?apo0*£¢©”sb5œ¹‘I%儵-,‡m½"q«ž”*•‘¼h1ååx °ÖB—ðÃg©–‚`HFeêÛ§^7«,‘ÓöP=5ÜÊl V½c\—>ä.¸ì®¦jëmó ™ ÐŽ‘ v÷>OÛ L‘8”Õ"…MÈ—JåäS§¢r¾+¢F\Ÿ÷®ÓòÀ$ëƒef[q¬â”(n’Nr‡¡Œ“ÆmŠìn©ŸÉöp–‹…[ù|ú*ùŸ—{xŽç-Ÿ¦”Çí–T䱂£ž80\Æð,?*nÇ\G?­t®c@¨àh‘Çñ•óäÜ÷ÏñÅ¥=˜ÊäþW_{Ï<8PÁ¦ënü ’9¿:¹É9³£W¬ Ú‚_kÌØZ ç®(ŸTá—‘å—íOóTÄpŸÎçà_¥z“eþz€WÔLÛæ{^€‚Žœ‹EŠÐ7ô…è2M®í<Ó_­&•UN\À2ÀyÒq#YT J"^~NãØ ²I­æ¥ì¦•¡ õõ™-‘¿B‹‡Ž* ¢n;6A0 _LH…bÕ´"w—“³e¦©ì€“ Úv’ê{·Þ´Ês›TyhV(Lå Ë<¥î̺6 kð¦{Sé›ÊÖ•2T4n‚·rŠ{JQU ÖBl0‡ŸäŠE^µß° ¡m/Ò„jÜIäO4;‹D¸ ¨2t%©€?”M™¡íÐB§S;U2‚~®y‹É© JeÇç ŠíEÐŽâšÚÉÖC³¦oʪ…ѲA^,Z\ë‚î:ýPv±Ã«|ÓÐ0 ²ÓP¡ý¡0È«]Œ°ŽNFïUý÷ö”¬'Õ Ë=ji¬*á -¨U¾!¡¬ÄÉÚ(a·{ÔÚ£¨ÆUc¦R°ØTÕ¢+ê¾±3ÚDéõbdi,úÐÂRèÐD}ÑmGE«mõt÷E?'ÖQh94¢10«è§­BÛö[tqÀ.nñŠ È¢QêA¦?.V;ºJÒï°¤Ýþ—•2/ò"f“ ‘¸™–ªO@úú2mZ¸ƒÞ=vɺ¢#ˆ¹Sb©ž”¡e‡¶©A]ãžÒª¸BlPk¤Ë…y@pwÉ)UG}7§C(êË!jÛ’¿øp—â.>š¸ÿ« Y ²U,¶¶g N~@Õ7 wݪ{ºñ mvP-rÀ¾‰‘gM‹’(YLqCaCà9SÔ²Ö5ôAë‚îˆúNœAQã+ë~‹R‘[Ù%‚bÞóéw×a§Ókï‚´Pfè©1 `®páL!c +ÈBáË §Ë AVæ `¶è&B½L–×4@qú È¥8KePÚÄWO)WÖ邏õ¸3tOÁà$+ÈòRMsæeèB!eaã¾£µGƒZ)F™N~Ú R9µ“#èdäŒ2mü°,Hæ¢\Øò¥Ž¡Õ¡ß”MS¨€7UÀ¥ä˪Â&8à„ö¢[t´x¼(nPÎAâ ¼øv@‹kSà,ë&„вQOš<“ÚÈA%Åä‚õA\êÎE~™³#Vy%,‰f”8ôL¹‚ÓKeEà¼Q®אַÿô¸·§t `ç;?‰×OýÓ鬄ì’]K:=%¡;ÌÚc ^ôd^‡䜻ӯšz&£ÌxS1‰Â'‡>]èoHál6‚ý}30ý…\Wâ­³‘MÕÉÅ'g½;û¸Ó`°ÓöÁŸŠ+þÔÑåUÒêýŒ¹4¹<ì[åS)L }p1ÀŸÇeð|Ÿ3*N7º˜™YšéœxíŸÌùÓywÝÍÉyÒSE÷ÛÀ¶nÅœ_1˜ük¡Ø£Î¶ÿ&ë¥tLÄpS#@ °¤o'Ú]Ó9”×A_- ÄôuÖ‰ Æ!~g Þ¸Rrh±z!z§©¦‚6†;„î0ëô"¼'4Ê.á…"4§7ܱÉ,^v)­š—‹+мtdålô'5À’Ú¶ƒvz™¦R:ãvY¡^^ô ø±©¢ ,CBø -5>O2LŒs’Í…”÷—ÇVC¶TÎø¼qºQ§Rôy_¾R8¾µ°±\Cwš¥§+0ð¼j%‹kÏZ˜n—ޤ\´o\‘ÓÜ›,FíýÒmZ|-;jatçsyP°Ö×ÅM³‹ú*lrˆ.!S¬¢ºíò3”1äŒ<~œUþLh¢Ë÷À"_Ý4n®:ó>yq·^hMoƒ7e«ÒoÐ~½ÆÉop:_Iµ,»Ö(•£)–W» }‹«¨ÿfDŒínÈQUÛ—Ýn¤ïédÒ5TÓ©õ«?¹ºÈ¢Ñ² øœ?yÔØ<™!l"q:¿¿½¥0Á;Eg…Æ]‚ܤexÐË¢ÍR¸vœT¡ÅYãB‚57]Ó9óCµò`,ˆçàà“dæ>Èöíäòaøaùz-á+g§n›«îŒ8bû´´ÓßC€¼Ó~ˆÚÑnM«Vªm)•ƒI„`+8Ís"¸”JÙ'…>{Û\˜ˆ#0»°/mOäM‡QrI,Ž®c±¾Ä´Ð°JHŽX’-ÒŽòM8k}(èéí›1 E]Ú[:ZóG‚ÅéÿÃa¥ýÞ‚ãªäô÷êúªœ‡F…ûyuª»jDrBËé‰q´ tåTwÿ .PÑñB[… E+}sF»¿ºxuü*bBæÈ¯´hRtm¥Þ¤…qmE–‡j𛯽ºÈ2 œ d åA¹Ð'”êÆopè[C®÷ˆäJ€¸Y,)kù…ðJt¥e/NP|J¸Ø%BË•%nŒ>J…¦å8ížNjt£§¸ÊÁ¬RªËn›?]EcÑÖþ¢J/ßÃq1Ò áXu9,ò+§Õ1í aãÕ¹ á•tê-^ºÏT­§©Xu‡Ð#pàõA‰øÍ–ÌböTV…Ô~³ÅÜMñd6*P,Ý4ôAÑKßnaZ-úËÄ08›btè ÷ ¬¨eá•[ÙA ]ÐqOÁ"g×jŠžB^´ºF(Î A¥â#¾Èòõ%Ðm{jaˆU³¥ { o ?rG¡D3ËaQßš¾Üñéxýí ì,˜)›aíçÓ{7¿‹ê48˜Î«]I"*}±E|B`øÕ‚ïFr°ÑIѯá†ÙWþ ßÔ¶½ºÐÆNè„&Gœr…<‡¥; * sðƒ>Ýl»&²£]3ŒríÉö¸”Ê‘©ýÕA/œ–Ryuͦº @`è›);ðj2ºøV¯¢cI/„¯®Ùã7 <4;tSû¨ä0ÐCñᔢåZ  À€)–Ã"~¼k¸¦w4â󃳩ÄÍ ø q¡Øat%¶K5‹œM»Ê… •¡¯®Ù´CƈóN8 ¦œ…4Q.‹¼j¶!Œ´"àÆ -S) ) rŒUÀìääT^]³©„ã¸XÑ*ööt×ß~$tü€ö Ã3Ë0 }ÐS_Ý™„þ¦›ÎLŸn~U;9ÖÇDÄ‹s-ºÁÿ Eè·,ÔÈöf{!èÒ &«ªN¡¯^d,Ô¡vÁí^h[ GMe„`‘W(šºV­ÊÄ@lúN?ï3»ô¯Cÿ“>XC D-¢BUn÷ÒEŒ•T„¼ª¤`7•v7}µrÇeG Dgî-A(KÒÞVºó+m r 㑳©”j;*•]NM䤱Ù7Û5]¡O^+ôáS+šÐ!Dox”T9¦CóA!A3·ÊcæÈ£~–Û}i¨eWm¾y¹þÑú:Û©îÖ~ç€/âÝp^ðQ#~,JAˈ"8ÓKšŽDëeÈ‹‚f,ÅH¾ê¸À¦¨rr‘¢ "«õ˜¢ F(Õ¤ZéjwÞÅø¶äÐet$ȉ¨-ñbà% ¢F â¢KD+zZ!ØœNñ’7‰jFA¡mï?J á´(qèÖ´#]d Ì1»ƒ˜ÂJDóLˆ9m€=ýh)Š$–ãŽtQ{ìÉÔ+š*u(gÐ#ÅM1!¼$EƒV £¤4äk‹‘¤¬ËheÙ)銜xÆAÕWÓ$k@^¢ÎJ¥S§ •ׄ‚‹£hý’Nl§¨B8î|¤,©*¬¬qK¹¸ J‡R(î+Õ’M+ YÜL7ôn×ÁAq9´>P ¸,Â5Z¥?6œƒ¢¨¦SvtžiÕb}JT‰šqÄzÆJ‡$¤;é ‹¯–³!gf‡Í¢h‡pu“"@§¶~X¤˜ÚÜ>Ca-È›ººì¨V9’V»nsÑvJ«êx9Tv ¢á"DŽ;\W-±ÿ1`ëAf·ˆÊ² ‚TÈAÉD×bµ2:ceQ/­TÊ>TªÕÍ ™‚Yé µk™ œt$Êí'¢:Ý•s»$2¸ŒµØ2¸ê´›äI_–ˆ¤hüæî’ò …tŠÊ;)ïeoêä¤X8(ê!š ¤­x¼^¡”+GB«*jÛ©Œh'f*U9’hºÒË$›4Õo*?w¥o<“nSî(±ZÔíÿ¦CZ½õ¦ód•¨Éô"MåêÂùýàMK§åиkȪ†¦›·¿8ð-z]‹C¹‹ÃͤšüÕtºñÄÇ+8•V|Q@Ρ×>I–›cËaõkOeIA°›?,^ `e%¯8ªxaÍ{?eÙk?m´UW¬ékª‹rÑúßÿ ÿ tÿ§³Ê])Üûæ¿éEQ‰2™´SõEˆœUVÒ#ï¤VŒ£Õå/ZêØRÃMî`‘³i ¡•fQ’ÕÉ–"d1¸`DƒZ\»“$ö8v ]WZ¨’gê£+`µùVPom™ÈêmÆÈ%˜;—j†‰Â7§@ÙÜÂù[ æVŽÕÙ~OõËh«7þ¼ößYL6ÇVkË£ HÜš»­¶ãÇB#•ª¿ Vbz‰Ãý‚ÿ ʸ°iåHø«ßf¿9P˜ËØLÑ*ÝÿUR¶87-L`§m@¬€qƒÍO§é†k: xú È¥8gבÀ¹Hâö@莩•IŸÙÙ¥”s@u¨lžJO?Ýüê¥Ð7N'O }2êÿ÷íZxqšìg÷áÓ§ö«ràbåYEg¾Æ5匕˜,‹™áê"_œ;š§ON²jB•É2…ôé5U†iÅ ÚN-B² cMZö£’#ë>‰Â'‡>Pü0¯LqÙÿ_B¨²öÿ;)õ–O¦ðéì¨3ýg3Ü£lÚȦJ™ÍÒjO˜é* §¥ÿSü¬ØÌ¬ÿ'í<2-Чñýµèc!‹âNâ ÂÐ\¤î“dyØ^”À½pÄgŠ6ÚÅo­ L_¥ÈÁ|ÃnÄÍ1Bñ™ªQZ¡VuPÌvŠÕ¡òëC¡”üf >Wêm±Ý-%ë³{ÜÓAiÃøp’upd§™KÅsRßc+àûNiuÈÇœ}ì…+²Û M-Q,SÄ R¬#é_Ï³Š¹ŸxVq¸0)ôÉ8P —god7)ð¬…ø˜RúÅwþÚ6Ü/æ }©Ó´,¤"x/)‹%°€ÍDhhåI«#ÖÌÃwL&U\œZ ”:Žb,ÿ@ •¤ø‘gº1Ýg"üöØ3óp6é.k:xuâ)Ü„(®M'ËbaÃæÔÌŽ…Ao©Cí«ðÓŒ¦g’Ú0!qà`ÇÿVrÀjOFWî0|Ãæ4S?ü@Æ2J:éy2ã»N’¸ ô‰™“ü•ʆ¥LÈ Ž¥UÚÒÖØ0¼Ú)Ñøt‘Õ c5Í=ƒÓxy=¹nZØ´•'Qó£Ñ4ŠÃX—…ˆ¿¸O®@YL0ÿ W6ýb›“#—áey€ÂD Ü\Hhî¦MNùtj;uS?F8¢‰ñìêty†©:}Ï%&‹/=8Áfwƒ ÿßµÚýÞP–X8°Ó®ÎR3U7+Ç"M¾‚ž‚íf a8YMƒÉG›È®²8Ì÷)æØHßo^;Õasª,ë§ñ&øÉq¨¬ƒZ2ü¼ó¸FoøÍWÊþô­ ÏV(&±1g‰Ž¤0À2¾EraבÎC…u6Iå©^ÔżҰf ƒ„âƒÖåx½Õ¾ô`¥ce:$B£O73íT]9»ðê qs r°ã›ú )#é©R Â&Ç€²CÓr¨2ÂIŠhËö÷:«p|u½ˆ©¸™Iê|u[üjÁ ›¼½»œ"»J9ý ×ðU@Û Kð±êkô ߨt,»Aè¦&cøåPk‹qšZœQäàB0Î qPû{—êõÓ·C‡àÕï¿oÐcÛ lgS|¦U®´jÆéÁñÃØQkúÔŠ¹‹2n²ç¶TŽÉ]²û«O,§.ªÔÜ·u*‚X\´ø[¶L6ï´6\¨1³u{OÒÁ€á¸ÎÉ_F¦K¹ÃÝœïÿ£æ|ËÿE+ÞM}Ù¶ÜôA1פÊÑ"ݵT²%Vl)`F¬g| ÁÕjµ«u¶QvY‡J9†>Hw9˜W“h’!]0Ü@¥ªFBº.Vò{ÿ÷ šIY&§V¬N—•¬a”j¢ =´¯½îÎTÌ%OûT¢g׬çñ•­´Ôt’¦A^£îYþ*eŠ›PT¬»Ä àÚ"~Bf8'@Æbq+«Ûïq%•+E…†WExPýDEyA à"µ;€W’rBG±¿f9óЬ°jØÐ." 8HF ÍÌj‘K1O‡nŠû¯;ësFõ“"_2¡j¥¸0@˜ÇMxP¾¤2¨&Qeœ à Ä" ª©xmÿUØêê„à'f€0bÜ ewÁÔž&U‡™*©”ýÄØtM¡iwA¸Ëж?H¬VBˆlŸëÂ\T÷òoÙoÀSÒ‘J9]ëÐQRQ02 =Ä*Ñ #—ChRœˆ.†+6ˆB¹ð€êôÒº/’ñ*æ›–j°’ ¦+0Éú S3Kw¨Cƒeô@ñW}E›`O‚Ê=$‡ˆ.ðºcZ¤8ì7ƒI½@3ÿÓ$ËšÞNÇHµeI¾iaÝMÚr‚Å@C±J¡‰vÄsúƒUž´Nôª> ýJœ÷îNèÿú:Æ43<2KÊñ“q¥oZ.ŸNè³jjeØ/ÎÓáåipNãlqZ[Æô8 ûйòÀÁ:H’·Æo ýöià9»`0¹€W X)ÿr³7©âmRaïŸ ªø†¯œáÛ©r’V‚˜«²22œ]6ç´Pƒm«ûغ¿ Äð¾q.Z](w'^3ššÁ¡?;©ž/&ÕK^–ÄÙ%º¨]_vì¦-@÷ q3MÑ´Ô¡>ÐÀ¥8TSÙöâõƒ³³•ãÒõ , ˆƒ÷•ܧ‡ržÔŽ]É!sGþ1‹~¬ßî™?X7µ_Œ–E‚”A:M”*Åô߬=c—\dOZÍ"Æö#|èÞÂ*FR°ç>lBÌö 2¨ ª¬Ð­½à¥z’Pæa4q5Ù¨®r°“ R üPå\'£Ù0’¼éÅ…VvN^¿N2Ì&Ťºð:`Tx'o¼D8€œS>°µœÆhV}G£æ¸Nª ÖóƒÃ(%ƒU_Ÿ@¼šd“"Þè‹Bp(Õ øÀ×¾R0Êôá9Nn§+Ëg‰Æ{ >G4Vâ–“3ƒF—¬é|xƒŒŸŽñd#;D xuLÇœ¯‡òú€”óáÐÌçˆRCŽÏ:ÚmÄ&úê¸ ý1£ÅIÑ5ëEΖ“`šâæ)s4°¢I ×.„ä'¾#çIº»±ðë Ê8&‚˜¿=§ÇNP¡À ]“¤xñNyu’Ë@–Ãaeƒc¤Œ.¬@9 '@ hp¥V²Ä­[ÅŠ¡ƒR>=לÚhü&©œóêPv‡^PýÍ»×ÙÅÛIfƒL6~F¨&wK(âF;™fÀ o Y^H—¶íB^Gi öõgCF‹dñEy$ ª¤]kdÚPtR¨®)ãw¬H↔–ß}øÆ­Q h´MXÂÓ†u$дŒõiöqƒ³«¬CCÑ ¸ìp~ûvrè;Ÿ¤ìŠãïÄQÅBGeçnZê‡n ,¦áén¶ÛPO××ß1) ©è©$+´TBA¥µî® Ý[Tv¨Ë5÷Û§òüo{¥½—Êùÿ¥?½Öøìöÿ.–C¯ùW"j—åÿe>•šýnÔ3ó«ÊÎ}.LJú e¦ÒÅg>›Ià{ƒT)I§w8Ÿµ#_û³È™ù¬’óN×>\¡ ¯Ü³ÉÌÍFsÍÁWà8Ì̯êU}¾>,^P÷”iùìN›ñD)õÃüð4}`¦eç93ðvUaIË¡Ëdу–ÍH9›FÕ¯†¼,²2`õ÷ÑŽ¥ì•HŠS6b¤­8áÁX–ž?à:¡»a»C©Õ3©0À/ê8'W /©» ñ-2(®C9B¡ã2ÈËWBQÊ•IáBÀ¦½üšpc(¯&Ù¤ºðŠf¶â:µÌ–š"vŠ °Œqs%ç€j…¢bãØâj’!b1nCCÕÙ 3“xlÛ¦UrÁRšß Oùíýú‡¬ÿ4¦…34uŠUG©­˜øŠQ’U%ËFÑà d¦1€ÁRNãÓ+´K;LWFåÂÑg\‹+A‘ÿëü3Ë&ÁÒA<¥F•¡õ5ƒžô#8ä§ÇàC*]4³ö—Í'JŠæ¾ÓS©4ìq£ðÀ&äÌ&…þp|¨úÞêóuÜÌyí™þJ>úŸH~È2 œ&·2¸Ê2qdq‚79V.³ìKJÁÚNÛ2»}~-0Mw7n˜úiKýp}ðÉ53¿0uö9)ð™ù½6v¥ršºËìÎ[0Ï„3ªß–S–À9ÓÛöŸF–ߎÂ/_ê§í¹¨œ©4G:¾˜1½Ï79½~â.ž<«úy…ß~l°™™›¹ßõkO²ûͥʫ…Ù“. !dý$_i¡ ‘oI­|`èÃÌ·:E_³5^R¥È<=íœ!8‚‚6Ø‘¤ˆ:Á»­VH 8ßqÔƒódâéü—fó5:°\5uqÏlç§v]GáŸÆ*+DØW ¥ìFµ­ )G@²¸¦¶¶6†zË4 }ÐØŽÕSÏ ™cÅó êƒô4®Ò!®µlÙ-rv­¦ÚààÀ¾0:)”š½#¼2¹êñØrK:9µWDŽ.^!tH´¸°«g¹ƒ2ÏËá«‹ü°SèO£l‘\V×0TÊCµ;ŽßiMËŽø¥È eiø˜ÞÝWà¿hè.=KšWqÌ¥ êЙ}Û Ëp38rþæÕMå²<4»ô¯P¹û\ƒD¯Uw…á£VIÙíBmeó÷gfWþt5|Êe¶å£ÈWÞÝIyûXdlËþ˜ñ‚;­Ç} e––*ÛI•Âo/‹ûÊç…íì6åÆßë,››h~;Ù±¥ÓSæß»Küµè‡ïº#°E—“¢Kv™ï”Ìvdþ~0;HtH8R:vÓ2–¤ÇBáÛ­™˜Ð·?€n1Ëâ€+H ›‚ÎìÀÿÃÀ… Ô?IrèÛ‹S©TWŽ5¼cÜNð–°Ü5-j;gWlBÑa1ÅÉcA¿€‘© Á@ n*ޱÃt–¸á£"Ž| ß)B.Ž<Ø>cûw9ÐÌeæS+Và}¾ê&V6Þ!:ìèÅ•âÒUW6ië‚f“CŸÎÞ ÿ¶R~eú4>Ò‰í–"™E@:0ç²)cC¸ùó{^e••Ø2‘-U`“Å»JuZ$â‹Ê+/µyý¨RygÀ#‡D§ÐNªûÀTªãx©Ði?tð–§|8KÜÌîfÛÀö±_ÍmŸO^ÚŠàÇçÀ`$n¼8â½èàè0S©Ln'[Ð7;¥ü€„þ°æ;Þ%•bÍW\”Óµ¢ÔuÛ-be@smÜu#f×lúÕ‚6¨CèÜO‡fPåü:pÏýOþ‚!BÏ„aT#ÂÂ&» g,ô¦^€«EÎC}‡Nxð¨”ûГd¦wœußÉK°_2 ìoŒR+†a彯ž¯¦+qdú€u>Y7ã»X«;…W‡ ;ÎvßA@»¸ð!§:T(>èÃä¬PŒ–’Åî¢KúÛCrƒ=hXÑ',T|C¤È¦•+ž&¨¢…ª™-í€=¨TÒÎAÏ Ö7!¼›&È’Ín&A8:îEßW\/UÚ\+$sE;7UÅ5Å(¦,»#pÖNxÏp'Ç ÀäHe€ÕË…̧åàôBI0]@‹V¯*ewáì q›ºóc~ýJ1…Jª9}ÛBÞúÐo‘@ýÂî@ëÿ?ú¡€ç $tïø½éi¯ƒ7Rv, P¬ÀåÑÐÅ‘•ƒUOŒ€±€"$ÅÍŠ"¯O®ÐÑOÄì›=ÿMo{Ž©Œœ ƒ/3œ5UÒþf'ì @eP“:ÔGˆ³›[FÖ9»p)NRN' ÐÍ »žß†Hýhü«ªl"):|ó¡ÄÁ_¿íqNAЃóÈ—Ó¤B*z ˆÞr§·©Þòš`9[¤ x5µÒŠíÜ…ÔÙºö@uNŠ.¾Æ=¢ôõib3¬:¥Ré­úN¶ç~nóCÙ"ס5ie)–ÂÖwê¦8*´¢ ”ŠJä‚d l".qøú€, ì©Ž€ßNRä┪ў’JÙ¡7”`utx‘º/¡ë; {,»EΦ'Eƒ®µVe 8pÀÁl–Ô= àÕ$ºø§¿š[&t‡ÜEO‹ì‚B£ZÙ1̬®*p·»ƒ%º hêË}º8)Buâ@[…úSÿ&«WFE|ÔzS7ÅŽäc@ Âm }%K.í‚®é„òjM²K‡n’@*ç©CÙ;РЩ€t”t½5v )nŽYW|Ws ÐÆ¦q1à Á…Øn t(®Ð`¹Ñ*TøÁºŒºä¸ºq‘¸™–jÝ`æªÆ A')€3ä+§íódïôúÐÐAUÇ€š´ì­ÀE‹Xˆ×¡¡¨Œ³+f)«°…¤ŽÊè²xÜSX'qž¬À`‹ƒì• ì²[|ªŒFé ©qVl$¶àа[ä<ÔŸäÎyr¢¼>¦•§á’¨>œéë1˜Y :ƒ¿d6õo¹Û™ÖÁùK™f{ð‡þÁŸ&î–¯‡åàÁvº0ÍG_ñ^Ž1ê$ÏprJupÁ‡ÏÎ5-Ÿý¼)óßù”ÖÉùødΟî£Q7x“¯‚”¾Ùâ ÁÔpÂWS£ º3*»ÓlSsÊ(Ð F{Œå-!ÜúÒ'®F.¬öŇ Ç’©Z$¥¢½ýJ'Ý´ÐIˆg "±ç"{®–Ám®8˜>—Ž`29Œ÷[Áš™“ÈŽØ¥ÀñÁÑ4è×îv&0gô5(ôɘ™æ,›Åïè3Ùúj[“ŒßXYY™\}ì`º\KÙH|%¤îüV“Ú‘4 ÂÎé¨T7ã–j[q{ë ª9]¶¬Ê9B%=J¹-õ]XSv¡ÊNBÁ ÇH`íƒðêÅ2‚iæ¡à•g˜<Ý.ƒª  ×Ý3ÐÀ7ýt©•QX<ŸduÂŽÑÆ+)0BDÌRa7+ÏN£ì²¦$qƒž+ k¿²:HAžMêñ ¸À8ó²[dªœ §v‡bzH4À!äg.Œ¾¾(nÐJ);½]‚FAB7›“7Àå:@z“®ç"„ꡬ"œUßCò:4ôA¸茞Á(ö£ÒWEÀâ¡§«åu3£ä)í ïXö€ÐÔj›>hé`‘ `iõY&âkOn«ƒ_Õ†f5(V‰ ª”»»¸bâg]ôì€vào/M.y¨Ø:q\]hhŠw'Y”êdáM¼E¶¸òI?y´ÏR; hÜx5Éœ8m®£ Zí)£Wñ+|ÀÀCÑÜØÊ¾lü¾l 9ñ: ;D’ÌÎ^­ªüº™LaºïäO³£”Îý0ݬ8›°~ÄtÓ2WˆG9‡bæ:VþÀð™Ç†r‹u™Æ{vóÃÃH9'Ö”å1µô9?-+Ž&¥ Wˆ¨yj&ÒˆÄZC9ò¹’Ó…JõäE¥ŠùÀBqPjx²Kèä:üóA—™TMŒ'âÕd—Ûï·£® ¶•Ù10¹ëÉ+JýŠŸ,åT»à÷¶J_ôR¾ÆšP9 ‹Ó_L%-|ítépé´ôŠÏVv'<{ú’WNçc'y w…ò2 ¯½‡€U¦`Ü‹Â(˲SœÌe²|àJ<N÷a0”aº£žÊië+‘JÙO»€ú`‘‚| ÍC>˜Øyè:à«…˜°ƒ%~¸Ù^³ºìŠ=VÏTå>ršd'"Óa»pX<ôAˉ¬²kýœ$™Ó™±‰p­K#“ëXÄÉAãI«©ÄÍ´JØI¢,f–^Yû9[Q‰„è]‚0bàŠ2¡+e¡ÊelõýËkÀ6ƒh‘V,4é.tÀLqÄ4–ÝÇ Ð›yuJÉ©£aÈ·,Œ\’±6ͶK˹ ™…†bPŸ + %¶Œ€œ‘CB앨Ýü‘V “K4m§k^Œº•²5·ìWÈvÉZqmjÙêîÂñÎŽ`¢ƒ$t'Lrg\%sL'àG¥7õ¥°#ºŽ ™:Ô‰[W݂àCu¨Ö¸ VY\¿ùÐ>CÂ'ï(Œbß\»)ùlb:¿QŠÚI1eR.¼Bóö‰’¯Gqt©b‹¶ÍoÛEòjæ1`&0 Ë,TÙMâS³š”??Xʇ }šÊŸ¼>f¦S©Y>륺S Sdð$ù×{%NN¦ÁV?Œ—e¨D˜´ât@}W:ÍÞ“EYM3Ä ¿“˜`ZýHų<é#"P^‡â[.fÐgŠ‹T«Ê…‘ØíKûȉ5ÄÀk胊UR‘ÄÔ­ e2­RP£ú+˜bZøÕ<=_ç½lMÑéJ«´¦e«Q^‡òå)ÈëƒöÉñÍ)pŠ&*š@‰=c€Ã©af«Ö í]ò>’ ÔL¹¬¬sŦ§ûNÏÎ'U¬IÕ/tdo]вAl'Ù¤ l}ñP:É]pÃwEŒÙµ#áÝ©9t/4½škZ;·~w:qݘw<4”$uóbÁc›j*«’‹ €;Õ¦Ýx²lTwAÎ9ß Ä 8wÛf~x¦|wòËÐÝýn†1‡ÃÐÃc„Å^‹õÜpS7JÆGÂ︫…WëDw½]ë?ƒcxð1XA¼ 5K¥Eèß-kðºj—M > ÔZ¦Jö±àãdž³"t¿Ê—Én²è\î¶Ýt¹û¿;WÂ3yǦˆ„ð†‰îî$¥7'<%‚+÷§wµ´OÅ»‘íîþ«æ°îº$ßÌuCßÀzH¾!ßX(ß];ÕáD_éÍx9^ËÄUÈàѨˆõvWôF•­f¯´¡ªs¾Ìu8²àIÝ2ÃÞ9[‡8 ]B 3c>1û¼‰„êRÙòXfÿ™˜\·Àl`³ˆ# XŸœ¸Ílé3¾g¨ÜgéÏì­ÍêÇ”‡I6µÍß¶ƒgæyL#%›PŒYöb‚ø‹}CÝ|-ñ ¨ £7ïü Üû\ÏÂ[C`6Á%G`6á 0‘o†fÞ¾dTês•åŸÛ—‡`J8냻áD`¿‚ •väªróøkµí¤`lIw·—'›pL)ë›°ñ † 0qã€r–¬Ó8~,!L©&~*!~)aò•d3Í®ž)®*4y HëP{1òó1?S)gš¼#¤±-ñ#ŒØfRš²kÖ´tVh¼ì˜Ÿ¿…7J®²-êCQ߯ãzwÚwØíðwdZ¿[/Ãyq0ú ×zo‘]Qjø‡>²`ïï6ªðŠxRÙíÌeâë S¾ÔËìæŒ×?ÒYÁ®)ežMÊçϾƒJl2wßDi%OÍ„øœ±"|øB ¡É6U¿)Üœà7%Tƒ§¼pý·ïÎ*Ròªc1WÅ¢¹W•™—k>‚"N)wfÓª*Í Õá47 ïXÉŽ¤"ñÊÙ•±i 2â‘rv]Ó¨ý†²-Ó0î+–c)i8aÿ)w6@:€p}¹ov,5h8V<´' ¹ZÇå,«M'Í㈨¶YÞî̆3=ƒƒ0jðpM¾®]O9&Ëþù7È”‚Òp.Mz˜«Ý0*ù%]Ø2G/shÓ¿8O_6ÞëÕ&Vä=&V<}¹Á… s€â¢áêkè;3öeì™Ê½Ë‚Ö F¦3U¯Üƒô¼q– Ê~0f·soúbࣕKš°ÁrÆ· —î+ƒ±WƒâpUVêBýŽØ4f±²f°Ó¸™lK:èTÉE“œMôⓞm€g„š,Þ”°³C;u§ïR£™?†Ý±Q’—c<“ݬ",¥ß ,/üp'»‘?o…‰>ü™+Ü<€ß¥R°]3PÛœTPMðŒ&ÓÚÕÛtØŠi¨úî{!p5‘v¥¼êK~Bßœ³–··ô=ñ­r©²±B6í¥šÛEx"Ø?¼vÞUêLñdýÒȤ'udlÒOægÖïø«ÒuJÚ”ÈSP]ò× OÖ¸—SáëJ ÒPD÷ Ïœ”êp¦Ù®t53D6•.šÆ-¿@zT+/’;·.ÞO9 74Ãû…gN³ƒS±=DâMy«LÝ;«&kXú‹}@ÜiÑæ„®ñ±ú­wƒy«©šR!í@|Ï›‰Lº±s¦¼à~ÃzÏëO¯ UTúfDÛs\_ŒðH¥ìJ…ú‚“2x§¡ZË€½ªš†ÓœÑàçEu%pbï;¤±0G¾«Ê‹D©dË–üTœû‚[®ÊßÊ¥hy£o®Nb}´rò‚4c±í]½n«ûc«‰dаÌÐè‘Àb]tß¶…ñŠsOJu,Æ$ NQr@-î¬"%+”ªzU”0å ðdcVÂ\ù½.a8»ruŠ«+=ÙÓEñ$kýEy©Ï!˜ƒiâ_œÆÝEÿÚl«6*ë=„×ÈÖºH;^Ìo[1캠n¨®nüÛÕ0~‹O˜h„í¶~9$ÔÞðC§RÛJWŠÅ´µtLèEiÇÒû @ÿRoéRv§Š\¦T¸)uI ²h3ë}¥€¸+Ú"ÉÁ^Mç¸Í\©§ÑPÍ&íJï£dêÖ>Õäx²ËfË€ûÃJßee˦/‰»­ÖÚOJÀÙŠ›«t+Áˆ°èåb|ú¸¬ÅÖÿJd2Ÿ„¡â™Î v%Ö:zS5”Â`ìî°¡€YµÈŽf¥ iªj?ᥳƒ”ŒB¿ ¬âÉz“ÆN*vZt ²¥þEŸðò—ãÀĦ>é^ŒnÃRQ 8 qe+âœÃ|Ú ÉŸS2Ö [:Ѧ3$Yõ5TûQ ucÙM¹¼› ¼œ„®LlQ„ݦ»iÛoà~@°‰SBlCÅÇ•~Arš÷Õå;ëN_s²M¥‰ñ¥¢÷&έÀ ë9Ö“p“Zh‚ÚªNÂŽGÎÖ˜Ér™d÷²hRd7ÈPI‰jmž4‡ø{æ”Tº CÑÄÛKuW©&Fi`)ªÊ¦Â;T€“W=ÙP4JþÂoÀÙÖy\+žN•ÄjýaŒ€ÏáOͰ®u(]íà9 ô’”GèE\_ 8­Wÿ¾¨*–Xe{Á6½dõN¦’?Ô_„ϳ¯yÇÞI^h›Ä÷½dJ¦u(pk OHGÄ©G*©K¦U(;ƒÎRòÂo¾a²º¼»F&–ÂUÕ`Ã/J#8Z×ò>P=žVΓ¹BÊö‚^3fÊ8$(Øá%6£Y>¯3LC5®&Cï2)h¡]ï .¬²)w†–‡øK컣ôß>{&Ì&è:•¶,;ÖÝž>c¿½‡m}±ecÊûÄ8Ø,¦(ÁJêJlŠÍgy§‚GpÞJÊ®Bw$g=>¸ë’ç#dF\ê¬&«2zÀKfˆ9‚&”QP4Jg4ª„t¾Ç×âoߊ7g6žÇ‹’1ü|gP©©v®çñ~gT†ÇèìíbèLQÃþcv­ ÄN7nV«³BÙ89Ênpú—Và ªé¯³€N _UkÈÎ ³Ú!òB¡~4¨œè£øÏÉ£d#Ù ê.Æ8 *>ÃèÆ²GÉ;fŠºr`yrV—¨I[Ø}A£3` ¯Ì„~Ù§a MK°ŒÕ*yC|$Üá$­®¿mwëc8|6ÙM(ÜŠ¬[|NÖÈu’I_PPËø2äN;l…k§ÚRßJ£¿ßü·ô”ͰTVÂ(jù °À~ °4Uß™Í'_éÇ8…Rðæè°·àHß²HÚow+‰û¦m“Ì࿱ÿÑæÍ»JV©&’ŸmvõBψFO(¾5½¨€Ðe£xCÜl?x#˜.ÛkÂUµc{šû÷…Ãàä¬ÐÙTŠfø‹6áÜ—AI˜o6#è͘«ÑPm/È¿xwÅ«Be7±×bÀóA(UæÅ0<çRoˆƒ©ZéÃéym€ ½bŽœ=:Ôˋ'Y RMØAÚ”F0à®ÙH*!t†Ø*VFH‰\»g0çlY»TV%¾ý1oy£¼lþ\<+5šáQò$¹2¸kc†×Ì$xo®Sôu>èÊûTtÜè|òÀL “QäŸiGÙr²Ý­­Ekå+Ñk­ÕóúÓ„]Óp¶¯{Ü,Ã÷’r…Ãw±k<Ì™ àÝ“J6áj e½„Ôb5i–Z2;µÓéÀ{Å|qHcáWµ¡þ”нwQÅöêóŸ2ë¯<ª&?ÒØmúõíÐ(S¡j¤mHrJ®ÒÎÀ~CÙ–éÃÑNœÂò «s,å{"vŠgnŒMëxÏ1Öβ ä…­;–Õ骼°)•ƶ²=ËóbÅü±Õôù[vÊõÉ‹[§6Ëi˜LO!‡M« ƒÃ)ò¢‘Lš4§.›ag€{{^0#ÝÜPõ× -¸¥¨±gK¤¯¦´QůÀø‘77Ÿxµì¶Ú—‡ÛöËÇÆþ'yïç3Ήö@,y¯~%Ì5ÃëÇ3cñESƒ“ …p*æÛ@l¹¢_Ä6ömôUië|Õ›+jü´3ŒÙŸÍœ‡Qïã†\oF¶0ýnb›c#.Œö±ÂPú/›Æ=ñ‡o.J¾×Æ•ÝUº¥=½éïáŒß ãy¼uH) †¶õÅ–Å®rì¼È{ÄÝpýl¯èøÁj¡»éÒnÓÅ|¯b›<\ëwë{üÍ»”|Æósµe2Ê<%Eõ9¢…ñà‰Ä}¿øOJº)}ºktèÔ9P¶àh£©’;Ðë(”pÐq"^œiÕm%ì+ó%‡‰‡ܵêìkß1"P9y‘l7¤¦õà?ìŒ9§ìTãA=w~ó|L˜Î²Ý¸õ0Þv¼y‘l ­Ø‡ó·íM½Dý‹²ZÃ+¸žÙБl%wnqnáSånÐ=ƒjÒVRƒ†¢à9ÖùjA)²v;’+oB¶Ù˜ÜÄÿ7£{îÔY€ëq™€Uì€ .²;c8•cÉÍŽ³J5¡Î—óJžÔÙp@›$¦/CÜݱ5Ãòº’Ÿí|À)rÕZÚË.{B›Á\K`™Í ’ÙÈV¿Ÿ¤ Ç×À4–Ê‹›S’o¾õ»nÚ¹¨É|ïé hCÔ=úM¯)ƒkcäÿ|ìõ’ë#ßÿíŸD&6ŶžÌR3`×X þ¡$`ÞŸ<XQF\ÅU#å•ðþŒ"ïªqÍ2Lt ^"íXŘDJx€Lz_{Òc?mdtÕf8Lör¡µâiMq)yöh}É®QúPH¦>á ÉOtj8 räðyéŒe´2s4©d[lA§8Nÿ ó·|³ŠPrè¼HJ^\ªa¹š.X ¿?óŸþ‘>¡î&$Íôùt™h^ÄL”s»ãÎİ;K*JE·çËŒW¿>yFøù„2öO¼öýS8>ËüT*ŸHÁÿv̸#Г¡¬–³J…H~BçFàK ¼Nô’A_\M°ŸAÒzSM”¸O}°ÜAÒ€bÆ=¡:ß>p <ê¡%Þp…ˆ¦õç5€?¥î³q#D{_©\XP?4²IUýºÒ‚4bx0ŸWHåž‹ 6ߢ4‚³­c¿^ef¿g½Ç'ó íàïöÂý¸„\b˜ S… ÝE »Ënš†‚tõà ‘v@‡FËi§CW8u[Ù^S/4A;âW)}å°ú"'!Sß`ì3ÙÕJ“¯È—<§à© w§f-zkÍT’®rAHñ[*~°i¦1ÄW¤måªïT=K4l‡c’;ã-œi:IšªÀUòLFìNR²"›t¯UšmÝ(!<C¢i§C_ ›a¢¹]zqà ªRP<4@y¾ÉþÑš¥u§ÎNœ jw†`” ¿­°`Y:Œ.,ì@ '«fwÙB&Iµl%½Ks3:žÜ+ã$Øì{x‰ÿÂ}8vnÛÁ¸h÷qItÑÜ›?¦ä•ˆŽmMÆŒ‚°¶Æ ûðĶ{Q/ù‰Ì£ü å]¥šœ”•:äëJУ$íA(»bFL´.ÿ¢(· zú­Ú¾ ru(Þ6žZª&*Ðæ5ñ>{ׯ{moé€ë ™—)¨[vn[•·O’ò5 þi +z–‡$”>Ìtv@v™’ ±€À4n椇ñ°·ÎJ ²äÕi-ã‡yŸ#¯BY5c‰WÒÏE–Æww5sÕ´ó‚ÝKZ™88 u«wë÷DTnÝ„\“N59%6¬€V.?’¼4‰áJ…Ú;4Æèyö´ïòä&4-#œ”驈¹èT Jf£ëëkÒ“5Ò#í*_WÌÞÅ«T“½œ ¬*>-í¦æN™c=0LÜpyÚ"àG6×ׄ«~"?õ©€[ÓHIUlª‰ò®TdÂ×ü×­>©#p…Hª˜•JOhòÄIÚf‹çü'ÿ€×D!UºvÆôƒÉлl *ý8ƒ(ë±ùî¼4|‘¹×öºáî5qM þQÊkêV6(#HÉÐ #{R‡ð®R!v“µ@+RÉ&OÕvLõ&Q_qÓHÉUZ_Ø0ž`òcN؉Ê8 eƒv:tï~õ–¼õÚ²@p°€ÒB¡(o Ýx‰;D^èìÔje«´ ÐN¼SRÆ[J•Ð<>¸àî}q ¾×ð‘…K#¼£¬®d5D\ÚU*O…“¶cWG´[H)LëÁxñ0ÊÛ"¡ ë;W§*Û )-ë…ë³äd;@Ï:@êûÁ•Æ{¹•DH jIÉ•«“Íèi -eW­¯©³o’ÎH:Sz&§lß!`k†ùfŸ]ñ>eþ¤!pâKƒÒ¹š,À‹¬`{8¼¡hl }SBšúŒÂó°û’¼Wšpb%Í O»$.Ìò”&'ª»«P^ØÎÀ¾ð;&y-®Ãi _¬6ºtvLCé]Þ€%šGåƒ'!´^NuÉ px¸Þ êž¹ýîøn„ò Ê@¢Ú%ó‚§7ÿªˆì7G-2¤£ü,xÖË›¿‰§ÆîqN<í.™ó\LÉ\aÔÆQQÚ±è4ò#«;6ÐÊs”™üú0 Ì3 f–Çky‡4W…'iÌ&ø¥ÅØ~“¿%%FúÁôr¨»R¡nðÅCÄ©ªš|S2ÀÂ@åj /N]A²ê• I5È»Sß1›Áú–š²ÑµSºqg3%/ªØ)JBšM„·æÍH~^Ë”ÏÏ›µ> ó¬‡ÌࡘŸ®ieô" ÓôïË·’¼9gêF²™ZZÇÀÂt§ŸÈ¸;\óßX„9 øèÖ"Éè6Œ ÷/úⲫ³¬‚}¹¼V¬àa¾HnH9Œm¯¦ñ ür,•ƒNÛH˜êi8ÆToï+;T@'I€‹U’t¥®MAš•”’ êË¡ÏQƒ—+M@鿯Ã"zÊ_æÿc̸Ïð…@Db#./®ÉOh¹:ô:§hàj2 V5#Ì$TñÀòu%èQfshëÐĦòbúh¬1™ó= “M¸:´òÄœ_ ¶Å5y¥#Ð#1€³J…›üPJ„úþªà=ÿyŠßüGhºožªk&³fpëçäÔ#Ù£.lñ>J"ƒs Î2ùfš5m¸-<ß\¹´Ì>|g½=ùÍ‹–n”úQË»™åŠÛ‚ËÉ‹¤)¿NT޵²û÷¤…)˜£Ö"…»aà`½Q¬•””jö\íão­Û:—¬Ø«g^'¯aÊ¥/dIÒ oª;”«J‡H~BÇŒy‡Ê~ƒ4ÚìóO––û7}QÛ ê›íVÐ!8¸+tWœò`ØbÖ¸Kg¥öú ªÆZ—Áú«»òU ´ývЬ°OÖ ù }I†&ŒÐUåÅiäUÉ›[^v6i ]6€]èÐè &#P‚ìˆö.Hå¬ñÏÜÎX}pv=#éÀgæ®ÕdZ ›F2±ËO@{P›ÁÃܽrgψg¤dE¯Îê_ÌLO®Ð‹éí{ÅŽµ5#øVÅzá~0 ꢆqÎÅTÚ£­ð¸óš«õÚ!i”vìDªi•&hh<_¿ŸÅÕOKœšØÑŸ8díúR/øLüÌ€ð Ncº*Ú?†Ð ‰ÎÕd )š-Óàý§4’UíÅÌõq×vhœó©MÜ8«ÌuI; i@ìi l;àb=Œ¹} #þ› M£VÊ´ œyÂk–¼¨ËuNMyÞ¹º=YÅ-o†â˜¾'k@“а£Jc¸dÄM @’†ª¯së\¡È£’eúa*ípMÃÉÛ÷ª7UƒâoªváÝ«ÒÏù~ÿ ‚bbW,DYËž(ÒðºìæmÀ+Aµ¦À7Hc¡÷l÷a1ô ‚bçBÙ^5/ˆzrR6í Ð÷~xX‚àý.¶êQŠ‘/µbüJ’ƒ‡*Ž× yÚ j²½¬8gvHc¡WÀ9‚Pƒ€$÷VÿgþBžñÁ)AKͪRyŸºÓá:…õùáÇÚX²b¿ƒ¶D '{p^ŽÑ¤áˆ©9KëJ(Åùí0IÃÀ%Ê»+W¤¡êuÔŸœ!¶ ¯‘µJ?æZù‹ç{ ý™eÏ¡ç÷O”L<->ŒkTÚ Øí ä?ÁÙr8Ò*ÐJ•«)×rò"ÙnHé—Iãf[p;ѽŸM¢f-ù<±\|`’Òy5d[9ÉAv[©®#ð7±ñOI£´Ó¡üa…d±aA}ìÆ>CAK€îØ?œŸKw‡ê€WtÎÒŒ£çõù{|Öå‡T6\ ê¤P”/Ĩ̌ (ª„(› åîÔy‘”|gJá¾£V©7Ê8Quìžô\|Àf¶ g•íN˜Î¸wmóŸ²Æ93¡»ùXéj(©Yý <ýCn7ž^C^: sÚ@¤˜O\çššM(iÞnD±0GZ§œ*:?.­#¤1› y$†îIEúPH¦s¿‚¾ø³–Ðj¾Ró†ãˆÁg§"û«Ý0›‰¥É¦Zê©p=)9yOÖ¥&VB×î‘Éd²±ÑnºF™‹ìHu†X×ߌâgÈו Â*i@1÷Aéi,ÔsËÉåIULG§oJ#Ø;¯^åÍ´ -ÈN—V][9xuƒM«0ÐLtÎtŒdM‚£ù…{4;¡…s©7àÄ&¹;`šOÄô¤3R'!q ©-jKF‹Ù#¾c¯ï¸ªílúÉÌ ü%í5SOêlzeC£)é#ÜœÚp@·ZÞÔñÉ÷QmYécñ;q¾×½ZPòj±÷û¡hOtÚ Ì“ÊJ?³¨L.éícÿ‘çLû“÷5[qJ4qvlcˆ·e¯/œå*@ç\}}âìë9•òN“¡Îø$8(&5X‹xWQ'<»xfz¢¿“êk&2¡M#IÐr¢¿y”Ŷ[æj7L÷|¶åþè!àüœÃ–ùOyÆù¢jÆ\¦k £Ûç/ºªnÛµgÒB¹ÀÕs´cq Už'4¶}¢ÇŒ Êu'L²©©ÎÏfÑ5íõ¡¹XüÓvpšð ÿåfpQÍOÕ ‰›æÀ *®&;-*§Ñ*”ü J#k¨î/Ú^†)²«òIÙûVqPÝe+I¿»öîZ§¤¼—Ú,¤Øh«žþæÚùá¶Êv'ìv°ÑÁxÞX&¯|‘}a‹¦WÓlQ`¬šd’yÐ%dBóÆNÝ“vq;»ã0èì %/ü^ÙR•ؤm7ÊwãKC6ŒDɉ÷L ƒ'Ke<2 ¯¶ EÎçÇYþ† äÀU¥C¾¤ICM•ž®^Ö×Ȭú/ÉГTÛ|B®ÀY9¦|>®$íWDìB?w‚fƒÖ .«? MRºš£ÉæJiåJ6øÃ Úßvhä’p ì—Á# ÆkÔRÎ9ð%ƹW«¼¯Rú$¬"' мó'‚"ï*åj ‚=À«CÅ+AE#«4H⦀ÏÇæ‹iÕ0f”íª•32xdZIT•ºlìÔ…¸ËŽSßü¢é_Ö ÏPŒ.¯D&ó˜ Ït^°+±I‡êɇAûPù¤ßdó(™'h(Ig¾o¼ ±@è†ÙXP¿ËnÝÌãÚÊ>-6 ã£BЬ"ÙÔ8fp¥|Â¥ Ä";DsW’Í4»²CEí|JšñÈuôƒqÓ,tޱBšq;4rUÌŸ4–s´åײ‰´s#|AOÎPíé¥>gÀ ›céd×(}($S;vÔµðWHdíŒL®ÐùÝüT±m‚'¦ Ø\i,´nÚ1«$ày‡WxVÏ’d5Á²„v• é”…‚ò¬øB@ãR!«É‚„®?TˆÍ«š†SöŠ¸Î§d¥²Ê’C%“dš»Ag)yá÷Êúx+Gg²y?q>lvdvx*`뤱0¯N¯:‹æØì“/ <æïT¦Ába<#P‚lB¦× l¢ç^ᔸCñÑk'ÉO`Ѹ•¥.›º¯+áãfÚ¦ÏéáWa’l°R'©ÖëëÞÌ‹¿¥FÚÆ^·ê\sîB®ºŒîëûCcª¾œÂ%oÊ d lgð¾³7Œ*Ø  ¢è…bË••ÄêéñÔA6P~BZŸ5ÿÒæ@oT|%U¸à Dïg!6½çmÑìý›ªuþ-”!xäÿèü{þSg)È}j‚Ýÿ9ØZ\vŸopýðvñ°¥Œùo.úÀ’•ËÕ‚Ò¾µl]¥8ÒÿÁÝÊ?f‹Aç'à#+ƒÚ'ØOCefˆ‘Ëx·þÎBw³ÝMëw÷çÞ #_nLfJëœ =²l¦¨ydûh'ؾJ¬•±Õ?²ÃìÄPí°ìÜTue&ÙoüÞ9 îöîu¸rµ(LÜVf¯sŽtöl“ÍóbZv×¹D€Äáb‰°‰Ã\§b“œ¬ôÒqU±UißdWëkÝ5ѧè²ÐÜ.ºŒ]›¹4fþvO Åº'qb<‰Ñ;”x’îÎ'Æh8À ÉOi|Ò'厳;#ôâH<óÇ›òSÊûHü޵>3ñlÍh °†ïC#í®œqŸ¡ÿN´HÜ ±8w8f…9) ®.›ùôý®2àüdtîN(ǘn‰.Û¯¦õJüî¬pÞK?8 †éi½é]dü›Úaïe~/¹Hà'ØnÕýVo‘ÁE°¿Æ#DÚ‰Òâ’¶sa´[¿"îWÙê×ö²™OÇs%sç]û] ƒe»;¬dØØ¿¸«¡ãh=•–íˆa„•-X—æw'ÿí~7ÅïS©·;pº¹¶nˆ{¦—«¹I”÷+‘ÛJùJ1Ùðûø6}¢®:ܵLÉ÷má7„ÁCÈY†ÁÉŒÿ^t¸Ø¸!56‹¯ þ2B¿Ü޽$&t¸X{êZüÒœÜët ÓéïàrràXøwLˆû^Œ; †óF¾ø«ZK”ä 7Æz5øC#=+qE¹ì°’yÚ½ ÷û|à—ì2Pk¦ôÍyÒߟ|9y¾ƒê3YÉÜXµc´®ˆÁ™°©,Å {tnˆ´ÀN×ÃZIy Õ»œäÚ E±ÏJ·ó˜7Ÿú¢ìCµèáBï? ¬³¤’ìàÎ&nÓü¥øŒ@/½OÊÐN’&Ȧ‘’kNse•Rw%i§CWÀ™øP×ͤÏ«b]Û‡›½ÛÿÎSx&9¿Š6i8õàèà„­µ0ÙJæ!€ïàZ]\{e i¨‡Ž4óÐãÊ³Ø¹Ëælôgœè£¢fv5ö’ß›oô£ÚÙ”!&àäëœ9´ìXþßóuÿþqþã_ôsþщÐ8%þ$©vÎ}Ìš“ÆTò¬ÿi%ã+\Ó—T>™íƒø'jr•Mñµ‰Y‰6Bj+ê®»ÓTPÔÙѦ|X¾aEÓg²–Y#!›¹1|AôQTÊOr¶±`2|1µdY°QºsáÐ…šÀ’uA=óµFuôgfÜ©=ˆ¯fÈ”ø3VP€¢ñQÐó~}}Í#ìEògµAÙU(pCµƒiœ”¡U#uvˆ”hO_‰çÛÀ¨pTýÉ¿Âà|ûw"ßWÓ¦Y¥B¸ÏP-X¡oNAÉV!œ´ów"»ßî{%N6-ÝôÞéÁR²»+IÓVÛ%šL¤‰„µ6´UÈ&þñ7w‰“C÷–·¸TCvýº’câÖË‹§“²¡}RÍ]€×KXîWI;u§xp±‘Þ|ÐÍmýª«¬óvdù÷å‰+é+Ï‚Ly—4ÞÀʨ$ŒÍ-Ï\`qcÑpÂ_œe(UN ¸.”üœ}¾$Ó’’›i/í¸¡t†K*¾‰uÔ‰iÚþªdÊŸ<@0YOI‰²uVf¦dàÌM[ WJ=FÆ3˹rÕ’BM4W[^çd(žðœê*½¶ƒqp Ì`Üáˆï¥xž½'Šì°qÜ_Ö—Z4RÖÛGÞ]¿¼Rÿ ­s•ë4+” z0î(Û1IÔø(ðªÅ°ÒÜ€0ø"`¹¬ÁÆÙ.–…õl%é—Û~¹vÞmùÝò·fâNÎ,I0g`Òh«àô­κˆ»ŽzC©èÐ0Gš[ä…"_Þ½Møl‰D{¬I’“:ßÍÚeۮ朆S–](ÝÝu.÷×õ¤ÜÝÖÌäÜÎ ÙîL)œ¾ú ÛŒëhpËiK ܤyÖV%^’º“maL¹¶>ÒÑ"Üö˵ón± Ã3BÏ’É;-ؠ˰SîABÁkœð&“™ú¤ÎÆß%áj¿¨Ò®øÄÏÝx®løáÔz2“JÃ9t¸U” wá ƒ±-‡Õ‡»Ïûàk l73”¿e9zO¬^cœ”wÁM–rl=øÏBN•ÒB^$[`çGAÓÀvûá…GÙKâíJlnp*98æA6¹¶ÄToæjnz•µ¿ßÜãhƒ/ap öjX?ÒẄ¦ãž©áï; îŒê®ÉæFÈ!ãç.;[¡ø-:wM(¸‡á«®6eÇAÊp'“‰£RŽAâÞ°´Û8›’ä‚ËÚ4 Æ••N_»Ê´éÉ/ÜA¸äá#Œ /«bìù¶qBÞyçU"64»ÂgJ¿]æë¼­ÜèõÄóe¹~y;ŒË4t3hbnÌ]‹w,Ü—JùÉ¿œ\gxÄÙ¸ó½Ž}}ñîGú/›¬m§í>šnã +ä\¯­ûô ÏnGÒá…~ÆùuîWìiE?Qr[dB¬•G!‡l5KÂ#óTs²S^ä¥WE÷FÄÎ>gÿÖXâ`ë ¬!j^8šB“C6(²Ùr;ù|ï•T|­»×¾6‚$—jÚyÁn„Þ€V&[¹£-6~4 ¦l\ñ©9³ozÇbpEãMàqR5·ÔNOjåÀzC‰‚6Щ‘!ï’’ejiÒŒºl“ðñ xŸ¸Ñ{ÊÎÙDò3(àÌ­©«&ÒÞËè­£­WJ<…çày£¦Î¿(›+¦$•\3@O±¶xO}fž¨0Ÿ¼® }ßAÀ†–]#å†äS³mÇïÉÖE×ã$,)ób̶ۢeCÌ™\Rvgi‡£½üÚç·x‘ëoXn¥ç…5ªÔÔ7:Ì üæšáyˆ Ú=,“£HOƒÂäåØ ÙÅ›£^£ ×ùƲa²#'\UŸ”p ì½,#”ƒ[×~g^ä5ôª¾ï íE+]zÉiºýaÞ¡ÅöMÅY™)ï•=r V5l‘ÝyãLmˆŸÒ±Ôz-ç¤/u>s¦ÝD6‡v*‰¶Ì”®°#¬?Àž[ñ!U¬ð×—Êörå J¬"yªl3´ÑCç¼hð$„ý™˜C2ýÃ(8’pGeh½?víÇù¹0 q_\õÎÎÒŽÀ3°;Ž9†}bùy"Á)Q^ wÞP)wšúä}–<…á’Jé&ø˜•ñ[¼p  â ˆU®H`ó(QVñÕ’M#%WùÃŽi(íÅê å˜d0/Þ $câ÷g© Yesm­/ðÂuçïp­‡ÁÚˆqü[ ”î,}Ümúå° Ý{I¥-09¡§0)8ï}açbË,+Û)ÝzÿÍa®Šé“ø,íF”ÛÎ8 Ñ”ýŽDÎåjwN¿J°Iàñ˜@ï¬kŽýÕ¿å9ñÖ«›òîŽÍDhAZ”6‡òŵJg÷AשÔMÈÔÛê¶ L# öô²By±gã.®ÊšNxÑ馋ºSçE1´?~-:|â0X”;ª†ÅõÁ)9Ç+ø¸Då‰}ÁÈtw±«î>zŠL ïšáó˜+Qé¼ñûøe¢wÙN»¢î2 F.Æ>{Æß¼5\Œ2;øŒ ƒîÃ6wø“»‰ÕC&]çCzÔ¨’o+‚GÍ2sØ]b[o‘øµ@|ðñ=–­”Û)=–P­7¿éÖÝøýy>çm¥â-3=ò:ÞpßÑÏò/ÓïœÆÝá‘ç¾8q5иõ×Íõ0è5¬¡ÿ*s˜Ž›wÁµ’ÉKúµó"ɾÁô·ž|¯ú1›§à²•ƒg6&Ô5ãý\'j\mJyÎ\Á’ßÂ&»©P´“òÔ‹ª@{eP5¡l í4ò†;þÐìì „ÄÕ¤>wHÕH‘C¥ìÀì$Ÿ× Ðvôê¹J‹:¨ŸäŠ‘~pP&äû e›f”UñŒ©tB­·cŠ èÐÇIiÚ³\;ìµËÔˆO|ŒØq¤WÍ$QéúÚ 7óv­Z× ²´ äÊ;J/T¯¤1CÐgc®S/Òˆó !„mSÍýàOk²ÏÄN@Êv9Hª#ÓîXŠ£´cÑi„—mŽx šØÂŠóåpö‰Ã{ÇÞíK2+ä' qý¦ÜÑøBËá/Ù W¿¥…Ö³¢7ݲ\B GR÷ §jùº%ÚlR!óq¤ aHâí(µ·8)C߉2ª¼›¤a€ ¬ù ƒÈδ¸¡{ØL*ŒÌ<Ž(Ù­0€rRë ¥v_Í\® }{é›kF©›b$«båÞ¢JcPÓH’æ®4Ÿ´žŠ>@e<#‡±Ýž»F’ìàC ƒ-å ® O¾5/–gýä¿”‹u[Þ®¶ðR¿¶zIÉÏWÑGÖûÒ-]©Û6Tßð…9,«’dæúÜbÉʃ&\þFÄ'¬”²ll™¿á9/¼L½à¹õ‡Ê¶€Ò Ó¸l+·wS.Çáj¿’ ¨ $ÙÈ u@ɳ¶ïŠÔÙA¼|£¬9l¤¤ÝëìÃà+ÌMº®>.œÅ/L‹}ô@¬Ÿ´†/FxPWØË ý¢ÖU#·À2AøêA8°…ýíð‡åy Éñ‡òTA8K.€üœ’®×”2‡YòŽqÕÒ^œd›¹ f5Óü'Ê%ëá=уª+®øñÑ00>[€I½˜øV’9Š®¦¼‘*ö@vÎ]“ìÍq:¤[N¬eâs4Ãñn¬X;§Df¶ÒGbÒ†øT/ ©Û8#Q0<÷ÿU¼ÆRd7HkTë…}¸Öà Ãlê?Aè®ä»é^ˆ'/#Šä­Fç:ô’ÇÝËïâX·6¾ño+™Ý—“{%<&Ãäp±j‘ðAuÙ;½íú?ÜŽÙ”oVøëj=ˆ÷à_UpÈ…Ó/os½» ‰L±*µHJ#8¯á|sƵ˜õ’I3/OAùó$Õ‹³ÒAÛ ¡/ÉÐ$ϼF~> ÷pÛ6£Z.Ã'Aßt®}AŽ1ü·¨¼“½Ô1[$cÙÅ{›Ôùn£úô „rp;n|..¿ŒÎ§9Û®j+R5 ¹&ÜßÌL6-²ùã'Üpöž_l©r’Þ:\+ÛèýùSlrJÂzš/›„í¬"*}MÑ¿5âè¯ôtèèűT%½Ä¿&Jƒ”èt§¬*›éV(²+4Û>è[J×réŒÓ#ã¿&\ ZÒ‰‚’7–oÞÍàk Šó*;Fn^ßÎ —œè"L¿,æ`$0%–ûU÷Œn¿õ\ ®2ù"®Ôå{lçoNå27Þ~PeU”Ê[˜Ö«<.øMÿ-¤%øŒèÚ^³ F5ÓÎ(y”ô ÊÁÐîÇÛN¸Ízæ—0ºào^\êP¾âkïÅ—zÃá¼f*ãÂGPΜ7îŽB)°óâl*Ù”þ¤Êçeõ±ßOÉš*ˆõzû¶çvp}û5†åãIž¿KÂxƒGp¿¡­ßß¼]>à/¦FhìÜwˆOx7+ݯÌÀ+¯Mþ,ß\qÔ†«´1àúCuL:JæÖAã)¬] ¦‘M¾®d„#ŸòQTqT[”F062>äÜ9ÿº’ëïs+–ªµžÙ[eáX؃’gÑ¥1WùNÝ)9øV’—FÚ3%\.™ &]Ç“]šêWµ25O® n8ÐE.bmÊO‹þZ—¾&„èQ-l÷‘¶SÅ Z7Ñ]öÌ\ï5!Ð^ÝS~–üT¬»«—²]—Á‘H$~›=ö»»¨—L«éZj,ǬĸfbzÀ`‚³«1,+žTq‹ys×öR*’·k§d.aµœ«“/²«è³ÓÜP|  #4ÌÁ>Zÿ(’6èžý1ÁÛË(È\'D«á°¬¯”a1»;ƒÕ^²fàs¹ª´ƒ÷›ñùÍu´íUz¡hã›[5¶-];ï‹›쥺Rî†ØUi,Gƒò—¤D LdSÉõªŒG.ÝCjŒªâ â{æEÇÔ7éùË[ž‡“ÂÕëV-£$}Ò;¨Hc…晆Í®x©ÀÁ%sU‡³'>IѦ¼Ký_Ç»û*ÜÌõ¸ŸW¦V²MèZ¢ËvЛAР¸€4ÅìA°‡¹r5Ö„Þ±$PÚ®¡syzBOkSàðIuVÜùï^%ÿ2V”º‚×­L}ÁÉ9L©ÀÖY᪙wÐ tk]Ùž¶¯j’±¦tkü&DŸ âE‰›æšÐ‚¬e¸% ’\6¿ib”ÄÎ"fýóAˆeFN••JF/j®ù…À‹u»š‚I—ŒјôúØ™¨ïT'¤1™<ç¼ JÙ(ެp}(Ù¥€0­/¶*Õ´3zg‚µïY¥¢ÜŽæ X$ŽåJ)Ñûš¹[ô $Ù¨Ðù†{°”ìæ×’ŠX¥. P¶—ê“óÙqJª6›ìå4ú;·cѹ¨ÉæÜyQ´òš;6²ß1øLçËÆÝ×Êᄅú†»º‰ì¤ÝaMÊ'ÌåàÜ&Ó£ü9Ò/ôL½ü“MüÌÀ]â@<߇õJlš¢ì@Jfª+6¬b´Â+ï@_€^‚tÖ¤4mÿ’ Õv ëÔþ}‘f;32¶U@Ù È®e¶¾9¹JþtÌ{¥™W¤¡¥OÙŽO¿­uµÂIûíúrú!:˜®*™9iùe²* æè=b˜»S÷&VðwäKÆìI¹¼×Ä °­ÕÌÙ,¹`LW¶!Ù´Á܉)H;•d3#›€×eС L¥«iYVïùJ‡äÔy1&‘1·¶X¶Àvÿ‰¦XK˜Nu±«ƒ”ìôí¹RH‹.Ý Ë‰º“ J°ÿW¢ ˆC€q*è*xwc‡=wåEö°'ý­GÒH½ÍO¦¹vµ7çVªxÖOo“ò“–D¦’HëÆWg¥S¥’©¦+™<Ë—qRªÛa˜<—U¯.ü·c’’cG jSaG|ªD?–Ù$]‡&Ö,ÞÍSÂÜåÞÅ•ÇOE8øA5|âeV½ÿªµ0¾*ï®XÄוLÒ0ðGÁ4>Xê¡T2̓Dgw‹æ±~_¦^[Tbiœ/ZÙ.›áÁ;ç×g´_eqŽ®ÓA‘¥ÊF ƒq[ð‰ Hàm‰›o²s½û;wyÈÍwÊnctoÞzA ÆS!êýBÖHE5™HV¨† 9Ζԧ¡ºö_b“O4ªª’Ÿ ¬Yјɔ“´gîX©ufMVjÍ ³BùÖµ½à]rC‡uPÞjÔ;å é‘öåL;´$V-ð‚@ˆ˜ó€Í„’ƒÍs}j‘MOA5uSÄp‡a,‡’Åݘ±l»1¨$K]u´ÜÑj'-à, _Üú¬Ï29 ÖþGé·—{?þ .åyÄ•î°uὃ[Û_Õ‹RIû® ÓXˆVn~¤±™z*`šÈQ:ìK²«ox˜âwnuê tiÿ¾PTyWÉZŠé+†Ñ6ª»++môf¢}è h oR²+¥Eu8ò¾ˆ«£'ºžGG:Ìo‹9SÇüàêä• âê¿3%® ½VÇïC.ôôŤáxíÈvÒ˜ L—j2án ™>¹NÎe¥ß›s;8}÷Ê–®*Må[@6i§Q© šÏ2Ÿi&3eM5M4!ƒ÷ÍAÑCk^ì Nl²›vUÉO4/°EygR‹¾¡ž±k_ÎTÉä ½È‰ Ʋ`2ôöÂEÉDÄ¡‹ºSçj˜†B<ð€sê¼;_'h#¼w¹¸Ô…Weå‚oN„uåýÚØ]9—zÃX‡âoë:_öŒ6Ý ß¹ÞMkp/‚h›“TØTú6nRrð·ç»kçªXº•blNO‡¼¹$ŒÛÝÀ÷IÓ¸Uy÷R ƒ-îª^(™úõ®´ªuÒ×óF:Ó~¨î®Ma@˜5/zÔÿá“€úwó@xpÕ}6ø$düTnø“Õx'a%?îŽMáàÊJÒ(“©¤tÃâØ?ßI ÊüŸò/*U4îåTH”÷ l÷÷ü§í€\3U(O˜u ¬ñq5T+3àb`^„ûˆ$‚•Ö¡cf¯í@%[¥_t\Ò{×Üg”3VéT5ƒãÓ]JèQºd£ë“†vM\½æG!òðDV-Û À¨ð$kð×E™@/zS%ÄLý ¥'Úäƒ\O‡¢ÐÉÔÞíp.W3# ’Š0´mdzH.@{/0[ƒŠìN+waaª‚‚~”¼{FQ(+K;ºBrˆñÃ`¼(±.úÚM¸¾yTúÆ~™¡Î:j&BYó½Ó“'î¨äG*Y‘7‚ßJðeè é.ØÏ“\»l†Ü”ŸE5‹6/³ŽÁ>áKÐã—èžTqqÄ©dÇn¥²9äìÔ)scÙ¨â¯àÜëmäm1eg”1@ÃLùÎ^ð¾VõFy-f@Xcòâ±0µ¨hZ² ¥B}ÿáÅi¥;í ¥dc\¤Dz¦ì—bÌþâüTòïé%³vÛo¸Ò´ßÒa+}SgÇ€4…R`T•¬[öâµËÒÑÜŽo‚€må1IgÍž§UZB¦²d6À©ÒúÝb°vãàŽRó¼ÞÙ¶ƒ3¬ÝXÒ®PétxA²×³¸¼ÄF–’éÐ^Ï©–¼+e— zÀ®Ä&Uõ`©EQZW(•N]”–,Ú¹.Äãd™aXžF:HÿÆÎÄ ò¶  ±6‡‰]j©>$‹’«ôᘌðóo)X—ÛåÔÆ¥Šïë]’â¯Rçy@Ð O˜½üdxVÏ»IX`Ué&þ¦Œ»Ä7D«e½¯>H~”ZgÚçÉ)ðK8ù!é5çakœÛvЗè(ê¾’| ÞýYJG¶¥+ ‚Aޏ†¢æ§x•뮇W"üšöÄ4Ëãð2Ä;jp&µ"³ »¶·¼ÌtWÙÉKÊöB—øÕM¥ÜuÙXÚ±èD‹·t(Ft"P¢aþ ñ_wlTš4Å.]“œJSÈYRJ7ahI‹ªn"7ƒvC,Ù˜)¥±ØËçaoB#M4ví ]Ë;MÍò÷Ì„$°-qfnк‚ º”lÂðïKPõÍM—ûN¥»êNŸûBå³O 8~(5ƒUWš+¥E÷r:ò‚å’ɱÜÒ˜ÍʽLÐß9rúÃFZ¦­œ©¯¼eô °Bø{­8(XŸ£VÇ»i…–¬ÒU~L%³!ï_ÔA˜ÞFxÄÊ‹ Ûkq5X¿ë!ש„ŸFÓåk}¯‹«—€óúúÂvi”ºÛukcI‰µð@âP&5”\©³ã6œ¸:á©Cq59)/äܽ¼ñê{Œ£áµ½”p ²»ôƒ»FÑ… A^›T©l/k³F5€JC”U“ƒ¿Äqƒ§`8¡Qç]ôû(ZΫ†ïdõ#ÃÿUGP£Ó[:WP+YhQÖŽ®·PB$È:ç0ëØ ^&{ž#;bîa»Y gÉN&’Ù(Q¿aQÌ&M:ʆ~¹iêï{¬PrÅ‹4Ǿ²}cå²cNz¢Ϊ¨Â}-’vÜ„?Û÷aþÃÕ¹`GâPt…³V—5…¡p²úi?IÈÕç$è>ñ5¦ðßþ5ï“2Jª{erFy¡•kÔ©™5é‰pjXÌ9øptQ-ûlf0'ƒ¸{”œîó^tÅAÍ?.Ãi€}Òõ)éCP¾Ë>>Õgb´ÅÕ4Fß*Âu^Ág5˜f ±ÀNyc½©jæÆoêK·‰ß¤G0?BÅ­ôë¹5xœ<™J·…VØNÄ5ÁÁ¯ñâ²¥$z)¼pæ<™­y3›¹w`f¤J8Ö¸à¬Ùð±×1/’ê)¤pPžÁX ®PÉâ<"‡ÈÐl9ê>¤Dñ.bH¶ñy-ÇÆ_”uŠì;EÊf2©›ó¨E©Á«)OX= í{-ûfo' êü¯ ƒ_+ñÅÏZTç‰unj†iÝì!½”W–ÃQºjÙYPZÅS‚‹F&ØŽ:Wț٦ÖÓ 9ЦÚïÚ^ ú"µ™§™áÁ»Uý¶ eØÍWÓÜÒÆX`Œ HÃÔxASz²ÙpœÝ}ø•^”…lT¶óA*:OEÖðA»B:e˜oËÓ@·¾ö:,eVÓÔŒHR<Íå ”T‡7³ÝP¼x»EÛ šjÑлÍÓé+C½/*…AÙ#}$õ£ï@y– 5g&X¨€ëÞ[¢ñdµù)æÁ7±>ÄT>XáÆLnjšì¤§­F+ÝŸ3åì3ü¦ z$°„D9æ¹I–x:z‚ƒŠ“¯¥žž—êqdÆÆÍ¿³…ÃpÂúÒíL›AÆ'õ!$™ñ#W™GÔ²¸¶z¾ ®1/5òe’?4öIGe ¯ [s¥ØþGg+¯ÔFìå®$ÝZi/¯p¤›û–hµèlJ¾úÖ0^£a­|_5QK‚1®2É[eS{-[CdȵZêVË‚N§ }Fºd½'Š˜rU6³áRK9ˆ™r`qŒ>,Â]zx®ç2Žz.Œˆ­ûi&øÔ·Q¼í†èc±%9x-MI^å?Ýþ¦&|ScŸ†ücä¯î‡À]ô$µ•l‹ÖYU´tÌãMÅÆÝÙ48Pjù”CÖvç ñíó$öEÎ,otÀÑôëê‹qYzpf.(^v—Rª07ƒÚ`Ù{9ÔÉÁå>)¿)HË~¢½€³ HÃÿžœ+([Òë_¡ZõåW^Ø[P|ƒh1Nµß–æç •ÚvAÚ5Ä´µÓ®«©¤Y¥<]Õ—ÓBÊu솕†7µ+#&€Ey—ˆ©É Ç­D Qˆrû{Zî¢:$©¯Ó6âù1@¨ˆ<›üùS x·Œv9”%ê`Íß4üƒ'©«Ê ¤7w–ô©ÄÔ¶<ÉÒìì—ÓBeY rž7ÕîŒ^2é‰jòÜG-òÉy†Òmvˆ[œQ^>^ÛW-ãLMYФ`ìb*3XdV‚ù0µ)¢f¥_6Êò į×Ä4ÀOVqÞ$œ ¤í§†M.Öé ÚNzcù/j›k¸™ÉÓm634x‘|õˆ#è–)N4‚Ï”„€xÈE‰¿Õ u> j&  ˶¦—ZÙÌ6ØæµžÙrcyü.KÐX µ,ü2¯›< .˧ØÔÚ]G!<- è»5sUPo[È 4úÛæˆßªa-j»ÌÙçõŸvÖ÷ãö32«‘âVú±ð—ót²£²óÉ f¿J|J¿D¾8Ó·LÚ¡¹©™0Rž°Ø ¸’âüË 3'Ú¢Á¦!7·N×L˜'¬á„#ˆ¹¨T„”EÃÄjûP;„ ,a×JzÍL ò¢ât¢§Æ®É¿XC)c(˜ãšD¾¸Iz]€û3¿*ÎÄ_ºž­¨ÕÞ;ò|_ÿªÝðýB }w›§Ó5Áð\'á¯Úðä¬Û¶`ù½G®j;œß¼Ý0²Ô ûúCIBý÷|†Èôˆ¨Û'ßÜó¦LZRH)ì:žñ]žÆJ·Ö\R"Íï|ê÷ùà84$5˜†a¥Ãcó4ì µ(ò¦É $zúØ„àMkó¨ó0Ûað›ñµ¬« ó²t’»°aXÏwÑ01ìØ1šæò!mƒÍµpŸ}¿v//ì¥7T·iÕÜ*Oô‡0“Î?¢ùõì,¨~ç+f§·™7W¼”çelƒ6˸TE°Ž|ý[êÀ¦!e·c*qï z•颳ÐïšÙ,f˜‹Ðš.h >” svÀ^›zdcµ*ÿfF}Ky"¥Íu¿„À^SòK‡êƒ¡®Y‰ŠÀõ–,ƒmS#E“ Nnëi(ýp /¦b$ƒA:éü2‚MÛñqëŠ^”¥¸Ðv`Ýß$‡ãŽc:÷Ã(|Ùa¨í8;Ì2¤‡ÂŒò´¢»ÍÓiŒÞt²X`§/vŠŽ€rm ÐkÁX¼«tÛ¡wáî­j’xáú6A[¨Ž=«¹²Û<0Ä)ß’…lw¥ ºžÝTÜ Dbt—cmASËTD£üÃ(ÁX3®sPžÁ÷4¼ Ë+„îó¹tªfuøF úšü®©+}êHsKd~Þ9§Ÿuw¶íŧŒ"Úœíëå!ûL{\Íûôy]}>Yïú³Å£¾ãÓrðüV©’‡®þBŽOÀÀ ‹£¾˜6ÀÞä‡7Ð3S+ò(fªÛnpv´¢É™c)-¤‚O®6U‰ÚÛ öËî; Õ†cžH»ñ»qï¼™”ç-®¶þÉÙŠøÓ꺵vá'wBHaS¸9ǧQ#·?xœÀ$®õ/Ñï‹Ý%K’dbÐû¯õbEƒ¿¸ /o.Wâ4 ì+ñï0¶²•a0ØÓc`ž&PD ô•3sA`äµ›–\֦ĭQ±"”ôãÓaÓð¿N¾âóÕØk£MÚì±>øÏœE7a¤ IÆ^+6Z3¸ á_6ƒ¥ù¯l‚”™ ãçVQjóù'Fa ýïDú3grÛL§ÁA›!Úg,ýyÓÔîø{OV;Z{v2ƒCUPv+/Vô(;wꢶCQ÷ÏøQûe0ÞxC  0ï(‚_XÙŸÞÆ‘4vq¦X9¯š¸‘"R6Þ`^4`{Ú ë“;š/ûpQÓÌä Ø9¿X$Z 6ಯ[s¶§9»SÄö±ó`c·Ck$“´}jE¡»¦•±/¤ ꃮÆïèrèL}ÜY’©Dm ñ®+SŒ¡»LòßÔÓ`à Œ!éj+L.æàÀÚÅSm”Æ´ºCöãCW_9z¯›Ó¸!zz‰¼6.ƒÛÊô$¼[×U®½‡Òçvƒ§‰ß4V²=оœ>e—œWËL;Úèòǽɋt燬!êQc§|„r¡&炞1^x,”;j–~ãAåSI?–£±c_à‹Šañ|rà­Y­Hûmýu:›£ßÛê3]•íéb?°àéüÞ¹ñ]HZ ß…w5‹ŽCÏy6Ìë¨K[>ð{Õ¦©Yµ×v 7èÍMó>)½Õ·µ¿©uNŠ{-¼H–3>ðü阦g¶ßĨEýus{5 oM«½¾½4¬æE6Ê\hÞfs$x—rvÃÙ;)®h;ZÛÂø¸§Ì%׳‡80Öþ"I7¤ü!òTÉÒ ÏáS}¯©ç]ñ­®»óX2"$-¬X*gÑ;­ Æ¢:ÂYG¹«rc x¨ÚøFQ<~àZÔÎ7;LÀWÍðMÀÜ@¿ù•ÖòÙ¶î‰ü’ß—9öz™ºfd¬Ô ŒÙªqVó{¹›fô"mb'ßvÎþ/モzóS yS+…ÞuýÃ`<‘˜˜ØäÙ-ùl2j¾¼§–[èYŸ”ƒOVN{ÍBwN7ìç>C쇬ç?J‡þ'}ßïbÜÄ/‡°Íz8æ qŒ«Ê^he²®Ç&osçÒ™oÊ{Œ¡EIã±/©Î'»mgÓTžo¥õ~ô+¤²¹˜¥¹³Xº÷›y¿J?Æ*}°A¸¼ûªì—*Çs®í*{«Œù'Äà›ªgwU›ÀÙŽ`I.æªeã²aãbªtcùÉò<ýÔ$s‹yd[ ÅÐKõkü!¦ó^;gzažRá äÏ„b$R®ì]ß%õ©|·;ûkX6§H(c:¾¹Ýúvð+ÖAôìh’öHå0lÅ‚wÿ1¸À€TµÆþÙxA—î,´(ÞûlZ°¦é™•¤ÐŸoÑ4£äí€Ò†„Ü€Ã{êçÔœ³ùO;Q˜6Ò¹Ë`…ª3LLá[«ïË"1nK0ÀÎäâBh§q¤èpâSK ©òEçŽp…þÄÿÊ ÎŽµ£t!„«ƒ|‚ss(jb†Bb“Ú©¸êXíÕ–I"5¸‚hä iQwBÙŠƒ¡ëbG `,Pª)Y©F-À,ƒ^oFQkõbµ›PLJW)C5k|› Lev,ÃipP[(µE’êI¤‹F$c¯Ö>G÷Cíe ô•òZ’w-ä cÏY±ä5/ÔëÝ¢û̾²±F>Äh´>Åj4Y¸žæ 5•1/8¡==sx°Ú Ãî×_¶ï-!¬Ÿ‚¥Uþ¥ÇãÎy.…‚?c w‹=dc¥^ •a|>ÙÙÍjѲ’t!¾j£E¾æ ¼µ˜‘̓ÃIÅo3y yŠêꇎªšô¬Ùqaµ€6vr›äi˜Ü’Ã=²§n ‡±.ŠÃÙƒVvëSSýp¿¼ )5:“ì”ïÒ[­+t¿«>îê——2šf²7]ýO¼ÂÌà ±æYí‘ m+Ža4•=—÷Ð51Z’PåÇ=”£P*  J •ІéÔ 'ü«÷É…Œn{gùt°¸T²Ë®à6a1I ìCY¨TÎyI žŠ•…œ,ºk¨½Øßò«4öfIG£'os±$CÛ‰lë`œYá©–73Ä@yʰÈfFc¤<Ýæé´ò]×­`„@gyrUjkà¸þÜÌðf€AÄ3°QÂà2"^Þâ˜ÝæiTÈÁw®îê–l°cÀ¶íYB^"Gù~”²¶ÃjŒÞµÑ]ÜK?%D ¥†« ñJxk_¼p•ö@—’ÍÛ°% ·¯{®.Ááþè¹3S +òõ".j¥,f©ÅŒÐ¢SH3#ýX4@ºKC7ÓEæ Œ>Wž¢l´:ÿòbm‡ïö…Üæžýþphh¾s["OCÞ Ð UÞo,ÈgÁ^j9ÍØ5Çã½ ŒärýSJT KRÁfP%w—ƒ°Þ ›Z)Ïy* »I-JO7M‚úæë—[¨<_ô ®–v†³¿1Êʆ-$tR`ž!°…u‰»;ôc~ÍÏ&²P ’~ÜÅpîðý²Qïu·!2i-y2É`U IB•4§Á‹¤c–²<Õ¾½ÌšÍþº ÎÏ]ŠyþÔüº*þÓè’Ï‹ŸßˆÚiã¬K¡lFúaduûm¶h86à1§n É¡S?œ†¤@ÏRgÆU¾ØÆv÷à)ߕ–tWgÕ†Üòr‰úþõ}4ë ÜʳäLع ÍVFhÏޏu¾Fi—M¨„c³pݱÿ›ÄO´„仨¡z´Fï‡p5æ{¯²©Ä¦ôÓe‡ÁFØL9é†(ĉ®óªà¸8pwœV€¯ œµA ï?†¬÷„R8Ҟȇ[/©(6y\9^¢SF©HW°—edS¿‚e£»Ô ë³Ð؃¬ö†6Ç 8xPÔ¥£˜«™Œˆ7òÂpJ☖3ð?ÖC¡Ñ®vŸ%íHgì­ñqœ‚§#Ó¢ˆ¯á­îî -îç·»±œ´0¼H«ø£!–‘VÑRü°-t·0›‘_iˆMÛ1Êí;ÉkQ?’½ŽvR^TÆÂÁR‹ ôéÂÂ}ÉóyqñP†«Ì7DÎ%§c^ }86²–Sõ…á‰LKÙŒôÇ¢$ÉyLP외b£l šZ$BÕ;™ñß§ŸD3Þ„‹û8 æEîtWÅí[Æ9©/Õ6:óÐN eQ¾/ ®íPzÞ¼8±ixŽXô›µ52³³¾÷^B=?q ­2Õ²Í,ÖDûŽ-0Óc¹N@e)¶q#ä2È ²õk·Lu¿œõu^òld†aý¸¡ÌKÎ8 «Ò%w$äù¤û»]¨þýïÒGÀ{çÌTþÕy~zú‡”t—>N/ϰ9â ßpQwÀЮ<2×pÑPA Ã?4T÷ƒ󲉲š2$ó ó ~1Bh«CËõ”'Ù¸/¬ rÚŒÛÅ| ÃÏîF0æn åt¬EN­Š 5É3¸pó73+*6Lq'ÆpZ1»†8œÂO)ä7c%Vºã–ïÐp!}_œåÅ!æÂƒÊân4‚úL,`ûcçÂÕ É”gp¤9س½‘M¬`¦b^¬T'A~çã&Æ ±VN88DžÁh‘«C ßÔãìUw7Ø19lîŠÓÍ®§—pzÙÞMâìdÚ§ïDR8j5ÀOy~ªZ lw*0ßx|*+ v»B²âÍ.…Ôê[0ƒÓ á‘ç’8æUóéÊW|ˆ¾D-7¼%šFѼ·Ü(×bÜýUœ¡NÏ3vÎX˜P7vìú"f¤¾sÚ!xƒiôÉêºÞY@…65ÙL6wI.wÎ[gJ”•·/ •Ï.U³ã~ÊÁ« ú¼fÞ/“’¤»Àyçkw" ­éªÃï3¿¿¸uÝ©í2ˆÕrW«ÛEÐ0˜Ù-ÔÅ>pƒºSZ@ù†yºèÇ¢á4Øé×O …ΉíëRtÃf¸nD¶ùÞ9ÈÙ+z¿í ô»ãGEÊNçzPS‹SjŒ½° >è.$…RŽ—“CÙ©.†HĉòB­Õà ÷[ >áaóm Õ³k¨Znâ³€©¼‹ÿ¸ìåã¡Zõ’+g^$T‚=ÁªG7Âå ˆFE(;O}^SPÝØ ´‚åñ;tý  Œð%oâK¯„‡HZÒ²ñtÇÖI¹N5Áûçl‰‚2Ðîvl”ƒ%{?>se BjÛ‰N7®%„¯C¿vb*Îfã °5´\÷Pà|Í{8ÓƒÜ$>|²ƒ;ìž¹>ïDÙynì iQ? Ñ7†‘ z;ýA’‚±Ð.&–ï˜u8AT{â¢!uÊÈQø`|'IýüÞÑŠÅø…÷ÈÚ•ÝWe§ó@ññ¤„Î)ojúÀTþµ¨ä4În؃QÅ |Ê»d^$i!ÜèyÜîœ]ÌZ gÎA(ÅDT9/’Ø-ûâ*DÄõ^ý„XÙùD„óµ Û“ ŽCYï6 äÅça8—ˆðö4îéÄÊ å´z[ÔÁm>Qe($tås[ÃT¿ÐFGcõpBe†+r-ck»Üˆr0Ú¿D?n⼉ ì”ßR~Œñ¨ˆ‚ÐB[õ=ÑûÌtç=䌈PVktY<î>XA6n2\<ï©ØoDZò‚NàµQm¼HR ·×Q¶KÌFŸ*‡\ùyøJÓcò Û{2)›á̼¨ž]ÓŸúu’…îAì…ÌŒöÆË6€ƒš$Mµs¶zmO8ø<œÛ"E—î8HºáJ[%ĸ¸$ ÇÏÂUm-ž£Õ´Ñ sp=»‹âà?°ø>Ä›_8ácèõÆ«H‚ó„úÁ7&%9Mlì¬l1‡¦yËß0gTt×õÑP¾t«okGG@Ov‹w­ïB)‹-µò²†Y†΄:áÚ”;ò ín‘B¹H òµâú8þ²a×l|6#/¨h‚ÂÝÍWêFO؃ŠY[®Ú`Z­ÀÊ¢éNï>T5˜Õ4ù%³¶hêIWøµ¦Áéû*ãú'üöIJ²v\BNgdUDGô¦É~œØ2uæ÷¾ªÉú)… õáO`¸”Ê´¨ ;ê±R¨…µ,:»ã4h4ØÑkˆc¨³Ç\?ÈÞ„È‹ëu¬@åÉ·ø³+â a£,éÎ2&¤¾?1°ã¥åP™Ž¹1¦½¾ˆ¸âE]BùF#TùTÿÄö#$/,wÿ*^J¡a DÞ LÝb {•sa¡ìIJ9ž°û[,kã^³a=„n\‹ñìCi¦,Éð`«oÓPèA¥8×&ÃÙoCƒj8 þ“OøÁµ”7ÞçÆê8ó!åôuþÄ{Wnâgâ'ïÉíò„þjž,Cíy­^¿<áŒj‚ñË5½bôÑ<q>=´æÁV¯õ8ƒ¨Çtê¨=xåhàƒ/¤ÿ˜íÑŽà Üù›ÇÁªæÖêlªäYØ›"å§!_ótŒqtLÖÐ/S›*OÌÈó¢˜ý@_½`ܿ戂Rþyšlj¥ð‚Íé¹à”Õ…!»é~8 €_®wÁ ™Ú4bŽ’P¾aŽ÷Ä(Íøÿl[bô& Fß»·.BaôÕp™NCVߎ,ñÉm2œ#0¶±ã ¾…"ÃéÁN¿(ͳC¹ûòˆÏ¹·^6/§OoÌ+æÑŒpͶÜlåz+‡§Š Ü¡X¡”ï1o¾ÜäÂ0ø¿Ãsh*8CTÕëk°ðÂÙ{h™ÚÁ”ï–cÉ1!· ÒÊMër¢lì §Í_7¶úÎ"•&C|€¿¨³QëŸ î`©OÈP,ñóP÷€àî)e'vÒÆp{ È(޶ÊAùáÜÎḼŸ¢ÍeÏ8°Ï«÷8½qÕö°–©¤ïô7>_YΡ…b'Ó$ïdÏh­ÎÒª’¼iö¦^ù ´ÂÕhRv:ËESŠ_3t“Eçz+¹óVÑTWz_´èѺi«—²îêÏaø²qúþîóR9h°ëÜQ¾i«[íRE´‡P”@lÌ‹aÓs$Èo^N}ƒ$` ÿMÐÊc 0&£¯ƒ&lêío={@Ê[e€g@I7¡5NüLy³¤€!nƒ@…êÝd”3Ú³Y4 ¼qò&I}%È4„€ccIÚlå³´ Õz·¤#o>‹¡=å¦ ³V…_J0¹›ìl0fèµ»G|ZÐû Ûym²Te}G°¤È”£ £D™œ|ÇÈ ºg­°³óCŒN¾Pú±pÆÜÛ›WIÀvˆ•”ÒA]¼`h•{¢ýÜù!…õvÿË%ëóg¯ºÚ7ù¬{ÿ'xH ÅXÁžùq¢•ö™x Ù,³c­4ƒHr2€?ì<%¤ Á†Âú`Ág1>c]&ÏB[Z¡MÓ{\ïj–Íˤ:)[ØzU¼„^ ”´Ã|î93ûö¸Õ󮢜ÃÄ¿{‰ÞÁ¶±:eã”2£÷þZÈ÷…2õkˆ—iùŒøð=£¾UÔg<6è<ësL—õbI:[g·™ý¢Jš ‘d|~‹Ç[ž>J}hII³Væ²ÉÊ-î:&í¶½ÒìP س$4ÍbýÉú[^Ò%$Ä­M¡2ÊÍf°alÛCH”oÊw7õ @`Üõ‡Í§çáv¢h­^6¨'”¼m*ü U¡¯™Øô:.ì–Ĥ ”æå2ʦ Âp“òFvŠùÞ´xÛ²|:†)ï{Ú!’nºÜä¢ì¬û 0öSAˆ Í+Æ ¶sÞI7ñFÈr9‡Ò ËŽ%í7PwÉG÷øV2ææ“7.£U^Õ'æÃ_“iåf%«PÀاÀö±Š•Ï.dÜ o’2 ÿŸŠ|QGÇh÷÷Ÿ‚xêó\³û:2@ËÍ-Ð2o’œToB“ožÖMe”»ÿðÍuíG fJº å ±‰ôèÀ>µ‚CÁŽO@Ò&à÷®a¨Noõò5o“$½§ea¬¶•ú]Q¾ñëöÎ g®mële6\U~ƒÏ]&­ð&ý÷²ÃÛI]“Ì–<,Õî`^A|tZ[ë-º9¿ç;ðõýõþ£þx'Üß¿Ytßõ-‰,©žÊ+ÎlÉ»Wq?Ú¯_~KÛO¢wî×)TFqÒ–ÿáέœå çïô‡ªTVjúkg4ŠSêqÿSöп—ß~*òî$tZ„šþÌÁWúÃïœö×õËý}eJò8Ç;ÖŸ«ËdE_Ó…†þ|ZÆ(×/Y’-ä D9r^Û~ØÑ¶~&ç¸Ð+ ¹zsÐÐC6¡3_¿ü¶þé¾€á"Íw$:T‡»°ÂÔD3´ì_Üe`õ¤¥´KÐ@k>è£yz^ÀÙS™<œ EœòÐúÖ S¾RK´S*¿oDãQL… ²UÓÕÅ*'&G_…ypß,“¯õ©1ý4'¨iæ|>ßø©ÄK9³ÚzÿJïXÓŸšèKóZ]>J{«ôâ,ãŠVÒ-‚²N–Qo§—° }7£«’1-¾Ïé®é¦^û¿t©ÙS½Šcl,¿®ìvý’}æÀäÅ/ÆõAØ ¢ÿ îÏ1{+f¯uš§ ùAyÕÄ.ÝÁú8\çä¾L¼°Ñ9ë³ÿ&BySuJ´“ÂÎÞ1ÃÌÀóºEÆŒŠ¼ºiÈØ< FuÇQœN§Lc:¾dºë(7_fúÆ0вGsvž'o©¾Ðå÷ÎÝ¥?„ŸcËõùþØqÎùÌÔÝê´…á6v°Yèf)ÚžY¬òAï¶\:M<ˆ'mî”&wW–,éAŠ¤È”ï–Wð1ûV­D›'~{ìîõ_0±½m8¸u&Y@*ŠlÇ”ÿ’ô?ÁeÓ&³ï‘ÚÅD)49Ê= ÿ41‚Blí@eC=ï3n4’y831dOdËŒÆToØ„@—ôß–¢œ¥Rw+瘂ñTyåhgÙöÇùÔ/À›¶GnL™'×é×rêhQ@”ÁB5HŠ‹ùòE@—t€Ocû¶‰½°ÕDæá¸^3¾wAÀü7÷iÅ&4Gh•³‹¯ëÕ¥ŠÅטN“ì=ìnØüâ+mÁF‰ÚN/{êBBδïmÖ‹T „Ò”Ênc`põ)9Çò­NŒÁ4´ÁFþÒƒšK$‹ÇåËŠèÇÇÿ‰ÜÕvâˆhƒ£Lá:MúÓ`L)aJùÔ«\’L¿Z>Cî7ÝB?tèxV2äy£8¿¬'˜À¯ÛÑi}ZX$ø°¡gÿˆ#Ó8;6ûKäÃ5 ÓÆÓ Ø»ÜÝ:ål£g]×pðÔ È0ó×P¸b7Êý¿±[±³?á¡ôÑÎÞá-/¸£$ߪësÞ%ŽI*wºCKÝž–6Ôê÷QúeÇÕ¶^mì_Sö~76ŠÍ ª¤(çp™]öú°ï•†Œr7Ÿ¹enÕ6©8FWïd»@˜$׉»Ëî‘1ˆÕë;¬>¨$÷*ñÛû­`¡Ü´³+³½uES€çôd ï9]ÏÁŸB›sF™V()ò€ MÕ'9ѽ"D¶VÀ±æùg…îšnÚÆM13+£Yq#*,fùdydR3P8.!‡êðÂÙ¾~žÍ¼›á[ºðØ&Mßám(;(„àƒx‹>!ÂÃËqÝI¸Ë¿ýóØ@Àþ¡-Òy“]â5Ckë ï=ÔÛ¥NÇöŽãõ–~§e0uÛ Ñn‡?>ÿ°3â[®‰Çë™BàÛx×¹2õì6àvá%:“L¸ýêÿø­ÀAs¸°çAq´×e®½ò¬âÏÞp5ѯ܂µÉ`gqi/Ê`JŒKŠLùnyE×I3y„Œ1CFœùaÈ2äÔêÃYÛÓEF (é&”¡vŽ€Ÿ†ÃÑòt £{¸ÂN¯¹gCûfÀ˜ÆV¤§‘n¼IP¤è%…K:[üÅIx@pʈ–Ó=´¬:¿‘wK;‡g¤´IÛ¸3øžqf™dªé¨Á¹ Aãß=Ž&g3PhÈšt’/¶nQXEf«È²cF_9¿"4KÃÿɤétèÛ Á#dHr±¥ e 8”ég²7¨GßãZzQÃÙÊõœùÖW0iÄ£Àɶ” žìšyïó¡Þêóà¼4ðÐ9ÐH{ 裰ۈ­‚Õý“êB–!±ºiö8­ð&I)CÆÜ¼œ|yMo£¹^”7ò&T¥_²v: ƒãÖY?smôÅFüáMýÓhCÞT7u¡È²%9Uvjòp´ šIuò•CmÚ„˜NŸfQÞ<¦ãµ 9mOkKD×ÕÉFbÑÇû~Mîµ]:çY.ú}’öÍDƒZšpµdL¦‡rfK>:Ó'w·sÌ-…*HFŒC^nmLCn¼²ÌéªðÇæåÄò<¦KÛã’úÜ ãØœ×ÆÊcl¹èoªÎ-ÁY†Â+ì"¬€cSÛdÊ¿ú–#ÉbÆç;Â7ŒC¸fjë”AÈvÏÉÄ øåbuòüèÀ¼iÊ ÚØGóÝj^YÓarA‘nL_.w‚ F“¤oàD(,MkÍTÒ¿•›¾—ïñQ2Τq^UʰÎï$zÆ?ÀÕ2¶ ùRlÅÕ ûF*sÍîkPã2‚hå‡É`Ár|Ã(ôÍU¼L^œ”Þï[;¦^‹RÁ#ñàMWLƒ‰¿–È`ç8ÈÊMk» N‹4¦Ý‰=V?¬teN sß¹Iß ÊAèÆ—¥¨¶Ž:°å cÙ.óÇõ~¼÷¦>\¹•¢e˜Y›¼Ùµ]Jep Ê3ê˵?Ó=ÁÐ8—;i]g(÷Åßc‘÷ ~t×±ÞÛÐTòe€<À<©X®Ëdcjƒ“9Ûfk–zËø>á6„O‡-\áàŒuŸeså› ÷n„ÅJ}wšÙƒjé®&OŒZx ­7sR83³$”Tmìæ˜ÀŸüÈÁµ4d À¸*^ /j K«EÉž%¸Ñ òîðÏ)_Ê\†zÜÚ0¬yR³VVÊO܃hµ0î&*fÚqïV ›Ê\gÜèŠ{&Šè¿qÍÔ½|Yj†ìÚ&åà²N¾@˜ªx÷‚øí«'˰üuôecn}p2S\uû§º?mïáì02\äl—#§IÍ ÛÄ¥ÇÄ?ì¨/:¸ëÚÆý¥*>sýòxp³i3lñØšO8œ¨OŠ-·SFëÀ䯿²l^yýñ=Ð@Ͷ†V¸,O÷ò}ÔåãT<ÖØfç ÉJjûLà¦Øp¤è3åºStr»z³&ZãyÔX0Ö/ˆ + 7HÖƒ»Œ¹7¡8- «éû¤áô‡•:ªõo»ñC}0¥¿´V¨^ì¸Ö³c‘îOÿ¼a\÷ûîäE ‚G‚÷WãRo¸Ë[R‘ÚÅÛ@Yž«ò ô×véªÃƒ t†²¸RÊ—qß º*·Ú_KP"àÕEex»IáÃM¡]¨4C1’·š\ÒÛhz%Ä}@1?U¥¬Ž—BMª§ëØ8p]ï55Ò-ã7¿ƒQ•Ý¢¼{Y;©Ø¥?Ãzveq ×1AÇæ¸Ë,7wÆœùìPK+N¹ïÉ[èM^™¡xh?(_ÁX#uãBq¦ݨw Š PA‰¦)WNJ+õF«}½?w Ì×4 ?]XÓi(5ÈÆíR ’²ºæËÉNzÊRqEö„„ÓLœMlÅpÂí숼Ïìš/'ºdm§Œ€A¾&ÎŒÝök…‘øÎv¦ñƒ…á.3R×¹ ›Úo˜†ÃtËÞD<›"|a¢}ùÆï=¹ ÙÅÀ{xA:Ò1j;ø¿0Zž°¦™ ³ ½&¦|á|I±©bk£ÊŠ´Í¸žØïS*ÚhUÙnñsTà`ÓÚ ÎÆ“l`äeÙÚ]¹á“"÷Ó·õD”‹]¼u sA>R\³FvMÉd‘d”]ñåã8<Š0Íî¼2\¦W”·ÞzéÖ\€¾÷Ä0ÎdS †'4¥s7í®‹]-¶©½´_Q¢yP¾pIØ7n¾ýqP4A0WÂå'[aÇ/;®§ÍO‡wø3ê‰ކ¶ËpÔÁ óå0µ9sPïŽ×„ÙÎÀãÜ€&ˆXo¾ÜLÑò · ªW»ËÇö}…7Ú0» w)+7㊃+Р¢8¨1=Á%`Y¡õ‚6ñ!¬TÀ6Kô.3ÈRZÙ`Øûa7.äj "Ò‡Ê.6 –i™t¶:˨w¼‹oL$Ó‹ZRnœ' ycÔ> šHpíÖÁû Yíc§OXL½º'—¤:Ldqè¨#A¸ØÀ *²I¾ Ð6³\±©nÜÅBB®ì j÷(Œ{—]{ûeß<ÿ"A×Uóåt7ö‘žü"ܢ𠻏»¿ô×ÿÄ…M±›ÿ¨EâéЪ¿_G7ÆÚÝéɃ}O“FH^œ]ó½„^~•Ò¸Ïè`M7Ä]ðˆóÄsWÌìê¿“útRV HJç/üÃŽxàhš³?0G\ò`SmЕUt}>H÷𥀠©Ü7º¡wÕˆläZ°h žhBBŠ1’£Ê¿w‘·6"´›h I°‰Ô½ezuÖ´DAöüHË2*z\oWAgYÑ|«Í„“”åãˆGIŒ1dcÓô}æ ùšˆNÀä_”¯àȃžNòø…„–MÆMîwZ.#èÄXý&üå}.þ”ú“9­¬V£‰Ž€(›’ v À¿Ïn9ãcØ·Tÿöofî~µß¦=ÎÁ§Í—n(š“ þ ô@”tS¼÷ï7/ƒS0z #m­¾:¢> l¼–¹º9óŠUŽ„Êâ\ ˜ùy,¹T^<ä…‡ I¡|Y¬¤v)ô_ŠnùÁBO³ü2”[´¾ÿrãéÐw(…7b92µ ¬œ9{;Èl–å·åæè•V)ã;OÛH:?ù¹Œy‡›í„ÿÆòKúeì”/"]ô¨,V_x¯/¼WL9‹Õ£y'âL¢Û ¿Ù8q[>ƒàöô¥É‹'³Æ~pë¬Øé2@y¥æ$k1ª×0Ñ¿Q + .ɨÉëü4žýÄ hl5nsE€aì¢^QI´²â1lñ‹—ºIYŸœ¯§ÃÐÿeŒ™uåa Å ŽÁÆ}y’Ôf\sòYø= ™[0:c¶z¦Î¼úDYyHbPWÍYµ$Õ66@M¬Ú ´‘å8%t4¿P^ÎLƒÃظ‡­Í\ve‹\˜TnMhýÅôÊÓ[c}˜ž”‡Æ‡7nVìDƒ½/á¤G ¶ixÈbF +åLzg,,ÓƒÑîtö½.?—ÚND¤0šs»§¬l¦,zŸyäžïgÇ\ÆØ½W'üž0+Ãs ç+œw¾ªVYبv£&}p‹opf…cãÊ$û)«qïâ¢DD.p]‹ü¡2ÔHq¥•s®^¶¶ ð¾SIŽ2œÎr·Ëfj3-\–‡•òäá¦v6Œï‚p=:pØ)PXV, Ë÷·i°Çu—Ï.Éx˜s†onN’t ÂiÖó9:xåîlìî\i< rº-ËÃv^òšûçô6ýín{žÆ#íć=ì2žÆ«ÿ}fþÅÍÌrR´úå"\Æt—Rý¸r³Pk¼ŒÀhû,³£åø²Bc|*gp°ê™üxm†I'ç5•c(Ôz²Jò%”…Ã6¶/…AÙDƒM±Cž/(Sv妴Hb'L3åL:O²"'ÓÝÕá·6ªm÷Œ;ðRÞ™J•FúÃT+[†Dš|é—c%?n naì36ŠIùÛëf¾Òêàä8«ª— Xܱ“˜(%Cÿ ÎæÖzÂEæ¯$vê­šrS•²*œ¯¡ðc‹ý¨2%€–&dº,™»à•Pø$Cõ\hp Úwã5áü´uéþÃfr½‚ü“ËRÏF+«ILßڔߵ-ƫ̊2 þ®—B«9+ ™ÏâÇ™Áj´f»n²?ÍøedyØq¹É„¯Jw–#U«SÏ ÿ6+´Õš”d© K …,î]ʵ{Ý*}0ïFøY’ɱeþ¥ýȬÈË9#ËÁË §-)H°CÅWÞÄ‚"neyZLïp笧ûÈN7ë›dl Í}“ZÇÆMéÌÀÔ±ß7®ÍÈ;þÎIa¡lê~@jIªmwÅj™§l†ÉWX~` ¶þ6Ú‘a¥sUàî]\åë*e ʸ"ÅI…Ò—Ûƒ°öîp!\màæw[Áïaðel!¥×â06Ðɽ+¬kf%IhÛ8 å+Ù]sÂOÔü•”Yé09ŸßM>ÛÏ9vg)še§¾)0#Ë.B›©, ¡”Aµ¬¥~å.C£8ÈuçÄM0È*:õò¢OiwõËôí"q èŽAeáÒ9ËŒfk/,+¾¹Mà²x4ÓîXÛDe„Aa½¦•Ë)ãRÓiÖ?F Žòq„;8gYµ?áå•§/ij1Ó&`¨Ü²ª" µD$ê’XÑ¿«LMÜ€gZyZ5Ë1%Ýx–ó¡ZTpç (9«ú¾/‹Býò( ªÌôâlPÀÿEø2á`J®ãXŠ>LÌW\»0Û\99€û> ²nv-¨Ï¸D›r–Õ¦Î΂¤eŽ’éÇ´Ðú ¬®;l¨p —À—ÂX¶ QJ;bW™£^ÆœF7áñT†Ñj=©s©}Ì í¦­ÑPÄwPRüÊ:AŠÐ‚hÝ994À¹¿œÚ]Zq4ñöê‹“àã¥æRíܾ„¨;Å…Ž"K`Æc«Ù,çqVÊ÷ S´ŒWaY‚(Oî{àx ²‡‰õ쎿v©íØ£KŽº|§± £5£amd¿ýÃIÈ å }9îø+ÖÌûìbKÜ |— ·Òü9ð ö·¬ÁõØž|Ɔ¾OŽÑûÑh¯eP™¯FÅÆè_.ì€ÈA+›z/ᤠ…ÖÙÀ½{&|`„®DLÆI“9|¹bî©í'%ç³+mŒdù¸reZØB3.U¦4AÊjìõV)ÃÀ#YãQpçÞ9Á4üÇZ6–nÄŸIÏ#e‘#‡²*þá M©.Ì诺t.løæÞX½@©'F3 †Åq:c£¶_®SfÃ3à2°,ÓÕÏÍŸ4&Z;Û²Qgã~ÊP„üsR–÷5qÖ Ü°ƒŽÆ]a¨2%WnF# ìµ(arÊ <уω ˆCžõ©É™—¡æÍmÆFMdÀ´­gžÞXÿûTVF£h? ͺwÆr‹Ee®þÁ4Œj{7çÎɰ±Ý‚ MGD‡."ÜÜÊ,}zç;ï¯ë5ÿGÖ¹e7Îã@ø}ööÏ` ±Ð¦HI%ͬ~Â@(3çt³¾¯¢®–ë“wã+Yqÿ¦¥ãät%Dz˜£¤2L¸˜OU;÷‘.®Ÿ ÄcrЛä 4‚q Wʘ„â—tÕ ‚ÒÓ5 ¥’])-Âá`™ˆÇ¨ÜruBqGχ¦Ðõ$‹®™›g7y¿åÎd#²9:©¾8w”+W•”ýD×øfzðv¥´SÎû[„N {7ž?Tù Åùð|rö wžæí·64õi)ÑÃ>ÅEÀŽK ½° b—†ìúq%Ǽ Šå[uÝ^ÜTÌŽ“WœÛ(Îè€å Ê´ ¸*î*)©žo®ËK9oøÀj“rªvkøƒRRHåË ÙrâýH #â°¬$Ýé“l಩ì÷i—g•¦”,r²ªOÞºaÒšA/*Ùõj/¥bzÙrUò/E`Ä!™f¿-îÝ9Ôöàa"©/89»imÁ^Nã8ÄÀ`Á–ŠBÉ u…ë\ m%§qw˜L÷Øê‚o%cÃÄúºjVí¥4ßw®kîÓ­SÞ;Ý"2å··±D@!› p¾(W%H£'+¸`&@XŠUõªoFƒŸ”ôúÅ ♡õPŒoG_¼C«QI3JÝMqäz3îü:Ê úÍ”ôÁµN¯vP%`ÎâJÙ vzë9;îLñ7¢à”ÐÌåiÝè±T5å]Õ=ö}ãù@ú¬}T2á×i$Ûiç{ð7;G‰Öƒ¢À¨ÔLW>+vÂòJ„s;Ãèµë¯Ü;ièIä”»Aç{ÎRòÂOv,5hÛLËv”¼W¡»ÑÎý•ýà“!Mšª<½æMð²¨H%%¾«I*]­¥•d'xýÃÙj×몒éÆZhÚ“::èH8øàÉ\5šMxÈy5†y!A#s>®ŠÌ¿ó?æÚ4sCü‘J™=üE¡ê¥8#­šZ𔦊5+RTTeƒ‰Ÿ‹Ÿ”·Îm¡ì¤uÒØ…2ðŠìA…ù‚”^ñÖÔîì¢u;&Y)IfJÎEó]¯ŠngÛ߸÷}Ò7O÷¦cJ%9gø›³ÉI­ßð$Ïèåí&±IU¼ñôãoÇvÌç`3ŸŒt.Ë”21ˆ”,ÛJ7”Öo.eJ^ØœÚiµü‰;Fץ̈ùÏ`…ñ„máÐr8 §Ééº\ŸÒ~ÄÝ P®6©È>sJ—„ ašyŒ+ÿ:ËOJéìÚš‘l80ÊHpRMß!Àå§«å'k² ™ dŸ¦wJXeå1ÿÓ#¸B0Õ4œ°Ë(Ÿ¦Š½§ð>SI?Ë7pu¬Ã¨;|cÆX:7õ?©(V.É ªíëÔÈvCJ0‰ºöŒׄy*…ž”¡ëø•HEwã²mÔ$ÿ„¶¹}Ï,›ºJmê –°èCêàj’¯n4 XɪI#ú¥Pò-·n¤#*¤ižÁ2ÿO¸¶×OxÖÚ)i*ítè d3ìÃà›0œ4åjÚÚ‚¼Œä§Aë «ÂI¯zÁy¦˜Âá+å¾£]ìñÎ ÒX¸Æ`Ï‘FM4èѲ a³0Wç³üÑlWœòÛ±è\Ôƒdsîà Û~,;ª†É+®¥nÝ$ ƒ[B²Z•M,´]'ôCüÑw‰1·a½ÐfuÂ&v¶¾Â` Âr˜RïìͱEÕ§äíáçþ\T@;LÒ0ÀÀÝ„M­Ÿ«Í¶Ê6ÓÊØU®dËe&wƒjÚÙc2ü\ÑRƒ†"ÏöýH2©¨\ zê¹ÿ÷™U2^ãW8%tÂUúÁ•q¿ š‹õúÁ½óÔ™\­IZ ÈyÎÿ´—êŠàNû”'eÈøi÷y¨ýK]ºñ<€‰’ТvßGÉíeS*H¬ÅÙI™ ;¡ÒC üx:¾ø þ$ >ë/G–ƒ<¨Cen#'í¼SľÎw¹{„—CÙÅ=Øj…בhߟ ùz™à4¨Ô‘ÅOpšN6ÊÐ̃ÎÏyŸPf¼l/iÈF/xWÊ^ ºfH~Hv®]¡‚Ó&tLIH¸ª4Í‘ütMiåD™éšÍççgš‘2mVÖ´w@ã™ÕNp£,îšrvÕ1à¶‚öw@;°«IAV.ò®Ê Ò=Š3½:TÂ(€¨Ö¹áý)ÓÌäEûN瞉 9(ÓhøB¡¹M¦é-Iðn¤@Õ—’1öRÚXÉÚ „w£ýD‰‰«Œ/Ðû¶Ó|bËSê Âç{W“TSzBOÚ€i}Q}0bäj²Që W¢5H" &-fÀÁ´;¼$¥Òg«)í„&y1 ï’©Þp(?+ÑLJ̈́n -Ú^’º öqc+„ 6(ažŒT/ýPŸä䬊Ÿ;b,FÑ,dÚN‡¾ØôBtš(ï0®OXÓ†'Ƀ»b/ ÛQÞFõj‡"›diBÎ}A@¿&û)ÝïQŠ«Ñpņ´0Ýã¾±%ý¥DÇëaÑ·¤ÒË*Í?d©)Ͱ 7§r9^»V»ž’QÏ\Qm¸hWÈNò‰Ÿör‹p QÞ9ÝM¾•â{1ަÑìÂÌmÙë4z¡™géVö=ñkªÍµÆÝÙ`žg&:¾²&òÍFv…›ŠìWèùhkZÒ~ùDióÐNì±ì„–@WC¹~T]ò7ŠÔR^Œ¦:’É4ê¬um¹fNÉbZH;u6âL‹d ü`¬Ôåoîñë4\u£¤ýÉuz ­HI²¹ÙG{ó»E.Þù¾ :u—K»š›7Unö)ÝÊF–´iîù Á…åù(½_Ó3’ÜMÈ5-HÃ1ó #}„ÑîÂÜkÅö‹@•4‚åx<9D³÷67xôÕž †ÀÉšvrÊ\ôRwÙ„»,FÙéjS‘ÎÚ†°ã«ö»úbâ[N¾™¢ î¨&‡Î–%ÁȺ‘_1ºc¥.y¥$ûogcÞ5åô>Ð)›ßâ¼ F #›+¥ 4”qybø´·mÀd²h;º7•ËöR².ƒõqâ؆¶2~÷ÀÕ"ã6Ê 7#ŒÃÐêöµDïfÔíp͘[sJù†º|áúo'›û;Q ¾wxo,Zº7ƒÕXqc\NòîÂFssXw2ÅQyý¨Ò¥™\bÁèJm¤‚ßi@oÆYÙBëL[pË9ɶ€R`Å:Á¶øø1ÿ é×¾Ri Õþ+ +”ìŠ.=xæíÿ\Üi˜H;‚pœR—(c/Dq~RûÏ¥ˆ¾-=uP‹1 0šñ–ÍïeÙÆÝ%˜Š–+©ñ eÕ§lí\Ôƒ<ßµd´g¯*pÊ ½Ü•ñIdªTúŽÒY!Žq0šÒÓ샞 šï¦U_Ïk Ân$[S ƒß2ZSòŸ ^…}.þ’ÆF¥öIO$[©€6¬º6˜çQ’«PʃÊ$®¤V傤n6‡"»c;Œ¢œO·;ÙUݤÒ,4 •“ë^NC4½0¢}z?aÙ1 §¹€uë;XNÛ,„°¸B ²‚/®ÐDw%îî¶NRõ+gœšÔ$nǺê‰,0 36%¢'M2Nï¦$é×—±l0íTé&+Pº¡u‰Sød…R]…R j˜i‡#®Ô-¿rkFòw ÉCêØ*}t­d|ÑmMu˜àf€ñmìèùG)ž19¥œ£Uœ¿óÕÞe_ä±êõÛ!™;I~x_z®‘x^ŒÂÆ`|B1…•gÅOì³@L®B)ØÓÎru´° c/5¡;u^,ÙPö²)ž²³S*F?©\§šo >h¼7Å\cÙ‚¤[¾¿A¬ŸE‚›q±•ì$Í–sŽ¿äðØÝÈÎÁÙ²ÂJÉá¿o™:CY’6Áèêê£Ú¼m”6L¸>Pɸdêw'[˜¿#…Ý…²ó{¥…Œ9]Å·…¶ûÇKõÕä^e Æay1ñ͵(ex}¾¹ºÝ¸yð &”ã»cp¢sìz´ ÕR©AØ.·›Ïý˜ÁÌ{pþþýfb…‡—’#PnhÝEàÿÚÆ‹OiE e‰¥îAÒúÍ|{Zd[xR7ÓïÌwó«N™#Òλ-5ÊvgJá¬Åð­‡)W …²lÁ«Œ$‰ Olq’L)½›áEB9x lçbï {œ[Á%‹sÑ7¿.ÌÁ›•ÈûH(â\Ãhp[˜Ø!J=WFw‰w½¶ ǨÞ[ÀCN}l†å†±Âc÷¶[ÒaRpgÇÒº#F ¨¯r ÃÎ^dP.OÎf¶ÄN˜Ê…dáÖ6܉o†)Œ·ÞÙA6§ò.ÂM‹Øk÷±láîìsoê7Àv ÛÈâ|3[ðj‡ëéñPlÈʾa´nðÍ Ø­´k ÝVˆ’b¥sažÂx?ا%—LÈ\ÜôÐÌøZÓ ;Ía¦·½Ü¶SI|2¸õêuqÌ, añâ~\Ôš9=9aÃÎ=,Ÿt n‹Z¿aÄ1Ž…i„Á2¸õx~&)yUo½:ã+ h…¤ÅèʸÉ/îa¢<öàÕhô(í ì7Œ"·N‡B*Ý`l\eÿeX]É|¡5å]êo·š-Þl¥sÁÚöÂQ Ï{p”{A\ƒï%¼piÜ|ëa"Þq5³˜8œ/ÅÀ¤•ˆ¢E núi¹(3Çx`.{¥ÎwŽ ÙÎuæïËæM[k¯¸¦LÔ¹:UŒÍuŒ‡Ñð²’ÙáyQ ^-HçJÉùXp‹É¦ˆ‡Çªñvã§P^¸QZÜúÂov¼‚nÀï :{4 m7¤d¦ÙãÈpœ¥aZÕUWÙœ"³Ûßð†iç/×Ýy;8`Ý«;l4V︆* ¶n`7‚½bISßýgOƱ×·[†Ÿ[ÎA®Óé˜Á™ômãœY=¾eƒÚ\eÆ‚O:8‘†ýêàýf¤äådb÷ëi›–@«Ò!þbý`ôà®4iêÆ†…U>]es²Û>aÙqÊÕе¡·/g4ƒñ[Ëd»ãPâ­ãƒ‡¹ÚJ¦´Ì•>®ŠJîßÿ Ð)j*¯!„¤Î÷øpj¼H(p3,!ÇÌ‹"Ç<çáÔ)-d¥x‡}¸«-WòóΔî.ÖÉ-ÄfGÂ9ñn°Ôæ¥GAL½|º\Ö¨o³V°l¿ ¥»õ¾¤o‡R¢¹?Þ¹ÞMgw9HZw¶·l»‹xDù)h£Ë|ac| «ªìì ”n˜Æ2Û¢ët¼5àÕ Trî«;H;û £bÜGô¼¹xfζ‹°|Ãê£NcŸyÂ^^¹Skk¡«”,ûפ6¿êníXKÚ‡CCÙ‰W¼Èœ[àå,ÛJ†¥³ÓÚBG"&G;„ƒ™²aË¿J’ÔBû2_4”·Cö ,–™dÁ'eG=ð%ªSZÈFã¼ÑîØ?@4Ú¶ƒô\¶4³ÛÁ( .o‹šD¿ãhèÐ –Dy¡lÔoÆ+‹謦°Sbg Ž2';X>^GD)ø^-¸@{'ýªq¿«o–_–ƒö…ñ\|pçÄ‹d[x/0Œd;‚ìšÁÞO7¶ÍÜ-Z2ǫدB÷¶|IzÉ…{|cd„ñ.F üzèïdòþÛKÉH%s°¯nœ`eç0(ÆÊùßE߯¥°iÜí¼»o¾¹äæŒëÂp”îÞŽˆ›ÜuBŒ7Ýß]d¦«ú™nžq£`±P‡5¤Ž1Eig`ÄÂx°iX¯œ¸ó…òÝmw%Áã¦Á÷:ubRBs×’v'Q7Û/—Ýa€g`fÙ‚(Ý9åZ_øÍŽhma”Ž[°¯|â´bØ)ÂoŒVÍE<¢Ø—y¦ñ>~ŸËZðÐÂ,”Ã`­¨yS~Ù.úľ»Ý)6‰"Ci¼)9±ƒlA‘í\•}?Æ‹7·;ànX…œ¹vÁWRÝê”Ô%¯kº¿8›*¢'Ài0ÒÙœJvòÙÂc ªÙ@6…ñô“{-ØÛœ0ʺ¾®m,ÏÌWËðuÌ3—dßP·’ÁR²+%'iÇ Ó€Ác‹ªä|•hœäÅÆÑ{ǰ8ö )yq©†øû"å8sÁÅøî‡QiÒ£}× 9Ê]Èš>*5q#ýPÐþ9ó³JV~_iÊE]å¡ÐL¶b ¹x¬|è‹Æßשãx–ô!\Á‡¦i¨ÔõËÆxÐÓLr(I²1>c^@2/pîί¢ï¦ü+Rd_¾4¾ÚbG<=òû±0)àOГj¯¾ÂÎRí–T²/ž-y¥íàŽH-c÷Š"WU‡q2£îh;Pº¡´óîú‚n¾¹4ÂÔàÄ­…±=ö»ìRªt3OzÛ|&ÚÙ¨|&­(i@1?FO¨7$¡ÈDÃX« ]UžÇx¿q Fón†á‹`jºkç $ @;LÔÇÊy'šélÒ!(Ôºl/,®ç›ì®$“{gåÇÎp¬vÙ (WCˆ É” ØT6@Ò”U¤}•Œ{uf; ÎHfxAu„¨Á 䑼":ä Óš‰l_Ì»á€vM²F€Ç ]§ã@ãŸBy´3ø›w3³—©Ö2:{Èn"}8}³Qò–øÁ•ÒÂryX¶+ßgÆ4IwJTŠ.cÜXó›}¸KÁ‚oÇt ¢EwûaóÀ4Üt£¼9tׄ õGò‚T"öh‘]1Kg£Å8# 0øSã¥2šüÔ”T$» ¡#aåù€´š4MdZ y³áàd§ J“Žž¹X¡ùð.õhÈŸÏÅOûQyL}"Á@ŸD™Å]®@J¿Lfesèìôm4 œMžòÑ [çªád¥t€ò¸ò¾@úXœ7M†úæ%OÆ>æè«Éÿ„&0›ñ9•”¬<&ÁÿX¸“fì’ Jf%NZäI®¨v:£g5»•¸È"— ¤DìQÛ ±L©meƒ¢ªß£Ú1ñ¥£Lå=å¤R]÷râÌ F['¢n–az@hÞ©;u6ÂAXÞ j¦BÙ Eä¹euÊ2Öt‡H~ºâèì<œV¨ËÎÎó ìupáèr* Ì?x†Ò“ ~ì-ë±à4–kÝQc'åM)#]î©"Úmö‰Á´t+ªgˆyÂ…otaj1‘Æ^„MÒ0ÀzŠ©7ÿ×vâ÷¡)¥D¥©Áw8Ðl“d ò⸿º<ô¥*äêÝy}ŸApŽì¼@¶Eí ìŽvžËŽþ4ÆÝyc+/Œ ¾hp= ®ËîÎC1ž §ÅÂQúå[¿[o'­Å×,8ˆÍïæ[cñx¤#¬geS<áìÙÓ±å„>#Ô–‘—¨7ކbV»Çì¾ëÝ ²»¡lוý`X`¡$+ÉÆ…ÐDSF |™H~á°¡xÒBÿm\?Ü4Âé ÁxšL|«tÇ ë§]¾#± `2ÁÒu§>œ¾Ù(y»¸â—4Ë®&ø¬`Œº ,ª¡¼<úEÕq@œ`K¥ ®í`Îà'=y=R˜E¥‚M¿ÆOB`Ù„²Wèº* Nãî°œêe[€¹vÇ{PÁ·ªÑÝpŪY¨—‘]N/ØØÔÉËŸ$yWT³±\T…[º+‘I5Å"YÅíZþS{ù*ø¨Ý QGIýÒ0”v.êVAúPj'T·³Ð¼Wé lx£½róbŒÚ‘¢…r˸°sÖŠøCî)H¬c:1A“ Ý ,œ=¼*XVùšÂHRRm³(7éjç0願™ç5ùÅ™¹*aŸ&tÈæÚéÔÙéû]B\¡«$îJÒƒŽc ¨x(7ÝØ †ãex,DÓÆ~?¬5$Ú^ÜQºò‹+wˆ;+ðq%èÁ„µÚV2[£i¼ÐkÑûÁ#Œä'̼ãšúàÔ¹ìV¶{Ósª4 v!Û®„tvÚ¨Ó¦7Ô°E:‡ÁÖ´Œr/ÇiãÒßþ“^–ìH“¦Ü "íšviJc¦ÞUªÉ^N£•³òžÔÙð(ų1ñ‹ŸF/ÉF‰²ŰsX̧ã=-¦¡€ŽådC\YJ[ÑR»á€®!¬±I‚~ Ÿ•Meƒ&V‘®¹%›àÄc˜ ÐK`7“=¯“·‚7o:DÌš„a´˜ÆÍäÈ ´ñ&vñ¬³ô)åƒ6á ÖKÁ ÙÀ'=3w3™¯ª#ÔK0PÕSzêA'e3WSØèá°³S5[â@Ûhñ©Ò –“yWJ›i~´Ó¡\‰ %VÀ ƒÖ°qÍB9PèÎÖµÞ÷ý´|K;£VõaǸ4a¤ÉewÅJS>9wêjËÚ‹¦¼«bA”äÅ J§tàÀ—R×ü×=?†#žq³ÊO¦ð1yG"lrR¡ê‡þßõäÒ…‚6&”»åf챫‚þÈkJB²kʪŒT² ==À˜5¯^í4¤+£Ë»¦8¶(&î _¥¾”Døa¾hI^À{ ×à~ÃÎn°ë‡‘WäàÈœÆÝå{µ&{Të彨~a¢Î0òÅâå× ¹Ž›Ósu¸óæ|`¶àxbª°zÉÏ^6ùtØzÆkÖ”«+·¦ˆ“»A ó*€N ¼€|’Õ²óÁÕ4Ãv’º+á«H~1K©$všÛÊ?¥d½Ä q7+áì¡XM†*NS N’Œ*Yì‹ "ÉKªôtµ<âÉŒñ•,ðóÛ’ª™Mó:ëuñIJAÑFGBrhŠíô¨Ì;W5¼«ºŸk€¡0VÃç‚•ÝÇ´ bâ@oáͰ–Ò•¾¨FÒ,w@J6ÉŒø7ráúÓ˜ØCTּܧ0¯ŽÂ0ÅÀn±Uòdk°ÎTXÓ½œ òm‘Dyå§IÖÖ×ü?GÍ4_‹šö Û¡) ×™()Œ4?§Xg_¨[ISÔlŒ´3¡@G2sþÒLľžü§ü-?~Ìÿœ5ÅT€2O•IHçÍÝo:²aÛþçbD+=\…òÂM©³Öð)ó›±)ßÜçµoÊÏ/þÑ’çïjã½ÿÔŸíçÿÏÙkþ£YãzP¥þ£= ¤Bx—쪷ÉݱƒÅ$ó»@Ì ¹²!Ý5õ¨j|Oxrvõ2‰žìà‡A—aW'YÓòd'G´ð¦êøY*xì…„õïI%ÒŽE§R‡`Wê M&ÞèIY•sW}ge‚Tzñ‚ j_L]i@ôõ?@Üß”zP$]˜Ý²qb‡¤6ÝX©Ë~¸nÇÃæÀy`VÀ©lÛ•lä6§Å^—æ…²µø®¥³då«Fµ·ÄÔÿÊY#Ðpb+&™ ¼ÇzŽ­4±üz0šK2ÍÏKb¡›Ô‘>ðÓT£ì¼œÏ¸áKk]àCóZ±Ö¢i¦ÎAi,–’¹è®k¬Ï¹[)Ð?? ¾iŠIßçª3—"S7zOÙ‘°¦"C5™b9”žªí€&6yT\Ñ™ÛËi„› üÛ¬výªˆKãjŠ  ý@K£k¦Ö•£ÃyÆÿIÿè|Øèç"SŸUóÁâjú~ëÄR¡©8?@ëË•+Èh-BE…&)A_â-âfÒ mfÛ›::IV(Y#~ÈÙ{¥ Û¾¾ë[‚.>ço/ “ëY¦|£¡$¼«tf€dæªÔSÂÁ‰MvÓ“²QUõc¦]N~Îÿ4¦*'}\iÊ W•‘4Tѳ’i; i~WíúåêÝH;QåjèO8o †AŸ%!µG @ØÛ€Eö _̪¥vèu¾]¹G¡ì¨£ÐT—Ÿª•Î XIõ‰•$ûODRW$ób°¬e±‡µ.¼}Ì1üét úK÷ÛWº^ÓU™¦SUé'f4Ñ»Ò«Š™ÞÉ´¸bÔÀªsŸpE3a;4ÅI0mòX U(#³#ÅG?#«k÷j?Ù±x‹”v®Sɼ…ø(¥/àxR†vRa«‰¡+YÖ\kôðDPæ1+9 -J¼°Çr5Åj"™J òí0Ið¾OˆŽ —¦‡J…°dÕ,ß šs²¬nR‡AS…ÅmR±ú'e‡N_¥ü¤Åò;C± ªru ²«~?ÿ¦4F*v$”Ÿzö Nãî0=Ë—ëfæÏ8Åbr®üê}òôkÕLå²Êˆ×©wÙáw üJŠD;z ýu°ßN¨³{¦—âF'Wd¨{K¿»†Q™«’5/œ÷࿱å.÷Jéfd3sP}²s©»c-§‡%ÙHÃìîæð’›º]ÒÍ” ×8f$9¥RoÈûÍÜÊŸï’9w·y¿¶s뙕e¦ä¦aÞÌ\µ9×Ñðk ÙW{Ë~ç¨7¶´0 ®íïn çŒÞÜÄæò;°ÊËSnää¬/ õ@å­ÿ ´7¯Eày%ð‹w3ºZWƒÄûÍè½\·§¤›Ó/Aî&_ví…qñ ö£7œ<09fÒXˆªÆŽþ‹;îZm8~wçý¾í0Œ­ æËéb£²Qr”ñ„:‡)éfëÄ{°ôaæªÛ*?âãþmP)ÇGfø7íÿ‘«™«÷{ £.Æ%«Sí‡ñåãýÃÝàz¢’ñšÁD›dñ,¬#;ý„û‰ªf%S½+nw«Å~7¾¹Ø_¸Án\•ý7fÂHëî0Æ÷~ʃj`çÅ7Úbk £åÃEI{bÁê¹ñzá¢Þ.½ ×Ã`Ï\î—Š'¡+7çIÝÔGZÜîÅxJÎ’l7ã×"a»Yñë€0$Õ»À»Ñ×î¿#c¶—À8dû^Î×Oê¦47èga0¦Ç8úÓ_w οLÔñßy Óù·Ûo¶XûaQ:|”·?êtŽ’oª´H8÷0},Æ»4Ê7·ZâÝ¡~”µá‡ìs¬¿ÒXý{J„äM&Ê ÞEð;Ñ+ÐýuzDxšâ-hH|sy¿™ÎabÏ K)þÉânÓ¸J w¯øXKY$ÇÔb‹pd§z+ÐcWnØëÃyV%ì›Á™=Üö+»˜ÛG-W_Í8ªóV¤œí ®Ô¡®Ñ†þ—‰ ;ìn~“XÚÆÈ0ÞzP©ÎOÿCÅ»Eëá£Ü®(û¾Ôkžà4ÂE±£t#I‚£¬Ù’ƒßÌûÂzÞ2Ö̇ë¼lÞÓÍÜ«UJÁ«ñNOvŒs'l©Â{˜áXÉž‘ ýôû’^iûmbý'ÂùÞ_’ާàŒçª¹/sÇ78WÜl3'=fª„Ayáõ˜·äŒ*š%ÍŠÿ_`ÿ±î#0–Eÿfv^¤'…0uÜœ6®ÿv²Ý¼}Ôµß.En|a‘š•>éI¹;'ÝuÂŒ0·RŸ|Ã=Kl.³S•èÁ¯ÿa¸6ä¸aCyào›ÜåíÖî­:®±±tfeãÝ9Fî?~àæ:£TõvKôv*ù›ÂU—ÎBçüÿHlò`§½«ªäç‚4&ž\MÔÊv”§ÑK•wh<¤ª®ÔÓÈjf­§nìåTÀ#^ $/žd³t¾‘p…L;@ÚᚆӪb©œ¨ú=Ûyë3SÞeêæ÷…òvÀt5Ɔ}s߬%˜“A5íS÷Yv' evMà c£e£>´^DpÉÁ4æŽ)5ÇÕȪ$Hì vpÍO$„”5¢éA¯‡*†$„t;L0æIò¦„p˜~3},‡G€™. g¹Ðø\nWìíÁ#¸ß0Ýã>ñrz! ÅêXÌ\ƒ›ÊýAÂܡҺ ©,ÛT.o¼²lq›Ôƒn‡Lé3Ô…¶«ÁJÖ@~ !ð‡¶Û!´ ;¡#<}½Š[•¸P®ÚeÐâL¦Ñ ,²ƒžHš2‚Xƒ i jÖ”›–nô’ΈuM‹í:u;Æ”«I@kF’ŸAi8·Ã+H±\-(àìÍÕëœÊHò“+௦”UeGþ“4ý(d uvÝ dlžµa~¡dË ³ÅlVãê¦Z½ÌI;à6t²%¥ÍV'›\ Ú¢‹ýB"i¨bV@í€ZÆŠ·r2ñ$‚~O´ûóÏ{êââavü JùF }.ôX¥N-gÉݶ¨7ê¿dTÒtîS‡‰†YÓÄ]a@›°9Ð\t¤íЕѵíkþŸþê°eÊ'ê|cù–¹®ÚüOHôÛu@±8_ ‘—¸©ž”ñü„ÔÞhòF;»&<»o$Vªzˆ}7ÜՌŠcrάÔM¼}ü5EÓÞ´H·R7ÙYv§’‚$—«)ïh+ÚÁ ÊJ.»)6CyY®ä§Â@íòdÍ(èÊ„ˆýX ¥0­/J™UÛÒìýã¢Tɪ}Ò.íúS\‘çä1ÙVÐÏváÙx@q¹æ =‚(hœ<Œ¶_•]Å3 U}gšûøÊ>žO±€ý6¾;NÔzØxhVrçÖ%GóIž¸7…Öc,™'t¡´ìQ9GíÃÕpŸþë9Ê»dÛ±üšìH?®äšÈ6„µ­­-ã¯à °o@έšªé¡×i"ߨž×ôÒ”fü ÇCéŒï*‚ Y¾£o ‡¤¡º"‰ '§’A•2øP.å\Àu¡l 1 n†Ò‘MSJ®ì }8ÚV–Ópˆ•»e å´ˆëÂ4âaV˜—H«E,è,ùéùÅw»/‰¾v!ìåpñW¬áLZµæâ`¯¿¬uæí |kà}H*mJÄì‰~7£Ýó Ç0ûÁ•ÞÖž•2R›µÓVH~šhü…„:„Ÿ&Ï¡>€» í`®F˜qÅR²b¬û‡¿IëŸ<Ê“I‹ C°+µºšÅöŒj~àUꪥtä|ÑKù*e Ï$Ù„wÔÌÎøõmZ$A8g¹Éàÿ\ÔŽèÚ žh1óælø5µ–4¥!¡GbœËqÞICÉd;˜œLxw¨IŠISêÔy‘” žÏ°LI'å ÙnÜŽ»9Í|•“¬‰J™@è²#¡í໓PZX‚¼À‡dÌt§ãC¾5–Ÿ®\•êîjfTâDjñ†±ÇrP¹šqYE=TM°wþ””¸z‰Uæ¤UA>†j2õyï¹Cf¸Ï¥ë¸HÓ‚4Ý™¢ª²æÙŸ<Ÿl’eYw‘9PJ†iˆy”n˜†¬äànüÉ ¥À¥$XžoJXœí˜)#ÙÓ€ª`‘fY®°m^~*ჹ"¢„þ$'å,mkï²iªkQ¿àTÀˆ~®h©AcCR" a[1 «à g檀ˆA ±T0Új2µ ÿɧJWñÑ²Š­~ûUl'-Ôþ0Äž½ì W“’ŸAi€K6yHÝ ñv}E@qàŽ’ÀÌ«…º¾=&y41—S¦~è'¦qµ)߇̣Ûw™üDÒP€›TÓ¹|ÀŸuúõÓÌ šÿ7žŽ’§é•vBÓ,Yg&$Omýà,ˆ*½ X‘­å}LÚ8±ŠkrÈEv£ëèAí21ePç†,l޼‰Ëо#\—-ÜËåÅdWð pÃð¤WÞ0qê\vfºìa¼d´ ?¾ë”,jyІÏ27c{cl¦ÊÆ›ìn|BðÙfé2‡»Úr²vñx;W9ÞÞ7…bÿLW²v{ŸBŠN^sDéÎi,×úÂovÔlL&Á°E¸\næÄ—ëÆ›ôõä<Œ†µùN¸Pjgƽþ\ù¦ ¤xãÆ*’M›jù]Éí}ë/‚ý¶“Õí\KRçCV#¶iû/YÏúº½œ ›C;‘7WªfÎò;b bçk–Ü ¡óKVêåïÄ™‹¹Û-£ µ;6# ÎÙ¼u¼³Ôq¼…œJ8")½Ë|8@Ã~ìñ øúËlj€¬/Å–üÛb9ØKI6¡ÎAûB)^@6‡ï{8>a1 ËeVX_)ˆ0•¶C®SŽ¡F•xÚÊ|‰¬ÑzlÁ¨ï¶éÞö—“mai>Ü]¨uZÖ'4–O´…µ‰ ãÍÚqظ䵨ž/»jçû ü”rÒ- ‚¸j¢MÜàHŒAÀp ô#ExL–ªQ6¡dÀWŠÙý¦Jix_öÖ¥àaÈ’áщòØe[æ¯û.âï› ³Ê×zйy{×ê¶&¬m‰kÌL{S;K~Êånà,ÖîîV ÇÛðþ9ýŸipš3È“2¶TN˜áxeÕxRbÙ¡vA Tõ­_C¬!}ì4OWåÝ„`,»C^Ò¦$)êhÉ‘8â9¸h!}ï¥j÷ÀªUŽQdbÒÂY:;àð|Îýu¦²«³2ýØ|0×iÞ´}Á£ ü¸Béq’–Æàu$\G‘Û1Ä_(˜êïî}¸Å€ƒ›³n ¾sØÍÕUû€Ó…ŽLåTJoTŸ'FG±Ÿœý§ÿ™åîG{(n7lÁöN<÷ay瓉·^eç}-.ü[lÆÌõƒ“:Ü–EE{r6±2uÀåÒÜT’®ö•«Àu¡l7¤¦õÅcÒÁ'umTv¤¾Ø/YCLl+ É»y..Ö(9¶n4 ÃŠ£¾ ó6 t"ì d—ÀDÂTVµkKçë–càÖEÔ.u¾×€VH6E/—ùdÕ«R z ¹Ñ‹ŒðìPÎóqæÒ.ÀÜOGÖ¨üÃðÂ~-Úœ€5­ÒKöež'<ÕRÙÁæÎo‘kØz°æW‰um½.iãÔbˆ\}BñŸ þç´ÎèXÍn%°>ìrxÌ Kc°ÖDzrä¿‚¼Fé'á8?Æ6'+›¸Æï~ É&åÉ +5,6À"e^ùC°s ƒ2¯jC¸úU4²|ûúí´I;ç'»ÉéM’‰µ€—äŒM|à#ФœlºC5 9lW3@‘8|]8zþÕÌ„Ì`€øPéA‰f à’蜴1JVìÁK„6ÊýÀZ€+W*çCÍnÂ%9¦aÐ߬ŒÇïV‹â€½°b\BYvÓ»ì3ˆå…k¼u; %kn›!p¶ÕÎúNÜ4Ê]²’dÍ{©ÉU6dp¶—“égQW;nÅTòÿʱæ÷øÖw[8Ýn‚5îÇí0­/¾¨o§”~wXîå®Ó fS[*Åþhø.u•ÀãžÖ^û$t71åðºøs-#L«­EL› ‡…0+Ÿ}¸èA²AÑ-ÿäMÈ pÖam¿ìXîj7L÷xæ¶ò¾ÙÈ h†l&”H‹S ~»ÃØp<&+†!1á hCyë²9DŸñÎ)3ƒvœºÓ7U`,ƒºõÊ^Õ+&Ê;à¤W'ÉO`Ùð!:P6˜øXƒ£‰ãùµ0è:ÜpfΊ×âíÌÂ¥ºKåÉ'×…6aÒÛzð7ß9¸">@ö´FàfÌÝ«årZÙ7ÍaR2WX¶ÀvÞ¸/Žh“<ö ÙnüÍaªo»$ý&Ë)/,^@¨½µSû:Jl-Evƒu§Û¡ ÉÎøhæ\N ó) gá‡R~zAÿ<9™w>::\æjndéÇŒ¢ƒž„3¢ËŒ•éãë¢0~m57IŒ¾õ®‘-Õ¼„É{ýíüÃjoeÛ®¦¹õŒ;8ÿn7J‚µ1Ä_mÃ>Ißó¸Û2•ÒÝaìÆ²—Ë2’x'²«d$y†à±³Ï¾YÒyrÇ‘q—Ë5‰;ÎozKJ>ƒïcØÚqÎïVŸo +@ÙI®ÓѺõ›Á`üœè¶Úìž.z]&ßrÐLeWÙáeò=kÖq‹1ûìõƒRò¥‚g\¶—ó¾î3„EE÷%ƒÏ!„B¹ÃçÎ €M/}8φÜñ"ì>Žtç{ÊËÌfþý¯ü¯L?ÿðÿü׿ÊS£ý‰>æzýÄ”4•vtvM©ˆêÕ ˜²Ò‚ƒƒ¤óìéÁucš×L!EnyhÊu´¦€ˆR;¤áx*x½vÈ{öSú!”g ã½~h£J]U2OÐ$%è„ò\Îí^¶#ˆ¸mG¢çD)XЬõb´[YÓ]¥\ ™U»ªÅ1â}Ç´ìÌçtR5¥4µXü”}L}Rg×6a®;>˼´” Ç‘…>¹\UçDÆ¢(Sý¤$Ê‚‹x©3½HÓ¬Ò“+mN‘ÇZxŽAhÿáŸTÙ;&8±7äæ ³ÏäISžHí¼f’<$«Ö« ®&ܚрL;@òš¼D’ÞUr7*åT‹ÖjGy+ÈöR8¥ ¯R;`Ì%ÀÂg$“j)¨Sfò~Ižå0P\Cr m”7vB³¶ÁÊ'kš†*¶.PgÓ9€?ôc^ó?#Ù5Eû€o‹§¡Šv@xJT©¥:Ó#Ig@ÙMæJ rËÄr>%I£Då'YWš…“à8½Ê8Ÿ4ÁŸB&Fü?² æ3c»ÚúÖ4Ék–xð´;jÙš5NÄëU@Xùi,Ì+.ù °ÌŠ´é¤ž–yÎmCËSiä,0sg`c¤c·1y'¤2#»(Ï  -_k¦Œ¤Íô‰Rº§ûó _ÌÆKÔŠ»§+743åê„ gÝ=sæÞµ(­yõ’Æø=Ž C]-¹ØSt7ÛÝ´óæfoá~™–2W¡’¡Q+'9È"Í|ã˜c Þ ýR›TÊK:#knOþñÌpLÕ·0ýûd¦mƈ®zú\ÕïùŸ~ì›Ø%#–4=§0Ú![åÖA)] P¹ªŽ)G?ÈuãÌΉz0âÁ´q—íiWz%߃¿ fÙlØ—Ë·°o~á#¯$ÇóV%÷£Þ—&è6,ÉûuëGJŽE.®²9¥·b‹³MÂÊŽP´òŸKrÉì¶r+u“­7Ja®f„ù´`-t¸èÑÃ|+âá’ææ#\E7 |àð’l"ù9 1Ó<ù§^Á­ÜìàÊ´X¶@ÜŒÛÎ÷;ctæ:GŽÎqÁJy³¦»J…F¦ôTmÇŠ™VzS?‚4¨‹•¯Ïãà¼>©.=;77~“:ÿX–¬€…6WL(H<„Ò†í ì7”ÍK_ aÏF¨PÖ¯Ýù1¨éÏ«,SdçȺ¬Ö1ÞY(¸¬ö¿ÛX¸:=É5Ë·;Sr×qtÏ‹aLØ2YMcSi]Î+QîfGî{®?3dFÈa[@é†ÉJÆ}S·˜|ã{F¦E¼(šZ­ù!É+é$ïH$3×'u×Yá¬é^Ñ%k°Ó<I 4EHeÓ”TJE¯Øa™Užœ%*¼`6*l •ž”w4üQ†áÒ À‚Qrþä 4ŒK]à¡Ê­9Ê_.Y@åË„«~uŽ÷ßÎÖ–½ïîÚa”†Á-¡Fµ]ó #ùIp·aA¸<b€_%W=Bbi=f:«ÍTšºÐÓ …ØL`X!YîÕ=¨ë>ÛÞ(«¼eFñ$àC™ê78 ~œEÐêäIÕò˜-rªT‚^4s %¶°­X¹ÂŒÒØþ‰^wêœ|Á¥PúÄž©{T~âÏ ÕJöÚåäÜ3¤ ú|èÓRÆo”EU®%o‡xεm†~}Ô$¡:À6e–óQKöRX2Çí¨ãt‡K¸àÖà$ ôWR²®pV”úXcyS¢_,™ÕTG~2¥»Åœ„ÿ«\Ë3ãñ¡ß¶ðµ4Ÿ,û2ÄïîAÉvÓÂ]±rýªÉjjÁnÐHÓ ‚g±Ñ,ÎȰSg‹YêH(ɲ©¼H5 (Îì «b‹r¼Nà˜­ëV|5¤MPˆU…f×þ—iÀ×\LR°k6`d£ HVhÜMÒ@…JŒÛ’b©®!)W[|Žèo;4}”y_e»êã fF9ŒšÛă² q2FïkZ!‰*ÈF*ºú@˜KÅÌšûR_d¬g©1_˜„˜™Áýβ…ó¯C#Òã žï\ÝD}»,pãmáïÁ Sø’Ÿ.i  ´Ó¡/ÍP{¨s¶*ýȦ7 ®S3ÿÂ–í ´Igu¨–¶\Z„•Š^;WÞ`jþ®+ì^Е™‚ðEUµRrÅKäÝH;û esëÌÝÑ×XX¾auŽª$˜M¶JÝ8ÉËÂ’Ÿítè d»a4¿zÇc—7”ínZ¿¹YõÚ*UW>*¬™øä 9º‰¤a„)7FìIç 'þ|Øi(dý(ôƒ«>-û¥)ÓÓÁ:Ì]Ó„1p%¡d€ýÓ¸Èn„qÏÅÓïw§™§Š`2ÉÝ7/;;àÆô2%+bN Òp´O“Ó QM¶rp…ÊfBiô±896(m¶é_ç…ÙX¶’ÙÅ»G‹ìhÄÑh—BŸtÈŸòþ¤¤)7Vv:ô²bü°®UÓípè Vnl$”g&#IšòÅMfîƒ,íÿš)~íŒjWÀýSf‹W”1Gîj;Ù«à3N­0‰ƒ°ÒÝy‰Ü :;HÉ7¤ä¦T%üUðÍyÇÈÂ\'Œ¶ö9{Aò5ÿÓ)¾¿š4»ž³<¨j*Ý•f]uJ£aÂðóŠZpÅþM•:+0eƒÌÒNEé¼C0#Û¢vÎùF ®’e‚&b%DÓŠFoÅfeÞÀu¥'©ôñæÌ;×~Pº3×»Ãúþ±²AúQË[ù„÷Yú]’tÊ3R± (”«5Eù¤aøEð³ºaÜ„n*퀦9‹Åçhú+àwNãîVɹMÀ gÈ¡)×}Á¬öþº| hR±Fóÿ<ÙþûG¤ô„\qpRÌÓk, NñãÁ*×öRU3天´È/®hIäœR©½(Ϭ*ѕȄM««Ã²!æùl‚Ï ÊöGVf:\§B4à ªRiì }^mAò˜Ÿ3xÓo?–„ò¥aÓF+î<ŽÒFÝ©£¡pÖl:c ëgÃð%ßÝgTÅÒßjù2»¿ö¨…R/$TU:3àAyà5ý ÞUªÉvÜPøüq%(^`’ütµò‰6^°/úb7/ «Ê‹ ²ÂY’–} [c­[–.캚ÂáÀ¶¨«»Q´uÿÃà)(ÚüxXìíêåwÙ”Ÿœoh«§ú£|juo7nHé—I#lë‹/^hNÊ×`L¾›(ƒaGøó¦5Ú,AvÍúo Ï s0*ª‘ÄB7ÞnÜλé÷¼_m Çò Ʊ]¹®â%±Ü8PnØ×°ÛØOŠÜ™R8/Ħޖ9nèºc£rÊØúâa4Þ¼H¨“ÞÞTM˜Ò¢ì´;`²¦;¿Y¡´(;­FìlÍ„íw+}NŸåÞÊ7%y9Fö€Þ;.¥±IæpÑyÉ|‚XÛlXväVÑ< Ñ‚Eô¹ثʾpÁ’ï;WȘ}³ý ÏÿRU.莄•?¤²Â•\Ópš³~Rg¥ƒN¨X)A¥'4±ÉCRr,ååxµÃp£Æ†»é‡¬\Œ„YWÄCÉÁèÓLv*vˆf㡱ǚk@ ó->×—1~kqÙÖ× ù÷× ääÜÈÒr2Ù6ô´#e¤ÏC»ÆÌÇo7„™·>~Ì“ú5£o$¶º‘è=†7VÈŒ ™=9mßžY\e¡²§{95ø14p0íF¥XYJIóð©SÁêÛÑ k9’JÞ NñAˆ¶Ât7åÁBwÞ¬ 6WÞ ³†SÀAY3ñã$sc>Ä.xeþÿ˜ÉóÐôQêÞk`k‹1Yn$?§{)LG˜ü+o,Ä'ýe:IŽ\hq94.jâC¸$$zI&o5¼“dê·>Ó®õþìHä'}é‡R‡±Ú?°ñ"¡Œq‚£%0š mɦj? Œmn㊦ sp¹šÙÙq´ÍìÞÈÎBM¼…'g”-8zyfÂr,–{Æ­\ÉqìÌ ŒÑfeûìfXq|ä° x˜¿dÍÁ³þžñ]¬ƒÇÕ)M`ÊÚÑ`…${ ›ŽSïEÅ¢EvPㆼ&¤^6óˆËvôcÈN¶2 ²S¹4÷M¹·$õ#ÛâYÚy€ê\Þ©œ›X³U¶‚e~Ò!ÙTîH¯÷ݳÌÿ´Ñ>‡ÖmX–bwÆò¤ö>8Ó©…?vý±@Þ^˜ßf¥®<œÇ,ºqfÕJ½àv˜bµ¶D­ýBiç/×Q½œXÂIí´ò•¶¡ =ê Ê’Y±»Ú³²ÓYvÉ>N¹PGiöóAJŒEûàNÉàjÈ”WDJ=õæ‹ù$&Wä>ñn+#̈írÐ&ÍQwYݧ€²-ôv*'>©…ÃGu³o«sð_Ò¹?äý¦jÃ= RJ>r¾+·†KÇß_£‰’BçjP@úኮ±GSB£0+LÃMm=õœ£ª_I¸c#´vò.lß–Àf!ìä Ù‰•J[R,;zÐ#Ð, ’-°(`¿Ø”Ùê” ØôjlÉA6ºÜ׸ñº‘ Ñ7n£8H‹ ®Ù&'.ßò}w\mTÂûw2û¥“£Ï¾û˜v¿~rÚ”ª¡ÀÅšd[ÔŽÀ5„«45!§sugô(^\ÐÙuF°P‹ÞÝøÂUÛ+eJV°fÑó´¡6Ý(}Rm”aJå¿ÿKµüÃM²*V¤á»Kb0^yvÊCƒ% -Ú”V("Cµz ê>㦋zPþfÐA‰N=”õr´ÒÓ"•1í@œ ŒlñûQåS:& \ÒF6û_ÔÉÏÿ’u¦Ù Û0þßÃõ°„J¨)Ò%©$òékBißK0ßp×bí–{±ñ_½s}ØJøFÃï2Šâdú5”’Fn¬ C8÷ÝöÜ”³¹ã X$ŠšT‘SÅŠ`ò§øúÈÚË㮢‡@î2O’%°óeYÝu¶>0/@eË¥]f¢¨Ý ƒ~w”þëÓuO™¦þn Ïf©i»ê·‰Þ+dx˜J&úb73éµ}ë¦õÉ—Rô[íÌfÒ&7\ _Eß¹fë’ñùÃJ¼Œ"4M”Ÿïû w§¥D±CÈi´üãB¦‹é*”&–W©<Ýy6‡Î²Qröþ =ÖrHöuž;NìXîœd ./þ¹î¶Ç”ê©@¿Ûß¹ WÁ§“T¸^M^œÈ«ø·žáü¸%\0>=nJ¦õ\ºÙýZ+FáöÅUß#e)²ÚH¿¼˜eÊr3%–´­‡afúÕ$߸MŽ)°÷ȹãÒ5MeÃìºøÎW°…ÇÃx3±°âœ°ºNý©Ø&ÈJÞ-,…¹U½8Iÿe}é)Qz¾¤3\Ìy+/=s„=G0ßX(…Ãao8ïU&Ê;Ì­È,w–~ÏÊÆþ;š1¸±‹Ú‹¬77Çð¾ŽÒ3Öç©[_B›¥SReYL1) v8ô ²X½Ó6õýÌS) :µcRwÂéGeY!:D€=x,¤®iΰúQoƒeì± pàº,jÑR¶¬¢}ÛHŠ,Œ0Þh¹sõ“õÚ÷ŠOŒì‹’JgS)Ùè¬ ²˜¸µ tç[NØí`5)EódUÁ¶æÏA¢ Ö¤ƒp.ÕÐ .³kkF›jÛMhñzêåíüГ%°)*(õKél®ÉSbbѦ»voÕ~0Θ¡£%ûUc§>nGHÄvh2愇}î2$ )q@=-+sï 8‚l/Nãi!<ιû%½Ö׸êkV³;®‰6U®½Ðô*7)Ú×w`›TUy²AÞFŸ½T¡$í¸™7ß š‚Ë +û%þ”´’¬\gÛ‡.ûgÞ ‘$Ï‘À(£ÓÑw»–ª—R!‰òúË`´á–»½Á¥òÄÙ$|ÎlŒGš”Œ…×e„ÄôTçbÇ=BÉ›R†ø­Á^^#6Ko§ÖÔåùç€×Ù«JE²0Üh¶døÄ&^¤:â«cÛK醸¢Ƶ•Ãóñ@#Pò¦pa( â·4†–úüä+/OÝ ŸÛØ[î >Hc—ÅáÍ š\iUñ· Ã$6Ý„‚–‰AØ/˜¹ ¤u¥ÞÑÊ”îVþc›ºÚã åþBÚ0è5Œ56YÍN?B=QJ6Âíº›%Œu?šHNÍ ä ò“€à|9–ƒe Ž/¡`M¶7„ƒý%Ìç¡¶nžñCRÙ»Å×±7œ®û²\'-*‰ ê·d¤;¦`-®œ-¬tq'ÝzÊ&lZ¼åv¨v6õ†½‘B™0·(Ý=ÚÕ'™hA%·s1ÙÍŒ@”rã#( ek:Îw`8±“~+Ìy˜ÙùÖëåVºdç’WL—ÛºJ©Ü%ÇT.¢?Ó^f[ÒR±5ÞN¼…¼·«³SLZ¼Jü‹=Å®Xñ¶Õ»/íîo¹B[ŽL ¹!E~ ÚIj}õ ÿku¶·Šß9ÑoÇ¿m ‹©£C÷”°_e(Ù]ë¶e oá—ÃÃô[Î ËéeéãÙn…‚–ÀE#¿¨tùœž—×Ã\Ê»4\Àu{¥ÞÐÛ‰°:áÚáÖ7ÓêeU}bËf®ƒA~1&LëÁoG×úc†èÃÐGã³ÅωÃ<ôõ°"„9¹ò$L¥q”ÜJ â`]1ºÃõs¶çÂpÞB6¡dÀ¦³†dÔô}·tw—™ë˜ Iq lÌOì`ƒî©¾ØÂ¥ëæ[Kùžò¿"¨>ŸÍ2’t %q  +_ôI·¢"®äʦ_Îüs6ã² ¥àó˜\¢Le£†c­E$Ø´GÊu÷÷â1)¿“î-øì Këžò«H,rÔ:Q$RŽdžÜÃè x¦È‹±ßS®›ÍÁ>ïóâZÏŸ0}QÞlÿ«­fû»ý`âB‘Y6ˆ”''î”î®dså`£—¯=ñ0pv,jÆ~D>L½ÂÄìÑ÷å_™^m½7Ö8lo]Ï,Ù¾ÿ)X`a/7I^m¶+Ë„ø,ëÍ«à7Ûy±¹9Kì,LëÁï(t9eY„—ÀlXåÕ¬ž†‡¹‚ïésð_´,’mÌ‘Àn|ó 'maßû}’¡¶´© ßúÝb5Å]3tÓ¹š¬å0ÂIžáe¹5 zUÅÐûÄ~9Ú"Ë7¬Îi–N$…²ð ‡}áJu“Ά+p땽TÜۆͦ/j-šÒ­s°ÐÝ,7£Ï“|ÑJ&£AýUõbEÄU® (õ7´$)!± È:ÒÊ¡I׈gñ¢ÜžÚÉ÷§È7U2\/ËÃ[1†´ž4¡SëNû5ô/Ê[â õ†X¦Ó¥(¯“†=8÷Ñë_åÌ+¦÷nC•e§oÊeÕ$o& Úö!£°t^¿méû:u6ÂJ4¨>¹Ãy¯Rážèª«S7¸ c†Mà:ÑFÚþ:T|Ê[ºCÓ½úAjGÑætøE/®Ak9Âpã0˜WÓ¼y ‡Ý|—»õ^ªäªL+WCN Åzm;sWê”WP甬Â÷ØsaF„½€ˆž ŸIˆP–¦™Å¡iE¿ªùCiÄŽ.ˆõùsˆƒ/¼'/o$eÄ×çëVžåÏ‹?Ýî4Â|Ö\>´È'MðúNW$¤4bî² mXB>ñ1þ” Ê«J…$Vq‹§ˆI–§êKÞ†4„r𧯅˜2´ÒvR'–Oá÷'üë{î:aK% ¬i;t KáB‰¬Ù˜¹ðBÙ udÁº·ÑQu'NÃîŒ8Z.JÙ%š”OÀ¤[àdBÉbÓ—yÒfä»wl”äéXVž¢1<^¬&/saÂ&Ö¼ßÄLG=R˜ lÜT´—ùËÚkÝç:,ª®Ü¸ò!}âÙ@I#I§|Ci‡¹O—ÐËë&îNEó ÜAËΔ‘Ô…\Ñ* ’ÄK-¦™YÙM剫惉³1 Þñ͆žf)º«” ÓÝya‰›y}¶]ôï«’«´À Ç 5^4¸òñຉšÖY2×ÁýݰVcÝ«ë±ÆNPÛ,üÅMð×!²Œ˜ç1·O³'‰ U×Ðm£ººÊ›íëá¶É—Ó,Á‚ý¸î¡(n¥46Þ™VC0òZèG±6úfö:4±I…¢’ƒŽÎdG0öÑî]ãB¯ /^'7£ý¬Uq­³ª—û‹R2Ât€’t£òm¹[ùÎJ;}?•„MóFéÎò6÷7U¬~“r8y²QɛѥzPv¨< £ ŽÂÕ¨™ì´²£äÀÚ qб$Å.+;Fß”ž\ƒ%onêÔ ™¼l©Ï m!Ó¹Ðv©2¤R–$ù† ¶¨o¢ îËÙœ¥30¶^æx5º xêahÇçF‰›Ñ¹ò$ÉÞ|i>"KÁÎŽMâ.ÉŽ ƒ»,æ|0n/…(ÞºCTºÑ(ÿ¤óÓÛ“s†ûŽ]ÙHz"%q“_ù™>œxÀF2XŸ÷sª²ñü¨k´tLbz•ÎÃãÿ@W€‰ úÑا.±É£’d­äß^ÒØTº¦œÍDëkºdÝOiûð×akYM„²Ó2’ãݵ}Ì ìbóR“W)¯@œ…„ÃW´Âj÷™TŸ€ñ›ƒ€½$n oya§|)Ivm€¶”ʠΫ)ç hßMßo˜.5ž|™DKšç=3–~æ/éì€ùäÜö« ù³+_w¼£]…C{[Ð7õMõbDðÏ`Œc‡ž#žý˃0ªò°H©²ÀÊ ÁGÿ®çÕõ±l#Œ'R0üÓËÎÜxÐNį&ƒ‡ÃðèØ¨‚énƒŽsù/®&OÉF *é‚bk´¹z^§Î ä’¼´=oðçKæÆF˜—Jçáio­Fõ³ýÏ)³§&nCÊô¤‹QvżkvºÖP£± Þi¥ávyÊÐLmÈ‹kÙÿœ”2ˆ¹ÛÇÿ²kä¯Q°ë‹ž>š—Kµ'…ªÏ€xºs…èìê²j,gS8–´ñH-yÄŠï!MBŽîG–@/Ð]#E¼<$v]Z/…EeEac6Ũ•ÞÈŸŽ•þ¢%’}; ;ë±ÛrÇÕèRM¬C+]½MGшë”U²º˜Ŧuí7–a,tËñƒî{ÊðV}*s~s¾™’îl ¥Å«Øos—ö+‹ù=•НK™/Ýî=uc¼¨ÔMu¾±”È‘%ЖNø¨„EN×ÂsFî×jcóvæ­ñL”Ã’Ú27ŸjÛï:¢0žüà»ñ¬Lñî{$ÄWtàvÎ%9cgíæê(‹q=[C_aç­–Õ0aÎÝ)ÖK÷—Ó,ë’yÌ1£ÀÛ¯s¹;J¦æEñâøsΙ֩.;X³b$þ†ù°÷zWšðŸ¬^Òéssή+¯Ò¹B0iß26Á8w ²OÆIyÄÑÜ%D›;_zF9éžZª¡¼##‹•ÖQ}ʼn¹? *?ã_F©«lc0ïñèADê¬pö¡Ÿ*Óø²aù#?úÁgƒÅ•’Qç;²GÓå1þ\!’.hbK>;yx±±Ó_ØÕJÉnP ±Fóöݠǰ؟"á <Á Enk¬ð]fA-„XV¯2ÂBãÝö¼ÑÇJäqî*µö‰˜x¿µã\*ðÅ9%OŸÜ! Ž.…„A'a9PÚq7ý—‘%,Ž‘?†µ|UÅé¬Ùï“À©T¯&IŠƒþv®¹s!-ý›R`vÔs·0}6ö²›|ÃHư”ÉÓÙÉ ø‹6º3æš;¯¡ä(~‰Þqûði#8eU¯ca·L–T… ²+¥ t9£ü)ý‚b ªi¦Ø¸ŽJ¥_€ÎH^¹B$o®é%†Àµ‚ вPR-5l!S ÆWÊZaúœ²#JL“YÑƬáÚœiç «“”¬hyž#oK(ÍÁÛSEd{ ̱csÅix„ƒ:-ö%´ð¾ï5ùD˜|—ÑÁ6þq¯ô#“FÜ8CÄw¦Õ•íåûSs?so2–†<ôFEm å ¹FÌ]ãÁJÈj¬wñ ÒÄiCÐ=5Ï<›=Qò¶ïI{g€X2+—ƒ]‘š¹#åÙÇ JÔô㞤ëç*¥á4°Fé`tÝ•O8aÕ(” WJA㞟PP;~Øí†y¹ uÙ]ÑiFÇ íâQÊ£{œ—Dý†òu3¥ÞY(…õW¯„¿Âœè3ß´Ž!`?¬QY3™<%WiG`¿¡×ÅÖÅ19už°NŠ\)yâ¥`¼/Õ©Ê!&ÈSç`QB®4G_Ê:}¯hÃ]>Çr6GË®t8¼ö ®Á²Ü™Òo—®ðÀx0ŸuGÍq:| Ÿ:‰~&&Oרq[À±sP›(K zÅg+ÓzP^Kþ—­³K”‚ðÝCÚL{ ĆŒÎ]½Z馈úrN}Í?„I0V·˜¥ƒ°&u‰v‡ü-܉ݲ¥ÝtÛo—:ȱ•kõêb/\˜“‡¦>Nx‘- ulëMªˆßÉRÐñzè,(«ë"^Dç:B#Õ,+ Â#LïT3z1@7<žsjÇ™ªF…á«u'íïŇɦC¶ILÿ­òúT÷ó£¶?Šl;]ZOU\^è)п_I+ʬ¾þä1±+'pÌ‚¹<ø Ù*šÛéêÂ@sÃU$ qíbÛ˜Ü&9U—o1d’0B£Bϰ¿%”âÖ’1@9µËêAÇ+~8¤ŸèñЪ}X¢û¡¦uË!`Dómí¼o{Ж*ú0`ÍÅU\|RÍ{àH»´«;K:ôÁ—-h/MeÂðJ#}ZŽºGŸðbH¼p„/yüú« Y´(î Nv°“ìâÿ*&Šùj¸èz¤rë½\ƒ÷ŽÅÐÌÙ¢¿‘ÂoXmIϵè ù*¸³‚ßßÍ¢ôÞƒôN¦$ÃiIèÜÞ­,Ró »¼,¨T¯>R«N;[¸üÀ;Ê“GXd‡ÇIÍ4OGb^»DÜ£-×G#ÜùN/´hØ¥=(ÖG€#•Ý¿9 ”º´¶[4äò|ëKt æ½&Üß\~q/šôÑN’ÍõùÆŽ€ŸBÅÙUP–>Ì!|øE9#Û¥hvY¢!ª¬ÊŸÈ­S»¼9_:¡Ð¥ivQ¿GŒYµÿ!v«‘vÿ< ³f=ÑJÁØ^œ­´]Ƥ>ÒПȬs+áx&C %Ta¥š£Flßhr¨[|#\8~]ÄÚ"ÐbC_À’öT$6<‚ßRûÂí´§‡cñï×Ùì¥Ãf–£8¶K;0h-[šÇû^wvàtŒkÝ—í`(KÞ;5òd]*#bJÝ5Uךç╨-œyaø¬ g©[ªy’4çê4h݃¤é‰¨ArN‡S¬Ãx§2\*†·Ð3Ξ®ðÒ¥. 9'ÊFÍÀbðEøH@ÇÅA:»î($iu;Ô/o¢'HfšÚ1q!1-+"r²±¤rC7.k•£ >0nãhý|‹¶Ê1cŒ”ß²Q¯.Zº[\V¢ æÐGZÐôu‰³¨¦x‰lÞ»ØQð½š:ØÝai¦kèÁ.hÓéÓ”™ÿS?Û}_)ã…A®½³¼e¡KihV@õ©®Óz³WBæohuÆÕ%þ3`×"bï’l“-ä´NQT>bÔt(º‹E"R·éRåÓÊt–¾ž;ùˆ¥] ïÏŽÒhmG”†?‹!æÊoÑ ’ò~î Xθ®QÆÒò´ÂôÓÍísÃû¡ÎG@ú÷.¡GªÈ"?Ѱ4S5Ih<ÙÄ\2“Öš¿“<èëêÙn×¶MY^¨ÈØ7ƒ6IW ùà=í±Cb¤ =ã´>¦îÌÌõukN/­2 ÿ™åj•[ßßÿG•œL¬Ð¸k9á‘Cñ5±x\5Ë«¾|ÿÅ Nˆ=+ð'õ>s{âÇ´H…8a¤2%R 1=°ß°œ»b²æ4.si¯VÓ1WÕ_Êïh:]†Œ >$„îKz#áSdöNÅAò;2æäø–Í­hžuqõT`zrÿÅ!# Þ RJŒ£|ø|SíÍd£F·všjXDdBõ2êcŽh~¯_äøðrz§_Ñæ%Õ,Ôc‘å».oÇÓ¡HÝÅœŽS[u]wAE1AK9^–‡ß>4†ãàáé î©Sw÷¢ŸTpŀƎÐòjæ`?ñ‚á²ü¦’zo^¨{1zKË—ŽE¦2¡$£æu cÕúS\~”rIzLœßÐûë€8¿AæÍ–¨Ûâ{í£í阎¶ÓÐãE­th]B\rŒhÝ–ö‹C EHȨc‘žgØüãþ/–á#ôG ñ¾Ù)±èÉ{8©f§ØÝÆîu„ךö)±ß–Ÿ8ž”ÊÍÒ¡JI¯f,% ™†³ë«Ƈˆk`Ùq :i•dM·ø1ialm3—‡ÿ{¥A•êß…'2äëê¹'ÒgXéý#ª# \(ƒ}—€Ø/{,£ ß“-86 Ú—ï1’¹¡U$dXG9]5jÍî“\Çg/ ¡UžÐÇ4OŒY4ÐWæÄÚg:äV'ûNi.€}†XfÈ’´#Ý`A*Aººñ> ú.Éà°Î„+Ú™,æÄÅ= =: ™ÎWyÐ2ÒÎY¶]&*æãA5Žà…á|Q. û-a‰§\›×9q,ôðºFÔlKôyÕÜ‘&~dü›T¿MQ²>™›Mý·>Ý*°ÕGLÆá Cç OK‘ëNBL¤gTÍ~• »“ ÃÀD4CâMr“¶ƒ¦2™kl ·”ÉÈ’s÷®N|xK\E×’âÀeÄBü.ˆ.D[Q’úñ ñ¤¸;?-´b+’<]Ÿ=g—T¸SÅ4'¨¯>-xWQX.ÖÌo’±-xí=dB]¯Ž*ÿ¡)aµ‘VÇëÅÇ[ñ,ƒ·½œ%[zò…˜ë Dký~yG%Òë|»$±’—¨t“G¸ŸåØýQ¿sC+ÔDŸÍÖ,bîق‹ãÐ9ôÜ…Å’ÖAºpEg[‘YÀ«$£fcÑ7HksŒ”Ç”{Ø´r4*©J§%Ž„A޳¬Ù± 4(Ž4S"–ï4˜ï¯8ëŽ#X¤Õ­bÐ%î3éÂNDþÉkL†gñ$4qÓÿ1°³úæ_ÝWöäf+>‚³3[)²­„¨?bWï‡Ý„9‰× ûô$¿ßŸŽ˜–¿™4t üE œX] ÏÌîYRMæš“£:›¥!Á^A°¿ÊÑb€#}dRIÇ~¶ÊÈbO³bk‡‰´ •@Z÷Åßu.Ñð&ƒ/„º¿N9ïO0ö·çnŒ´‹¹þÙ;É–ê\:™ çÔqJ !}B,2õhæZN¦PÓ/ÃÛ Ò8Õšñjmº¹d=Ø••gzB:¼c9L.ðÈÂ÷oÄoE®fi‘íÉ‘ÚU8âO„½õÐO:Cޤå˜.ýÔ- qíHæÁ¹yðÍEs¨¨ç-Ý›D ÏÌ•?“à`¤¤â>ä5š«œâ¢ ¡¹õ ¬ª±›ƒG£ÆÈpkѲê„~4•û @· 'ÎBhWè _’¥:¨b3Ö^tl«×MóJW&üšJN+˜â]Íu“¬áø Ð…R?°²!`šî¨‰NZ0cwÂæ5%1öfëó®ùÞKYiuÅ<ÛÁÒ¶º™¤WÀ[{ž™Ñî¢>ðOÔˆ)höuõY"ѳVyàï— íàGLÁÖ1šéHus¥]\µ—òG °ðY7Ó=:×Íšn®g+Õy>óÿ,Ú7vqq‚E\`ͺ$r&± ¾L$n~¤áPd‰¤ÙHOŒ¦›€ÔÌÁ¾ê ™«zpGûO`$¶öîÿ/GkûÒuîE‡k.8€ŠM‚l¡mZ1®¹îÌhÇ\ÿ~¥cÉfäÄøuÒψ~¤Œ›Q–páü`¼­Ð }L4©¦¹UT¨“éÚÎ)íDÚDvø"5‡¶^mŽðêg’\·â:^J€Ð®ãÃdÎØy- h&~qc½áaÓ¥% ¼ÞVø€’C•‹-KO®qÄ Ó"r«{*Ž¥‰Žkãq"Lˆ`§ìœy ̳8À×e]6‡,V7<_bȬgQVdÇc×|ªâ‚,,ܱ]54ù#ŒÖZ Ê^ô°4ú¹z§;>;Àã»°ýªûe²,ÕüV– JL‚‡ì>ÚÐbÒÇ ‚-j6 1•‡á#Ž^N³äçÐÞ§ç3YBÕ‡8pç:ØpÂâÔ¦ ~ ®¿~i—:H<l­¡žqÇf«?.~É«ïË^¼î%铯>Œs“VßоKX݆:§fžX»ÿæa WÀ…Õ¾7îìo-ê¥Òa¤Nh~°Ö¨¥V™oKŒÈk´[·³ÏAÒfCøékÈãœV .ãз&ä ºŸr:ÀUÒð3d”äÿ[¹8Á$kÁŸhŸ?"v½ïb‰Œ‡$Äœ>+É9d m'¶Ï;rˆó^1"ÐDÿ:f~rá®÷5ãåÉ‹°\ÅGtÇN7ñÛ !âÁƒûâÎeÓ4\YÖ.¡Ý[_JÒ>0$ j4V Ýê£ÞÑO ÎTQ|²M(_GáèÇ)œL#O¤Èû)x¸Ò5FµHª4eZà%[Í0#­>q#r}–l¤:\Éq66žºk¡ƒ&¤²à‡/\M¦ÍtŸWx Ôô«5/›-€S‹áá´©WyuÆ8$‡„ŒÙS`íqMàÔˆËÂêý5ù«5 ³ %h*¡P"×uw5üÿµæòšáãa-Ñ=m›öárF¬å2÷Zþ"ël³e5(:ÃÌ–ºv%>|ÏŒ>Y‡*½òçöÞˆˆxUDÀfpizŒÖƲ×x ‡þ ãzÍßÖ52oÝ~| v2†y–îRµ Xz,9—jÔG•8ùUñïå=M±{”›\Ê >ä™”¥u®4Ÿ€yùcH*#ýóŠ»&YÈchY××ZÏnDÇ)r ç»K5•Є攕ØõÂ˃õIF³Ìç9ð7‹%…¿ƒëBáAJ`ÑÁ°Q0‡¥@¡^é²p}„NÕhP|ZOèã1Šgº”8«°† Õ3;ú鵬u’Dã™×*2Dcâ—ÿ†ä„ýwi×n÷2 Å„µ¦i/£2’o¶†î¿^U‚(u!fKž&Ëåx…숶Î%¤µdïd\P>À¡ 8·\GúÑ”.Ϥ`¼‚ý&=u-« P[éöQµïfEp†„ÖUã;dŠõ‡ù²f?R†cC6]œ¢ èM²Ö5á<m†C\ €œÂü+ÌòFå=oêÈQm™¦ˆ-€?–ß„û‡aŽbWL~ÍlJ• ã(mC!íf¹/qþ$ÿý‘:©}$Mº­±Ö¨ÁÞ‚’#;4MòÊŠ%iÍÀγÛê5ÔÇÐ~%4'ÉgÀ‹7³KC2´˜u¼ q‰::ß+‡Ö'Zù¿Ã‹WÈi²Ÿë`ÌQÅ|z5|&×(™IÔ«d=ÈÈ>ìŸP£‹à>nX¥õ·ä‰Ñ"Ã>a!:X„ªéùr7î ¤TÂ_•ºRBSì7Û®— ãÚ—áû{8\TìÈÒe § p4y—¥.ý‹ýAÞã y¶nŒñGƹûJO¬¾5W?}ÎEWLxìjc´aþ·ä²ÚÐ(!-@®À(J&ûJHI¡#÷°'%[€AÈ"¤\Šÿ WoûД´dR¿¢¸·^éW8×KT¬Õê­4+̱œÈ=¼­¢'rBé\6²,âê—ç)Ÿpt'EË­öÝ:ŽÌ„eP^Ša’qFãS+÷—/aUðz7.mÍÔ- Ü{ÂcK7!G«¢˜W¤e¦kš%!èhßr‹I•ÐvöœÏ.IËøÎ}ªÎQ*´k[vk!}+ìÊ^ß›¤gWíKQ³vi½ª'üRB—¯Ö÷€$n¹×ÇXŽ.‘Œ¢ ŒóŠ+yå •PÖé’„jÍæþÓ}¬ÿ2¯ÄÝ®50Kvù÷²äå“ê{¢}•ÅŸ÷$ÏEYР­ë€69ºSetü¥²c/Õ÷‹UZ£û-Îañöòñ•6Óþ¸¤$xî¤ëz±Fï®;iÉ.õ«õé¡ITFmTöF¢×ÍPp®—väÀ`,àS¬ÜÐt@J‰KÛjB¥nÿæ^îÎÂÈ òÛÆ%ѶÔÒ>ÂqHùeƒ¢í¢mn(Ã4@ÑØåMò¡ÛÑÁøqb¶†°ÖŒ¹&&Ô1)›—=L>ÿc®w96ÕóK ›¢•ì†3’ûb®Ô07õaÜkù¸´±VŸ¥ðgÑ¥GTÔ¶ÁȹcîFÒš‘æÓ©u’Æ¥.Ðv?þkk¯GTHi^‚ÇAðÑíNó¹ù ùá”Éžfœ“F­À3$‡^ŒÆ%“>ùýNoI˜Ž¬<©!I@ì5;$7‰‹»†.nÝ`ePlÙånÃFX‚>«þ‰®xèw঑°2•é¶.ÕˆqºÔPcŸÿb(ì^+üþ×Ñ(ˆ`€óÂ}B Ô ·Rý.±ú+pÔïxü¡˜d•6Údì’QõPωgW²u„‚ãÂòaú'i''¾‚è±Ë™Cî&I˜ÜuáõØ”ì_§‚è´¾3ˆ¤`”µ‹áÉ m¡U ÔøíV†æ¥uê!-Ô˃ÿ’nT';cþ0É®žPëb;eµf2kW 茛WÜ·\ly¥¯¢ëU¯’™v— ’ã=§ê q‹±ÄQó’a_·‚¥²n³§ ó”°íIÝ©MÓlô [Ëxþ à*õóæ øP4K©zK*ûÊ\V÷Ð9âÁ OŠO‚8ã9Ï#ëYùO©X©“=OYA«@íóâÀ,5$âž;Íz?ÕÌà5xe0­ašÇMQyžÜø:…eR É@jž”B5c,ñ>ªÍö¾iëfxÔ5f(ûIÂú[”ñjÐLN ´?ÆÝC»&1Â(²m ÷4û¶Æ¡)œ»/JÇ[¢a×O’É3²%ˆ ï1Öcã*<¹[…%=ô[ŒýÚ󴮇sï¼ÿkârˆßŠÏ Nn¾p.³í9ßb„F(¢¶ë˽?4ŒšŸ::ór/`= ‚Àä…òÒZ¨E»É™íµf¥kø6¦÷yWõœJÅ3°¡ã”lÒÁöÝe¢oT×ç8âîž`ñ pNb˜µ¸ÓYÖãHâ—?tñð^‘g<Ò앗Ĺ ”>Ù»v¹p•¤ÖÍÖ¤Þ(8Ò£õM˜dë¼ÎAëØ¶q{v § fãAL>HÞÙS§q5q/±TO]ЙQÈÏ Êì܈hÔÖ-@CÚ9=4߬¥«¶,Ù PÈ"~³¬Ì|úÌ%û¶Ð>ô-·LáÌ'…á”qô ¦a,–z¼¥õêýŸv†¬ñŸm‘‟šs¸¶%ý]bùíüý6¡´C³€Ð‰žÂ¯ú×p ð¶ï0§€/MAe©€ß¬Cf]¶=§àYƒf‡à|’’ˆŒÑ[Ÿ| Ôh¿¹K˜ðøY°Ö¬öR’äŒÉF]šB(í2MN¹“‚‡âsžÎí­%K5Mx»D@ñEåxëJ Â*…DíϲCí¼£Z¹ï%¯€¾U1sfÑ7ЦxZR5‹I/Õ3Õíu7M¢sÍ+ÖÛ¾ŒMx¤4º¼(%üå¿jZÇBޑՋO¢õp3Ó³ŠLNáÔð‡fi#C‚‚DäØ8G)”ßW¡ÌØÔ+Ö”IÃ& kªÔMSKÔcçÜæpRWòf€ù™sÉÝÅ[ÊèLÕÀoåÞpÆ×€=§0Õæ±\9X ÎTÔîV2)$2¯3¨ë¶_·`ô)ìÎrà$žV¯p«-ó[Vz,¾$ûM!÷7šr<€µ/óVÖ¥“Ï´‚'`ã6ûùÒ zD›÷mFl>šmTÌi6ù¼xv¥pàŠ³¤åPd®7&½üÂ= Šú¸aƒÁÿ„$!®È£ù/Ž…Ë[¢¡O¢ -Òý×C´•u…dz„ƒÝ!¨Ø&LyðJŽb_v¦Zrød¦þQ‰+>#×ÏûAUÒ´û¯!Ô$Æ6='Äç¯7#ëïG³O±hàÞEòK* |Fc‰êáœâSÐN²øc Z`-"&Òºæ¯ÅÖ+ƒÊݬ¨KëÌ.UÑdµÏø N+6tBSØvP.—á'Ô=g¼ À¬RµVl¯§Ku9ª¾$n†ñÕîØ‡Å,x½¿Ü»Ùº·£Š1úF»y>UZOñ¥Ì„æC?ú®És\^,óâÓ¸Ú@/Ó8©dÍ'kÑlÛ´ô|{^{W~BÇ9ä•‚Ti<tm×Tª2ŠòiŒú|i_¶‘HåιÌÑJÌ '臾uu #6•±ý1ж/û.¬$³þ›zcUç’Ï=‹—6|j‹ÚJ}ÜÊs¤¯5m`P·x^`ÈW„·lË´­í“­'÷ªv –jVËWÂ<™Ì÷;º½72î^ª´[–i$2eá¸â%ùVížÓ[²“F‰d;gÍËÁDÛƒÏ:~ÝOÇ+éAÂJTßìW*“Ò…¶1“Æjܸ0ŒyrÆÛL2Ò¥Ö-¦UÜh+Á5‹5¬ïÐdçjròò=8ËüS¶¡Ýp$¦ìóßÀº÷„¤)ò]»ûlõwÜ:yN`d&³aý™Xæ<ýÌ&EE 8c&‡ÇÑTKˆR§åsÅá-Ú,‰¡DåûB²¶Nµ§øc ó =ù–Å¥FYäÛoHsé£=µ›¶ù„Aó´^’`¦ïi‡è§;âåK¶`>˜@Z3Ò"Ž >»›•=´?®}EMáBö]GCŸŽ•Šâ4ÓdÄ™Má>óçâ³+2dTnæ¶©$¨qùD}ÏÃMÆGê–¤MXCYûåBù™UiËÆáÌÊD1û¶›ž„°ã.5šžRCî¦ob]ú¶Þ*渡yDŸÒä~Ëòn¤þÔÃ;ƒÝ*Ï'†$Ù•9Â-˜6Ҷ̦;ÚBôÌ+ƒz½†8´+È€ÖCgµBì5:$…O“hŒ ’oqþ½/‘ÐÄPQ¦Æ'£¬÷±”,ÍУ¦½™½+dC‰ÓõªLÿR—O´Â…ƒƒèÜ›˜ÓD~á°,I†edþƒ²1ý´:Õ¯ð‡©}8ó#¤“¤:۾̺ni¥`‡ÑcÌMü æÏ Øjçÿñ]d+ž fqº3mL‚µe:×´Ú@v‹{!þ=”rhÓ})¯”íb$×+­ã3U }¢iʳIß9¤Ý¤.c]ˆZŸÝ #Æ<óž)Íœ]Þì˜Ó:Eó¹ÉÚ’îuAa@·ÌD>œüªu·’›î ±¯Ôg¨tQtú£!&•9ô9'Ýj•c÷v|]ÃzHº«ä/aº]ÉÇ’’#ÿy`(8p sè4uß2kÆ4.“l}WÍ‹WT £f7q‡äUS¨ø&ékQ>eáXXÛŽ‘Œ“š–O 5é[<Å%mÙOo/=¯Ø»¥Î¤9vܾô-Þ¡ö\Øß—`ª§Æ ÅÏ0ýàipr{-oe´\!{`鬖B¶ómá#Gƒ®Ùž XMø(:È&ìøƒ¬a.Éóߨ˜X-©íK„-¼^hÇ}X̤ÆÒC2«xIA•h„ç ÙE=–¦R'¡ZäXÕW^ašžIq¤ÍîMòÁ¯ Ù¹?Æb¿çÐÅk駬+¼kûñ³ >ûS¸ÿX _NGHqcbŽý.`ètƒJñTmè„cVØëﰱ˛µ>¥Ôµ¥>dý¬wü´µV]óžÏi²Ípn’Æ&UŽga'…ª!Q±Â’[(¥úúX'»à6îR˜^08V?j‚;_u±èo‡`°s£ÿŒ*:„/FÊ-&?þ˪ö H sðüš8è+‘qÕ!cG¨i3ö­€ûÿ8×2JùZÿan_Y(-0Þ»8ã¹Ìš!¬‡.ŽzLú{pÎs€‰&öT£&PI·²îõrì]ª“æÓñ_²Î-ÁA†¢ÿ]\÷ `Ô;µM¦Ìê;\IÓ~Ä:W~bž1`ìM ¨ÊAÖ¯=‡AC> JrJŽò~ßp&nœRѯ‰…ò(Yl"aj åU§ö q4vul«!ô›@8¢½¶NS0zâÃMÉ'9ˆbŠåÆ(ŠãÜÙl ^%ù’¼7LÊ¡¢¯aÜÈK|±=é!Émš n}œéƒÇ8¦–·[ÜÆ1ŽôGZ÷úâæ4G´¤â”dä‡À²¸äq:ú¡êLÍ ;Š_ºNä)ìê¸%ùàb~òP,äôaüG†xŽ3Æí†¯ÉLXtÃpc±Ä¡¾9MÉNzr ¶% ‡Œó&£ˆA8LOÙ¢j é®}÷ГJÀ¦§¢`´À¸öé> P•’Œ ãîÆáª–A…C6N“æ÷¨Zõ#Ú×ê1câ;›&"bß"J¢–aú›d1~ÏmÙœ7Ǩ8FH f q% “ƒA£zg[}WŠ×i´™¼Tyûš„¬ËË b‡T~«m4x•Å÷î4l†Ñ§1žgw~q›ˆÂ•ß3Åa“€ÂVq>Ÿ±‘xD.[ *‹ qñÌ•9ôöb»+4oÊ÷=1þ>„8ãYÈAq® )}ÿŸgü×3Îß­=<±(ñ?Yõh´„ÔÍ>|S÷dèWõh†Q”_»A<Ÿú”‡«F«ñJÍ`å¹eÀêÌ´¾&}¯Å0>+캶qCn!°{¸Š»ÆpÌ }CÝÊô©0 Û“GœŒG4?§ÁÕü8ÆŠËì™/¼l=‰”Çd¼;ÑÜ1ÿxpáÞ]×UOm!¿gÎÝ6 ëPwÔ<#ã™wÈ7Ù„[!å›ÛMžÎ[-‘Ÿ€uißß;ºÉ„kõG9–sTÃgbAÙåÆ{¼É¨ºž5òÇ#?¸˜Á$ Ó‰2Œ,E“çÓhÞ¶ iý;ð‘[nÈê;Rÿc&ÆÅ ">æ£ì33»àæ8+äe+X¸z™uPö|™íyO—žØu¬9‰rð܈° ££ñ$ñämw+>#$Æß"U“Qÿ/g·pöx¤éÆa‰7¦Ø6ã ðNÁ±|úÈVèFo>fj)/n½Õ[m´Èâ\u{RcÕ¸÷—À’¬X¿Žïnž`P±¥¦çY³Í=ñާrÕá/ý雜;Ž'žÐœÐ~C?B®³É‘¨ô'ÇÝŸ»+óÔqÇÇÂe„ˆj ³×¹c—ß¹ß4¿:Ê‹—ëÃcƒ‰!oñÎÜ‚=eÜcu98MÄõ“‹Ó¨¿©we¡lðâ¾Sqa+Ü ÖZb.¸j‘Á†ïpåÅÉpl€ãÁÍÞÖ,œÚC W·}ç|oUÒ²ú°¤mYߨWÇCþŽ9R޼p›<=%ØŽý!Ys†Õ8gâU¨Èîa)¥Ä-æy1.Œ½ŠðHYÿçÈçÍUk2åŸ"ƒÒ¯±Jw5¢ÂsϘ]Ô2Aú>9Jûû`£>ÓNFÒ:„WóÞj¶°™Ý…æÑÁ¼Ó +uuZYÁMSë½Õövx^[Qòë‚§#Ψà×rÂð„RLA‰ÿZÀùê?’d¥ÇmVð³(DÃÀìä2&FNá Ü­J^ÙÆÕ¡ FbŒ1žqÐ…r{P6J² Ã]"C+„ŠM |‚Ù…,¿9ŸªºÜòàv™ãÑXý<Ó¨@EO¾-ÍQÛ=óâ¯ÔB„?gZ¹MŽåÔQò=bÐÊŠU»Ìûö! +ßX²{Ç4Ë‹§À~j„îÄÉháFÙY¦7’â¤ã' (t4ø „­j¸{4žEúüÕyÓlX](OÅuzD¦2Œ°¶‚Q­É…Š,Æ8‡¸ÜQá›Sp¶˜ÁÍÀð@‰¸Î4ý!¤ù¢ŒK yú˜žÁmøQæ‹é…só­+ŽÁ ´É`€”Õ\µ¦S¡½¸9yù/ø›”W¼¸}BaŒû³†\ØA%µßŒ;)Š­ÂÖ$´PV.ƒ•n×5e6“ên$ôBÀI úɰ™‡Zy1ÑQ0°#Dî<  HaS­ð’ÑùJjû`J !‰ v…/j©_tu©½f b ÛÏíÀ:^ô£Þ”ÄOȦР7_íä+y#Û%©%˜HߓڃÛz­ø?íh íï”ÓBon .ý%ÕEÆ$‹éû¤á4N§oT;•»S{É3õá–( Ò?k~¹BËWk£ À’ÊV÷® hEg*É-7'é;Å–zÐÂlf9 Õh8 õEuÅAÍ0{Zì–¨°˜¹>óÃÆÒ·Iû¤aäõ¸â f˜Oìr Nòá oßs‚Êõ‘©Ê¢b9;M§ÎÞ‹ÖèÆ"KõM«ÔöÅZ`} YãÞRtcj’VþªË ¢~Ñ©ÓQBç¬B×-ˆ›º¬/ûëòMÃnÅ™úâvç|ÞUù%özÏwí²¿•æ ÝM6·Yе®N§2!Òb}:GR4bŠ[qî}âÈ;,¯”UÝ4ɫуԟîd­ˆ P:"Ìíà¨W–ïYSt‡vEp7ä>‚¸9{¯‡*!¼ÔPš44ZxµoÅVæ,ꂆWkµ·#Z1+ú³v’&n‘¾“#0¦"C*ifvª…ކœæ_ét›åÅàÛC¡fõ`tÈçÄâ~äèq¼óNf†$Ò¸·ðâT– ÔöÚMZVœíÀèE¥9+‰õ’Ha5+Lß/S—º 則zW.Ü¥O²8ŸJ‘[°,w¦ü[å3´âF¼ ):ʼn>8ŸSõᨾŠÒ¹T_Œò£ï­>„ ÏÁJ˨(“ýs*´j-”W¡IKeJÇÈ>ªZ+Ú¸ÝÄ&ÅüX*µ¤Èn³YKø<Ì!eUøbNFÓ‡Æ0‚G­/ÀB]=IÃ|ªõUÁ¢lNVà Wqƒ31Á‘‘Ú ŸKø¬õg]8óÝ¡ëËŠÇñ€Ês§DÌFmØH‰§Ð‚­£Ð=fý$Búîúމßìˆv>ÊÍ‹ÝͨOZ®˜‰ !Iít48A2hWøq([šªV6ãû“«ÌîEe’¨ *GtŸqx#E$Z{<‘ù™àäÐN3Ì€ZÌ ÃS`¶“,® ™i§Ž; KPÜÑL>¦ea3[­É¡ˆ«& W&ù(Ô@à ˆtŠLþ´ ø¼ª­8+.‘áj5wŒ~]?Jtºí€ru2PcÌÏ a¾Â 3 +´i±d˜ùq]$‰íÀùÕê74R]ÿC²†.͆ÇêºôI‰aŽŸ2¿å¯o&ši`ÂøãÿlîñøãÏãA<¤ÀdV#eU8aâqÁ „®|BÈâ7€µí€•‹û°uH-Šæ‘q*à‚þ‚ãÊ¿PFˆƒ—ƒþ9º$žŽ3PÏFf3«Àqíãh žÍ\ÐL@Aø©“™²Ùæö4èl0 °8ŽÕÒ‹š¨ õ‹ÛY^¥ü8vu4!ó<•²1>ÂPØÕI¹¾3õýÏ,i‚üŽÉÔ& NÎì ÊÑí¢ Ý%É1Ò]œwY~e(n§COûæá‹ª öW2B‡òÉ  º$6­e®ãÞ¶g5ËõïTäØYÍu¥¤–܃ ¬ˆMWæDƒÕH-—3]*e85È'ŒîóôK¯¬a»ŒàÕÔíŠ6âܕU) ¡zç À59 c ¿9ÁöMÍ®fÀ j^öÌU_"BË¡<Á¨Í­ ÖbWj0<ÌÀ+O5¹®×Xù±»W Á'ÂÐø×•àulòA»òõÓ×A€ F‚Fç`~ÂeJñOæ®~G׿" gv¯Uñ¦F“d„µ‚¹œ¦]°GdþǨ6vŠŒ}7[wž$ pÖ„ý€õ§†”!ØÇönfÐqŠÓ÷<²QæÞ ëátU|JßRV·ùe6£™Ì[¬¸D"7—«\D+Ð&!«Ó(›-àyÌ`©eâgzkS’…rP>ƒ£BéC¡ª±7`gî;ú„>Û¿wId†Õ ƒpB¹‚keJx©þBZ å_âW2¡rS=¸É>¾êÚGMï±;5µ‚‡>œøÓ@húN§Ái¢ÔbŒ›uFès¸•útÊ2½¿WIÆxÀJÙúëÈy§@Œs…lçdëùãJ\® z]ö! ¾eÓk vÏÄÚNÇ£™·š¹.U˜s5Hj þð3ÊLR( ¹1’âŠúÏ£¼äR/dÈ<`ä…$…šÀÚj)QJávІOS}skW° o¾‚ Çö÷Êneœ¿Ù1OçUþ¤Ö v£õ2HÓ0'3ÀÂTw…UZVÚp'øb~s3–¢y(`ÉA;‰åhfN·¨@ñydGd˜\—dHYÝZÃ3«ñxmN!ÇlàŒš:7ëcÜÂê€ZП‚ƒç¸~T`p¶ V#µL@…ãÑðFÒ…ËÀ6Z^ˆ›Øo|^¼RF1eÔŠ¼ÕÇC³f0¢¥ï¼šY99¡¬7{moÑ4Ú¥„Ô,lV(;õ]‰ËPxžjwxœ<àZ‚àœÏPÒÇG¿a$²£ºËå3ø–¦6ø;s‚Ý8çŸõ9eÜcpêÒ§¨.8©ifNXÉfQÒª¶ongÜ•ö_²Î6ËQ‡ÂÿgsïTF4mìŒmª›^ýà+É"3çTù>Wþv ¿¹™P!P¾_½¿ù¯L(ÿ¾Ã·ü¥é®iÒ>ðãè¤ü0µÜEÓ —»z®ž}e iN®o^$˜^Z ß2©4>±?˗Ȇ¸1±9 *+Ø’j£?Š-'z—ûàKÑïI‹Òø]÷¤{è§çgöÙ5Ó~`&¸0vq|6™óÚ`g£™ú˜RË’gúÞ5%ÌJ¾ê0ºèîÎÃ(»bÅŒˆuRΆLÙ¡ UI®”6ÓbmÚA°ã“ôÝ`ˆ…°©0*—¶Rec+U3¿»ÐÃ\Áã>8¿Êœ> eëO[ËêÒF=¬ƒßÒç¤j«wÚj¢[z×Ô×¾z’œ0Û?w[ÿü«þ«ÒFùN¿çÿV)Òw“|ì•Zé×üÿâv¿Èÿ¹¡^ÓsÑ´ïô{†¹ ÍHæ1+-¯©£–׉ÈyÌô7AjݦÎ&»™RxöØæ?½xJªé×TÞfjÃlsa§ e“—(!ÅE=%ý=æà ˆÕ I¦Š¶ÌvN:‡}O9¨Lé¡8øÿ®ýÍ:èÙOÇ@;Sô™ R@Hð“7M7¾d–Æ~q*SƒM¦<é»þ†îHè‚ðù>5+ó€ê•ʉ™ÊmÜ[ë¬Uïû‹6¡»Õ/:¾p¼(µ„©íš¦Ü5¾¸ÊÙ Ü”2ýÐ`йAëa_¨ƒÁ7 @mCAä'Ÿ…5ºqU¶Iòε>ð•°ÏÀ5í]UlŒÛ™5J—Áà9bxÆ«±J<ÿi×Tú1!íˆâÇ‚.§±@(?9_O‡¾Â·'GÁ Ôó Nà r1¬,d’L³j-ª=Q^ÔŒ~¹biÖÚ_†žý~\¹i#5Í—ªO¢Ë@äÏL@¸7€DÊ µ¾Ïžg8‚0RãÚ Ñ2Hk¹‡#›¤sLÓßu xœ”M›PY˜¯…},üËŽ3ßøUÁà1¤à³ÞÙãÂóò—S-Avy<Ö]8_Ôˆû‹86¬èÛÍ£óйé}~'ù+È*/NÈ þ‰8æ·\m” g½¸WõÎkÕ6{!h `£Íè{åÀfE«žDìäµyúû7F%]NÃ`xªR^æ‡18·µÖœÃ|–Z9ç¡Ä&›k¾œ¢&³éÁe6U)¯ùZuñDR´Aþç´{qºl„é³k¾œ¼Q;™ì%,ä_Fsè ÌOäøþpÇ ÚÔåè\Ë4n,}ÿ]ñ³å+ÓQ]ˆ¾¦Ó†UË˄兼J߯¹ñƒ¥¬òù2ðžë½x”0Pà,wœÃW"̸¹ð:RÀM%þË 9eÆŒý’\ ®(ÎR¹©<]ÒšïBÕs|pAYÓA§õàW•m/¯:?”UCuø¾²QVÆ‘È]©Ñ_™¡¦÷Éu˜R›î‡Í^¾Ž³Ìær±k¾œ°Ê24Š_à A’ܧñRè7ø‡—nùr :xuƒ97ƒè,z²ár ä½S‹BÕxcÈ|§Àa$”o\»÷gÏÌÀüŒcôf£Âyi¤Ù½&ÃeÄ „]…JâÀˆnhÜ*ë')«æ&_Áѕ遲):{" áVö[…óRìºåj ð^F”W•íÝ!çZ‚(Kn~ب¢/\pX ƒ•Q?°]ÎgáÑ¡_ðš_ÍÜ•3žœ½ÂàãoÚêJ™øÊvå'£=wƒÃ`ða…¦Fõ>þI±+ n.§’ØqanƘœ9Œ$ø‡•ßoüÆÞ2 ^…auaògžwæ÷U5./V:ÓX@%OÐeÚB<õÂÕòd{|ÂF{˜[ðj#Ž~ã™p#ÊÖfÈ6ÔóÍ8Þ$ÅÃìP’ǸØövprá p¼¹- ÁàÂ_ŸŒ¹Ã-êÃde6±Ã*˜scW ”DƒQ+Lµ2}EãU óÃAù2ŽÕÄ>O…Ëpj2.O*öZÀÚ‚PÐïfî>+6É—B  ÏëãN5K==žån²»úYµ(øµqs­öÑÂöÝó8qçîá4ØÈçôC9kô‡ó rYÔ:»æËhå Æ‚ÚW¼Ãe•~_™o°å'J<¸¹œy˜ÐàEèÌ^ênÉ©‹¼r¾ ||'nZhTRÐå4 ÐY å£]„GGnst†-P¢cᦠ•`üçb‡’­2SÑ”7Ó¡:Ïÿ3A¼6eЗ‚‹ðé$}:ÊŸÞ¦‘>žÖór}9âËÊ]6%|»?¨;^NÒQ0gj®—Áà›“Ô¢(&éêã:«øõt3µ†¯Gܴʦ:Úç?ýJÂMSéÈD ×Ùjã ™»t‡!IÑ¡&œàwA’žLùÓe­ãBƒ±Û !Õ kUÉÆW ϼ:j!ÙHƒëÆš•ÿgbÑ» xƒ­jš¨½WH6ÕÌgZÁ,ƒÑ¤÷RKíÒž mö¾¦sNrœÇÍ¿îÿ|Ë)Ü0õŠVïTä\oÀ7_ÝÆ„Ô§5qÌ¥,ƒ4ײɯfjÛ‚(ƒ1J´4MáãFÄk–¤„ŸBpÄš+ ºu.àMSN´_[£ÁË—VIn®¬ä‘Fi?€öaàà&)p¾jq¥”/ðÎ[£¼PÒŸñÁ‹«lÁ%P—$f¬åIßùϳ>,x8zØ€Š¦ôÞÇζ¤eÓÀ©,ôê…U^Ù;Î@ì ДU&6ßw&SÌÔIRð¥XY¨¥ÝÕbÊo™ÀinçC’Ò½Õ¢ŒïG¯"WæEµŸV+—aˆKÅ@]½!×¢qI¦Åsή‘:_SQ`•"”ƒ²f¢?IHs–Z‚Æ.¬òâVÚTr® ý"5òªëEŽ­’jcôkxvÇKÕ£R­ä£C áÇ¿+3ƒÍÕs­Çonh(a¯ybR€ A¤àK±Î§”<@ʼn»S=35%‹àWsàà'ojø°¨Ï»³É;&ÖßÜŽ0µñ"b»ãf݆7Lf˜Ø¼T}9´**˜õYäÙu8ü1Ð3ŒÁR‹94qeM¹0r~Í<<Ä*Ò‡QöÓÁ®›Â¹É¨–G„þÐK£ÿL.¤±"Û ˆ-VeSêÃU¨ê7óÍù[M0ÞWº9ê¨-ÐÆeooÊoþjËž¸¼ìo)žõ÷zÕƒ|˜Öµµz°DÏ>éÍ{RB‹Ø²":q`Åj\­²Šn¦îŘt%-}C3’¯Ú @ú/Óÿœ ÊÜ (>•4›úsÛmþKß!ãš’ùÕ¡pwY—áŠ\Ý¿oŒÒ×¹Áhžÿ ;ŸsÇ- ošyEÏãN%!ÁÞîŸM !Ó¤Ò(žS«Z[·x ³›`q†k³ºç¡é»Õú}7R¿OAóOHU2£%}'6Aß…m««¸M«ñ5k4eЫ9å—Î)ûý†ù´ÝjèQ =Ý¥†ÿp÷bBÉ´ƒáYUo´¼ ×Ä#ªQ‰(ÖYÍ. w:wŸ1”0ÃxÃÎOùÅ%³XNR°.)v ½ãù.8 sÙópWh쨸œ¤§‹yØ,éé.3ûõæÆ}ìÜ×ld³îrB_†#8ºÉ28Ð;ô›…ë#̵ðÏêóXmN­v {6<÷Ü×þl Ÿ…tÞq.+ –ÓX6ú°“ ûtØÐ/‡‘ÁàyàÌ¥—Ü>Ìõý&Ñb;ˆ‹à“Ø5œ$wm§˜tûcIô·³–©ovŽ"£Ú1Pxƒî®WQÜ7ýrƒÛ‚ }Ø•Y.ë<<Þä®Í]Z£bˆ÷ êÚ6$T†ê`SËà ò}f¨|3Ê:ã2]¸³?9GŽm*ÍKRÀæna³âxŠ(þpòÈ_eo¦Fí… zöìÛeû4çM3Þë`Ó}e$’Túa: v²Ý˜ïÚWávö ½3ƒëÖ¿ó÷íìFwOwö›6UNh—SÝê!)ˆ2øMº ~Œˆ“Kšˆ/RY˜‚(?UÝbµ8aÜæFƉxF%Öƒã³ß”U™Š‚fÔW-bg±ÂÕgfæ0s¹¹Ìµ ¼ñ~mì[[Å“äTs;^9ˆ‡ÑzRfƒ8ë…߸WV¸ÆI ,ê[Mç>/ÀsÏÿ€¬Ùƒ³éàzï’½&4gÜ] µñZÒ ‡œVßZ¡ÝÖq„Ì}þßíÒ‹)/– ~œQ!lŸ¡óXE´4îÎ??ø4‘3 B  ž8ªÄñB5+TÙ ¼ù“²ÃàER‹ñ¡zŸ¯Öon·~ÏÊšJyMøbSuÕz0ô„å²™à=añ<ÞäËÇ nšDõ¶²;»bÛ¨˜‘œ/wØô˜A{†?ÊWðGÓS±©çHy)T ØÇrœÑè«Z±W£ ìT6W~P¾‚}’XÅîf&Gvs¥;>r÷Z7g¡¼°ŽÑ–}@Œ²[=sçÅhÄy\Á¶¹ur‹e8µì„¶œk3,”E«õìAÏèZÐò‚ôÝ$_^"ó€Ôúk껉¯Ó¶e%zÔ³-àÀÙ ø< < {­²Y­·×ô‹¡ú°ÏÒ;ùZàâi¿!ãˆþ»Þ8æ?M1)Ƀƒ4ØvTÄr ¯æ¥WÙß»`grõEÒø&Ê™2M ‘t¿j‘[’¿Ã߈Ãâ]÷k«´©LÇŒdF^TDçùÚÑænîçßÛÉekºÝ96‚ÌHÚjÚîä}Þ¾1é»k¾ŒhïS,_ƒC¸•[Ïãnåz ™Ü±ýþã\ïtFw©HsÌzñI3µ½Ò^çÿÝ«lrÿCý¾ a°w}G+rÿÿž`ÇÛ’ç?¾º¶MMT ¹ŽPi@Ï÷”­SxCÚjx5ÜŠ=û­’ÆÇÈ'ä‡Fl@äªèÛî)„v°WFðMol“¤¼&wæ úKŠkÑ~iΠ°Á÷«_àÃûMèZÞ1‹ãà«jÇNBJœ§$8]ò4¦´šíw)HõÃc2臦H’t?þ-_¿]î•{à¿hþ¿å6w: óLŠ è¸™ÿt—žI¡•2}S¦‹€;•BY”ëA Ê]¹ÁS „vÍä|ÝéÜö|o7Œ¾h¿+žÔf—çûœÿÿú'S²c ÿܽO ‘4î$í„TîônTÿ¹LÇåël/ø¦éQû˜ô L[ vº-n?Mw:n¨ ƒALmh=éû”LõoíCûú-ß|7‚BbbŸÏ$)ä ›e¿¤Ìü@kš© ¦hRP¿‰fuVVbÀ§F…ò¢6v|ÑB9°8VÙ"ø# ˜°) ~Mwc]7¢p!¤œ³è J5Z§j!Äð(ÈÐb‰~NKË9×.f®>Û™zf%ˆ[°¤à xP{QC|™ÂêxXÝ÷`‹5þnCéR‚|Œö+æç¡ŽUd\ ƒ©Ñà0Ö~àëÏ—õÆ4ƒ@»ÅåO—¯§gÔ¯eÊØí+åÕë¿]|S&8R5¬ÅéÇcØz×Z„Áj†[åÚÉtºîá¼è6òEÅ«'ÛL^q d8>„”ÊÖ<úQ¢¥}å…’ˆx˜|…íǃGð_^¬¥×HdkN}¸J ²ÞÖÇ0þáÂF;ñ@ÆüàYÞÜ#ãrÖ‹ÁÇ3ËÞ›zàŠz™:ÊpsaìÆc׿ÂYž]M2ÇóÑxý¿¯‡GäÝŹ–˜×vZ­¾(S^îÑ9>žp©VëYìàR[ÛÙ-6G‹/'œ\¦§››2¸«â…à,T–‘MË~ïx˜Ã¤0ÑcY+ùæ˜q\º„Ûéõ0µßÜ,Á#˧In®Íà¶p«\a§j—ºÜ]F­Žû‡‹b½Ô {9^±nï«qa0n ëcÑK˜á„²óÆX«0ƒÝ9ᢧÐÃD[8s·l\î —Ù]yÎiÔ_¨n³ðj„¹‚-~6îÒÇŠâpAŠ‹m¥ ­»:“÷Ne•„2ØêÝÕæQ[¤¨¦hÙ ÇÊTÔmjs&xœ/0’ae›‰x¥v,ꇌl_[­1¨ ëüw­Ú£ÊF¬À %l·o\Û¡”MØTŠBa×oÎÝX’ÃàEfBrìwݦúL³ð´86ÏÇ(|Ñ-óØÞÏâúp•ºfzPRP¥ðè®Beaß'¶Y°Õ>+¼g×oÙ‡\Æçì¾cO9jÙxêYpt¥ZMýUù×]ê:ÞB®ÛIŽeô#ø//Î×ÂßÒ=ž\=[‡×˜¥Å¼ì‰Ü2v¡´¨Íõ¸ÿhÛé,^ó„å-'d§Ë/+Hd†êÄ6É;'÷çlõ‹ÛLÁù>_JvôÇÑÍÒ½§Z9PRp={˜Ë±~q ЏYE.Ó‰ëÏAz~êà!­²MÍ|ÿæd\ª_Á#Ðï&l¦ñ«Pnô±u~(£`Ø(Zí6fÏͳ•+ñ CU¶Öi½Ž>Cë‰u÷øRçCð<cÔ¸|nÔä e̼WϳS4n”žÈd¹ðoNÑÅÎïo‰Á…×ìøVLYq¼+_¦P’q¹‘¤tn 8Ƚ¼®?Nήg7l²X6”^< ±iÚi`£$´n\Ë”áÈ(»0¯²±ñOßþ­«ãNóÓë´¨G4«x)Ô&µ3 vÀ')P¢~É`ÃV(/D_wSI ; £ì;ZIýpÒ ±÷uÞ‚ä<œu çN6§ƒq§F’žËà‘’¢…7½fÏüõ½ÝJ6f¶>Ž–?ÌŸh)õñ»?ʼå9¹Ç²é‡IÜÝEæQd¡[ðÿâ6->•ó“V†Ø7*3€cZÕá*é¦D3a$cÌvÒ.îvè| š¸¡´!®J‡­æm l™©Z]@dQvÖìƒM7§&i¡•’òš=®Ÿ‘A´ ª[lž”dÅarPéÒ—m®ÜÀ8Ah „­$h4š*¶z­ºjé°A«Öìa“~Ü`"®çLø®ysÕ×yÁËoª Öß÷lY6šNš$ÕššŒ~ı¶Ÿ6_éÇ‡ïæ°¥Q¶·ra¼…CoŸÆ2ü·iàúr^ÌÆjC8¸ ¯ACBí‚bŸÂY]¥³»æYÕ霿¡ò*ºŽC´ó{ç¸ÐÓ7å<%óÁ þ6Á®µ¼¨Õ)UíNå…Š2Ÿ¸SõrRPMy¨âG A¸”z3g%\ ]Sš^,ÒíƒÃ  q’̀ѳaÑ0–G_Ž¿$ß8xbáL×Lù îj«‡«á*Ü tÞXèïÿ”ãœ=Õ¯67–³¾]Bg›Ñ”1¦úÝdð ìò~ûæ¡fÒ×1ž7CH©IAµ€ãöáá.g,¹›7;á\Ý2•…>LþpåéÒ‡±’aóõtéO÷ÌÒ‰„û¬ºèì ÿ°SÁ†ˆô)ïÚ¶Š@?ª-g;ûn¢SŸÿ<4Õí>…0U6•׎üL§Ñ ²¹Z3ƒ ¡ßÌoWdé7é‹ÞÚ ÍpE’®”y‘弸Pv¢9c•‚£”¯˜û(÷?ñ>‹½},7ˆò“s”éGàxà£ò_vÔj½j'xø~~rÔ6“|)`Ón8õJ;™èiQwç±|I1+ç<îi^ïÚ=^e3ÈWÊ”¼1}†9_)*ãë¦Æ~»Õ0:çðÎ~°n>}•q(\Â`Óíî:ÈyÄpâ° ®ÏKAkQ ‹‡ÁH(C0IÀq©þe¨à@ôé*ð÷î¬Rya±ý3÷P4YÓņ^ýbÇaÎèF’•°c–Ú2OÇI(Cµ«ï/iÛÔ!}ŸzÝÉ G# € )ùËE Y™iJ-¬‚~x,Š^ý¦Ê†% Ú6 ðN2ýš)M•ÁÍÄëJ_c®”EnYA3æ«ÈŸ©kÇàGVv8h€—~ÅÁ {Hª ™½ç1uœFu>ÿ°¡«¾“qƒ7+fö«þÌ—d€›ónXù-¸¯´ûƒ‚ðÒ [œb4öSn;å¹9Æp"ø4‹¯Á¦/vŒ®+2¦ÖMSÊÐv×Áåò¹j2eæÛ±­ÏéÅ#èÎg6±80ó¡‚’gKrðódp x?j„ÂcçD®y‚l3­zXdÀ(bXŒÑè¸0þ¿H$_½OÀËàÖ;ú¦Dƒ¡qoXsÜŒ.ÕÁ¦ðèÈ´pï3ÉHxS鉔'E|쟛pæʦs¢䱕ÛwÕ¿ê« ¿Ù˜J¾ 0¶»1›ß(ë4fŸŒM'övfræ1¥ ¡¯ÌüÆ9€é—‚ä HÔ€Ä> ˜¯‡Áx`™6‡6øÁ¨.ªHyA-ûÀoPnOþȉŠ8<ü® Óh„Ôo/èì”YÁäU¹)áw§-‰.ƒÍt¨Žhs,u´€òó妼œj ¢üdéǧa?ò9?”¯`,œ;+ç/Õ¶À3›ü¥Ì®›Â™iÁý.ÂhDpp`T²­FØÚ7~ª<ì³è©åx r`Ÿ}íìš/#ÌÛ·Šzïzënèa!¼§˜Ò¥’¦”“ F‰Ç'fë²Ø„-wv5ûØ/-èn–ƒÉ,?Jéõ7 Z,€ÖëFi_…0¥b!û>Œ»³+Ùž<ŒÎ=Z4[}&úý>;XzúúY óÓž Û¡=Øç¯ß¬_ˆx™ËP/’dX_H9L‹/ŽHç~ƒS¤GXÒì) b£­P0}E#;aëFô¥f¸©_(|æs°uí?ô]Ác®^¶Úg“QH‹¢¤áÁ¢Aà07¨z/v¦]6'ëëlT §@ª+fûé`Ôj×|—;­áÎ\‚‡Ù®‡É/ùt)œ¿Åò€0…õ‘/²¯»z`zð,×çÀz>â}~°¤§‰õ+s±XE0QKRêñ q懫o¡°›Ð wúõagI#x:êÿmÙë.|æ3ÙAAÄdìáüÕöcMãU>Ú_Çøž>FŸ>ªÇ›ÛÜ~üOäãy€/Û~Á{ݰ¸n`•"VÚçC•çHÖ§ ³?y燯ÛÃŒÏiù¥‰g€ÿÇâ'c<[øxÃzçá)ÿO¤ÏÀõ°ÃöwáǧûŸ‡'Åÿ b•Õ(ðjÏRÍæö³š*’T¯ l‚o(€u'©–.?X_\°ot«'YHÅve†õì®…áèÝ‘½³QÿÐÉ_•gv°HP™9ýp—µXS5B}<°ñǦžÝLG7Ù‹ûñŸÛöá¢ÝZ\1+giÁyÑànOÎ×Ó¡«ð‘ià ó¿yÏš¼EÜ|íT~PÚw>£ù7ùÚÙícçBŽR‹QµßßýçéÐчì%Rå¬ùáÊÓ¢o·êË“qø¶<Ý£‰‡¤ef{Áµ?Ìù0e8¿wˆ¶Žíh™ËåO;8ü…#«0ô‘%éÃâÅf¾ÐØ}†èLJYêíÃP~Zï+ìÿä_Ë]x·î1¬·~uäaŠ;<‘Òrµq”li·/‡_#ïsïè9cç“’ÖòaªlO׿„9MuÍêåN óVH¶KõºàM…þÜ£©mÔéíXÝoŸpç¼1é[6ÓLƒ¤–…?ˆÖÂ%]NÐÆY8(sïw—gf²x5ÿà"åáàæÔPk™>k=Ü|„»üHêj.œÞ>³Ÿø< Ãe0\³F°K?ËrML쌋yÀ*Û$ØŽ3™Nì0×ú?'ᨨÝSèëöç„´#Í A2®Å9/3ƒêÙƒòì¥1 ÛL^ŒTpèò_¶ÎvïYㇸcH1kó{"t€Ïnzô« ÑmjþWxGEJ­Vúõ!9Š Wi»ÙkÕQ;¢Œv–è»4ÎŒÏëblÙ mNøùñXÚ¾¨[°2ýiÎPâªÛRºã0ÀÓó—ÍЂ¥íÝ ³ÁÇàè–A?«PÀUȬëÙ©³XdÎqKêÄTÜi¢³ÀH:)|è›%PAˆ´€ô‚:\ƒH£òË1°óòì‹öõq~x;·’æöœˆž–Uiz”aqdI»p!4òR/¸]8R CýhxXUÞݪ 'ÖãOIpªP68fñ}nIݲAu;&°ü^á$·‹ìby‹oX@Z¼—ØpþÞgØÞ‰žt'¥ºøÇ¯/Йš×ÝŸ–é:ÞŒp—Þ©b OÒ<5&ްý¬Øá•=#Ÿ]š› mÿBæ~ZÈíG›P7·’Ÿ [wÜÉRL«¥ Mš]OLá¯b“Q'å…iѹ½Øý•‚4-¥#Dç+×8FC•Š’3[J{720™y•Ê>›c Q‹s0†õ)”›û#×ÍÅ!=PÝ/­;uñs :Xl…Ó\~Iå!¾¼œïøš'TÜéSJ—ÑNÁk‰'s¼_e£jFÉ`tïê’¨ÓƒV. öUrð>8JÀÝçŽñGèhê­¥Ñ4¨–^Œ¢––o„•)Z‡]j¯ïjÓê És[ôL yl$ÆW\ vΘÏ̤0un‘ Ä›[ à`¥Ë£’ƒÇi½dº]a9±ÓæÐ ª[Ñáˆü—8ޏ¾MÑyç€3uáov,»Ï¬Üa¥3›EQ«Â%ß±ƒ†ñ/üʉ›“Š>°©< NC¦ó$gÚsi$] . Ö*΢ÊýUAŒ`òFÓÌêpIT6dÛÝaO«p‘ƒ‹lé‡ï5Ɉí‚# k?7>ša9Ͻ©ZgÊ‚ZÿͼÁ–ûƒ#ýÏóó=]OÊsK:-æ“ mL˪´ˆªÙÞÍ#É-iŽ`m¦¤í$ Ñ/yJ†.g~x^Èi¡$Ǿàâ«Ç¾‡9D”󱥬Þö˜½‡°rCj$´…¤Ð¥®@^°-ª“tuW¡Üe/y¸¬W—‡´ýè/W¥zÕæÛ ÄÛYž¬‹r&¡º¤P7n=Äp,~ùšï]‘ÞtëWé™ÈæuW¦má;*¥Ò_Ñ$ûÉ4˜ô¢Z1 wzfn‘ÃÎ5u,ÕIue™Ý–]Rðp{i°¤`ŒŸF_¢äàU¶}¾ ÎJqPÛ‹ÆgV%‡úÍÕîƒ_Bbb%žÖŸCê&ü,GÛC­ü>’-•wö¡l`ñ?b ¶ ü^MdšÛd¦Á"lw+)ˆ ÏÁØÊ½ð5ÁlÍÜÈ9T µsû Ü¿(ç6½H1S\âµèØç~Œ¤HÉŠmNö¼pÀü€åAC Û~áÜG°K¡y±ÏÕÎpg#$ þþR eE¾—¥è0°Þþù ’ÄfÝ£´?v•ŠF>)ÃØ°øðØx¬°SZ@êØöE=hEµÚ>%›Á°n¨èâà>k i"wO¯œuvBÇ9£Ÿƒ5â—º°F9^+«ékf…§³? ®Ñö®À´øfëàm)Êg•ŒŽ‹¾m¿ì¹k_\·¥“†ÀY”ßÌ\W‡cžôëUòi2:A)oåK›éc\²õ IÆ Ñ;¶xÓ@²)ؼ¿Qwúl_±s=·EÓW0!΄ f꤆q–…ŠhÖu¡>|Q:BÔ`ìí¥¸.ôœ;›Ña`GUޤý¨ˆÅ6]"º@ˆßâØúâê/I ^_î0Ÿµù{úEdWþ_k¨òë¥ýîóââÍ%ÜôF|QŽvå¤ò¶÷½]+xc=öáÕ™ï:Ýd”Œ‡±/ñ$¦+çXü5ÁÞ wϽ[î}"›g¥Ü:¯– Á‘¥w!<ë:®ŽÖ/ÊCì.Ì]è¦ÒUáÌ3);vXÈØ9¸Uó&.ÙŒO‰˜«ÿÞô~‹y}ÒÂëî²ßB‘_ȱDAŸÒrc5+˜®Bš)û#´”áñC#Qzß5ƒ½+]å˜XÅj2‡¶S6TëW9–æØý)ü!‘È•¥ñ?yYUŽŠöM”´Ðú´Ì®.”q -ÊéeËb¡Ð%&#nˆþv{!baa–NNóµÞGY¯·XVû_B ‡Ò gÖ„9’Þ„F|ЋUN‰Áÿ±=üc‹Ü\G–dCG¬ÇÂØ³ [7Btü@?9³{9%®Ï€’ÊéγôsgRùɤ¡~¾7Œ|Q2eøŽ¼¹—¬o‚l&¹ÞÊnôdƒW)›¡´ÝéãÁÕ“â»2pN¾Äd>¡d·ËuNà`¬$3¤ tJÛAn½•‡[FeÅ®åo\ÊNóì(»2*\1îÂbO€f·AH›[ûù«aÈAòD[e·Õ@’.åÎhZC5úù!ÅØKì¡lÎvº¸ŸêEÏRí¿è§Rûú|ÏÊË ÊÓ&3Å4JÃÈðèÍZ‚‚­­&t6õ#mÒƒó§üuH.™Í#¥­ÐRÉÓàUŠc]ôáKT%›ŠgŠº8š`b\=Å-·˜.\åpQ)ìS9°Ú—·ý®$-‰ÌÔKK¨xõ¬E ùñ`¥vAé‰Ê±S´³r+j²¹ŽÇþˆ¢2Ó"ÄöÙ»‡V\~G?Þý9¿±ÃáÝ.ïÁð Cÿ†àDá$½pFN.æW¹Ä,ðîiýî™/|4ѧ£Ò.ÛåÇwÿýÚ\_eHBÅìwQT˲9 üÏ,Ž’ŒÙí.›ä›ð ±×®†’ä¢9¬ðëµ$žœ ÕWH¼26ÔpʆǣuéGçÍc·sú.IÿãÐqs™Â»Ô“1µ~ÁK’‚-^¨ˆ¸G<4ß8sP“pKZ¸"×ò& –tᶇ(×Ãp¼Ù)"ü¦L¸(”$øóq¼-|ãó‰@6Ž1ÊoyÌoÌÒ šPtNÔêýØ:ϼÆþ¯û•Äpý|·ÇùÝüLò[¸“~¦XÌÛ1ÈÔ¹{ mhôÄ—%”gƱwW¤ÿÖ:.+ (=g†­a˜€%ž„0ê>>tFúp– °e6•}¼›UI/,ùÌô[RûnéÉ_ ]²È&Å-ÊØÖ¹eUZ„ê•–àÄM¤ÓJ—6)þIéš• Uúkbã^ ß°ñÇW¬+SK¢J9qàXØ¿qAU(ÐÖ$.²ÍuçE’ŸÁ%ÿæ+ëXª S …BD¡îˆbÓ/jÏ»vƒß¯›t“žÊ BTI¹cÔ†@á8'`Ú”8oص #3NGï; §¾@Ý×ÙÀ»3— ®Cé¡N¹T·Ò‡agäDg9Vùzf~o>ıÃÖJö¢ñùÁ¡ú¢óØÊ›íAÍ„ëÜò6­Ê/ó3>"ÃnìÖ<þOW¿™Ù¿öN¢²ð´*ÓΙ÷—:O#ÉlÛŸg09òÂk.f7™¶s•cZ¶Ýj±8’ç–`,ï³q–ÐLÙF[çáŽïŠ ¥gž¡˜ªP§*É=:^‘Π³„I•Ÿ¶ë³¾äƒ¼í(Áx;ìrløcN[´{¨ÂàÙÜ#Ç\2k§°sÄ›gD¦ó…L€÷oÁ£&O@Ç|[Ñ«}av.zòûeïÔw<ö‰ÜÄ:24æ†wÙúMPÞã!k„úÿG\7#üZvRÙg?ü÷Ò¦‰ñü{È Œî†;«`õ­5Rlíxløê„¹‘ £ÜañuP!};^xoúûülo6\cº¨¿m ®?åQ—Ø´Ã{.~©Ï­P6Hf3´× ˆƒGKrh»Ó ’¤f1¸9õå Àý“®ÊUÌžòq 8½Æ¼9Ô zpNÜ'–j9Vz²S~®ðó»xyv—Ç[Іn¯HøB%è*ç1ßÐOK1ñUÊ5¦^å,²ûÑÁ¤0(lR¦†.WX qéiC¡?!Ó¢á[(xœÕåùÜžùHž¦Krh€]hÚ÷XUÈMìþ/WÊË[²ÓoZáÝîlÞn†:/BF‹v:n2sóp” ò4…Γj´}ªèɶJŽè[ûãQ ¤‹(;M•(½ØÃbn¸dœÆæbe£¸­òUòfõ Óþç$š®hVxð·›§QMÿÊ*²QjBnÁý‚’.bUrÜwÇJYŽÝĸôàÆ¹K¾2éU±‹º‘£ù!….ì~¡Ö£¸óÚ±uôΔ׻½Ýqït~Ë7¶gûÇDôá“ò³rfSœâäŽeNWl}1ò4FZæ×ª‹ ¾„•[ ÷¼/N†°ü^¤òµ5êæé•ßÈÚ…‡«tÙ ¤£¤ ’Þ„Ž­/v/ºÕpuËNn•’Ü…^TÄÏi,ìŽø!Ø+ƒÖ .˜4”'¬q^æt8qŠa;nÔŸòM¼ùH†Ó1HR°uJèÖC¸99W9ô¦Q=sôK¥ðæñ@¯\<ÄÞdÉ8Öå;-ì¸Ú¢x@ s눳Ä0.¨eµå bŒ g{Kʑ͢áëL=rèò!–WÈ‹¨„u‚%ÄLñ&\~£]öWœ=ýœx>Jè²ó"i}ñ0ªòà…ÝÐo8 1P©Ú}g é4uLÛq¦J‚*JÕ¡³¬WÜÆdÅËÀÏ”;e C'Õ_ðÌ¡«`½Á(Êá¡b#8/€b˜ÝÙv'ÜU¢#’)ª†™h¹8¨î7–€} F}œV‹V©vüÿB®!‘Ïa%qô‹ô™Ð4[÷€Ÿ\'Ä«A¯’o 7!A{—2f¼ïß‚G6€ŸùÁgN¡¼6’^nU~ÍJ—gé¯ ¡| <è4ã¶îmÍUÃðµ:X1.F¦²Hsõ ú%OÚ§å{mÀÍ®ÚfeÒöÉ;µ|‡ì³ªš–~âå7Ù? hZ©ª7ItA¯û¹g-Œ¡Ýgˆ?ê0k÷5ÄU¤_ßh ^³µþÉš¶û€uî¸ÙºMá«àÁ.²Œ7£`›ûÐP $¥á ¾ï5.ïB—a~| £Îd¨„åãzigõv'ö_xi¹ý,Y+ÿëAþ¿É¡ÿ3këÇ÷‚è¾)ü1®·0èêº ~ȱ§fTšÀËQûnOÐO·×³¦¿W%£Øö•¤Þ¿ºþÃwºgH°®ýä|³r!qlIîSú=ì¦=q”~Y—©±ãÂc)Øêæö)ÔêÓ¦ÞT^Lçßç®øµ³z_ÙÉ~¦GªìíVº·öGnÕ¸%©wù¾më=õh•ÔvÞ_øvfÚmõ8I&›büÑË~HŒŸŸ¿ÊjÅ–i —~ή¥Ï¨ÚÅà[½‡-Ÿ-/toó}ø±’m븓ω’¸Û•îm?÷äç˜$¶† ÛP{z_tÏ µ É'75-HÞ«¤öYCSI{µ¹B–ýqŽÕ$™Ðrc³¼môHGs-[”Úm‰'{4މ”TÙ¹¡ïf¥´{%Z¹€‘ûÚ²:ZC¬¨Æß²fOŽ QœÕîÛÎÎ(©ƒ²c  ÷Ý1ƤzßÑÊ%ÈÀù|:8“8ÇPŸëI²c(Ð4VëœÑ¾¡Â^{ùOÎI*9r½=” ýc‘T¼¼¬¿ªÓ/r\ÞbˆÒ6A2i§Âºþо(îìýÂ<»>È‘K(öõ¹Æ™‘Ú&l s+䨼턽C¡  ùù±ÚhI¬èAHo¹€A^R r 2¿j3¬i8ew r¨ÆNJ ÔL†ª—µ¥½‹k €dêþ0ô¢â¨\\‡6Rš¶O>c$'ž¬r9E ’Þ ¨ËFê$ú=æÔ•‹ûÍÀe9[C…¼#ðr蜖ø×òB€xu6?? SäOG®ãHº¬nŰÔEÍÛ\ Aû,nü‹=±YÒS¥³ëRÚc•7Ç‹ § ojm‚dÒOJjYÖnÍØ²²mÛv¡{j²;½)‰é" =Ó£°x[CwB¹èZé‰ÁPôÍV² ŠôA^!5ÕEkgZž ™´G×eÕ ’ÉÊÅ} AcEÕ‡·´“ƒ· ’ÉÊÅ-ä«ãw•yTOê8¥ŽÕýFOòr l—k¬Ž?(æ{Ëho^Ee÷b,D{b°³:tuà©(öÓªŒ¶Öh·}&/Tvbuê D =‹ã%&IÍX_ä­¾`KÙ+PÚ{bÀÞwÇÛÊ íØ’ X`&«1P½ýäìzGm ÐïÞ™$4Àž¦5í; 4”:[Ô÷QšU`Ñ.5Ã*„Žª¥·ŒŠtÎAÊ|7ëIÈÞ`E¥¡^;£øc¾OYÝS¸ /b5øü•~~¬4Üç+ÿ±öe£ :…g) ý@õÎFt˜ê²¡­¡\Ð1P]Vb#§dméѨå…9J½ ¶ºÑ÷ðúÄ«ËÞPEϲ:xq½=r%ö^a gˆ‹®¿"†QK% eUbpxeŠ& å.}aq”Ðá9âøEÅÐs©\À¾Ec§dÔÏ:¹ Cýˆ [_bO¥.@K‡ôf/·6‚dYRS¡ð 34ŽS²R§8eY«¹JZ|éžg30=9 +€;ÈiGi külâ^}³žq؟Ϻé…çïH ¡Å[Y\@8÷~Š»ŽÕ¥èÑ'èê­Ë]ž=f(5”¯ Œu&c¾ ‰GG]¶()tªË긬--ä`ï¥ QõìUk¿×¯\0¨¬ŽAÎPkè~ ûÈ ,ËêÐ(I¨ÆBCÑÿÆK”¦b§Ø‡ÎÈ]GèB)-«‹˜G÷\Ë<çì>Áγ5ô¨‰ÆŠªÇïØßgz>¢$&bÇÐÚÝÕ®Œ] ’o™íçøb»¾L#öá×;Ä@• TÊ 9J`ó*z JèYV…^„^ࡲwt†–-”3…­…Vé í$À¼S뵓¡.š)*ŽÊŠà¾»(ÿoÈýžµêD»&çM˜¾R3ô$h9 h ÝçcÛûAâRôEè¹|µ“=LáU5Rm^V µ Ð:žÎWã…XÞ²C(ÀŽS&*X(í&JÈʲBäÙÐÖPV¹ Qï+±ÁµK°Þc$Æ5åþvmäØG@Ž b’®Ö§:˜&ê]Ù³e’°:^äxGã©´…Zƒü´š)š'ðÂàÛ<-kTöT‘Šfƒ]½‡Wö:Öo“ÄH'|—iÁ@ÍäàͰ'Q€Zj#']V(^kÿuwYn£@€ßgs³,ÊG¥B…=ôêgu%/}¿‹ÖÏi'qìèRO&¤ ˆvÝGÿoµ)E|ÃíÄ2LäÎJFÚȘ âí̱LA»LâcêŽ'É×i¡œ­%5C"çMAö!í*d™ÐuûNÉñ4Çl]˜ëÚÆ±©Kè¥A&£„(`»1(e,U{’cà2Ü=ƒìÀÙ£7$››\¹ "…t;R²Ž‹AB>ºŠhñ‡L¯†°iL]dauÜÁìv Ò·ð¦ä”z ›AG¦Žj;]О§uFž–ŒŒw—xJ]ˆ“É#¹Bø3¾½6äÃR©C·Ã€‡ùPKr¬‡éŽbJÈjÀlò–wϰÚÅÜSz?B↰=™,m\<2~M{Ï|ôT TulÂéDêq9鈾gB’剤dbLK{œädgê$ÙSÖl û>(»Am$âxµ;Y‰Ùòn‰¿ÊýqRÿÏâ¿þþ¸¿âÇýʃ¥ø«qûÑþ_GSÿ&æÆö~•®|ôÄÜš©%×B97Äà[~C¦_u½b‹»…ìNvâv ýaRpl)=-¢{ùxÁæþtP”rȨu)¾f¡’‚³¾~ƒ¹ 1åz¹d_ØÚó«Æ1†w£ŽMx{ä,?4KË˱¹ä †rµls•úÏö铎{ñ=¸ÏQŽ!ìÝV® X'Ú:(ÉÏ-•ƒx¼² ybíwß&ÿ¯Ø{çøŠÙöf'E«ÅGÙ»ÇWôzWû|ÈÖþ)Î''ûØnx4VÊ”Ò(šÂœKÒ~¼Bò ïÂ-9œÔQ[\NZÞDÜ5 5}]2„ÜÐÖÅW^›™ ±ˆ7æ˜^ º ÃtÙ]«PÆPû'³ÙôQ¸¢fêÚ6-NG-Wá?jˆ2’Ûê,˜ŠÂئÈeðC û£ÅžKz–Ýý§›9€ï7m †tµƒEç°éâ¹i'ä<Š}OÎ~)f›{Û¢„33’<”;®W{F~­%£q½[W¬';qØÌçƒJþR2þH+Œ5aÜ‚ûv‰˜>ØC{¦í0ì…L—¥âS\ŸuÜçœ]`’N⢣}èÙ¸>û¼…9?y‘(j¹î¹°ªÛòK™SUI0íCφCø’å»°I¸½/w’lÃì²Â—¡Ý°BçÀØšN ‘,ÊÙj¦uô°C…¹®m™©ÊÔI. ´3@¡9ng s][[ÕºÌ]Hyô6Š7´Ò'´„©Ú3¸lð–;r>r`Ž_£" P’É´ëRæj춺úÈm˜3ùÕË"AüWX2ÆxA%ø²KWtÉCY§Æm>l4(;X 츂ËáÇx„|À×\3 A GÝ^U‚⇔bÉÏÆõÙ—‡þ"ÉCÜ‘ÜFPûëV” äaÙðCS\§Ó0@îÒƒ` …A~ì§ r]ŠPΨÌÁÉVUŸmî{ \Ë/]ŠÎ“À¡è¡ï€ e2–|@êxaк¶Z»¼^ów¹öCjâs šÚSsÉÖ’'YˆCÏñ"T >w…ò$æ¸ 匂QË›c6ˆT(Þà´vpÞ‚ŽB@˜ŸÊþ"T\žY¸>ªPÆöä°_~˜ëhŒQžÛ ÙÁsqª¦¬ss.ŽŽåu;LÅN.ùQ¸ŽúÌÁ{˜Þ{LAYV Ì&Ž)ˆS²O(Å , w&$|†Ú•oÚô·>¯nøž ZGÁmZl]vá‚®˜À|›ÈÉ×év†h?”.“Âõ2EwB;iŠëô²@Ôƒf¸x¨JVEl¯4aXÆ‚ìæÀö\Av ŒÐå^LðD‚Ú“!ÊåÄÓâ( ¹ÎÒ.2êM’Ò³†(ϘêЀ ³htvÉVŸ]«¼l'¥¥ü»:è2/¸e™XÆ©JŠPzt; Œ¤‡É£yœð:@(ïàI¶gÕgã:zQ‚ÿ)”à¼<bäÆõÙ…òœAéc&ôøÐË2Á®ÊÚŸ3ž×)—‹ßë6%QòÏÆu퉎žÜö,ëR)¼p±P—íñx€«ñÆ¥ƒ—-ÏË–„<˜hÓÕ!ʨåÖÕÏMóþæÉ" %¼ÆE˘ô¡4¤˜ƒ²æ×²"ÿ#ë\›7a0|­Ô(¶<ÉG¯~[ªWÂÝ/žGœí–ÄÇD^K§eVÇaË0 »‰çRvºŒØÞh·ˆ•‡Úà~®öMfõôz;ä º±ÌÕ>}Á‹Ñèjde‡@'t`±ÇðDqp69¿¨Ńe®—¥Ñ N¿:Ë\m©ÛÐl5„(Xã®õ4T¤JÍ#Ή‹²ÌE¬OSäœÅ lÚØ>Ó‡< µúaðMôê”Ðd:ƈh{*–"vô…\:¹ìàËŠ£÷%üEh74ZÞÒ6CP"3{6lÉÝ¥|7Ï=SÉÀºµèÐ~°?8æØ·TÌ1 Ȳ1»¶'\Ã}Yj)µ¿>´F|>/’z­|RQxµyƒeºE‹üxŒN+Ë\-FÃ;u{ëUÚ·ªˆÌ` ïøŒ†éMdB‡R` ¿ÛaŒ/áâŠåâgšCc‹áé”]YæjŸÉÁ鼨Q/Ë_Ô:­,s±8Zcs55«–lÚ¸ð7™R3Øí=…ÿxˆ@?ÍNpI )€Š6{Ú _j„1´ôP— ´ÄÆf‚±!pQPóèÛš!¥T¶Ø»?”2¸ €T ¥”– ¸˜&LCA¦µ]åÓ;Dê8 NB(rìˆx‹;×fÔ:¡RÔ à…^d±±“Á™Jë\äeÊPƒ&€fçõÌ@ýù³+5?>çLöcÜ!Ê›©`þ€Èè¸ö竟)~n=§H-Æš”‚Q†º0™æWmx«ˆ>gþÂØË&\Ò]QNÒFWc»È`–ùÅy`[EÄ6bCvZ¹lwÕ»ÉtïÚ8nÅøE+IŒ²n¯È覜^fñ´´s×QÙUï&^ea²–ü9[¾Ê2ú>ì¶HPI„6>ö°N•N+ËšŸœ[ë6êzÊwEþçݵ1e÷® ž>ýš}¯µÆ{ÒUb4½ËÐíÀw¿Òö$5ÌäÞ ²Ÿj –¹šü¯úeéçVã‰ô1dAñ¸7>òNN\vçÏ„Mxã¨p^ùª¨ø$*Ÿ1š\?ÀÛÓ d™ŽQÅ[,Ÿû ‰ êÛ%?g;6`5ùXF˜3Yÿýê¡•÷‘vB­ËÒ–;É ö I꿸W5PTc…Õ6aû*ðEîÇ‚>€?H?+$²—ÑM¤˜2¥ x à´Dye™«EOöŽ<ã¡)ÏÝ‘rÇŠøqî£yge×ÃP•"þéãø\㔕YçªÛì®èÓ€6ƒ‡ìÇB”ƒJyu™Á½ždæýÂ…»5àÓ»^Q²+åÀb¨ÔR›2|àtÑsM ‡ÑötðblR¼j7XSvƒút ìdÔ²C?ø2€È‹ÞÈi̪Î$A2ƒÕx|µŸOS»×Èä0Àwy*ÿñ¹çªaÑÖ´»íLv¬#“Ù_µ±"KÒEMM R%q¢NÛÐÓ!zn¨ÛŸu ˆó®a2ïn[ôáæåu;@Ñ…ŽFŽ1gJÅA"æ}Ù{ŽŒs =d:.õìȸæÔÌ”!jÐpº¯9c{ƒ£ª— 뺼öç2|mÚGÊ´HçZ jÐ;Ÿ8\‡ù`ÉJ³#ÄÛ £‘q‰Ã2{Wˆ2ØïIµ—·ràIEa\@ŸS°i@©Ð>âaÞi˜Ìp~ CFUÀÛ`œ_NätÅ®ô‡~*¥ îd$'oI`ÜGå͸äX1~^?×Vf«ÊjJ«p-¡h³¨•_é‘¡H©¬È>ƒÑ Þ´ÐcHþT 2oÃh‰;§¥ín–^ªÒ#mÞK* ©Û6.lŠˆLXïA£‘KÜ{>ê@iÞÈé * ú¦ fX·–º®§Úðξ`d¹¾úà©(Tøß@ÈàÉŸ"®z7™áœ/]Pæ"ˆ®…‚nñ:ÊFZ 3b(VÚß‘üÿÌ_±(Ô/Âÿ´ŽUÚÔ¹¥»¬9(z{QPÉÔÜ8ÓÊEï&3¼s-nuKzó'b4¾„·}rãñ0àÞSQ»ä <És–ÇÂþ©(Z²w8“ˆoÏ ™`Ò 5êû½¥Oƒ'"ewz:,U/ûHó7¬2—ªJÜâÍÄÉ[E@Ô‚±:AdÞ4ú¤”¨9²Ìà[iÄq‚ŒuÞ^(iXš·ÛR€kø¤¢PñgHB_¨¸³uBZZ ãu$άsUYM)dmDÒŽ×!ê¼[yÈèf'÷e.²lÅRH<®Ž.®FåÜbÌZ¶T§ö¢ ©2”n"ªµ‘sKŒF•Ê҅߆Òx;¨;Æì8“Á°ï”‡á‹M˜Ì»/ÍXgˆ8W,•.žwZZÕà"™Ž%(ºîV´¦®F"õPʆc?‚dG›~¾©L2£èx< „ˆË¾ 7PjŽVì…ûè¤Àè)#• ò±õÄ B~% : ‘’ÈqX% Þé%Ñ)¶´½e<°‚B¸Ó±‘“­gf¨ý²[jNªÔŒ?Ç€`ÜöÆý4­@•[Òíp~ Ò ü¼c2¾œ.¡à!¸(£ÿRùÓÝF{€â°¦SB*€Ó°m°;Ô²`4¨ŽÛh´ ÌV!Í€hÜOç~ðÑÕE Jà`Ëe†`½ û›ŽŠâ¬?œO*šä·Ç0#ôM¿CÞSC›à%ÇvüÅËʱ)©RsZ0¿¨Ñ‚2C¢¹÷Oz¤LNõ½ µE°À¸É\ü¤¢Ð'Úô™­Ù %ˆ$¯è®ƒZ6áB †Ò•ÕCm!*Á>N+ŠCÞÔ}5.O`åíiÉ`?ÔÈ.œƒ=ü¢fx^BøŽ ËÚš!Ào`¬O>—ÃE ŒÍ!i{‚ŠO;®2v\R –iFt9½È³Ó~(ëE ·ƒLÇø3¬¡gVrRB´> TõXPæ"ÑEÁjzšÁ†ÈCd:F#U2€Î² ë\L\xcv9ôùKµÔ¿Þ¯ohο#Œx¡ЋbRC%ƒšƒLǼp$Ä@qØ…2gOÀ2W[ë·µbI»(=A[ÜLs‘+¾ïüpø‹à´Ž9ˆe†8”`Z–ÔÑR£”\öÀ§dx|X ÿ°un[Λ0¾ï˵¯ M¬ƒËaRþ§oÚà´]k‚¾-@lÇãÄ5&ðăÚUéû$~Q^؃#H§\ySè›Çò ÕP0dòøZÈV³‡ðtàe £× - xbëAaëÝôCg@u‡arOPº@×pʼ¨ƒZÝ–÷Eã0§&`½!ßý¡o¡Étõîˆ{‘ê¶ûW7j|ˆøâù†±ÞŽ֓ÆÇŸ›H¸«¶åo~ðf¬KX]Hí.„½c\6:¬gËÿRù.õ 'U/þÀÚ·~ÏË‘î_º~J”¿ýºx+ð\+3ó‚º|ýܦ¶ÍÏøúßÝú¬µw‰æ^”ÏEõ"WÏÉÁ|-ª›8n}±îKP!Éw NÎàøØt9,ÑKe|óø.qr¼\XÊëLéI_Á²Qx.ÀÒ…SzxV“„¼—½.ö†™òý ÌT ºñ7ì^¸*“;ŒÜǘ?•Ôn:‹rø4¨|^Õ(’Ûõp¥¨ Æ! o }óG™=†œem.Öô!î Š àÂ×”·`2Ë7n8‡²v¡‘§ËðµÉv ¨°™3¸­~¾(ß1ô›°†!_Ô?¤`¢ÄtX Ä’ Î/Îì!xAáÊÕrwIÆÖav/Ø+ ~Þàoõ+  ‰—ج@+.x4öÆìj5åÚ2xÍ|&Ç‹ž Ï›2PûÅt¢<\@‘É/Ú·äêS@§Aj_+B[p^ R7}·Q ÌZ;WÀ–ÄtËŽœ k2zIdÚî×tµ/^ûC‹¢?¡ìM•&u…nùk=lÜË)°Â"tþ‡ôŠ6¸i@ˆ þ,\Q¹«ÊŸøp …, ± Ná ´è–Ùîu„ÆØ„_R¨ô`c‹õ"xp1zžc•3ÌÞ €ÊðUwlâ ^ôƒÈ]-ª°p¹¯ÙCäTWt^AùË,Çœ¸r  ¿¬}ÈãØToH´ùËîˆs…sçÍèDèòL¥ÎT.„ÏÁ$t NÀ;a=ਫ‘Õ )>@^°¢-…²é¤¸I~ñ(Ÿ’_À‘›=à ËÅõ"§qÃxÞÉ«’é2àR7±ßØX*(Õ´Þ“;SžZ|€ö ø‹iƒ£àÐïʶ¹u¨¿o¥—¯T¦ù‘H£•]¥Ê›§›C€]Ùâ)°Ú‘¨ì Û©ÐK…7Ú÷ÄjD·¦øæ(TØéùÆ|¿þ†'&ˆÞÊ/XÅ.HÍrQá‚ö „V†µÉˆ3梼l0Ú4 (À»g]ôÖ€vœòhR rj]UáÔôâ|Rî‹×Ä”™Ú@pÂ’\¯<,~fðw ‰ƒlš€–?gG)Eiç ñ3¥0làó$…4R»GXªQWÛ-ìÙœ…¹•sæÞŸw‘ò‘Î/- FÕ î­ƒ*ƒ~¤ŽÆß~ŒM´X§o«Ú·ÂDm{Ûnï¸-Œˆ£i3BѨO[Ù¬¤™35vUåÇæ9Ocz_ï?ÿ~ñx…ú> _52c²œfë´•§ý¥U³&ÝT_]K§jý¼BHíR¨Äq€-/]j^¢ÅžïW/ŸÎa8Ï´«íýù“vÖ R3¡è$*j0½ð<áÉ#T¹„aôS«Äñâ<ÓÀ¥(éš;èHÉ-§pøöE}¶ùA‘f•ÌFàšđjüê5úÁ¬ëïßï?râ‡ñB¿RàœŠÁóѽùOñ¸â4î£0ŸB c¹Æ“cyÆ©•™Q¦ÏB$/·öS”š%Ü™U´l½2¸‚„N¡3-³fVöäzPœ(no†ÍŠåŸÖϨ ™˜©¸i‚º•–Ë"ýšq0×_ÕpÎ}XÉ^M倧f Óä:ì÷‘¾«šÕ´¢ÞöÓFñö{SÆ'Ä:m1]a%ÅMÀ?ÈOYaJqÓœ\óûÄ_h*°¡F7†O?W€³Ä‡RʬïÚ…ïAæYÁÀó Ó"ó:PôÃÈ“Õ\ïô¤8Ór¨N½~µü½IR”‘;¬›¦êNæðÒ¯Ù윎‹Ý“ó€#ÅQ$³œoSŽÄñàÏ-è+“ÓƒêoÍlúüI‰SŒ _GÇwmƒ?)zâ”9LSuôŸ)§¨Ð²På³N¤ë¨Gº‰„ƒ]Ù¥*&¸e‰ 8¥bôÑB¦ë…ã”rX,9©\GÆ®vq]ÖupLÔ$0@hÕHQhÒkÝã¡Uº‡]¼[qYÜèÖ•‚̼¬ ºá%)Zý–áî.&-;¦‡ _5ÈYbb>dCjebîØôáÖS±ž§ÃÏÝ´Œ1õ÷ËDU[™t,Ç2ê¦V X¡…9G`ñÊ•óÅqbrBˆ# RhˆrðèG\Hõ¤L½RÎé:9¤8}/âIÕæ<àÝÈ!аß)Õa<ÊJT§”ƒÆxlÌR°nŸThÔ–DÒ]ÂNegV32kšFì L¢ d¾fÖ ¢-1¨¤®®ò–Lq¤škð‹xÊîè“Æéó!´…eÈ[L¿[¶¨âTØÛ?0‹£`*åwTwåœ*öSÜBkâ*Ýø/Œzj–/&ƒ@©Ýá5zÂÄAvŒsl†{ÀH…`ƒã,2[©YtC>H“wÅ‘RÚg–Oçq°6…n\ŽÛwꂦvœîBð‚< Ñò´õ¢::9ÊYB±Â²_Ä(”»’‰¿[P{¤äl…{à~X[ÉÉL0›»Ae FÒx?üÃ@ëm£ñ¥*èi»RneÔj§–Õ÷=ƒM-1ˆQ(ÂáJ(Ÿ´˜bÓÑizŒ×p”™ã1C#SE öÔ4iÂï¿Q&5‰ÃѪîIâRd7BˆçVÅm*Šø¿ä¥.î“b*K=óIÐä»M¨žÄµÞÈ+¦6ÌI‘QöjF³¡ƒ"—¢,ñk¹Ï9+ê^}᪭_yW*óK †#4Ôª^ƵëcæUMñˆ ˆÀ›´”•øJäVމìaw ΰbÅð9ÜAvà_ÀÇ‚í ‹®T ֌Լr³ümPN›Óv²&ìÍhtÅ™qr¬ /)< hB3Ryì‰%p¶U-ó¢,oû'CHŠ'™a?`¼Áýñ6cñzÓ^4…Ow$–uW í©T[V¥¤EjÒÉ oo äØŒ7;fÚ0µb¤÷[mœn/Q-ëôþ*³«`v‡hÓ`]îŠ ¹Ðѱ¦S7Óõˆó(ý·¦ð/O©ŸŽnM6߯Êe*ÄwÔ£ë*±—{sŽEÔ@‡$†_ǧœ(¸ƒÏÝ»´¦éS§G¦ëèŸNôúæjE*é=wUWÔ/IFL¸0+w½rS¥ˆêPèôÖ᣼ƒDWeñd9Ž)ZGÍ‘‘y¤¬½€rFyŸ—¢;VèTNq7ñQ2¯Ët/•§ ¨¾‘ïžßÝ.ì9zí÷ÿy(üŸ/ôÿxKýtí¾{qµ§«rFïožøWú×ÚO8ÚµšGæ9QÐõØÇʧãs\Ÿ<÷ßÔ"ÙXÄwD/{'À9îV{Ú±ÿÇÑ¡9Û‘áè×#Õƒ´(qw…i² wæ|W¨Eáß:ôO©w‰¼ƒóÅuOÞ§o•’ò©»ÏŸqÕ¼XN›|èzlDÏ!(li½„Jâoªƒ±í¡V¥û{R©É¯}ìd\œ2Býlj ‘OÎGì’ñCëù䧦9¤8[¡!ˆoyé#³wQP®b:0•wW7}Q=t\Ðì?ä!o¬‹¡ÊÊèEöæú Ô«¸›Ø3üé*õÓ³#’N•ÎÌÒ Ü}U*6¢¥l¬‡Dlè‰øŸ¾¿PË#œa+ð‘!ãJÑÿCÖ™&VŽêPx‹½«l½0¸§Š¬þuâÞúô1c7¸¦ºWÜÒßDv%Ô)¾È'-‰Gu.†²~Õcê¢H ÕMɹó‹ÒÝNuÝ÷z\½¥» ê9öôh«©-®–Û‡R%8["Wq¸öý/_ëï.Ë÷Ub Ü]†Äk"·¢oÞÝѺkßÖ­WrŠ …²sذMîâµlºu“^Ç/éAgɲ£6ßÌ•åÒjÅGÓr$Rcš‘+1.>Œòrb#CH_`—ré.•AøÌðIj™ó¤™„v Œ»s€ÿ>¶cT„ ¡­ÔLDùJÍ”¥ˆfÑ6 ç_ßh»ä‰fµXÎyE±Ú Åq"›‰¬ÔfŠ‹::`yøÏÈ­¸Òóµ®ð*}±ÂÞÙÕÕBñ‹K¤ªò༆­¬Ç<®žf .+%ÇûÚy¨HôGb¤º4w®Ê™¼¢û¢:òÉ9¬6¼BÝÇ| ©À>t9TÿûÞ‹QYëµ5¨á±d›Cûì3Ã|"ÍW³NÒºaâ¼Øc üþ–ûÁµÂ0$Œ€úÂôuáiëNDt†ýàǤ'|t™ ÖÐö1~½b~[b5¹_!n+Ð7IñÕѺk+? ¸˜ª4ºàôBÝRÜãåàMxP‡Dh>m8ò¿jÚפªóÁMºÆúpîÒwF÷y7w§7òïuìÛ2öeû¶ˆý{ »-aw©q¾€uAñMÆ—Ä­oj€ß—«¾Z}[¬úZuWÞE”OÙºÉlçEu}Mi²_Nv¦èÊÚjËICqß–{ç¼®D)‘Ë}%ù¾|÷!Ëû’͵eqg@‰»òÄ®£§·¶»DÜÛÚïué÷¶¨sÏkŠ.ÁyoÊۂΞ[BµyÜ×v¾´C2_عðjÜåž-ÍÜåIö•ÔëBÊÖQθ¯¢|e /õlBOî/+_kL5:Þ œëx_y¼-<\·nÒ;R‘·&é” l›aRw³‹Ip¥Ñh‹ÕvôŠ×Ö‹ú:Oû ó[ô¯ÊÃì¼28 · ä‡ÊSÕû‹¥&ÀYjû”ΟTÍJK%sG3Q¥»Å úˆŒå´äåÄ|¢<郂í]&ž6ÕݸuGË›)N{Ô’ØQÂÎ{"=]k±ùTÃÖ)yWíEôM g´Ïê\Ž-n/@”ƒ „â°¨uCÍ¡OQ•ˆÍ[Ü­Ãx_•¬sµ^<©ÑÁ’Oâ€Õ$ðטöšF_B@VÅ'£¨ˆ€fxè× ÿ@ zód'iÉ⃂¾ej ÏÓ•K^ô4-Dw·wò\Nå´méö*­Ru\0«wy}7Š5m“Π¦ÊÈŒ¾ÇïÜ«ˆ®FòiôÍJZòUâ¡%Ë )ª­‡BksÀ…:©Ë ¤ä…_¼a&JuRç¡F~E|ûkò?sSg“jÛå0úâÜ«ÇX]XGM¡ùåÿšÚ[ïVG zUÜÿ‘™ÕÞ|PTƯE[³Ÿ4+4“êõ™£¼+cœyÚŠ¼Ï ¥ó,ÓfáÙ±„;IÂÛ+к ˆ³ß­ «¡¬4¦ílö0ˆ%¿Äœ˜Ïcù@¾¥x%+ÙèÖå¤+ñ•AÁÖé‰g¿8F2ðþC`T9&V5V)k‡_†Ç‚BQx@ï% %Zù˜BKðþúðþu3p“ó±„aæú…D&,âFÇ'pSŸAëf¹Õ1©¯â–•`,_1Ù}Y³~±d>”Ëê½Ý0Ke†‡æÄ»:Cñ¦–4ý V%vm@)`̰Îm<*g^¤ûl‰&}HVâNÌÓè–zWÀ×¹=nzR9òL*4:Xtœ¦«´Í~c6ñG¥qQgCd2!]ÚäFfJÅ9l’Ðôþâj€ñc\ <ºSîFáÅUÞ h=/A"@#ž¨åMÓÎJ_¼HòdávPÝ’v®°c†Øs@¿KEqEÙ ÈUÍ‚8U`CáyŠjq?ÏñISEƒ<Wó°˜V” NÑÆJvÉB·‡æÎè ±çiiBi¬`QUòE5ZÒiˆ+}#¡¬hY‚õÒÉOøû œ(‡‹œŒcRÇ,q-%ÿ¸¥ÎPÔ¼QBùI†äÿé›òI ²ÒÜÔ`˜ò´U  âXˆí©ÂRÊ7+Ø‹N °& ³­xz)ñ–(r_@';×±˜¹:;bæW–°!¹íSÆd1-–– W Œ#W߆€qTJg6’IUMYª¸°:LÛ0a‰8cl·'⽯Ÿæà~ÞI†!H·+^ZŸt±ÙCá© :hšYú2m•’áûœáŒH•H(Or+Že‚µ¹+hƒîÒîR¸bͧ¤.ij»uÀ~WZÂéC¹d!Ô`LqSÙSÇ–< övgõ7uj-¹$±ÿ7:=U ¬´\Üš’´dôÍJç ûÒ Ý"‹Ž‘¾ý \ÿ™Rè£D+WÂ}87‹“7Rt‚¬æ÷Å¿‘ªTÄÀNÍÈ­˜ÕÙz™ÉŸ:íïcj¹aŸJf;;Š8Aƒ‘„¹ µ5]Íä|ôP©OU‚Åãp…¡6Q²ó“7§nˆ| «ñHŸ6Î`tì\Õ¶6Aò©Ðú„=¹Gã:gR©Ÿ Ü/¶°uµq×Axb95Í/‰Ó´ ö<¶ÛIL”$(”§9Å¡¬6óÌÖ$S†‹Í°Ù&MQ[³ßHU©~k‹ TyÉ@³DI„D±´¶@(/Ö"K” ¨”N\HñÍ»°;Õ‰Uç’¡˜³¸/ðňÖ;—¶‰–vÑ]hß.9ªç®'QŒÓŽl|áŠÉ ¢u®:Cÿ3ßâ×vÚ®ƒ ÒÁÔçvñÏ' š6²ÙCA>Õ•J>¹î,ùœ²èsÛW%áU£­˜z*ú1¹ó†ÇÆq˜˜ŸÚ‚|‡ìWwÛЭE/DJO–>«ÍLP²»àßG:9ÍRZPCjŸ6AkÇ}´ïôMñ?ÊGMýD Ư¢"?¡Üœ… ôi”bK‹ºùu˜ÿž<”MWä!Xþ) ØÌM=Ï 38–ûêöîNΈÅÚöT‹²íT&mJžaœ¦ª°öÁµsÛ>¦{ÂD^–£Dyâ§(̹)cÃ)i¥±Ù8@O𦩠¥êiºÌrK¸H-O[B`ø@é¾È‘)ªó¾Ê‡b¿(¦W…NCGáèu¥1-jS ¸°d`¥d– $8QÜ9SZ¾WÐóz“ÙN<£o¡l„© @ œ­o¥‹ñÂÆÍ€'\òëBÓï@p.‰}Âø¡I·ÌæÒ”ùñåÒ],>­v„Û¸ï~êÞ.x(ʤÆt «:Ü\ï¼fDe¬áœ³ŠaMÒy¡¢a‹(Nje¥ßŸ!|¦3üM:öO>aê)AIáÀÕ0߸(]hQP¢p¾ó:Ÿccûß?„@K#O[:l˜î“â9ÿù¡‡d˜8CiÉ / ¨Ó± ^P'Å1­¶ 3ŒíQ†­O®uVti‘5`>0ýæ¦/®fív­ ,iUEn#™ Ë3½¿Bòáå -\úžBh#ˆ%çIu†>ªQ¡zLdµ–ü×úZñà|5 ?ÿ´ Àåé×Ä £?ÌÔ¬0ZAç* ?=¾„ò´¸-Ÿô£r±_àAv5’Ö¥˜µ;å®0ö*¹­,Ï ‰7ÁÍEFY&œ ²/fš1qY6¨ †Qg§CQï?©88‘²=‰7Uj2îbîBç&"óªAòæØ‹ÝÜë‡ú\>KeƒÊ]ò^e£¶R/’>ŒWW½HÜŽZ<>S¸Š4pAœVÜ.5\'`‡ÐãÑ„7ŒCv_EóU€NQ÷ÈÄ„Bñê~5Â0 ÒØl-ûá=wƒ{¾¸„º ÁØ‚ ÒxÚ?0Ò+Ÿ0hÚOLaTžHjªÚÎ #)šX㬅ëèøACwÝOëZ¦KVÕüûPZ™¾¸I°ìCC›´ÀqZ¦v_TæÖ\c~Vq EÊBy‰–»¡_£ìzo®@L<ã=q®@\mQÏjƒfÅý8 ½`øÍÆ]†Uœ’Yøë—äì䱿=E‘cñPŠ p[‚^$ºÒ~àän°Î9p<9¬üI)Q°Æ½AjëÂJÑY‚óéEh†±¯Ûœ›2FÌxQ-Ùݘ$ Ý»Ê8ãÓ%“w&r¶Vâ©,|¢‹ÖhøqgBÊ#¬I?…á$-¹(Os±˜¥–Ud9Ù@‚ÅãX꛳YIBx&nNîì(Á8²5¤Rø»&&ïˉ«³ÐÆagŠ®´Ñ®[ÚEoY¿yv塱@§k†E?¨}ÕV‹þWã‚íoò&»²»+C¸ËÍÒY¹¦’•õ_é@È!ŸXs>™»BÕË&(‰ƒ”°Ã+ûN)tꬅ”ÒÇáǟ˧©ã©âÕc°™€;›¦ë‰Éþ2²h§¡y%KVºKâŒþ›(å%‹oËq{ÖÙb\ÅaúÇX!™à[n>Þ$Å7‡„7GÉ9öLu¡Mµ;øxÕåiîhiã¾³WýrÖ•”kÞÙƒ£s‰±°èWƻܛTìhve/ï.ŠoοRý•æ¾\âÁŠKß8.·Žú¡ºk?¼ h™W¯Ê)´(PtÊK´äØW×1kŽ O?Fãf$FÈnDqç8T}Sî†Øº&xÁቹù5fš!™û†6a´·¥¢JfÅÖ夾©.m‰"‡rïóNŒ_\ühù|eÅHSÊ,dÔ*H0*–½±PTì\e!E躋æÂZ)+DéT‡Š$¤”-Þ/!{Iã³r*sŠžº9 m6μ‰–\àDàê1ñäî†sÜ8sk®ðDUðôË÷ÁQ²b|’R ±ä§™j‚¥¤É^2;Û†ÅOq)uÆÝiˆ£jA™-@À÷U_¸¿©æª,–’W²ÎÎi¤ÿQ2/…œ‹6¯-FÇŠ ¥%å´òÔ´4kC¿x]èú? üGU¹mž™êÆ]HØ8ï¼ÇXQ#Ý—“6©ÌðæŠÉ-¸×ïÓßP•›´Å]‚r¿„ŽI|¦¤T¥–‰»Y|øj‚£ÈM½—jBŽA‘ÓòâRþÌKÈïêJ[’šiø³Ð«Ê*… ¢cZG^Š!Ç`ØýìG¥†+¥v¬ÎB;çM´»‹¹nB‹ ø&ã0f]ç°q_õüŠ€ ¬[ŒQ¸ }FáZ1ÒŽÉIÂâþÂY™ƒûùrtïPÒk]Y“ËaV(.\±héŠØÛ]é£yKèÒ_Ô“L´NˆœVÃo}EÇl؆>›vÕ’ ú±{Æ&WI+Å…%ÚhøïBH.:ÕÐq,8k++ÿ(ÅO³4á*Ý—µ4ŸX!×c|ÐHÀF¥³žk¶ ¥:Ÿ0AÉ“Œ¿Ì{m'‰Æ¡2&´©"2®Dø'Û;3„¿¢ uÑ5AN¿½íê™·á³ …¸¨C^åÓERÆ"ÑhsRÜ9SvS˵íT¦ØÊ³ÙÜÒÂoóÚ'v¦äØpËá{Þ¦[ßå0aOßL6iƘùEyå>_nZKýä¼¶j‰fùXÔmœoÆÿäRq±ž±]PTYz窬Õtj]‚"§’7¤h¢¾ð“”%\CqDžô|ÜWÉÔ—l]úÓ>”ÖçT†ZßH7Ù5˜ë’$m¾ŒùÃb\´nêà-ÝÎ{aåKºÇôkOgMqU²*œÛ.rÉâÅøÝ{}­Ê‘⋈CeíT-!&`«©I2E ¤½ƒµ0[ýÖ ‹·1#I0¬EŽ)îÊ?Þ}ó ÷ÜU¾(¾j¡WmõI´ˆÛD<é4|$,ÄÌ¥* Å…ORÌœ|@Kõ$U}•ÂÅMœ|-Qv•Û×FYµèiGUJdˆ]qr)·Wc¬s‰Ï× wN]ZîxLç³uêìjÕ;n6¸ðhn©"‡±'Š‹}¼Ö?T%Q!³ÂóGº2ç®P;~iE•_"ý‘ â˜X²Y “F´¥ÁwùRج`gÂúDšê ]$Â>á3Â8ª‘|*EªcagG)Ù„§¶ûI.YÑ–èAï¬3 q]`ËËpÍ— >â0ÊÜš27QJ’•ªZ‹BâP´H4nWgtÀD”ÏMi!ÓPvž"–ŸéEûZ ®ƒKǶ8(ãV<œ†gm¸¶Gæ:mI8o@”f5(GŒÐ’C‘Ù *`h@Ñs¬Ï+#8K×,„ÿÒ¹3!‰‰¼E=mŠrGé4‹Š3äÐñÒ¸„W=¦Œ‹¾ù§»*wäDÆ1f›êÒv]žw‡;Øq%ìjèd#œYÅ–œûX b 8Ò" †•¢£g»¸qs–¿y ôÛ™â®V‹Ü]ûå£zJ9qé¨-…!@}K¶raÊðݲž•»’¦j{hÇu†¼õ«ž$(” °$ Éi±û}ú•t:w×ÖëG×¶¿H:¬D:9\“ŠâI™`q‘ÒïÜNìj¸*H>A8v/ŽB Eã`P2hþfzyÚ¦xÜ:íºÔ%)I3Â6bOÅ5 ”Ë`?xma ‡œbsœ~4 d5Øÿ¸bvPJ+GùU Ž•ÿ{N~›Ò–¡¦í"ý]StO¤Œï™Ô£ï26OÒ9Ý¥ºÆù{“Ò[ô¯sr–<)ʹ(¤Öî×JŒ¤V§§?<(Sµd™§9anÉö†˜Žm»Ôðað)ñÎqlª³ ®;Û‰4HKÎzwÍ‹ãP”Y¦µ;¤b6+aR¿ÒŽ–`ÄHˆp¡ûP5:N}À|I^o|" „ÌÓÌÉ0øàö§)´qK3A»`mÖúüMõP°£¾ÌÜ¤Ô vqEÍ1 Ïp¨á ”·!Å]èa¹kk±»âxÕ:K»ç=‡nÓ7¿è½Læúª$Ÿ›ÃbÍÙ.ØRÕ¸#‘Ÿf6£ÕnìV8y¯0p“>ÉQÈÀ^ú7§*rÌT¹ WÍÑ(+ W&ÌO™ZrÒB¡´T̎ئ$/áþÙ ÌŽqŠÕà[ñ ,øm1£'B[:Å).5BÑIÂÆ-í¢o¢kOp»ˆÃGU^ÀNxð4BqaTf—' )µ¾@†h¤5í(ö΄ڡÿtÌöâ£a›@T¶¤¤ ’Ђ`äêv½r¬;[.gœkEœá™eÔþ¢€IBÔh‘©pÉJúã஄œÇD\Žü*5B;Ç]ä]´î¹ ö´ûÊ·££ó“”—•`¤;¡K6,O3{×¹Ks¥…àÆ ³£f«á’cQ›Äæ¡_G‚«%Y&t¦h„z•K[¼£ÞŸ-}=ía–)+úí¨U¼[Ͼ|EKz𡉲ª/œ5Ôå³Ë¼;q´´€¢#öEWq,!a¡§é%³£gÝÀ÷,ßJ¨¥“ +Н?#X È×õF¾wVÌ8 ½±íÇìt,”-µÎÌëJ· WØ>§íjÌ¥¢´dôÍJ‘»‘|š³…ßÒÌ7]›u¦iˆ]©1«Ñz×izçܤÏh™a˜Æ’J*Y'Dq¸´IÑù-{äaݘŒŸºg¹aKVC'+áΈòQ’5£®€±(aÅ ã0‘O£võûÍJh¿¢ÅâÛ.å4^N½T ™S:u¸ÐìÐ'¶áÄeë„< þ¹âEY÷ɾ FXÕT6ÐDg¡uÙ½yaXñO2g ToÆèm o’â»ã= ö©Mc ¦’Ö¶H¡Öu—ðª­÷!…«._¼;P½Ëá¢dÁsZmŽmbSåô–æE7±¨Ÿ“x$oHžÉ3à\6Uªf±Í!ÍJKŽ}C Kô±ð› £9qU¦\Õi;êF²¾ÂvÙE/bl¢ï=f/|ýü¶ë’]Ùsõ’¶Ô±GUtO¥PÜyï Ë­†ÕÑ %¬m‹˜ê¯J»¶ŠÌ×]ù2k÷ð¦^²bKš\ƒ{²f·¶'N\ùPeÑëÀ–Fy4w¢jeLeVÚ¹ˆâÆu¸àcãê,ùÜDë.祾Ø)å§Ò$<ŠÊ6‘[Sè°š/s5‹$Ê«ce†å¶Êñ¶Î-»yÂﳺÞB!6&é!©ägV?­"@Ð=sNÂú ¼J²$ëêá·Ãbw°^ÇâΧ«¥§dŸYWuê 9§Gpwü¤´YÌã˜9c¦ÒN‡>áKòL/ÈN˃}ït}]ýºC—Jƒž²¹´¡û™½ %¾)Ë)}€9_®G9¥M”ĪXgàìçMÌêfå¼JçÜ'×Òz]ÅšI’U _ƒŠJ^À K¡ãõ\w7ÊHqz§%RÈs¦ô¯D]ñüäÄ.ϰô ÅᢇƒN“ÒTg¥'šéQÎ *_î…:gŠ7¸þ ½Ü^¬Ç‚Ià  Î…à&žSz–;ð"½Ðø.þÔòÃuQWÊÝqeâm] 4µ+¼aõbBÙcoH°ópÈÑ1á`Ó2õÁ®¨iüs?=Ê3¨8]3ØðjNúÏUŽÃúÈŠ·\JùB9†µÔ n"6H‹¸ŠÅ³Éƒël¦"°7óxAcnî2y™Ì“~*¾÷+;`æ¡6Ö% ôÓOa˵—Tà¦å‰ùáªÃ €Kv%]TÇÂÎêßÛÀîÛ Nñ„»tC›‰ öÅ?QÑ[°ŽÝå=W¾Ø¹`>¸ÃI ïÆÖtð´àR­S«÷MêÐy‘”lÌ®:œb8ø­U§näËü‹§®i;)C R<ðêS¿¹.ö¿8ç1 c7X­â‹ƒnS :Õá7Ð8™ÚUÑHG2Ñ®bŽÉÙŠaùÉ“ÔD¼¥j² »z;ø z(«ÒÆX–+MšgbÛaØNCÿê–­{IO^pYLMØÔá\:G(™Í&}Òº8%„ñ,sa.+_MèÁNº B˜ÎÅ=¸àß(¯ÆØÌt6Š޶1ÀMi”ĺ瘎Ã{@`cS]¥S& ““2èª~”âNÙñ±H Ø£2®¾¢ÏÆ®ûkÁ=£ðOH’K™:å!¤p Ùí‰F¨{nNB3ó‹ 'UhAêÿçb”¯B¦Ù•¤(Ûfúì3çì¤Fÿ UWFwé9SÌ9W×1AÔŸ 2}:y¬\*“0+AØ`8}Y‹FòI ëxÆu¦J®uA‘ÃùžZ3̆Øá:g6*Ÿ|–Jj6š»”‚lhy¦iLå:µ›øGÐr GÙc+R*ÀRš’Ê7OúÄ£@Tßj‡oÓa [£I™Ô«pßYR8?6”üK2ñV°Š8ä0Z(S÷ßT ?`ìgÕ-3|뻵²¸ƒ­õjW½hòƒójÒ63‚»¤eÞPz”*WÔ^Ñz­š¹üƒIÃë!Üž;¶5¨8ú kå0³½ŒÝ‹­9ÿÿb¤{4©äÆü'¿ÿ(Þ2Z_<ŒF“æ¸&—a ¹Ç‡ØíØ^e½¨&óUËʳa Èï•w®hi9IÁk¹Æc2ab¾ 9 š[&jų#ác¤•y[~ͤ$!Ŷ¢^MNDh¸ò‚ÇáôRªcag ç´`tW¬šÎ+7{4“Ig)y"›Så×6÷¤ űrp\ÞO¡ Å”¢'¨To(H¤A” 6UÈDMkzíQÛä‡Õ±¹Îa޲•ãcãÖÂHÚ™twï£ß0= ¾à-‡™QS5/´ [ÖN¸º½¹ÑŒÎÜuv?…ò›‘vn¾¨€òøAƒÀ"• ÈèÔxjŸÊ"i úÂÕ\ì†sp¹šuhìÔ7:u,–’—ƒ³çEðSÎ*é-†£®`R§5™ï¢Çø—›ˆðùŸú?‹D7’0#ä™þeÆ]©§³ßÓåÞ ÷ã:ÊáÔØÉ›ÃéCÌ1c†–yÓ™×+*ݨ’«.xH¥mØë0ÄA¯¾Ùvîc k5ù`–JrÈžéu¯l‹ü/7žAžƒ”ìXê$¡ŒÎ¹à_^¬Æ ç¦•Ó ]' ß5u,v*Múb ò¸ÿ Ƀ§”‡+©“¤ Òu„k ÛØ/ªc±´gpT)שŸxSÁþDŸs¹š›lÀÕŠ´Ó¡t®NÃJ_³P¶—s‚» ßwè-F¦í2 %- ÝPÇfrTÅ)ÖÅ[©½L”øe#û •0}ã…Íð:§­\g“ÃTÇù aƒ`¨åUÜx5œXZæEµË*Ö8õ@ëÉ­òæƒ+DÙ¤ºrkŽÒNÇ1Aòc"ÆŒÔ2Wj}¤@,„e'µ™Ši'5¨ò†:Âä ©óæ0Üp¿ ×9wÜì6•ƒØ(Ê Ù%áà´që0Ø Þ¯;?g°WIAB9L[غã$ú˜Êêʇ“RÝP(L磶uËE†(»ËÑÖÕ&*CqfAB·U¢ó†Š€ÅÃì±ñkKáx´0‰ØƒtdÇx¡y9¾¨ oy~A×m“¶øjÞÏåÁÊÒÎÀ´=5ÐÖJyDìQI’óå6óõú–k.€“0a¯Žó¤ ùXhµ 'îx îš=’WDÚüË;W+f°ôçU…<ÇÍ¥!³>¾¢ô„¯’-67ˆ»!~Ë“ä6SçÅ’Éa6¼æøÛC\);¥ ‹aA1tÁ”!  ²à v¶‡SÜ9ÞŒä(zµÙâÀ%7'Š`±*ý ¨’gí«A~îèçB(*‰²k“¾¦øoƒ³bHÐ\:!÷‹!å4¡©M 5†v“9«ñIQb‚¡›VZ€ûÝIv*^mb59¦Z´³©” â:¥›ða ˜;fT¾F)”á%)\JAuCÙâ=J¹öRèdU@I_S»äJœ»‘ ¤Å˜¹a¹œXÑu§_4Š;y Ê£Ò]ŒO.ÌÁVœÑŽï™ ÂVۈأÅÂÇ@ÑI³¢`/zòq5B¸‡­¼¹Ucü™å3,žŸ$‡+ñ¤’37!+9‡T…\³Cg£dÚNÛA˜±bWƒvšòäJ¯1y–íHèî¶S>*Mß,ÞÙõpвƒtÃ’Š¿À ž«‰B•086»éÁ•œüq5s’ƒ­füƒ®6JåÖó²Ú-j>²Šb’£ÜÙW“‚*ß\p~@Ê"X|ßÜ…à%A0øIþ­ÜqLƆiaµhÑ{WÙËi~ïÏ#J­{vÜë‘–ÊË9ÚùŸfìUéàfB©zÈ_æÂäŒt÷æèÃhy8bÚ‚«Ç]˜ß†B·ôù[høÄõ; if¼ƒ´Ã£ðë)"Ç«9‚òýOéÂw¾LLSìeX®Ö™Jë}à²3ÆáÆ¢j%­FNìŠø1%_JØ9T[¾õ,Uš=)÷ —5ááàéœFQ0Jb/b%ë0¸¿/+}¢{¸ƒfš»+Nhd¢·}p£M@Ü61§aÐ]å›u€$)/¨ ïÂ2Ê ©èc‘´ç2¸ÝîRÊÝ©:t^$%{L²Î^;_-H·hææ9×¹@å ŸBÖò  ìø, í4œñDü6®®ý„cPci§$pÇÝÌ)oˆ.;uІÙ9' »SçEX@Á:v·u þæuìµÂKÜR ±Qrö­RþÖC:ƒ‹ÐKoyv£#&ÓÖÍpXî¯>¢Sr»”‚ê†ÒÎÝõ®[å.§Ñ|YW‡iHqÉÔ9§ªc¿Çà¶bBº³ŽÍÕwƒÕÎ³àœ¤eùDϾ­ð»cü¦ZP6A{Àf 7RŠXÊ× ò”Ï å6¹Ï@rƒ¬T÷j}éa Ÿâ—"àpÉ!lãÔwæÃÚ¾”‚pex39&'l•-S¢1ŒÚãÅÇœž_ꔑ™ÒF¥¸ .õœôØ¢Êm#Á9rê7ú†áÃøa*žû*þAËÒ¸_Öó7K¶J%›¸éuR O¬ý‰VÚÐoÊBo&ÃaÌž~H=&¥ê0˜îf€öæ0N¡ðD+¨–î0H'6ìZ±zXÏn,ùK=^ªG}øå£¥Ùð<­Dº¸uǨiΣJé ZËüÚÓ(•¹ýh©Ê«ƒp›ƒ/=_¹š(»®<ìN&•ìŠýJðX\r Bæt5üÍ®‡ƒ£è¿[C¸P ®‚* Íôƒš$ÃZN9xšD/l/ÝÕ’wºÜË™ž];ug{ó™-5ºy–z8Þý'3âQeƒ’R¹š›Ü)¯œvó_àêwM,×7Säˆrh \ò¢Ö×pÏI0nseP–äœÔù0¡Ô‡¢?cÚ3¨ónߌ´s·Åç†GtƒŸŸ†"°•ÏÜ‹¤åvºaÄ¿NhÏ«:ój¶ [>êW¥ôaŽp’‚ËŸ1¨i9Ö8±¯^ü¸‡ÑëIsœxÆÞIóB¬hŽÄoçâ"GðÕVŸr|9]øÊ™ÃÆïzÔ/±…ùµœŒw*MÂ!öÂì3<³ë!e™‡.Š-@–ó>IN±ø³7¿¢øÜs(%?ÌÞïEþD.*O‡MB ¤Í ã¤Ò;e3óÝMéì8ÒˆŸ˜³hõ˜?¶êÆziüÂä™{V ¯eŒ¼×“«¤ÍD{x̆¨´Üp.'6øå ˆ9Â`Vº¹NÏÊ¥_úz®Å/Äß\;w«6„ÎWznè“ònü—ÂIr£Zr`3ÄŽÑ«–#±L9“—ÊìýTyßq~“rNofl¦ƒù®Â5¸øFø¯i=SûÙæ]ؾÙ*%‡å<Úl\%- +›yj_¦'ŸrrÝ™tw2›{rëÜf†à§cwæYÆ^æÆ>=¸ìädØ‘-`îÅ(³…b{+ÝÄmQ€R>¨~ˆÏÉrXTÒT 7Ê ØÈU'œZþñ`å/ÆÄ¶àµ¯Ò]-P®Çý÷ö€%}ÖŽf¸pf#IÇ Ú¬ÿ#½ÒS ÚM䤠Î_'ÌùQi/R§r5`•7Òœ¹YθsuÛGüÈ‹+ œ)~° S¿,¿ÚaLÉHèÁPi'tÜéKÙä(§î*˜(¿ž­°šö©Òî9_ª º³ÓÛ¯ûWÊ¿þº¡œBwèóÒ;ð¬|”ÛKfUš„€–fÂà:§ \d9È`æbAp¹”JÍÞÃ7ŒW½G¥ÖŒåx°£§ÌQ =ƒV‰Sr7,YŒðJ:ã¿Ñ àI ÃR«PQÓ ‰1 Ü$›Pg#|ÝšÇ:ÉBvöÎnΔ´™U Ò%™H“jldŠñŽ]J6f× ÀÕãè¿{ïÎcRL—ý¶ŽÝ£™ørîl´42W ¥;ª†E£«z÷f ›‹×°ëÿ¹Jÿ[îJõVJTñù¼?Rv53:;Jš$‡«xfŸr™?¾9÷«Nó¨Ôƒ¤dtù%'b'–çÒƒ;£Z¸RßÌ@‹'+7§¹!6Î ‹³„\' OeLñçZîÓŽùQ:aV%R6•lT?äXˆåF˜åÛΦ‡UÞ«Lø(—o¼â¼àм7ÃÕIòcÃ(“»+†<?xÃc±:IÔ»<úê®âíV9Ø&:|”+yCÒ7#íÜüî¾yCaÐQØÆ¨Kš[IŒò@É<ÃßVø9S2ÁDr2Â*-yF®ÅÜŸ”ßìPÞ’ÎÔßlo5üÞl-'õ`ëâ^9 Äðv ݉ی¾ðn£GpŸÅ}öhi È¥•sbI}ªug_ÆòD58ö )9ø;â¥ýN¨…²…ËÕ̽ʕɹ£Ñ0¥Š¾Ê–”s¬£uR•ß]Úvüæ‰ÕÄ*›áÜ [©cbk¦h't3\7#­ïî——ûÞQÇf2G?Åë”q(½f×B¡Òùö‡¤yeÑÐS¹ …ÿ 8߀¼fʪ^#ÞªéN9#;sâ…ÝÈ#’As¶?ªPPç`LK¸RßÌX.ªHh‘ŒF ¯b‘J¦^÷|á¹­±Lî²ÈÁ¥jÊ=¸óâmÆE Ï iƼÌ/‡QψGøÜÅz{Ä{ûÏ%ݹ¡Vû‚ý-ñONÝCsÃGŽÅÕI°C¡üfÛùnû›õ_©ÛC#¬òâüXXr ÍÎpÿÌ-u³¼š»þî$íþ—ß=É‘·¦÷Ü­›½oÞPG¬Ua¥oyÛ0¢Ê^¾,¨N×6Oê7çî(Gzq££qs¥.º&ÊcÑ@›AÝi-¬ó#ìC1@½l|ö¢"Ç(Q°áqÄvÔÉcƒC«Œ#ª|GR7”ëÜÜ0N¼àPž®ŸsNwGôè†+¨JŠQ^'ú3f×ÃA¹5çº`z]Ó<׆Ö6nᰴ¯ö½ü/o.r.,¸ä*%;}c7ô _œî^=,”WF§´åI²Œ‘EéV¿rÂ1*ðÕ¦þR=@¥Vn qpH¹?+%Îz°oYÂbð°9 H(I&]ˆ™îNgébæƒ4<êRÒ³ +"'-Žx.Òàëœ\j—´0*âw˜ _¸ëÊò"p)U ` ª Ù{¨ýN5 2÷¬’‚÷œ½ýÖyQ%]XòBï­G_WÝÛøãñx›LÉÿPj=HRð¥d†Ï EKsº@k_ªæÊÿºb£ )ŽHØK?¨ÖfÍ$â´!JO“I}bá_m3õÚ0í\îdYö˜'ÎøÃˆø¯º/«H„t¼û“ñp¨dé{<ºŽˆòUI·H½WÍçÞaçëùÞÇÔ·6ß»¼ÎÅou^ „48FÍW‘à q ŠžX5澿¢+ †-I© më s¶.¬¤Á>4œõY¦òÇ*õ$î({SeŠú†Ã=§ÑúɸDFÞÝ{Éè£Ô#ˆt1>5n¤Èž·»kn`%,CãÆ‹„û _ssñSvòÖ°5Ô± /Šþü»±³”<­ÆÆ¯Íäô$ Þr^¤Nì ɨf^Ù?·D½?Á•²o1ê* ÃÆ”_3†vGR^Täμ±$3­ïˆÝxc}Öž‹ä®Gʃc0_Ϥ qylbTm’»47QXHZ/Ê»ñÊrŒSÚÆ}9;©ÎLìèo}W®V£œòÏ ”m­òÆ{FLNQ^´‚¥»JZÔ9ÐÃWò…¬†^€5¢Ù67}pa2ø=§äÉ/ÎÇ8½—V^Ozð»]?¥õµíÄ—ú:œcvU|P~¨¼[\6ÛzÝ—»”ÞLÝ]¬èõ6=}ºì­ÁÎÒWü:'(å#ÚÖÂäÔ»¤`o$Sz¼dW:„ÔM;Dîú¨àh*ÈÛQvDYÜâã8OV! Ì Kàu¾¨KÚ¸K3WOF—æ‚G‹ÏÑ¿ùßWF%¸òÍ€/ª£ä‰µd1Ö™ÒǨ’ûóÝ­V”êÈXxá"“óþ]SeIØa„¨ÒŒûÑîø­FW[ ca^Eqòti ¢üÒÝc@X3ñ¤ŠMådÛæÂðqá{¬¹,Þl焱›«¤ %mˆxa1˜0-Ìu. œ° ’´q;Ãø¬;k49š:zã™MH Jbõ`üêÀf‡»øúÛR-tÙ^ÎȸmBšöÌozH&]öÒoªæ^ÏJ,o&mÜÿáÚæ®ÓM¿r¸ôa(Áh'Œ—_p%eiI—:&ÔÙHÒÒ }©¹ë»ûåÍéØ Ö·ÒWÖÁFQן-s~=ÍàÆfçÜIƒ…6N·³&Üu†±oˆû©#°w•ÛúÊV8ÉÊmqZt8]žû?xù*2éܾÊû/Ý_§›? |êâwêa_Ïþ$=%½ÛÈWvXezP‰•¹TRƒéA¸ ¤gôк+S.ÜKr!ýæ¢T#rRðÜν×ðFD^ÏÑ9¬­ö¸§êÍmyW´sŽXYƒ›3ÆfØ"üÖd¥Dºou5ù½Vĥ爷ÅrªLV:lä¿ì Æ_pQôÿ3é»Óñæ;ïH;ÝÊAŒÅ8ù—q!ÐðÕ¼‚Ûææ²QcçoXßÍí¾Ñ0í$g–…Ac“R´ñŒ½<,W:uCËipÚð-þV¥¬ƒñ¼z©áOéo>¶Þð÷êÚxÙa¤ü_ºÎm½yˆ¢÷}º¾A{ú#pµ!Oßz3ÃFé׋ˆµ†ƒÖ)’,ØJGkf5Dd™4Ù°‘uã[y®Ô4VàËq¤tÎMœÖ§™Blýàv.ê$Æò8 c@Ö¾Ú,Ñ[ô5 Ë…ßA¹YÜm,á ±18;6«Ý±–ØI{ýYV®%­Ï… ±hÇŠåˆJÆcÒHÂÒ"ÅW´ùý×Ê/eѼ‰/B ée{ó„´=÷«â5dRsTƒ$»&®L,”E7 ‰Òl&OKü^°["îZQ½š¤•X ·Ì€ú8‹Í×MÊEnÌ)gXuÎâ –»I{t® tÆO©BÜÃ;3ͱϋRÔ¶™=•J/z˜¦ã3k¼+;“æo²ÑnÌråR.Ù%öø*•ð3F~õƒŠã)³“Xµƒâ_Ú- “Ú師wŽÞÎ{`}þm}ŽÒ¦Ãy=ï!i.nÚ÷­ w¥ð÷.T³Ü´¯ª’Ä©j'óé—MÃÏ| øÿPŒä-oQ›–ã&!ß'­Ý2·™ð¶/ áŒˆ”ˆ]ã–Õ­[«b‹G Éõ¹+=)Ô…²í–õèÈå/t2…lÝès*–ÄîqÉþ/s+yÒS¢,ÒÈ( NŒÛ«‡\X¨Ô5šŒ*¾—óÀÍË©ßâX®øŸ™øÐ°Yb)ÞÅa$›ŸWÃÿŒ¼ð‹zT©¼Äà× áü€Î¥¨ƒz[ŽëtÔFì!‘5’Ùó†såݘ[C|JH&rNÜÄHñ, f²Fòlƒ’†i‰ORHÏKª èuRŠ./Ö¦ã¼f9^Ï„¸sߌcpš°µÁòãrô»`±nQЀ).€P˜÷.˜e2ÿ鱋)dT˜f+…y’ËåX;nu™5ÎÚ¢Ô›°?ê{ý­O_þDˆÚ7´‰{¸‚¿‹ÑÿF=•>µ«4—4ÃWOÌÃÓ4.Õ€!-׎il²Õd©áéúAš?i÷ ÚýÂ1A«“ž¦1©=‘fí@ó`îo/@ êŒ ¦|> o1@dº=žžk#1)],Õ(Z‘â~_2fC+(vb>+¾ØõÆ” ZÞ)KŽBd´“Ò c”¦=ðfŠFcÀóž%C’Л—Àe\ãÅ©t‹`9³^*TÃ/Kg!Å«ì&VýÔ8±5Ý£&![é,Wò†r˜`±‰iPnM•j9Ý’Ž‘1–ƒ”ÆbæW#{òÕ¯*Xæ‚§ùù•w(|%òª¶äö»öà«ûgä–„ˆ~S‡c—E rH»iëKKÝPCÚl‹§(š1 9Ž -¤ éîèdé]¢±Ë ¦AÁ.Ãô—t½«̳IµlcŽA%ÚC*’¡ï¤|„™Ôð>š5ȼ‘èòÔ:ÑÎÝçN£ú2š÷ÂrÚ̱wñ‰1v<€r5G/9Z´ o8 2À˜Ãè¡¶ÍôCÝ׉¶3~\/ýuutßzÀþ1²ß ›ið€÷þei ÉÓ4Œº`؉^Û¿c©$?VÒÒ OlÚfzb> Êi½êù«ýR+õ¥GhDFÑ5—Õ¸è›A{n:,IH߇ۃ„*/Éñ™´»i÷@2¯a¦xþè¯Èrî Ñ}J©dšiúer¡)çDÒvîÒ7郒6ÆVé–1 ™ u!jÉ”R}V)äêDùò]7–ƒ”}r«Nš²¼ö…øpÁÛì^ᨡO”f M»QÖÄ–¥â~8)Å]¯R¬ÅMpL¬êûâZ2’+>e~¿ ÔŸxÒ“¢•‘íÓs^ËiåZHi”lPõCŒp¨ cÑh¥BÍI˜¯.$"†œœ­äC¢ý%d„á¥nÈÆêV«9ú¦ÇŒi‡’œ¬rîÚ"N¡Påõ ­ç’ÅÐßÛ𖿤bå¦trg·ŒqŒ 9ÍYkÈžjë ¿Ñ U&FKüÜ8,ˆý¨xÚ'HÎBj?qžåØ “FÏÓ{`5šÙiÚ=Åi)yû†‰ñj„…¸J`e 2¾¯v>.Ù’àéG"*Q‡ãCœÒ ÄvnÜwÖHëƒl]'Cw\X½ ‰¥1H‹Ù8ɹTC9Ø/ýTŒ-w ÷xt´L/•*äat_j.s–š/¹¾øs"»ØEvúØL;wè¡ö~E¨Æ°Î5ii,ç'#}e_;£rbν ÿî5ÉâÜvF1&”¿„RêpYQl+.ú;(Dœ°@¯pX‡¨IvFßéÃY$fó€ «Nè‰ÿÛFMB¶YÓY®dGŒÆÂ4(·Ú6Nøï)tY¬¹Ä²e2 qùUMÆyJ§ì#uL‚fO5?}лÌܧr–Tnöæ}Fö°Ò¼ˆæµZSÒ0åJÍ@÷LÉQˆŒvRd¶2¯«X&ãWýðÔV3j’Å9î<È}a¢–|“¨XpÚ_B)uçAÁ©M¿\ä ¥AÞ—Oª“æÇ†,Ïý÷77›ý^t¥‡–lÔBrÒÂQýÂä¡!dÿiµzýò»I J]à{Ü+¡7þb}P— ‚œ iø´&¥™šJE±¿4dßÇÿŽ•æ¸°h~Ò cpa¸8à¤%OÆ“l æ1lï¤4È«5©M¤á¸@{Ž}8¢m`÷TRd4æVl7GMBfuŸrSXi­6±Úû±Šoâ¡I¯ÌXùVñJõ‰ö¿µ7ü"ð»Ά[ˆOð!H‚ bÒÃ;yþ ÕÒöü,±5°á.RëÍ¥¼'ðê@ªgHÚÎE¤‘l»Fóo1ºN€ý¾ 0K\)8`ŒpÆÝzHåû[C¾‰u ËœVK`•6Ææ?ƒjåàç•>Kƒ«M²]sž€­+ƒä4hþ™Â¯KZ™„’8ß»C-µ/ÝHCºI7ÅåÄÒZ¯c–|ëyñ¯¹h\8ŒÒx=7Ô¸ÉÛ¿ØD©T x—¨ioÄø9Š“%á!Ný: %d§,NåjŽ« w‚Ç 3f´îÔWŸyÍÆL@öˆ1$ʶHghó0ß%ohëkG–±´Ý~–\c“%-Ha"Ÿ+v×´¸OÓœA“¤ÙG©i’¯…1’T¥¾ž’­´èUŒÿ¼Â‰ÙQÙL—P5ßD̼O}œ¯à«åªùUêÍ;®9,IÃ;[`E¢oM˜XB'ɱqUÙmP´”$­Ñ¬Ôgy,xHÝyP4³Ôe+Í«%«Å˜ôðX{δi „1§Ö+…eÑpê ÒŒÍΕ5Lí µìý‹ý{¾ŠéŠrà(Ïã^ÑN&®gzÇ19qçW÷¥Î=Òßï¿ðwr”óäSR*ƒ®ôNÖ/–ü­ù¤¿§6ÜŸ¡£^—j‰Žû†ã¾wvÃ;0J—™¤wÒ ‚v¤øy{¾õ;ÌÄŽ…@lÆ2O3ÁI,ª‹o˜{³w¹òÂZ÷ûgøüDW>åóSj¾Ú;(ú–¹õ~JÎúø7½ô=Éÿî7ž!L'½º¥™§‡¢·KЯ7wPB¶WW{ J£§Ô 5/)RwÖƒò£öqË.ŸÇh4_Ä@gç)\±œašž†ädÞÁ’vÒÓh4oì )D &8…¾ÐÅ A ­Î|¤|5Á™ùïν‹Ë»Ù :Ê;W´HsÈýiGê˜RáD%:¶8oÉ«¡ut¦u/è‡Ú0<%‡DÖvRJ6þŸM‰Ïù®÷7óJÐÂ<ùõÄCÔÇÜ4(y´j–ÒªÒÑèDõò)´>Kð 7aææâ=ísú,yÆ…]™ñy(5»ÚìSŸƒò9=$‡E7 i‰õâ¡Ù:÷(qàXDI …Tj$¶“üÍÒ/s¡ÚjNí©MÈ«Ü1r8¹<ö6Xþ·ùFÍ%áæ"ð%¯¹ùc.o ±–Xj°w7Þ"YnE¾VvS«,XW uaâdÍ‚ñ-d˜´™“!9É‚ˆyaE}š¦eÌh¥-ê}E•mjtB!3,[\ö ÎÆ®[˜–þúÏ‚ðÕTŒüe\˜qáöJç N¹)##Þf˜Ã¾´¯B×,?WÛ"5¤Ñtt.“ŸSÅVHj¼éØíÂûÝñ:«LgwëS³ 8 ²Ñyñéd+~C´Wh§›o±ôrR¶/26^øN¦û—Ôm° Z³¯÷b6ÿ9<ÃrµÆ-$Ä÷èæpsì5`øa8Ç¡Gص-ÎÞôu¢¦ÌiHHñ “‘æ Ø;Ô•’¼¿/‰ûzŽžšõò+¾µ6;¢wUÈv§pªÆE‡A¾sFYã……¥mÎg –<}†Ï9 –tÔ3 Šs9dÆ\2Žÿ‡Á^XVÑ€³T·Òë\%$L[È}A ÿ.åÝ´|È{Ѽ<Ê ÿÑ¿Y‚]å{lóQ%›ÈùÎM©’ †Y=7 Éä!™$]#m1 ýOkÐ’uÎ oì|'èP1hv”®yáU5šàa?B¿šiÂ/mç"?FéôðæsbH–è¡w-»–´ó*YÛÂné·f§bdÓ‡5âü‚‹æn\Ò¤‡vœò5Zâ3ôÛ…@|ü`[ÎSÙ!þ¤,–´è5ŒêhÈ+¼FNé§$KÐ%åð¶®›ొ’µõÅ+ª‡Ñ|o™h6ŸÏû'À€üOAtήߓÑ. ÑúÝ4ÞÝ{ÏXßcÀˆÐöª7 ‰ÒÎ;ùÖ6ËQe€Ã¼‡hÞCl´ 9ƒ?/ÍÅW†>kÈJMüu7”1¹?}M„Iã†!Q¶Þ~¡²± ò»,ØÆg…‘,ÁOž¥Cžã=têÍ5º$,–Š‘ï$-Ùø£ÔÕN õ#œ7Õ­1ɺ·ÝóiD½YI©åkПã¨>Rôâ΂§ôg˜atÞFZ°hÀ¥J¬¡KØDo'¿ž¡wlTUz•Šè¯p -3Ü䇔,ŠŠÿ;Ñ÷_Hs*3ù¼Ìõƒlô—îŸ9ûÝ-ܶµ4¿ÓGHF “ùkߢa£c Ë–}µ-kLNÒñœä,}ϸÉþ_ZÜŸ8Gp ²âµ¼n¢!ß4Þ-¤ŸžÆ-Â%b½dàºh?´ÿÐ]ø–]Çjúj/çGã¡¶Õ ^ûkˆcúüÕ[bH7IƒÚÎûÎ[ Ö•þÄ)(‰3tûûm/í=ñ‰ÀšZ¸©¶HÏPñ º)’°á’÷ }ZŸ¦¯—§×Ѐg2ßô²äd'qPÆÐ‚‘~³DÞ±-n'±o¨qÉ7vw.;Vç bÔ)/̲a”[!·ç.'Åj®IS)ÓqIiÓ,ä.–ßf:*VfPùФa—¸sH›µnR:þ?¡0«^xxCÒHl}ñpêOü² µ° Þžõ;°K—fáëƒ- tcaH›h;—I‡ƒëþO¤½J_ÜëÅŸ”š¥5'»‡ )_ ¤.dGŽü¢9Í{ÿ)igïÌ#ԤѹõºDBîŽYß=¤y±ËýÄÕÄÈA"œ½çÜyÌ¥}J 3f¯¯)¿’¼Ör%¹pMÅlýÎ,­Že[††Lކt“4¨­ï¼×ú–ÅÑä {ãÉýI~@›‡ÄÈž{φ’l..'îy5Y´51¸9ô«zFlø@ Ù):0s]§QYÁWx„ìØ¥.¬ºâ’Ã$L^Åj}¤«cîÓŠt§GÉŽ ›Ö.!¹ÖÌ.Í[£Úë2\ìRq²°8xñ {©<­†ƒó­ñ©‡?Z‡@V~˜µ?±ù®Å&qí¥j~Ü"uPñ{Þ´S6©;cy¨¸—µ\#Ù‚–ÆÝçØ0¢‡ìZžÚüÍ&{ø«úVÃ`’ÇbU’>t£ý)kód¼»ô›H¥r¾Ô½¡õß"r“JKü8ü §Sô+Ç+É¿uÔ ÷p¼×\±×‰RÐ[jëfÏpï÷¡Ñ#Ø|É}ç­?kÌ “ÂM½ÿk“¾l7 á~7ûZwän¢Kõ”„ooL©ÁÒkÎuþÞlMÈšeÏÒä0Ð6ÁN¡²-çìy-óEW¾1‘†¤¼?Ì$¸ucˆßos©xh:öÐô*‡Ú¥x­åž3—sã—†M<ƒ·„ þBJ;§i÷ø|œéMåÐ˲ñ.âëIöÏž>LôX° $íB|n¨s9é‘âì.mò', x?¥a ­»àÉÙE }_&kÜøäëÍÙ­fŸ¥-‘\v­ò¢ög-çóqc¨‘ì‹MKcóÖ)¶b§Ü.çuã"ù¬(±‡´›uéqZ<}à|Ť銯íºay¾'é}•É{ -¢!;y.æn˜WÁâù hQ‘â¡kÑ£XŠCš±=à ìh$3VzxÃ9§þ¨vɘ„4“†×…)],Õ’J“®neÊëy7t~1™S~gd³¹fgI²åžj\Ð&å[#M›A®Z]ã‚6Lc‰†LnçÆl‡6º,ÆpØ‘„Á§ ¿‘éÑæÄÙp&œL@zE=ã²&WÆ/«çí–9á|ù`ß²˜œ¡CôȾ‡À,ô|"¤‘¼ $Á•cÂÀž»×¶9¥nÂZ<é£þhD[ßÌr°©8ys¸š²p‹Ú,(iP[_lQ<™°°j${ =W´ôRþÜ ð©I€~ÈrÎ × 5’ËÕ–t!ú0À­…¾ZJòÚKuIÂÅÃý7ƒ7 é&iP[_<£˜–÷V_ÜòÂb©ë‡¥íÇ] Ò9F¸®$üÔü…Èé5ñIøI«F²•Èb©F̉£u Ÿq Fâ*+ŒÙF}ìïiÅÊàƒ˜ø]ì0ß0L’h\Ô¨³èûTQ²ã¹@#ñ·ŒÆ\{h²x£ƒxj l¥5!—Lþþé,wU »Dɲh$CÎ@sèd’FÇ•]< '¾bõb+%†Š*fUBgkåSjÝÚy¤¥†Ÿ»—W-]ÔÖçGcÖYÒø8¬=Ø^ÞòØÍýƒ›·fÙÇŸs¯è¶óF!‘s'—«QZ”›äŸÞh t9–<õ¨¥)›VRÜp땽4€ÞNr—÷¾™a+Q¶r<6múŸüAÇfKÝú…õx ã#mšl¶oókþÛ‡ÔCí¡j\~åGëV€ø»¤ÏºmûW y`Õp—îȾZ÷掷cp–ÕP„Ö6ë§%KVXâsLH»/¸{ª£?}èú­u–à„·d’­©×,s"îRþ¸Ñ0ðô=Oû0ã¢BÓÇu:újËaþÂNÓf‘?¯Ð5wô¸|„Ø¥b“…âV‰±–¾¸ßYwœÜ5m.=¤ñSûnh…ú-ÕTR"]©4q}õR}µ¡´ÝÖ¼ž‚räî–Ææ$¬J]y©T,:-ó#Â?•ë+F t›îY· ß„Á•ÀÞ£6úøÍÉ<Çý`Gâ˜1È¡»…=RRâ èlŸ‘­ úïz~\ #êþ*MvÑ=77D^*u±Gk«ÎUqü€²µé¡ÜÔ^ë‘êŸ!­¦Ú4wyT¬+ÖJTFæMc¢·Fk7mÊ»{`¸—Sˆå~(!ýÐt/ÜÜæQ)L•õ eõÜsjÜ3¢§{ùŸ ”|3® ²~|ƒö—çåG ?¤î¦ùaúÒÌ… Z¿róÝ<•{|’¤’×ì>5Nx „Œ 4VI¥)œ¯©þ ÜND4þ76<Ôº÷- øÚƒ AH]ã’ 9>P?Ú?äD›XoÙ3Z²Ÿ$Ûò¨\Çè!Ý#jƒFÄ»¨r“zimó»qþÜ/R9Rüןö-›q·òŸøëª² ›kùŸx€ÐX’ryéì-#ƒï|¼ · :‰1Sý‡¯s[´¡ð}Ÿ®¯ `ÅVÃðNÈÓw{!!œöëÅ ‰3¶ñÙs¾ /[¥¤ß‡)‚)y‘‡|ȪíQ²ªùåoÕ5ŸŒîºz$x .±¹°ÆcWé”}VÍå·g-h6½,ãHÑEm“-õuJòS‡Gãɰñ$«å$³ÁL¡wë°«zš|OxsQæpPò&»ŽÝ»Bš=›MQ-—a E¡ ÁhF"S“ €×Ð"qr «r)¡#®Ð@( fõHUÙÞ¬3UE“ö ‚ë˜[[ôÁoZuNž}ùlObÀozmLU@‘JêË£^èÚ…GôÃàgWžÁzäø>Vî*Ö®êÝwg÷ûºå*öE×¶ˆv¡‰üüÌ4ד‹kÄÓ*Â"ºñï¡·oQ¸°¤U’“ã7Y•ë2ÓGUþy“œd ñˆnRñtnzÈë\e¿³õð(‘’lÓi…Ad‹J0pàë„ó$5‘w`¾*8¡ Xbõ¤aQ< âüoOSàÄÆi‚D &ýHZÐÜ,ÉÉm %lØètžà›¼ä$<†vSi9R+4Rúº·ŒAE‹mðUÕ«bª¬&Pœøê†þ:ü¢›„U»š«»ËnÂOó Ç7OßÌòN|9 ýrÌÓNÑhøl5\÷ouÅ|‘š¸ïoõ Ô¼©ñðèç.9ôžM`b×¶º(û×n.Ï¢KÞùàQÀ†›i–wÜqÔ”:om rQÛä>Š:{@ÿÑGãGÄlÖû ¶Ê¾ñœËS U{Þ)Ú1y4Â?G®,î">™â¢x[Ļ膞Ÿ‹|Šw· #ñIOÕÐ<×èëLñH¾¤.ᘠaAŠStð}ð‡&Äv°fÛîÛD=APw¤päBÆM°%@l ï|ë\º:¯Âš¥*&³šWª: âAUéÒìó«U¿dü¥›–ž…†¦ Ÿœi dQ\Y”Q˜ Û¡#m ®nɲF¡Seo‘þ5ž‹4Em ÎDEC½©ë’Q…)ùë‘zÔÌaÝÖÍÛ¿IãÊ ’mÅ‰Þ ûk*c!c6˜ãJæÊã×8]ëú†] JUžuë59gA(ÉUcc|ðG‰ÜIÉ™m7y-b©í-’¬èÆ¥[dCÏTôRrdUå´²+œ»c[25+«òÆ%J“x’yb#÷Ïì1Sæ«Z|£ptWMâ±<ú´¾;²lO}ÕE¯™•¥%¹\š;•éWi\Pœò[ªsW´¼sWóÏ¡;iÃä,Á“ø41ŸBì¾­‚â/ûtHp¬mr7‘mX•ÍÞ¶3ÿUJI cÞQ~K6u!÷I#lf%`«+êa P6£rô*ÉT•ŠÔn¨(¹ê{HpDÌ…j”«E7séþC`3¦Õ£#p–mxó)­èüW¹q™€JMèÊfÂ93!ƾQ1”Ø×9TáLБâ"*Xãg õ\¸­ìÉýÛHîi΋;qµº„’•î",ÌÛÂÅùQN|ªî\y«òžx?^¼M*F’vî©¶ùp°ù>px¿xüQ*W¿cm8ÜSÛ/Yfü>¯êx)¨rç¯óÿO_5—ßÙtÏö”©¹²}¢ OYOÓù½T䝨{á‹svæÙýÀêê¨9ˆ«Ç»ÙOWm¿<ÝõzÆõÛUŸ>ËU±¥ÙœZ±·äKø)c7G¡°p[PÂ*êùP ÊO=]!Ÿ©•»!VRÞ>—ñ™¸®ª¶Uý°+L-Où,ºç¤è·¡]IX•á:>r›ˆÔ¸8ã@Ê•¥Â®ÈY(¹°º\žêL‰šž­K.~ØÅµruÖq]êY)VüY o\~{yž‹mOEqÕ^­û–¦aCz¦ÑZMxuÏ-æéñ쫯>\Ö]ÓÝT³£zÿ}ñ„m~YÀy¶£M?ù›ØAþÏ &®ªY  €²¸%,b–ƒÇáWV]ÔsQŒ[u42'P5x–гD'gwÏõÝÎ4]”†³6Þ…ŒeGƒíÂz]2òŽš¤á9é\yˆŠÄãîÕÁšPŒ=߯Œ JÃü™Ý±©mÛ‡2e_SU{BŸ~]ÙÐÏ'ŽUØ©¡?Ã9û>tÕµ­²£‡ù3ÒÎ1R#Dâï/”|žö']Ìâ]FϹ$Å (w#ŸDWm¹\{ëTúô™ŒùãŠ68ˆqôªÖz¼—6L²\ΜxÙ†c#…@ŽvhìÒÀfx]Q|Zýå©íéÐH¼ E>B<3Î+aïíGÒCbóƒd³Å -X$8wÅœð²¡l´ª´(=ðrat=WÁ¤Æ’cç Ò5ZÕ›"çäcôÛEñéôArßZZ¡*Mµã^ŸJ‚k¯ÖõZ§/WwøÖh—\ “³O"ÉÖ1»0ã¢Oôÿ=øíòD~oË=0»Càúûl¨Ÿk?=¿uŸÒV.¯7RzÍEŽ=+ãŒÙˆ¦7×¥Z™räͦ†JWA…&…;c‘Ú`3©Iþ¯ €ç-T+ýA’Ú —a ÊÑÇ—•aH o ‘k5”—¦#ûrùÕò %ß·qÐÆ@7Œ`ËeØ«¢2"@R GV“Ó€Ó¯ÄRc_„®P!Ð&1:õñ/ 0Çlv,¦€†1!D]0PB ï_;nQÀ×)°i³_¹4´ñ¡=¯"Á་ÆÃ¾£À˜4.Á¼ÐMŠ<ý‡ØÕ™$¥Ęú"u}Ãð¦&v…Y³š; Ç _lù‹¤ÝI«ÐR›šL†(¤ð™Ë ܨ J{DVåexRR*jÑÅ\ÎY Éa¿`“hDòÎå? ïŒF;J=UºŠÈ®RÕƒ>Û Tv Ê'øòj¥—SìÎkšŽ9kq׿ëîÈ?„’3æÆUjÙ_6ÒI †Áéž Øë´¬Á'Ú@2L”Ä@m„t Ë<¬4À¿/[ 3$ ‰ºê)iPc³@ÓJJ£s rJbÄ/ÜR`ZuúíD¨¨ft²úÎÛ¼9G9ä‡ÍÝ °ÿuL ªèñnFhT’0|ôG`¥°‘º¬¯z½%˜ðóîv»3ÖaUa‚×â ¼Š=¾m*ò‚(Ȥg‰ l6úl&¶ ùœx/QŸW4Œ^æ™É]IŸÖt!iWånì蜑Û:áZê¡ÊÔ+!÷®È€†‘•2L!·a¯ˆõç:“$2¼* …ƒEàÀŽk£t‡[d5eXI;`Ì¢Û.Hö/úÝ“ß¿Š›Y©§aìFÚgxT´o”`òyÎI Ö¬\JWf.FŸ97EìsL¥ñf*GvœY1ˆ YA#‰Š8ôS”´æ ï'†•zÀÆü5 ¶ÝÀ¾sé°’ÔìÃÖÃlì =ãG†AÖ~µ¼PìÎÈUFŠ6JÀ*Û`Pû°‡ödƒÙRáNJ0œšYŠN±O.ŽXÃTÈ+ê{µ¦p5ÌãîËû…¤…¤a 5VBéÎÕU]þa°º.4úÍH_¤]ƒtéÔS`ÐKlâÛ$¼&pˆ([;¾¨°Ì¬l¶îv†޾îÝ#ØÆrƒÃüÒ÷.€#¬>?Aw½€~‡‚ í·‰(÷vGÚ&mÒ½åÞÛàʉ‡H‹óý ¼MD±àB/¸K@™‡Jˆ¹F8Ò…c„TTrÍ%Á–üu[Á¤f–Í"¯†8ƒ刨Wس!ÔØ‚p°ºtÁEìÍ NƒvÃ'5´³’º0LN±+ë–í&Œ^̦Èi%O,“›„•)šÚòÌëɹVC©çÄ6Œòšü%,6¹Nz;¬ÛqÙ)™•Ä=Ù‹6Æœ§à` y˜æïïŠtãKʈhg³˜ý•'”fx3h ¨`P¾VŠ3†c Fc`¶Â|äoX­DçW`æRrö—_’^ˆ)ÕÈ7¶r`ö#tU¬Ô‡ýR¨²"ŠafxÒfñXŸvX¬× h:ÔÙïM/Ø„[Ö8`š ÇJÊWÈEû­Ïé¹ð\àöñJ‰ª“lAE`*«ùÐ+]P¨PÍž m4µAjH;+|‹5£±úpÐ<£ÐâF tRPú°xt d³Cý~“ ƒ„ï+ª‘ÚŒl0Nj°‚«)³ÂŠz™:׉„gR‰ðk®p÷ œ÷îM?© Ò“Çl|ÓpX„46Š$éžga³Y†»D7ˆ%K%Àæÿ—(ç¢G%4õ^}p> ܇­¢ÔY .>ÜÔâ/Fb=xq­³V{©¿Ãè’L÷ﯤ7~H R‹7FF©õ±xg½Ÿ5toÍ-Û„=-56”0))%‹lˆ[£þNIËùÌ…/ÉQš2êSl¿Fâ9åÚÙ´ÃÔÆÐú›¸lZÍ÷~PŒ°lµ~ä4ìUÛª ËØíÊ0˜a«Ú{›#ÄÂâÄN1ö!à :Ïœª œtYÍfÖ²Ú´ >Õ–a?¥6'Ë»_ê”´O°âÞœR¿‡3%ØWâNˆÌŸŸ’@÷‘¶wÕCrZåm°znTÄ,ÖÅc·õœÔŒ~XéªÈ3:‰K-TÈ(ª‘z*哽ߑAÛK~WP¤4\ZHa‡©ô†m× ‹% Èy« $ü¤a™ÚÁeAÞV±Æt°Ô6Çû´}Ò ²š{±špER´w@ > »*S]A¿䢡žK¼ {mFq9+‘ͬ´®h‡Uɬ´Q™êÆ׿èíÇy ZvÂJ•㦖‡ÍØr$ ČÆZæÒ2ðÒ®&v@NjxSˆ¨hÛº¼%IÀFÉjmlT‹´[³3NO­gŽ ·ZP¹M£/¬ò€œ J ®¨sÙIÚ“„¾[XmthƒÔq?H%ip¦±ÙmB솓äS¶Ý?áEñL—“Ñ›J“ÆSzšÊ¡­:k–2XwsŠØÒÀ‘«z›EÿHrR§µO4yŸ´$˜ñ¸ÎgœÍû°)›eSHºRWY³×†Ãe>¬ô6BíÝÅ—9o åe€Ôrlİq„*2¤]ÍhºÞó©­ptBvãk¤D]/IjÚ–ð›·a Œ$5SR``¿K.„Э7J°6¦Ujå/$n´q’¸‹zñŸ¸)c8 ºûùï Çú€&t…f6NÏ=*`aƒ‚Á”Yî…³_ws ¥ Ó1lc5Q^†¥+Ô ÀÕ5§Ø•ë©ð£9û]'¾„yB_ä_Rð6(²_ˆCÁ a–oÌûŰá;Žï•ȹJ…º¸5v*¥¶› º Ƴ)¥Ö<¾e!•pŽéæàáNi‡™‰/¬ðõ; xéý¶íþ@¹á—Æâ¨¤O — Bqe4Ûeì‹JÎùª&´<–JéWê\XÙzÀ«|E»Éï õºf(ʦFhDÒ• ¹Ì ptJd6*°Zi}¦yþä™?ß!ÒèÚaÇÛ£áßWþ‚纥]í¨žÚì?õMØ2|!@WO)¬V* È¢46p‘ÓèpE@¼ HÜP8Ø@þ^s! idaNˆÔ( ÃD5v"eª8õ‰ e3ò‰±˜bÆ%6ÌÛ‚}¢këo‹ŒFgá:2䨆Ír1j {¡Óñ}(c2ú{˪Œpð¤ü%Ve'}г¬"ßw ±"´ûGe£ƒ..ÔŒ¥à. Dv³×€75³Ø–! °Jú¢ Õi­-”$ð$׋< ¿6e.fy3ú¼¢!:¥|Rˆ'ù@G¶2E vŠû/c–`7°ÁWðF:PŽNq~Íúûm°’ªÓc Ñ+í@À’‚¾!ÍO)á©1Ï<4ýÊ‘'¹ªjŒÿ€d.Ý«+O¬§’—–ïÓËËüþ˜9¤Ýö‡òsWieêÒ¡çr‹Aôé.åÈP¡ŠàmÂŒäƒæ»ÑLô’4 šGÛnh)-ÞV>œå+HÚ¥aÊ V†õuóM flÅU6¾flµÅ)ð„â F•iÈ©3ÿ Éì>"ê9lƒZ]¾7`Çÿ.óU]³§¼Npý¸Ê®[ø%¢AéJ¬æ¹T‘‘Ûèáv³ånŸõÕ…Þ%ífÇÚÔã(·ãßOˆù„OtÇŠ,Eÿ‹~=æ½ëGè]õ,ûE ·Ím„ÍÆ>=ÿ¾Âq2n$9Ýx§ýá;ø!„\d€jt¯Ë‘‚®àÊêôâîø LixÊf–¹5V«´Êè;Å®œË ™WÃñ)\Pž ‹SP6‰IZ"cØ(i7Npª=§¦¤·NgÖÔhBD›@¯qš¢ô‰%Ï$z<á2—sŠý×dr–mâI@k±vâ+[75).+Eƒ¹t¥]'à5BnÃÎõ¿±rc³åt¢è¬ßÝ2)£­·¿–5R¾´Ê’:ã`s‘Z¨lfµž(“ê ÷xwmbRŽTðŠ4¬Ž»2^pºžî!1ª#ÙN#ŒÃ4†Å ¼‹}Õ üŽ¢±¢÷aŒë騔àBÏ#Õa·ø]ò‚ÅX“¼«.~ãK†OYÏUcÓ‡:$’ÅDª¼°´E¡±¦$YmXЊ8*UŽò¦â$Ç7µ¿æ:M½è`êÛÞÖ÷ÛõšR¿§ÒO»°auG=e9­E¹²Zit±šmXÌR LNŠØW(µ8úpL3µD-FÃl#dµÂjÓ>à¤4 Ã ‘ptRÈeXmªÌç!¤¢–„–*YWþÌñ¥ˆºA9Z18̵|˜Ÿ75$QI>?0E«Šlôg¡Ø½i-Nü¢²jÓž6„ÖÃéµ±ó¼8"¸i„Œ öK&Øû! $smð JŠ˜î³l†­j¬Vr…C KcÃbÐ&ÌHt„ýPx´3¼D[²å,#Ä‚4!²©1‰p,ÆÑ -˜œcw¾ÎÉæåÍ Ê9‹“+§Ý¨6¥—$%,>Ey±"^@6Æì3•lNVß|!ÖEm‹²Ì—&àŠfc7šƒºSèFmBT_.fóUèÚ¨± y‹³l¹Ôó™£Ì<³I‚؉–3EW}`Â)ðÍ)á XºÆ‰M4ŠhÔÑ£«’k+WaíÆ-G ʇY.Jï¿Hq¼°„‡ðtbylëzvðqIl¹ k+ƒ”ä¥éëÁ–®̵ÄU7N$LÔ”_Ô«’TÔaP³At_2Òºó^%`AåCÀøƒÆdˆ%m6bóïc!v:y2VG «¨mQ}0þÓ4§f5i=&q:±tE‰Ñܹ|Œ‹ßè­pz©ŒµÚD♦š3˦˜Û•¶‘ RWJ!r48Y «ˆq.æ¾>p§ª`0ç):™Æ`>æ'·¹zì—Õ-I!ª-fµË>‹Úé…ã\aÛ–5 ³‹+v#ìpÑ»Õ=™îÊiWÐkË‘뤦€†€fý’Ç  +Ò„bÄD › ŠAc%¬!ʸÎ`Äš»ˆA‡ýn°oo.h2î Á´ªÇ¹¨m°úì{YÐpœ#$5;'VÄÄU¥ª¬æoœ(NÎÉ0¿ m²”ƒ¿EµåÆ#ƒŽù$O¨ç‚´r\„„E\Õ„Stl<9LÂýO…Õ\z:ö”Øhž®È^ûu*ðêÇä&ÁÙê¡æåwDvexZ£’Ú7ë¶}uÅU7nÞ|Ö‘[>;Ð\u„º‹A1û!1NÎT6ž—?]ì†Øò”¿¤:çò2îè¡ š[ œ±`æ¶”ºÇÿõœØº¡žžºä‹±×T6³r†8­SüÉdnÌ“Yñ³+$³yZs”ÑÓV„¦,9­Ìö‘-z¨ jr7ä™ûäâ8­¯øÇÅBQ!'…1¸`Òˆ) ˆL¶“c ´ˆ„eEÍo»'ã|U攊:‘£W—²z5ï¥ !©©§Âeö{ÀÈ„fÀ‘ãÆe°Í>Í9r­FMA^ ò €@I»q ¦¨1°7¡Á}Ø/2Èåå¤Y0ØØbLðæèi¥ Ÿ ·•%L…~šè j¢êi@šö”Ä“]Øa|sÏ®V‚¾4÷[n–Þ¯\Bl¢¦ùveþì…»ôÂí#î«òHÙ”°½({[®s>`…‡]'I¢¸ ;9]µÔsqýVÍ•wrñðS—ÖRW±¯ÚîRDjø,«æ:² GÒUÕYýBÉ(L ¸`ì‹@•&=/¦s啚“¯£`Ь÷Y‡'w€Šõsò-©pã«UBoj“Úbö“ÛÔ¸HÓøsÙz«ºP• X(Ý/‰þö!çpò~R³4~H£báNš†£P2žEymÿt¥s«ëz®Ò6oÕšùYp·¨¢åqÅå%ŒS ðÁR„T$>WžíÍ–+ÐSJOŽš¼qb‹è¥±ÈF¡õ¸2/ÂGkËQ‘}ývzR<ªÚc®•â*/Jh´îàˆNNNí@ÌT\Ÿ±T ã×Uš±>ö >¹9†‰Ý¨Rï™úòoOã¢ØçŠ¤±RnÖS\mW|³‘ùæÛ2„¸|ã*cÚÐt‰#VDpãbî™»ï3¾’ÈQþ¦öŽY]¹£42,nV¿æv¦´ª°Šz.ª®'MÀprUOL²†ÄS\–¤Ñ=>hÌÐ|fTNºÜè¿<á·g6Í]}: ^³šbiÊüÌž©9tø·FGvm#Ä4=PšY6ÈÅ©9Yt=oRÙ {S–â&hetáÂ`´´# ZáàÈÜ®HŒr~)|«íf¥žK~qâ…“]eèõaó×phz\QÒ.õOÆ莸D)7n~®h6v£dE홋‚¤}PÉWÚ€x§„k  ˆ¬€6¬¼€Ã[#”Lj +4»¯mhY²ñ›laÚ¸ Ì:5y·ùä ±Oœ}¬iµÃêh¢™p/­©vHm¦ìˆ§BYS•n¢q1´4?„0ë-V&áPÛA ¹a­›„þ@Y*®ûÄ™7õ@E¼(¨بM@jRɱO\ËhÅýXf¶Ø<c´Aë0ÝRˆ}¢çŸ·rye$uÝy¶ e|Ä„®Þ.<7š<™SsõwJŒ»)÷£_еæ«Û5y³v| à ¥ Á}òãûDŒÂmxõ4r¤2Qjü)/,9©Ò2j»}æźì.ØQ‚óu‚ÑÀû«{‘C¶½´ar–m2F éõÿ†Y×(³å=—&Ë!aUÙr¡†)-ÂSé'¡ô©ä9SV+›Pt¾N圆gC°³úˆ†j±b*梠kRlÃær·s§Mi'ük³]Cc¡/ùƒ `YÓ¾³Ù†\´•…âSêäço¾{pλxPÿÿט„᫇YI»!&½Á§ZÕM6VºŒìú”—Ó>£Øç¸ãQT§Ø×4êFÖU ŽõtnKÄI¿ÔšRÛé_K ­§1¬cPü1'7<ˆåÂÒà¹a§Õ‹¸h.ИFHQm= Úž$aAе@3 l ÜLäͬ4¬iãaY'½’Ë…ËNm`\ð„ÄIfQ*a}„ î¶Hpî@X ê]i,ü}Ký?P¨ÂGÝU=W™­ý:ûDYãã"-*˶$´Âp‰Xí0&"gtwŠ>xLãíÐ+J õ¸ Ö¸B¶ÈŒ)šr¿yc7•¯j¨¾^Ïl_¥„ß/ÈÐøð5 žåç‡B'\Sj—Y—WÕÈhvr ŠïñIŠO­™íŸËÁ)ý¤‡hÙª‘ ¶ò»QcS]¡±'Š+Ç>U]ɸª'ôPº0Õ‘ÂñB¿dü¥›gηÃ+ ô®´²m©®gq{iÊâ^q䉩q•ºÈBqU×iåáxÏ? EÑÞ«š Xƒ]£Áž`Š# R%¨Ð09³#z¥¢†EåÔ {Z8(ïüà™Wÿ⽉iÙ¢´Ã°û¨¥Ñ`LÇ § ƒ â%./‘§5ïÍÛ}ÿçößž¥iúº11ŧç¿שÿí§¦ó&ž¸±ýçúªÅ¢¯xæD¥«.eN:•š}ö)oÜë‘rNÓ/¡Á¯,.¼¤vä¦-w9ëÄ“ ŽEžJˆ;°HL?c%-"Ëæ¢z;ž(úGѪäƒâ"ØøwÏtUó÷÷áõý‘xn ºjËIÁÚðuß(ÂàùGîî‚|G,œ;›Ñ O›‡¹ â©ó-'`dX=¹Wq)¨mj¢iK!JÄa›Ý b7Bfå¢ ‘r2úc¾rj¹ 4u©Í«Éxl?W×ùc‰}¾-áÑÅàJÛ=åƒ ÈÞÅÛòÞ„u0Ì~45¼ Õ‰ æxoAvýZR;ÔpQ@Ê‘k5”#g¡Ôóœ™y¿¯ |ãºÑflÚ09oÄShâ»§¸õôYêK*fjwî¬90 F»Õ™H£Qì¸î˜7³±’´Op®KAì(L¡Æóã3Š~ßAÁÊ£” ªêÑKÔ¹!øyŻ܆…a&ÐŒ­ç¤fô3ÊÀ2H&p Ôh缩-fûô^!ªæÚ5ú“ªF¯ò6l‡Ia«þ}'š}5NŒñ£¦Áú5y¾Ü[6à#7ƒÍ÷Þ97ÀNiWh< ´x0mÑDÿÊû®EEJ#[Rb.+%X0ÇxgIè«^H&xëA…•ò| WIbÙ¸~áÙ)@¶ÚP’u'£ž+¸ä|…×iç¼™ÅZÆå X¡4\»‚'‹r?R¢ØÏÏr1;<2Ú }qîXŒ ÞÔjŒ¤}Bì‡9²æA{òbÀI ¶ê Œ˜!´c]à1ìÆÃîÓn¥ªÒ4ç¾°xàÅ;þÉÄ“eƒø!:=3ÀÓ5‰fºfÇÅŸšF3¥ž™‹Y¬—Ê]¡ +A­íT Ò®POƒÿp²LV+–(MÊ»ÚQÉu&ÍI²77òBwéÅÏvèâ yDltR5’A<Âm´G©)ÈKÓ`“h}äü–`£7‹š>lS£íÇ%ÁA؆`ɲ1p^VW•Ë黲ÚÝÇ_æ`Ê›7+´6ØÙUëéì(ÛÌòf„là“+›ÓƒúKS¯¶í=BNj˰M@=Ä>,Ê©þ+’Y¬ï&0šAÅänÝÄ š‘Y ­²u ¦‹Yl‡ÆûÄ¿¡±'æZ Ñɉ±›ˆKš|MÄNbg5eX+h÷b^Û1’¼P+¸’Áå“C[0öEØ(Šj¤ž“š“c»hºÙóT¦Ø©g.ƒ8%Ѫ…¾'*xäoª7ãS'ªÿ ,rU©Yóý5#ˆ«¾e[y¹qjSpö“‚PTææ½Áéjþÿ,›Æ509 bLäèR;°GJ›÷`¿Z»<ÕM³CQÒ~=„/"×Mu^êIç9ËLù”DQÅ"Ϩ7š$­£KÆM4¹¿-e·%\4åÂÕcüJDŠÎab3Õre°¿ ^F»ö ;#WQ3ý¡ˆæ(ÿ17²OF!ë1BÞԶƃ$vl/@L› ~Ï1UhI4üÿ¾è\¶¾Zuçݨ„C(9‡)>*rST›`ílåÆiø® G†Ò£gÃæ$aeŠ®¼jýÓ_ }÷ÄEm“5ÉIIµëM¼ß,2OW='5£Æ–î²X§|r#½$ï> ޵MFÃþE³±)*Vu¦aÃÎ÷¾%<ÅUw¸xá\$¬Â2¹Œ}qã-Cã Ò,«î-:êêcaŸýˆß/4Àp97çÆ7§¿òÄréãû"‰çßtC  Ó^‹ƒzPé üm:hôWüHMinϨlñ)dJ‚Å•cw%mub=ÛÄ^p3ÎãZ§KŽìâàs­ßÿ>È=½¶‡0密vÑ×U¾ªËB§ `W\žZÂS{k¢xýº±>Ň®m•Ý.3»ÂÝ3U'aòzêÚVí-²õ•ß`ƒÖMÕÄû ´*‰¹þ5«+­Ò†Øä#má‡ZÇ¿”}˜¬®®$8/©…æQ¸ÞDo¾æªèÎnƒS¼Á×d½¯Î´D¿ó”M³.««ßSQyH¹Ên•Œ[ q|>â$,£3Õ"’øŒO¦(ë$ñT–p>3ÚÄ]Ë¢wª­Ìü¾EØöà,aU]ÅÁgÆ Íosôm¹uq‹û™wW…¼ƒºÉ¸ê†Ý)M¥»y([ûÁ=,c—p Ò‡FÕ¥¯PŸ3JœÂ¤¶²W‘v—‰³µ®îR޵ŶøÝ±õ¥=¾HÝSz•7Gr—/ÂE÷)_¿ª°¥ãBèÝWur¤ôÈŽઇGì› ?u;º+þvas†ëvÈ#oäëÑ{L+»Ðª}]sÛ¯¨$iWz%ùdåèå 3;,ÝIìÃÎjOJéš,¬X^|9ó”„«ÜÙW–z.RÂ*êñPçC5¨*é¶W¤Òšdõqj€9¶Ûý£½Ù¨ aÂôå«‚ 1+ðv¬^82qU`ÙY-bqê§htYì¨G¾'J÷_'°i%ßcÂ7B¦·a Œl;¨l²ß!ÇOåS©ÅÊÁM0pÊ×€ï;Üy„Fb‡ÅZ‚ŠÃ´"µvÎfoËï:\‡CÞ¼Ý#oä]ƒ4F°M`G«"—a:Œ¼X‹zˆ¸*íµ>³¢€¹b*ILž÷Ç•G#ç[[P8`Ú{2Ër(g¼Rh< ïpR J\X¡q1*%¼Òi’­Ø'Q<é!°¼ÉO‰Î¹Í_TzÈðPŸòí÷u*6)aáä¬{×kXž\½'.Êù=Æ©fë?…xó}ÅtÜøÔ†ºB“ÛL—Ó‚3“km¹ïMÙÛ€OÔ:E$ÿ¡{X‘µ&z›}óØœjŽj$(Ø%WSX®ô‚¹'@˜4¬lÃmÛÝØŸÕHx¹¦îtwÙ$š-Ü$¨;‡ÞáŸ:V¯éØszª®ŒÕÞ8õsA ‹èÆï|wÉ·Vp" &À &r»³½Ú‘G¿Œa¾‘µ ¹ªcÔÞPm\œ$틨§‹nXP˜²„)šÐÔxû ´å¯Kƒ¬”#ç  E¡i}rtL–ïJý°ÒmöŠÙ2¬®Êl¶¢åÇü °qÑFè50ÆÐÕX~üí `ÜÅÎ;yß)ݸ3Â{;ß3‚Dí:¡hØ*Õ°±RN oµe&²4óÌÏUm.ºbËçÄ’ßDɧäaŒF¾ãþÑHxåW‚¾Úõ¢¯åo7„Ý&4®'ßN]Ʋ'J'u£6!ªáz­SÑ>ºåb‰ ½ñŸB®qùÃ$¯y OY\wxr’0áÞÚÆÆ¡Š´ÇÁ .ÃJÚ‘´rk2Ò¶"í ]7³±a…ÕX=Ä>Ñ3HĽ禜ö šë½ÓêMKL3˜MÅÝeäÀÖÇbm®ˆ}åÉ_Ô«’T„š« NÕp¦À䤩b0ŒbWFOAèŸcr‰€1±;ÅÇýMeœH(æ l…$`Ø?eœ]½Æw•ÿÚ4Â<Ο^Œ‘Ú~^6þý%P¾l¡ÔcBìÑRˆœàn$‰$céÆ úÊçIíß©&C¦pÈí¸мK¸÷ù‘>F(”ШH!8QtS^l©Bˆ*#”‘Mµ^rQ…ãIç;¹‹®Y«úp!ta ‹°½Š;j[ÔŒi&–ü‘×4Keß·rÙûÓkeXpÑÐñ}¬,᩼åóÊ„ Ú•Aßc,6ú3¡ÃrQó‘Íqb¢ÝP9‡ýVÃf àã* ¨ÁL r­€“’ÚŽAÌRtŠÝX(M¬Í°*˜ÇŠ7ä$zë*_Õ##»¸NM6W N` ÂÊ / Þh ©§A£ÀøTš/´©«1J€‘ÆêhW8«ÙÌæs†OuI=VqºÀÁŠ)<§ “-ªÆe¢5™PTøá eþl`WsÌuFÖËáG>;»w§bv6g®¾hP’ C‘Gø,Ù=¿‹þJ/~B'¾ Ň,›„•5_•X=thÝ`ÈÛ„Ø ±_6Q°ãÚr«5K4í-î†;éªÒ>®ÂtMÎ#«ÁÞ»0°VM'Á,E'©ç"~ØEìÆ8Î7!”&æ«N®mâ;zF//OÀ-uS¸ñå²*ð6:.8CY]³&-ú‡}RU­I^°ßAçG` ;!ØígØ]ý/Áí,ð9L‚Ác Jì}5ÀCsRcÚ>Óej¨ÆFòâ\'Ê‹qœ¡Ü†-Ã4«ö [¡4V’†Á*Q™ ×iÜØI³%+^…•wµBAÁ›dbj_•7ÁÊ0;E\¹s¾NcÙŒ*O-ùKv…< ‡×°cA¼‚4Ô(5%6»MˆÝ3‚‰¢ iwšiñÂøMßÃñ ÕGH)Ñ$LH7kƒ3‚u¨qÎÚ`Iž&'62 ’B=‘K/ï*À– é: ºY_t›†€ËÎRæìÀP©Mòáž®ÍE–œÓ.îİ8GÑ]ïã“,á)s£–Ûo¯yþp‘„®vþ&„l ùªÈ±KÓÌJ¢èŒE1Ph¸75ßb"ÚEZT¾ª©$äØÄýùôOoýüdüS6kå1ä#ÇÁ§l¬Ôc®ÚbýN§£cZYêé28¢ &Ƹ9_î_ÓwmÂî ö+RQnMB6å;{\Š%¬¢6ã™Mï ›:гÉmUÏtùšB‚7¹á1/GiZÓåOÇ<´F E¥œ&ð$ÍöAÕ ¥OÑ8®Ÿüó¦¬ jÌæÖ¦ë} 8ý¾„‹ôˆjˆtÉ*ñU/Gu_X5»Bks½ T>òwÇm¬!ßðû£´S.I04ŠWÜAþÔ-ºuÖaÓÐU ¤©ú¨ì F‡Ùɇ¨BÑY×`ÿð&DæB©›(›‘~[Ì•¥)\Û‚‚â"»q–àXÏÉçÝÄE5^…„Ui>—í!<«=ñô_ŽÿNâµ»k©•×”k’G³–V`ø\ô‰If„àIge_"î” ¦SOÎÕå)wÍÉM'G;™æD {H iõàˆ¤ rNl=:ñ–ÓSQéO‡¶ÇKü#Ný…¤ÊFM‚b^ÑÆ{ýbtã$7E2£¹§ÐÏÊ*‡(abWâ*UÑWn»–ëÂ6úŽâc´tä…Ñî©0øSaLLte½–°*áª=•hZ>'¥|ê!5Esµ‰«¨±Ö+»ÌrrªKfyW!ÅúæRyˆìõS+&²–°lNÖ >?Jω¯Rªº !‹N?Ýg.;–H[‚[ôFW!3_;’#þÂâó/Ô¹=ÚÛ à,Q!Ž•m§HvÈr %AéÔÄè’Qšœ(®ûTµ-¸äøaüIæ ^ÿùD/Ì íQæàãiBcN<¡Âi\Wn&0ºÎhºi‘z:6GÏŒiD±æ[ªòÇ…VQOSµRé&Ú„Å×(®—Þ.+wV~€†¸h.0Æ®®j7 TôÀ%këpkk— dV‘Ä‹7öéo×i<ÞsP¾Ðu&“™ÈShGUeÙ&^Õò]§9­ö²‰µµÐ9Á7`i:qq^StÅœÿ°£-­žÌ’¼´êŽ^¥‰aFQ¹6ÃÌA(NåiºB™±6ûÄçŠA1ÊÆÛļsR.'†ØEëöJXpñgÙœ“c•êâRö&ÊšDjËeA¡´ª°ˆ>¸ÙÑ6ÃüÝÁ²±#ÛÖJ%o62/*}^Hè‘°Óâm(>ORzË<ÖÁ›[R›ŠvLÐZ1!PQÞ;`|F®OÚÖ&4ûÅnãÆKŒl´ª´¦D3MÕs¦ËvôdÂЕÚ1A‚cm“-åµ™ãJɰ+³l 4)LÚ<ºžŠv¥Ó%Î.r#Üæj-¶Yí¶ƒ5•q:çÂrHÀÚgœ?„âª<™ÝCÜÇ0¾©¦„CBCÒ‰±¾¶Ä(”#ãŒÙTÿØhÆ\*Q"w2%®ç*Ú—Ç›„å·çQ¶W×"úhJ×CPÃänQÌ› ˆÒd7X6£*M̵аƒÝ©Ù²L|b•hz³»¯ªTQ·bPº ʼnÛSÔ)ôn dÞî½H«FÅ d¾s‚PtÔ×U3eucyÄ…ËÂbs…;Ê®ªŒ!° М(:ãj©1z`Ê–Ñ<¸sŽ}U‰«ÇÖÓPÓH˜™ïð)Ÿ+w¥ŽMUùœ@q¢ÇÚŒQ˜qù³*… ÌS…Œ4O¡“”Â󇩜wJVDåa¿e3ú5ÿ¼GH;OØ@ú} “Tª¶š²*õíc!§4ñšióU û¶t¸÷K«úÞ ­7¬áJäÞy©Oâ)ñ$¡“sp¬m2š¨Ü"¥]êi²œ(® %¸ÌiUÝ…WZ)Nd§¢]áNPr½¥œrTŒ™ëG¶Qõ+ëh½{\ãF c0Lì´Mr RtQÏ…›óå~4]¹6ª·òòʼn¬Ô£¯wúµPv*âç(‰]xCú’Ç¥®ŒtºÂø¦¡¤°±A>5å'>Îa8k”}ø‹QåÆ#çò—Ý™žšÒËŒz¶Ï?± 9Å,›ÓêíSfšdñxv–Ì!d.{&ÄÕÜVízðö*vÙ&PÔ,v´áB»ç‹,Ó-m¢—_¼Ieæ©l æjù4§%+´cëvÑ$<Åß:>Ó×ó)Û*»‹GLN+KX•'äÄJ¨Eimdn¯j®ß®lE©|mº7SG·ÃUcŠ®fñÄøDâéÏK„•ÚrãI9)öp ÒdåŠót÷vœBÓU á ;¾7‰Ûk*¯Sc¢„=a B­ªÆHºò¥‡CòI–†OJmA÷³¡jØR½Ìk"q5Ç›¢ÇâCÊe9”­²ñæäÙÅžV0qoZ`›ö]„EÌ*3†ÃùÑ …&…IÍÙsY¯ßT›SNÊ\NŠÎ¨Ï¥ÐÂÁù‘¨í›úaUH粡xc*VòÛ¡ì´M”0q–Ø(}QW‘œTpäI Ïœ<½„#Ëæ³—‰ëœÜÔo/8ë6hE«â™ŒÉ1FÌè?¸G*y’—Ý1¯ø>d[Äe_*tÇzÂígYÅ_2ö‡CêùÔmÆFž"ïeªÍŠOÿà†k«Ú=&ÒÆ–×’º#'¸4_Ÿêti¹¢èÚK^=¿ xJ»‚Ñ8ØÅcŠ«ª‹¨MEy³Þ¦nE½ˆï"­*,"_U.,£m†mA ±æ°>›ã‡ ££—ìi+Iž]—F“3&ù¯»º¡h¾DqjuÑf6`dqo6à¤>­H8ìøÆ%šaZÈS‚‰ëÔˆŠÎž•+&^i¯Ø›¸²¨þfw¡ÝÊpáQQÈ ð}¥ÀÎm ¤dãÄ*Ëå©rœõà?q‡É EçëœÜ•$T‹L3K–Í%þØC„çý£ûã¯0ĪSÃQó“ר«jDVÚFa—"ø‚ë¦È„ë4&«9Q±ñU5¾VD%|0Bäò^(Qó]Ò{¸Zêx€/j\@ý? ·ÛJ¸"Yt–Š;'ærð"zRÙn×É#TÕðfP´a:L¿K@wüe,çØ§ªÍpdI4C’pÛ7ºS¼i˪\)“2’°PRDpÄÜê6sä(ßFø»À)Ô­á2,>û©@¬¾<–<§akƒ\+ GÖ(3UZtU³qz’e¬ êhºîÀñÆý¹è¦À#¤kØÈ pd5¼!±Ô”6´3ìÇU5öR‡©È ¢a*£A ìØ'6£2}'INÎÌ?[!iwŠ]9ºûäYA>óRD®ô–äÊû‚¡6Š‹wö Ÿ\v/¤Q‘ìIû-Cå—š—ðpŸR¾*´V¼È¥ÐF€ÓÀÄ…Ôœ™?1˜Ø†%Ùl …,ÛlS@„;BÈȾ[9;z T6Ø@0cü mjÔü>ÚyØ7ßKˆuVv‰‰ZÝC %z!¶õÅpŒY÷C µùäo…Oµ&P\Phÿ!ëL³dm0ú?«Ë(¬v)-C…¡:ôê“úîœóžu/`ŒñжËã×]ÛØL6i´1ç´Œ||²³ ·¼&£‰¢A«Ms¦ÔcmˆBo® Œr9†:¯vA¨ÐƒÄz%' Lš“Eò$'N'jÕ&¾³èVЦþ2f=‡ÏWòAAHÑ/%®O%}Ðwíçs èƒÏÿ9gùƒ0‡=!æü ‚ưä|4@僺ñdtyN„ˆp†žŒ¢/ è@xŽFŒâ¼N¤óSž†+tá¹à*íÀ‚yúßæƒFà8Â…(ŸaÌ%}â‘ã÷'Ò§(…>ò…øÌ2òà:s„ŠÆZ'ð7)$…P°ˆZ~Ô{J~ ' ‰ŠÓø´Žgëøk ¤güW@6zf2’Nô_)Š:># c;ý@Ò@­ÑÄFAŒzeL/È\Ô OÈ1Jë绀o*È{SCM¯€¡þ¹SPH3Ê e†¦áIá2iLB3 F,c#®Ï)_‹P‹¤«ù«>çêƒ'+‹øß°­Ô6í´Þ•6,Æbå±.+7R@ŽA6Ñ©ºqÜ\¶Úr™Ä‘RL³ñ\/ƒ¦àå^ÈXˆ†¢ìÌ×m¯ uåAáúP mÅ@89­òrÁòX–{5I´ GÇF‹qì N2@&c‚}Øœ? +|…éé¤2é‡ÏSŒñC=bQ2Àzj¢Ù'iì óƒuZŒeF t(ìdu^”Zž˜"M°¼ÆBFïI±„‘ÓÄ.¢“$ŒÛýž¦´PÊsUð–DqQrjegí»fñ+ö®>R 8…ƒðÃ’%ÔÊqç{×ËôÍQh“.ánE•¯ðÃF"’éšÇ,99±'÷k›Ü?ÄäâZ{ùë´´'ŽGïË×TR¤Wã7™ç’¾8áO±yêŸlª9…ÔÜ[ˆmqÙä„j¤ä ]ªOßÌ6N]©^ }"ÿ1ÂÆ½Äç¾?ØJ¶Ú³ÏÀW±Ý=´Q¹8Ñ¡ú&ɯk+ÏáLø¢µéëi÷µZJmY–Å’=뤊¾Uc¯Uú›ï’Tð„MáxW¯³†×«àÙGõJüËi·\¦åØ2:ÆÅz¤¯ôQ)µ5A­–(Í(8Í^‚ž)jOqËnÕ^kÊÛ5ËxKÐj1ù ÆVû‹…^k”¢Z#EÇ"1Êʼn£³޹Û"uý[¢m²g\ÿ·êد%õ锨zz3òÚI)iÌQzå¼ôÈ¥†ãfr7æôŸOEžÏé ms¿çã‹y®üÇ’[Ýò^¡05÷Ú_· ù* ŽíÌ_ XÚ}D5ãQËû´—ÛPyâá2ðX8$çhXÛ"¬k7»5ÈWˆd )ô(,¤|a>&7#þEOÁÏ&t±•ð òŸÅ¹\ o²Â%§fÜK Nô'÷—J+³¶b9tqê—r²Ö¬kz qeˆ9[Îü YÅ%D2>zh&üzé8Ïðà¦TM¢‹õ) U|&ÅýÚâ†÷A» Åÿ„—„bÅøõÊ1\kªÜ¸‚ôõ‘Š¤Ð«R¿°ú+ç^7”á‚S+5ÐM WÒݾ 6KMø\¯äæ\U±Ðåjµ¸£"E4„Q”û5A4pNNt(Khäˆ2&¹L¾^ÅΣ®ÿKiS¼­ ¯öz“™tJ¿ATO‹2”}†Vàß&T?^ýîœØÏu…÷ýŠb|–q-+#dF'7¾|.…üVh­ø›.N¡ ¾z~Y¿\n9:JæÆQ±X£úA¨HVð ‚;6U.=MP»œ“ŃqŠfÊ!®± 7çoƒÂvö¦÷N8¢#\qÊjšùPn¸ z"ãvÙ)´…'qL޾*¸÷˼o!œ<*'Æò6«­t·fh÷kºdŸØ:ò²¥P¬´;¶OZ{PW/à)mOñJ•5º~Ô‚“ï…}ÍsOGH¤\± «èu~ȈÞ3ã?øðY³õó -±®´æD<ìpòzvÃ!¤ãé÷R^A>Vóõ«ºÊ­_“ú«¡­Î2`ùÁÞ)Ù»! ¿W².xðKïiT³6`kœðà¶øÐ—%©ž¡®j%ëÉ5'¯p†¤Ä‡‚ #s"“Î7Íú±¸^§PAôœÙÅÔþ3êå[/L©©6œ&š<÷K„m}Íüé{M¨?ýʼnŽ1%KÇÜL¸uÆ)LìPjûó®_c3Óß.”pži’¢g£Æk¼º€ΜÓM‚lú¦›È˜ZBÒqYytp Þ´’_OªÃÏLéÂl‚ó]3Ž‹ª••U^.\ñT{±È²q4¡"¹,.áâ#ˆY)\!r¹zD ‡¢j—ÿÂk Í0­qj÷_]ï ^¦ñâ'uœ&«yT&åRI©¶bùýá×ñâ&V¨Æ ”z5yu ;—›p5-ÐDuJÜ/å\Í…~ÐÂWÛpÐm[s³< 5§‰|â”EY_¡^ùà¨ö´#n— ¦ã¼VAm( Žå]¬Ÿà[.kœþzé'äÕ‹ïêH»Iël^è™ÛÔãÔH-X‹ü©(H.!.Åçµñƒ 3FýG ë51yÑoæÃÌÖ5…6&~6K¬@ª~é§ëµš¨ŸJw )Ž…Í GEj-,¢EœÓÎA–å²áXÜ/Å´Àõ`Á2QóZʲX ü0ϘýjÉOvšü12ꄎX‰—f±~xÓJ§D…‚˜ä^Ëç‚é?'¢G&áïZåhÌMÈq]œý Åâ1+MÈv¬ûŸmé +÷;ΠçQA<ÅϬ°›þtźY(d1Q­à“ “Ñà5Ÿ˜x} ÞšÚ«Ú„QLZNÎþ·=½ˆûíV›ËPÄmOZ©Þ¦Æ'ž{5“¾[NÐúÔ`³U«†`ñ⃔9*ø}}°~ÍÀ9)¼5%k ªP,´÷'|:Ô0_üÉ~„ôH"L‡ád‹T& GFsâs©X¼B–œQñEÄP€BФqÌØ4„8Œ)q'nÃeݺê ä"Ã+›™×l/:‡ˆK×¥½Yá¨êÓXXµÔUt™QmA ªA£Eüž<¾: Ÿ\f옱gH'…Ý9‰ÒŒEÃC#Ž™€Z2 ͘¿-â®öÖ™Ò+- žšE*FœÎ2xÚ—\jƒ}Í᳇‚|]Zt :8~S™tÌðMˆ=¢½W@>@ +œMÔ2K4‹â[F-—<j’nh/&„ÜKá•0'üÙx 9·T€µ”>kÛá$cÆ'3 µ*á2 X—NãµóBÏkÔQ…4ˆCŒÿD¨q:'B|rý \¾5~šÞ#Ía™a <玿ºL´Äß4 cöCAÿú $p¢ å°È¿|Íá”6‡T,nTëDŽ´à‡«J|rm†h«2Z«|…dhŸÝè)\1’†CcÑØfD·*È¢$ž-TcøÖ*3ÚÈÇ7ÑËÑÌIl# ‰\R&«ëÕaa h¦ÒiQèŠPqÔT¦H“2§æ4‹V Õ1JhfÓu«ªF Ïð_d`'iÃâᙘ7§[ÍÏç?ú !<„é0°LÜø±øT²?fäTÑ×ÑÙ h9SI„Ê>rh“è˜]  c¡µÍnš d8{ñ+§»ÑŸgh³uÜ"úFŽœŒ”5V|Að3á'ÿh ¢€Ëe¸É¯ ÅÿüYá3åöEM.!\Ÿáã!„øìŸG‹z°ç*´3fËÝˉÚçÒ\öŠý¿'ÐMŠÛ>¡[R3¤‡Ó^Öëã6ÜšÛôôÃ…ÊMМÿ­ç%D/Ƚ]ÙÍB`¿ª•îÏð‹ z¿&æHÕˆƒ(ž‰Û*QBÌ|˜6g/ŸºÒfì‰zb ®Í¹ °ÿ¤ý¢ØäÂ[r¯ŠåÍÇDÉú 4, »=ƒHŸÍ‘ð(ÚVû•Ï8G\X_Š?)¾æT¯«OÆePO\¨—sÿùAüŒBëŠAzuˆe©Ä)8jüÂ)²Nÿ¥·&*ïè]… YJ‘5v¼húƒôÒ4*5 -¬YµK½lál…Z¾XÙ.<@ZÐß[!ôŸ&åbÝd¨ånèÛ¬úRºŸRÚNaCÙ™ÛØUÜtàŽ&˜xz½›ã>ù_ڳͅÉ"¾‚lr,È—¡ð7ÿÐ*"’w…:¡Õfciøêâ$ÃÙG"qÄŽrшC“Ó¹ÀjC>ßm>‚X¿ ?YüRø$|‡úD,üéD¶ŽJÖƒÂiFi…Ef“°Þ^¶E¥€a$ ˜aP™MV1qìž 4ë{éÐXfD­í9ªV¡XŸ ¶4IhÆš¯<¿6›(Æ®4‡9æGÆQõàc`û›ú‘à쀜,æ^A™õM£.Øž¨±a07Ù^~Bš„!úp‘e¤Ê!¡8æÈÃ@ø "–|”ã3v±ŠäÈi4rZ”ÂoÖ€j¸z{…cÖ=åSmBÑd㢀ªd(#öO}oN~ëþä'Í!•ǧÌ($‹º¯ø'}²‚ËH+Jr#¡€ÊC*ÐÍF2Œm­„Éel²ɳ3fòÕ€61ËBOi©uP¬¹<œ(5•VBTîúô’KÛY,Fz5'Œ¡V«?ÄÒÙn&ÜmÕ–¯+¡Ñ]1cþŽÂ9­„—p}Þ ëŽ¦”à -Vë©9n-t°åôK¯X»aÒêõn´¨åkg:`~p{jè. •G¾S­‹ù× ËžC’U˜Þt(ûḂ‘,ÂÚh|:­WHF”š¢fòa‘ÛJ’E^÷wÊ?BÇIwõÿÝßKOËŽÇâæ´Ö;MÃ|+½ÉIÆâÕæÞhxÚjþKÞF9îd³z©¼Ú,ü%h"ìà¿D­¬Fп{ˆÃ¹Ñ΢9O*ä”â.mò¿(êS=n¤’{I^>ROqauÂ<¹ù'®­ø\zŠMÎSr±„BN+±Ö­’¦€OL:ût²ÞQ­örð"%ìB–²Ïy¼éòÆúéèåß”Z/dRôBº[sáJ»ìµðª•.•…¹ åCt¶µ„ª/r|lÒ‰sRá#¼¹™cd—­`¹œ,ÃõMªÂ±9z¹F%e•“ŽÏÞ¡‘ *6¥ZïfS9¹…æèã`#R ‘ºZE_@äî• 3«ßätä8å¤G ZúwCÁ\8éD{—‘‡Ó¡”Û4^ågMÄd¸x}ýXT}ÚZôõ jû^MZ( ä[=̾‚œáò¼ëj Î65‘éÜ«ŠÐ‚Èөˆ¿£ŽÃ¹‘3êv³m"ш·¥Cü¹ªiŒOýGA/2;[·›—)^”º´»ñeKv÷=˜#¿<‡?¼†I¥—5)£×‹N§ÌJ$ìËÔ…cpÅÕà /ZZ試«s%Ãü@KßAœµTãfkO¹f(!äˆR¥º‘§7ŽXlfÕf³F*-pºÉ¯F^éµ°ò™èPî¡¿–Ljá?'5=œQë‰@ý`JqñZƒÞTfÌ?Ú-x’MAŠ?B|’䢬7,A¾iF )JnNœÎ)é»ôW‹æÀ©üÒÄò…£sîUå œ&Ö ,¡IèMJL_‹0ŸÆÖܺ£„gk€iÅ ‹ÊØG¥¦éÐ?ªxA]®mb%ƒ–œlb­„á䩹=UøÐpØŒ°¢P­ ,Srü)çËÒs¨m±’Xf,IcÉ?+sØ1‚=šèܯÉÚ“&òar8bÀ­àê•j2ù¥I½ôùEÐqRs²Ží"Ã*îE¨â‚YˆAb·¿QfÍÅw­xŽ€OåIœ¼+㔃Ç&­RMÚ°õô¤J³¸×úUëÔûM®nߣºëC|Ò%rZo>0 bY›´ßXÿ\o|,Imf¹]Æ=E[§¯q´ · ›÷ÍJÚs±tG:n"ã¦Xôž€©»ù<Û—›çI?6ÞËõâd¿1¸¶»­–t%GlÇî©þu2fÍp¡Ã´Çæˆrn¹˜ g¶Ñ¿¨8a>ÌjuÄœ«ñA Ïn Ü<7mˆÅãv¥¶¬\ÞªŽÍ8£˜!·±¬§Ã¸WrÜ'¹/;}ÉImtl‚rno2+ÁžæÙ}/_nGìà"¹ ¬9ÅÏÏPÞ‰°4ݼ1ú¢•w*޵íd·¾´Ú_|7Ý6ŸJÑvfh™yj†|PÙø^ŽÏ…YãJŽ|„öWÝ}TÇé‹Kˆc·–˦dܸu4ܵyfé±í²O±KÛ0üÉÊeÉEç}OØBl 9mH‡ ]Éñe« +ç=?{óùžTÆòt86GTã&c“k/Yr"ë{¥“3¿i×¾•äzÛͦîþ&wû¡ÑÔ9ˆB‡Û›Jå ÷„¡úöù…•Ü݃l)·ü¶p8qF‹Õ86Ç}:¼ åo‹T”Ä¢§¬Š×@ô»dõÎX'ÙÛØL\ú¥˜(ˆaWÈÉûDß«ìxÏá‚³ä¥øXäÝüŒ§¬ªùÈŸ¿š£MÑìMnkúöÉ׋£SåfÔS¥%µRiқʂÕùÿA()¡£œß–~psÊE™€¾¡Ì™ëµÉ/M鑃(£Qš!h—ÆïÐ6AƒLm4cn4Ëߨ‘a¯ -æ‡6@{_Š[¿Ôj#2à÷Â\œ†"ö~À†0¢äDŽ'ûYô¨Í"2õÊ, RHF¹× USncÒNRJуSÊ·E¹„ˆÒFõ2z[n. X†3*4Óô­HuŸÏ¦Üø¢‰¿¿Ü&R*FœNÅö\ câ#4r*ŠÜ¬•ÃP PiÃbÌorôdl¥&µÞ$g»* 烌0†±OCBA»’¡ž »ZN!¥ƒchÆ=¶E>ÞWèÒ),ŠNX”*):‹ª%rð™R»5“D‹¸íìÍ*a8QÖ´“•oÖHmÍ=Ç­ÄêÃMä¼áǪÇMÆî{iì.\îyÿî:÷®ín^ñ›Ê†–,A¡dä+ ®pLÒh¸4Žf©êy¬«µÓ| '¢Ô6ú<í¨ˆ_‘uÚ¯PšÓ…*Ü{!JØ[¹QŠ7k*Bz«qéaÃ\†Z¡Èh–F3¯u3ýKáJïž^#¥Ã±~³ïðˆ‡ç½È›9*|&'Ì’ ÆvÍe˜–Ü«rŒµØGz.†XÃMðЗ[]˜Ó±¡®×®M­qBn…Cú£\¯-¥ÑMd¸z“]ƒÜ¼¶-¥ÝRÞ´k.nä8õLÈeoCÉcá¾m!>pº Æ²(9QQ¦ØŒ’W§/ƒôŸpQ»³¶×^!ì¬c`Ý}îŒelÞ½îDuKØß6¬ŽgfãØd•¹£ªWñ>¬¶(Í„qoq ç__Çõ÷$YUØA±Õiîs]×m‚žRçâÃÕiÇmýá]…_Âi™äºs/Ëü:Œw¿î%8õué)Ö±žä%zj;£+–—pþ1LÏSªg¿©ì|·aRˆš³5Ì-lEÙ÷ÛîkOÉkR½Ö ½äYB$ãÎÕ¹6EáoK½¸Ö ƒl’Wûr9¨ìLÇnbå^¡ÅçÎT̨TrÞÚ‹·ámŒnw†xßÝÍÚÛRÌÄ™6‹tÐG8N(ìÈLȇ®VˆÈ EÇæÄAnÂõúã÷«fìR1Gê…'Îh£Y1ÊÝ 9ú¬6¿…kK •7 {x Ü8ûêѽãA±&g+fö¦»É¸;æÒRÈiõöJÍhMû]G^é–Èõ9é?°&(ÊŠ˜e:¬|Ï]+©„7ª›54sáP~çâÄé„蹇òªר'å|(XçB~Èêðw¤@²ÌX|”T"½ªâÉorÄ0Í­­1.‹!5C›ŒK(ãæ¶¾¸·ÍßdB‡Æ0lr4éÖ¹&ÞŠÖ“å™ÈpÕ߉¨Q–p¬@.M9áÇ •õ®ªýàŽRÅÎ`¦tÈpƾ†%l¤Ý®¡vùbÙ[ÄÔ;(çá¬Eì(Î9ˆ•…gæÃ¤HîçSÙ6›3p²He’¼ƒÝnáßĘ֞Tœtý\ßÃ(~UÝ­TÃýÊn½î,–ÃAŒ¢¾ÓÕÕ¥Y1{Ý'Œ‹Ø}Ùú El+жäíËŽV8¦œKs²½‹Y»‰ WLдYH‹¼õþ`Gd¸½É,ßp5>…~ÚÙŒI£i1”äB©ñÛD´«]ɰŽÕ‹ø‡Ûwõ|<Ø<ù G£cglâêWò5lK›4ÿyõî튕÷Ÿ¡øeÃÙÓ÷ɯ+n.¼åöHNèv3ry“‰œ;¦¸›_Ö5·1g¿J˜†IYàuúAýnAÌ96þ•Ëå´õ¾èµaH»í©Ð"n†5|ÇÒ±‘³Wô¯^hç^—ŒIÿî¼/û½ÚøµeQiNžŒ ì´ §óÊØîãú¢­/ŠÍåÜr1áBŠ-ˆlˆªÍYÄqϲ{X-Ë5Èžà-윊c#gTgÖŒpv²D©‘ˆ]:1çµN»·?*ÃÒ±ÓU)‘Ú¤Ö[&^Lîš{©®TÛâÏÖp“ÝÿÛM|Ö·”·ðfúQɉ@¸ßtÆwy“K.ä6'ÖÛu\­OÈÅýòÉÙgFJ9îé¸Òî¸ÆÏÍ.͘¨kƒ›¯Pµâ÷)cÀü`(÷’ôátx?N2À¤—#Oõý®Û›6Ëe 9ÊpªuãlÈMv–±[º—û]¬lbkMáj¿8ë"y‚Žõ¦ÄBŸ»¾CjzLùÍé r†Òh¹(q›1ÿhô÷ŒIx(p0ÊE¡ô äßʃvn´p̘άöWÅ-SYÄ9«2.!W%blièo—´™“Q}.º5£_R*C¡Mê)>8S~¾º8ÉXìÓÇ 6‹œ“a.N6ßþ&_ðj!#1hädHép e¨p•µò ûi=D4ùá=†›÷ÄÅÝd“FÎ>~¤T5ãÒ€;šdl¶¸-@uÆ^Ýg=’…ب½ðoÊ¿»=bâ54Ì£ ,3×2œmÜ‹ÙÓ¦¿ï`%þFoóF“NŽ ‚L, ÈH›Ó²X8ˆQîuC&ý2ú¥I×#ްÞä$C9ÞXé?~¬tÍ· õrñ$ÊbÂE¢©ß+ÝŒüÓj¶/°OPQm;£k5á³wSì_Á¶™]ËÝ×Ä‹]H³ïY µ‘a‹O²X8ÈâÄÍJ¾rò<ûÝÀŒœd8£#Í´2{·£6‡Ž˜ñ7Ÿ!aÍ‚xR2Š ‚86rFÓÕèdg®—ió‘ü¥®XM<Á€ÝsÚíM›å2å ¾Ù]øŽr:º6 …H ÿv'Ä+Ƨ;· x."*?³w¯˜šB£ GÂÅíɵ_•)ƒÑ‚Z ÿÕb¯n¶lýS¡T»Û¿ z·•í íOÂ/ÝdÜ<Áp·"gkW¶†× ¤1—¡TpÛ0¥ö×}!³õE×ÿG…µ•äƒÄ $%;r“$…Ã"­Ûès /‡R£y·6øÌb½€—e:aûRä¿iq.²ŒÍŒó+c1¸Ù´kÃ4.RõÖt½ŸV6à6‹áƒ§-Û¡ZB+)øüÓ†aE¹Ž“¼h/ o²ˆîS.€~B“¤±ß±¥PÙl€í¶@¼PL|líppåhEl¥öÝ‚9¡¨}õH’ãh4¥=­Ž.i§Ú“êL* 8ˆ‘&UKipm‹eý|ü&¥^,ñ­pP™±"áçÄHU/?COv:~u1³j7+˜qÝÄ-›š}÷ë_ï… ™‹NM¶ÝdÊ¡ G §9c‚f­XC†2GRòµÔ|(Y Ø7õëAʼnÓ9¿²O|µ…¥êq@~¾ñÐ¥MþE'LÝå­åçæÎ(f¦é• ~›rób®A<í"ޱÖ;ág<µÒÇŠòK¬Þ7‡¶0÷º¡ŒMl×’c /Pc¼_NE0{$Úô…R\šs#çû(è^3¦cg»¡…îeñ0²${MŒBâ8Ñ6¶|äb]ñ…G»Œ*9òû.2nŠæhBYÀéTÖ« Î:¾m1@\ÆRnˆ/J­.lˆþsyÓMd¸æb…¢\ú5…ê]ˆßó ¸ÜmÄ>yû-Âðžao .®nVº±¨m×ÏqÀI‰Š‚íf`'¯¡µ¹Ód>9qö‰%}ºÖÛ7%û‘ß{–yÅå…Aà¤ûcûÖ·!Ư=.4à/Em«3׿ú¦e,ËeC¾e«^²x,XcØ6Á_yetˆqQ`òDœ( Ï\¿í4ü#åj-|“!GöýjpÞ3’nÛ‡ÍSS*œ›uó›,úl ¾ÆÊ¤£§¨É”p.h£*Qª´@ÆÄü²:J$~;ÛúnæyÜr¢ j¸ùÙÛ”›Õk…šè=¦ßkê'Úµ8ãúªIúF´¿ ë î ‘ Ћ&¨@%i´\\Œå™’©qt 2™kN“„#Õ§FZä&2T»yçáÜþgR:¨8ÑlìÖn"{^£›Üó8ôO~N®Öé&«hc¡…I±´ƆÖ%ù¾cvr7îoÚyËÉeCު腔+Õº!›h¸É¸{º¬Mv eaµ¦Yw¹È¸éV±]…áû¾Žcasâ .Zïú  )§ƒ-ÝïÈ…­}:tÁW(Êú^%µ /crÄ’S²½Ozq%ÃÜ·"ë•î.­I½ðBx•Ú‚Ë› øp¬^±þ¦äú­Åúú ­7ëˆO¿ÙmK°Ž«Ò ÛÎÃO!«p4¨ ~ ªZŸ#͘ð³¤2r®Uï+h´‚%>C¥‹Ê+[:V¥~Þ¦:±„ËnÎûw²Ny9Üì¤SuÍe¨öd!M:ƒ(àzžó\lêø¥ÞÙsp>»È“3[«}LÏ»Ïé*)òɹW•Û6ÚÅmÁº¥Ã/NÛ¢w…–Øíö[7¯>Qh5A~åÒeoâËQw0ÝÖ ¹#–åÒÊ6ñê*]ÁL»gy/,MéEþ<óž"dÊ6÷¦d˜SeÕS|Ô–uTÕøÆm Ç}œÖ‹Ò›‚ j5K'–ÄÙ’™~Œ<­z ü^ceÙ_Ø^žÔñL„ã÷¡ç^o"ã¦k÷•ÏÐP¿ í|ì"c3nj‚t'_!µ;s½¦öFœG2jÍýÕ4ZwÖK#þâH»°ådñ«Ë†2LŠSj†ét²’ò>ñý*ÜžBÇfCùìœH' “‹+îzÞ<—á®ø'9Y#ÄÜ+‡e› §šlœ_´èY(q¸k\ºål©C©Ñ‚âdãF79ܨV;ËM¿˜¦›p½îþK7ÇÂ4í— ö݈!‡EÑ*âÈ]¨tcxu –¹N{fÁSŽfY&á:ë¶k›› åt,ðâ8þœ J]³ ?°Ï4Ù¨¾šÓÚoz‚Ðf9Ý„kÛüM7‘áª=[ƒ©Ø[#]^Dc‰O¥š““åãša¡I„bSÒÒ¸<ïXËÃàX$h9„…”¼ŸìMµ&ŽM£ý%sÚ]ãîåÄÈ&àrÏöp÷¶ù›nâS Z”¢s1â Ž˜7ÙeŸ¬ÌÆ×_ñ½[ µ}.{Íž±W»—È4O3ÉýçfÅÊ[«Ðb1Âè.Ú¿îoÚäw“\† -(N«å|íiš“Ïöº6ïŽü£ô"…²àEi"I£2‘_Q8—NZlciÕ|Å7äà<6'Ú°Vr»–ÍÐ\µ¢àccÔÅea6èפ/mÔ™,1Â_w›/÷q÷¶«¯žð¦{B.îZ×Å!$¼©Ì¿mB3óʹ=Aø×k—6EBQàÈmC4M½oü¦ ¯g¾rQéé¼hUîöK˾8îl½nŽizÂÊÃÉ—Ë*æ³w¢6Î˦Æ)ˆQîU±ßÛ¿„Ò‘3ñ3‹Bj!·±«ÕèjsU(JŒ¯ƒƒ{A¬sˆ]è‘C9&ùš@¢QÇù M¡kÎÒ9‰WMlI~,ê—!9)¼iÂÒl+*å{RÖ¼BÔ”’­‘x½ÍB1¢‚ «à;ôfX9–É?­™X¾´@›CìsëµI&BJ×K!è]g¿Þ²%‘iSh–‚²†W,§R¸ÈRŠÅda×b|ðÉ n6õ‰yB.W'phΨÅͫЫ Î2ÜìônO]› J×UK­|åÉâ·ÂÅAöK«Œ¢B þ4̈ÒÙž´¬V£ŸŠ¿W~ž¶øûã‘‹¦Û} Î2Ìl¶Í ?ŽNJö\1×|9'µ‹kÝÍJéo©tW/¹Žª]Êf¯½(׿h\®–‰•˜ƒ˜Ú+ݼR|oÝÐw.n2¦ãøEœN)«k»›×e>OªÍÑZdöÖbl›·«³Õ|!YÑSÉâáIEaÍ‚^‰tîõ&2\ß´ó–Óm,“{ž¯býEÅ/9¸®yôÙ¤#ßÕ¦çºçÔü!½?I^Ê.™ \sQ{ ùq÷æÅªò—÷¸¡2õa”K[Xƒ8“#¯Q]Å{ïUþðVZß)¢Zè q¸hz9© CŽA”/®¤ø*ŒÖ©xFÁíe&8ö™ü&­²Fò“à=EHÏ«¦Ãs¢Æñôz7w÷õ«¶À:j[“ðÉf༻x½B{ò/m6ŒŸ9qÜÄ3Få f-_†fã¤ðª\¯ôÚh•rÃÊ®)YÈqlA¿ËìÌ9M³p¢‡r §&—ƒe,D©X*}Mª:- ñ9!>íV;S…Î^Ï›p4ýtí²²´¶kÝ|ä"Ã4›j:,†Ô ép²‘°’þÓˆëåÉ8ÀS³CDôÈÔJ ¾º,/µÕ1È&·boÚPÆ&>=¿Æ±ÕÝXÆn>Z‰!q"“gáÚ8$uû.…7®¬7ѼïÊím›÷_âø}"‘IÕ‹êç'ecï«‚7(ãòs3LíO³¹®<tß2ÎÉùM‹·B><$µ¸=!Ú£éËšS£¢’°è\lŸã¶V@OhÚ¸'Èßf#årYÒrñÕ¥è=©j/Á_GŠ6¹uw‹ú¼¬ãŠøŠŽ.=“[Þ5Å8PÛg\¯,>„VBª}e¿)ú«Í"…WN*ÿié0ê6ÇO½ 4—9*÷ói·4»É¸¹÷ì_àHÊ,¢Ôµü°™ç‹„1žÙ˜”ð(Ñdù›Ò„Dµ}Þ™z+‰"ˆ ªv½‡VB$ƒ'Q>°,å´€Ó©œjˆÍËÁÔÅÝ^·l vÙólSqo‹_¹ÜeõM2‰B[pQrJ¾O*ü°¹œ™þóÒR*†Vä›-W4Éb¾B$E®ÏE¨?Ö­­n¶*Ž w`N~=3Šh(ë_Fmü(!¥» à/!©Kã }î,v=lAãm^8‹_†»!œ“‚ÖÒX죙fè6Wä¼C Í ÀÑÎåL<ÅbH‘Œ©Ù_[ô½*–7wÛ9Ž…ÍI†3jQ«ÑF6k*|,à6‹aÇ|˜Ð„ÂH5A8ßsr¹‰Ö[±²€é¤æ#ÑJÆ#ŽCÑ’˜mÜ ½<ÑÎ]…7~/¡bÄ[,Ÿ%9mÈõºYSC¥Ž>ºÜ@ñÎ'“^hbyX ¢ä›±ùPJ«LõìFbé•£aˈío#ì ‹)*ÒÏŒ§®³.mgÓðýCo&&a cáꮤÑNŒÌ„WjNNAŒÛ‚\ ߤ¤I9YÀq¡ Ãæuæ³Ó>,¢ÀÂ{Qé©•)—A ¢ # ŒoØ@s"?¡hHq,°>‰O‰ù"à“_ˆ,ÂéÜPÆ&èhh!‹²ÒÚÊÆM°NØéÀŠÂ(¶t(V4Øž,ÃåÍ4½§PFú’ç€ ÂWDÌ(÷öÔÔßœ‚!Ž3¼²Ÿqî U]Õÿ9ïàCjO> hËIäY½‚_·) Ök&t ‘>ƒQ­Rج@F C &6!<'‰õe ÃCœÆ¤cnÀ’uJË ÂÃï9 ©M CcѨé_9+q:ÈP¬Z›ÅG@ÝàÃàk+X«§O'ʹWR½þ+áR¤#pjZ?"L¬ÈJÖgnJ¯^&5¾¤ü“³¶•„!Nq d,Ä@äFVóú!:@"rfÔÒÎRT0¬MC…^F%|Yö‘/%¢dT†Q­JX Ÿ˜O ‡ÄÍ £„’UŠy3lFüM†X’.§áPÀ.baÁx'Úòó¤bq(Ô:-R±0m.€ÍÒyÍ.™CÎÐ ƒ0‡qÌxÒŒ¢›f ’Fb…0ãÊšÖ‚(|ö"ˆÕГ9ˆQ\`io*ÁI€4‡'K›$cÆÕ*²E¡Iï Ð[Ê2©äJÊÜ,5÷ªT8af8Ìc›ž”hÙ89£çÞ|„)‰4ž3¾B ‹ÐeŒf ebã@‹dQ5z““ŒÅè„ÅmgŽn:qqut>ñ8ÿgqnw)à rËe“^èf¾¶dí;ðg@Ž[•åÀúkÂÁI±¸Épi´¸k™º*Ô^š-Âêbp,j|Ð&×’¨<7 ÜϦQ=–£rîÕ2„ª¥ã‹ ›äŠÉÁ9$Ldµ  ŸƒÚ”"i§ö¬ÊG¾”°wù'›ý椄}¤a3âo2Ä®Âå4 /ÍÄb7¬ ÐeZ„ ,Šøä/¦…CáĉÛp‘ÑÜeh”öl@ZEœ88¥æÜhcÎiY¿ …Œp<Îñ[á?ˆ³È©E¿çÊŒ–:0q?éSrÂLÂèÐX,¢Ç'¢›•µ[‚MVX÷@zË#øskÖÃ|`ž›%èÍI86D ¤”°a€4)T/=æÜ5Ý=÷ê v µ©iK€/2Yr u•9 q(ˆÆF¨jAìIqŠ¥ÚÈ@S,+ Ë pj„8Œkä ¸6e‘°%œ¹^wm¨ðšC­}åä©>0».dJ†™ m|ÒÄ•»å „|Q£21i@LÄ Z…¾º(aâYйWY†B"K›)-$š€exá¼é›oVgÌÇœÄçn‹"„ù§Lx*Ÿ%ßø°’ÆÔfld‘ŠS½B2“a„Y˜Ì9½ÉIÆb/M …Nr:‹â˜qhÆW:t××Fƒ¯æeÌØÂ·&ùÉqþü<²°]G‚ÏÛìêµ›åa‘¥H°º8NŽôjaåøã2¦­™âÉ-ÀqxÙ/Äj½8ùPšRë’üòŒ7•Æ•Ó ¥Úð°#ä´ß½lNÖ½M‚co°;ÂëÛð.àB•«âKB"°ÌaÌÏ,փ”&£ƒ&綦"¶ù»B£^&>ØÊ\”ŽkIBa%›Ç«Woy ¯g.agQ)ñÉqòɹ¾¨\wû››{ ö6H"û:‰›÷oj¡D”…S¼–wKðOܪçWù“ðÖYûw6Åò`_g\½}%>©  ·û˜X¼–kü㟟؞…‘‚G”Ѻiyo\{ª_ÈQEh±„:¡…ø­DéXkF÷í£L+YVj{æâÄm¨ä+?Xöæ Pß?ÁsÒ?¡x`€#–\¸^wm®[Ò9ºµáüKÊb‘ °w4ÑQâ“$—É¢ArNÓ©QÜUû.ýÕâPÓÔrêïk°JŸŠ”¿©¹5Òø\…ñ'×0'§ —áBeg´»ãÃèÒ\öror’¡œËKjBN«šÃÕÛ¤ ´ÐšÍ,ãA쉭_¸Ym¦ ]ms0r7›×¶É/™ù2D‘…^õVú‡«rŽßᘜqSˆb¯JÉ?+µF>‚8ãÜÁG°‹Ó&˜ões]Ò&_T0š'är™þ¿Ð±rRYYÕ ‡T°.ÔÇ%oÛZó¬YýÏ¢sk@\hpœ4)‡#†º{?Nj‹<™åX¬Çkà¡©Q¿ôâ(ä)q¢ ׃ƒ,ì×ÄD!’½Ên¯1äzݬM+‰ßA”_Q=°0•‰-ൽÑíU¹šd™üge<é(A>‹)†7>¡”ެˆCͧÃ"#N§a Ôíü*?8§M/„†ìŠÕªn…9Ѳ•žTZØ5;U= Rë…[ñ· åõ Âqr‰™E bô(;÷ËØ^­êæËxKh–P¸Ñ"Ž ‡’ÍD]1ˆš½ð–n“r—±kÙÊ&Ïí—6ûáêú^˜‹Q×F<fHœ.Ž–/3Î «ää\ʱÒp.ïÈqJÉW®ù"3dÖËùW‹ôŸN¶êO³†Í‰Ãä7GÁX`›„v!—ÔSYÈéÜY†Ú…Ñ%—­T­7 2…Ê9Œ,Õxµ”)T®J£Ò› ¸å^]†á–ª¿4cSý/]g·%©nƒÑû<ÝäÔFS¥´°+¶é3î§Ï©Ï’e:ÉZ3hoÙCQÐüX«§E¦°ÚÂûAÙMkò)UNqÆØ2¸ÇbÚùAÝÉ®1åcá ¼{v¥kR·8À‚õÎìreÒ`,À¾¤ïzqnwï²i<×viL<ÏmQßm/•½ôà3ïŽwr"±:/G1óöÂöÊÒÒ­ÁRÏ÷çþ –¹ yž)akÝü‹ÝãÌ»K4QTŽ½ÎºS‚ôgk²'/ ¢ºóؤs~–ÅGç¯w+XïFê.)J+ù׋÷AÛÉ]’sÁE‘de½{­«v@ÅîŒ÷ßMòã§ë¸gJ¾ûÿôc”úC­˜)w§ÎN1¶Æƒ±Ap/uñ¸¢Ž‹ü1>íðí-b°irú÷ųôj)ï,í¼é7‡ZSãÕd!š]¸~;©Ç‡ÐB+DÏ…6±þ[Q`RN/¸êÀ¹o˜ti“JbeG-òE¥ïVri©¼†gFëå¥Ôú-S,1iðu:,dÌ:zÍH²œ–ÇI7k=d¾¨ÒÖ÷h/l¸`îRt¼®æÖËIÁÑ\õH^¨NrCKRØn](;âè¸> }[özŽ0&gl:ÀøDxcI› gyœEŽX"·}ÄíEítîœK‹¢mÄ¿‘#ë#d¼°B¼•/t[³öEú…fQ~­ŸèëÄeë@<ØÓ1 'uȉ{”üùR1B˜D›¾ÐC‡16ÆìñŒÎruhͨFi‹®ØO“ Ï%4JöèËŒcÝ_›-ͨg<ñ›üÔÒuªtpQ‘“ÿJÀ~Ó¥ÝP°dÁJÃ@Úª{úI¼_oËBHo«&µL—ÌãBhh{á¼jp;!BŠ+õÀÒÒžŸÁ}óbõ´”&=äjF%Û­4]•¬¼Q=q=ºéKÉKZI%§§YÜBíU>6òK5C¢3~Q$¸ÔÄ@¿ª¬ôƒËI Ô)ŠãFwvˆ*èÈD£+‘°GúÐcq™¹;U|Lü‚P7åÀ½Áî‘'5TÙÛ#Ь–¼!é&Òú²/ÞPGººu£È±°y9ö:¼ssÙrJÊMÈn,G¦äràq­Ýá«ö¸NvÆ[‘$í¼•Ä…Å‘*銄à‹êzÎáG%(Kš"¤—U|iÌ“ãד3^<Žo T©>6ýç½p]S6ÆoZëfq#}™tììïfIN±’3Ö‡‰A¾èý¹h7ñiþ¡µP œ.¬SÎ×VR“4+xqÌ£›S©Øi6Á¹°Ý3gR鋾µý¥Kû˜ˆ¿b= Žèšs©žOOil¼¢'tÛxk˜«´Ó©§ožTO«g÷6’.龋ãÄi§ õàÆEÊŽ[óˆeaÌGg´¿ô&>Áð~÷>n;r{Žo~›ô½Á{UùÀŽ@`4Qju9Ê‚†\„tŸÇp»îmª|Þ,?–aƒ6€¿¹z4{Yðîêž_+šÊqƒ[ ¡ì±HëFóæ¢)–‹‹ƒÌ”±Š‡z%æ„¥YÙHá# Ô±ÉÖöYìmÏ!Ñ~ÄÁJ£/ÉØÁ·£.ݸµ\bþƒIï¦ãæõ¦ÒλöнhÏñÎÑüú‚†{n}·c– ¼p¥YÆ7vœ™¶NSâš0Iw÷•n¼Ú~â™þ„÷\JÉÁ¶tB­û¡=ô‹wÖK^ꆢc³É8mØúúñÂS`¥ƒ£Æ!Ôú*“®Êrž—oOâEò{Q<8^ö^âèÓþuåÔ×H¹ÜΠã­às.âÍÕÎu;‹oT†ío>.ÿ"ì9yĵ3:œ%Ò’nUJÞ4ývûâ u„H_Rª¾|ÎòÇñª ´ý à¾¡5¾½³/H.Ÿ<‡rr.yrEØ^Y Wºl³©„¿ûO*uBª¥56î’'^.k«~ÑÔÙ£'_³ŸŸÓY]¦ÇÅAˆÃË>,Ødâ]¼®åäL;ë.u„ác +y—«MËk£ê—*€º¤ Òu„YõNR¥.U(ïü£(¶ïªc7,Üð¾óÞôÏv÷F‡QºÔÆ¿ÞÚgò‚w;ÊAºÐ’¿ñ––àyë@ØW”a‘ë0“´€ÒÖ uÏcy,팩»I‘4ð6¶§->¶^fk÷ßW© {×±±?0*¬õ),`ú uXÓö.Î¥bÇИk¼`jFßT K3¸xÊgHuBC†ß5¬©üðèÛ`gÌUøXÜ9PJváÕÉü—È ]‚[ò‹ÜÞªŒ¤´Ióí BZ)Ý:Oû®ßœ|ž„k& !kœ!ñÊ㲿´ø®ÒúÌü‘ó:|–ÕÎtpP ħ «‰ðB"·a€…’Öùtî JÅ p2å…øb]“4ƒJ'Û|…õÍØ/>wŒlRÏúˆ—â‚c™û]ÀtEÚøƒõV’¹y){\ðûRGÝêÙq·´]<+ù¤#x›^ñʾÇìöÅŽ¥‰ŽCœ5ìVW2€Jœ ÛMZ_‰ÿISãÚòÒŠ™‰”µeïÖ½Û0î¥ !–¯¤¯§C¼règBÇ=ÕúÍ­{w†+bÓ`\ ¤ä Rç/Š9í¥.U¹®rlUAx`·¡OõåᣔOC®Ò¯ƒ¿œt kàEu8V]ú ¾¡”Rª3/°”_hëÒ@#± iðuNö£òL¥ÍØS "ÝYÚy×þC½Q,‚Iå·òŸR;H "jooÎ5­eO›ÕÆðE:ß©›ÁŸ§yeJ´Q®Šø˜Ã+}Nââ•?KÍ“ü73ۤʣÚ&ÜßÊ(ß{ŽÌ¬“\ç„+{$uJDºÙ±¡Ž|IܰÂ*𥽼òõAЈB:))S]xµ‰ç[2'ñS©áÊ!øîV õåàöÅ›•z“çë¹`¶\0àS(9•ìt ßsÈuÆß—Nü˜ ÜZŽÉye+ÓÄ5x5_ƒ0ö :„3Oäï%!½i›öðꦼ!zeš ”´q;wé7¹WôÙH}³K’’w& ûŠZ¥n8×è}±ˆG(•-Êj5³ÇCÕòg¨$Ëuðj¯5‡•Zâ/6y uÂø¿À‚eÈ x›ªš—?£{ën>ýýªHtzéÆ[Þæ1^“ÒVQɶOiïF²*VçHó†Õ(FˇÇH±Å"ɨñŽXÉ\¤dGüÀ…xý¡ ¼ÝjAÚ«œGÞñîU31ñÚ…DZ@QÁ‡GÖäÄ é'5v6‰ÓXàûƒÐ†í×’È{ýî½â©*Î’‚Hw–>vÕ›a®—K;C¢âžþfGÝFÅO”qNXH`ÑÒÞauM [›¥J2êqî0tM|à¬Qº éÕ±¤¯´:ø÷ß~Ùb‘dôï‹r_Ì‹¤Ååj“‹’ü/ï %åHâög€|Pê\…ég ßbˤE½ŠÞ„݆Îú““w¬cýZ¬‹z$íLehÉ›|qH©;‹Ž]—`©,Ô=¿V;¥v. 'ÿ˜uUã«’.,ÙðÇ«ažUîó]&u*Ùé:„4ˆ{$GG¥9`s‰ó^0ž”=bïÈ9¨Ìî—¼&XTòcâ‹ë˜T1‰ÀøÉŽŒòõe©±«†Ä~vx¿WÖ›v¾ÛÒŸ“æc—º‰Þ+ƲÂñ¹£:¬RöX Ä—3éÝtì.ß¼ÔW™+ ¸.Œ>ÙÆäEž`µ*q/; éÍò4N| ±¸“Ù˜;Út¶QÂún:6 .Õ1z#ù9¾Ð|µÅ•Û&òg±W/ñ¢óÐ/ÞµT7{̾Rñ|HI^$} öêÝJëÀ†aç:(uñ¦{i|8IÅkƒC¥)LIùÁ~¢F )Õ™´¡JH©ÃeËKì;–4€ñ¢bØ‹<*À_TüëÍ ©¿|`<›,°Z Ä]’ ¯b:%³1fÀ˜WV’ñ%{¤Àï½ ËYÿ}7[„ëµÆe½ÍÜÉㇲ¡EŸB…ÛñÛ°À¾¡¤%}Z+hÄ:!‘:Éß!VYq¨ß‡™^jµo6»RnJ:®Ó¬ÔÖ\<8)Û'wÜâdqp6‰Öm¥7³wÇG–[ÓM1›VI¡_ÒîíĵŒ»Q{"ê?±aøzÉQZZ›gç¤_¤Añy(aŠÎ¥^¼ÀR'åÄ ÑT°¯Ae.èXŸÜ¤ñZK¼ÑÇõg $Òi©:IòH¤#¿Ÿ0ôÉ1Ò‘l}NÀ·x`E[ñw{Zš³m)âÅžnEAñOXQN’yÉP¼šÓd£êøêARòMHCmÅÿâ›è¸éZ"éê¸zŸ·‘ù¤NžÃT9…]²q÷(e¥J ÒM®ÓÅRa6[K‚¢Ñ+ZÅßÕ&+gI†òÉF£oT±b-Á|X;7î;K ³Íu8ï\§œ” $SÝpwŽ&sÜ;¾i”>ÇI;cçc:·ôô¹›ë5×—dJ6BâñVà+=iƒâ¯±f\ÆŒ*œÓÆ}CõünD7è…œBÈ€¬y¬‚“½‘׳ä Ò½éö´Ø•ÎÊ8oÑ,ñÅ jÐØÐ?ðÌW“,søQ)ã‘Y‹…næ_ŒpžžXRöxJrì …6"ÝY‡[äoÙì”DÍ[%;µnt5«ô Ö¹J¯{’GuXs’ÿ–&VáEú¸qrνJ—fÊ©o#=Ñ;àÁæã×”æÙΞºNËi´d¯*ny_uïZÜT––º‰ºµô”&Í7à¹ô’ÖhCð¤jËò=ë ¤äà/ÞYGXl¹áºK© ¯¶áª/à4­oIéÃ{ îùè‡_.)•2Ž&Ì: Íá@èÔéúÃθÅq™¦Ò¤¹J *þ°|Ï´s!*:Çè%ö߉²O0nm…©ôç¼QtlÚ¹†rÞûîw|†•M÷š1+»_ííÙ˜>Oê¼±$“šI;/¾Î‰ONä”%96iŽ«±8Ú‚[7–’E“x~¥Ðfå×[åa—±ù» u„ a—RÁþVJÇ΋}ëJúšíüùR åÓ’C”Zo…4³ý§ðNºîŽ·%–í}¦ë«±]’´ÞOs¨øËû9%c£þ_Š–:Îè.Â>*äQòŒêŒŒãºà¨¦×YO9%å£J lçârµu,sÂOG`ŒP^¼H(0M¬Îý:]ðÈkPAsþò7P#uòæ›8¼œÖâòµòÇÖc!ujÆÄ™¦Ð4{L²!f |XÌuá18Æñž:H÷HÙ0î”çdž:6ÁÚµä IwéfŸ|Xßí›7Þ»ëo¨côâ×Ô¸ÃVƒH7î"¤»äٳ㈰áX£Ž€ö耓V@I³³rж¢#€²£?ýŠÛ¹ ³ÇX`%9Ù#ˆ¼FÚÆ¸ªX_”›zœÏ`èx$ýÝóDù™°iØ+ sb7ÁͧføI9ȇElÌûXøÅªåKòãd˜/3ˆŽ&ÁQéÅi—?7nÁðх€mB¼)&±¬ïÎ:j0;báƒ_O>¹›B([yÍßf™Ûž‹û3ê⹋Î/y,¡[‘¤]ÑŠûÈwÎñû/ö |—ÕÞ×ú[÷ˆ#rçœF0~; ¥=ï†=üÜK¿y3•Ï]c˜ÄŸþÁY)=E¬TÔo~u+Ù%gÛÎÙŸ:wŽýÄHDWJR縈Ä ùkâ“êCš[ÉÇPt VÙ :?(Ð&L7”ä\Ε®%ÇaV»ôõ¤Î›Éá6r/kŒóª~Üc¸ºøä…计 ¶s6‘NY.›y{Ï|GM¨ôR]JznHº$61}¼Hò"I’ÞDÇÒ¹WÅÕu}Û¾(~¦q¥^ׯÈß}7um]¨3Q%É&ÞÞ9Øh(ÛÂø.h`·Š‡ñ’Hg'¦E‘jÒ–$§8Rß¼õ]Ç’d‡<ñ…°K_Àdž:6ÉÜZhuÄÉóKa%E­R v«Bjúàc8ba8³Qn¿¹.VBS®þ÷¥=ûÅ:‰©]•«Ks±ñ¹žu°0&/Ä™'–W¤¯ƒ>”r7l‚rã K^øÅêØd}ׇŸl›ô…tW»Ý›ì¼Ï ³Mþ…/bžÐK]0@C-0FêWŠú·þ:~_:áÉT;S¤=蘈+ÒAžñ_Yì¹èf%/Ö¿¸6¯Òüa_v »±ò4nbÅ) ÚƒäÃ"Ü_îæ9LÝ£”<ñ° ½TC¥.àIÙ>ß_ÀD$ß+½1ðàj$¨°¸ê0èU¼ó¡|³«M­>< é†ÒΛõ0ô6LÇ’´(¶jáQ/ÆWùœ,‰ê¡nY|÷sr\ñp@™aÒ5[á:Bƒí+dV $?ŒJåE+»zà#õ(ð„õÝú‹SH[†7Ó½2ÎI»ÆqÙ¹±ç½&%‘[—BõfXJáu„pÝùVOÃâ ØuèXŒ™u±4þ ?ñKâ’Ë]}a—Dy‘×s& ûâuì†yw/uC«ö‰Uw⊠ªäGŽàh_¯ìl„·î‘ÔiUÆy È×áäËì/ ¨Z88Oê\_å/žy>°å‰­yäÃé÷¥@ÚÈŠž|–þpæ¾€I;K3¸"v O:tAvÚ³X’nR²±t¯S<~\)‘º)}Èf’—é˜C,RМï’Ù¢äh<èõ>0lÒ¦Ÿs^‡ U>Þ{*—mÉîÐ= ©alÌÂún}l¦»`y˜zAQÚÓ£®ÌªïS>»Š!úˆ±påîn ݇”æp¡¥«R“üfÜX¶S2Aãv|‡T³ècNeœÕ@$K°Ùá¸L¨3tÉEñp'Û™”3öj#ô9äÓ˜#TÁ\; §¾@-÷ÀÒ0.ˆëvFH—d0«5¡\Þ“joZ í ¶ß‹pÞ3 él”P—7»¢z²o`9 è0°>5^öÄ‚ÏktÊ|FÒ¾½ðïV©4„s%Yl}×…uLÄï§Ž¦ -ÛúÂov8 Ý™ënVm†"bçêQHóÂØúÂëtmÆjósba iRIT“är’ûs¾Öm²±ü2ˆŸT‡ØnYÈ0ôfq‘7ÆA‚[[£spt²QM«-œx ×˜f Õ’]KOÎýï ž—ýŽJ¯'æÁµX±•s˜¹×92êì iR9qõëÍWÅô¹wÔ¿Jx•Ä&}Ó«I3Ö/.JÕìü¸·ÞÜý:Ý 9Üðº\“|Ôáø¼ÒŸCKLîõr,Íß™éþ*Ø8í>º²I¥ôÌrPvïϺM¤ÓIÎEÕðd^ˆÅuœð¹•_OÊÝí”ÜŸ.£×’MìûÁÙ§wqÜýjæ/Á7înôCõî’~úÏågûcéK‹¤Ý|.ìAý”ÆÍÃnÏk…iÚßonf|z‡ä¤‡äÝŠa+G9}5*(QJÞh¼&û®¤+1_ª·%ä0Œ5ܽÚÕÛž8„p™;æhóß¿ãºHKé'6‡KW÷ï_µ´ç–(u¸eЧ2ÜS¤E¦ŸùPÒ•HÜzÝœO¡}Ôën’É$¾Œîx1ræp¼ZŽ{"NêýÌÆ<â[n(Û—.î°H?ÆÒçC’tï[¼¤†?4ý°vÞµ/·S{Ê7á²nŠˆTÛÆh‰wëU2n+õÄ8O¶Ë³î©áŽ ˆMâ îMŽM9óWQ´ï‰þ´íJxsÃeKüãñ„âOj7kn•ÒSHwnØíO»ýPýá¿h+qÅ”Jù”ÎKñ{©ÃýÒ ©n"ºI¹Ú²Ž{­MåCŽ%/é8à^?蔃Óä"GøkCLÄ­‹ÒCò–cå@¡¼I ÖažÚ­Ü ¯s.5»ð©3JÃ%…ãŒQèPç'U{9‚'b{ •L‹k9c#¹°xj$°¾©í`EjØÞmxQéÑÄÐmÆ¥Ög| ãU¤»‘Þ=:àï"õWR’L¼)¦dÒc;ïÄu²*ýôj {µçUù–¸bó»^ÎùUrzÒ&zºáCËi'®¦¤äH>ÇQeñ_×c«¯ÃÜ;QqÍvhç?KZ§Å}(ÞTxÌ ŽÑ6-×kñhT·¾]’k—/ê|l ,9ד3ï24LÙ £h$üp-å]Z7ù¦u7¡›}ó®#¤5®‚Ÿø°ÃuØÈXöüX¸mÝqAò[ýæJ‘{/J7>Iד^ÏŠ«†þGNÒÿJ¶3²e«ò‡ñ ++ïåEË+¦€k,qeåëY>„V¦´4p¿àʼ¸ú÷T,oÔmÓ”Oo Ïûƒ=ƒ—!}ÓòF™CŠ^º¼Q—¼ä\TN®7‘t×½î»ÇÃô_\¿b팿6UÂnÄòóý‘ò]ËåYòCºl‰ÖküR Uƒ$mÜÎáèÚ†Æhá1ª$rŒ§ËÿLHº§ÆÒô·L¥té6‹ÒË6~Žã{Jú& 'P!™Ð€3Zp-I%ï‰ØÅt#=’îõâK ¯¤Á¯çÎB7K7Ë|ÓvîZßUÚͯM/¥›T·+I.r,Ñ.Z’×õTãW§øŒÛÎQ¦šâ#ˆ§ˆ»~IŠc£ðº'¬§¡QÌW-/\º}w!ùg&F–^‹ònMúò+)KÞ­hŒ;pJcÙF¤Á’6î#Ä{á¢÷²Ìm+¿rR¾éåŽë¬¿8vŒã•ç7ï’6·Ç’D¢‰Wog$üÑ@?±¯IÞ·nô'gìåE6†lÎþ^¸T•»ÜfëZBû½ø:C…rnzÈ­´’Bíð)'eÎ=W=†®Gªü²Ì·|“ÛM™n¬Jù¨œ9Rùݹÿ•**·ä<^ Ѹo0rñXß_–+œå×’séܯÅJíÜ™v)û2Ë|áÕ&îå" ÚYwÉ›ØõÁ‘ˆ)á:õ›lͨ 0ìVúÚV‘hß/rßG­üÈþkÞ— ·®#ôŒÓ1áÒÎÈäÄÛ壴$-<^7{K•*{ÊŸ"}÷­†?*ÇMháHñÞ ËuImqi²äzцº¸¾®*ÙuÔýkùïKrQ“JÂmI²]·°v.=Kã+6§ñLHx÷¶[tóž‰F#÷³åèþ-µê(ÅçPÎ׆¥™øWvëw“´üýJV—çèÏó&BwMwYŠ„OUÛ“ ó"ÜÞp57ÎëÔgøXõþ\¤7‘>n®K¥9•´5?Èa-”ÆÆ¶ujÁ6zéÕ{åævÕ—¼[ÌãÈö´ÅÝcJx.°s<Àww¡|O´]c¼ç†'ž,í ©ôâ+¦™hc˵ÿJµ~Kýôa†í`f6þ’NjU¾‹÷§–؇…û*Ä~Bª¤»‘î>Lü–϶a•CF7¹ê\ Ÿó¯’C£¬ ÇÌú.–=˜³Sš͌ä R£å¿ Y™Þ!Ïñ¼«-îü.©” ®´\Ø‘6ÆTQÖ^ïž8/n(gÒëÃ[šÍJ‚Îýòrp۴͗˳²ý79ŒbÅ m}³áƒñ™Ãþ}ÑQ·Yl¸b@ŽpÜh²´ã¾0Éì³ßÉË:/ÂÆ•>8a} /T²_Ö›’ÞÃÍ·ý¡«¨aƒ):Z°¢CƒÎŒ¹c&5¸Nâf–«MÎ¥>G¶C÷L&ƈ¶-–^ݘKGòûkŒ@ /–¸0nÃ'UÒ³¤Ji?JvÄþêEù$¦ì(¦ ÒÅí ì†Ñš?I²Gv4Éÿèâ÷ïö¤~îÒùâÉó½ImŠd‹í4ø¶j%±:âDбJn(Ñ–½¼æWéé¯__|l¼$¾é7¿NkÛ(´ÒΘì2_ÿ£÷ÿü÷àãýŸô=üP~®¤3ö’ ÆŒ—rîŽåj@ í2úÀah#e„„ძ-¥—s€àx=FøXæñŽTc{8ÔÝ27ocu§>œ¾ÙH=…qÑ Ÿz{z¤eg®A˜  'ãvÚ2ÀýRãÁ¤°ß|–j,*”&µô¼³nlŸ.xéË*§N* ÒåÃǹ*÷g5ñ·ýºð¤*r°Ÿª%åjfEPÁ’NŒÒÃ@©ð»­'ezbK¸'‡Ê;~b@~*€«…«= Y¼ð,W÷Òø[ZH{zÔᔹ5°ò òé€Ì|X¡O¯uLïxÿ?˜p]ð¤Šñƒk.O¦cg+WctÄø/ù½x”-WuµÉ£ÿ€PÒ'"Œs²xG5(W3ºÎ ýŒ¡è˜1sk ¸P.ˆW>Hà4‡¤3JrB…Æ3Œ¿×Œãú1à•^þñë eºes∿+hz®HùM•*&É•+‚Ì[ÞxŠ®¨Ã ó7YÚéÔ褌øâJ 4c˜äî(×Êb!±büþÁ¥OÕ R[¨>–¨Ål[sêï¿ ®YG­Ê_2«¼›zÓãÁÇ A0DÛFÛQ¡òŒh%¢sH¹°X úI’ÞDј eéhý¤Œ ªg/3%\H¨ctÞ´¿—ƒdú”Þ•¤eFh”Ó¢¾@ÇBkVZŸCyWÿ×{cù¯+£«Ÿ„Ag’ùMsðY*†1ùùìÆœËwÛH}VB¸Þƒw'ôýŸž”=J;ÍRí/cü›Y@AzVù=œúuðÆØÝ};cð(j13 ¾[â?o~<¹")ïœP'ª‚&À}FÎ ÀßÑg¤•!uò”×.r4v> m"ùaA N?1 ÷P1 e¾g€B€7L*Åâ_yB•/qž¡Z3ö̆rk@,=){”ïÙN©× ¸”rwê¼HJžŒ†Îuv7½kçé‰ê!”L®n¯ˆ‚â†B±2œí[XÇÄLꀀI;æÅÃ+t”ƒ8è0ôW&B$9üÆšäH[ýÖ¥ÍJ½Täâúª_aÞÃð±«õê…í´ÕÂChÒɹOü(TuøÛ@ ©ò[Õ"¾· nÔ Ò˜¹:9ü¾ÔHÒÒ u¸´ÏE§Ó7iôeŠ[ÐLV=•OÌ>èj׬µnÛ¼±€Êÿ¾Å–±SNlèQ4Ûec%O—DêüÅA:ŒK]0S<‡˜£E:‚s”`fAz 9 ÀUÃ|c€Þ/ïIù÷ «N­ÏÚ×{ðÅÕ Lrwê¼탷ª’¾±)[Òƒ}T·R—p'£íKq@ÒwÖ“4ƒZPªN¸ÈÅZlBöuÌ΃Ž@‹¥xeI1­\,^ÊN1y‡—^'ŠÿB‡ÑúùþADö”DÝÀÃa TgÄ´'–†Ú'+‚üŸà1#«éÆÕÂ|[äS²Çõ4¼HŒ…í¹°Ï¬²…Ö&È'NʈÍá¯*gÿßš iŒ¨YÄïU¦ í¥¼czÎ!f „ÍãD.Ù Î(xÈ¡ócúBAxRßÄÐçÔb燓”ìXê$»½-¸sHi&øè U¨.,AgÉŽìk„]mgÛ š·>aÔƒ]¤ PŹÅˆöL:ÙÜ“îÍb˸¸Tè€exÇ”®ÓÈcE=^p,Âçí‚zzsÈ£JÉ»²(i©“:¡äR³7œ0Öƒ‰^8'vÝ£ZƪN •gÀŽy–4‡dÁN…±¥ ©AöÈþK{Zð'ˆ»)oˆêK½Òì¶Ÿ7 \‹\ðI9n¨Ãä‹D.&Ø võò¿èËå_sÉb@OÞ{´‡µ}̘5ÀcF®V,Éé„G¥„|¾2&»fçf«M³c@søQ.sE` AæPghýÝ|Wêí‰LÁÐ[h'eú3ÒžßÝ}½ÿÏR€bXeÁu:#؇õbœëxÉAÈû^1°Ô`ÙF±Î¡­J&6¨»%ŽrNàcFù¶¥Šñp²4û´½žUÝo^ é’vhíE8”«!÷U°Ïet÷ÅÝæÄ\°Ì'J{.:¾ÙHåsá08)/j}µY@~[Tôÿ% :æÐ;3~cº Rú¤Õ+¬,VµL=¡øškÂ¥W"x~Ò߉÷m„ÑÕúþO™f„øÞ ÿõwlÔå œ>=ÊíC% t,´¯MOj¶6…*;Ô Ô<è‰a >´”cRe€ g±ë@ð^ÌÖ+[8,ZZò0Çz†ø69}qײG•çÅÄsˆùլئŠ=¶Üb²!_RêÎÄ-[ê9adF¨‚ÐκI p4\¥£ÿˆG9-e ()ˆtg»aÓ ôì7oX½†ÊçÊG“eÂx—|Jþ/˜V ¸"à,8HÒeÀ—Ç“òÄ\‹¬8›)O~á)} ¦ã|=Aç•Ê…ä‹j÷8ÊT^N^‚Eô?Sñ3çX-+í¹ Æ¨4£zQiìñÐáøûÒ où¼©?XÇn·šòÉÎQ«ÈéFnÒÎûÎ’`•[¿*ƒ¯J±_äÒ½xEÒEÙ)FðE‘dà?Šn¥žÆñÓË ØéEû¨}å¿ÊƒT%/Cƒnrùýfo­ðZ4£ÎP$?<ê•̈°Æsx øj´} Š`@üu½#!%:fÌ>–Ræ Ü-Ä [·Ij1'vê Ôê³…:£t'÷•üò11R÷7Ï\õÂà‰nÚY§áÔ¨åŠï-È´'y¬}ò ˜#C5Àô«q àÖÀÂ!Ôÿ‹rÆÙ{‹ØÒóS²Ð¿ÛÛ›`mjO >H¨vW|¬3êÙ÷,ùáQ‡Ó*=ˇ(Ë—µ÷’üžü³_пH²Z+¢J¯›Ø¬\ín:înS³A¢Ž¨6®ÁèÙ’vNémvœwªƒŽ…Ròb̘=èðdl)ŒKc'ŒÜßÿéÁ'ç%[©ÿvLxÕaüÅ 9û[COOÎë;2)‚2Æ@cÉ1‡jfF×òx‡‚³â½T™Ýª|H&]X<ý›ðàÉZXÉ!èû&˜æLÅhÂÕhÌØ/È7ÁÝQ|OÒUyqž(I£ÃÆ©Ãêž¼ûËV-=Nk‘„͆nÐX„nÎó ÕÂ|'Áb¹’>Ç~(^c~2‹jg¬ ZJŸôW©hfþ*þyï- Â@‡’ßßʰÖuaÙ8—Ó] ä»èØuoá¤ìĹâ€5ð¾[±!rбpVôþ¯ïA<|àoø#á>ŒÇÒÿ-BtÆÃ‚A”øEníµ™7·g»ÅëÄtË|Ĥǯw’ ⨂,ÈÕföQ2rŽi´îVl¶ì Ú±¤§ÐÍ’Y©¯»àúm¹ W!]t‰ïc,˜@IÆ}¨¥;rì—»-%= ðà0œÎqz=7”´Éã2¸ÒË õÓ @¼Ù§Ú6-Íoý`œy0Œ†¯ÊëêÜÉ6ê)„€É(‰ªÕÀe©ˆ²dРL=ÙúŒ%×Ó¸ÝJ rÂÒò‘ûÊdƒ2»ùäs]Ú>æF²(}Œ*¹?mÂ~ ?°• /õ DHi»X/^x2P=¬føuºö’ùf«î“æ:b€øëE JÙÒïVp3û2ÒïLؽ‘Œ®Üs{[¾ààE°à ½K}X/P§Y­‘¾ìù§¡€¸Ú¶•a fµ_¾ÄÝl#z†·"gkÁ6ÆoÂ¥¨—z+8â.XßÅ•žQøË‰€óo3€Š2àÀ9QÒŒ‘À¡‰ã·eKvø#ŽC±±r<£ÁsUô+•ÀlÁT’GR#;ë ± Ž\x‚?2¤d9öi­±‚áN†rLÈ]üÚÂP¯U£ÈåV h|™Uû`-!Ò/;Á-•:;Z[‰:§§ä›Ýô&—ƪ8Å‹wÿl¢ÃTKeÃZNê›xk’Ó³äe½:*µî\Tl§œW•|øó$WâJ]¾¤Kôneñ&l5æq\úš„˜XgB¼­©RçÅ’ÈÙãê“m.h㶸K ¶…h%þy®»!¹lØúÛœ ®Á’‚‡ã×UyòEBI2ä¾1°ƒ¢dÁwO€è*Õ'Õ1I\$v^U<é÷B°­r´–¯æu±95ê’Œ¾€§É=báŸ8‰¾p8 ¥ I]V œJ^¬*QÐIÏps»·Ó\ª¤ Io¢céÀ'v|©¬VC:‡ø2ÆÅÈ“®D%9 eÂ1ؾ?™Osûöøcf€ãLz±…<ã“ði;£'`Q^Ùò!ä˜Ù©JZˆºÆíõ¤Îa'ô>žý<ÿÐŽÏÅt¨Jg—Fa~ ÄZdz©sˆuW“,“¤Íx¢U,æVNZàgæ`«|OÚÏ’?!Ø©påÒÇËó¢¯,ÝìR,²Ù媒v ë”;)FƒÕN¨hR­ÄHBy“´3éÝtìþcĶIë!ðò‡·þd»¸jJ ¼ÎYÇêâ˜mRŸ —îz9|Q¦ƒ:‡  þŽ æÌ’uKž”K öŠ€CyA^(ivYë™[| åà«9Kës”’üY°Ì”eô¨}è‚%`—ØÎÀ¾°³áÕæø—–?B“­¿åÇLQ„PIøÙv.u\ɵ$ý+œ!þ(x×^÷I[;+ØñÑ¥d¡ÎÓ… Š(kÐ/ÒƒŸã`³n É¢Î8‡ÎSöý‰Ó”w–vÞô›wÕ±LÒ†¤7Ù«µsãüÍ;Wˆ…ÄÄŽØ29,ž’ 3¢kiˆ6ƒ¶jöõ¿.iɆÅGȸyBÒRGt@l9?çΑÎNX$FV²;}³Q‘à ?§Ë…nE’n:gãšëÍ×U±üù{ü?rPîOÜ=é<ÛŒrFå¿“þóÿþÇ¿ Oøø7W~äÿ–Ü©þãŸåÉÊýù—×߃‹Þÿ?0z¼czŠ"~Î!×1çæAÒž t,Äâ79'(ÏØH¿¸w'Œz`p°EåüóïÈAÄ/-¨’…e£Û=›â¸èŸæMNŒµDÝ$÷=±"®Œ<_Jõ&:nêKÀÝVº/ ]Èè-PŽ•åÅ*Ÿ› Ãî‘‹ÐIA¤;ëó^à ˜,ïGÄ®åýP]8Y)ö5_`éÕ¼k¡—WÉ›²ê^›sY@âÕŸ¥΢²5"˜5Ü_çV2/¬9ÛD·Ö£±x#UT°‡Ÿww»–AÒD‘ÕÁ«½~é]cŠ#éë&ÒºÙÁÙ»v,­bï—µ„”%§´¾¤sàÕœù”Lz³Î»–{Ý5±5WÊǶº?ÇG]‹Ó7ÎC¢‰ù^Áº[Ô´ ÞMÇÝcs'x÷é²ÛØÊAÇB)yçþt+Ô9„Ŷ¥ Û+>®‡á|Ýžšù›ñ\‹2št_‹;—ƒtñ)7I7ËaWRŽ•?¤n~yhH—ÎwÓqs)Ùsކü :|¨nMË­²R|Äöš1ñ5>ìp-J5˜Ö.©ü‡­³]s´¡ðÿÞ]{Œ­qÔÈÎ,{õ]Iˆlû<»œ÷ñgÛñ|¸˜°ÿ„Û¼–›¹švŽÉU:m=0æÚÿžÝt•“LÓK›5/®QÓ)Õ¥Õ%Ûÿ¸=ì}¥fÖ‘ôe›ä# Ÿé±Ü;Õe¹ÇßÏø+)W ~'¡¼}º±ºþad©{Ó˜ YN2Ã4¾NÇ"³5/¾ÜïøŸI9-p¦Œ¡S &ó¢=(ÉÂyåþaxûË~4ì´.9,·3Ì2I™‚{©ÓDçmázà/Cß[ÂùäÃ_u­ç>¦sò]‰ö„eJ7#и_§†hÀIÎÎx8ÛÌe{Ü÷·–TU9:ÝÅ‘T³ RÕ¬“+9 ò(hÉ¢%Þ8¤Hxþ„seVån’òF†Ü‚F3=Sé0÷†ãË“´ü¾`?øüç˜Ã|‹ÒнœFèÄ›C{ÉÆ´Ýy~Ê u'~zÐ{Ê1:¼žX@XòF‡«hJ!”Œgcç†î½Ö•úa†;Úƒd‰bî¼ípňԜԽ¾ÛDƒ=©c: á*Ôš³o§rj‰e`ØdLŒ¬pÅaâmz:°*ÏÔ8Ê&ŒM.£ØS % ê3i–•I…7×$F¾ 5±JÜRuô,;eœ9òûÓÈø°˜{ 0íŽÑê³C||„[ë|vm›vC %†‹faGx¥ŸÛþù÷¦Ú’|HEqwˆßà†[q& ÀN$Ò2ï”'U£NÖÅ¥h©¡J»©¸F„ªçcAn°m¹i夕e¬«[„!íUa˜DÎÀÄAgÊFx· ¸k™²©‡±†)á͸º¦ƒñKãpAÈ-íNÑÒÔãèfVRÞ'' Û±ÙÂù1?"ØÝ-’^i#ç6!ý,Hû4ÙŸjn¨o>{ݵӤ¢ô}‰o¦BÙ!ÎÅëŸfÿ„ì´±Íp8n§¼“ß&¼Ä¥¸N“fŠPóú»SóÌh=nÕO©ö RGUa-ÿwÝ%A*Ÿe/ˆ?5ÉîÄ;¾ i“†˜­Nµ£@-áNU/Ÿ¤:Ìg×$“pJæjaÆÄNŽÒDÞVÓútý††Í´Sn¤¦Ô߉³#*"1bU.ßt±Èt…eAÚ§NÝ- e×¢Pp§®‡Óm¬7oЙT+g]¥º¾Ù¿\طߤe5™Àù’Ʀh4\Ïé~P [ø‘‚ÚN3|—ö#Öh¼“¦üõuo(”¶‡É€>Q ʬ%7Mi,ÃÇR`9UQóUÓöH'gšîƒ{‘iŠÑÎ"÷G?mËU§¼ëÌÙØ(k¹¥'ÕôÝ ¯—Â^NüÀ„‹ï ·A'ìÒFÝ€Ÿä”£z¨âE9†¥5œT+ãØ Â£öJ>‚ª¥«ÑO^Íô¡ ¦Q…8Vµnâs¦þ¤3 ?k'Ùîà %8ÑRt¦½@IK¬Šªy{˜às2CUKÕ@›(c13ŸÄúi$Üu£žêœÝñæ±ëTº¿@¿¥ÔD<©r¯žJ¼õ”ÿ2Ù 9D¨ˆ:w,†þ: È”¶GQÈ;; äSîh°LUõLÙ èãj«‘ña3µ¨·ªÖ¡OÊPA©œñ‘¥¦?¥±{q3èQ©£Ò¾ZD4F‡N©&ˆÅ¬óÆv~¨kIÕô2ø¾DÝ–<ÁßM^hšØ\#°¤Ö`¢À:ñsš½±mða–¼œ¸FwåŠÄnVq¦¬Pª+'qôLG±= 8¤~kæwå”tÈéUnùBñ%䊳h7Õ³LŠ·tw¶=æ©å¥Ó¨Ô¬DSSÞÈ™ÆT•ð‹`Ч,@ÿ5$ “ªðé4T±ê@-å=hR7`½}¬_ØöøËj×ò.;½”úcÎìO©Xû½pöDà'kŠTQ³cLõ¬02ܹV@¾òvµ\óŠcbv-±€(»RUrå|´Ó¡OàÍðM ÂO§¡ŠeÂgèÚPõý­%çã^Dœ“ÉF ‰À¢É’PR»s„®NðOÎPAXÒq%õ‰]7«ú·Öà[ˆvÓjÚ]½g ·BO,JØœ¬é€¨A/Ъjs|~¥‘/­É(’–[åLwmNLÒ5(;o“2®a¾N7C”NÞ®¼OÊÜŠÇ(pït5£¡ÚÉ´üšC½l¤þ{ gȦ‘øV.sò,FàCåúâžden§Ù¼¡a° w¿&xÊN[Ú'%O·Ð4~ÓÀt¾¹~˜Ôg¶ÝŸAÉqÈì+€º­¤ãcQ<Æ^‹¥pRùó› {ÂÎÉÁCÙD+"ÌI¯¸ÝÚéôÛr+uï¦Ñ¯d½E›N¦E~§Š¦ÑÛeN]•:6“Ì/N:„’T¶T¿ÊÜtËw©FeÞ]“8Å<•XEL"€9žx“‡ý9hçaäÕx.X1“ëÎ|ò´¼9¬ÁXêp™™xÊ–ç§¢`ì[Êïäp^?Cœ J³º_I8ûTMÿsų@«Çùœ= ´:oêTOî•SðÕ,ü9÷ñ”ìNùÿØÝ½?ƒà–gMÞJwç·ËÝò‡õ;Ú«Û»]"«åLî±h©¾“¬.ºÉ9 §pŸ¼¯F> ·þáe,ö:ÝÄýkX¿¿†Sß“”Xêx<[ÓÃF_¸Q,«[+é îË€ô.r0—öµö?o$‡‹Ê8~¯^f}ÜÖý;²tWã;>l_Ü›Vƒm*,&åžêW’Õñb¹.£áØasšT@T˜v…a‚kÆóƒÕÊ´»RNdÈÙ@LÝÏöuô¢@&B'yÖ²}ÆõCðB[ÃRÓ½qXî㯈ü˜é®ñ±òf*÷É €›“núÎåƒûò4ú¢Ýj®¦¡b§0‹ãvZ@È «Æò¸^BAÝ0îc‡ã’Ãëq$|寯éôÚ$>3‡@~“ Ó z¡ø¾ZP¾¨ªr{LÀù>Ì€à¬ßaV¶nm¯»¬ %iùà «¡rN‣pSðËÊÎC3;¹6T=µdLY±=  ¤AyÏþö(`,í†âk@¶¢VHÅÎäïÇ6åÎw2dlFÁu„)—7p«†nê(Œ7I|‚0“β%¥\¯”; ¡Ä7<£¼ÑnZUKEXoª&´;xÄÖ½~o’áÜFBéÛkåW¹”· I”á¦N¿É¨¢ò7Šßq)FÈhÃbT¶ë$0D¦ÕÕÚb“¸/aY\Ü(6ëY‘‚åaاOâ^(X„åþ¿£Ø™šAá/êAI‚mË;Âð¶r’O'Èd¡ÚYKÚU9€®%U(¾Õ+¡UÞÓé*Ãé¾f­½›Àeu¨õB´£H(mU MÀ5£ÕXîAIV^s¸u7oYi"Öµ+ß6üÐ2Ax甃dÏ‘2ånЭ>ži‘¹Fõ^|íüý£þ£¦?ÿÒþ¥”S¾¹=þ˜¯?„ÿ)ï*9A»–œI¡O=)£òO.·I@ÔM8 Ö2›$ËcÜ:ùˆ7„Á ”dAnÚ9©ñ¼6íäôÛ [0¨›à$Ƙª_)„ÃÖjˆ?õfŒ‹›Æ°;ƒöälˆ6†Üȱ¨Éœ¢Ä*°«©ÆÕ´•“€%³+6IâÆ)¯Ì-ª@hÂÊ]KîCAL3µ"“n ¾]K=Ùjå Ÿ©CëõÅ dM/á6±\w¿ø~®X'0µl· ¼HôUKÙA[¹j#àQ¨p>@XŽþÃN.Y‘LvUÞTý~= æÎ°ØWo7¤`×Rÿô¼™=©?†Du axµ »„¼IEù“ñ@Aÿø×] §©§ÀÍ0ÿ1ø¡û¿ÔÒÖ©yÿ±võ¸€ÖØjwrà$“2 J{´?y^ƒ;™Ãw"–Q|nË–°óº¯G‰ê½äî8²SŸPr¶·À™}¥šd´ðBÇl×¶"ÝãÄC¯'St¹ÿ»é¼9´ §QÁ^áæ$'¬lç7î%¡¿ù «Û'1AÏFÝ©§Ø4áÈH4Á»4à0ñÅz·®Ÿ(ÒWÉÔ3ˆDU¥›Õ t3£Â~ ×aÐ]‹¡V}_êÑ•ªhIk}䓨”qJcûîµÜ …‘_²–.õ%ß«¤¼mk¿[í÷ÿ„¢jy¦¬€_Œß¸‹‹ÕáOd¶›h³õ¾Óóöl'/ÆB bâ–“§Æ:wç©b Ùd#¯è®‚pêÖ{'×ÝA†¶eÞœ°û;—”ÄùMFåu÷Ò§+µ4ZÝÕÜÕ Ã©õŠº½d {U¥-‰+·sb†¾ÐÂ’£Į̀rÞºA§ »çÃ0ú&1mª¼Iåòø7ÕÅH ‡ekø^âBPïØkr»0…êDºñ™Ã±ÒÙ×DdØ>à2FFY´L[¹ð6·×ÂÃáRr¸–±8îîΗ>l6'¼Îîû4.ħåí¯€õ÷å?Ö3[KÚ·Ôú_–êgëT#êÛªí³}òË»—Îâ-<áZ¯Ã,g:Ó:3þrœbÍwR׺ï´dq:ðÊE·GÌ-^›ÞnÝÌÀݼcùE7| –½‹¯–a¾¦d³è]ÄJ “ä/+c ?®“ªgr+½¼t_(úëÿ:1SÚ¸#U©Í o3Ê{"‹۽ÕêæàmÁ$aZŸ<Œ.½­¦;Ÿœýþû‰”3ešö_(¢R5‘ê+*ÞVÞ‘·úѬ¼™šñÕâS2mx5Š»«rŸŽ7£þ®³œ©:ÿç"C’7cæ©’cÉ ò<&6{ÅŒûØ»>¼7¨qXÁGw o+' 7 )7½xü6êKÞiâì¿S¥~õ/¾„Y¦>N¬-è+U°a¹ÂŽ6]Ì}X›tFø¹Ãjzø™]9>’ˆõíytõÙ0íïHëkä/;œ“K)•_tÎAÔ”Û+ÕØ³"Ò=À¾«)ÙÃXÝÁÍúscKjá'¯ÓÄO(Üyõ’‰“PãuÖlCýu—ÏÌǵ]¼œi|r½á’dÒIÁ?›aüËØw"¹åÎùþ¾éŽPûÏ¥+Mê€rRÉ©‘Sw:L‹×µ‡« §L­…L*¦-úÅÒ)b%Š8͹+ùy;Št”*„}ø"8S†6ìqÇý?¡øJí¡PNý;æÜÎÅ z ß—¸ZX¨5@¹¦ÊpÊ^‹µª(íŠÍa‹î8h7‘a€¶Š"•jbÑ®Êbb6P!“ŠJýCGÿú×m‘ Ѷ’² wQ‡0â'öš#'Œ£\¨{ñö$‰=Ò-µ[¤—Œ»Öt>ɵ:` — ÜÑ-õžÚ}ó‘òçÛ쩚Ý—ü)±…qÑ; ª¬»ïšâgØ,(ÒAÐ/®;€*äAI=çÃUH¨:´¦ÀOXÆ™2´–´OH9M¦:‘×8&æÜ“íZ&ËO®{91%>SκLp gêÃÌ(pIÀÕ \ÙédzdŒc<®Ú:h+Ia¯åu!cÞ¦|'…òcp©² Õìã“"z%AX¡A6…ö*WWê¶jsŸm~R{(x¦Zx¿‹)h‘¾„Vî*gÊ ÂÙä0½¿MÿûÿûÖtC=€pm†½W#"­?RFì+åÆwŒè É{M€†Æ¼'‚¢ö…9Õk3OB‘ÕïK ’nÉTµTÓ:‘8 ú¹'ú|$D… H> ía¢aûbhí‘ZºáúÓ‘ÜkK„2þb'î*Áœ!DŠ=S«²Weͽì¸ În¬l½dœÐã è¼5ÝöÞKkðÁs;U;!,pYË?Z¡ Z½/ëB›|ÑC¥êÅ¥ªr>&Ș˜±‹þ1¡bY¥ü& 룢â¯ü–«©é:®½<ª [ \e(•¬Z *TU‹j³TÓFв›ìè m ñ(coh¤5½<¸/Œ…1íZ/]aå|Ó†’Jì~{àU/·K°„.|¶Üýç[Ó Z¼Pƒ«œ²Áu¢¦Wäm¤¥˜H©FgÊJÀ àCK2©®œœŠ‚PkJÞÙÃj~ŠGx7‰ßýpêNâ½g.A2‚—T?a̘æJb2ûòÙ$s'T’BtªTD9Áq>T5ê½Á| Ýpšpó€ÝtGF2 0 Š?Ü´CÔi‰‰$hEóEê\ˆ´ÜU°b@gÊ Õ§0@ÜH»ãƒqBfÀ™”16¥*¤bÉ!£À·³‚›»¾"u9©XJ6±×.˜ß)ÿflŠO´«T·TȤ5€&Ù«îƒÀnèg¸Lá#)`1üçÒpKÛÓ•ª“ˆÄÄ:nå4ÁY¨"UƒïJóѶN sÕQ¤lòœ ­Ó«îíÂíD€óá*Ci&—í Eü’d‚.®¼]b_àÃa‘»j³ŽgX3~§ŒïjåÒ[[¯?üJ¸[½ ¸¬$#kD]×ð“ߌnD 4S‚v²:[§„âûhEÙˆö»Ñ#‘@ý‰Þ&µsb§@,ÚÛ`W³È€j2'Þɵć½Á(‘qÙ)9òä"ôbká å®%÷¡ ¦¾™ª iªHf2©ª‡ŠuÛú-¢gs/œ@+)X)*Âù¸Çê¡ð]³KE<>Uƒ±dÃÊX]…ë(ìÉ=g«Ÿç^þlÉ‚×6NåÒ`e ]•\wAO`nÝé·'¢ 'Á9Úi‰•Pè3JñG3NîMʸi ŒEª "*÷”•q›¤ÒÐÞJn=åÓ>î”ÒK>pXi÷ÿ{KkIRS}¤ã"ÄÏ$ €NÚvï§ b²—ÓÃqÉNítêÃé7 ?KvôÄêp(©'ÓŽ†Zä{Ô”s‚«wy¤ã| @ !Êù€bò€±ïpíÑùö\Ðñ³HæçM¶Q5ß¦Ú 6Ìëœ<@_T+§¦A>áí*‚q©Êp Œ ÚCµ©8-h$5XïéKWr§ á'Äj/äê^Ðïÿ …Ý ¹b ÊZ÷M¤Ê *(óÃìK0éþÅy[ê8[tÄÜÞ %‰« £jÚ]±ÜŒ5)z9)#Pì(EK8Í”WT¬ ؕܮi¹«È€bA(Uj݈_äÔFÖΓð¹òGsz^gÒ.Š´=ID»å÷$Nˆ£Áb¸uóT䑾x&gR9 EËsÊ=¸S°¶ ÷^ëJý0Îï+zSÿù|àp‡¨Å‘"¸¯ÌÛ§óöáe|F>:ë#XŸ  X<­\ݬýcí›éž.ÄFö¯?Ø“ÖvýäÀ6¬š]uB¥dó~5´·¯¤©ËÖ{(PÕ !2u±ô)ÊZfê í2ùJ‡SÉÔ&ÿrª‰óÊ´»»¼¯zPZqÆÿ¶§"ž’$ã|u£Wê´àî\œ°ˆŒ«kÊN¥tÇ^‰Œ›ëóY™vw9=ɹœŽ½¦—!®˜–Ú9dLô ¦[¬drʼnrï—f!é'¡,˜ÓkcîäZ®æ*3b¼ŽG‡Ôô¦ž(pè¿äfá»Ì(¤¼Ê]ê™ñUÓÆPVý)¢‡úw:È[»b½•P‚f5›ñ˜ˆ>D~q%@K,—t£¡Jç—¤ƒÂ,è)¹Ô.yr©†­M8£Õ›°ùÂð‘ð.ðÉ‚a"±õ 8vÀì§Á‘_jŸS¸NrxEî…—sÀ$c2zsS8 Zz-§\ œÝôš,[eïi{8 ×ÍӀ󄨦óå”÷ ˜;3˜ëÉo7kÆÕ"5m}R4ªüuu ž5ú1{íÜ¡ýA¹û |X¤kà>ùÛ#ùX\}—z[Y!…wWÌøÚ ?·ü$îªOrÍ8ÎsááÅ"øºÿ'-·'ä@Éò$ˆ` I­…¬åžaCpÀäažõz­¸ ˜Wçv%1ö¥çŽ‚*ÐÊ?ÿ<5<9w~‰5£‘ 7(¾o)¹, _±ª>¬ª@~0\œd)˜t•«ó÷þy$á.·äÊíœØ©iÒS¥œØQZRW=RUàìš©Nälù EvLꙈ–{9˜¾Þ¤$T øIN%OºÚ‚2Âàˆm¶ü(x}ɇOÇtàÉUcyW¡±_šûæjdÊtR/?’{z’BMð“Uœ´l¥ˆ u[ˆœ5¡öT·I»éiÚ:”ÒöPÈ»jkв=U˩ښSWù\¤òý­šw] %åîÊ›RÝU›Ö|¡d1¡ªÐÈÕ·ä"»ŠºLò„¼PVRÉ*µü:î3ÿKt)â¬Ý`wÅÎcLÕÉoœÀâå¿5ë×]Ö´‘*ïªy{ì®Ü4DØA´«þ@ø‹T·§ê~X ®:"?‘ŸƒóoRøÉЫ=T{ïõõ% ÛÓ`×ÒöO¬;HB¦ã0œYØôÁ,»+U#Íz¢Ëù¾$HF0–´:LŸªâã(OHÞª»‚ç–a’Õ²ÂAň“(˜ÇáÔºê€4-*ëZ’ 6QÊŽb@ÕÀ¦|w±Ý‰Pœ"ƒ HÜ÷67ãÝNˆÂõÅt ³v€«ÚÁQCm£ ¼ÐïähüTÌ"·ntz?ç+ñ‘y#™°Œ&ï6s¼§m(w$S5Àf¡üN ðÒ2m¸.¥†{\ªY³ )L$†ÕùŠÈ›V[ê§jñ½Þ,%ú¶KÛÁQS<ùª„ Þ0Læ¥Æç7<­ì}]ÕÃÓäHÌü=”^Ô*§ƒ©Y–åØbj&•'uªœPOøóªÊ›6»|KU—ò¶MË‚ ToÔ *”_Ý«ÉX¨5ç23-ôö/—î„lÁ™Útb@®û„%ª.àÃa ö…Æ ÎÛPmdŠ'nÝL©W%§¦ÐM¨È0ÀhkìPK€Ü(¼ºIÚ„&^’j}Äuuí£’wÔ†MôQ_x_üuºÉ݈cÁ 9–Äí\7Ök•nÞ$#ËÅ]L«Ô I&òäk%ë¯n$DŠöxU8MiÍ„ª—”dá:ܼ)H–hŽþ„ŸžTê½ÔñôMÂ2ºù›T9«Š‰P>Œ¯)!誥©V¯¯Ý›4rõ@§¬ô¡ÔU·§ª%Rݤ¤‰üRi$€R¬ïʳÏË:¹*<ïq(†!ng`_·iúp´í†_¤Â)âLy[pL܃Rp7*g饪©§adAŒ#Üï5MÖ*¬þi{äÙ"÷^ëJý0Ñ£¿õ6¼ÖÕMHg!Á16a!ï‡h#qåÖ ;O*Ù0žé ¿6yÓ‚2Âð–$\Q´dp +ôÍ~( ‹ä' I*ÔÚóŒs>%›`–©X’$>]5-=†“sw¤ê$KòIžq&WÌØ'Ü^¦Íu>¤¤”]©:52òÈ<­>¿T1ëŽ}¡Ý“3&× (Tûc‚/µ«‘« #,/çêQt¯ô¦ Èõ-_Ê ‡oÌp¢ÒºªÊöT17³wR‰%ivô«c$™?ùM“K]pÇÎðB«‰¬•0}2í2ÂP`ÈùXræ J³ÎñÁsÄbBÕcf“t‘5xªI¯6±;é„þÆ]z',†éh_YF8=c Ïk;tæMfíÆ¶$‰ dž³‡%à =¿L|pGJ„O]àw©]éLy7§N gØ:yšÛK„>æd,Ù6̰¥.µD Wc=ü»é0Z7=‰ñ•qŽÎÛ¾ÒÖ*Mâ ­‘8ä† ×ƒ¹ K Ö`~ÏŠÄh®x ¿¡âŽ‚b–_’8F˜:F7v+× –P˜5q”FAuâ:l\0Îû­a°ÒÜ·vÿ>Ôç’aÖÍíäÄï‰Ù¯y„ãè굚ÚZ‹0‹oÛá…¦‰-;‘JA JäÛÚ W'òœn„×ãsöM«-õÓ°ùXy^®&.Ë£lݨÒÁUv:så6·¿,r_HF0«»hZÄó¯­OŠ„oª­ñNN9‹Þ]=ƒ0R·M÷Š0QWf#lóеÌN¯F“f«ƒ’8 zs×zP„kš×ÂFý¿ ;]y‹xNxÝ›”±˜¥û^jåìÜNÊ % æÎ«‹¦Õ÷nð„O|“Ö9÷Ž:P˜¡.®ü×R²êK¥5ÕŸÝT«¯¿‡î¹9¶Ì¹±º®†]±%O>ʼnhRuÂÂŒ9ŽçÒÿPhWk=ZOך–¦ÓQ$-Åä`Èà*dÐî¨Wåƒ1Œ°òá°É„ïF ¯¯¶²–öRpm½׺R?ÌpGû$ϰ:ýs‰ÿ2|=4*œ)ÉÊ2WWæv~Øþ‘)«ÃBóâÑ ì1üMÂÙ]-­WSÛœ6cªìñΛC3¸všÄ¹\/Z¦¯½Ü»‰¨ÝHÈG—mv¦öšµ‚ɺ)yšÑz™«ïìîÞÉ‹~ #I­W“$Œ¨5#žµõWÃàÓËÐBxr Gù8 ïf:á}åæb°ˆ”"öNG,ª75ÞÌøàô­¾bø z*H¸¾RîÒùýÉ\2ÜùEy£À1±‰F_þIm{ ºóŽ?®G Ô•LÕ’L¾/1oZ-R1ü‰cb’­œ ¯ndÊ%;½-Ö[ìrwê4 mŒ1pðŸ}jû¢ÓÉG%ïÉ[ÙŸpשæ˜T±•ŒïP“†S7À€ßäXª’3«9¡ƒ±É=ôýãÚº Òœ’—:-x¦ƒrš­´¬¤r\1ùñR‡ò“,Á¤C:A®/Èêð&”;”RÝD†B­ ,¢j%´Rj]éjÀe½^ÈÜÒ RÒv”MöâpFœ¥ UåNŠíáŠ=ì YE©lOhóf…P$`Çp‡â •ï§eù-.àSE’íÅîȈ³ޛޑk'ƒÀ«5ÏÙy[én|%®¯8xí*§‰‚Ü âÐÖ“¨Nˆzÿ*#ÿN—t%JºbUÅULÃ<kKÐf­„M%™â‡lÞPøË¥a¢îM5C˜n­@\_wÀr‚áf€ŸWæÖ1Õp1ÙÓNø—q& ##0Éb¨Z~œî»Ã²vû¦e¸)5ˆq¤tÓzÔÌt¬Vg¶Å’ùÀ<5õEyW2&à¦4š³?ð u>  Âøaɤn„g*_‘LueëטR§àHæJåjŠg²Ê—¯éîÛ¢=Ðo\çwœð~“”WÕ`,+8n–\ºÃìl òÍÙd{(4ÕRÐǃÒîJ ÉÆ­®vKb{us©\tМPâOi;y>Ûðùû›ªÿ•ãÕGæ¡%µî0«NÎ6+œÒI©¶·0ÞWØ7­¶T¸—–/R[ië³Üü1Âo甿pÖˆµëϯ€ù%œÝà’‡cMž¤$?Ì0¾Z šc£ó+Õ§òÉžòÂãqŠ$/PÒ0*‹½îêo´õ $¨áF¼„Kü›9Ï”"×—PLÀŸ gØ)ïF,„5–ªs>.ns5q^гâúe˜µÊúû¦Õ–ú鯴[7¼êÈÆ•HpwÀá^ ï‘9›ãQ"G§R7  wÉAAY“î—ž™=&j1ö×HãpPPlOêA¿NéOé…`ÞY$Ë ÁÆà€ñ»©NœÃîšÐ* ?œiWʪ? òë._E7¥š¾»ê¡ò"ÕªJ§ê~Bk®޳8Qu⥞ßeé³n\*ˆm€ÞŽ㺩5JúHù©Àµžœ¡=Y WJÈééK…ú¨%u˯/-¿¨62Á bq«ÝM1~`@U'/a„‚Б;ÏȇB7IyR#£è®ä $ÁÜÎÕôÛÛ7É0.u[Ÿ8+»ò–àô·{cb²îüæ{0ÆîMŸî£]©«»ªæ¾ñâVƒä±2ƒWC[;~@§JP"õœÕþ @)¨÷¼ÞüÇ›h´Éüúæ_Òí° Ê*Ât¦RêÄë^éPµNð¡O~’‚'ãuHNÌЗ”¸ß À4¿QÜ0€*Ä#ÙÖ³þØ„RPxs¡]¥Bf®Ô$È”È)yÁ$‹áÖ'1qìN2“?Ò–Áø½œp5ê"ŽkóêöÃÀä— í>»î„Ûéô¦ ñT§»èD–úrP.—»xýWØÖ7À¾¼Kê®±«+»iU[œá¬ù…÷ïž³æÇ„*àÚúSºÐÓpê í¡úKÅ—,ÒÊÆØ®ƒÑ)ÜÕ ²C|(ŤˆŠºúÅ»ÂFªfñ-ÀXJpüûoO“çtë7ñBWµœcjuèü¶ºÓÄ/Qº ÄÆâv/N8ÿK¹³Em¸ÁI>\«åÖþie‰Äuò½ÌhŸ 3V'D#ìðÎíœÔƒx3ÆÏeq768欥§ÅãÖëô„÷»€®<‰nt¨5mÝKݘö ÁXæ8Ò±ò¦ÉÇÄ’L²šNá°&ܽiÁ˜¸5ÂÎIÆÑ-\åíÃFj b‹Y{/ÑતxøFêNhÁhÍÙ•ªvðIªù@H‘µç°BÁKßD¿IÁÏäÀ¿‡B{¸¦Ü)Quú¾dAn8 ~Äc ó¶à˜Ø¨`Ws’19&GüŒÁ‰2 æÒÀ6¡T¹éÐñÅM¡'¨nñxªÙÁç4”j ÄÜMî;-ˆñ¸cï##l©+G…Þž Ç¿Ì4¶p7Ib€ Ûm»]C“c`šÚïMëH(iœPâO%8‘·øÝUlQ²ì*9É$»&qês¤}1¹±˜\#޹RÇ>-x¸©¢OÏ+žæ¿© î+óÎv‡ð4Y†cu²yhê„%¶D±²Ôø£2a…&ˤÜ'ÖIè'\ôÑÉÑg LtêgƒáKu¦I ›³$<¼âªú› Vb}O˜Ü`ra¹Y¢J©x2N¹5Õ7©þ@.¸3i¹¥ŠyÏITò6 :”æ²,Âý¨‡ÞT1”šp~èL¦WêQÿÝU³i{™6ÕN®Õ ÎTݧ|‰G‹7¬ä¾I´“*eÓ®Úš+¦3‘[ŸîM ʃcXXî³®T¥nò}IŒàè¡K }”#-üp¦ê ‚óîjÕü‚”k*¶4ð‰®ã+Ý+ˆÈxwM¹y'¨$§þý6UjNŒ,PŽv\K Vg™ù˜ue, ç€Ý)ºõÓÝ›”á¦ÔI8„³”Ø–ÀlÈ&™ ~“Îó…„©U˃L¹§Üƒ{ÄcðøDÆÜe&Ò¾µ–+DàpIpž¤yç-½ …&T'ÎÐäõ¢ ¨»Ãi‚_¦‚±n”ªM°¾©uP{@.üÖéAÉDT^*Õ£µ$N4ÁÓ:e¥nB÷Ö÷ ¯ÒˆìAI ú]àN)_%ä:$ôW%·õ¥Xr©¦—BÙUž*/È¥½Nœú)~‰ý²/˜K†Ó_•wk5öšz%ŽWéH*Üßµ)ov\²ß³ ƒ›äIgªOÃ×7å̇¹ž‹”÷;°SŽƒqÆß(¢ÎÂGÖ’; X*b"×éà§]aíÖkìã9Œ§(ÒA¦Þƒ;ÄñÅ$¨ã/«/ûP¸*¾!M„ßpÕ°=&Ì„'åœ4á¤zS ò!œŒOÆ`~ÈlPŸé[U˜hF¢*èÖiI¡Zjwˆj¸+“q›ÀKF»ªÅ+áé)7­Íôʹ;5Oš5åMA¿DGQ$”~꾎 [FgÞüýÚàšÓÎyq=x¶ Çíü;Ð5@¹‘Sç·1ï”·•‡±OF|ËtçñkŸÔ¼^‡…!†‹ÖxÔðÚ‘æI—l¨WèNxD"‡qµä)/Ê1/x€4½›é|ue{ÐË]©”®- ²/Ê„Iÿ‹8Û€¨ÛôqÑ㾚™jÚú„3îù8õ ¨ç­EøÂ˜À¥鬄«Ž§ÂÕÈÁûÂÙ°3ãëïÅÒÁý ¶î§jŒ}"ÿ¦­+\•âÝ{ s4ˆ™4@MË”ÉÁw;{ØHµ; 707 žÉ"/ŒÊ ‰nJ5~P%CŽí.âÜ{ BvX¬w«é´Æ×æâU×– “úÕ)8’ñËÞÀ¨¸¤àr‰s@ùóŽÁè.ïÕu£‚qðu«ïârG­;Þ»êÊy›KÆøUéƒ×ÔZd¸µözõ…ת7eZø£ŠéGùQ‹gñ™z`¤s¿Äâ÷< 9ÁÑ ^;9Åbº¸¯ì‡õwÚfî=Ú k°TÊ\cÏmlË,\äc+ªQ{Ωñ¡Ÿa¢÷ÕxRáÍIÞzP½oõtNw´VŒ#Ð:h(ŠD ]øUœŠ‘cÎáúWyª^›ü›”ª º3Ì[`wê´/(# >¼Ìb¬ÁoZìáþ'¾¯sý[¿íàH©‚!¢o³9ázŒíÎïÑ;—ìô&£»‘a©€ú¼kÇôûG¤WÎG ål²[štÈU3!ãÚuàþ]Ä_'ló´>ü½ —‚;9jr˜7…)Õ™ÚF+çO=ë7ç'ÿñOÞžHÞ…°<¦©J¤µ[2w¾±Éý?}™n¤r¿§´“I†rƒ` €$ï5xp€ï†SqÖ'r>@­›XMO*q #¤´=TÉd‡ú†öŽx¹ç Ÿ$S '‹©ÁÜÎ…ûdÁdÍà"‰šw'š c"†k};öy›¦G›©°¤Xªjå_ × ½²-³_ZbY*ån€ßäXêP¤ÝU<‚n\¡CË3¡«¯ BiWy©T‹bC1œê€íÙ¹ƒþ°vTÐΔºÃ¬Í»J7á|É0ÆŠ üˆç¨›#k>Üæ#ëZvR‹—}LN}‚x¬[†ìXª‰*’Y÷ g¡ ¢«ÆäÝUþû.à¦eªCr³Š§ŠðÓgÉUånB»‚œéÛËXUÞ¯âÔ}‚ GÏç|Íêýî_ÝþÉ |tWLјrUg§ÙXwûàN“#Gƒà¾2oá~Gc,3&qÎW ’%:×ìI*Ü]c¦3™TÕ§Ê.ÊÝ‘ÛcAª‹9=í?WâJŽuÑ·'š”ðí:˜‹×ørj_#1<ÿ$ø•Ó3-ÔM(z¬}œ·‰Œ”]¹5©¤]%C6ŒD©`䎥*=!ûAТ¶‘J‡hùÖØÎùWpÁ9qLìA2£œ0(p|\'©èŠG³3í92ÍçÌÂ{]œÒ¸ •l²S :S„q+ÀÜÌi¦=:°×ÖÀ=M,?k™š€-&—7~¥NÁQ³›D3´Œ†RTšòK¿Ú‡‰.»XüúÆCJæt–ëöP=8+ ±4ÂG™1Œ]YÐj¢ŒÅ,=b×qŒæšM"¼t‚¯¿ðB«‰šÙȾ—¯¶Ÿ €¿Ìi3Ø!õPÛmîÝK™oä-™trà’ECvíÄ‘ÐI@jªºdã:¨“`ªÿf¢pûK€Ôää šw“$T ¾/ḮLñrü5@j1à¶-”ÿ2Úsøºº±˜¾²/‡°ò‘ní‘{©VÑ!/Ú¡µÍj¤RéU©ùDÃÆÌ¶f‚qlvpB fš-¢ ~SŒà%{†—X©¼pïÉV]×òôë-uGqÈ-X‰Pï8&ö ñèlÍýr, ¿´ôÃoN¹›ÚPÊûö*Ü©Dl{BvWªN ú/¯–v;’vRØU„½I|Ć%EŒu¥ßïbÍíØl,¤àÓÞ…~JÙµlOÀoÎéJÇ…Å@INÖn9t› :´L;9p;‹¦$“ª*´u¥ÒqN¦ÏöášÚ‹ õ­ªQíñGËØpa„&yLTi÷ˆï1àªzÚJæíÞ Ò¦ü$Ä‘×íàÄæ_@$™òžušú¢j]ŠúR»ã•qþÓ&2ø šd1ãb™´ì&œg•r¨lWO™l‹)GÂËÀxËÞ2Þ/˶ƒÄoÿsöË:O𗜸Wõuƒ{4ê¼Y,–¥Ù¸0ÃX‘n°nÜT¥jK¬à²”CuÂÇÒ4%O|“c©A–êÃþÉ&´OርÇM5ø¾ÄH¬¶5’D•ux…m¬ÆB ‡©˜P5p¢]… ôéàÓÚ`ÐÕ°;_wàÂŽÜ\2LÞ°SNÎÛÂ}bèÚ‹3L©+˜8Èáµ¾€Â*wFùÂm‡¸j¼FÏ‘eF£m»ªU[íî4Þç ˜q7¶‰•mýAÅë•úb†AUê•ïoÊ»CóPUm„žYîò¤®q?W"áE‚U5Ér^¯ÒÈ#Z©µ ×íAzÚ·'Î TU±_z³#~ýði¹õˆP õÇ”û„hŸ“/Õ«³p&¥×e¡š„Þ¸½]§Áo,{zzÔÞ  ûhù¥×ñœù7ÆA9õ`¿îÿi#•8 ™ OŒ DË#,z–†8wÕj‚Í-ǵä)gÊ KÌ»‰ ƒ²cÓjy»d IùZÜÕ‚æ3 ôeös?7B“<†ÏãN\òÄ÷Œ–j­ž*8Ð9>ÈíâY8tìþožµf‚ˆááDU¡›éU•úö€âÃÕ©+TF—Î=ƒQƒ«æÊªFßdrz_?Z1´D·J¢ÊùPð”ÄÄWŠ;¡@l=f©pëF2k»‰wæNÈQ hŸ ñ”¢¥à3±‚Žcb’­œ Ásî²–„c™rãbÑ®‚¹qÌ[`’aLÕ ¦X^Ö¼nÄ„IÂI‹»Z úkGad|ØLѲ³ÏJÅÙä$ÌŒºë4â/1ŠÏ˜®ðú¥ÔÖï¬2w¥=0ºê…+9VN,#ø:'[ôjIœÐ)ïÛ‹“¬¦ŽpW[Y¢Æ`îß´ ŒÅ¬iÅûÔÁ?Î^toз6‚–œºQ{ÅŸÐÿˆX}×Sf˜jíyÓò©âǦMUT²–fp¹„#†aU[(¿òŸKÕ]O†•´Mµ½<¬xúw® llB¦Ý5Úǧ:Œ÷Ð&uKJ»+U£®ºä`UøÒ´F±ÂÎy N®^ï—`À\²Ó›&En©Foé³C[£­TÃe_B¼%×NAûD .9øM+˘®TcªªÇ£Ê®ÒMNÊŽªÒu<~ ×iBP\L5²u0´œK/‡pVÅ Q€˜\”JV'žÍÂ4ê_&8cqŒ¶µ›`ùFø`r¬¨µÉÜNgÜÔ03XcR~p ¶œfÑF&»« §ìSŕŠÁKNUåîšêpä’K ²ú†NœëƳ»É\ȸò®ªi?¶&^(ux™ÂFŠBi{(lü²k@á0Xx<1Ò¯9ö·Ä‚°Ãaަ]šÄ}…,-ãîÂY³K^Ì›>Ìš8g®æ䯜›#Nqò¡Å”·¶Œ …Mò?nçÿ‰õ¿cuüùßv·zÓ_VÆg n„|׉ÐÇÜS >cAñNFÍ•ö “«Vuð˜\r æ;\Ì!Vw`4¹‚ÅK šùW% o¦ôNâDªnêOZ£œ#Ã,™zrî®iI&pëÆdÚñ}=LlVxòï¿=³Ð¡\°_`ó ã;XÆ4T'â@,cu=`Ö§­ ¹_iNy#Ç„¡…«†6ÃÁ©ŽÕ®‰oZY"¯Ô@o¾íN­Iâs≠˜½ðmy£ýÚBÆtu¢øÂ¯y1xãex§0½Ä.u*1«ÿ%ëÜ\åq ü>Ë›8 M„ÍØ&}Ü«ŸCI²èÚõ•,_¸†„þJ™Œf>­xp#£K¶ÔŸ&fçwmÁq¾|¹Æ.p¦èêäÎOãmaK}š–d")5Z®þàHo§¯åNKB‚šfa|èˆ5v8йV^É)öyþ/_Ö ÷&Е¡ ¯и$ ¹®åp~{ø‹ð<óÃà…¦‹3TDè·«aŸ©mŠœx+p­«§W`BoÁÜzØO¤•úÀþú‚lÙæåcb’Œµk®““oo8[:\ëüÃ}¢Î¾‚{²A#WÁ `= ÝTô¬ô¡ Á9ú(Õ⪾ùŽ’¹í±iê‚7×Uy³XÜ5;N!ƒâÍÛ5Á–Ó/ÊÜaÒî<Jä`z 2Y]g…µýï•$–ÁýPª)wÎC”Uó²+´îJÕÉ;aúû‰"4s²ˆ}0 cYxå1œŠuo\w ’ŒÕ䣧:ž6:óCÈm‰ìÍἇnóížæë<õëÇXžîSøø‹`4­iy›PØfQi}«dm¡í)­&T¯š­¥AÕ‘¨|Ô~1}ì©7ŽÕG÷ç[8Fœ7Õ£\@¹›$´ë<µOÞPf•FOUB»òÒ’ "ò¥¢'A®®úrø}Áz½PGÚÔßliI*oº^WQ`HzYÀ¥«Ä!c•Ÿ´)§ågü+8Goѹ}¥_Ör¾µ¤ª: ´ò窌KRÙi½„€œWWLÙ˜ªö=°½Qq.Ù±Ô,• 5HöeWâœ}zqþГe¨»^Ð Ó¹àÔéR•C¥.ûªq`sëÊ*øwÑN˜Ø*pÒgK5Âs“!êJèX®&-W•7dÚ”fïÜȵ*ü«®ª!Áä1=ùRku¼°WNÎ˃»aÔG+\Ô©Á;0`^UÌ5Ìߘ盱ð–×Mâ×[êqb7¬ØPNxo5m4äGKLÔX"}®èó’¹'ü÷²¨¿ט{¥L ¸0vK æÖ§-u“ë:AÆD,˜rÀ²+Ê£¾Nðö¼QŒ]¸:) Â¾dHÕ@hÂ\Q>Ð7Ê?w¹£HoR=M«ëIYé£JÕ•œúnubIüÕU3™nbtš`NЧuTH¥tÕKV¯ù(|[¤z×××—e“®jâk‚—%u¥Õ%/ª‡SŸdb$vFx2÷ñ´òtõ·Ášð@ïûJ®âP‡vHcrÍݨ\Íè:_Z³í*Ù$‰CG×`ë:˜Ûa–Ö â麻!‡j€}tøü„L"ÂIºÕâØ†Ñ䋪Q9¨OƒÙ+^‡ÂÇ*³–ɧpãN x<ÈÛØ¿‚o*¼˜ÚûR˜¸L6+×£®ÔÃqüÂ[EømB¢ÿÖÓíŸîFÀžn†Wq ϽT2nì ®35¸×X5šrúWÿÃtpsñ7+ÞÍ¢Ã$Þ”ªvGßpBè;ìLÊ[PD?ôŒ¢w1” ñCŠÝ„ªÂõe½\ÛÞòêJÕ‰óö@jêBp,GJ|Œh^þi¢vΗ.'Š´êjšM6±@}Qz«.Ý5öž°?V‚}w Írw¤ê„%žɱ¼°œ·‰z Œ0¿F–°Œ§{f~—Úw«Q­Í‡á¬R}%¸ œ#Çó‚“„ûÐäRHëÃðu<Ü0&SîözÓÉu.·P^'èñf†Á=­0*¥Uó¦P.M¹0â};ÐÀ³–xMUI’éŒhc8´–·ê×—*g×Èy›§j^S]ã-iDÈ\W­¦\òº«º¦!sb¤ÄH¯$o%Q%×Sõ€¸«&8É(7ˆ+âDág °=³Xô»ï­³ÝŒ0ü7^Uï;{;_‡:¬P(å ªÎKYÈ Tk¼©û„ÿ¬#8VçÍU†N±˜ä˜+LÌöDoÁè-\©C]U±V}Ù ®NNhì/a{ØO´*Õ1FC5Tfd®!y‚Œ‰3¡,oU¼§éI5¹fÅÀ–=8Çâ­Ÿ£Â·ã¾ÿö?ôðŸ‡)Õ9¯äŒ·VÀ @[ô#Å0¹÷ˆÛ†÷¡p>Þ8åu’¯÷ï´ÏdWª«é¥TM»*ª"PvEúI¯_'èq¼ŠðÏ?=sß©q ÖŠ{$¬èò61¿¡d1¡j€k;Åb±l⇓;¡@œÝŠÁJÕ(ß½5Ãy½IŲp/ÓÈ–8˜[û‰´R8”ß#©$ké3:5ZWœÆ»S÷¦ü‰8Óꀾ »S5༉7Ž.hsU ºð× é¼bR½‹Fþh9k–ý.)™.\®ÂÏ”ñKR›&ZžT ºi ÇI*¬–f½y82cSÂ|(HF0ö*wܽ¦ÜÏètâY ä^“vf½ûc8úžò[µ/»Â7Dk1ˆ—7e%kQSÛ(­²!*¨*²ˆÁ‡JvøV½Z\¾¶8i)÷¢pªŒQÊNW3Ð…DÒ¤b”š4œú±Ø›,&–~Iš€U¬Äˆ:ç02‚;=p}p¤cŸ S–’üKÜjÊÚ]Äj:J{>”€Õ‰ó¤Î͹,£ÓÓ”•>ʿͶ4kb¨Œ| õT!öN°ëÕ?HHE ø 6@ÃYËd¢›!¸S˜ë0WžÕíÜ“ô_ÆÓñã#EÊø È)4\ʸýXèMU¡¼$µ^ŽdvÙKåÂë?¬M7Ñg${ΙN–HÀÇ2I†ŒÛRÎ'óòË$‘ñ ´þp÷[np,ðE¦’&T'œ(kZ˜VÇa°’¨’Éê*ÃÉÏ9öõ,êÊy› câlÓüüZRëPYUð½¥@.æxArDÊ[ETúîJT» ®# i5ðôfôñ¬«*µéI ×²»Ruâ¼9b-€«‰\Ó2õC å·©{¿KVh2fm†V'Öa…&þʉ~°øâ)þJæ¶T¥Õ„L9úÚçR±EÄÄ{=NWŸ×ýLáwöÞ1̉îÍQ} ^1ÜòvÕp8‡§_\œ¹;IêüÌ·¼a?¶O¼¢ üªpšRñ£û‰Cõiý±.)­¦Ý5ɤ<ƒT¾.qä¼âð›öCŽs7$ åeŸ€Ï Õ‰³'Q}aÁ¸äà=YÆt¥>ÐÂË›V%òú =Ë>òĉ&È#Þ45ˆÛ®æ09¼ö„”´ô \rð‡ž,ãḻ“IÕÜUy¹¦}Õ’—“˜½–%X^ž¶$šq{¢Ä W ÊËÓtçúáGß·Ã<ëì‚7ü‡Ìì…«¡¤–gúëÑg‰ÿ°öCn…ÇÜÿÞ¾‡ÎK£pÏ®ZOâ|BO®f.\&€×ÔɈ>ŒžÌr{þ¢8þ#ƒ›êãP+çž6roÿM? Z¹ûDkð#åò”R#¼Òê¦d_\Ö‘šøo¤æã¿†-u„¥Ê#Δ{8}ýÛŽ§™‰ÔZ o÷p¿3m’á|„ÎÔ}‰â_è˜m±sqå•“Õà–æ$.¾¶h é5*ç¾s&Ô‘c ç횦,)::Òq¤:°ÈÃç•_È|ë…W7ž¹ñ´O³~‹7Œxj©çn¿Ñ ËMmNͧzRå^2ý¿—a‘=–ôá¹{oØësŸõØQc q®R{Nu¶º^¾áâ©Yn±C¸‰Í_ÉBá¶'qÖã(Ró¬j4Á—±Q­©S˜KÂâX Æ ‡ÂE—¿?…÷™!”y1Ó“4nazÔP“oWûµÌÝÿPÐ˜Ž³ÔéöQ ¯fjZvòª¸zº8ß÷qœiNðjÍ⟴,~{7¬Î)^Kµ=IfºGôŸ»ÏöZIÕ¤ñK&–lÔ¡X£V•ªbQδ¨¿^YÞã%¤`?&É*õ•²Â— U Ç}AsB†´:x \@Š6Ò•óÍÙThؤljðãÁè× eîÔn\vÁÛ×àvÜŒ‹BÜbY®î¸'Ü|coä’a4ôUdÄ]Yu ŰûyñÓÀ©« Ǫ€1Œ>²ÇO]çŽÙ(4kq a¸º!»¡ìñœYwG+¨âó¹ÿ’}Ë×÷ç`t'”{RòÝ%LWæm £é|tJXK»RBXcÇiBÕàð¡ÎÙeXâ?Ÿ+[EßkÝ â„e–Ö 2«ç-HFð£Ÿ*mÔS§@›3ížÀbbsQ3…±\ÑöI†ªßÃýÐtŸ‰¥ EïC0=Õ3RËå¤uÙç—WªŒ}Ë9¦ŸÉS6rÅæ0þºä2kÙ¬<4®±¼®3yå«]I Èuu¨+1GÐË+Ïÿä*¸S°.y¸Ï³®Ô0Õg:e5Í UÇu‚Œ‰mçÓMŸÀIžÌ}<­<Výôªˆû˜LýÔév´®ÐL|w'ä(äºNÏŸûK<Ê Ø;Œ«Ãwm2ÏØ5æ'ˆ³EXOšËžê䙕· h[rÖ@8y²Œ‡«C58Ö07‡}Ȩ¨v“$T |%¸rüÍ­Òº §1èZ’Jl–îÄØílU'[z©\®6Í0º’Í.IËoß×Ü 9n“Ä€êj͘Ûn$ŒÿÞŒy ™`2ŠU•ó6AÐO˜ÎÑOÄA­þbæ~´u<°ê7ÙnkNTIÐj–L«+Î`ž]aIë˜Ìíxp7žšr`ŸÝ•ê:®xf]x÷Y–XÁ~+ÌÐ$‰+¦ìØÈ‹šÂ~Õ´6±aUÓÛ¨y› ó­æYÓ'ó\]qe‰¥… ¦w瘜ãdz}Ù /z£+ –Ö°ªb €’r7°ëO˜nBÕ€ó$ÃØ´ø„¡I˨wš°añ“ü22ž¶ò?½­±ˆ<ëÉ~|Æöþpýé°>ÂùªŒˆw…ý5pz óâÕ³5æçd­îP]Y—•Ý,·•F«—”êpó¡ ôýV‚lT¡o2ÉP“ò ¨« 2k}ÚaHk`5øº$èÑŒó4›I$àkš`ÿÿàC%CÚé6Ú‡ PŽ‹( â„¥TˆåÓŠ’·Ý•ªSÈRRÒܬ‚Úä„rÕvRUê: ¯¦V®&šf¿P©´Ò÷µ¦ï& PÊ ©&oReÕ™`КNwr½¿Hp¯*ü!k0Éú7:rªª <Ê› >ˆüy¥<ÐÑž^ëìÉúfš…/ •%Õ3L!IÈ0ÎC$^‘î™X®fŽ× I …ûnx¸&™„«ñ0#¸óò4­Û|Ž’SóšQŽÜR]žßþÜS¦sÇ"ÂáãíàìBWÔ”Õ¨¹–ƒ&žûp>wªVqµ»«…S¦¥“šrp¯¶I ¨Yk:’ÝA÷«jÀPç”¶Ž¶´R3ÀösY*gÃÌëÝB)‘F;!VVN”l’:)5èÑÿƽ!¶;X¬ZÈ"Ô9+qNËÄ>¡ˆRÙéÂažU³iɼ(E¨ñJ:›Ò¹,/¨î#/XêÛgy}§%ÝU'߈\‡Z¤œ;â$ÎÎF­¬äÀKP’'˘.²ÛØøèæÇ³ãð€˜b/'õ$s³´’!اé)s2¸ß«‰î€+g Ñm_å­Ò¸Ýð—Ó74ßåv¤>N w[.g§Êw˜—;ÂkBߨ#©¡"kÉèöHZv·½HÙ-n»i¿UoZÝz·–WjXjê)·‰€~9U^&jõ¹³Q©A¼(JÊï^2 ¾L3É2ZO}bŽ ÜÓ‚00›þa«,)Ôrñذ°S†^hØK5áeB’Ê£¯úaƒÑ«òV:Ví,Sí{åÎÍlO²qrÃKP’'Ë÷nÇ“7í¦¬%u~Èj½ø x5S¹SEtfrɪ  ¾¼z›æ8JVZÒ%F$4‰Sv®œ$øÏ4¹ðÜ(üŽ,Ýa0ý°ú>?kc„¥àQÜCûÂ?AÕºudúS”%‰…íÃ]?ÅDç‹pÚƒx1.šiZŸ<œÎ¯cƱ¤pÙL|ûËëVŒÀtdÝ8GJÉœ&Wr‡G%á¥)Ì0.2ΫYj Œ׺§Ó4ôDQn‹P-> Öe /ÁÃ_iæ‚C ~ÐÙk{  «ß‹ºjʉeŒG¨uLzr†Á –R6)­!)œü¶,ÙVP S®¦¯9ØÚΉÌE`vFkä´$¬ÔóùI¿îT¾záÅüpNª~Uvõ¬ò²•ùƒwˆÐ$LÿÌìóÀÉ"ÈGÒS¦=M~ºhw8 n{­si‡£™­çÕ‡ø’´‘HêÚ$¼5Ú(OÀµµ›ÎYðêšDéH®hkˆ`r•Yí€ï_<ðWC…óþ2]•€ø¶âjX|ûéÛ™@ßÖaÑÌ=>â£[G½aÁž H$0OäG£˜XÙJ6´¡ü‚ø¾ôƒ±ÑÂ`zn)pöïé¸Òš8ŒÈ”ƒrð¤;é~åÃ’Ý¥p&õÇMõ7eÝ ìûJ‹A¤õ]‰JÓ|j&œ²65è¾Å€ ÷É‹JÞL‹(tR½ÕD@v¢+ky¥¥SeÝþÏHá•’æ—e¯¥q·„¥,ËÕŒ‡þPZ¹[þŠŒ˜ÕÈlx¿% W.kgÚ‰}/î¡}DC´3'‚,E^1ÆŒô„<ßG³Ö×äÝß[ÛÚ´“pFqDÎtœÃØþÇ•E.m‡×2gѤqPæ裇EwÓ ÁQZ'.—j¹›/-ã²ÐýyŸFUË‹k#\Ë"©‘ñ–²¾QCìu”)Ðû´S ™Öšž,¿ŒŒ‡ååaJ6Ãë„$hj†®6y†ÿ{¥µ¦>;­xb ¾goôÁá ü)6Yí1/{ž¤+<¯H=“ðâÐ#¼öƒÊ‚Wæ`yl\¸K“zZЉÓÕ&cIÀúFçz¥úr7/-“I¯8¢‘¿Þ‡•B­9uüþ‰œ7eÜåU¬&Cµu‹àc_/* }â-ÔÈË^^+‰$zX£îu‡ý‡å§Õ‹ëß>ÿ#°üöXÁÌ[™aòÓ¡¥;´Sëg-p&‘ôË,ôËëÕlx;°ób˜ütô4˜¶YΉ¦™áÆiâYª¼¨9ÉDš4̦«íðÂÈ`í×ÎDÀ²ìÔØ^WÝtƒ—WjI:pM wÊxõôÇùLUÿÁú«µa[ÿåܓџª.fãƒôÝêÐ+ÛÑ÷Ã$‰/sä>N Âù‡&7§Ö~ÒK(Lç’§ó88Å‚éº9 q2ƒcí^ŽÎkYÑ ð §ÆMësRm‡6¾“9Ýry®¥Àõ»þuÿ%YM¸íF2 ° "†{nǤnUÂo2Ä)DÙ›jÖµâÛÆ•0:ú5­dTU:„×òµ%›¼Òò6¤jð…»ƒ@œUA˜ª¢Nõ߯ÞSßD«c)ŽZ‹’î¶Ôîr×Õ%ÔL;ÄÆ*_’>œ™ÕkJÂX…†jI­O :ÑV@{s†ž©b­ðY“jÿ_î?üJ#q;Ì”[N¿ü0ÄY,Ôî(¡xq]’²BE9îäýÆ”êêÊÉ©•Ì 9k9¤W¹ê†‰p'ŬÒLš†…ó¦ £%¯(kÏ™Zt-©z¯¶EÎZ’‰$^yyšl6Ô“¡ëP(B©Ód^³£nü’šÖa-cçµâ^a€TU:ËpÂâ·ÝHû ÞV¯£DX7b¸³ü1;TU„ x‡ ªÉ¦Õöäú­ÐñŒrç¼ý-0쀩¢/#¡Þ“-aM¥'`ÜéøüÚK¬aìòXM†jÛKÙ\aºfáq<€;y»ÿÒZJé?¼Õ"쬵/¼]æDKNûWÜûM[’JÂySm»j'hAönez•˲i¹ZŒ`¬suUõë’ 2&FâNi¥urín¸u!×Ö‚r¸¡zouE„¯ÐL’l-áUKþ2‹É½­XlOÒ(­\m®2œ¢¶T\Ò:걎Ââ¼ñîJ«ÓPà7°£8abÀlÚºÕfZÞ€–Xx%KšÙI€oU>H¡Øä¾“¼D)”z0×7Š„’*ÄVQ^è+­ HÓ|× ¥EmûN•ÊÕoü7—¿Uš¨ÊPjÝ•P¹/‡âÕ\-ÝÎR`¼¤‚pÚ<ï¿„BPVvÀ[@{>—R×[ …ðÛ`@²–TM[SÀRX*R¶«ßÂKëŸõŽ72·nT Úª´n‚¼3½DªÉ‘²Ñš7WN˜%X“…LÀjjÞDG&ãÖtšø--oÕoHƳL&rÞîÕ}銯éî –ûï/´$é–ÕãVB‘QÖ»ÜeOk‚÷_M…\±¨ÆHÒY¶7 ª¯K\½Ý›e¨F¤íPñö1RñÀbƒ ' ä¿™ÜgUí¡‘¨T„8eXÑŒ’àp‹P5¡‹Ž¢àåô>šzº!däL°uMy-wpÙiÜ!ı©'d3¶™{©™d‚P zjË.œr Ý6Á/`ɇ¸’˜ Ö¨ñ¬7ÔÜ÷I?däó½<ïç.? ÅFÑ2½D=Ú0@ô ˆ¤Z.'K²3ü‡Pˆ–*eÕ2±ÙWÊo£«íJk:N%ZUwJN¥q&o‡‰u~“SÞŒ†ê‘²B[ÒI†¼ùdq;©9¶Ýiy7RÒª®%UÕ¹88¨˜;Sþ78cS!"Cìó. iúð3'¿ÑÎ6‘ÿv¨óñ«¢?÷_ê÷„vŒ¿tûùI")‡ ­û`±ü ÿ.WK½kXÒŠÂ~òa,xÑªŠ«OP) ¸ÞYUȉ”o Ö! \@œ7Õ®ëÔ!OÃo`ûC[·þ±ù <äi­ûˆ‘ÞK&P¯¾¼ßi¨­ lÓÃÓûqV ‹ÜEÚJÂysdeE'_QŠ¥Ö™Úº–¾ª1a¨¥Î§z—×_‹¿$Ü‹‚J^oyQ5ÁIÛ-_œa§l· ¡ÖîÊÿãë\³Çm(ü?ËKVK( 1D:$U5ìÕ§yê$'g¦p¿ >DQ˲ì>é®B ÙbqGIÁÔ6rÍCå 2º+ÝDäfzX‘Ù(ξ1_Š˜¯¤Pj$§‰ßžeJù® f‘ñ’Jõ h²ú‡aØ@åíTúлX”Æ€Ú\¾n]¤}1ö s²MÖƒ1Þ‰úÌ?Ú®à¥Ûø£ë•uÕÛÆªàç3²MJ‹Ð™ Q¹<¡Ê–*&Í…÷oì±Ýaª—¨}p8Û^¬êPЧ¤ì¹$ƒr×´Imœp@¬Ô Š‹ÛæÂ\œ°Msäf3Ó/R5zd±ÌIR~?«&\‘“Ä5èõ©‰žbÄŠª€ãÒh|Q‚–\PÏXñª²[ÿ`¨¶^ª³§r(o†óû¿±&ùîœz‡7ªâÏ‚¼%¦CyÔÄ»Zˆ;âºHûä´ÉNú0쌓8£Ï"[è{¤,øà2ÌI×p’HMãÈÇ(M¤!ñNv /ãµÆÖ7xH£³4.-!Ãeýœ¡8xñ]›6v~°Ôg ö8œK¡á}£ðø{)j|cE…>8Níà4Aê59ÎaËóä|ºþpŸó?¬lÿ•ðíõLNïOæþ‡%ý¯„þÙÄ&dùUêŸ?mY¥ñœëÓÆâÃ÷eÛÉ…‰åmq9€M{Œ?Jˆ µ:4ÙÙ³ß/¨ØëÁÙL•†Z‡òÈß0÷|à•n:®ÄAQ"õ Õäg—;å)ª4\~x'‹#%ãoAÆx1ë#r ]„¥NÔfQ¾ë-?ô±{¾iF ÃÔ¢R‡Dð‹RÚ]°•òÈ}! ¡ôRsã"À»É?™ ŠË¿‹±zn’S}¦bšY©»üЃ¢¡l'HÐ;”Kz›¨ýa°ÝÖ|ñ“Ÿeù% HÈRA®üA>Ãe>ý{¾ˆ)AÇâÙ)ëK­1äMf“Ùd¥ÿX…I7Fî¡x¿;M úº5Pêè;uXýƒÛDysð•ÓÁ%^!” «ÙHÓá´Øm-ö|°K ‰ÝŽxO J›)Þ‚9Ö3`fÚ„Ù q@·ÉmÕã\†'#í¦u; bRG礔z=]ë§Oƒ-­&·?ôìm 6XWúÙëê3&Åëý"è° W®&?êû zfif2\U§ŒtÝr38pAPɆˆ¯‚êé¢Ý!|Ñø hBQâ öƒÀ"éÕnTÏPÏx×àýÝ*” ðþip§’9m¸pøû€cTCŽ$¸#Ðvò„bôà `‹t›ª 2òœpqRˆœ¤ õ3øèÍð.(àÑë€^¾1þ$ß®ú9õZØ&þbàžË—‰> í`hÏCòŽÀ¯ü(Câ¥>!Ða† DÒU®Õ¡™Ê›%h+l ìO©–é#Š/WC-pqÞ:TؤžP_,ÞPKG¸è`(ï&òu+TØD;oE@oæ×Uä zQcî—€Ú邞@èËÙr1,f§øës®ãÅ#Wþfm‹„ ›EÞ]K(Þj9ãëŒ1;/8å3úFoè`èF(ï.Ú°Àâb%_TÛ„Yé̺d¦”Mà…ÍTÞì@m¤o§¼ý6‡²Heƒ\.F‡«Î½j!¨q(oZT&J:ÀJKP$ǘ¸p B)0A‹Eù°A‡T‹—´„Žý.àâØM³ Xslp@êéŸFÝñBŒ¨tÇbÒ\š¥íåª"¶\d¼>V6à~+ÄÍ’ÿ°4PoN U>dò!” ?«õ¯Û–Ñúˆ·ŽÅÞ&TBx±†*2±0@rÈwY]åj*äÊ®i°Ì•ÓŽ†ITÒ"¡ä]ïËà~u“Æèx;qcx>íÊɬž±@jÒ8T;èE®÷îZOÀn±äàK<[ÄQÀ(‰¡j‘kuh¦òf‡æ :3˜,¶ h¤.*¹ôârŒ$ø®Ûýd¥Ð‫Ëdw#žã¸•ʤÆ÷åJ³ÊX~„°Ù¥X#…Uc2Á´A f ¸øòbÜÓ%´Oümî€ÅÌb‹ÿbËcl!¸jôR§ÝTÒáÓRÇož =0ÜòÎiõˆß´pÆ8à”ÑÕvŽÈªM=ø$Œx·!'—Ënô5Á%®)štR ÊwÆtããuAç÷ꂾïÂàb1n ÛÖ±ÀŠòF Â!RO'í8Ü q]m\ >óMÙ¥P€$PÞÞ¦ŠaÞJ.»k1åf*”°¦À»BÓîB¡ä+«ü‡Í³ºšÜƒZ`U shãVèðýé~°å{È>#¨Bt›âc ^±Œ®œš47¹AO‹t°ÁFµ-âb¼c+þq­Ý€Sh4êíçÃ¥Ë`í#ñ3ËÄä„t–Å’Žeº¡°)ʪS='hŸ¸¢ìm¢tù½cp‘E2ÇäÖíþúrä†Và3ïNJ)êæ‹ZÁgDÅâòÖÈÊÌt¢ø>ò†SÚÊt›6Üã¸/JVÉ UÂÆ.ߤF²[´“jL,ï¡Úƒ¥J=ˆ¹†âú „ ¸Iüàg§ØE 1€zNX5•›ƒ$vê¦W¾ÛKX-R®<)Šñ€¿aeºœ.JFØ~FùãP˜nÏàZË(ç=¨xgÔ‹IƒˆZžEübc+BAe‹Ø*À5Sþ àñéªq'ø®•éž@i¢ÔëÁíɲ-רYí4 n‘ÕlÉfq²q1õ!5¶X §E.[ÞÞÆÂ®XE`‡H¢Ä¡\‚4ÊW©ç¤kRsЧáØè›Š4ã|×Pëû[T­ðÛBAl[ŠÅC´;øzüŒ?z)C“Eœê¾2µ¡»h7f{·¸£ÀÌatåÐÔÍe€Wð¼#ªÅ“Éüï½bD‚)ˆ†apŒ*~e•ÆH1v‹Í|wñ´mÚŸO.è²a #üõ»Þ_”È„MLÇWgÏ ö”Û>Tà²R’èm è¤Ù¥™J½<ã;A6ÐnÚСMJçfóÊ÷EU\è ö¨ükÜ£¿Û›¶sÄ4ø5þ¨V†¶<äÅ»Iq™€1Ëâ™è…\ÂäÊŽQ#rþ‘YÜ¡’ŽÐUOêŠò‰ÚÃ,*“ ”]ŠëêWq/hí÷ü“~ÏÏ Å¼ãm¡cë€/Ú„S [ ¬ÜL•\ÙUZP®RÑ{ªBÖ,+…‡,;¨ôvÙœÌÅ—€ÛèSÑïÍÁ#©\-7z4vͰQ2µ{ ƒ²’Ã(‚ònt§ 11²ËæšØá¾ÞêK¶PÛÁ—ùf3rÌi—rùöþ–D¡«2¢ÀØê`Ú ª0`gØc žý ¥ zMjA­ýb§\°âïÝ7©'P®I6Pì¢cöm;‚Ê›D Î’©ý@Ú|Âþºë€óEç(:QÒ1ôÀ¢le•¼¼r‡ÞÓb%6×}üÑXÖŽoùÑð;œÔ³2ÐN òŽ,ž©7Ä]g°ðnªÝ4E[e—‹(št‹RÏŒ ‚ƀƻÃ]TH¡õÕÇ*q=Y.[‘5—7¤ F·³|_S‡ï†4 Ë$Ù ù¨îÊúeò9C±Á±Þ<þ¾nuÑîà#bŸn;܇ ›F(#Ô|qh4Â]ºrÅ(É/z)x7)¡JîùrÄGÓÁRÏ…×Ä_ˆÁ÷ l Ê.»+v5Cl>Ãý)¶Xà°ˆÿº™ó½Scã¼m’KŠôAª² Ì_\Êí'5ø[¿×-ø#7®¦ui6Ü[íÄþ…¬ÅcüBôx±Pô‘=xwÑðXÓ¿,ÈH: ÊT³w@ƒ|Šâ;RIÇè W,x »h7f`½ÕjHBÀþh¡’SÚsðnbî@Ä=Sª=h¬0ØïÝïNžï±·)½p$ÄïtÞʶ‹ÎÝGý! ¢} 7ãh \ x/ˆø#Ž’E;:®kþ(»Tdòí_>„Å^ìX @€v K¶˜qÅC ÑÌG Ä’îjƾ2ù™_Ózmö¹5bõ5bÒ¤åqºà:mËWG“¿FâkôiM}mƒ×x$‘ºâÒÇ@hæ´;6À*NœÐà7?pUÉeÐ[PQ}]­ø¢ƒC‹ƒ¸¯‡³ŠQ=¡È# …ÍÅ"»bOsÎw5À¾ ¼>´»ì\œxLÐÇ­²K­R·»5/»ÓvrNƨUùDÖ3 ?ø²ÆÀÖ[ο!?¼ßÔPÆíÐõ¡ã3wh¦²ÞNDüÐ(6dÚ GhÚNÙ bÜíˆ_Y߬3@Þ (ˆøì„g‘A?ÙÆó%EÇ8¢«3ën½È†דvBØÀí)ZÂêEO¾ ¥!8%XM •°Bµƒ3©ZÑmþÛ:Š=(9 ±a3C°çÕ3T{Ð,EÆ6ì‡F౩>\ >d J²xšèh*} M’D¨ê†­ +X…à‰ù®@K4ÙF}_`eÓœL¿ÍßTºAÁÆ0œº;ÄõP!µ(õ h: ÞÞ‡ñbõRŸÐò"Ô7J¤àƒ“½ði”„¡îýÛ×ñG#lXïÊ#œ¯ÞM’I`C;¡Úƒf©RÚ ä8Û"Žì›¬°Á% Eo„ñ«¡„uшM?öÈ–[YÁ¬B* [Õæ"骧hØÑJVÈ] •z-l¾ù–eàzo·\.a8¨›úŠÅ’ЕNõÓtC\#>IsÅ JÞ32Ù¤@°¹êª=h–öÑÉ­2LW‹v"ùÆÛîß—¥ß·V «“Ž„~Ë‹FWÇßï­Ò/J{¥ÿvë§Ëd¬EOû£ƒlá‡J¨ü†#Œ=hý^ ÿ\`¿ßýþÛ?þVÿVé÷ÿô·í#¤Ê ·uÒï’×oÿ¢´‹jP‣ S •zÕä(T+r(ƒ6¨Z´Ý·ÌÈ$˜t[­ÜNh;å+ð—Pš€^Á¹Ž†/í†PA½`T¶;ñ¬rzë3<¡yð¶°¶àWa¼Ÿ}ZIGx,ÐñÚåÜÓ­&Ø»'Ë›'w'ÁvÌL ÚPˆ )rŽ+ΓjTKì´F¿Ö8^¾ÂEÝœÒN°Óøå, #l,û^ôÔEsŒ´„®LlÈ0ÌÙ"—e‹/Q5bÏ+˜mNІ-çvþøVBŒÝ6î”[2¹øî/ÛÄ1r‰Ì±96'”ÌgxŒWÙ"ÞI€bCi1r‘ Ð,ÒÁ¼»ÞÅÀ‡v¹ÑvZZAó% `dî¢.€sh¹NÖïjp_ÐR(T°AM=vàm(ñ R’f É2-'ÓBC_%ç}ÀF;» zØèº$‘å‡î(»)¤Ð%;OS¶'îÁü9e/8¡zF¶ ÕQ<õv]Þ­—eúDUšŒÇ:ž.–µ,é‰ÕOZkf_Ž(õ|8íËÈöà6 ü\°,æm¢zו\y¹»u¬‹ûí½ÓÓç²ìÉ—ÿƒG+—qlOÿ…•Ñ8s)mÍþõ•äôèæ¼¯åÐßDÒiÐͳ™ööp7zeý™z=S\–‹¹l_îÞDÉïøþ#’}ãXµpϲ'¤?SÑÅÊitþ³ÂËöôØóçEÔx™®Öö“ü}Ú?7 n\îÊvöåï"«Y+ò¬¼6þ­Ø°apssEzÑìóyÜâ6 ZÍgS›ÕZžŸåÞ.ïí”^bKù“¯.”&î¨ "Æ©+3*bþ–IQTñoüD¯‘ø ÿ¶·¯[©4^´O”œœG‡C1JP¾[‘g>&x†Pö¼u'¼R-Ö…~è,מî׳‘®Þd{ôá=œ„€|¹ì9H6Ü…¶±n'saÕÁ¾­Þt0Ôº¾è0½tÓÜÎE¼ƒ÷|ïÊ@Ïp2)¯[¡’¨r­òf–„jÀmr¡VÔÎð¿nH!‹»‰ºBNqF‡»8µE¤“×ÖY¶ýa[ZýÃ%\àN_0¹ÿÏÆ²"SÛ³ù³ï§á²øp!&¯üíuŠÐ òBÞðqpwÑðÉ·—½Ø¿”—I²q“•Çd/—˦?Ü]xº­BúdíË¥ÃXùàEe"ÞÍ? /‹›‰ÚœïëEúdñZé°µýPòºu*¥ Ȉþp¿sÞ¶~ðÚô‡½ëÃþ\ÛjÕz\,÷èå/ì÷ÓIïqÏ¥’:÷u¾øÊ%ò¢B›c:nI³ n'Š–ÙåÛÂÆü-–úpÅøÃ[“ĤaËÓÙ¿Ý?-¾¡!9šÞ¯XVámÎL¥´µJë‡mmvÃ`Ýð<³Çc&O–º\¾ÝàP1º_\fþ›KãWÌ%ެñš¶Óv¾„@z±ÊÛ°Þ÷>ªìœ\$‹´ƒåmRNºŒê UvÁý´À#(ÿ8áLí¼»*Ó×ÄZåÍŽ)×ÀÚªlïÀ\øiõ…¯ž:·Âìø#ÕÓo¸7’͉)ñ©×ƒ›óÊÊ/ôˆp"ýywà=¢-E\r‚Öˤ¹È6T;Z44±Ík˜.ªy;}(cž°G¹Þ£ˆå‚/‰¬3¿`æû«ùE¿Íˆómò#ûÈ2ÂKñœg ¤ì7iGÁVh›æ¸©ì‹¼þ™Õ’~Ó&0Zá³ £ÁktPÔJ¹¸Ö h}¬ÃX%JAXÚ—P‚j.¡ÒØñ'”­°äÊ{ö&g<¸íŒE Bbe…’¤ ì„{ÿf²éXÙcüÂ&ÔØ)ßu‘öÅXasXåƒVrQ2•æ‰\ >œî ÔNôÇøY¬E\Œ#‰ÃÐ!‰]j5ÆØÝ.Ü„+¹2`\|öŽƒ DÒÍ ‚eœôM¥®pA i 9¨Ñ¨ˆ Ñ…jŽ'Ã"´PöŘèÅ‘ï‘]ÔØKe÷T¼Ã —ËåŒÀ-Øê«ÏYFñÛ’GÁào*y¸›‹õz_ˆ…Pû›Òîóý#:7n²ž´ó7>M ‹[™°Vçò)yÑ Ý­èâáòÀ|¿© 0ÅÞ†J˜CÙeDÜs‘ƒË>Xpå8L_™/ ÞM wçÚ%À‡j©à õrqY ùµåÍÝá¢ä„[—`|}„=õÐîB"P¤Æ\KúÊ’àšÅ=_¼»Öjpæì)©g€WÖY #vÒ”Pî|E©?…°LÇÀÚ‡n²t¬Õg}°ô‚ òÍ´làv2ŒlC¾ ÑÆûÏñ—ǽÚ÷ø#ATúK|3‹ ”Ó(dµˆ[ÕØSÈIEåb‘Û(:Ñ› ð92o*4Ôçî}k‡ïtÝi bì˜ø#º\|N5~¯¨ŠÉ5¶²pB^¤}1™kžÎ º[”tŽlRè""^”v*’¦áò@;k¸-4Kü³¯¢¸6¡Y^&ËnæEÙêû õÙä“ ƒÒA)gb ÆQ¨9ðnÐ]Ô'Ë+ ÍGæp$É_9>ˆ…Ú]r¾uS.¿wÀý¥½]”&`ï‡ùpþ(—š½Òêõ'{K|[Щ`}¾¸`ò…\Šl€m”ûEÇ|WO+yÔáv_F’\s"5ÌX åº†Òƒv>ûÎÓ_ò0IôiëÂ6Q6'T]˜–©×Ä_3›ïx—Õ‰’ÓÆãp†b=œR v¿Ú%Ñõæ¦CN’Œrƒâ–qÎdv¿ â.¹Eo@¶ûŒÍ‰pˆm`ažãñb[7ˆ ò*\\ºs½Çä…g¯¹qÅ€êë.B†§‹¾±ËŽ<ηQË¢2´9”îÐ8@r ÌeRTŒ±ü‹¨l1ä¢d4ÎYÕ°A„ 4g“©§f×K;œóKqDŒ…ôŸœ±ÎÈ_dñ¸Ó.@¡Í4±iEål},Á×î¼$6þ#/ÎUj¸æ  ªÆîVyG:£®ÓƒÅkTi ôKhMÔJÆñŸuø¬à‹a°c•n„êP¡E+¹¡ZBœ"µ9ùÛ6˜}ì]€ô‡€7ö" ÝrBµ˜–&ÅR‡æŠ©ü/“¿cîúœ…þzOJóÂ&ÛâÕ.oÔÎ1]R¯•cåe:×Gý‹Tù^>ÑošîCJí?½$^ .ÒrÂVî¯&>j`ÒÿJÝ&K?²ì3SÊIŸ³‡ÂµQ¨’ž)Ny;szäòE>Ï+³ÜÃüõTF”/©ÝTûZÍKãå ç¸z’œYLî «ÒÂìØM»JNAßl7Èáp sˆ Ö;Pœo 1:74Þ'6j¡›gpÝ äÝ„M’Iq Û¡_ÔLs6ÀÝAÂ%´PnoýcðQT°ãõ¢´åÅïÆB%qh­N‡i=CµÍZú„•í¼7 BÀÅ7ïA³™Ÿ³€…ð¡dŠ"'¼Ö‚sÚõ“sZôu«›"é­ÞÒáYv€|±A.©c j¬ ¾#8 ËŸ¨<&!¬7} $ÿ^Z 껉,vá…¤ƒŸövŽvís_Ëxž]Šéº‚YÆ^kíÊáÛß9+OÀ ˜‰;¥ Z¹8ìáââ7lrô|p(–è<oÏÃI‡uTjt³¨±*1—‹HK½ž¦Á`æ@l1® Awµdq‰—³o!d„’$£/Ù&>Ð'O’P@LLÌ—;åj%Y¡Ùb «Æ€}±êêX«k(í<¶Ï€ÓE ÿD©‚8íw!#qÙMÛi] µu6J‹¸Öe0Ç0·W~SÚ-•Å!º®oiŒZu$^4ø…q.ù×-ÅJ ™¶“‘?óAoê–ÍHeðmïȜǖðvaÓ$G‘duÊ=rŒð>!j³a‡$Ä™­ùÂr*‰mçð'I‚‘†ñ Á +\ñ_X ¤rByÅ ¼ðí[D¹ ¹XM DÓsu¸>8Q¨Or¦9¤asz’zWh¥Æ)ŠÛÉMAØ¢àB[Tù¦‚dç=T¶QòA ã–F†š7ƒ9¥0@•].JN%´à ð*±­Jµ]¿R!èy#+œ`ÇŒ!‘‡‡˜ãZ„RÐæàÜ€}æî’é ±©¿ ɰ}÷ý Ç_œSÊ®±¿$´Kv\øw⢊÷'ÝW`M_¤Jm¤^œ¤å‘ÛÆñ0$CšErIrIëfâ-v˜5´•XU7jü4’Ó´¼?Pû2%°Oth8ÍÇÂÝœš;¼mÑeì…ðé¢ðøÌDaN˜øeJö‰Çe¢Ô6Yѽ›k ´Ý;vÀ¼û0‘ÇæÞ¸E¶øOîN—µ¿+Ô²]lìô6QÞp†N‡ÞU–f˜L mÄsµ•Œ…ïôÃH½è=¸8¦·$S¥ÚŒ2•Ýé/×nzè¦÷ËàÖvóŽe2LíûºO–z…]Œ—`½ +Ÿ:ðI ðPªVz25ÄÅ8q :°0ù˜ýæb`«§ôùxF£‰Ê›s@—Ïy¢Ö¸òövüÐçIÁ̉b\a4…(y{êGšÃ] u‡œØ)v‘Û7.š ÔA¶Ó gÏ ‘AÃÂÑoDŸbFP$ãíYâ¶Cñ-SùeK<hdºr2[\˜,&Ååu§Ýñ‹kCãC©“`Ï ‘âÂÕºRJÍ€;Š ‘5,ŒŸeu¶\½zû×Ýøӄ㲊âì8-—@½Wµ+·\žÜݤ¸t‡óÿdíË`×\v–ðE…0«BzæóKTòýH|Nåÿ¢ýÌ¡|ñŸ|SÅ/‘‰¹ ó6f(õšØúÄïüh…ÛÊe )+§­?]›æ“…£_ÓYsyуã þ>ž˜Ú2kz;y/rMJ“jнèʦ<¼l·Zb—IJMj–ä ‰92Ó!> ùÚš·ô‡µO¬mâ}Fqc,cálàOú† ù'½]ÐèŇ>nùÇÀaþ† N÷o„qé4l"iXLÊR}}Òýtª2%ùsÛogÃTŽ-òÉv€©TÀ,pü-\„:i;Vô.Ò&ȶ°®t<ë¹7šnŸ„ççܬv’Ø»¬W@3Ȩƒ—pP´W6…¾„6€$†â;=F»äÔ¼>6÷6ó7XùHBOŽ)\þ?*cDÓæ;œ4ž‹ú°NX9T5>é ´½™å…|o¼P¶'ã \¾^0ø$ÁY§1G ¼‡g_™œºSÙë˜$L듇ÑhÜ;Mò.ŽäЉ›ŒVnNgª¶1qBPQ‚ù†Ë×hi7µÝå»ù½,ØÍ‡# â ëf¦KjÇ Ó1 ÓÞMô$ÿHdËhC$Ý+¥¶“/mV¯Ìº_—o}¨Þƒ{ <ã9Y‘YO|S=KÅ'§»a´'Ÿ6ØÛ¢ú‡Ï}ßiIkzÓÙyi÷ÈPãÓá[ wNp‘Ë‹´ì©‚)§wN9œmÕ•1ŒôÒL®z«qzÐîÞBZ®R÷;#@Q?- ‹Õ/H5&«yªürœø=¡LwcGÙ–´|û—èÃ0æ÷/¡eçÕ”M¨£†¯i‘6RÕ:·¾TNë$ ’19;urÒ =±(¥Ú÷Ôx]wŒû[wˆ_´n …bf•Ÿˆî(Ò€PUå¼Amkœµ¤K^©—‚@K¡úL‹AMËkâßÐ.z©dZ'$š¨D9-;zÂ;%h ôGÞZ'¬S¿þ§ÎJºFRVN$MÛ /®I‚dë5Z¸v8`I€áŰ{ã_Þ² ß{ÊÁ,˃Œ?ŽÛSM—,;‰+­ Ê&×$±‘B~Ì­$Ó"ßy ,g s“ ¯Áu[”í.Ÿ±ÐL¬«îdÊÛ)D(wUë(k‰ë# 2YM{·ÈÓsíÖ˜;9 ƒ_‹¥§¿,ö.ÖíwqJ&8½WæÅ5IŒ`¬¸ºÖ ~15ÆÔV̈1/ažéM’«Ë½$_ÆŸ› kC@9?¼gcƒ:/“h ’ŒnÝU£áÊy»¡ÜãÑðZ³5þ×u`é5aÁ5½M’ ˆ— ³v@ukç‘.Û… _pg5‰FÈ(wƒNÖIÕ â)¼‹Ö4ˆ“B6I2&1âQôëlñ™Õ·Ê…rÇΪG`£DΙ¼þN2‚±EÜqŸ5ípŠØ¯÷«;ÑH[M;+¶½¬é®ZâoE;6N ¯ã-Ãeì ‡’ Ú¡€W5Ƚ°¥s!-%u§…•ÛÂáÕˆ3)Έœ7ç¬ðž ©“b5yžb„cŽb,#² Õì•×.sR}Ô„§)/~Õtbìèi£ ÙµÄ]œ¬(™ ]Kª¨ït¢Ù¢d“~Ug…ŒtE3JÜ@žpa:U× ÌÍD]#}hI;®IËF™•NN8ÝC* bœà8eÓÆM©\„”¶ìHsÌ—¥—\4¹¬X9'ìIp[N}ÇÝp;n®œMÔ} ñ©'& i†¢º1êAHpÌÁ>d{Ô+Î+kæ¾ú5à jÎÓƨa"š ¢Î†ˆ ÔÒF®Â/eΛî/­×q@Ü)ã¸9t ³£P¤J"Ž9 )ŠÝþ+mÔt.¾HË-ÕõB2s>˜ ^NÈF&k9Œd( ×3aèÕ^Éí0ø%@f‘¤„/Ñ@w tøªÕ•3´sŠ¥”­W[(g-7>R.Õ$¸µ¡¨7K.<+´'ÓÊWJ ·äT‹pëj2U&TW-i55Ï2 0ÃÍ£2ƒå4hå %Í9+d`#ÕU-™Ú·–ú¥_W£ïë?.ì~'.•a…á3L­éÒGZ^P–L pZÆ7¬T!gë®ÜvGìðÆèŽV”hó´Ä§.i/µ!™óÑZïoW(CXÄ•ª“ç”l‚ñåk•3 °ŠþÝ=ОêÛðàŽÅ£ÕwB¦?ä BÅ€ý¹þ§ÎBøcI?K©úIöñýÏ^†|ƒU¡œMcE®€<Âk ƳóDoÿ¬iKAzÐ w¥M›ûäHºeü6ÊÞyÛ/)Y˵ œ²Áâš$H†qÛŒÀžzèñÍE½‡l\h0Š>z-ÇS÷¦¼ ¾S†°ºÕãúðóO «}FI®U”½£žW”Ø£~¯GâÞ´‚Æ£¬ü7…Kz x¤ºNÀ‹†V×±:X¢RȵpÞ”4¿ä¥TñC`^U¨™v^”pé‚Ò’FpÔЛ·*)¯œ•ìÄ€yuEŠ„™Îäx¶E›2l$–F23¸ÅæŒà¥÷˲óâ ƒ[Q¬¢«I)_æùÔ’ªëP`RÓ"ë„´EêD›ÿM8™ â†ÑiD°ƒ9`Ì …Íj«ÉߎE× 4ŸŠWæ5yËon†x¾Ó6a£:Â(®ZâN³"­¦UÇf/¦ySø&OÒïFÕ ‡B KM/RÄ"”NQjÍ©°ç)+ädJ¦e¿ú•»+žp6£ó0ðÈÛ{Æ%ŪÒLæÂñÆ Ø ·æ•úšÔA¼QU˜»‚7-iUõ-)E’Áaúv¥ê„Nçò)™±Ï”w3µ•~kI” ÄURÈËÄól†–èËÇ#Jº»{Ó~Vu”CKŸF$ÙÏü£Tùlˆ>„\«-ô (j  м;MÎNcB-¥Ã¼µL_œ”¨º:áÄ„È0lû„[ ›Æv +Ö$®öΖnXõ/Ã|:GÆÝF-޲2n4‹ßL->$Ê]áú$©š-°¸žÍª2fðÆùÃàÜþ<¬âj<ßz>ÒŃõJTU±v¶BKž€Óñ‹KÅîâ$}Nº–LÍ@†¦F±[LÈ‹w¢Õز¢!o¤å†/£73%õ LLM‹¥‹ 5k‚P ¾W~*_:BðÒqÄE­Ç™•»¬ˆ»=›¥´Ã £М¢+\©V, ½÷$¼|Zt^':üÙ1]åNwãýêÕT†êŽœ9Uc\:pJôÑà褴Qõ¨÷…{$“ü ß4þ–©pJr•'× 4i8uZ õ[énº)/-釭Í?jZvNâ~‘ôe¿÷ê‘ò—‚u‚×_Ot³ŸÕh/×´F¿ø Áp}¿:åÅý)9¿$ˆ&µ¢Hœ9r6—a¢[ã7‡­‰ù–xO;›!y}ñþr.»2ÎÍq(àg˜]©YwM#-éa´ÔòÄmc-ž§(à©SPäÁqˆ·{#@Ohå ÐSË´˜¥Õ´ªâ ôæ¬Ð^N8] ˆÍÓÜñ¸e¸RÝ‘7ÓÒÈÀ6~½ ÝP‚±QÃ^ÃÌöÔº+N^Ý4¢ÕYƒGÊP-½×·–œ©9m s;ÇTWZM«ª%ûr»–;¦ #òeM‘ØHKë(–²“ vÖ5P†,Û@ƵÈÎK)/ýcš~3,.7L2ÍPÂñ8A N5˜¾iÎfñ3Šª+Þ¶±¹ùN3ùQçCë‡mîh ’œ©ENuÚJñ|l·Àh+· ÜX†Ê)Iµ²í#§ èœ´¬\&pëÁöNžŒ#ë3'2tE‰˜ÿñÀ.\©:œŒ—àHYÁSÛùÙ©ªù®¼íÌ‹I’ 2›¥t‚–­¦÷~Cª7ÃËÝxwaeÜC/oƨèZÒjZU}:çMA¨µ <nŠßúÁ3uPt§º–ÑV'ô æEµ&1(ï§QnÛ_`˜VÝ(§>_²›!iáó¸ÙŸ?ÞSz·NøK>†® 6œPÁgŠ`9ˆ†BëĘ!ïGÂõ!5ï©«ç TŸXT•¿ôU}=îxd$_5”:dM¨ •S;œôÉðÙ4ˆ1§NŽøW‘Äw­¤8TŠ~݉Sþ0ÜŽð—Ñ6Cµ_ç÷ü‚9’IŸÀKö=wíìŽö K7¬Î×®{ÜÍ{ŸNÊF‹²· p™—¦†L°kƒ„š×UWkÉy›à}Ï‘«Ïy“˜fh=T~S^‹!›ªoÜ0Ãç²ÿb' ã·T?Ew¾îѕ̴êŒðó) ¡:áIÒ¦ñIOƶŽ|$€¼Á覱³ áý¦ú"„¾Æ8GÎí0I®W7I>ŒŒ°öNЗsþ%ãÙ³ÌvÝħÆózYH8™‰Oÿ¸¯KT¤NWO7;×߃KãY…_ ‹v¼:èt3í^ÅËÝ¡·¥±÷˜é ÚI; ›?ì2{˜ËéDÎ#\G'Æ“ƒKONÈ6”à˜»ºsö|¡€œ;Éy¹™aÜwZ¼u\šq;º1§›‰¬ÊŠ)„ï”OÛíýDÒY¯[fYR^ ^vªèOè`§] §¦ ¦JÙ‰P)ï«—#ÉËn/Áô_ÉTŒ>§É•x¥œ5Œ/S:5…ó×BĸêÄ)#Ìý—Tê²O|MªÚ¾ ¸Îþ Hr±?êšá–tJÉæ°ÙSeBH’‰Û7~ãÅ]u]v§µŽœòÄæQœ™Oæç{Í0ÂGJcïDOa“|wÛéæø£ OääÚz/Æ%èk«³n/k”IåIÒ¸ÊÊ‹’B†´9•òº!·}º„yus-"œ¶#ãÃê´F`öƒ¿Wk?×ta,•V‡:Œž$R¾? 6–N1Ú¸Þƒk£'ãæcü9ÂEná¼ã$ušÙ±Lû‰×0Ñ@b¹ØO”Ž¢'s¼NÌ“šÎq[ýØãËð1%‰I‰Øñá?›ø«(QÝÉ‘[ ì•þÇz£Zæ~Ñ)]Ç×»›«ŸþÃÆt^iâáøêêXêËpÌh6Ñ£hySÞÓI•üg„8å›I{ÿ•òƒêÆÔЉŸ¢À”#ê#: ½óŸÐätöKj:}O¢ãÄwçâÄ™jÿ SÛ‰¯…!ÿÌXß^žÏKÏ]K‚p‡©tÊÜ•óæÔDÝwÒò¡›ïŸ‹åA­¿(§Œñ/Õ Wj„Ê+e̬Ùדd¥zwZÉi-oî£q} ŠËv ‰,f7O‚©YMᄯ½‚Ž´ì¹þ]V×rêª.«bQÐDFÙ–‰‹„Ë “|jyqM$(Ò^  ú§¼L]º 'qÂ:?y¹!rÂÈëŸl#P6ŠËt÷¸~ÆûŒÚ×mÛ%ÿ]Që‘JÂö'ß"ˆëo‰߆ˆ¡QŸ± ´ ¾·ü%£b‡}^¨_Ýá9\g~óR9k%÷äáΓÊ×—lS}pOu­m7Ê vh"öJì¨@Ä °ÇƒRß{R£Ó–5ß;´cU&å~gá:ݘóöé>2¹ä›+u{Î-&XÙAÝ­}ô{ã³ùÒ„\« L÷¿ ^‚Ñ[Ô¡O°¼k€ëÅ}ÙmLë”—IÞ,£´¯NJH2(yb3ªVBëÎzh)ê{Àÿ>Iy'_›8Ž#ýã8bë”7ìU/5ß¹d˜·eÖMË–Z¯œÜòêtÌXãæ8Û;àê °ëç?§AkÕ‰*?„Œ&”lðN•ûPSªëƒE‚ëêL3ƒó6ñ<õd+7ó÷ñ˜Û4=±¸¹3nƒÏšð6AÐ/ú0 y=œ“P›†º<+ò¡3’ ¯8 Ï8Ý+x±ªw§z65Ø’žOH'¼½JúÒÒe‚lBUËd"¦׃Œp &ìÙ,©ã:’[2Yzjœ¦)Ç0^éð0¯ ÉöMø}Ÿ¦cQ 3uô½r6‡ïmÚh½7\NÆ}·Ã “/N³Ñ/­Jå‘zªÿ"J°­YØÏTwøl=œñRæ ŽÐEJþ×™—Î_Iþ'ô‘W3¥»™ùkZúЩ;ÜN¦‘49â¶O„ïéÃÙ¦ÀÐ" [3Z0êŒÓÝ,wÓéÃ}V~.¡œî6Üè2â^ÃÌôˆr½uù¢ê+þ3åHúDÊœ¦©4±S ®sMòÀe+7?ì³ôNWÜ ï}O“†+{wÆš…njéÄÙ\K2©.Å·µ¿³ÿ/¬Nø¹7Üœ^$Ô“|Ø’½ÿw©É«:e4´ªŽÌ):þ:9p ’‰KP ¼'èA*üçëð3ü?QÛDáÑ×?fqi6Xn&f°_Ëš|ñ}Iç11ŽF½pàA³“XµØ ~®£øÜò¿%£!?ŸCËÇŸ”´^%ðñ}ˆóYP»ÊçSKª®Có6A"ÖzY^êôݨl(¶”U©ªrvåvö 9·‚ê]¥Ÿ–¹i¹Ñ:AÆDl 3Õ€e8¡ÚÙ{Z"8Û¨²ùCËÔÒVÀà Ü§©Fè3P†‡÷y²–Ë®ú2ª™ÄÝ´ê­%>ðV"“´9­¦ošÍ©ª2™æm‚XŽPuè3 Pòæyï¹H,S¡:t–á„ ã¼Í ¡ ÕȪð·éZ.»+æ&x8ãëçÎ8rSÏ6[/¨ÆøÜvGª“šS&-€Õ ³Ý0F%È1æ9ûD÷8“ƒÁqŹԗóPØU:U!Á¹ì®BJÙBßZ¾TÄ„ªVÈx¨*™e8ERÖ˜–¿X¥— †ª‡ Uô4y o™1Öi¹ì®¸eaLÕ‰e8b)a¶F’õôR•#e쀆›Ó‚ã¼òZ#ZªFžaÈ/2Œ¥½% ÃQÜp1,õåX¹ÏEX«®òE®«%ò²«nPOôêo-±²J›Á#‰8ÕJÆkå/ ô^hUu¿S²6ŒãfÐv™usnðfcÐy±jœ(¡Ôép*ËK§TªUc¦øuT²»ˆÁ™š{1íš9Á,vþº™R‡šîf *ÇdnÁø±½p”û4å³®:an'Ê0ã@&Õó œ çü&0ÜJúšZÛ&ä¡xäÐ’Lªê©3òàÛ„V–á„iwÞf|­‡mE«möeù0#øuÃ[ηSÉ“ª¢•Ë®J*›)'Ûöo-‰TÅGˆ·X¥Áˆ|‡ #cÚR'‘Q©8IðyG£³âS‘£oëp÷:[¸¨Ã­êÿç~éæ$ªügÝVNyºhC[#¸FÔ§ÎþªN¸&V.8â¾b§$›ª¾ìª…mD_‰E ]DŠQv¥„×ÔtÑóæ(D«òÐò!¤±[ 7¬7îôaÖpx6cÕUËE@ϧ –bPKéÓàäÄ ¯4±;/θ»øa’»¸ÊîÆmr?TñãPû@ÓÄÑ·lZnZéÓ#bB«CF;%âíÁ°Ô—¡&æ´ì€¢¥» xšýºi¨!ÃÄ÷Ãî_•žLDÕn¯q-Ͱ³å—…„ Ÿt”ê-OM=7r­ @„8oŠòrhÏçCK¼%ÒêP' #–IØ ÆÕ›Ìê’fÌB[MÞ@R¶ÊïR”žZº) Õ9Pâ#¨*¾M¬}3<ÛeÜÝ\§¼ì®Ca#תÐ!XŠª ±ruhå ;ç™tJšPxBëŽxÔhš³ÝPîñ{×çádùm‡tû)<7BF}—ìXj5áœrŸØÉ‘¨:Ú7ÃRà= ïán±^#nPL¸Hû(Ðç¹¢X“P5úÎ àå¥ ¤: ŒÒ›•«|>µ¤Õ´ª ¹zë ìªÒµÔÄ ÅFu²ìcÓhIÕÔÃÏÓj¸ä Üöà_šŒ·˜²AÕ½©ªrVí&,ä„ öK aðôž:t˜^-V©5 cʃ=í5¿eýád|ú|_*ç ¬ós xPU2µ¬Ç(Г­^Â~à Õ´ªzëc@üë™QàŽ"h¥ ͪoÏS ïtn T]sÉ몢•Z¬òÔ’ª*Ë0ÀD1vÖU¦j äÀ­Oìcâ¯'à@(ãf梪F¿˜VñrÛ®0L¾IÓv–ÚQ$-7R•N®«Þ1K-» •Dk06p8~Q¸onÓUΈ´Ih^JŒzã<¹Ó ×`.3‡p<8úÇ »ñß°rû–”{ªŸþ£ãSÛòC¯Rþ¬ƒ —?m'õOª±èã×­ С’xÐ×&:xÛéï᫇Ϧ„j¥Èä™Èø©Ö„ÿ¯ê³Ye'‡"– ëðÞ“ ™vV‰Í ƒí |ïåVaÏ¢ÓÍ\£ 7VµÇÏÿQ¦õlh.ßÝìÌŸH™ìÝÅÈàŠŒ·q# Ñšþ \)+ž’¼#ÕŽ" –Ûw¸L„Zsä—G”ðhµs/Ù3ðÁýqÊ‹é¯&q爧gáVz7Ë-ùŠNò¿_z÷˜•ÀL†;ë­gãð÷} ¬„ Ók=—E —þþ]’”–Ýàú«ìúZo»€ºR¥ª|fñ ¤Ô—PRë 9®½:hè´ºµlZtóÔkþTÍxp8o )e5ø¶Ê"›çÒzm! }ËÚö”/¿qíÐBUÕºÛQøZ½®BPàœ;tÙ!´ªT“¡Úšj7éˆAb‡ƒf× :ÛÎŒöâ Ð' þ`ìé¸"Z¤l‚i5æNFèÇpà”xíÉ—6Øwª Z!æp^`´A1LsÄ;t.¾4 TÊ«BÙ Í—©ß³ÄxNíd\«—ôòf2”ŠnÊŸITQ,dbv7Áv ÄpÍænDuª±&n0ƒjž§qÞ‚dß#7ämïÆeC)}Ñj2[ÛÀ|1B;g f¬éœµ%½É[W,g€õÔvΤPª//Wô ^ɵJ6Á¬¢Å´ÃQ&p ÞÚÑ:a&Ì¥bØNØ,êÄÛ÷šòjT´º£HyƒÒªR!;AØ*½›^g…¢Úޤ ×ž(}JŒð;å®ZWWF¤ª–huÕ? ŠBÕµÛ1whðó·•é×ñ–8â+ñ厴Ö½q'/{ßG3WVBsëZ'´ò3 /P‘}'¯zíˆá¾jÝÓÆÉ™n$yq,¼\ã¨ö’xœÊŒ º²¿”k–$+œ]-Pš&Å"yªÝDÔw:ë´þ5€ÀN­Ù„r7ú[ç–«ŽƒÑAö\FEéDصm¹vÈèûð[²Hý´–0Æ\ ×ñ¿,Pð½srÀ c9LúÿeîÅpYÉ…Z0÷ã.hÆëîÅã@©¤+ûuÙa26ò¸-Ó.û¤N¹– îêò¡ 9ƒ½2|eð:,à>npÙ,¤¶€å F-nž'Íà•P‘#ýÔUF,K`ôF÷=ög`œÍºùœQ-$;-ªûX‚Ë:ÁXŒ5ò¿™–œAØÝÀV.õFI‚£»4eò¡ ñ"¶äÌVÚï/Ü TGÕÚ\|øe¯è`v,*AÜ›üPˆœÎQ¤«‘õ³Ñ* Yd='Õâ1Iê ÑÛ€ñÂ÷[‚B$J¶…·Ê¢ð[’¿(ý*çÛ;ýEÄ! `ä¯YuO- ¹`ÂPú²Àe_ 'pÈ{(¶OúzaAï×ßžš… ‘fhõÚ"ï\F¿¿M‹I‚ä\Ü•¹—YuEGf׊6JE'ìX°†‘T ÂT»¡þà$w㮡rÆ%=zWS8¿è_á k}C€ ëÏå{¡Ñ¤£%Æœdñ9‰ksÀ`‹å†…9Ipä±,±4j\(N|ÃrÄ0B¥²Ú]hvÑÊù6r¾¸ºÇì&±¨œI9OŠˆUØÕÑkÁ[Ríðnf.¶žž¦v7ο-ÉÝO| Ø‹…ɽd×AÁ^ÿƒû¬qIrSk$NgÎÍ>ó‡„=í¼jÅí2%ôE¸cÜlæÑbü í )âs¼jÑ:ñ+aYã«áë6.vÄ:³óHïŸTô •‹Ú.øê耒Õ#è†rºÈÕįThFhW—Ð}áô…5RRž—&±¥pÅljØï*¾Ë*o—` ×a! íl/’5!‘tgôëwGH¨ Uá/t.3 ]ð æÕ>©Ç,äÓ€šx›4`C°}:Y-¤ÇÊж@NG2àZ‚¸wQ—ÉŒ¶¸±zq8R1Š’s‹:¿]‡ 4¦s*j)œºB¤F£[rÃp€fuÙÿ &;•ZF·áÞ´ñ8,­äÀ9(‰³WíÚ_†ãph¤ëƒû1ôµ*­þyt˜}(zaº¥OðÚÞS»ç»E;Ãåü•ézWï'I›³oùº†X)\štÆ6É™»‘¶¹u éÇÍlàÎò¡f<äýs­™SqÚ$ ŒÞtc¾3FÿDç*ØêøâÑWÊ'ΙjÝÜ_åtBùɇEEô0sáÀrËß:µn C¢§ƒ¬b8Óí€gM °©øj˯ª¯kò¹¤FQ.³_ÅŒùg|Y°˜ “f÷!äpN`µL›Á”ðqö‰XbÂFo»TvÄ:ÕöúaRЉFàg Ô~¨!7ßL~¥Æ¬ä“fw'›hÛkÈ#Ѽ¦ýK4Á®J¯ tçIn(çN%¸ëân´~@¡>p«„ ô‹8úp.r†Ú¸Ú8;ǘBm˜Ht5‹†¬éõÉÕØ˜„&1X«o ÷H"ˆX_F%““`ÏDÀ œÚ{t8mœf°@l²îœäf]C|ˆbQ9% î@y¦Œ–AðÊE* +³›ÑR[kê4ƒR3hIœx"£“W?ìu¡9×ã-ÜqÒR¼-à'“ÛŸ‘¸(f$Û‹‚üû_8öœ@B €Ï'vÞÑooœ‡Øã WâuÔ:{É/È1ÉõU…³S1Ú9š$o.Žã`ì`aÇ[è›s²/óžVp¶«›Vø›bûm¨º 9 I͘$JwÞL % In(ç’¨T_-eVrå¯ Âì]¹?Ãú¿Wl\7ÎËt42¹¶óÝÛðg$õbíQíûÑæÙãk+e,8Ëð¶€õ4VêÚ߯$k$xs¤kÊ/oÉðGóÃ|s療£â©ß<á‘r~¥’„SñÄ‹¤6Ù¾h¡,¨µïÛ~¥"Ì×IOä›üîå ¼°p—FŰÓüüL”WSÎ)ÿ¤b$êSÁOvR_ë¡B˜«&\œ†«n§ m†Ò_ôñ%ãú³zç3ui;UŸÿx84D Z«×sƒ°<»i£’ÉXrj„›r¡ÍEø}yIÄݹ\‹³«²Ð‡ši{¤Þèfµ„ù–È–m£kÊø_*ÚÙµaÈ®ÅT±¥â~˜m%¡®œÄ-Ÿ\7+JÅW¼ðófX\‡÷zá‘u窜çÜtùpÕÅ­c~>ƒ?IÚšZìõ®,îÕrËrÇm±m¾BXÏ_.¡~m)Ç“Z¬+‘ÑÚn©O•³Ÿ6@åòô‡ãŠ^$¼©’zç|ç$n£“!5ÎQ„µàµ¾c™.ÚŽféšv¿¥úåy‘ôÆ‹gÛ#vy}*oÁ'q­%è–G¹áªøH ´vryàé2º:sJâ|PËúNYïLÛ2!¥Î)z–LI·(XpÅ£ìw­Íž8f +tÜ]ÆÝj;¸ÿV=]9E“°Ùpž‡4®•·(×íAå»ÉùÛ õ(AíƒÃÒ•¨%ým·êßœÇmÊ…ŠÞlŒcYKÞN÷e>Ôvÿµ…ëMûïÒjÜ|ç¼™øƒt®å.¾í ÙÂH»&qŒ³pÕZO!ÃQ”T–ûö±Ñ›œppÃÙU¹ÜûaÆxë±I=Ò"2ñE4øy5X¸XÍãÕÆYÞyŽU’a£ÍI:ÈùÃÂ…üw{fá¼°òf,Œ;eBšsKb^o‰å4*~ÝÖ¾`…PÚž9N£ûÃ"ð'V2Á½d÷rö(7õúp¿äb¼®ÌMӪͯÏ@JÒÑ–½©ø¡G¨ºÕÒ©-Ôæ—^áv rÄ`’úöžœö–ºz'ß]ީײäjõ’W*>ÝîutW¥ÞS[Ã>m'iºSWÚ\Xyoi#÷æ7§A%½yK‰B²öôÚ\¾ ´®²£•$ÆÞh[ìEjveÍüZMöZÌ„ Ž€mQWÎ7‰ýD$b |_nG*j<>–v-3G,ê=è4dÚŒN¾ûÁ®HÈXÄà-ômØ¢e´h8=Ÿ¼Ÿ÷Ýb#ä/ÔóZ\x@¨Ó¹ßûp¯ÁÅû?ìiwþ3X}vQ£¼èàÛà½'k÷7å¡ü!³7î±s‘T0éîåd%¬.&\²ÞÙ‡y^+nW0aŒ.Ž=s ÄŒ6{E•] 4Ù÷ Ô’8­ÑØuä~Lã‡Eklp³ þC¡ŽQ¦  .äÀýuCÚLzNâˆç¢LÔ£rÙ¿}(IÝ_Z¥ï´-ä‡PH-‹W«…‹Õ„™4ZùnGúat—Úëè¦#ëHEo†1¸óÄùÆzN©x$Á¸=xÛnJ¼çcA’…´öÎrCþñ> 'Q9VÊV‹2µ)x8ٰت`ÚisZóöDØ“¤ ŸÐ‡{\Îl<ýBÜ6j%ýPÐfX´¨ö`[@!rºb_j2”ËĺYüØ]ÏIf¢%.§#.D-ñ“=°‰a­âF‘ -€ÊÂÓ¨«Wô¢÷ú¨±%šÝînªÔæ'fÅß¾sqö>œŠ:éè†jÕ›ï/@|1hj}TƒR›QKâTN£®,d¬3Ž#• ÖÔøžÀúfö»£ß="6Ž÷ºo-ip}Pù©\8[êMíQ%ý2ô ]Óøá¹ÉsÊx°oœ9‰Iãm ƒSëu-÷ Š:Ž>‰ÒS¨»ì„ۺݸû¹xxéÊØ¬˜êËÇx-±ÅùEÅp0ür`¡ÍèÏà;²žfJmMAÅX÷ÔX_g÷˜ðZvƒú¦æØÉèLâÕLE KjAx.T äZ\<û¬Ë°ñµ BÆÛ‚#C´ÜßÖ5ù§6£k¦¢feœ|îV¡<„L Žò\XksÆ3°.]©9ëkå[-“F®£*M8Qs`}-)é‹6#ñÈz:ŠÓü‡ÿoà™SÒ™æ1cvšp’ÀrCîDz®7ä¼ä‡OƒžÄ‰ 4u\9®eaÜǹ•$?®„dê}‹öVÚg•ñ#Eç[ÎAI‚1fÓ®ã0øÔ¨£fÿGý&dé#-Ø‚8/V/Pâ\–gž’Ü_ê‰N¥G k;v2øùú06rà•r°¹aÚ8Mú`ië]Öì¯áfNÈèfÝn‡åœzR…Š÷·Ì4íQøùäÌ¿$†ów¤\\*>‰°Ä[òNí0®‘—vÌôÏ C*´Ml±? ãþË•L7.!»$À8ÆjÏñÙ;x§ÕL\êå~LSÎ 8YñO’•7g%#{à %œ|ÈoÆ9¿%ü³äÜ© _èêûN{*Fö)Öàm &ͬp6z'q⮆-‰„œ»[œ{u;j ë‡iWZ„ã;—Óht+@);e]K+l[õ ‰¸2"¸™($ŽKâx~Ô¬=)«3Ûä…µsÙûEaG*¨ÑŒÖs•‘r«¼9ú¹fwå{=Ž^Š5ÉŸ0{¥NF,~Ÿ<>Ãù¿žÄ2(n§,UKÕó}ºõ÷k]¶FŠKÊv°VÜbqÏ\Œ%•8g¿Fj<ŽøÇj…ª¤æä§KÂ8Óê¥ÞÜ_Ž#n™$qq«£;¾_g»êr×XLqŽüsüyÅå¿¥+~M¸þIù V2®Ÿ©ÐâxŠõwAžŒÝ1ŒÕƒoÃÖ§S'9•–é‹”sh‹VÍ[‹ï‰•‰ã!œ ßÉ  ¡¢&Ú|=[:|SæÆyyÌó?#mÍî÷U9oªäR”5Ž5)Gej†L¾1rQ—ògГ·¥· ªNjiã$ qû*øà¾èÇ˾Ö³æiU¡^Ò—ûßéA"¾<žše%3¼´«¨Ù“ mÎB߆¸GÆX˜ž ÷hùV2f*¦KìU†’Ë›r¼'ïž2·›QBíñ?SüxVáµ5Üé]ˆÏ‹P_Xíuêë˜ÈÛ&d¸ófTö UÄ@S;jðÉ¥F±Q¶&ãÈž¾* .m¥Öv­ÏnÊÔ¶ªI\m†;«&%3.j$\ÈQ¹9¿›|ö®œÍ[®ÛålgÌMqKeàV›µsJ¦ÂÙðU%ÅTÅ·¤¡ñÚXç1ŸÄ‚i²Õ€,²ÔF›‰X,Ž;5 {~¥é”_8gFZu‰p6*Ûù·Ðe”[Üc WNŸwjI–¬¿¾(_ háE_h*gÜ…?äh áÃ2Qª+À¯¸XskI$§39pºPö2øð˜áhZb¡àB›séôÖ?ìþN /BÿÐðµN¦þF%w>ü –=Õ˜ä&ÝxèkÒxà|ËZ.£dNb¸ùÍÁ0¾×,Ç»­»1ðó1šñ“ä“”Œ‡è$°î„#3³¦ôhI–qf‘U?ü°Ötaϼj'ÜPº$ÎÃÝ2dƒÕœ$ˆ³±$e!—œJô8 0ûK2iH¾¡ù‹ïª6¬Õ`¢/9'²XÑê÷àžä—äRƪ\!ÔB}›õE™¯ýîtï=ç@•4‰€ÿq&ÌŸJ醘‘.Æoj~¿:doDÅ·Ý¡ÖéÿŒ•ø' Ú]ðÞTãÏ8g¥V‚’ÜYÎ0Ö»üPˆ7µk;í]]G'TuÜu_Ûˆ’ÒëÂÄJˆºS1}ÂQ‹z¡v"˜imQñB9CŠ!ž„v¶þz7âL ¿/Ètµ23˜+ªÙÐÁÏ 4ã‘ÑB9Y(3^ŸGœ‘7§Â…&+ëØŒïTGî³¶=‰Gêdx<0•óŒ=“ÇrC5z% ’3³(ì V°¯y…3o=ÿCßJ„œxs÷Ã@=óC€Ú,xŸ¹x®%å+à7ã]ÂKñ'*ï/¨Ø.$þ‡ðãÑfNOèbád5U®%(É}BBÊùžÀT†Êy³vwÑÔ*Ô;,Ö{°ÕL³»Íð2C-’3¸x~°p ì\B°Ÿ«£ßì G°„“±ÜÆnÂÖ ðLøÒ{PcÎ 0å˼€eìtXÈ"'Yà­öÖvó®}ŒÊ ’3Sâæó$‹Ü(¨Öƒ4ÄFÃN#o‚WVg÷¨ Æ‚1ÓÚ&Æyzh³Ài8í’Ê6$­2¨fÉèùÞsNŸd}ÂÑ‚HTáÛÌ'kÀ¹zCÎKôt´YJ޲Ê`é€WÝ«fs|@Âpô¹UÉY0 EÛX‡f¤œä†r†øNÉ­ëÍ¢š6úå ‹v)£-FÛ8u´³$AI‚×ÜÕPŸñ¡1ó#EÐÐv÷{î}dME!Y üE.ØA¹àÓ4uÞ²¨×`t¶Š&ï6tevÉŒ MX™º<3-NzB„‚°$ܼ„&Z°E_ ÄðKa“è\ö…µÆ$L—Edr^ò¡Êò«Eµ­2 ŒùÛïÇ|¿þÅÍ`ãy‘—ú°Mï‹ 7ÎU_“9¡k—„€X=@e†t"æÙ­RG¿FƼ% ‚•€—„ÌHi’x´Ò@5*3tõ˜¸x`V×BhÀ{|+bäÝ«ë\,"šf'Í®ÌP,Å]n´9ÎÍm°/4ÅìX¤ä8ÐʨՅuǨÆÓ¤3óIBEgn=+›ŸjÂôàÖ¢ ;s?î¢.-ÉBN%¸kðc»Ù(£¦OÞœÛr“*˜aUÂ9¼¯éö´=(å†Ë®‹[Џ0ðjÑN%xôŧ“’¦¥p’p>–ÝYàø(7ä®wÓóf2CüH@Ú¸ÞÍwNr·Uo$ä·+Ý•ó´¶F«ÏÊ‚12ºñÝ_f?Î’,ÓKÓq•ä-I`”fu²™YÅ)?—÷‰Z—EÅÔf|&\00¡,#¸ ߤF-íI‚£y’”Z²(hæB}M9’8”@_ÿ`äQ+w³ê5œ5œì¿H?EÒƒóÝ| Û–Aè3X}¤Î›/âŠ'Ë ãy(”ôÄ*»q‹«§íÔŽYn—J^Æâí®Gj;—$nß,â¿•ZR÷q5[†ø°<è:¨Œ´ÇOõ®Ü{æ\Òù¸&‚‹t‘µ6aCjdá¡döBµÍøZ NØ…¬uuH~QsjIq0&§‹¯þ2Ç«ôŸ‘е‹Õr†à¨ÓUÿÝê_T,°ÇTP„ÄBòHE'•L šÓi 9I ¶;a²Ä©«GjA´TÔ­¥ ‡Pˆ*cö‡Õ¶$N(…/³Ý¤kýeãr™AGì¬XmÛõHÓÿv©lÐ]ØcLeA°îc\nXG‡•áM¨óMÉâ8fþeó‚$7”ó&X-\¹‹ï=V¶¤EdÃyRy³ÖqêÙ¢{Wî_Ô$%c¦”<Ðý{ ÿ@g«"§2ã!Öâ|ì—ñìÇz»ms±l©]½” ø¹¦a£ÍH“ͲžšÀJÎoÖÓÙ³ä4Àòó4èº1߸{Õ˜ú jBlèÎ*í]Tí‰NÚ q«¢½8 /,õ(§Ú5y÷ý´³€m‡zw~ÿh’z* Ÿ Q±q‹4ªu±ôF½Z­<3mUàLîë ÃÆ0Ÿéa¬œ“Xà®Nzù… ZÀÉú4+¯äQ<ÇC#ͳ‹ï”l“(Y¬ZñææNž}R¼ è®ô˸«y±øFKJœýÜšYýO—àå9ãXŒú¢5!´8ZBGš±#ù캀3_‚ÖÚ¹/euá´ô [â<ŠNû9>ùѰ—_¶Xo xú¢Ã>%“ÍßIWÝ|ÃwURV»®¥ãH“¸X|§N@̇ $w–sYWGäæÇû30Iš:²£ŸŠ†”Ù]ïmñv[‘ªoj¸aS_úâÎÝäìñ[“Á×U_µ¥ï™¨vqÒèƒs³Å´ÚÒ3óÕÄ])uš2bVã&ZHGl”òª¹' el·…Wïæ<'aaYê,õÃIB¼Œ½?˜†MöÝï¸ëÍÎÉ\Òq"oªÖo. KĪ~RÎ>È_t±jÿ‡Ú;ͽî›6T…hÍ=Η›pÂW}Bzô9³oäFiø„Ò“V;8Ïúù‡0Z¥6OÇi(V…%%Ò qa‚.ÉÁxŸ{è: ‰…Ôh‘Í^“hž¥ ¡…¿‚O§[1/ÿÖ:³/œ€EL43© ”cj¬4qG»î,§YEÄM%EÁUHQÙÔ„hN–(h2ŒÞe%5ˆ³¡MpK³»‘ˆáN3 É"Æ7!‘!¦åW¡Ñ'ô$‡õUò¸p6ÀŠä,äT‹Ó¼Ù_Lk¶AL7*zWR8Rv±°Žî™þÆSn¦£æ^Ðr§É¨±P¿›UÅ´y”Ó©ØoÌ¿ cä£Éå·î3À†ü¢Í0f Ƥ蠉:ì{Å K¤m1«¼™xr€¼›ãøà|`·(¸X¢¨Ç|:mõp¤Þ%¿Fçv‚âÿ!»KD³[t÷cb³p"^?%N%ˆûá4«ãLírY¨Ð±(ÃW¹µ¶DP(¸Üü°vðVrTt'1V¥I²¢œNQ³ø @ó~hRÙ=>É]g;¼z­m'Y¼æ>ãâ™#œÍ*Ç,Ugמêî‡iõ1­Õú¯µötÐ •·IbOÿŸKÆqÅG*°²÷<ÞBW†„¯ðJzNèÚŠß”ý3ØB¥vçôKä—•0ü‚M©s6ŽWGšÇK-ñ’Úx#Ó-N–Âã 7ÛLK-)pUY³¦OºKôúŽQÙƒ…ÁœÊ/õ=]ï\4…6M¿DîÆ%¹ dˆÜ-Jö$êHv¹Àõ[CøÞ°¸ï2ľ‚ÊÛ/Ô\±£§0åôKä—•ß6ûvtXÈ"N6OúPÑFV IµÓ¥”Z&åqLTžÝëz5b™^’EB¬2ã¨í*7´"|Pj¢°—ÔÉ &t¯kö™0D+ùHù ± *ÚêßrÅg¦y¬CiC†S™1Ï tEÆ›S”©Ál °Qa Ø#÷N ãx@mäßlÐú|"`ÄõýJ{Zd÷ȺLî3Œ>ƒ"ÌÝŠöÜè/`nFUÑÁNÀeYhpK ñßÚÈeG² 7r:aŠÀx.ͰyÜê1ÕØ¥V«‡¤hÌÞ‰µ“Áè€÷Õý›D½ý·c¿NR×ú®W•Ù}¤ö5‰ÚŒÏ*[cº`v£$ðM%ÓÂrNì¹6Ë*QY„zÂôug9a‘ ÓJž½*k8.®‰Ç(ƒ äÂr”•Ääëk‘÷÷É´\ e°ð'-Xµáüö9ÙPøŸÉ°¿ Ô3?·úW;Ï« Û ü½þ®ÉEÜfÿ’u.Ø ³8^䬀ÅÖX† àö§«Ÿr%;sN«ûIˆ—_qìÄ¡+BÐ`Qk™c¼ª‚1‚ø´²+X>„Ó>ÄQä_LügüûxÞç|:\¯éyq‡³N”'KzUœ,)íB¢.Ó,”®Ž>Æ \oÓ›/s×G+Ñ_;”‰/ŽÓ±Yid¶å'N2£·¦—4Äîè9B2£Ú‘3|¶¸Þ†}(ªf›ìºu¾!8øfÈæKEï£oôྸ Ä 6•î”<Ê'AólS“üRÛäÚQnwúâ[ÌŠ _qWâ¤j2®·@-qi¥bÂìpW£µ,IµA¬OÜlƒ²Ö´%½°pð` #ŸÍrP®tÀZ=-«Åb,äÚ’ Õj4Îâ6“µ&Ÿžâ—\=Ý?5ç# Ú¤œx{d¢þÄ„L¹^“šSód?Z¹GFÖZ¾+ËÐÀb#ÿ/*MÏ/úE…ßÈz‹©ÿÚÇgöÞo-;:~ÿÂø-ÑÏ/ŒÛ¤¿&$p¨ÜW«rEU~wqÀ ©v®Z»„íÜ)RAËwÖ–·CÈ´COµø•vÖ‹•á4 $!E#r}å49æË±8à•]™ÓnÔU!æE"ݨ#.Vx×0ÞïbÞN©*ï[„j]”¦WTZ`½%[¥«&r­Õh‡žÖù¸Oò¯¡ßp]ð gøÊÿ,B}8жބkáçx2o¼Úžn7‡Å cŸ¼;Õcf¬&°R Qkbz¸|’c7€â±¶¸ï÷8Ný*s#šZЦEóqÚÐ;½® (Y~±ïÐ ;̸ùôaà+ì¦åì]150K7X±>¦°s€'Ô >¨ýšB »*Qš@Q1gù¦†}ûŸÆ!ÁÇóý@1_PF Gu4ë'Ä0 ccâó€{r§"_A…ë5àDúéæivù/é xzçr*%ÏÉwSÀ­B´¯«sIØ-óeDµù üô X¡¸FZZ? …ô× ]kk¤/ç¡ËËøìàÿŠNêÐvYà±MÛ‚Ñîje¶dM¶ Âˆ76¯^ðoX[×P.ÖŒZáÓÈ6nµÁ4'Ó ×nÐL¿]_ú`w ¥-—ë±°9JwÂ0Æ¿x523¬Ú ɤÁ~‡Å"@š ö%4]šÓÄ$«&$‚xs¨×¤¶h•ÿR£»€^cÅ ‘ ¾)§}‘tåÂT´Â©3 ¨ò-Š”þp0sk[$}ñ#ç– Ò'®ùCү춊E¥òv*kGsHãh5èÒ@w­…™BÍG#€´ÔC!£H¥Æ]I哳«5YPÀ÷7lfÂv„êÄ„ÒHVKw!i"Köð~[× D°»Ú€{U ¤‘#°ž@x"å æQ45×L@¦ýµ,¥€Ú)›Û!5@ÊÚvu»‰ðI†hÔì@þ /Á”>Ht!بØx&I_œV /öŒ¤RTêÁï6‹Ûä´»Z½|‘çU ®m ÅEÇ< Õ„x„C êRTíR‹Ê WNN%ŸT”·’?‹>>²Ä¿\¶Ä+$\/zêJªž…= #¥KÛCA€Õ•¢Ó8Õ¾oQàz(5>I Ý)œ”:$©}ÝQ¡£¬áZJ®T”\™Lë¡ ]«ä¾ NN9NÊÊÃᴫ׋Òw(¤¤c‹²«"ŠÏÈC¸‘’F¨¨–àʧ»"Ð`B‚WÖݨYOŠ凢»+ë W3›(Ýœ§ã¥Ò|Ýùæ™d5ïí´3æ{;Da? 2Æ}K€ó- ùFîšÌ.?ª˜‡×5PR)*c™­–W›—`µ¾‰"²8$×à€×ÞiwÅŽmåU2Ê‹ZŠPŒ T«Ÿ¤ôÍUéBI-æÅ'(ÀEßAàöaêU/þLä´ÞjÃN èTøcÔ!¢–ñ A!Á-j_,¢UÈ p‰^ñÈ»'ÌViÆ® ò]I±šÌ2¬ÐwhTZjS‹Oƒ\0NEreB7¨@ª!Ÿd¨y_dM‘¬hC~áuuhƒK”\©Œ‚í Ë•¡z„‰S‹ª Êý#$MðqEë3Ú†Cj¤C’Ú÷- +ÈT>jq; „K†œÈ©Q™ÈiWÞr#£’³5àg„Žb­Í3Bs³D§Ü”öàíâ"Z\ÚrJ¤²xŽêÀP”îJŠüîõ˜ +¶v}¨,žíž,¢$HVj|’“WÀ à˜nœÓîœr%£»)|ÈêTœnRˆäz-¯<ž†až×>9}„›a£ ¤²œ5—ï ç"*ÆäMwHQkA  V<—rSvR hZTß’s4¼EÁ[ÃE§fÀ'9yÚwèÕˆ+år^-ö±O¾ßL‚NnáÀ§Ú˜/»Â Úa Ã=I†wr ÇÌB‹$ª Ÿ"Õwþ¥N+»·ðVû î¿ ï…•oQ®Mé ”p:®Xr¾”¾sIJ"jÃæzR™ÈiW^c D ÃpB.Ü•R¼KmŠ[y4M¡M´Ôq¤„ö-|s!§z,¢ÒÍÁÕNã[|?Ãú0¯ °o*ã\F±¾*ä¾T±Mò:ÝdË¡[P¡âvr¤èdÅ~žåŽoçÎéáãlÀØ*”œÔÿ"“¢ŠéHŸˆFát,ìΡW81ö‹·ndÊ›CÕ¢{XôžBâ=(FØeõ< cdám(ÜÂN“c¾&c„Ƹ÷/s8ÌøÉâkñM–gCØk—“öåô‰EñCÛi Úô _7Õ«ú@?´Ð[H9¡ô5Þà+Qs"ÇŽÊšêÛ$¸62z»iÝ9æË‘juÄb4.3l¿y;Ù5$#«Q[ˆAgÆÝÆ'y;¹lªŸ)áʹ(jƒ¥«×Q ‘¯ ÂTGAÕå¢_“â*u;Ò·ô`IL(´¿ïû*"HÓ:Žfcýq8½\ ä•eŒa!opnÞ´‘Ú9—¢wŽ(V&Qk/føÊ¡x‡~cŠÅ8w8íFظJ8éQÆ'9®ÊWÀ¸½j ,@Ï´œª¶ y›ÅT”v*ªï[&`$pXºb†ûéW‚ü!é‹WN«r'‘0ü}œ¨„kè1ʹ^F*¼ =GùŠI0ÝÃaεi_ìºd!'|ÝÎIªVÛ•·Ú0:–C­–ˆÚ`ò¢¢Döð¹vœê*ò‹¨¦}–;×BÕÍË}˜žÐ¬ÅFWLQtû¨¸¢£‰ÒÝ1訖S®tjÝ_‚~´4R†Äûh\îëzåD€È»ª˜ß!¤Ög™Ð.¦í VIuÀ ¢sΞ‰Q€:”]“÷âÈqš¥Bá‰%ÚpµX\;mÔÇW,©1Îe®×¤¶ˆ7çÒªïP¾OËzù C>08öÝÉ©«Â!sòIIñf‰T{ÎV‚ì+@;Ø{+ „*Õ:AºaSÍ!®\‡×6Ša#®‡"%Í÷{Š“WvЦEuæJH–’M’j‡T\}ž$å¨A\.á ÕÕ¨«ær:\ …¶s‘¥é#bRy˜Ó­ŸÎð+Š"„ƒ^ ?ÚyÁÅ`…q2KEµCDí†üA¤ñ7hQËi4µ¯¢ö"CÏ„œÒòø$%¼TMDEå¤Ð‹ÒwàÚ;ø¥9õP.(b-ÀÒ'Ÿ:¨@[8Tùrõ=ék4ú¸^mo† )˜-&D©:z sr’¶k«Æ5_dˆwàŠ–©’3DŸ|Ž3ôóþPÃùš Wø#/ BTK*jq½XÑ °òá0 ê6ìvªµï†¸#¤äׄÀEu^ó±;jÒ'®JØ4@¾ˆr„‰”TYºj»IÌ—×IŒÐ¶"öÙ…¬…:l0½XÄ ¡`bŸŒ)KT°JÙÒÊ]ާ =ñ¹$šRÅᎄlº„Æ u€ ú±Î-£n%|œNd”?€ÕMmÅ›úÎÖ˜èó²:;“ª¸v(ÃÞÉ$ˆCCÞA˜÷¿ylÿ΃%ÀÒˆ$p"µ” ''[{&¾ƒŠt(Þ°¢6â® ô£–¥15ÜÔbûáÅS‘ÈÔRN»Aµú¶¸>0hÂ(Ÿ]µVÝdkj\>=nî\p=ÀG@UÝ]Hµ>ô7¨¿‰ô#TƒñíÃbv8ÄéÀ÷"?ñi^ï@ÕCµÍij)š&S+ŰÚ7 Êo˜Á*hÅžÑÖh:œvãàCÒ8›Z*ª¨c  ù+„Ôî%‡¦(&¡D£‹8æÆe`ÇÛ°}(bNNF)W2ÄDÚ7 Žô€´)àeâ6Šã˜x •1_¦ß @ÅdÆÂ銱j à‹LúP q¬R Y¼E*˜4¨«bÖJ|Žƒ5NÈ—ýRMò­6šp=Œ¤`ñ*æËÀÊm +¶j` /ÆMpÅÚÊ­óar¡2¡±LBÃÎûŒcÛ0¶v2ƒ¦±wƒœ1á´;ÕÃhö#ÖÇõ1¡b€]P‘]WÄ—<,ÅÅôEx ÖœcsÂJ &Ø_ ÷aq˜;ë`SRÄŒ¤?kiLçÜòå"¦É´¨Z£ùý†ìcÈùS.„ÀMÈ5@˜·!ŸžßÑ„ö»¤X´qDè~©}Qt(ÝÛ‹s=Œ¬TBŠFÈRj h¼½ß]íŽEN§ %>×ò¾*®¶B|áéýëݯ{¥?h;ÕRQå´;T…Y"|ìúP@1Ww08wð nŒàû­Vȇww¶ðq,8´*/š½ìcnGzÐ[îëõ>0y 7u©@¾Ã]0æ+lCÒHKáò¼¤Vlf)a‹Q6µîÙØ ÁbšõP‹ ç®ß:9ÔÃ7‘¾ìð-à =oõ-³á%DÉ´¸¢WE Õ—À3AÈGrc¿û»óhbŒç Ò¿Cúà…lì=\ƒ¢_ÇéT†ÕÛ”]Fó¦\‘)}X›i¯ÿï ãð+áF`B¤4×éä´ÝæíyçmâM -LU®£yÑÄ 8j02?$D¬£ÒÎÍüÔ…1GUáv,âP=YòÞ•ðœ]ź43*]ļUÐ(=¼^8ý£üC‡1ÀkøWH;ªcø¯_~½‚DŒÇ H2·@p/ ÔG>¾Š«0– ´¡5–¶EÝ©Myœx­h.‹,˜ïªp×Ñ)[§c¢¼PD“ãThhµãɤți½$˜r"§:»ýö´áCöB¦ Â&!ôP`¼ …-¨M„`SmdÊ99}iÌž‚l}(IÔrnX¬ß¿f¦ Þ‚Ãí!J‰€Éçq¼(B)™P1à´/’®\L¦?V Ð>æz¸Jwš™B&/1ŒP? ¯œ8LÚŒ>Ù«WndèáÍ·#WrÌ¥)²³tƒ5L_V„œ€Àû…k@ Ú-‚AÊ*¶Mõœ´)Ô_‰ã?ÀȆãAŒT†`’šSiddÞeÁ„Ý´\P¼^%šP•î’”¶P\¹6ѶÕŽ™ƒÞê©€E'¶  „´+xEáDû„: k N¶ò”›FðFTÔ1Å.$|±v²tG+g×z4rÀÚPªËxÄ£³òéùãÿMîæÈìGsÃ+ì‰F§î¦mçUð”Ï6½~ôy‚ä<«S máê?…é£,àŸ.¾qLÝeÇ Ýé ª6Ä(¤x„ÓH¬*®{>Â8ûXŽ­÷創ûøC‹ °•`›âw‡'T£îj\â7üà U„X†ÑÑ ©-b°c‰%‚ø¾l_DåØ`ÇhüïfÃKŒp×@1q³`QÁÕÍýÒ»0EÐè‘ðº“ÆîM–*I) )0œvè8I¥ pIZ[0‘ M!ðEjß·üLx;©¬™cÏŒ¿Ã{޽CÓé½aÞ,¡)‰ËE©šf¨š°”¢JèÌÆIÍnÏèÝuDCËg@à–Æ˜ä® w?`Œ11Ué 4«º"‰jË> ÐÔbµ‚(š&W4 ,ªèÕ`6ÝŽìMÌ èn’ôÅi•ðŒóŠz ¯MЏä)î[„E­žŒük >eoáF8û]n¾ëÃO‹ãÂütj›üŒw§F‹âDÎÉ7n³=Hz¹ë@¼Þô} ;G+xÅÝ/„ÝÖRl®¼9ääT/PŽøVUrt ²Hº3~x`zܸ:çýÓ—Sòof}&çBÿòå­2db„w¨ ¶Z€˜9‡:CX«1×kRsjÝ里ÄCWHN”¬F±Â¶ˆL9'£\fÒ]‚L¤EØsÜóqáìD¤RTšÉ7ÛdùMÅ€±Œ· ÓFO§?œödùS‚púûLÝ«íé}Ñ_Oú_ÿo»¾¬Üy&þgzXXËûâÕ'‡4¹:Q1êªÞ>Fìãž«À•ÉW<ž¿¨´ªù?Ùêßä»pë½Ú¡†Oø…ñág7¶mÇP‚)ÒUÇ‚µQ G(× ¾ºœ×'_Tiõ ã?줂'òÓH’P‡ó¢²¼mOÃÝ 5ä«I#‘’A qÒªÝÈ5:ƒ®¹–À&›j3á “JwÖÃH¼ hYxž¤j´ÄÿQË:¯#ßԞȵ-G½Ãç-˜\¦‰ ÚÎÉpý\ÁpiÔ…&ƒ¼ÙBÁ²³È›¤~B;x›¹sqw¥z„WȲœHüãø¦²|o5wõ¶¼8+vƒü9¸ykT?9í¼à¾p /šçãÓl6•Í‘Ÿú™î}q mú¥Rš{,G’KÆ£ò,ÐÃ#ŸÚfÛo*åÞíiÔ‘€Oô¶ð«´"ô7…£§¬·¼5‚£Ç’õá£ÖGß@ð [ìôÓŽo{ºÿgüžµü31§™ˆÇÃ/¯²Ow­6¸-Èolz¼Mjá± ÚöÚþ×÷ì[„âD¹.ôuÖÃùجÿsWlõîŒå (êb‡ç꛹{¹\Æèdå'LJdÄFU’Jà“QŠ{™È¤"]ÕEøÄà :KªGZ`à £ ”=TÎ Õé O ¯ûÐ/K Øï*ÌÉZšF1H…4™Š¶Å¯|ŸJ''±¢ OµÏiâj7Ô–ŽTצÞEÍ ¤«=0]¥o®‡Ã¥Ð´N†áÚÆÈ?G®>ñ]5EnÔk0a'(Žz N;ÔWTÃPîïk´tªª{54ª®œ’–e*+êæöÔ&nÝh|G`‰”bW(&øœ!…¶â$Ò'—2™Es¾ïzRt(ŒÞœ&Í ¯Â³Kl“w£U‰9ý,š] …·ãjëÃp5:ûL®«Æ'sjÆ%G£Ê‘XÏ9=û”áâÕ]ýäfˆ½Ô?NÙé‹~‡2‘(:®V±S;–ó¾LlSÀ“@P€óv€¿ÎƒMׯ==éOŸžצ­ë‹_鮂ƒñ + ¯Ø‚PÉ÷+L²“ÁåéЮW²ŠpRÿ‡Þè…†C9™p½œŠÆä‡*¢’L¸uî“ c0H:,–P\‘nøCŽ‚ _2šðu_Fв ïø@N³ÑÙÑŒäÍUïꚨ‚­Î©ËI¦ìC/t?¿öÎÈH$&öÆïÊ¢Ë ÃrØ&y .þÁIp¨Û}¥" :$‹ŠÖ´Îk¸‹µ ò ¡bb` ™Ì[0OÏ“ÜÇòÓÈ‹iËi‡åø\—¿=¸ËYYÿ¸RtâÖqÊ+(Ë - pù4ýÚ&úO*»Û'þXþ:Yº_Js™ÅJ_ÎLñX½Ú_È©|A´ë[ÂVÂ"™H“øgñ}¦œšA1mäÀÞ‰ÏÍQº;¹,²àjS"+d¼+²XžAT ‰¸õåèvºy–ùŽŠý«S µ!AyC \P ˆÚkšä€Àº*'|B3àÍ4y·Ö@ÂS/ƒËÍâÕÊv Ø±)þçFÔ±=0€¿![ð†6³eªt',enå· †7š0x=Kñ`xB¼©$HA³áṏ&àb‹9˜Ð^ÏôÝbßj)ª2F ”Iù6@·ïœ88ЄÖ4x‹‰tor‡±/ž M˜iAÄŠ ¤6ª %ˤ¢ÒÇäöw†wÀ9üºf²ëËØYmœá $dò Å(šÚ¡Ÿª/wNczŸž§/ÿ™Ÿ³'?¢Å´º6ÞÎ'ό暓S!âv«’.£Ï‘¡ÕDÍèZöa-j҆£“×ëÁmqë“ýrÏòi²¬´´:h®ùž!%¬\]·ƒ8$Ȧ–ë¥`]ºC â¯ê Þ § ¡’q®¨ÍTëSÒ¨LîˆùL§ê”'É"n}92Cu‡'å ½ ØÈÝ‹ôO{–F×^Þ¦w…t?*—ú?Žô‡K“ïúÀ•sÿzX`T´§ÇÀ®JÅD¨V ž:(d«ÅãCOCïªYKøDÙÔ–“†04dšÊŒ$‹zõ„:xi¢¤RL=y5$TëtpƒØzÃî9WY¢64U*ªy;îKµC>j©¨rrÝ8ÖÅt&n‹‚,Æp¯‹Ц ˜an]M˜÷-Ðצp§h¼¹Y$}1æq½myÅBM•·SÍ´í0ñ«ñî âÙ7ŠDÅ€¥;a,Îû¢•Q›‘ðI†Z¨çxЯ\>ÇuQ|qEðŸðp h( dRLð §½Dm‡ŒY¾~¿•¸jì(Ãã?ಜÁçXDe1oOòד¾|E¼ p*ûäèšï Äç¿'!íõR©j´!!ÂDr-ª˜‡tÅœUǘ#Ãù„Å¥>Ðw@:EØÏ‡\ @-Fù~«ÅÞ¬dݾ1@sþ ¹+˜HEõMàÉ"Qö DÊMSË è×rÍiªØÿ ¤O\‰¼Ű¼Íùäm¨sÁŒ­@°EÓâŠßoÈAChÞ@úÄ‘§Ü4øQËb.ö=ÇÝ£ƒçG‚¶2Ö@[„–ÜAk˵’[ §Z*ªœv!¨xUáS#‰¢iqí èÇqWТÆûÑ@ãs{péÛás€>Go4 ‡<1j¡ ôo¬éÀ“R"^!AñÀI%ÓâJÑ'mÎÝ ©bbeÞ䢂Æ[`ôQ`íY k¤\\ T&>Ëg?å[ÔÒaÚ fñ=Er-ªhÓ@º"V¤Ÿ¤¤Eß7…\jHmà¿Z¿¹ vj‹BBžç·‘æ }"¶8B®Ñ¡8XJ7yeÝ¿`HmèáÈi‡~1êKhdR†Rj’?$¬eœ´0ã?ÇÀÛðöW#„Û+iO!ЙmU拊6”3Ìy_#áC­ÿÓjzŽKÀù#ˆ÷c(Ÿ¹ª>gk8÷»å†‘xÓÁ>ÕRQE[¢¢ö’gÉ> U½5inQÐTH0§Ú‹ÝõPŠùR°í¾ˆ=I¨)´üQÀh¼ÝŸz4N˜k¥aÇösG]¨}ü¿‚ Á·,ktŠtÜ]{ëÊéJDµBqìœÍ©z èŸ#³i…J¨È/»áP"8o'µEG ,Ð-|`Ïutä´ƒN(¿wâŒiUèlUÅ ÍHÿ/˜EÓ⺨+àì¸+hÑt&àÖé íTvs)š&W*JK¹^ŠèÆ@º¢«÷a‚fFô³ÃøçHÜR¢¢ÊÉò4ëÙ!¹cÓc³ µQ™ÐAmؓԢ3·jSôi¨tÁ\#ªDebÞNTrî Ú ýc÷7]„-|¢twÐìÄÏw}à3Žåâ.Îøàì®–¥ Y±¤;^ gþ(x¿;/è;I°X‡œ°M-§ÈÛÌX®tì1|ŽQ⊞?01Ôc•Öò#|>ðqøPQµ~?øÎ"¤‚m°ãjÒ~…bHet KÑ´¨¢U銳Rû¾EAø´ž«7ÑZkÂw#{(t¨µ~w(V°Ñ®Z5³Q4-®i’Œm,·O|Æ-ê½À½ñêEOÆ£±—‹Å´Ü+$w|[_Î3ѧ_cå|ÁĬšwûÊ%)EˆýZãbN»:cÏ1¢ZšŸääìnÀù;=§œê~()“ hÈIºq×9˜«« Iu3áz9ýhÞ+1O[aœêÒŽ[ÏO•î„Õ«Y—isµ¾íb±¶mul“¼®Å,˜áx¹ßùsç‘QI—“žçâÞÁ=wh!ë~ü=L‡ñ†N¢«?Yý"“µ«¹À1dz ÞÎa#LœZT­Åø¾º“‰ % ®!(»z5ÛIÍv˜tè©–’iQE]@SKÇàAø¨¥âJQ ƒ5ðJø 8q@¡á>Á‹±w)!ÏIúâÕœ*oLI¯jŠÅª}ãx鈎•å\´2ä™R¢Q.M©›Pf›ZÌÐqWXCjòE&/LX1‡âìJÉg醷a-LO·9ñI†&ï‡Éô1LPsE@pÂ9€Š+†døCŽÒ|< Í~è§!ýn‡IÌ»z¸²¡ì³ø†¡¨R 6üƒo¤6¼Ä(B¬ôPÛ ¨®*tª¥äZ'p$ãâJÑÉj{ƒ§7gË# Æä€"sºÂNÐHÉ´¸j©Í·3=Ë‹*£+$lŽŠEå;tÆ®*32Ï~Øá·)6E/`éNhÁy_´2êa4C:]0‹© „¥«¢¨®3fI³l|ª–˜À&‚ÝÕ¾‚ˆ™Õ™QÜŒ08PËÖÌ©–Š*KWÀ€÷ ^\Þ/+¡èƒë )*äPœ¢fn¡’BÛáÔZ°óëE8rI·U;“NÌȸ®ÍzH±ßqP4-®+¢_v¥;b!¸ƒ=Ý“vÎ¥9÷ X--:î¼Klþ Ô#Ç •—»RžqRð1Èþ°üå\êd!…Fƒâ£ky.;Û1[kØ6e‚=¨˜¢ ܪCWPñUˆ+€z¨Q4-ªÞnC];Å_f‹É´©ˆ%lÜ¡œvhþâöóKyœã Kax/˜×íÈŸêÎ ÏPW€l§ZJC#L¤ÝÉ.û©Ð]@+„²&$¢bÄ?²†píðµÇ3À"ËßûçC°d˜Km‡|Ô^!t@˜Ì#µQEº*¶GPQÁ{_%®Â0U¥;ÍŠxé䩨›MKW`q@ÀYM‹ªZÜ›è9õ°™ù‘Ñ~øÁÁª ¥‚Ìz¨¥¢ÊÒ 0 " †ÔFªâŒb‚ô‰^¿á<Ôȵ¸v›@óåzo‡ –÷E3Cu?LPAÙŠ ,ÞÎä¯pšpHNº\¾H”È) •‚Ó]¹Ó Æ6ŒZœÚà7Ì‹D˜¢3òõAúü¬HŸìXÚ_ö.¿±¤A\¨5yå»Vé“OVÕºz»HrY÷ æEÅ5Ò~ãÞV9Qº;‹ f"ü©¸jt'“hZTQŠ2ì0áE°‡²9ÿÐd_;îö‰âÅâM‹êlÓ4¬Ç„Glµ§1ÛDn?œÝ¼‘ Š‹éwèJ£G€úê´a/˜×Eï[Q¢tw$¤8™juÎ÷‘ïNšiöòãNÍ9[…ÙNÌÔ¶cÍ1\a'*ªXMŽ;G|‡®¤òQ»Æ´Ç<%ÍÅ»MWô™vµ8›iøTKryåoèV§ZµTTY,Œ("Ò`¶CÅb£4çhT\»ŸœŒê1AúDïgˆã&^ UºF-±×º+Œÿí(L€S-‘iQ}ߢÀiŸ ]ñפAü{ð¼‚lA"‡´x…"jÃN öS;æä`å”L‹ªØÌɽ#ÔC‡¶z-ÌôÉÿ(T“ï\,©ñEJß¡uÈÛÔRQåDÍM–°GW¤¶‰·æ]j;¤©¥¤Š™H7¬‡Ã¥€ä9iFp6B‘Ö­ø<’Ñn€w1ŠT\­Æa »(5¥û3ªé"Ôœ(ÝÀÏèšBQ»…j>ES+ÁŽ£(“ú­ñfZUqçx@¿ÒÒâ 1Þ×P‚ÙÈ©¶C lCÉ~…!"j±Ô”vЦEõ}‹CÚyá]•1Ç]Ç&E7AÒÔRq½Br´ ‹´C-ªßòýksÄ¥Ó64F&Õû‚îd’†¾…÷Ðh!gÄ÷Çw/–°Ù“WœóíÖ !§Q JcœBjÃkÒn€%j€…GþôÅ+'Ú9íÊXÜ@/m$¨JwJTuZ9æ„`njÝÕŸÊ郙&šŽ.‡²&T 0ÅeuOµ–‡Ñ;H7¬‡‚ª¨4 7˜í€Ú9Ô†Kwù©¸¥êŒ™cº¸ZeŒÐHK«}\Õ¹‘2^~AÝ$†­Go¦Q‚Z o§Z*ªï°‘ÒLÀ‚Tâ…(Àן+ˆÔŽ€Ò+ÿcp×C)ª¼CÁœ¬".Ì(ân%N’¾8­ö^±Õ)«QšTÌÉòñ™-Åqzbéªè@iWµñwµ•è²"‰T\m{†‹¶óv˜thÜɵNØ2"ÿú… ·©=L°<qeÈ0z`4ÆU0EJÅ`Ý"s¿;¥}‘Ìh=ŒfÈ^îÍÃl?¡ÑÀÏG Eíê+ä£ÃqÅÌŒ1.w(:­d¬”åì”îŽBÓZ÷v˜˜_Õ’ŠÇâ*ÜøWðFH%ºJ7tĶf\TÙó8ÍAúÄGB=&HŸ¸ê«\!)iàÛúf;ÕÆ¾a$î$E*¦m(æB0E­ëû– >2¼>N®(³Tõ0ñäÚL´ü‡LPQ«Á¸¨b¯uÌyaiŠ£yšgü‰®ü•Âð –ØX$ü‚y ¹F‡ 26è ë ”×…CÅ¡‰ÒÝ#3n¦V&ˆÇhjÖ–1¿ßj©¨²tdîfq=&¬L!×¢àé*M-Uw˜Šë"NV(dêeyMþCj_,¢„‚„O+-&uËVÁzøX2Š€”+ôÓQ@4 ZSxºÍš+–ž9^ºb³_t МÑnM¹Ü\òe“9iø)Ì!GµdjUó©–Š«%|ÔZÜ7;u:¤ª×Ô²hÔ¶ F¾òãRT‘§(V„üÏöî “¡O©,…J‚¹¨JjIT-¯©uÕ ¤+ ©Âm0–ß|Š~¶ DäÞHSKÑ´¨rµbŒ[‰ORêcŽßƒ¿AúÉ¿Nò•Ý¡t%.QAØÓó,V(Xì®` (®Œ ãh5~7£¬yï ¢ á$#¼âLX1 à×e1\c±‰t(¤’넵!EÏòÅæ¿m­œ_,þˆ-J¼B‚ðå ¥#D'Šœ<”ÄIœöÉEI8’ÓG¡år)ÝÜßÁ<t ¿_0/œ‚(šº_T±\÷ Ò ë1á[•4æ áÞÎaãŽ^Þoµ¸Bd@EqË’ Eu¨¸VŒÊqŸ ݰ B®Å¡NpâôäÝi5çz…¤‡Ù©¸v…Ñ9@Ê–.*ÞÙ5Ìæ£m¨µòmÃÚšñŽQæß¿p„T¿CPTI*‚Zª¢iWÐx¢Ák˜ Þˆ°sƒò?®T”î×Kºa=TL4þf‹³%b‰ƒ„ÈÁ#|àÂÀA³bN»EKÞNƒÜxç¨tGרê á<³Ci$û¢Ž±€´ £RÍö5þ_T HQ•‚%n¢ÖÙÒ HAø4ò",FP ·4CŽZÂ7WT~ß2$ UU}ü{"b~ýIa…FJÿ&„è‹j1µ®ðŸ›Ú$ûêÞÆØÉ¤ ݦpmN )0‚l ÝXhflŠñœ;Uó¹^“Ú"ÞœMêN?«ñÖ»G‹Šáì|Uœ¾D-È鎅Cz2l®'á©ÞÆ(7jF~â¶<¯9•ëá(>JÆÂÂË+ÀzwÆbšžÏ<¿ØŸÐ©þ¦Y„c盎m‘'øï¨K¸Â•FÛ8^¼õ*µ×ÛǺçºT4§ƒüÄ,¡GÚ­L#¤ÅÛ‘³é˭׃ۓŸ-üГËÃá´O¯+]Ñ¥9Xž“-Ç—‡cl Ÿ#ìù®ædá¶Ú,$¼ó,ÅÓpçpk Îú㪳žæŸ01‹ï¸§K3yßb„ Ø Š€CrÇs'N;óT»B2Ñéç±æR¸)µ’»&TB£Œx›äÒ§Ãõ2~RsÂjŒã?Àl*xƒ`~®Í ‘Ãñà¸8"òºk£2(RTI&Ò ’µwEÐFP$ð›aíg³<nÇÁ·±PÔ9z,žô‘ÐV•ðËL3³…²êÝ×Ÿëø¹þý ‚Ø,áqm¨¥P«#o‹‚8ûê0¯Z€êËŒéÒø?U¾°àÞ&‘7¼9 ›Oá: äÄÈm0Šx(E0%*œv.ö:ÐÄÒþ²ô§‡õ?—àz@ÅÛµ Þá¬1ÞFÆ­JÀ81Œûï¼ö0Lä\©’£G³®‹ lv¥Jº¹Âa骄Òñcü©RC• LØÕ¡ÑêúØÎ)@w!h¶œBjºÿ{¬"5ù.ɕʤ‰ÉçøÃÌ’+]¹9—‹æÌ'CZÞrþʘþÌF&ï[ŒÐ¡"¦c\Tqˆ$}±-TÁz‘à?©hˆj`±b!‹D* ĉ”V:Ç€ªØW—µ\/‡67Gß—[ÑZakf¹C ú¥p#P$¼ taBÌ£Ÿ²„°X†dXX‰ŠÉN»‘P­@VKÅW%œïz8Ç|9¢®â›W†ïòîæìŒŽÈQø\Œ=kzÝ Û‘;ØñÁvžîüèªò°Xç€f+/lmo òÇ‘nîM(hžcЭ$_Æd•¯d²y†ø=©Ý‘&{Ô7(÷hQ1ô¶ð’ˆ1!Ý,v&GìLÊTZ#%¼EÄà¡6«Ñ})ä-§í@ ãདÅ#ÆnÔV°­>òô×½¦S¨z‘ôºpÏÞÌã8!È¥[ÝOµáûƒ£ó6|qDw=ÊÐËòîúHõ¥ÚLìȃ¾FšQaͳ9—§ÂZC= y‡ o@ÚwÎJ…ˆað. ´qs i¢o?Ëáz¹OqM*NœvÇ\a7tï®”îŽÕÝ-OæïH 9ycX Þá.ÀÒp’>±^ ÛÙmeÿ£ÇšEØä=ßX/_è3g×ç„Ü¥â˜ËåØ êáp94ƒ5àÙµ˜ÎîðkŒP}£;…‚Aføj?]ƒ8ùX>“w 2¹9ùšðP \ȨpH¥OÄ*2Ç¢TŠ‘Àõ£6|NÞâúݼåxݯ°‡Ô-*¡@¨­ÒÃð¯ñ¢AN¾r3LTË*Vìho—Ux\Ñt¾rrå°p[dr³8Zv»áT¢ö3·r먇.^̵Ú¡ÂéTH ø`ü—A˜D uBcÍ’ælÉ¥»c›ìmGG_„î’¢¸âHaŒZÖL#*;™HÅs{ãMÏ>Û ¿ì€e,ä€îÕiÄxAêã´])mÝ š6WéN8%S§@²ôÊÕ±ñæøC :n~±žô+˜èÀ¯³Ý2б/‚ÎGB½¨ÛÁV«¶ƒp3ñ r/æÍ5È"éι~$$\Û™¡/®••_ êåÐ|ýÃÉÛQòEît$9zë9R±VüúÜò§\¹>œ•&yÿËAþzÒ~mËñøEÞ=oqñ*Àâw&½@¹Ê±$ÜõYºêlJ&ðIœÀƒºZ+ùŒÿ¸äö9¨ðæppjQ/©»™™ ]ÑOV-\­=lÁP*N¼- òdéO3\~j§Ñ'º·öñå~ýÉÍeyk˜~lùîÈÈ›-qd¥I¼-ôÙ¸#V· [®vOÎè‡ÄÔÕr#ˆÏD‡¼öŧ#ýëËÌwN§ OöJ¹¢££¶ÒE^ ‰]SvªM ‘2&V‹C‚·DFô5ðÒßzÐJ~2'5d¡‘¡›Šj2É•4¯idʛDzŽ/aÆj3JšŸ«+Gí‹Ûe£b² z §„õ°Hº±ê¡ÓˆX`1v°—”}á¦L"œF0k¬B8špëFâ€5 Ldš¡'˜ÈÁUšÙöäN.—aæhtkˆ`ßA¶œsn€#|Ÿ âz¢ôå`Ðî–æyÖªe^b¯…þî>nÎÁ–bÊ ƒŸîS älqÀ„ È £‚¡S[$ÀF&æÚVL(dÊP*ÛBò ç9%_\b%ˆi#2A'oתڼüG#Õ„«êG( 8–¥„éØjüØÁ¦8.©eKWõuUrPù6¡bð¾e‘ôÅ«*¾Ž2iæÈJÀK™±›õMŽ  NÒ º‚¨ØQR L*BûƒÊDÞbý›óÀ®„ m Ù• V+|…aG 046´Êa8†ë1BnV¡!Òu1¶Ü"…¤ÀÛP*j±]â™(¬êåü)ë£âÁas ¢d AÏLƒùœ8@ÔËh}·°”¢Jp=\¥;ÙqÿPxÈ‹+A µæäÕï-È1.˜ Õ3Â'ô!&ì7Òßo!WBÑ~¨¥¢ÊiW@³í! _`ÂvB·p`¬¸!5ë}‹«t'Ÿ›`yê”HŸ˜fœOBW°HћߡD*^0!Un¤XþsƒRT‹ÝBi7À3X©¨Ž)üH½ÂïûÞrPª>Æg }âª-Húâ•ãÑñ£uóyåD€-'(ˆI­ |j¤~²e¢£ƒÇŸ•bT(D¥»¬~€ š†¬žL,ùn H‰(šÌª”T 䱸q’­‡«t§Y|é žoI3#[BÍh3ý&Š 9+ b x_·kƒCj D¶JÅDÖG¿G½l(QߊÑò-·ÆÁ’õ)tƒ(Ô¶ˆÊ“¥?½ôǹò³žï2ËóºîWs‹«„'ãEozÝ cä€Õƹ^‹h²·ínŸø§õ?I¾ŠðÎRÃäý®&VýOøÖ¡ìaRRã` X|“¤/®†TÛ"*O–þôÐÓtž™6ãð^Ýóž¿(qQ(1ÄÙë×ø§B¼§E˜º;Òÿ)Áõ‡å5ä15“˜/#Þê5ÉÓü¦‘{jóÈÕágh ɽ}ÿq´†&µRÔ¤á[û¦•AI)vôÂÉMÀ&uО®ã\ ‚2!X>UÛ1#ªˆ îûýs ¯ÿ0ÌKÏL:ÿá4lÞ†þAÆ(?¿ç›ÜYÏ:Ap\àªTTü|ðÄÉÓ¼Œq1ʰÑõÉ%ˆ¹w }âlâ„EA„!µ¯œŒ4Œ/åÜŒnQÀB]!)•êÜ 1Êåí–Ÿ¸èèÀoñy¸·²ð¦Í8WR I»ê?Ì Ê›C½@e€Œ̸ À…dP̨á3¥ûÍoRÈ^àÓ$½Š;p?¨5›Äžî,ŒX/¼Mò@éîTT?P#ì [vt{Ž6%Øû?ÅDÄÜ%ª¥õ%#š-j±[+ZžxÞ‡HK0`ÚH QHµx CHíÅÁ@ûڃ¾„\£CqhVÓ~Ìì9”8ÁHË_I5™ÄÛª1ö)pÚµF×ÐÈ‘'üXÕIØyÓx=\G¹¡ ùTKE•=<:tð˜ŠRRKbZ\/[þù“2 >©j9ké-àg Ç P] Ž¿€LKø(í%Ôjx×Qqx„@öIȇÔûÇs¶BjgŸ8ÊuÕ4#Å„_ 5_„æ÷p izxgÿ˜+Wg’IQ)ã`\ R?í®ÒæOµ¯°Q4-ªŒTÃÝ ¤O\™B®8=w§8ÔºHfq3à“œÐ¤ó¾Húâ•ãQ¼ëP´-˜-{c¶-]!%À6 e™#[#¨P4-ªhÆ@ºbþv}±ˆóÆ‘œc¾±}ºÃõpZaŒÚ¸–É9í÷,÷Ùœ»‚J%“(p`!|²¤™Ó´X÷‹¶œ8ÒÄz-DMGDgÜåsæmQéÓ«×ÄrÄÄmLĉŒ šÄ¡‘Q ¾/5Ñ’»Âý¢E›õRo‹‚8WÀÍ2)ªzfŽ‹¼Ž³ô§‡Ôýz-l†ÒgÿúHáéxIãä”ÿ™¬G6ëÀ›i:gnÀ$è¬þ5œ´s ޏŭˆËªà 9ÓI^tWÄ·cËÛ $Ø#˜àÔÈXTÉ$ªúi˜^Í‚ẩ,(‹$(åj¡Ù6>*¢µûÙ:·,Çaˆþg{Y-¡%ÄéT÷pVŸv è$ç̰nàCO»%[¦KÓ8‰«¯‹øÚlXrÏéŠD‰¢Ç{TX?µôN»iuÝí·çÂ-uXcÊèb¢ 78¯¹Á2ðLr=‹.þ­ëhUÌÜMuèd„¥4öÞžÛÊþ¶²B˜LvÓ®šMöa  ?YK<—NÑ•ó¡€Z¤]¥ªj ¥§–é!„ãÌÝP¢ê:+íŽ-×Pdjù˜ cbô.d)¢å£de”UË-µ®DÁ!JR~<Š0 ›^Ÿ&`Þj8wíÀ湸*äT-ÓÜPl'@KNâÊí ì ò6MÀ8€ÂÒ‚ûÂÕY†V§ñì1z#“æÚ“X7öÁçmB’@L3œ„Ñ¡Ãv ÖñÃ}Ó§[ºYûÇ‚/)ë81÷Ö,Qä¾”.ʼK¿YlÜï6A"6G|jI»kÔ|%%FÐðPrÅÕ‰i*¥ÖÝí,2Mt'$#xɉ1­»²b3á’‰ªÍÒšž6¡ =C‡ãg¤ù£ŸÃb¹§oŽzr Ö£"l«w½Ô ½\a8IÅÓ Gœ œù"UWÚb™jr• ˜«s“%Û@MyѧüO€·5t‘Ï%5R¶“.;÷^Ç )•/ú]¯T±Ö,Bò–è?G“Œ ®Ö2BÓ$ì½EÀ»ŒHô1<¼Ë#~?.¬ Éë*›«+\äñVc”È:–=¿4\¦Õ𶸫r ÆFÆŠi¯‘è)BÑ _²í"„…š¡Q±>5/‚Ÿšvþ¿‘˜B„b 6R$‡ó‘ÖW;ë: }tv7£û2ÐÜ[’ëï½\Ž˜Ì´N“¸äàÖƒ¿ie«ÃážÛ5]© F£ŠkáþÇ·õ,œYh;MpИªÁ×-A˜‘ºù²žêäá”#AÓ‰2“—ºRÉ'íàèê¢Ü»–x˜èQRB 7WÊj¨ªbÁ d8Æ"îìQŽº4ðj™µ¶ÿ‚Û$Ì@"JP#OÊ Þ‘ùª¥é¯>ܞ呤ƒµÁóQôEG¥ °ÅÌPhžÌµfŸ(EK¼í=8ïATƒÑ=L¹={”"‘m´4ˆ4¬aE{–ïñ-NOP×’ªë•²bá]á/äÎ[ªN”²áÓU{Ƚqdx¼ºgT9r»Ü½±vîZbu‚¬;ìŒö*_Ÿv?ÔO}È`ðÀ`1V#æ‚ÒK{‡K½¼mÅþù†ü7i¤kà¸%)ÄiÍ÷¼ú¤õ-V/-“ÉF~’ÙýÞº¡àrðuŽŽ¶Æ´0of*ß—ã0h'—¬ŒK‘ÒOÚÒÊb&:ôk$îv'ÿü˜Û<©”ךUøÜ(MÛ®À>±s´½#ã/9–‡$ÍÇÛô …È ƒÄ°-=Éꢟƒ®+…³§V­=‡7×GئdN²Úe™K¬nûÖb¸e8¬Õ$–>®™÷ý(ÜšýÆ—éV·Ö~l…ZOŠnÛkö­é¾ŒeÅÅ:ç¿%­,«Y³x[;˜Øén?0çÜñ¨Ç{KÜ eçŽäØî°ír°f¾cófnKõåH¹S5³ÿ†1¼®ÜÓ”LG¡í=a¢FÊáCδp­‡ޱ¿­{.¶Ò¸í8hû`0ß—§ÅþެÅ?ã £»sì'±tß˦’SM“ŠAëîÀÖRíÆÅvBôïtuo§îr?(¨Bð.Çè€"ùÏoq¦íýÈ(^œãSѫǡ¡6ë;-¸sÉn8ÉÄv9bÿš3(×L·éînŽ6ªI6ÒtÂß{;y ‰xåí6Åò¹)Þ›/™òÎiA ¾/Oç=‘sáý£ãÖ û“ÙñŸfŠ }øXJ˜^¡¬ux;‰1=°m1»`Ñ#=`ç æÍÓ®4iYz=` Ümºækg ­ sìÆ;VØôå Æ)ÛµÎòpg [˜ƒKFôȱÀXxÝì@ÞŠ”ÛŸx ãhŒí©€È“‹6ØìõÐÅ#|&^5‘QN ¸ƒ¬ƒš*²¡‰”")ï%hJ?ñDÕ$QË›*Ö m„þÍà6f`>Óär•ú:‘6ýw=o3ã¶~Ê#5–TWÇ›¹Þ«‹Ó‡ý¬µ~`{ÒÿRêÎi5»O·Ìõ.Vžã×ÝáŠS qu­¯v¨‰¾Ñ­#wnf„ûix%IurÞùq¯?,¿Ö;~%Îex·S ß²í*_·(àÖº¢¤¼QkFì «É€â'˜@ñ Ht,Q¡ƒŒ†*ö?¥úÔ’ºªj&”F¦Ü‡ÒÝ\gg·$Wr¨‚ö‰\²±WÇòÀa‰Œíï`wk^ùâU7Œ"á¾&¤«TÖ8–e§jB»Ú†Ûi„íbÈOš˜ÇaðC§RŸÝPóC‡¥ƒÄ•¸Q†--å×—–´«² lVÇCA«DwáÀ=Ø6ÁñÞãNx+3&¥@¦-8R°.fù`¥ÝÄ'f?n:KÍJBÝ`v‘Sµ¶U¥'£òàÉŒ¸ˆe¨b@¥:ÞÓ””ûI¨Òò,N‚Ÿ½Û*äCµ“)oÑ2÷.lqüê;ð' G9’ [®¤Ú¼û®å Ñý7£HZn”É©ÜÍðtÕ×0[ K?LÅ„š;ÈPèÝ©ªb•¦.¡ÝáëÇ“Ò ÍÓ3®íLùé)ØÔÎØ²Î¥ìÁõ2ƶž| U»À¶Ê°kí*b‚Þœd祦biìÉ#Á– ‹t*?ny¤ª¼¥ú–„¡Š•xåN¹ûñsã?•ÿh0ÀW ž€)@;M×´0V¿¨{nçfp?¨ÆY;?Qâ‰AFOªJ¡ÔpÞŸLŽÃÀ”ó1A4Vlµ€×ÕRbµ¨?’|§xÞ0Bârèu·íž­2§ü¢Ê¯“¦oä*à kI™»GËÜ$añj¡¹þêgdM×+ÙƒÎè´õ$Æg’ty·õ•jÏœyó_nפd´NuÂ^.g<øzNÜΕe,.šã˜&r0G°¦ú íô§+œñˆÕòf>Æ‹µgoŒÉ5¼x燗†ó"ˆ‚dL. ÇX±É#} 5åÿ 5ª5>! UðÎU5‘æÉ˜_M›Á-)¨vOˆåužÜáÃ)¹n”¬±˜ën€.œÛ¤>œâèƒ##ñ„ÂÞUO,†8¥³IÇœâµÈÛÄá±9ökP'×s#-“Ê®‚ï( u…‹T_EŒðÍMÐ\Þ› ÏÒ˜‚6Œ©ÛÚ1ÑŒû:Z·_¬x>rêç‚3EÄŠkNnÖœêd7tÜ­ìϱ\m»ÜßFùPí&ØÎŠ{¹ŒhŸ0kõퟛjðuKŒà%ç&ÅS3êA¼9ÿ%#Iyw¤ô5±µe,&/uü$CÿDL¹=£–ëå)­\Žw’ L6LS‹U¡&޵Ї©á–N°6ÃáL<]ô_/æn Ê_{sÀÛpEKýNòMÀ'uW߀âP°ûâ'ȶ“Ó§ë 9áIë·3QO Û¾^ÖJ¡¶Ø™‡´É´àÅ)o+óžäÓSXOá:o:îNbââ‹Óë\wΫÍhj¦™Õúá]UÊv‹½¯õ«„Ž•·•“„Ú_¦Ëú{Qî)¸[²r}ø"áÕYƒ­x;Ûþq}Š—$ì ÜÎÉ î÷Ž®š5é(’@I¨*–?PýÆ ´ÄÄ@†#öx52 ‰¿¸À[ŸéJìDn'ôU¸• lïÁiWîlÁbA³iUå|(¹~•útn=}}©)6Àß÷Jé)?îzhä©è~£ ÝrõÞë/ü¥Êyëxa—´~ nšr7w…wϺ/ >ó½=\äw»×{hœäBmFhëåÅ)üõ:kú³dÄ£}#€ƒfÔ›µa·BBañ ‰pœZO˜Í ¼Œ¿‰ü°£` ð¸Y®žÖ?üwÑawØÖ@$à ­aã±Ôú/ÏÛèÅWfø¾mBõ#d—ÌÃâ*‹‘’—ˆÞŠ@/þiõŒp¸ñÛN<ƒÇ˜&TÆ¡é|É0Æqj¬±®åvºR5ò„߈w†Ða·iÅwÇÜ,I_i³yúÆ`†–´›VÕ¯Rz×^åîç‚'Ê&_·É0æv­Q¬$uˆk‡Š–ÛM2ý€rÚq;ÓŒ¼à6qá3.œVçU÷RÚn¹›â>Ÿ-FƇÅÄ5@¹Ép®m‹ Þ'ȘÅÃûÂùØá—üRÐÌû–»{µ´õt¥àÆmüÞêþÒâFð‹Ób¼B¶½]–'L³EnÇ>é®ó”deÓ}“"{o®éTmxx°ÛR/Åš—nïËÁ+ÿFs;}o$4±&œ§Ü ñâŠðæ<:âÜ÷ÿÕœ±6 ï’^Iïz Çõ:WƹÎ}ã<9F¿ÒIOGû ˜€pÛêfâ ±OóY$oô:ël÷Jy«”ú¨±Ÿ†ÉâUÆ™þpZ¸Ï”³RŽÞ3ÝWÉѨ—¶š¦Ö3œÂÅFY×<>^æ<^çÜHqJ¹—óKG韵ÞÈ$=ıªÚÉ—§Èä' ¥n’2¢:aŸ„Ó«›ßæÎqn€F¸þ¬¨¡®åƒÒSé‹óAÕ¸Þž€WE¥·dЋe‡jàËÚíz·”ý Ó­jÛ éÛT–áˆ×]7µ×Ñ;­SÑdÚ!hè KÚÞŸ[җزJ|Óð¾ þ±h ް}Sܱ[Ê}QF{üð»‚XÙÉ[ØJì)J‡ÎR@ÚM«ê“Ñ- œì ‹rWjWÊN¸`æUªeô÷*xjÖ“´DO ·3}“!ztÂ_æê:U#<[(8²ô–«BÀÂɤò}9ƒN\²c©Ašh-óžx›Äñ/)QÊÀ³6 (‘sÓÚ[x3âŠ÷(ÓÔ~âJÎG li#еHâmÒŽ!A‰f´ð>¹Gö2–Øñ/]ÉŽýO7’ö%3^©–È>.NáÇuG-ï…ý×N>#Ëüôln|ŒÔ¶“WÿÁ#ï=ÔÓ‹îî[ ‚ÜúEFør…Á=' -QС%™lé鸛âáppìN<[ïÓÿ`WSœÿùFÆd…øl) ~šœ,yOŽ÷‘0¸!Ä£(âÉ‚=jb¢ˆçÉà »ú{¡0¼¹¥Ö ³‹âMÔ+™Ç[$gáìøâ0óÛaxsÛh÷a÷àð¥ Ç’•}ZÁ¼™ã]ï² _gñõŽkVÝ’¸rRbý07BFù0(y‚·öP©®<«p¯IùEÛÔS&ŒaŒ} X¢ÆW¼­‚ò¥%UסÀí<µÜË¥à OtªØN‡Ë¡+ÌËáÖª¡¨"ZÚœðÀ±²7+Åf•µ|°ÈºbRÀ±  ',Ø? ¾Eá¼ûv*²7²;Þ·Ì:L„/²Nœm~Ò°T,h˜xUKRÅÒkzI ».ÜÉ“8ms”±,’[]Fñ9{xQÉ9p ’‰x}™'«°¥F]á=XÒ´ðÒ™—aß×cHo÷ Ñ‚v|”½s>Ôˆ®‘+í&Ô.#NÄ(–®޳њнðð gÏš_ ±(>f„¯ ÀøUw3´ÄÛ»s'¥½àÖF°MßõÅW½Ìð6±ÜF%Ó$N¼Þ—³7³™ùI|­Ì³±ŸòŒÙ¨Ø nDLu,nÉê8»•Ô,£¥Í v=3µxÃ^y;1ã°v£Å­7»‚þŠIÙ‰·I‹VWKëZÚïUº2Ê›UUœ d8Æ)£³G1Ãc¬þ¦ K,IÐlï‰ÍäJ9çØp:~øŒQuå"£JÕ± ã`áÖæ·¤ ¤¤™¿¾:tšÄ%{Ìss¶#·SKôÕQ`m8Ș˜gœ³Q5~ ÞæŒå`3+Ñî*à +ËîѪʞÆÈ2<¼S¤ÜÛIÐÒAâ*C‰Lp?\Ë Ôœ®¥u¦; ³ –ZÉöÆljÚN!…§ ·ÓHÈa¼ÇîZî–rhyP5°¼ªÙ¤»6@>L„†Â¢éXÍ Z{ÏYÿˆ UÎG eS+qÏB‘ª©Uá`6ðFX‹ ¬EÿµR)í&Ø—1‚1M¨g4ÂldcM«+ß³¥%'UÃ~B}c‘•÷ïÓÑõI ‘|¨tˆ–?Zb‰y?Ëqv•ªÒ:ôÐò Ý¡ Õ§Â@YãX³Â2‚ךˆu…žXÞ‹d+,$É„ÝkòÓéÞɵN}ÁNÓNÇ[ŒÎ”ÚD鎔vGÀÊ,à ê|Í !dv#ßùÖxëÝbuòN¯‰5½ ñöÚ±^Ýñ®IÌ Õ§‰Ð„}ŽŽéjPäÌ©vKSÛÉç?`K,J=ˆÉ³*©C¶'´©ïÖ…’HÓ`ï¢pw“tx€ªm{?µ‚$åÝÑ£? ó¸72÷ØöŠÕbñÖ¬ÆIË 9PòÓ,wH>TòPí&¯…±{¿/lÜû£ ˜ªª*Âv±ƒÞ,ƒIá¯Â奥}ú9¸ýµËWê*™T›ªçcÅò©%“© ,P&i]†TøƒUñH" dòÞ»œ4ä—I€w› ‹+'ocõ‚sPèªü$ƒ|p˜*•L”µ´x~Î]ñ'u‹â8UÚM«*'1˜‘|4£N Òµ´<¼ÍtË ý¤¡Š‰ØÈ¾Æ´HZzg½«¡—‰2Ü(Ü—IšÒÈ oèßqü·W ½ä20ÄøJ· zHjí öÕ»< /ÒïnjAµ½K]wŒßé¡ejç¯yÐnÀí4r˜YØÆ2Ü8¨n[îZîCµ¦NF˜3¨ä ¤-YT|Bïr½ÕónvOÈ«¸G™„ÝŒcTQL¨NFÜN#‹\:~eÜ©G°Ç ¦§@l±ª¡»Á_Z&\½1&$^öT wÝS;MØ8ÓÄ’ícÛÑs_?­¯1‘Ô#ꧺðXyp3þ‘„ Çap¬ /Ê|œŽfTqT•DnIÕ,½¸Ÿ$œÄ¼\©õpñ=wXûž»Û–"DdLÄîc†ƒºeÄ'é÷àëQy[Cñ|Äô<€«vÜÇ×ã-ßo÷ÈËði½Åwp· 2&ÆâEÿºÚVºÖÜ’&Ф¾ —ìÆ£ºÃ¸ñ•‹[Üvþtw¥ÌéÓmjû}ðí~%—t8mée´»Ê0úJ9 ¿^TÍ”<[øIŽÞîJÙ ÷¾Á±sÔÙOO,†¸£ ä|´s‚÷ýT©¥Q ç»ÅZ¬­ä U3MÚiò :CT X†¦®¬1=£õTqýÕ‘4ÊYc+à\g”È£%Âqì2T/ÊݨTRš3ÁoÑîP'¤ºù\í+?Îx%4Ç2œÐ³óí4*[MÛXLçÍœEçÖüÑ+Øðn§’Oêç‹=dïÓÀO“é™ò$Ãx`Uþ\³³ZJ×XçÞ4öC´#öG÷Šý ôBéiBu‚×°8a]M>‚f†P7ÂÚ6®ÜNE1ÙM©Ìn/4q’s¹Êí„uAûuyè Wƒ¿~IÓЂèsZO"×+eÇj€ù:ͪ²®TXÆD 7ͱ ŒÅ¬iÏÖsž=wJljòCËÕ ÃˆÛ©$Ô l\޵܅Ž©•((¾ƒmP ´æ8„4"ѼÉa“¤¡3W0e§ì„<¯ hDÚÑuÍÙg-q½Úi(m§j6ßL» íÕ€ó$žnÛÇÜ /1 ÕtxˆLð#BIÃÛ‡õ–{¹Œ(+à2¡`tÃîÄOš˜Ça€“›ü•Œžº)Îq@n§Ã¥ðT¹L°‡O>‚d›V’ 89ºá”ƒ3/9X>78ýL׋šnBÕSœ|Épn§"°µ]Ëí4õ° Qôôq·‚V5íû™Þz¥÷“9*ÿ2¿õ7\]S~Ó3å~¾!ówj´²¦ë-ß©¿­Þý·—öÛ[»ÿÑúï¿”~´ý·ì­&øŠUU,± ™ò×pjÝ©§N“½Þ?®Ôi(HƒB&2Œ¾n1z½<»¬á•²6pæý–y7þIuEKÅ‚ž ­f@Š v޸łý”Šfú”þ ø“ªêØ+çÉ?vjiæ{ª¯“z2{Wû:K¸r·Yykó§–é Ê›”{7SU¿*Ñnx‹Â‘j?Ñ~Û„ÓÊ>pøâã 5£+e¬qÅ‘ªR'ˆ=%}cí{R2å|€ÔŸEvª ¦¾Và\¤ön⤲©`<ŲrV½¯·~QïøÒ’vSa¯ ªŠÙ(Þoá¤e0âaßIÝYƆOŒr>ÌáØÀݤ\ gÊÂÒ+Šq€(ùD©š UoóÓJíç0Æ}ð‘êî`ß]ëuU¬ ãˆb‘&ÊpÓð>Ô¹Ôîl™Lª°¸ Pj6¸³…îÜ'Pè3àT‡‚˜b“(X*®Üio¨ô5ênãĤáÔ'HÄ0ŒšN\²c©Ãñ®ŒgDÂüµè}ar%ëgÊlOFO¸Kï¤SN’+ˆj0·®†SžÀí2nè†Ê]Kª¾,œµŒF(©î,ƒªê×- LXåÊùP´t’}Îs3”UK|]éfœDÂxÿuK”hW=)ͱqÁZ©uz)ý¤aÀŒJµµªŸ&vüñ·NâIZb(åÀWjÝÙ_6ý¥3åòÍí c«LÒÖy J⌫(ÓüJ0-¸/ýÌžÂɯ}‡-wSw\É;ò¶r’pk×qx…«hVSIK1wÙQ{œàx†r»&u'Ëj‰½D»iUeèÙð˜àÕ‚Z¥nÀOR**š*Z¦ƒ ª*îÍ*R>È¢¡xÅc|@É8A€¯” (wÐOªÜ®`´Q–1Ñ—ôBñ8“jÁw¬Á”Mhp6I®âÐɈfŒÊÝ q8ܱº²Ó$¾¯Ét‘˜V× ÎÇ‚2ƒ…ƒ×š+½´Äî tÐŽ q@uÂ8f¼ººZŽû¾ ºò¡ äÚšÒå9m’^°éjóF*§ f¨H2vÇjÀ%a0Ãa=¶k™2¨û„G¥0lWLÂâ¥-<­¼¯¦Nƒ³) ¹ŠëɳMSj7®®x€‰›HøJ͈óaÐN…òõ5ÁàXå¶ö¯ÀíšÜ©ó‹Œ çîØŒZg i¹ÖãíyPåâ”o !Îá&é‘Q†>µd­ªáŒÁÕ#JU"1uï¹¼™îˆcÆ{*&}¼<â9åÏ¥ûR5ÿ7™ÐnÀÛ„$ ÊPƒ®_(h÷¯›Âp#¼(9—oj]nì!üÍôK‚5½BƒœÜÒQ-vÁJ¤ ýƒ(VmL n§+ººR/ay›”)0Âz‰<8ÑZƒAg-®q…ùpÉ;Ïp±Ÿmu‹g´Ë‡åO·¡w·1À§µçë÷±vN2ÚøX-øæj¸wfž.ÒüÞU¸e­ÛgwÃçuJ/ÿ–ÆêGXûjçj£±>+!l=ÿ_À{‹¯"¹_¹—‹V3óÇ–ZÈd7­¦87í] *´xçݨ” „·F¹)â¯:´Ö|ýÂvš …1Șˆ“¢™j€nX†Ó’+ ò“=Ÿÿæ|L“–Îj)Ýðý–»{x@ñ§3h·5BZšT•Þ 8ýbqðU¥[ GúKª“OxQ[¶§–”U=Š¥i@à $b9â][oíÁÍðIù0è®äÐmBúÅM`Ö’D•IÕ®OÕR•ÓÞ#^ZwMPiWe±vÇc‚W«´3=Ɉó¤—A)ÝÈ¡—LFµXÓ®%UUl4Ÿ¾.™,Ó1aØN!×j0ÓùÁѹ ¹SÄ=»TUµßx‹¤H&i«Ž»« #LA±ªj .l¸‘B©—C ³QƒœZ2AÄ@þ·؃ø…¡l?' nöuWÿs×VD%wèVn)®8#s–8Jw Ø~æT£?¯t7ëPP­Ô x;d8E?»(w#Êÿ¾Ó“«I)—R{”aÄ;UÃ+å jFø¹ºŒÝÞ\Lÿû þIšÿ•jÚAçUØ¡x3I íÉB¸xblÍJvM2©²Œ0Xuag ÕIĤ[÷SžIYÞ]<ÊPKU—3j'3ñõ³Ö »–ã¡ 34'"8ÙLœ©ØÏR%£RŸATƒ›â0IuÇRdx+e›ðtzj“ž\­ªõz¿8[¼ŸÐ—–øõa¹VU\šTäfm„\wĶ35ú0uuœ·»VŸ3?ɹ——áPÍžˆKÈF¥v%MªZƉFÈèøIVím07±:™Á+å 8EÀ4„A?Åù›LdTU½ðA_šw Hö{iÎñlË5Ðú‡¿èýÎ~&ÑOÉÿW„>#v”¶ãhVöq;Õ µ¥¦ÜêriìÔyùþÑvù¡ºÕåÕÎܽ èAœIë/O¼†wØÒ]!:9‡)¼G–Îw”Çù®à “•Tñ ¸<5HÞ#n÷p@¡ÖŸ¼ÛÉN:’´$V©áL$šR-ZyF†A§ û$™µwµzª¼SÊÓd‹Ç5o˜8±ù÷‡A> JžƒsÛ*¿ºÎ’-pKªA2œ½½î·_(J?ûâåÙ «ò“W2é0i7ånŠ´›VסÀùPÀas•œLíB¸³÷ôR-­ZÉP|êÊ 9Eªí4!1øº0¥’†*‹+U#{ùãͱˆÆG:¡ÞaÑòWpcÊ‹©é¸RK¿VyKuç`}ö—™×ݬ"èpÛêÊgê0s–Êɹ–‹öœwJco^Sæ$nJOx²)f„ß…ÒšÃ$5\ô 34õÒš ŒÝoAª‹Aã06rXk õÅYÍ™Ä7ÿ5à+±­ÈÉ•ì«Rê{¬/ý fK<±™<>$²ê9ò6]£Ýá•$Âìð^H2öwyam}bÝÖûÒŠNBëbõ“ê•ÄM©é1oãE“– ·>y€Ôwª®Fx>9Ô=η2¦É4 Iþ]N÷%ó6ùu†­z˜¾P¤;wÀ#qÍJˬ¿­¿,J{ºÈà>Înù_©ŸÞ2¬ ˜£¦¼£¯°šþ*Ÿ¾éúzÉ÷ÁäÀIP Ì3ºÍ`d–¨îäõe£ZÚtÏ’{šMÊ9¸cìñ»ÞÆd¢ãIÚwªŠÔš? pqö)Úâc„ÕÆa9G`YÓù=ò"ÓF Wª”»"™ì¦’²cUå|LÀõ{¸:À;Ì|ƒøj\Éà·¬Š–}t”wÞDýOªÜÀwã2h+vzéàm1ånæjÚhuØ3@™Ûµš>ÿ^wØœhö G_T.×1±S —ì†RàÅiòÒ%ëÌš¹­ÈZÙú¬‰!Š8Å¢~Ãh»[8éë~8´q»IK{&$š’\œû‰)»ámuÞ“GêèÉz÷–dvKÕżôs¿8éBË0IþËÊX­×ðÕï<¯ÞÛDŒVó™þ¿ÉÓ”ë•jš/®êŧOB[¯³Ç/¹Ër­ñ3äýâU<Ömƒ0±¹÷´Tû‹k˜ܱaæhŒMÙI„ÖV˜¨†ÿ4’Gã­¹ã­ß•ÜIÊŒì%pK ×®•?*b‚›£ÝÒ WÜÔ´sÌ÷#0ôÌ2¯—µp¼¹+”ûAq¡`­ l+xv—ó×@»>\_œÏ«½ô9º¨š6Îs­ÛÉ%ŒWõ´¡*Ì:\Òw&!Ý﯋‚m»r’ŵf8V]ø0ír7ðÑÈp+î וGÞVN²¸|,¦õ0qþùŒD·¾Æoç9öšn±±¥¬F溓êq¥ }Ao*äê=ø}207¬3}8ùwKÃ{Z|CÊUE­{¢êXN¿Èð 2&¾g…Lm•Ì”Ýô qåÂîV½¥ÖŘ~kœj ¢@1´Q¾J¥«´®3áì©Ü'ð¦$CõJYí@±\Ee“ôm?­ìâ=ç`±ÿ áÝj[Obæ+müi|øŸÅ^yÞÕp“/>ÔÝyH<ÝÁ|¾·söø¢Ê~Iá3l[z-Ëßñ‡ë?'ßmVŒÃöš¶“’LË2þ¦Ú—-Xþðëœ _s[´’îË´ë¾æ›Â”ºòPƒÏ® ͨԧbÑ’wUÁâù®rÞž ŽÒGšçËXv&óKâGÞšöÕÚx;çûðŽb;!'>~Ä›Úõíþ*Ì›¹ç¨}­^›ù{’0Ãø•ª~¸ÒýY2-¼öb/oÁè1L’ÿ²2Ö@ë‹›5¯¤}§ Aÿß´—šŽà ·²hzV—͵’9}šÇ ‰*?(pÔÝ•Zs”áT'áË‚»+ºÕá¤@;䕲jÉ»A‡"ë]œ”9™nªe;‹Í¡: õsˆÓTn—a§ »ÒfR2{e6-wS¸µùÌ(ÙBÛ–ö8µL•KV¤êÄ›)¶¿ñîê]v:ÇÞ&ÉYY“'ާÑЧ–ñ¢ #d´—øíx<’ˆí¦Õµ)àsJ·å² 솇e ¹¦/§GÚžÎÕ¡5#~’“wæ½8+4òùú§ÀÔõÄb„ûéÀûRÅÃÐ g{ܽßñÖ“ÉF‰y‡A–Þ°8&³£Ø1Ñ/Bù¥%eWªNœE¿ ÃíT²j¬ ¥¡ši{:µ¦„ç΂|Á¿„LvFUChÝq%6ÓÊ)(O,¼7¼°˜éi ñQß¹ÃaaÜãÞQX¬j7mÁîhïÃÒ‚ÕÓ6l–á‚5)—ìµEß`xr¦·Ê{¢ÞKe2h½QænÁbQ4º/IË+e…nÒËßú"Z¦ƒ ⻃p¥Å×~–š•¨ªâŸŠ¼ñè§(¿5ÄcN+Ù Ù(>}l@¥ZŠuÑzÊ»v2:‘žç±%¯\.’”ÝùƒðÕw-\w%r­ªü5 0% O-Ƙ½d ùBA(_©v2¸ÅϪî„ó¶à˜Ø:MÂñ®äàïÈ*uÁH¯ÔZþc̦öñsh å¡eªDA3ü¸E”Ȥªâ”b X­ŽÇ#A&|E±&ksHO-SÝ'Xçx2¢Z=Èu7º‡v*íéz)QU=KÍJ˜¾àÓ‡y•®€Ëæ@¼d•2©j¢•´»ÊpB¯ÊU5Fí2+(¥Þ;á¾i¹«ˆ ö0`Þ]9I NÜáFp4äûrÄLÀ*8!(u´­QüFŽÑ­^”U…\w‡jÀù0Ð[’ëCÈ—ÉÝÌh0œ:Mâ’'—8“Éu7ˆ8_¸Š"=ÊÝAO”XC2&f¿´´JòaéÃqëê¤&“‡Ña@U•ó1A†âýrÅÜœùIÎ?ÜÀ};MpÐ(â#XŠT' # B‡Š?'ËäRŸ¨u§–èé›´¬¼ü-Rì­wI(¶ÒµDny¼‹-¡ïÆ zœú5µÀ$FìSË´“AÎÔåÇ íTƒ—@uú,åò¤ºrZ«8j¶dIžŒ›¬ÎÜN%}AðlWkE–a€Ì±;¨N”Hm磯}†Qðƒîaîý˜F,<+bXì/ |²d"R•³BùÉ^ÿb!£Ò 𚬼S8;j;K;FtÄv;-ÈžÙ&úÒS´8Ȥº¬I "øÔ!àõ.¿P ²òá(¯iÖú…o‰)¤Â+ãtå¶V=¹Ê„ƒ=H¦¼Ä„C…£GígÁ˜%YÌ}MCAKtä9ÿÌ–Ú¸lf¸“$Ñ ؇I²ÚÖ7œýÇ~ÝR^ŒgùW°ÝfÚêêñû¶ìï¥&Öa|[{±Ã¶åÄ´„£‡øE^X¿êfLCA¯e®Ëbá·z£k#ʃ°m%lÓ ™x_˜uáÆVÿg4ÀKK=P²EK™Á^Î:Âû£NÕ°¤îôcPS;)=K±æ[jÝèLN5}M,/£»Ïv“tYåû(Gš$ <¦Ì©o§!% ú5£ªÉ‡u€™ŸÈù0¦Ö‚r8~’Ò•²C++Ö¡Æb/òw3yJ)]©íFçŒ]˜¿1/ØW6üI"ATƒ‡c%# âæ±Rv§ú ¢:¹+ù ¼­!&uüÅØa”‡ª˜ÎõÆÞª®åö±†–¾¡V#ŸuÞmÙµ$× ýByä©%UUÖ¨hùHbäÛµd-wÈKKªªGI¹«Á"ÈV•®åi/ %.â¤8•TwÐæ!Ò²BޤøsçæÈøÃeBvS¾­á+.ÀÀ!Ûg–@»iuÅHÊ·1 @WµîqÍ ä;TÅЀÃôD QVÅ{÷@?À*žÇD5Ø&Q#·š”r)áú¶’'Ù,8õ \²"í¦Õ´{Ò׀ƛÇp­‡Ñ¬§–”U¹ ØÍŒò¡äc½´Äêúç›TáL¬TîlˆýDUõë– 2&bkðG1Ãc¬n§‚ Í)ͱoäqL‰³Q,ÝÀBunhù(å©4‡ò/€K>œ;‰¬<{ ßçÚ‰²iÙuëvœŸ Щº’¼éÎZî&%¿´üºÕV-møÛ?Ê vBº–”U-§º02>ì쯳wåQ…“8Uߤ壾‡ÚÔ¿ã ³¯ƒ°¾'r>œ³‚É‹_òd÷ö[Àaú“àQê>ÁzýÙ²—õT!œhÎ d£Ô„âÁíšdAÓð¶`$ÅÿÂÖhu7Å5kMÁcu5º=M°;ß7|ñ¼„(“ÿѨvrÀ}½0÷1¹NúI£…áæ1d  5VÍÙ¡ØŒø;U^ð¶^Åd‡¢/­!”_.m¿¾JÝ9e-¡ Õ³ ”aÆá–Tî „« ¸†;“Ú “¤:ÍW±ç•|z>"vŒ}Æ"pRŠ>¸“—Ž>zè‰ešû5Q» 7VŽŠ¹}ù©’Mp|bÌi‡!í–Ø’Ku•²1ç#h¶´š8ã8ã7á—aWu¡l iÓ„Çxj†Á’Ð01àû|Žî™y’É®: —–© :ˆÇ?‹5¹Hª>¿àhY/HÞMÒAFT |Qü.pîw^y«pÄd8aé넽\Îø6Å4xõuƒw8n°÷¨‘€ôX Þx»©“Ú¤žjdÿù¸˜zàœ½Þ}ÓWæ’W÷½Ö•]H$êϼ¹ñœìsUÿÒòüM ¢jìÇ,Þù:Ã{Þ‰{qÊ´;T,7ÈÛa¿tê §'“ƒ® ½’³º$ÿíe|DZû™¾&Ïx¼fu:hÆ nnxBÊ· $+Ë]´>ñ/9–Y?pàöõÕ¢Ÿ&íEC‘M6WÛÂpÉf¿xû´´;–z9ƒùIÞp¼­.–2¼ŒH뫵%âr |íÆm'[há¬P¶3]ÜÜäÍLLpqIÂÇ#âw=¢Ñ‹öT·Ó¤LÆÍÁ¿|†·Õ-½uù€»›Â}©š¿·³O  üN)¨üh©w£q€ªe%üqlX)íýTCÙ´ª~I .õ©„ƒ}_)”n!¼yt¤T ñ3ÞýO’` et) Ÿ¸ú‘~œ¨ªúé”P¤³qf!áþw£±¤hµוLýD› êçÊ R]ŒÍ?œŒé±¦‚±Ã¸ç%O´"ÌÕ}4´ªnrªÞ܇Qi ß-H"]¾(»vƒš¼ùë,9íäÜÆõ(–Æ=å¾  7xAr3û*[æÕX¿ŸÛþÉt%ÏzuQùpyuåÓÝÍí„N™”;>mh\icþ´øæ%¼?Dn>ª7¯¯8ÓE³O‡§ìzâ56B™¨ÉtcùÃÈêJtØ~ Þèâ™ÞÏÊ'ùôùÃêWC#ðgÖV¶ûˆa‹¯ÉæBÕ{»“ c‰Ì]¹k¹¦¸yéŒ×<7Tƒ®”Ý0º2“i{:ãO07Ca¶ëdʦú£e:HªêE¹+eÈÐ2#“–0ø²ú[Þa‡¼²'1 ×Ý€K6º/‡J í41û4¡AŒt3ÙèÅ´yz‹0ŽCÃRvÃáúHõ©ìç"ÉuúB»!uÀKK2ÙM±ŠUu6˜‡9îÑÑîP "‹»x¥DÍ7™ì¦Ù´ª¢;Á_¾xÕ´²¤ òàÍT’ÕMê rÉnf”âÓ.°8l§É‘ÿwíG‰Óo5¦{£Ïéy¿öy`Þ>L’Åã^m<Ù)ûî Ây’I5Å.ä|( ˆì*bâÖZ^Z&1Åwm¤+2SxwæÍ +Ð=ŒÖ̫Դí,¼¯Ô°”¼Þ6ž· ÑÆ@ éÜ=ŠÙ) §l&vÖÖ©‡ÉdP^¾.3©&¸«âX'–?N~±oæŒÏ”wGJ+Ò.cµ87E všÙE¹ =;9ƒ¥‡ãÃ9ˆSãÈÁÖpL´ÄËš†­L5Ÿ™9õù =EÄ2ÃxÍmñÎiBòíNn6‡’–à}ÊÓ„²B‡¼´<oNùd,¸ŸwsS9Y™ò6!É‚2Üø©;ÌÎ+°r•.Êiå ‡Û<Û\n ïî7ÇžþLsËmø¢jÀùÐX?!÷nÂùPÊ)¼TúÉxl|Z}ù |äGË]E«†–TU{y¼Z>d¶§ eýD ·ëÃõpqN_"´8a>)hÄËj¸hì£î$Pm~P8öbxËþø,xpÊ«õ¥´2™iç-ç8û]Ÿ‚E¬UO0¥^†¯Êß¼-&²:]TJ#$ÄÐ/êp²rS‡" Å[¼³|¨tˆ•§ §lägtpñ %˯»M—)ØŽwÑUØ%ûÕ©r›é·#>¦Ü©p>‚d€¿µ´SÖØN“ÌiÒ6)QàšÀí 3÷ïD³@|ïQ©.œ¨ï÷ÿT» &t?P¤íäNÀ‡–´»b+WUŽ+.I¸Ù~Ru¶ÊRóás¿äÄÅ‚*ÛIho“ñÚz笑m+&ÓãJ{àŒ#TÎaıïsØQP>µ´£ÇýȾŠ %6‚v-iw•á„åP®ª¡ ä¿JÒò+mL¹Oƒ æ›> ºÒÓô¯FC5ï®2#ån ~Ä£+ŸÕLþáÝä¤äÈítêÃH br¥š¼weÃÒÈȇñÈ eM¸dÅû‚Þb¹§8L–óq=¨dgþU_V›g>QuqÊ€L" d/» }ÉfA…w­»µó®eʪìZtquêE§êÄùX ÿèxl %UÞò„"@{ò2¿nüezât8NbŠ–x¸÷[Z§…°PÝU­Ä« h//9A9?I©ªt>^x÷+éÓ”»yÕîã¯dp©Ídz¨¶ÓU†¦¢Ü]y J²²ŒpÖ¬“)o ãÇ;v0¹V@Ñ2ÝUŸœÅM\¶}ÓvÚÍç]…™5%ÇZ°š¼­Æ%¬Œ%`|Ž$N…÷)åÕù<kÂÉG¾RÞõç?Ý·î-â©[f ;pýŠÒê‹zadÍÆz Çf;µà/Ý‘Jòéïfíy,¶í†%€ïËzO6zK¹ŸdAüàÔĘyëtÌ-ÖÇËW›Ö_Œ­Ùo ï Æ{úÓ©oÊ©“o€Æ Úá¡I‚°Û›ã>í}Ѩi³£Îó‡á¬àM(¢œ2|9’Hðʤd:ÄDçØO„RÅÂþAoûÆHHnÿöN´§·9S-o+“¼Sænís×R[5~)”ìÊ­+~“«eÛk/¸TľSëüL@¤{²¥‚ŠPî@þÒÊxÎS°x÷ÿôx”®°üŒ7Œ­`+rwoi§‹7å­Ü¹+ROžÁ»+:P”I˜1ØïkÁTÞ Ê^ËEn.N¢ÜUnÿ…q˜lˆ}g¼™ÿ+m”»ñÝKU¼ð»ðÕ» Ï%Ff“[ºAÞ¼Õ ´5æ$A2”;>Çþú’Û§uIÞ†‘וàÔrOuÂPj'¿@ï£öWžçž…ijÄû‘ƒ5)>“p¶°pÊ›ñU2UÅ×LèTsPÊ=ŒöFÆj9¶ä°¾ƒä$ª8Ýgô‰öœÌßT›/mî©n73¼•[w÷ï›°¢ò­Cý‡¬sMp\ÅÁè"gV9š’!—GºÝ«Ÿ›O"=?*:G`ŒŸ¡'Ƈ Jz›¦„öQÅÅýL©a}©áæ„Ã¥~ÅRÚ­!àfBË@JÅÉË[Ê âvIò¡>YûŠß)7¥$Á»=4?8‰ÉŠ©)•A‹Z’ å†<ãn/0‚íá8VöØHÒ‚AŽø÷P…é[Ajピk9Ð%p;¹ò±ó^R8»lµ¢—* È-26iµå#h™æìfµøââÍ×Þ¹œÊƒÇÙ ûXkêµï7ŠæÖ†båÃYÖ¢þ»{Á–F§Ú6ÄÉDµQŠ#ùÖ ‘;ÔKèÙ×E³7j-情ËÑ8oâËt¤‘ÚmDˆ”r-A{³_Òî`,šP3*É«~Yx/·›SIbÈ×ÂùR6ôÙ]µ¬K ¡Ñ\©—Ýê.<œƒ°¼Ò3µÑ¸Zí¼cm·›§ýM2‡•7~á2[kkP{÷ÏÛ±æpçA&â‘òØù¹MŸ©×âLe󸍉¬©ùC»ê.¹«Ü{„4ÈZÜðήÜ36—‰¿K™Î 1C³‚ÌBÏÉýñ—Òá‰Æ¾:üC¢Û/Êoui?©ð÷+—ÚB.çÎr»rÂåÇZvNf« ®…+ŠFœñ Ë¿S·eêìA‘µ“ Ìö-pëI‚¼þôî¶ÄeA:-É" “.ÒaVn·‘hÌdqxäZÉÂáQn§hÿ6\Î>ÉSÈs&-É­IùQ5އ <<ÖÄQg}úþ¦µ÷’–hqsÖŽ¦v« ë5ûà$jµøù®ÔN.nE·y-»y#å°¢Šk눙»ŽIT¼/Çoªßߊ'¢¦<¸‘ÓG['û „œRºóÁj~þ™Ið¸ËB_é0œLZè+‰­õ¦¯©Á0 < êìJœ-~S‹¤ßnáZÛeè)¿a)ÿÕ㾖,µ¶‹ekqè€èBϸ‚"RµNe°I\Ã¦ßø^jSÎ>ºr#%ʸæÔìtó2YdêF¨çÄIBnEÁ¡dˆ †X]‹Å*÷¨ÑŸì“ÒWc1lí¾RQî8†€ÓÂ% ñŽðV¾5ž³‘Rï #HzÕ¦D¿gí¤\‘Tàr·¤0ûÃàåËQ³ƒpj ÿÅ-àå1º]{gqŠ•ZgÙ–­¥¼ñE ÔÞt«eØ”Spµx±‘`¾`³ 9Ÿ guvCl0c ÛÏ$” 0Ζ“šÒS3$ià“ZÁ®˜äCä6Ál¬zÞÎ\kÚŸû§2Xƒ$l}cìdr«àòµbÅ?9r»LI-8jõžd!ÛpÜÏgÀyÅg=4¼?zR¸¥ƒ f 梱Î'`•üòÞ,êŒðQð2íª…³r·3DŽLéðÈåtügâJÝýWâÕLÆC É@Çï! ñĀ؋UãïtÖbõ¸õ9XëJÿ`ç6+_Båà¬:;敊­Ÿ›9VÏâ‡R%x^ʨ`@©(?ëxP箆û[Ò›9 i|§²"6Ѽ@‡eJp¥“KpUøj> 9Ôžµ/lÔ]JNåðk°p>6î´ˆk1®×ShXÉA¿ tÖÁ˜ ìeÔ_Œa›Ṳ́ôMÍaAh~I´'nUI×åÅáQ^Û¥t6¿@›X£`ìXíÄMwj#(ÒOüâC9$£3qÑ…óéoÇ‘á1›{AÛ„-Sïµ--I¿‚ûà(i+>Ä»î«Î®)!«j=ø P³¯‰{‘ -¨³+®9óÞŠòó½p‰g)vC¨óQ/G:‚äÆùT ÷;³¶­®‘\$¢Þª† I–ô±ðEʽ úµ”ûµËøΡqSY¤Æ.(§*ùhAb¶¸ÝÚyïöe°s^k§rñxPs€yœdÀ™S»UNl0CqžÂŠ^\›á”dXòp@ÕÅ/ÚYn3Ö6ðÍ@‹¶›Húâ$J™ £‰‘Í ò LUÂΙNãg÷OÈC¸_á7Ðï&Sä±Y ïô"¥ƒšQ·T³yòäîÓ…ÎFP¿Ìdu{'rª–IŒpH9ûl^I?íud„y“ø«ÅêàL¥Ó†Æ‡šƒ U´ëP;£qýiBÅ  ÄÎjZ†Ó #k$8ÉnÜc’Ú6¼Éãá ^´Ïššζr»ô‡S §`«ÆR*”Ú¢¨úÞå‚(P}±Ç¨Mó>.–1Ê9 „y}¥¦T6¸)õ13ø7² ÕÛ+ñaÑü§Uûlz]©ÝŠÅB:©rrÈÕŠš …‚åÞlPÆÿbPsÄ!<ŒûÛïÃ+ã£Ë ÛírYeJ…Ë©xp’E%h8b-¹ÔÜH™Æjâú¢æÔR±"±¬0N)&#h^Jí¤Ç¢w%%“³½†Šõ€ÃÉj‡Fíµ€ø°$S[à‹Ê¹Õâä_ÿÔµ‰Y85ÃrXÄ&0\[Œ{÷ˆ^9׈mîö¢ åÞ¤P´‘F’E%“35'\M„T¡<…”ý ðHg¡Å(wöX{>‚Ç™NRü2šeø18sí)Hg7jø @E?Ÿ©6^5zž¸¯ÿ_¾KÊ„ÆKj¹Îʘ #<à˜Í²”‡Ææ·`Å"F¥ß¬ŸÀÊ/J²¨€j»’ñ¸UüÄ &‹ÕîÓ€Î/–Ô³ÐìŠiÄq zU«W¿·{žmG¹UÆìšÎ.ô×€3Ÿ ±8ͧãôÙÆ5=è÷7g j Ù*[»ÏäÝ}Rˈ¦C楂ϠHypv¸’,´ªÍRmý2èÓב$°mx+‰‹5.)ßÁضô e/ÁQî'Þ°½¶ï3aܯ¿cO¼HíÄfZ {k^L8jÏ\H{öJbqЂC‰Z'jÊ•5ù›4ž ÏÕU<ë‘”D8‰!ÆJÀB–k ßèpY㟵BèøÐ‹Êª|+ôî]ŽÚ”F«ÅhP3|Ñj†òÀ–sÁÞ>fÉBÁ¶ë…ùD"3óa<^hé2â ,nUÞÚîZE}æÃävµhiX”^©è2†¬2<q[ Áug_´ø¦ŠZíÏÇ*ji´Û gÅí(Í ä ÆR;)]O}ØÆü{žŒËXÀ¸,ijiœÂ¹Œ‡R!Ö£¾» uvu*i(¡«€;6N­ñäÅ@ì—°öoÃgÓ¡±5´ Ã%ÏôÜøiµ.Q8j²Q¦§î¸!œÄÜ/Ž… KÐoÊ#Ð& ŸÌT:‹[ï ŒQ³bÉüLbR›CT®_B—aöîêEÃo»KL6G½Nƒ<ÁøßÐì½B÷imóxqÉ´±/åüòËÎ rUœºU^ø|«©•üp3Öäl~§&DØÒ#ªÜ-]|$Q‰àþ™éhv\‡2ÆhHm¹üëß|¸é;ò¦}ñ¢¥Lqzp*[v,ÌQcv#tÈò+ÝŠ%1ªœ|šrZ*6CÃå£^‹>vÉ~Js­F~G ä¤2Œ0¥RÌ-,äE³+úaæh£`+ÏT£ÈÕæ„‘€!ÚÚ-f;¦Jg«3Ø»û¨v5ÃÊÇÎV‰ó0ÂEñ ¹•O› WÇ^dT­—W³œ¼f­C#¾© 8m±§G¬ÒžrK¢$d‘‹ÓÐx=½¬ÙY2¸qÞpå'FÌ!Þµž“@ƒ¹ïv«<è˜BΗ“†ýO PK²°Î*¿°\6j ãT§aõ8„û^ø¢‘;t6rymÔ€”4d”¤«4ô6ÑàlœþàhpÁ°Œ‚š¡µ7 9ŠÆ‹-¹ÕÙ }q™+Ù‡G,}ð<6ä$nø/IåOjqô^¾¹ Ù"Ôì“W^ÑË$9ð¡P8+´á•^ÔˆÏy¦Lƒ|ÊŒO9vû³—{ õ…ßœwÆA~gÏ­Ñ"Î[zŸ×Ê ›×YWn uØVé$IçÅãÓ8›–LAB½/{8©;cÑUÇöÑ"!;sú°~}êØuoÆWu¨|âÐâ»lè‹v­-ìû®³‡¼’|ˆÜ›ÒΟ%èW8½t_¢àè.µâ³å3­3%a;·`.ç‡È½i-»øLCµr$Z¸-~ˆ×­ùGÁžìçbÅ-åĵ¸Œ$ i½"[[`§à8˜6ç¼ó2ä˜ÇÌÃÉû’$t¶O#•[RsÒÔ”o>‚<‰ÿŸ󱡧‡G~­TÅ›AH=lx_zÄÈÆ9š~R³kyÐFã6úöÓà­÷^¸ÔÃá•>kOà°Ø¯T”ñÅYÅv’ÓH¬îúV:/.‹§Ø™ z=Éw ÿtÏq;Ìfôd+kö=j³¯†õ™Å7Íã{EpýJD8îr¤U]¿«‚Š*ó$CÜ%dì÷'@ôs$—X W¶—=k§@\3m©Ð†Iv)¢gœp¹]cù¢4¾^ìëÖ• -Ä'®<êßꬱiX4‰=6>ÇF»ªÙ`_Ðßñ‘$]œƒgW®-eÏ7±G¹°´Ê\úµh8Û)]0 j†â1^ê“!ÿÊ3Þ U_õZÈ"g…ÖøPI èR°¡.Îà ¶×ü"ã•ðt™Ø‡]Ÿ©íŠKÊfOúƒ!*¥Ã¡ÏFmíEâ6.ù¡Äqµ!léW§•š+‡3è¬eeqë KÜ¿™OõÏ$|JmÚ‡Bµoþr^.”šÉ“sP’àn8;5ãyAA/ŒzÿøP.œ ‰RûJí6lñÉ®‡ú¨ ð‹‹¥î'Yô>¢þ‚C‰óûs‡ÿ,ädy\„¾|Âë‹DB°Ê[лÊÎ R2.Í+ãŽ{Ås#N‚®è€FŒI™‡EìŠàöe!•G½ã.îWð ï`;àãžx5ò699äT˜MFãÑ’(w{xÙ›@™˜·JcI‚oÅÞ“¥“ ÄEc9ˆŒ<¢É@tg!XV7 œ—½È±%Yȹv+hv“žÄ‰N\K úãö¢@îÞÚðHØÏ\š.…8ç$ÁŒÝU½û§$|™ÌINV*"‰‹bC £Î_ŽÿÓ&|½UïJÕâWj¥AMáFÀ]φ|>ˆõ4¡?¹êdŽ?8öñ>×φäœB¤#JèšË¼Œ© %: 801Nó„P¤=ò÷÷§8DêÜ•8kŒ³Hfe‰Uï™V=À¿³iXSÈõ+Ä÷üé_¢wÌ:$ ™öNµ†ìôÔßéL÷"¼²¾¦¢1ÿ¾I›úþÆ åá‘kQlpba–ÞŽ%“ášËä5!r^í7|ø<6”=Θ–3Hîਠǿ-$qØÊ‚.Ÿ·`ÿHä#75UsAèc°Üaµc³ýËòƒ\Kg*AI6’ï` tÌpx¸Ð‚1væ~¹qÌYDZ!çÁ(ă»sU˜Ãnipûí¤èÙC¦X™}ë28Ö×ìØ}W<ÈmØêe¼p¿± Mø"žéª¯M_ñ¨Cn‡Ñì%:,ŠÜF6¡½îôÁ€Ä?Vü”y)õ_DCñ=þµšh˜Ê@èÙè_\+FÙ¿ÕãÖœìîäP¡1QxÔ+ç†[¾– “7™h?n »ý‰š¯åAC·™]Û i[¥yìß"Gï8¶ß{Ç88Þ͈ÿ™ü/sæ#É,‚±Ü 1 PñÈyMé2óñnüHÖw0³aÿ\„x×Ãû©å°° Ç»¼žu<pê{ëGŸ ˆ9ë‹m)c!¬_-Ω@_U€ueÔfÁ¦Œoúé þû^½?ï?zëßé‡ßðCå¦w~þû" /_¾Ó@ä÷L¾RŸ£¥7æ$ü¢…)5 ƒ< QwÔÔô;Kî¹ö±iã«v5lPõ/VÀ¦¤æ0Èhv€Ì–Ðço{Í|(œþp!•s¦ÂÇÒ+ 'jïjBnãñ—Þ2œþTñg ¤œƒ¢B¡E+y‹BaÁdË8/¼%:¯¹ÁW-«öóF§Ã¶ªÿL.õw’•h0eÈØe6¦øôY»ýŸw¢Ïß[Ã#u£X!0ÎÌy¡­.Ÿu R(g·[œkñè­chnt­ä•?RÓØ³ ÷kޝÂÚçÔ¾Ðd(ªíï¡ÞlüL#ìN%h¥ýËžj'nÈ]í=’°3V ‹¯+w!ÎFw箨û®”tíxóB?Œk3¤çc<’{šÅqR|RÎó2ú¬p‹B´¥:Ûsêb…zcíEØGQú,ÝVC'¡Xɸo%l¤eƒDf[:%¥fn³þUå»ÅºÄ}ïFý2Âó%[Õ‰£Qq´ˆkdk3¤äPgßPîM õU6 Ö\ýlîFFµßbM{«¸â‚çj¤ŽXµ»?xIx¥†Àrkô¾ü¨ß6 ÁKÒ×ÍJ*P²O ‚ÉmàM ž©ª¿PãùH2FrÐã>ÈìJc!çEÒ.nu îéêxa§w»Å¨° uŸÖNäZÎI>=êAŸn[,ÞNééÃø/Í»†fC£ÑxŸp7 ËŒÔNœÕ²ðÏ_JŽuAÊ´M¬gØXœÞ k4'tuœ±Ò‡yºê)õ‹‹:çÇ¿Å5jÇ—\ +ËÙiÍ–¯(màçêðœÅ„· ÌØ…|¢‹Æß¯ö•†7Ä É8vÄÏDL»Ú_™˜Äö§0¯•÷-ïͰxs]íÆÖôDm›Ìq7¯ko×ëA»–Ï _Ÿî[?ü£A_iá^où®­náRÒ¦w*h3Œó.Ç^TO*¦c†Ûqã ÓÛàÄ×b]HÅ€#Ü+Ú$¤ú®ÃX5ebžq|&¼B¼›ƒ#ÍO.ÆÜ—$AÜ/¬áàƒv©›”(yJê6Ù  `®%¤6gl£h. F;–‰¡SÔâ¼h^ŽÕù¿†n1z¦öùfWãÛX»ó_nY÷D¹1»Ýc‚VŸ\Ëîƒøp›ÏǃºÐhhÖ}fV•þîÇ-î1Ð õ?Ó*N#íFh´ÄÐϺ±®úÌû"àu¶(ß[ŽÁæòf;ITy06¯Y•E³œþït¸cèjøJ%atcÊe—èO fáÍ:Æ1¥ãÙ΋ÿÞÙþpÉËfó˜NZXE=Z!µ9S * yÜ‹kaÜ$ ýöJ¸_¾ŒÌì;‹5céðûsP<µQ4ÉÙ)>²€FO}J޲ÍÃepŒÐÁÑæG—ÿêñ³Õúíò‹èX\Ûp¾ÈÏåΜíÿ€'gÖÕ?Ò…àV’G\˜2d´bÿgw#´©”V¦_‹†Ó2þql·Áê@µÙ6–Û`ÍmÉÄ‹Î}–ó^¸‡´.‰]ï¿”ÿ­|¥¼öŽ€bîåøšb1Õ1¯w Æ©(à‰ýoäÑê».¶½Åb|Ù%Dc!…Ób946 ,·Z0îÃÈw<7 j†ÖÀÐ"TJâüòòjSС¡Yøâ晜ú2Y”¬Bt|­d8 rúã$X†·S4‰]ij 9}25ƃZx-l䈧½Öê¨MùJgI VÏ|»ÖbX‘š®BwÄ)É¢Ïc"è÷ø¯úæ'^ÒIˆÔúÊ=@î…X1Íñ° @á2í|ÍÖ5×,P÷’Æšº-|3†Ü‹.#ìΊè–âêøA?šìU†%;®â‹Ê0ÄÇ+À_œD£¶XO ¿ŠGjN\´°% lú‚+c¹ Ð`}ܬ6úóD4öÈýá‘ZÐ ”ú Gzd/„ é ƒÞª…_ï)³ùÁ  ÁÎ1EÒõDt§Þ=ÊíTVv ðù Cñ‡4¢¤¼g_^Y_Ó,·F4Š’~i„’y hµxVð&ÖŸØ»ÿ™IgßÒÀ,Ú–´¯ä”ž“ª(Þ€G:HKÖ &Q¼ƒ ðY‡ÇAG ºÚîÅJø™mÞð3¶ ¸ê²¢u=Vqæ¶Øn ª¤ð#âæ÷!W/Æ+Æ(õE#ÍÆøÊZ}¾7ß31°iÀ±ò$¼ˆÐo@Ó×ä¿ïú¨Vïú¡ ¬ 7¯?;«›*|ŸQå0ö¯Z¹Í¶Jf9ô„±ëý¡ãÓV‡âöÊÐÚ¢´^W=ôÆH=O‚ÐìòŸR ç^ûŸÉcVþQ7Œ…‚c³å¹ºp¤'>÷u=¬†Ã’¸ãWãéÓ|ûÃHÝögŽFÎvžÐ½¸¶c‘õA£Î}?×è&_Iâ»'ø¢²OÏÝ,V¾Hýµí¼2R[Hk¹¯/»ÝuJÊmõ¢$œ?$Êø ÆCCÐáPïÒ…‡Þ€ñ늰?ußÙ¾,0}/®/:\ }óyU¡Îg1æÔê\8n#Á/f»`PæâU õnXåpj­þ2n‰ËÂ9Îá8YÇr&Á”°~+åôÅ…†‹Pt$8 ÃS%s¡Åö,·Pûç32ÏÛù‰ îµâ{h´³§(ԮǸŸuC\p}F÷Fê£ÕçƒVâQ…³ÛìIÇÌã« ¦¥ÏFKFK² ã žæúÓ8©mŽÚnöq‹%©´ó±Ks¡ «ÜŒ_IþÇÖÙ-8nÂ`ôY[qÔbpAd—}úvU‰OL{1“sd‚±ãø‡Ø¨¡ÁÒ¥v–¨£o’'Ô.Ñ·ó‡s@|4ˆx[5íãÂÞò‹QªÊÛ°Ú(ñyÀò¨!‰"ŒãìëýÅå?Ë™ñ\6Ñ¥¶hº›tH5`ÀzØOˆ ¬UK õ(=ýØ·ÁYæ©méË qmw\D¤[ÜÜew™ð±µð¢.p<ú µ!:tü|„Ú'mËGð˜PHã/-"5»€Ú‰ y=ðàÑɲ¸¶ÉAÅoZ(|DNÙ­þ(tºŒÕêñENYXGTtoa%Î#“cAµgâ"Ó¹\ÔŒéKœ<¡ê\,°ú‹–éˆQäU-yÁ´Óѹ- ð²I—}ö»¤šSé¬{*³åúàœ@ÓÆq/«¡RN_gcÁóôÈÑ*ɯ#‹ë“ëŽéÚâšÐÜn£È2Kƒß7CÍ3Aå„w”«øÒ®f0Ò¾OØ.̬“QKwîâJé,u\oŒp‚á©ÃPΌιæE©É;O“£–z»œ+ÓqÄ)H!æšýê*k.W5Èé«¶$´´ .ø®è¶‰êÌݾW0´,³Ž*íVu˜)³›‹µ6£É&yº>ïÔ¹G['#+_D›‹ÀGjayË«¶c+z陜I«9‡‰ÏzŸf#S´”b(´Nÿ!y‚ø:ƒ~(jm»qž{ÀÕF=rCꯨy•–ôµ¾æÐ°¤B —x:®ÆBݸܕϥ»^C€OTù3ÂåZ–%`\HP¦v‘¹\ÐìôEŸ»Ë7Íaú}H‡œÎ(w¨0 P`¬†¯Á2—u *Ô1Á=Ôðб·LÇŒ•Ñh2Œªj7{xÖ\{Y仿¹´ûËCBåo-“š6òƒ¶¥t3.¢û×v;‰Hm†Ët%‡› —eíCE\$ ceãŒÊ_Kø9˜û½«l*sÓ_5ÏhºámB¨;Ÿ”‹îq]@|¤ éo°/32Ø©ˆÃOƒL$ báõ ±˜O h[ sq=ržÑt‘Ý}î5{j¸ «M»WÁZ j©UÝe|詜^²ß©ŒCôÒÇ|äç¼ ¾Ùž o·”Ý;9­ÜðL¯âJL2sNEL¨¨ñÄ.á£/)3견v&öØ«›ÈšTÏ“zw©giþ¹ÈX)WKçHBËÂdOŠ¡¹äÃþÕ„¢ðH¿+#rµø;•³×›Ì(5™‹D͹QŸ‹+ˆgY@­ž³9_ïiº´q2&u©ÝR6·½ª#d™Ñ~Q°'éÚw¥¶jžO=ÚúrkR'ëT¬}Îyøølѱ~ù~¨œ‘¹\ÐÖuÓvÏsam’Š@ý9E×OˆõàÃGCÑF—ßÞ‡ÀÞÚV¿tNðÏ*_ÉÄ5ÛžÑãtt|eD¥ÃüÑçîòMóš~ÒCå %NÖô…Q—·ˆ p•E½è8,m!¼k¶“Zx`m4_Þ8¸@»ø®éF%µ–ºµ°¡-`œŽÊÀÁ –'¼Ý,ÐY·AȘêUÑ•GE¿œ'l«³êÍ.Ÿdd§zÜFŠÈÜM÷…ˆÔÑݤ1VqMEÂN·~Ñ飲CeY'CË¿ ö¡X”ŠÄæ]—bH€e*éCÎØÀêY[_…h^õõ¢¢§r®Œß? Xiu»â«\¶Ú,§Yü×§v[aæû)¬gÁ‚p³–¶ËMi9—ÅÔ²6 Òf4¡hhÇÊ3é7 ¿Õ†¹•dgƒ04´#c¶Cž!Æ?“N0ásá¼ÈZ ÅÜŸ¤LŠ@; mÆÇ®ý^ž9m]ÍH%¥"L¨YW¯ËuQ³q \Ëò¾sÊ»…z¤Õ¾&¿sµ1c„þ ð”†éìØTÖŸbqlÝONÖ•`J©/öBz¡À|¸àþÓÍçîâŠ|Jê¸ÐS t:ú÷ö!·Ô®÷´ÄœéHz®3ŽÎêOj±} ú‘õj1ž>žü‚÷®„FðþPCKÆ—ö¢N×F‹âîN‡õÿ$åÈüš.Õ?$RÁÁ–§9%m©›mqñŽAç3ÊM= ¹{mwä'^)/¤BXå1ò¡á.ßÊŒ¼yÖÌHn÷ø^gÁ ÿܶ–÷Dz~#PKçÆÛÂáþ¢ö¦që“ÍÐ{ëè¦õNEø0ÙrOµ³Jð™N°ž »¾]IK®\$`ž.ÙîÑ6³ÁÂ`²dú$Õ®Á…–±Lçvh_»«pù†…È\â÷rÂPôHåLÙå]sjyº2½’2פ>àG"s-ÐSÂ:Ðü;‘ñÒ3H#gë 6 ”:¸i C5™qö1Ò`Öxm¦èU‚MöŠÐB½Ç´ªmBFÊA°C€ËwçcÈÜ(WriO㾬?ñ¢W‡Q4œ÷“ä=ÝFUÀ(Kj´HZ’e?„o€ÐýÔ–2LnK‚¤&Ð::œ ™ ûˆÞ©üùËj«ãz»ÍVu´Aóšq©^øp”U#®A¤¥‹È)/ã²ð~–~ {)rì¤B‹¬c†Böó³V¹»ïæ[ûpËîçTdYmaZ™0­§ ÔV™€Â|,éôƒbµdTëc¹Cñþ‘2¸‘³¬0fP³$ÌÆ­Ç3¸XÉiÝ9Šä*T¸\&Üɨީ8¶|f/Þ½†3Ž¿(y—÷:g §«v¦ªDö’§”O" Üì…Ëe”½œ?–­¨Oò){Éœ2(²ÀÚbFmáM^Šìåtüi˜§–¦¼IžQs˜·Ã-ÑÕ`¨E?D{¤6Žb¨Ã£9f‡rp.PQ4„+o,3â" —k¼ÁW„ZÐAj‹Œ>,Îdàuø|m~µ‰¿Z× 4Ø>8Ê•ƒœ©9½F6Ô%âü!ǬuƒQ¨Ùïé–mÊtÌä¯ç‚<›5 dà”wËsó¶©¶> ÿ«¡®ýÄýsàP¸6ð¸ E_u=9¤¼Î€yBš£^Cj‰Ì] Š*«VÛZ-qZĵ€?ˆÛrµô•:ûï ê-•ãÍKÇq8‰·«:Žs…©tâÔ…üBXïß“ùÜ-åÝ)Á·Âßʆ¢öT‘IN>2Á,3޹Þô`RïÛn 4Ç ÁkƒÎœ6C ñ Ûš†ZÒñž]»¤ìüsaK…!$é UëIG½Ÿ:Êé^Vñƒ¬NƧDz óm¿ô¦{a•r¤mR§ œîî¼ÿÒœ°.´¢Œ0u"vb0†¿ðW„wÀuÚOÈæ¾©˜Å´>Œžþ”«C¯ú¨IöM,’Pkš®p£~û'nî„ŇapwFŽÃ\«Æ*uµæŒqÝWÌ‘~b»ÿ¥¬q{r'ÅœLÚ‡rmôê®1ë´Â Û…/|”+yâ7¢BØ¥åRAø‹5'o†ï1sÊ&N('üuKéåFámÝ»Á˜ö ŒÂ]u­sâZ†—vdÉ«›wW ªA¨3ÝD[ܰBÆ swC0DcŽÖNØhgi;bbÔŽ½[xŸXƒ8Éb®3ÌP¬[ѯFóÿ>ÍAØá$rƒerw­(c16ÚxaWðÕÂ|“±+=-þ¾èégB»__áN–8SFî’ŽÏ3ÝÌE艳)¦æLû¤êÄùXP†ÜÁ™vKSÆ©ˆQÛñ¦®î:Ýùš„I²Øo SªsTYK”z/ÉuÛ ô¼rÊ ÞNÝ\«IÊÝ©“ÚWÆ*c°gzâòã;ÕaÙñþƒ?!’òÎéαÐ-BÕ$ž Ö”p14w hÓÕÝè t$úŠëÞÓ‹{úBoȄ۩”!¬"t׸n¾jW ›9ð.x—Ãk²ßÓù£ýh­åÖ{ëÀëgß?ôNYc¦;C5qž)ÌÒMw•Ÿð2u6âö„vR)øO¥ïTÓ㙾:¯¼ÝEª”{úß$¨B=Tï §^ri¸müþY­ßéqƒ†UWJB(Ã)ß~ûÒHæ87ì»ëƒEœ«—ÝÇÝâNíÉÚyo:$´O ÒX!‹¡ý‰2Ô0©ªþR¦ m?pâÉBŒØ5e§7ªñY®ȈØ1¸¬ÁèTrB.¨bfB+CW•êªÅä·+.XÆT0±Éùp~ñkæ{bqþ]*:8ñ¥€ð6kEªª˜0À& sŸÜJwRÂûi•J1ž?ÑdFØËo€½xh'Õ]¡>K'ЗFªª,Ã3<ÄW)ã‡LªŽ³|¦íkí†Õu°÷êÛãxɾ¹#å‹}½_„ø¢ªj½Öô— ·sR=˜ »ÆÑÔ/T¡§FwÞô9 U¥k|¤íKéiÂ2Œ°ˆÆ ÚfnVÃËG‘ŠŸ¬‚}÷åí–÷£p3ä„MߘH{j|Ø÷ ×³—óÃkáÇâæ6oc&~§aPê—’&:¥ ´ß#ÅriØ~.ÄóT¼ÅþÔˆÓôHyW"“ØFUu YFÔs«Õ²ßj‚70h‡Ø¶_—@1KU ¡†E³F;c) âÉí ¨É (þ.Ukt˜•RùG,aµñ@xª° \އ‚Ì>NPlÏòR™º—ŠvÒ˜/óøtÜÎ5³‰öCëØT)ÈK#VTé0ÀéÂÇ„Š{9¨ºRkŠ¿Jý= bb2&bænŒZO_¤¨Çjpª‘vh׈ë´a¥´;2Õ@/AÙ•ª“µã3D¥Kð‘±ÓÑþa0»H Ýép[„e‚Ævtk cb4'”~EŽ¿ÈÉòÊgú¢jH©•«?}ÄÑv-¥ƒp¸•“Œ<õÛlÂÁhTÊ$_& á(w”íÉé0‹eT(»X’vÓªê»C0A@dly`ÎòÀ“ L¤{IÖ‼»Fª®h|¢ 5O•jòB@õ¾4âÏ à¾ÉûG±ª2ZdœL¬g!S§Œšü«k¤lZU•b[„ °ÃA˜"MUUA)‹¢ñQ~QUí×ã†oU¢êJ]‰e _Ãc‚Œ‰Kfµ¤]¬~ÜÓÇWvà{†¦ã„È»kzïåt¬pF¹F™“h–4âê ¸•nÉ'rJu!4®®Ï_"JØ ïš j|Ù£åT˜ ×Z^¥iÈùð.³.UU$ D×®ø¨íúHÕ±'–É•H¹õâCˆä€p{ºÊÌøžÎZÉfö"U¥AD“žEÁº#¢hÄ €&vfZÿ¸3@g51õÖ`š2¹µò}{š`¹©šÁΘ&ˆƒ;(9FÓ_¸šÁá¡x¦l4\½“§F2ÉP|fp+gèjú&1¡ÝaP'1`7Ñ£ðð2ŨËã"”]e8Ù¾.çò—)iWÅJÈPTyi¤ ÅÎ,u×ø`¥­¦_]×ýIx·ÇjG·\^žjÍ©+`A@¸?NDå<ç?ÌKÒòzxLSl¨ŠŠpØÇÀNÕiŽõ'Ìš8+A÷ÝDˆØ®ëѬ¥+ï÷üð´|wȇFÊ·ÞÕG:®»êx¤Êítèü èI&e'rà-(ÉÊ2¦Cë†çe¹å® Õn7üï§B© ˆÏ\¶T_åj·+ÛäL&y»ûÛJÖ˜*c‹R6ì¤[©i‚wõ¼'²Ìu*Þ¬¿×]8ö ÞVNòé$êØB„ùÜv.æMaê7ÆŸX+¶Ÿqï÷¿Lœ²Âà~׺§Hû  (o€²s©ž-GzåšÄ‰· $+s«•p¾«Ü·îhk–1 Ã׳<8¹€RqÐ9ÚX_IN]luý¿äºø1]ÿ¯çmå$ŸNÆêµÓ°}¬V§¾ô’9ý7³öW’ZwÏÛ§ÿo Q?|åW3ÑÎÀhæM Ö`ÎLJ‰¹~ŒÃ¿[=ܲfåä“? *R qÂx ®—ŠåjH?“¤|è1ˆ?Á?)§#êXÈ·Ií4Dƒ†C¡”g¶àºéÌÉ)r±·áJ¼ÚÊK¡Ö'¾Éq)>tŽ¥28‘ëåjjd„6}L#åþ¤:Ë ¯õ'œ`€ì$QxÁ\:ÆÝ%ltXZ§s™Áh”dbÁ‰cŽ“æ‰Û¤ÉÏŠÍ©ìiëC8ÍÄZnØ4»oŽaú™é®ßäÕ.M2µrR§ 'ÉÊ mx i§féÆ4]6ý}Ë6 ÖÞ\}a‘`f…¢©²“)§ $Ãù:•„»å§ [P’ÉAu{Nn}Až5K6ò®z™šP.8ɧ“±ú¶˜7…±[]$ⶸf¢ÁÈM»_j͸1è'ésÚN2åÍÀ6tKìt?Ìv‚¡Jð(G'NyⶤÛØ/ÉÁÉaStë|œiºr?#sj÷ |ù SNÄis¸N%¼tbuŽÌk$Æb¯6Mã`ŒT9h)\K#çx=))”F1ÕW#ן3À; *eǦÐ;42rÅC¼RM–ÃŒy›dAÓ\’V¦ÕÔÕôuÓuZ¿¥¥«²71¶§õ]·'útn§ãP8ËQðÀd[­ú÷5KwìÃN“x3|V»~„‘O'#|c]ñ¶ñΘªsVîuþIÕ•KžØúÄë4ô:ÎínK{ôrå™±Êq…NG©q¸|$’üOJ>+Ü}6 oÁÚe^° å©‘½×gÉ{iÔ¦©~U k]G¢…Ã]Êl¥¹©×_’ÚÓÍIÁ9ÉDšÄÛ‚(FFØv.ŒÉ„‹Šá׺ïô kááiå}5u½Ð‡ËO$F¸«­,cu™ZlNm+/rÓ«pàÐõʸ'‡µ},iG‡À¹8Â9I grÀŒK¥@N²šŒð6-ú¡äW«ðÃ̶­›°ÀÆýYS¶ôR?e6nê°„ÜÇ=IÚñ$K°eVIÙJa…<‡þ“ì@&Þç@ΤrR¶F2UÿyuIV¿,jîåÈ©?ѯþØdýâL1:p6¦@N‘AWnö ‰ű“zP´3 ¿ÉÈ2žðQ7<§ÉÞpf¥#0iöîAÙê:æ`”uãˆæÚéÔqŸÃú&­»ÓI¬•™Â{ðÕf!ßÄùí#ù—®³Ë’]µ¡ð{Æ— ¨luY) À§/=ú´·$DÝ$kÃþ¶À€ñoÛ.ûEu”¬Ô©3.˜ Ljz¿3_8726*¸ itY¨2uîšRrÊ[wLC KÓ)¢^P¼Ö’;Ä‘"î½ÁíR-bÝâ; æÄùZ108wqÛN§6PÙ¼†³4 åqšâäÖy%JÁ%·‰­Oìcâ;¢Õ‰i„A¿Ýjü}ôƒÒy5uÄ5ƒ†*:˜½{^0è¢SÄlººxQž›‰ýÐc¦•k±c}—Æ“"ˆ&R kÍÕ„l,ÿØá,äš&$Ï{vªjЊboN>æõ Ç^šåô¥ÌN× â7.|‚ß\ÏÉ¥v\D¢´rá„r˜¦ø< àYM,ã/x…â ;6Åî”ÊÉJc ¬<Ñë9ødƒzR2lÜœd¡3°;Ú"ayÁjÜÙA¶ J+§.šêØ­Õ°ì­–¤ZK–IeÁ6ñR,§ÁPÍl*ÛJ ¦á&; ká8¨–4v¡ìîjFZ›/°¼ÙáÍq%JÎ0Þl*Ûi¸ ré¹ËÕd*†´ì¶³z\!’dçI~.ì>.RÁë­w͡ˈ¡2ë#äŽÊÎõ\™:ÆF~Ü ;&W²ž‡™²y¯Ã ç“‚Ö6ï9ãÕ}¸mº6¶£D÷VÄñ»Òv5,òÊ·ÚL¤“ºR6‘ÍÁË`}ÕíPÀöQ%?ÉuÇMsìJÉéëšè¥$;t™±Ëk.[áÄnÎÁIèÃmîz9yá¡üzjã3Æû7Ûüf¹0“÷Èrö½c}8[R%4Ò‘è Y·¯·¦¼›VÕ$/VwéÁYkm*¡s29-Sv®ÒY¹ 9dwJ]6¥&MÁ#|š HéÃH>…Õ!‡£Ø…Û¹p¶í,<¯\§Á¶`ŽwƒÙënEývAÊÍÚT4´4“¢ûxÎø[%ÉÕ@ß7dSëΰÀ°íêºÛüøë$†Jשð›ñCòà4pvþÃú{™ŸDÛÑéʛӋþñÏôüúN¿H” söÐ ô:ïÄ!¶‡–'Ò¢©´Ó¡+¨¼©JpÇ û·c.°jÊ®]UòÝ<ȈÀUMØÀJÚÆTåçv’D&XÈ ê:r޶— ËŽi8ýnj€îuwž°;E%½Ô ¡È*X×÷ ltƒ“Ú~›Ù(“I¾u#¤¾É‚ÊÕwºõ¸KTw¡I’‰‘g)V9ŸIÁè-øà*Ûb¬Ð½Ñ€Ž±WéÊò@Go ­X¬ŽYûK²‰KRmÝî.¬Îúpwôi—£ÃK—JƆXySóä쀓Î0]¢ÈÄTZ£´šÎ˜u˜—°—W‡žr] êcµ‡Mc ´.æ{ Ôµ¼ñºŒ†Ð,“( "4‚æ  ¥‰u†£½÷AO¡É-˜ÏàºfTÎÓd6ÂR3di§açZ’²Ÿ.Àôƒ2ÎäÍ–s ­Fú½D¤3eµi¨âÀºjž ­÷19_H¸ªt“¡ª"¨WééjS'6ÙM“—ŮܨB#ËëÁɨyaT›Ê¦³Òa]ÌeÇŠX²P`†êÒmå·bK #±Ý#^㚆“ÏX—Í„’ƒ鬑Nl*­;õaTžQKþƒ„*Yµ³êU ‹Cgçl£š´’¹¢/Ž}8&#ÔtÑ&£x¥$¿z/4üçÛüK^·”«Ñvß%±ë^NGü@ ìv°®Ø·ãt'‰É&;¥ÉwƒÀÝó¿®'z±lÚ¤Yéî¥;+DMØ*\'Ç ¥¨A¢ÌçZû‡íV#.ÞÒÂòavòrØ3¢–i:›•Ý •å%¢åjjlšŒ³îºWùú¢Ê À:™hbH%ù=ÓÿD=Åá„Ë›2ØÎ¾„fz7ô;ùÆÇó·Ö'^™Õ@/*©€’¦¤"?¬PLž÷ÄÔ¨uÍhír½‡¹½4ͼê-ÊÝøqÚáŽ3¿_-É4cÒ'ï*’48îiŽ$¯ÛImZÚqûÄývIh+](Oóós»~»Cˆ*=!hgÜØJE‰N‚þ\„T+»Ü7×{ê㘃N¹™9ß" i¾s¤‹ !ïuPÆ$©k ÞIcN;)JRAàŸ7¡ÜuOu·‚ÿtÐ-Ûq§O0FÒÊ < 2î& =Šßû U%6É;WK‡|ImFx»‡b©|‹[ÕÓütm€Ä&­MHcbžqaÓçÑ^*Õ„žxHÝ ñ£;㽜F¨„=›":§Ô¼ ŸB»c£5 #†Ãà¤l„?›±Õ)è[xc£lúÖ@%Ëi^•þ|õŸ¿Ô5o"ph oÁúñì*Г3dØYVHɤRéHqUÂŒNJ#8Ïœ“}ºRUqW¼*+|ë^Xò…5ö­í¾EÓüD½¨O6©Pt»m„ïòí(0-1´WNØ! úƒäW“fÚïxõÌù¾qàèó¯_üv!¯{î¡'ÝV~“[ÁãzÉm ^pãàòוN‚×"±k;䆃¨B;íÿ7I: %ÅÒ§Isņ)úu^w 4AF¿£ˆ $¿-`îðŸ+íŒòYG ²ÞÔUywõnªå¤|9w¨ºFu·CàÑqÙ¤ôaÒÛ:¸k7ûAj ¦x!±÷x'VèGÉFò‡ƒÒÎÜWÈ·®p%¨° *=¡ß¥öc‘&$ôdWëTØÄàGA k eV®&Eµ©tˆ`R¥§C5í` 4“Cµ›¨õ™H…“jgÕo¼UƘ«f~òÓ mø{È qrŒÒf²Q-¥~38è ¨GQEE8Â|ÓÓ!½È°XÙ“–«a:¯ÝD¶ ”Û9©É¼”ösw‡²QÚ(3¥—ÕÕ«ZÆ—àr8kêߦQÇ»ªl¦êÛFaH—‡h¯Þ˜Û7¶¥NAM¸ ¥6ú–¦˜TÊ…ÙÙÇíÉ  °=QO©ÚtyFÖTó1ÿ†…&då]E:+¤¢š7vÝ•RP𹂰£ôÈXK)ayA$k;_ÒÀA§i†â2ˆªGDóDÓ‡$vBÃÊŒCŒeëWµÉš‘76 /•D»*›à4ÈÝ6,¥žœ±eW×(ÙÊÉŽÍà °äçt|JÑ´²¾j®ÚÐiE«H28Ut>¯‡Ê$„´\ ÅV6®ÖMd3¨Ãg[¿Kgˆù—< Egä…„4}²ê¡Rw(›T“û~ëÕÌtÕÞðu%hb“Ö䥜q:a0Zð¼?°–r|Kô‘Ç_è OSÙLOÓî‘ô¬ÔXµ«ò®RMT6•¡þE(p6áÝàiê³–Ëv_Ý•MÍ“ðªö03ƒuÉn d‡êMàÀ¾¬Ü\¨£4×ß_8ãúUN¢Þa •Ñ>tÀvÚ“d¥¯¯‰ WÏALÙH‚PÕ >2îÒUªìì¾;ùù¶;ªmK ‡}ƒúò·ªqÿ`%ðáÅJ®òðüêaÑôÏ€&ß’ÕVR‘ÍôeÚN‡®pi@'ÀÐújw…õ ª;\¡ møñ2òŒ1xæø¦~@p²þ+Y£ãו_*·J;Uº‰l7ä«^í†vì$· ,Û{ð¦´W ê¼iÞVRQ¸RÑì«jÖΚõ/-šT°=;I~›¦䞀oà ê Fr™?Èüôíü XìFòbƒ¬0Ûgo˜¡šVMLÕ™wèô˜Ð EW´0q–ÌÞ'\5¹N…Ž Ç„Ùý®)%U Š ædÕÝ«—"ëS*à’Xõjå£ ™æ€ Å4Oþu%zSÖPÞ¸,£¿.ÕL™ËI¶N„ÆM¨l­˜ÒOû@BÙ0³æõEvõ—Öaé©‚KÔŽ[q_è–aùgÑ™!óZÁ\hð ƒW OÀ¢„IIõRå¬RMîs$@—.d™"ÜK©Â0¶ðíœû]ËÆG5ÕîªëbCÒ¹ºb]qJÕ:z!IwÝ× “¬zã¿ñq½ÿèþSQéKÓÝrŸ÷àë÷\kr ÓIU}É¡áWÇ›S¢''½> ܦEvÞÕïLÙH(kÖ8µfÄ)yPÚ9©]‰‚ê‚#Ãlk˜#qÄÛÜ#^®~Sß%Ñþ¿‹jÛLÈ}A¹Ö¤:™ª6¿ÁòÃpÒ¿hã*Ù­®ô£3õ ]R*@îÜÿ<)<Ũ´c[±©—eMíÝäιHÊ0¸Ž+r`¹šš4T±yúåÿ¨&2!ý2pÆIŠÒÝ(Jí4*V ‹ åþ}{­oÞâ¬OÖô¤ ðh7áÝaæ`{T*Ú^ª»ì{â•­À³ä ¤ÔLÚ]e¥Îœ$k¼«TˆhJyc%ÏþªÉÔ7áê]-ÖËò šJ~NHó©5¡o5“LØô)Ro?¸s|[¦ u£ÃÞûrDŠìzóŽè49Œv=AäÒ@ÙIöËz ü²XæIø´ºví3ÞkÌ|¢CŽÄÓx{¥Sr?N2¼›_¸ã^¼[þË5Þ°<1’Ñ­Ž„žåî‹m§!dÊš[a§àhªLÙ©XÅŸØ-[¼ ö6±f}Ç:âoÈÕyÏ8Gl7´-8,†_žX0º‰½ƒ16P@3Ðò|–êai‡k Ä&jQßz¥“:;Ê6i÷`ØÊ×: ÿHæ@“Œ€‘—G º*“¹«)ŒäjËäúº+Öa$”Ú”Æäô]lw~d¢;œ?|Û?‚Ö¿™wè!™¥ìªõ…nÙŸÑuå¨×Û®$7Ÿw’oŸŸý¸àº¦\¡˜}‡4q …ézÉú~âz3Ò¢)ê¬H(? À„&«hŠ¥U¿ÁN‘JÍåjZh7ñ©í°q©'×r ¢¾3´mû°cu¨SmÁK:nîW­¢j*”äêúÆ£à÷ñadû´­øáî´öÃØÖt ç5“tFB™Ïè¾"¹pøsn£Ö<¦g†âÓÂJæøV‘†ÊÎçye{ |ƒ`ºÛÇ)àvÎúö0ÃxÆyD_øôÏ›²2˜c—M¹ä r5ÇÀbsÀø† ~AÌ Ÿ«© 7#ÛÊ”>]‹o=Lɼ˜¿{ ^ø¡#¡#tŒ½–¹l‘#šòÅ?F3Gíõ¹D=´fûø`®¬…_úwRöŽÀá/HD¢ÞÒe¦­®æ:mTß”Ür‰|fu3R0+”´î-„]ëÚÍ•^*È>­³²l«³ÕÜ^äï8ŒpÃhrÉ»Œ§ò‚×h9má–Ç¿oeB¼X«ÈŠLžWÉpçvêÏÌV—?¬¯>¸À²Sö@J&°í\8&·±lü)jçÊŽ£;vI†õ‰õG¹pîOÎsÇ¡uAáƒTA8Ÿf'çóÛº+£°¢Ì`™±Ãæ0¨LQ"*”Ã̉;ŸïR)™«e;Hù§ÈæT2H¿\ˆÁÛzðO Ø‰aT'ʶ ¥0h'lë“c[YìRÏpê<©ÅÔae‹€ïò௦²õ«²r¢vÉ6¹;ïm•ìk[¥]|G ›¡Ø(-˜†Ul“d Ôɤ˜Ò…ÃI¿ñq/_åíû¼w/H¶`lKfOV2mª±‘5;í¿cï­Î•c¬~Dàs?”û·?&£°PrÚ& s©†ÖNÆÞcò‰M<¬u6üœÓðÕ'/Y¡¼×b•²µØ~¶o|…:©qï‹ý®²XÉOTrßã†W,zãVêÕ¦y—Ê«‘mqþ€B„¿'p5lì %/Hi5u¸+Õéò"e›ôs…£øIÅbUÚ@\MèÉ RwWÛïTOìO‚¯3 z#H(A6MÕņcówEò“о@«f: të«u#!¡Gb…í€2«TˆÞjŠ®jÿ¼ñ$ÕìjGPÇŒöaž®iØT²[°ÈjåÔP×”OHC±^ý]•’Cg#îxŸxŒ49âx éfF(Ehg£J¸’Ú9©;uvºfîÇJލՏ~õ4,æV?¥$xãÜ«±ÿAÆyd:­Ü‚oÒJfΓ@'«ÈfÚôÝ ¿Pž¥Þ¬“¼jlTéyZÔz{ mdBÔæ„±Yì\KàÃúÆ¡~ôÊúsÊÉ6¢zD ¦à¥ôÛõ½ÞÝ ôàêJOv<);~úÖJ6Ñšpp»ôϔ˛#ÿ1L'm‡j¢zB<#•¥ómšâÎì¯^·ã\´R•r}p«ËÜ,W06†VfF–é–‰„^tHÚ wÖnÎŒt½&Î*}ßEÞ¬)e„¸š©ßWu—8pF×z‰)˜Ò§“ö·ì4VÏ»»¼±c_(` ƒ;ù¥®êÌû„4&.Î9–v¥ÈÅÞNq¨¶îн2L#Œôi. |pŠœX¦ðš!X4¸Ìó©{9¥úMÃ`Th~tžP•Ød7ýº’†ÁЫÆ5;¨Ýƒãåˆ@ùa@Ñ´’kšÀ“Ð÷É=¸àŸ(Ÿ"Œysųͤϼuº*iäÌx/ï¦tÇ‘!ù¹ò¬µP¢êŒç4¯è‚RØÊNK/Ú„ÒtµäöEv7'š&ïò¸>"­”þKRŠ™,eÛä-KåoªÂ«/ø ŸY܀ɳÂð1ÁÏxêi<•Mldº¦±kI4F×A¤´˜ôQìš\êP䪊%dÆÄh¦þVì5·1RüÂ5‘Ié;`ëwFõùþïóLìŠF•5ocÌÁ¤4‚1 œ×‡ÏXƒDÓ”Ø%dzuz!”·¡ÚMЛ@Ô®–«´Ó(E.öŠuØÙgÞM¿wÊòÖ¹¢k;ìÍ:”PÝU(9ê §Î¾šø »KèQf‡j€×ÏJ;Ü])hV€—c­Ìû§Ó’á—~FÝòÃF8÷6,’‡ALíQappJ¦dðtMÃHº4ÃrÅØ•óÚŠìÊÙÄ‹úïØÀÍ?§¶£}#+rUÕ?ôD¯ÂÌé*·ÆJ’\ywŠyØDuâpšùÚ_~ÜϹ©²d+mò—l Rg+-ÅÃ_—ŽzÐÖÄ4Üt'´cјljwÞ|ÔðxÌJ5ò¹NôCQxçšÁu*tH¥tÏ~`¥Eq…FÁú‰’_%í®ÞÏ'®l*:zÏ;Ô4xÝ©¿Þ‘A„Ò’ ,Ò$™'^Ä>§+ZZïéîN0eD¤™ìå4(3š}³ XÚyÛ²]zÒ ¾™«4pò²^}Å£ 爵ÎTÉšòí§v º5¢Ÿ°tƒwœF‘î]‰ÞÀ%>Ï¥(:è}Œ@tªë¯RÝ|–ìokµ>.6:Î »L<€USi}{̦Äi´R)Y¡sþšw£äxÙ©{¾{5ÍþÌè|ì[Þ8¬(ä4]ïg´ ¾i7KÑËI9ÜPñ# 8±ÃZ"Yö—ibWÏY‹GuØ«+–•³+%§Ùß9ñ†Za]4 y—Á‰¶öII^¾aõVìóÊ»ÂÞ;Ša_Üã˶l£õp²O¾NÅ'«žœº”I8(`êλJ5ypJÃxR^@;è÷CÓ4T±`+0ÄK^ÑÌpLÓ”Õv¥§E’Ï­Ï–µB‡Î…„'m$? ;ð•“ÕyU†â§JÒ,TêË¡0Çu†rƒÈVZ÷˜|QÛ$\Â'nÍ”$njikp¥´¬)î¼E—^£)ëêUMÁæ ®¬"”& XÙ~AnxS¾¥IFÓ¥ËqцàÛžKz㸉ènår¹ÃŒLÿRžò@‰ã"׬…ºÎÙû”è^£@’AïyÊÒÙA6¥2cþ:wƒŠý¶!C©Ý$»¦„å”>’© ֻشàL?= ð^Vÿ¾äþß­­'ê¼}: W%$O+}ÓÀ°óÖô A\D1j§‚^G-'™õÏl…ë²…[m¹†²â n¸ÖÃxñ“&ô¨·½œчʦr¡ÿ'î ¹³Æ,,Æ;ì“…¬†jR²B‡àÕü;ƒ…T²ÙrË.WÍZ?°Ùø¥…IØ;9R”ÀX_§afÙœú1Ô4)á!i#û•[¡´š¼˜máL¦ójWƒ¥?»šfUrM¹£Hfvg'½ÑfŒƒap ££†xɳÝ{øÌ«ë«+^‘ßä_Ž(7È ycÕî#¦_y§Î‹“ …©eÌÎ*BÉ`£k'ÇîWU”j¶môž#VšÀ…&µ’/þùu·9̵áII%w(ŸXÌÆX¬`üaèÜÙT6>9‚¦éËtµ¥~º–×H­kx² ʨ(I~^dý8‘¦OìÒÿiØg0HÇ(Ì& cVí²8«TTÌ NRÂÎCM6ñ³>w‰qJÖ á8§ h‹6Þž÷i¢ªÜ:ÙtÁ”Âýá•£ž^ê‚fWÏÓÈÂxõ Ùœب¸Æ‘aµi¬Öç9WSè”pÄuFl*›6yyfyô,W +‰Wãy‰[@³Ç-Vã^MVQ×åDÕ išTª‰PîŽh8T;»&È[ò’!·n\Ö,Kßi¬R[K| e½ÛPsëµð)´˜X7Ë_²ÞHhάhÊ¡>rïƒóH Iž/Ù„]ƒJ2ZÀ³ËnŒw“M ¦ôéÒXKRþÈE-•X•6vÅð+V‡ÞÙ'õÓH‹ŒR_Æ8"9ç§Ñ•úU­8IJ«Éjž¬*ê½ÌI•&±ö={§óTÊF˜ ”Òeò:ÿ}1MDÉ…37ó‚­Léç§8%R8‹>dx3º˜š†Ó¬•߉%+â´²´óÃöñaxµé#-L¿}Lê³ÈÝ„wôY`írƒqbtÚeo%ñ$ÉÁÞ„p5õ»„WB'PZ00Øs»[2Ð 3¼GW£á*ù¹ —´“upfïÎ ›´"ö?æ ‰s,’°Ým,¡°qàŠ¯6­ås0d•jòu%% Šc;'õ ÙV¦ä.zÇAÕ{- ÿÜʉ‘Cß,m¬i2çË©YíJïƒ:O–=ø²u±s¦¬$d’L³+9àrü: :+\ Z2¤úIG¿Ršláõ+o6ÙÕñNë_ÐÂqýC¸-8&v¥*dÈ(öý€d‚Þ®Ñö‚ÔûÖÆvܼøZ¨a=éN-ðâꊆ·5ªäºñ¤’;Ww;o´»y¦Òïsö’Ÿf¹mÄwÙƒ÷Z2¢œLM¨“:/¸‹O]ÉuëNè »“Í {³FÒ¹sÐ>%…àË:Ù‘¦¸!pÃÆˆ²“_w›Ê3ÌÕÌÜÜ( ¢´r«Ã´á«¤±ÚÕtƒ {ÆWU0édʪ1U/u¶7Ã?Kœü—’7Äšî*æªJƒÈ£â…Iiu6µlTw;)‹e1M³¬Ä%ïFX–;¯le¸ZÇ`€p¥~˜áŽ=n‘dz–,”V–ÖÃÆþý#ij5üuNJX!”ž®Þ¼f”lªî+—6=¯J‚^»îã«PÄqø¼Ž,c^yŸ†)¯SËN1É¡\ ã.véï±;eÙ\)¥aŒsD ¡Í¤DF™ šŒÑ‡±ì"»AM²1~bÜÞÔΙÓË_ÎÞè€Ô­dž$»"$^ôi® l°ìnî})¥O—Æê1?a£Î¨¤ÓŸÖîÛ¡) #IHk•ÓÆí@ÂI²B5yPJ†:vœùÿB»EÛ®¤)#•ÆjÔd[Pîå Ç©ì˜0L7'TšqÁÜÙëžBÑ,èH¸ÎîË)ûʦ,Èý lyí´õ‘¤ÔGùk$«6²MÿÆñÎ'àŠ ³ÓaS0ža<’êŒ+¦†W޾®‘‘ø3v~+u_ÒbJ#ÛdýuÛjK…]MŽ’s.ʶ!ê&ãfX²#ŽëŽØ˜ÃHf·&wWÉ”‚9Я#¯Ö*Ÿ?ëô¥¹Ûìõ±•deÌnØá¦n‡3o”yá"[8¼]+Œö4\þ°hÌüH>];gXèM­dw›‘îíߋV7§'n’*g:±µ…É«C·¦»«‰×©ˆõ¶Išcßç+)ê{Ò9Œ8G4•Ôe3SòJ ¦FϱþiV(Ð.ܸÝå:Ý¡i牕Π“:F;¬õ&ìì'žåVÀ¨:fçhÏÁi„“máÎaŠì‹ÉÎE}á#ì¶³‡“máÔÿj¤ì²/È“KÏLzg€Åzñ"‰?2,„ÏK£Ÿ2ùïó ?Jø'ÐkÄUÓ‰ONïc9,xéáÂÏâÂÉJiA¡«ŽJki}$6×¹R. Ç$›–âU#<¶Ãp¤’ñ’ûiæ×b{ÔZ·cuž,ÛÄ¡ÔhÃëwvŸd)<'ÎXÿÜŸ]Ö¥_~XŠ@Œ¸_:„‹7ã†óý&uýàÒdigpggÁ§Úbe3Ë7ŽUóR`˜±˜®ü—P2*81`ᘃ÷(á›îe6âI’f¨¸&ž$×9y$ǘd>ÓÞó¬8ŸCþs¯—³VÙL(HF¾Tå‰yøúc§ ˆb÷W~O(YÑŠÌ£F4@³º’\eSÈÆII±±ê_”¨;ûªäk’.6ૉ´Ã3ÂãkŠø«¸û¬KŒ€qäüuq‡ÿÚ¸Bª¨`•d `į/é·¼î`·–ñ‡7ål²—Ó¯?7r°â~MÆ4Ÿl¥îÔ½¤¯DîØhíVöW¡‡±,ÜbâÀÙjLêcSþ#¸öýÿ¦8!­w*ýNÓ¸S»wñe¤íN·²a¼ÿz^’Ë  ®?ƒ¥¼&$n Æ÷®àĦÒ:(±êiuà†¨JfÀEÉUÚØ'öᘜjäW‹UJ’ÇØUû‹'a~6êIÞe#3?%ß!¸KGáGï4¿ÿèþ¿½4½WQU”W¦0X½PÃtgìw"HÚóºª uMt.¯‚ù ”l1½WUý$T0] ‡CÛÎN×iT6N<¹|˜ŠÛdÓ׫†Kœíª´GN:Oý]›GÞ¼_e¬¯xi yv¼ÍåÆWÓIêÖ‹u¿5JwôÊ·I8†3­9ë$¸VêÆ½_m¹fSÅ«,ÛÁiDÜÞŽ®»‰—b®Þ;žÒg$j;¹Çäþ Jxì¦õbÀwYÿ~[ìšyµ0Š×Δ2¡/¿P…4Ò £º›‘¦;U…'C=·K;'u£ò}úÊý3—³äð±2‡îd7ŠºÂ¶¾¸á|RîQ;Öt7÷ ®Ð§Ëa˃W#ôé¶ÕŽi°°”››L\úr5«’5ÝË©€7‘ƒe£vÈôÒ”Ù´ª~]iBޏH§&}PÁQÆIK~ªù.ÕÞÖS‡GÞ›1oÌ`(ö •3øKÓ^ŒðÓþÜ»Qò xÞy¾÷ho[ë;’í0áj€Ž‚0·ŠxϹc}hÖÔ #ÅÇ‚þù«Xs(/¬ù'5élè¢ÃÄê k'ŽáÊsšZÞ¼0Öe³W}òÂB«Ùc…m«kç‡ëá¼xæ]küƒ¿‘p…ø~g¤ãwîB|+!Ñë¼€r5Ð4ã"'¨˜»Ciµèg¸¾8±ðïƒ>íÃü毹`¿`²ìvЮ)W×gYYòÓ ÃY^ì¬/FnÓHÓ‘ê’­t¥d Ûz$“ÄÀ„ë#\Ü_"¼¸´Æê6X(/­­uyéˆù™Œ®ðfì¯Õlî²Wa°_ —y52'ÇU33Xm½Ü€þ}Üþ ÙLwI2k5@O d7ˆ4e•tçnt~xïêÅ¡Ì îÁåjZM·Ê;C…Tº4…ëD¹„xH†âÏp¥g*­y-øa*“ÒÝEÃVN4;Ù¶RFòÒ”+4IV-˜m>å„×Ü®i³I´[_]ÓG鬴—SÛ ϳ)^hßI×Ñ'î’ƒdßf,kz× À¡”(;É‹†*– yLâûÜC,‰«B™U¤€ªiVi&œþðä ò Z7‘m¥µG‰ÒS°PÛINˆa™bÇ +Ï’ÕõpX¥Ì^§æti[R\·QwivÉ›S­y§ÞÇÕ0" óœwk{è[°eSSzy•«…˜x`û݉Ãy!û•1¸—MÈñåAßòO$¤iw•m¥ÓpÓ:ˆ5źhdõîÕ‰1ƒ¨ëB‘Æ ‹>#¡G¹zSÜi%•j²KgàæB_«ñ×½Bûñ#\s[Ëi8 enèk¹]ñÞߔúïX;5ØzõfLþ ´+Ô‚áU’-03x¾å,µºæøÅîKJxìÌ@G‡§&4]t3œúÙ£h,³¸v–Ny"SF‘OëœlÄä8ËÈÌÞiëŠ%I牸Q ®äÀ3¯ eÃ.ÞL¥“”äI§û2S›Ë`ÜwŠ˜´3°;ÀqÖâ #®ˆ-ÍÐK&Â- Éåw›¤ý@ÿ(9éŽ0u)ÔÙ‘¥dç(.(OÜ‚(­œF¸ °¦Ï¯yE˜ûñ·È!­—ú·àÉý>{oK²_úD¨Ô"™úõÁ½½ÏŠÚÄvö‰WDõô.,/XËur¦Ó\<©9 €~r3°õÉ^à<Ëñ¼ '¡ Í±‹cëò—¢luV íóä~ÝaÅŽ*Ì«ý˜kIØ—Ë©ð¦Üq>n:?aðdðêy5²­½€µwǺYp(݇Î-°óärµÉÖðaãö߸¶s2ª0ö*$a2&ÿ=àÕE$j]Býï¡1] ­Súti,¾u7s¢¾¥•gûüY“ö?LyWÚþ6uSro-J¯U£bÇb•yæ|ÄŽ †'T¥Ë&&‰[3y²l R ƒ.‡mçÂ}eÙV÷YÉO ®Ÿ»Z¸õ0^&Å1i Û.Žc«Å‰qCô[Ó½œ §®ò•lmÇ+YéÍ.!wâ`ôí2¥O—ÆêÛbÚ¹šn•¥â@Ę“iÉ)²›‘ÖPÜÉ+ÐG’'€5siðoµ4 ã¼9§ÇfŸ$¹u3÷ª´àŒgÎ+6ãZ®ìõxÌË}ÓÒL\ Øyå™Ñ¿™³™¡º½’ÑW©ب–S 'öŠ’]1—n˜Î]/ ˜*³SùRõâ'a†a6½<ï7WåyXP×=nd–UïCÅõ<ÌHJFŽ5Ž%uå«c—4±½]KÖ†ï/¾C±.)Õü}Hr”~Q T„]ds¥ ÉÈ5 «m§y\SÞÝ2"v¶±•²{-öÅDZØûæ'Ø`œi mnä”Í‹éIÒÊh0\;Wk÷Â_nÓ(Û«íVÍÿ«õÔ”¶xK <›&×'7!7Ò‡crÊQ–[?Vße ÜKgu~¯çõ¾Zk!*\œßñAȮϻ««õüÉ ðn?…)²jù°Í¸õR­ëm(+:—^–)÷ŸsVâ«JáQÁôxBÆÜFW8ûãj|¡‡M…[ÿtKUµÈ¶˜6s’dv.×;MsÕÊÙ+ÜåëëjR²û«z}ñæôÕQZ}t5"¾´"Ðúg ­6rÙ¿1´Zo1Ñd„¤FbYDH±±3FÁ®Û¿6éeò“Òÿ¢‘‡81^a>6Q‘R¸•ËÕÂŒ‰Ë³Ÿ¡Y¤Òiˆxp”9Æ›ëßfë_WÞz,jûøS,ŽDI¼šV;Ý 73®S2·m×P÷ÈhÒ&c@ŒØð¤çª°ítÏbOûY q]Y¢z¶5+ ¥°ŸkUì—–€eÚj¦Tç+uy'ad½DfLîU:»ã ¯ Û+-C¿¬'ö̹¹7I`z–­yÎÜëGǽ0q” kmFÄGÖþ2 –m1蟹òøp™ƒëÂíö³±!º4׺ÃE_õ)ô0Ë<—4Nž!Eð™>­Ü[ÃÇ’¨´‹ÿ5á!Þ¯uªøäJ¾Iëäón¾¹â†Z°l†Òjוµqï’Ÿîð…`7Ý7âð‰Ãôe[76œŸ³ÜFÆn¦Mß:%«0|¬L6äšÉ¯‰!ìÜœÙ?Uå>7I«‹ÎÜiüŵ„†»hbÕÏ9^'¶sÒ0í µŽ7Êì%þ”ÔÉ2pþ©$»jœ„Ú©V ¥0­OÖó#\Äè6ð} ªHKX>̶šv..ÿÕ_MÉÄO1 h†|‡ÐD¿Ÿf8ƒÞ>Àæ ÓèýûÆ”Õ5µ×©j…„’ê–XAˉ•ӽЇɫÛ0V•N¼˜n0e]»õ¾›žt5E¯ºQZ°d±™è•Ô év@d3¡4! æšMÐ|DñÐÉJ ¦á¦u#¬4ü´Îo$¼C·È¨G“” Ø— mÖo¡]ð,>8í’•NÙ²«ð–Vã&&Ówƒ"¦ÍÔ3. üØ$hÛÁbÛKÓG%ɼ«áìÊÕIòÓ°»ÎâxM­áP8˜ö þà4V‡ñƒ—v($¦/#y[¦O”Ù»Œ 'Íþ5î/ÉNWJ zw¾%OÂDü¥éVéË{9p„7ÞN¼ãùÅ%ìñáD„&ùT8—Ì #!»Öÿ‡! V:Åjê…Ñ ƒä±vLXb>pO$O®ª’5phú(™•xWí&sú³d~â]yfߥIØ8„…Áö†€¼Àq ƒ’Ð['’(—ÞmåM/¤IS›ê|pUMìúÀКÙ¾Rùæ:Ý•“¼ØYyŒ•»ìXåèn¬v©á›µ7‰m‰`FúÔ”’éIòPÆS& ÁRQl‡BBH©È‹ƒ0¹…‡êIY!²Zg²¯Ó•þ%OgôLñ ìM§/3Åš= Õ»J\UmydŒ¸CßT»šä%,7[¨€€v Oe+xÏé4—–ô›çRÐÆÒDÙÓVŽ’Œw>ÆÎjNqÊ]ðẇ•¿û‚fÃ{vmœi5òé¶`Ô®c–ʃ6Iéjnº]k 󑓸i¦´óê‡÷c£úÐ+aö5k¤0YÒš)Eu(Âɶ«%ÞŠSËiX¹+2KÉÓɸG¡ôd-mGcc}ã<ö–¯«RžÁø’õxãØWïìÚ‡ýÑLÉ»< PòLšêÊæ<Ñ4Óé„×vqfsÝ Æ%³x®O^¥;_§Bypþ)^ö£ÙËçl.²a»‡qB„d›X’aiO/¿¤'«óóϰָÏ:xø¢©ÜJÝÄÛj’ÑC¬îí-•4Ü)c¸¦‘má5÷/i] étW• ­ô?d¼ ¯çT¼î](õÕÙÔW¥M’!“C?(¯Ì0±ÁO X‘ìš> î…¨¹÷ßJé†*ö’ vR%MéÉ€9Më&\ °“IN¨Ñù4Kà„Ê'´¶`‹³+ãíš2ç \ñݘiú±`²É…=Ð?9—u*Œõ,XqWzuùÖèL,¤¤²tà/ˆ!“,Ý#Ä3 Îe¯š5}Ðö2’”Œ®v(ñnj¥&‹HØÓ­ñn /V®[¯dTì$Ii@ЦXh>?åyØÉÀdŽÕÿ4xTôúÿôÊ_TùÃÔ×ʹd—Ò§±Ÿ­.O†f¤–ï~L»”ý(ö¦÷p’'·7ïa:Ÿ‹Á;o?íRø›þ .µÃ¼‘*w®ªXºí§̼¦’çaÒ]yŸ”pZ˜Æb0·f_’ÂÁ1¯Há»ãn²½œ QÞ'Ø J˜…ú1ñ›ÅgMçú 'ˆwòû>úU ¸ôzà Âoˆ$ÍKÉäQªGör‚,=òÓDúP’βޚ¾m’v˜pr¨NÊÆbUãëÙA”VNCÎäõ–´‘?.ú­éVKy)fæŒiÿº=Ónò Ê béM+}˜áÝ!;Tƒ/É“ÚáˆËPnJ醲4Øau'yy>.WcÀ`¾i81ž†–û6ñJº ç ¸„ã†ëD´œ†9lLN33¢'ø`Ö+û$^{¿ðiGNò®pÄðU¾‰y,ˆ`©o[©lXN¥ÓáËlÒe ¢¤\vvJyâ´hÝq4hÉ’'°RS}7tJÙ;ÓNuÂiÝÀvÔåds÷hÿó¦—”š¥ë»>#™´46yØ* ›ËV¶p§M®øÕMå/#Ià ‹F9}b‹Y‹É‹ 4%®Xל’—’ü Z£¨\VBc_ôâUàZ2à}‹dÝ5x½¹[Ê£ØoM9¡<öAy'ƒùÃ&ÅlZUÑŠA†Ñ÷‚„º %ƒåÝ0< Ià 9?µcbß&£¬a7ª¥8¶^émŒCµâ€>4}p5À )ÏŠ·dß9 (#=Ôœ$ÊO‘.múÚ¹®m´Üyáòæ,ä'çes#»ÓKrt¡¤q¾»ùh,*„9?ÖÜxX#lÌIãIÒ&vZ\L|i,SRe“½œFUÇî$/6Ä¥àÓ„«VP,¥,? 𵸴÷žª“ä§cTyiº®]áy¸>˜êäÊ»óVNv~R~®,‹-apëüÊÁåêŽoÃ? ùÖ]ƒð××t@\U½%—¯/ƒ«+´îe}ë¸NMO®šÑPEÛaÂÉC®8T» W,H'lëêÐY' öípEìŸ7ÈJþ¹Óq6º3~ßt—¹(ßéCe»ìú@µ#ÙÑ’A7þ‡­³MsÅ¡ðÿY_o@±U±:2dW5wõSIàÌÌsoé¼0`üDZŸ{>¡OæP©‘TºC­R€s4$»\€¿i¤ÿ͉¡’ 912ñu+RºŽE)2)&ÍS¯j©WC‹çÃ".ì8´˜¾$(‡Öê$/O;©¼Œ‰½…7v,’šaÉoO¬[áÇFª8ò€m^k‡è•žW¾-²;Lâ } E¢y°=Á#P91ÜÎ%ß(„yêd¦ÂåîÐY Y°RmÓd]|••±)½çkŸOܬqŒéé. ´Ïü‹9úºP{,À`yqp¾ê µßLºMòfÒÉŠEagaêþ†;¥ñ4ÿ¾Huº&kÞãbC˜r.SÐÕéò‡»VxÞL0j˜Ü‚»ÁšåÛ?-2VŸ$;9]š1Sy¦<¸ØÊ…G9\Êeâu~q ˆVç«òËsr×Ñ–$ûu®ccKÍHQÄÓ¢õ´$¡ÐÉšç H¬;u¤T†`h*“¬îz<Æe­qÅþj±õØ ý`-†pqô\¤Ý¹6úf°4ÓÒ\x׈2,¨/h–œpRrBw ó÷œ¼ÒOÐ!ïFÙê¥ò@i.MŒ¥Ñ¿” ª#Yr•¶E89ú ˜•³cO¦8ñU(j9É^C=nñ~ö0Ýð™²Ó¤Xêá0œ3S¹zÞ–«³«lH'ŠQbÓæ¥¦ø)ãLOl:æ€3UŸ‹Õ…"OcnoOWwïßRò¥Ÿµ»¥£^ürرȷl‹³´ýâ”ÿ}IÊ &îðq– #ˆ‰¦t‹êb…OõåZìªÉ€V²瑈aq›šàU-áKol0üô|Å$—o,&·Y5£msí[¿%Þ4€„ü`Œ†ÍK%-[ëlâè7œ}»éDþà´+ð´·1¸¡½VݽKn<ûTg©[Ecì¶•åßÂ.[üò1^'Ç$ßEÃ}.žÿZ:·…ói9¦ÆkŸhsÃÊ Ï% ÌM‘mšµ¸>ýÈÛü\dKl-0_^«¢H]Ë™‹taš¸vHË÷pRωMj°ß‘V¹Î¬|›<ï1'÷u—ŠŒÞTè³ÿ7#jÄÖNºXèÆÛâXô±¶aå˜_-N0q‡¹›hÍÖÃ…k•Œ5üOÌMu‰º†Ëå4̲O 5´Ýy¥4Ö³7&‚{ãÀ¼˜î”î.ºUã…©ÓâUE‚ÒD¹3f \ö.²º|™þ±ü«Éo¤ã¢4Ævðù›Fé9b¡ E•ƒX•Fé&‰ž×È}üÚÇCr„GÌèšAb‡Ñ¥_h°\QÈânÂ&êbvËy#Ýð.V³_Œ‡”¸§‚tçbæäFJ‚‰¾e[ÙïüVi¹O@“Ý\L|Õ1ã:¾TX~ÿáí  µ›Le¤#n4"#œœ ü–ÞŽ¼Ûó‰Ù°”Ãky!<˜’”€GðyB‚Dbs™^ÒÓI¹VGDL‡È&;™ÄtÊ.¸„áXH’óîªÝ!=®ò Ž&ýžçâŠ+¦ÀUJôÀA»c=&ÜÒf;ž–Øt5ZQ­ƒ#>p™Ø2Käg‡Ù9TéX–W",ª}ü‘ZÔ>ô!mÈ®ì²÷I¯ê®¸v(æ€B7Œ ”c„ñëRèÁd JÉk¦‘t¾ü B+ÀòÚPOJWùæ>~<Ì«5Oe!^é¶ì«Úz(Ô<: xºèJú@Åïh‚‘hAê møìÕ9V^Þ;Í_œÚIç¼Ç¬ƒp+ßÀ4Â[ ac—ݵdËõ/6†àƒÆ¾*ñ<]ž˜âë R•Æ@qI&õ€*CPzì–‘ÚÐôsü1‚*…¶H ½Î€ (±—qg€_qιŒÏ“nrvB/´bë s¼$0RAééÔMÓÕ °þÌÆÆ‘ç‰®O9šEN¡‘þ%µñn,õ0ÐnŠþp ä ?´;HAŽÆ­Û0²™$ƒt£S…ˆ؅­5Tå…<œ8p\z†•Í‚æý~àÀf­5z޲!ú¤ã ÿ¡9¼‘Ë•4$k®©×ˆ:þHC_©î[w$ïH³°#úÚ©±gѹY©oWÀb1çfÐ!•½\¡áJ —×OÂó<€QBôåFùªÀ×uB­ Š`ïñÀZ[±’JOÏ©€â‡¬ËtÇ1¾tçm™5Aüü|™zÞÜgATÍôPƒÊ°øui¨÷ï‘À/æ÷. ã¤ÁŸm }"êøk!WßB€)H»&p|<+åçe”¯êyøŠÅH™ªw1ŽC§ûj‘¾áAÑFå‚TG$/ž}Â6êôâÅbP±âp Lc„P—ì¥uuƼR©‡IÛ&ˆÕÌÔd»!)Š%$yd.–(”êÐþ0 [ÉÂÕ-FÜA{à\¸¹± %ƒcЇ¾)IhmNy”¼¶‹BàßwÀ¦ ÖÓÓD“XNlNeÿ•WLã?A÷Ù¾º/‹K7އž/ÓmúxÖÛ¬=I¾µUéBmŽWtQÙV±vpAœcpÂ^>ãsdºBˈi. b„b1öfͯµûO€BØ"^œ Âjòßà7uÇød#zèI)·ïÃä$Ûi‘Ï {²ýÑORÜ”3͸ íë&ض<®pJ âÁ€áR j\&b~k_.§Åß<9—vð7`2`”T*/([Ä¥#Ã|Yw.àX4ñÛd`äùGz\f2MOÓÚ†ž¤1lCJ=&øžùªÈ,õ„ú´ù%C Ö@»a¨ä2/q¢Ü6..¬‘‚i7†hȃšS^o—õˆx=(m=¨MÐHk 9•J¨´¨“Öl‚ësx+t,°o¬×ßø!õ”±kù¡?¿ø‡Fà« ùó[ñßäç®Ëï_¶+ÄJÛï¹»ÒK/iÞ¤JiPÝÈHÒsì N>÷U'WyãMÈ#¥É¿ÿiüíãûS åšÒMk…b7PúÇ!ÿxჽ^ñ„(¬˜ÐLåÅRäŽîÞòf@ɹ°vZN”uѬòGªA·ˆNœ¨ì¯Lh¬6D¬ÐFZLžž¼¸»‘ÚÊ,†Ä†é·¥qªñ¶-‡âã›3úåØ8c,/>)&R¹9©íβ‘.ÿ‡qi1ãëŒs¥àœ'÷<æBè0©×AeäIbH¡!ùù¤4¹,^ˆ+Wxëe›­47°Q#·T¸²“P Ú°t‰‹‹Ûö!RùAO‚Ã3{í8O¸çÔ/I’@ñågpmp2dÕ÷Æã å÷߀ju]x3/uJ¨[”zŒ4dî\ ²½LC5ä%©:h·(à#¹ó¨’iDÙ î¢ü(j½]ÞŒHœ;BU ‘èзRõÎ1ç’ø‘ÓËY3__Ì.'%¤§i= Ý"ŽOcóÐ]hÐs\ ^CÃS¯]¿á9þwÈè7 ‘‰;ÏöÝD¼?àß²†Á†?]˜'«IéPeÔ¢^ ¡püÑb¦¡c]8ò‰œëñûH˜ŠÀ»I1i.‘ÜJwhì°ò~¨0ðëÒPí IÜž¡ž…î¤0]uÐ>qÉTk¶`ñîùüªî‘G+]0É"ï¦ÞW› å“oìWuüá2 !šyäÜŽ;Bq´¨¼S2Í.6?) £¼ssä¥ÓƓƜ‚ÐÅOzNž7œn…õé¾90#©'šm67_…x—màó¢í A¸åÐ Š€9<¡6t£2å¯Ê i\\:›‘ÃÁÅsýS¿„‹AzBíû&àIɵ6OÂgP£˜£˜Ðñ7µí˜à¨ŒéA(\[0 ¹6|ãÍźáU\q»™fÊÉT6“]o”e'¬]—|q!¤àQ^Êà¬q6霺ÒW¡®« ÚÚ…ÎUºd%gÁ{¹Ñ‡þæ ÷ö;ZòlK'ôóšÀ¨ÊP®‚ñ…¸ä@›‰BQ, [±A3•²’k6í.ØM¤‹´/ÆÆîÅéà¹Qƒä}#x•ìà’+]ÕéR¤£ò¯œ5”KD÷WŸ„’FÄ}Hó¡«ñï|`Xq_θ“ DÒŠ–">èi0æ Prpè\ï¡x´>À?W/î£Þünqe!LE‘’LJþ™ÀeâèVpÌm®RG5oì·†¾¹Ì7j ŸT þQ Ù‰Ô"Ô¥6‡Æò=±¨ij&Vo|‰vD¬Ú'¦H?‚Ò ‚Ød EsÎB)pLŽ%…Ã5"8™X6È‹ÒpzvñŠžÕâéöb<ãÖyÀ}qÚøÎ%ŒæŸe.uÂH¶ y±#º„FæÞJ݃ä\\ë‘[ઢæÂm–m³ÒnŠ3«@Œ »:HZÀ6ÈÒJgÍ›®éâÙî©Áu^Åþ«/JðõpÑî‘Æ&%oRÊUÝ]¨Ñ0'žhþ¶ð5yÑ…"›7„mÕWFo “èÉP¦+”w£ñÞ®îÞû{›yløoL]‚;T‚Šl‘÷6#¥ ²‡TâgDÀ¤‚.HÅ/SƒE]â· 0‚iJeQä[iþp²}Ú?ŸÙ=œ´c¡l7®Á…ÂDKa¢¦_Úrõ©rqRž°é4uÐ$qhK¸åa¯:•[8rÛA»²‹NóBà4DùÓKtç²XÒÆÓpåQ.0Š…ú¾ Û7ºAÈ&×ò ˜™ø´*9Ÿ€Ê­q1TÙ„oh@ø.,(!÷DÐ>dl9Ю7øðaˆO]lÀ**m\ ‡EÚž„î:w£‡¨:•« £ÀvHeåÝ]>N×Û`/ôÃeñl$¦‰L삃/5ˆæWß°&i_œn9mB4ƒ½6è-ÛË ËˆÝ´aÍ'/Ò¾xµPÛ¬ä‡êá”ËkR3êe—b*>IEöeÖ{üṇ€²¡B“6Òà¨c{yÓ@ø?¿X«‘$vhY'¢ŽÞ&µ µƒ2µP[ o¤ÛžÄH•°—{gH±¸çà¯'ü¥ã@ºT‡>qiI‚ß“ ÄmÉ¿00D¶€? ò’ýÍEö’«À Y,B)¨¶ «:uèf‘4TZT£Dç#_£?âœ÷+åj«¾š‡Êóˆ$y±i2Í_ MkÄÑ> R±ûqô4J&µAóR«)å¶lòŒ0×´ù2˜gÊUha⹈ËbÙîLúé´ß}½™Únæ/ãÇÙ•ÐJ­€ì0½ˆtrm¨àØd¦Ÿ¡¤A²-º§Ö‰µv€½701Èó@çAýͲE;oÞM Dxcƒô ÕëÂ[Ù¥@½b!Q¨o¥‰¦Ò(»©eœ” YàqÔüP9Ç*^;loWAÉæUúµ@|ˆã>þáIô·EL#>ð=ô$Ù€\"uC`…ãyÁ’žf"Û(v)¼‡y±ÑIÉ »â¾QΓJ]JÅáB{Uï«Úsìc–9 Á• ¹Nj¾/¯ùéà€ú¿°Ë3´Qxæ ƒùÌè’lÃ×ý뽬J…&®€ÊNBääÒBiÂC98>#†ùž9¼/Òüui ÜHirzÞpMkvØÕP.“®™_¸.îA× ’D¡ê“â· ƒm‡(9äP|Cg fÔ¤MH ®lÚ!¸üó×€ŸC­SAvR€ÆDù̉©åä-üþ{§d!=nÈ&Ò:`VoùoÞÅîˆv–xf¬B9”KÔˆmÈù­”ÜÄÐÀ¤õ÷ºG²ì.è'H°¿<©];ƒr1ÁRÿ ïßµ»»„E½…¿7?»‘n®›¦õ5z!:çVHoˆ9™N—I¨·‰1†Îø4ìl/ÖÜ *«b©³» 5 k±š€/;@•J;C=*$n\cßd¨lм†ø¸Jæ{‘JºH{°¤g FüÍÐb¶¸é5kó€y³ÌZmŒ ™.¨lY•Êb©Á‰4TZwRrˆ<,õRß ÍR¨‘–µy¶±ØjìÈc/È…™ÜüƒüK‡‡Ú¶‚ÑS˜I¹r@Ì"Ö³]iXs`âÛ›À[‡î´bÃSÆÂsƲšÓ¡?A–z!(A|Öœñ, Ü0™fÙ*HuŠ*\¿Qv“Ö¡ùÂ6ÓA{>¡\-'öf¬àa§H’z¸ž®M6£? õk„¥û Gs`PnÇ ’ÕXù}4šPGæ@¯ƒ¹¸t¨š$ÀŠöQË A¬ŽŠÀ2fÌ:„²Ðô õ”q˜¼³éõ† ·! ‚bmü‘Z”GÍe¤žá»ÃT´L.Á<Á“´C±«%|q3಄ñõњĠ‚„íxAA3í€Ó¢l¡hθžmÂ,ØØ f¦CÐíÃD8µÑUy“žÔ°‰‡YŒ*Ìå†Ãë⾸ÝPHïnm|IÐòh6'ÚB)eä‚/pÿ¾l)¢÷ øu޳¤ç"íÁõpê£Ê& …•M¢X·è—èÚEßÅp#ÓoÙ¸Æß62.dGÊa{¸IXIàp/—«:å ð8Lï¡kR.¦GŽªE»J9>'hŸ¸ è"Il”/OzSrÞ2µ¡ãéÚC15«E¬ IOƒÒ¡Å"ï¦ÈvP/ É©9È‹NJXu qÒm”ËkRY»Ï›Œ+;aRïÇ‹PÍAô¤ŠÉï&lRLä‹0KÀ¬/ƒK¡Oj 8rÞòÕ¡p£z„jºå6¨RÚ "G½}ôÝðj|ÜR}än°Ñûw ÄiZ转ñ¢$pÌ 6M€ììÐfoÎoõÄŸÉXŪS Ooj˜{¿îõS™#ïŸñGú¸NÙ¦‰¹28ÒŸB ¼ömÐFM‡F{U †ªÝ)5‡’#;àšRZ7È;§}”ýëæÒÌ+'ݹI“ú‘ëG‚ÐݬÂxˆ\p ‚ÌM˜Ën`“~:í7_Û2‘~RšÕŽå'ÛÍôàÃÞ0³ÜÊ‘]hšü˜fÍz+tÔ¢æë„b ¶À5_ØGB)¢í5P>4ÀI’¾Ø/-,Ó&‹Qø£ì÷9Z¸1lô`Ub3}t=ï¨Ú"¡Y5¸g·JE2žˆdÇÆ0²Cb)Ùs]@É"Cf7qOôž$õ\ÜøÆ²Ý̽†À¹ƒ|^g¥zF–æ?’0o¸wi)«©ì–ÒóÓÇŸ]à0‹{©\|ÏÙã½.éé¢P—éc¥´CÃË UàˇQɈõÈoh>Q¾å¤Çްû¡é# Ž ¿ÍËHMR3­3‡É…]Û"Þƒ$'ÃíRZTn(õ\®ñ÷i>kbе®ãfÞB]j…6¶èw•†Q^„ç%iA‘Z\„w§ŽÖØò¦PÞÕ™ªžB“¥¦QË€‚ìÀ4¹G†|O’%eŸ@ØfCJÏBÁ«»ƒ#¿ù¡¤NêyÕiš,¾ÎÀù:º•›…ŸØWΔM㙄‘´^@ x…[8ì7¦9©¶,{øÏ>ÇÞ–rÐûX~œc å¿"áÍå¼ÍÁm–Óvô“Üø›õ„ô3á6xëä£äûlg®8ÌðªàKj½ ‡U*7ì)Š®„{çr45iÇ<º»>Í1+þ+Rr"ÔîÓT©w/ŸÙ= F}¹~[–Xk—î-‹¯Åï®¶»íaâÅ{ÓßGã—ùƨc¹?÷<ßâ« ã,{$ÇZ¾–¬²åÙa0¨ÝS/Cì«AËWTÞ¯Š¶—óŠ;¥«4vû JÚÜlTÞ¨eºèkŸ«›û=+—UMŒ}R,ôàH^ýZ.¹ÃÒ§›Y™·±¶i1œÓÍ^bcËÓÎî­~Ï-[Ò3T;èe;n£§Ãƒp«,˜w×bzä+y’¤gÝòÕÌ)u.јk]¤}qš9'¥|úS[ÔˆvùZé²½‚v6ú!Eo»C.V°YôcWåEèW8/á¿Ìšˆ£êrØ]›KЕ³*µÅ—W᧯n¢0ºç˜ÓÒ‰Ì7TÃF½ÊÍ —PBnÐñÀè—Q–åÀnPä4»c¼ 1ãwö¿.ÏÁâùâ‡ØïÖìŸE OJ‹T^¼¦ž—àâÃi˜RsÔ34°àr(=M»JN‹Hïìã·lû/+ÛGBëw‹]Vï™E>íÝ4þ0÷‚\£sË´›iR—ûè–Ðtþ‹øð×Ìúf§\&p8—ŵq(FØyQqJ‹ÐóeÚ‡‘-ìC90=iwÆ’[!ûëK¶Pßú—UŽ=@x½ñuCìÁ±N>h¬ÇÇ éÆ’`ÆÙšžw¡Eiš6³­œOn‚ksŠ­9;uS¥÷±G«0—µ'7Ò Z°.DOÍ`+wFÓ YöV2QÙnµãǃ¿rΆ³æÂ{˜3F'\Ÿ,Û I§Y]^^oöMµå²&Àà ۪­2(¿ÇΟÙО3˜°@ì„Cv“³°ÉÀœ†Ê Q-r í‚‘s|NPÏÖ™‹¯QÖ8à@i4Ó:Ä Þ°éô À Æx³(nögmAÝ€wW6¢_—Dß° rÊäS¡oµÅ¤8܃VZ““~¨˜¼+C›E4Ê%—i¥žÿp Êk1: Æ{¡ö›‰»Å` ÀÅKüÍ[ å‰9Ú>8\.ÝS)ùÏv—•€W˨•“‚ÕRÕk9È¢B6*P¬é'7®°¾ O *@NJ¦¬¡¼O*AS¤bXjs›ðž•ÌÉr‚æÔÈ;ñ¶HO·{> ¸¸Öj€5$õ˜ =ЧS-òò¤¬’Eb®A Z²Ï/~=ú¡ƒfÏm-æÒÆ.{¨v'Œ?üÅ%°àn5 s‚¾,’ Óë4í_¢¤­Ä8²,Ïw.7ãKg9]Õ|Ô¹*] ¼Ì*ÛUª´m²Ç½‘Ô"1˜ôÓi¿{æ2mÔ·$¾³ö»‹b§¤{’œÔx™¼t)Åt¸¯8øMJÛ!%Çíq²¹)Û⦔þÇÍÙY)éÓK==áÚ…S3ó y‘ÞY(…í™ÊXö˜í·1,Ó×-òÂㆠ³×FÍÀ²|s Nû"Ž5?\¿»öaHÿËÆìÞSÚÿ¦Ä8®´öÙJœ¬ßSô³ÈY¬Ÿ3çªË¥ç‡Ñþa?&­’“›ƒRb5ƒ³¡bí ŸÆ/ö3¡+•»Ë²O[7Â6I÷¡Ä]›Ôønù–Ûd›®ð*XäA½¹ÿ6e9^xK~·…1{ËE£Ëk_)ó8·¾ùÓ}¿Êª¯ãý–’¢ü…;=?Œöi¿oCoßQW.ÍYHy[æ}²Ë¶‘t•9CøX4qU>+à{¢Æ«eb,¿ŠŸo)kqJäônHo¨ÝÍØå"3³VNMV[×ìÅ?o.‚L/ûEõ@`˜ÚU8L™ÖWþ0±]DB_F'2/LÛÝ´;Ëm¿Íù²°õ7OWx¿qY,Þõ•žÓÜëû¨PžW¡öé|˜–ÿ¾çß‹6¼¶Ïi“¬zÿ™€"ÓÝù¶DôB½ÎÿaëÜÒ$m(¼Él@m+eed¨îfõùúHBT’‡æüG\ŒñµÜ¾| é2ÑRìnÂÝIk!f@ysåØ\¶’VúȈÏÚÚÒñÆ6Þitn¶ß»F·­bŸ—FVûÏ‹ zä®oÔb_¿L-ɘ»´[CÛîèÕGæåzOôÆÓ–×§Ó™>&žŽ4}L?ÝGÝé‹ÞìôÜT6¤ÁNêž{ì™òwwÃX…瑤[47y¡ªsVP¡#Ð[O3Ód}nñIŸ³’‘¹ß#+%[è”o9Òð=Ïö¤±C?®ìn×-TÂåäF(¶#gŽ\L4‘ôÃèü°6~h{¶ô±Ü7i2o¨s3hnYé÷fÆ*xS ¬Mtnfo fgžn'ˆÿªí¤²Eéä Œ4h+œÔm¤’I?Îôß¼¸¶ ¹ï’MÄOû´Ù¶ßeäOp”`•0#»Œ;7¸}:t|÷ÙÙz¬[°328ù#gïïãÿ¤ÙsÆÎš9rÞÔ^RH—“ÂÁƒ}ÄÒe/p1O7^q씓÷*MN,ºð㚺W£2638MLëðÙêçš‘Vç¨íÓ­Ìžîd@9u& iÚÏ~Ä~;δk»ÌÀ>Õx<'}öq,°Í+&û~=ÝÜÝHÃ-y›Õúʯe„¸ív†Ñ3—s´÷• ë)gf=4°ºÂë_|é33w![ ‹®Þ¦#]>W” |óæj˦8©-”òJÞª®#H¡½¼å=íÓ hzv–KtÏ«íŽzõ`*Ê&\õåÓ)˵/YëÉ›ŽŸe ÇYiÈænjÁ…î¬âgîiæfÆÎò—w«swX¢á…iº~9ó!48 F(,· Â¿A–Ï£:|“Q ÇÒë\‘^ËÊ¿¸Ô›7?»ËÉñȘiêÓ?Œ®6ÄŒ þ ä¨}†òRíg\þOßÿ/ô¿S®-B' NÌœ¨™f«Ñû=’P3LÖl¶¸Ó?·›± î7aи%£!3xWgt<-vÉ(´\ÄùTFš,Ã¥Þí -¥A±°Ü<7ížßIwæÝHÿpcîVwW6n[o¸W°QÚ–üÑ9ùæ4õxìü%#þ‹$ý-å#ðÍvé;CϽq_<’²;}$I¿73x7™W÷“·ßMÆàbkÉÔï\߆¥ÜLõ¹Qèo?.V»¥ 7Y½ ©?CfTŸü"Uw“¿4Ø)Th.*A¸(è\^Aø|úAíUúzîEÝ©^|6ÒÝÕNÎ$Òäœö?c6®ª Øn®³w;9ýbn–Š~¿™ŠÃéÚBQŒ«¯:1Êq×-`E¤xeÌ  GäéÒêñ Ð-½jIÜ’câ}ˆWyʨ?×BÁ—¥Ü¦ü3@0CŽoS]‘FÇ/£ Á%;\p¢Ï_G| p“K 7äH"Õ™NÊÎ&Œßù’7y5Ü»0¥™-ÍV*^ •öOf6»Ÿ:MÇöõŒo\»±¹ù&QSeWƒO[ª.q~N#ÿ¬·Ÿm÷ŒuÑ”—S6ì6[γE¼½=1ÂCn·Ž‚uQ›¼à\¤™Ûý–,‹/†A÷kq²ö!ÜâlÇ 6»o,¶%5ù­–â±V·Ð›ŠaaäM$ÿ|êÍ„'ɰÅ&ëÜ]áž¹ž£š â›ÔÃY²–·vZúU©9r3•ò2Pvœ[T~_̆½–P[œÉ˜fúŒ™7”~%Ž@ÍŠyÛ(Ffa6‰zÍØÛK‚Ðh˜–„}R¸,RŸ…sÁ*;,)å…ã妳k3Åà:DV:PõÈt‘>‚;)cWÉ_wY±÷Æ»â8{tB¿‡‡.ÃÆÑŠ·ýsOüõÌñÓøñØqžÏSʇ8‰XòÅÔN#)‚Å·× …^$Í V+"ÿœ¦ÑmÖ¶è€ÆJ޽GÛ  ¨§$ ÀÃË ,NÀ›Y½Q-†'Ž:½ü'’Wmç R†TÑP>ƒÐQgßEñ‹ÎYŒ¸½ õºô"¥ÐÎNÕß}ýBò‹´Þ<ß40ЪÒCù BWœ±ƒüGã›,-gKò³¸tõé–9ðí'^1¦ÄùrFo(³ø—r(Öuçæ å•¤3+€¹…'ÚgU ˆŽÃd¿á”{äàœn™Â‰¨á®Ê¹°³a9Q`¡Îͬ>ò¨ †T¥rÖ…ÃIú¢Á‹äpô ÍEÑz`LùA{NƒI-Îè°SÖÊîb«€— .ÄŽ$Ý¢¨mg^ÐhõóŠ0ØfÓÙv›¶,îrf-lFËÔ,‡Ý Hyåôìfß0µEüwv?›Æ«|§¥ŠÕ݇cšãw½Th7¾f WD\4°åó¦,2ç—«üe§Â-H¨æk /hFõ˜ƒ=WN,îÀ48 ×eei@ñÒ»Æy9ȧ 'ÔewCŽt‡ÿúJËhÐèh3Œj«ÅENâÀbË “°ÞÔûzñbn }æ¼`çÓôŸˆÒàD©ÅŒ¢ŠÑ0ÀzªÅõiO〘„ K•CGãÅX5ƒ±n‚}u@Uü00Ýß¶óøÝ-½ õS‰üüùù‹ÄÙ ø`—A·œiÆÂŠOл½—¡ÀršÖ2ˆ·Ý^ÌÍp¸H!]È ÓRÖ÷…% S|:§¡¤I:û0\صv£—K)ÿ’.Gí´®|†j‰P=FúˆÈ¹G>k -«e(KyÖ1€ô;`8Œ Àï)Ð-ghÊ‚jpW,ðÔ|ªÿ€&„¨Ö§¾”œ‹Ú¢ß4{霧0x‰@PÛPÆÜœnfðΙã›^ºÚÖDä\ñº1~žßr’f(€²¶R)iúµ˜z_SµúL<×î|Ũ½;©Ãšl;®P8†Nx‰©1GUL¼ çR@9²wÝÒnÄ¡»WäØ 1 äHŠáÿ#¤µ„ þ¥ÂR\#P]äpP°Ðì*ývš¦ê‚ §á¤^¦5>:»Êá€Þ+5à—2ÔSåÞƒ†ƒübP< ¼äítSIʸ?úé'`¥>¼K1‰Š24D—ËÞÚw“ãí¸‰;ÚŠMôÜR²ðGÄ'‡Ÿ¨‡ãmÒÁäuÞWíï+§ú¿Áñó¯— Öê󺀎Ðk&¯üÁ48MÕeëOdžáääÀÊã¢Ruù÷Å›ýq[3[æCKu)5‡¨â»güD=ÝB…B5`°S(ÖgBºqÙ¸Í4ßlŒ‹Mt&ãà.âÚ¤§Ú„Šól<ÈR6ÑCŽEÏmøîp67•#¬`‰¸©eÑŸ­ØÐ$ŸnÞlŸ¦I—q%øœ¤A‘ï©êê!j‚:až{ñt*Bê8P†Êngš½d |_;É‘Œ ‡YŒíÁìÕú`¡€Zœ¢§.ì^Bîž?b-\|\ö&†0%Ù_ÞäîéžñÝj1 íѬ¨SñÜx‘F)V]ùh(LþƒÖoLËUÎ…ïª3ÌÚ‡¤ÛòøL–¾xÈœì¹cÕy¶ä@â¯[F´¥ødýâ{œô5ÉöRéqS ïe³ò˜j¾~Ñ«øaùo¥æ‡àFe-Ë´ƒ=[ÖÇXâÉJ]h7+gö‘¸æ ×rÚM‹û-Ï —/KñüÆ×î¥Þ1¡—¤ì-Þf"h3šÙ|¬•éWv£û¦³wâ5ˆBº™ÃYN¯®Ä±¬—Õ¥ë#ÍŒ9sè„Aᾂïk^nÔþa¤oîY†äª…ÐÍ`Ìcúžå„¶fçQÓ•Úçx•^šéŒƒýÆYg´Ùf,Y( Î(—©%s0Ï‘§ô'r¶iâj ꜎¾¬ì~-ØbYI94#ÃA~qP4­[Û¡¸>¿¶ q_g Î œpÇ@‚·$LÊLËÂÓt4б±ˆbw•“,„“¼@¡$Mlǵ™¹øXôܸÃsêqÔÎ Ÿnˆ'£¤ÖÐðéøÜ…<|¿ëS<^~¾ðׂ„iÏswõÓN7½*±¦¥•<^Yi¦•PF‡ŸÁŽv«\òʘï‹É+w*¼¨.4§¬1.RØi*Ÿ¹u5îUpöÔïÀUò‰>âQU6ìoÒ 9“ö¨NÅzdL*r:šP[‹º-ÂÙ†íN: Øá<¦&Õ§›€S¹ø ÂN¼Hðô©Û*‡ÓÔ(íùe„’.¼áçÚÿp[8Q¨X1|³Ë°Ý>¡›G#uó¦^‹ñKÖÄäæ²žÙ­ŒùáÓìÓ¢l½±Ù‚—ÑCÅÔsæ-ƒ Åa„OKuB•ä”,lR„4I£‹ŸÛ¨CìŸ/b±?ÞL³;¢E¤Ér$OÃçðN nr$uËŠ-ßýÔŸá>äËý?ÉÒCHAþ;Øñ%ï $§‰R3èãQjFéå?¤áBÎz;5×a*åµ@çB'`°¯ Ñ?’Àõ 5W=]U®pÕ-ÃO ÁX”Ÿ4M›E^[Êg”EcF·ë7礟FÅá ]48Ñ;΋@hÐhBŸ[Ù\°Ê»Ü^âÅ-”Ï Üá¬Ü;X°2;aµÇªýRBP©œ8yÁ© ”Ø"õ¸t,M¦Óå`,Õe¦:¿¯”1>ʱ¡‰µ ¯­‚[Ò:ÙÊøÕ†@)_ÁKî·W ðË™iÊfêÓÃgÔ”3+Ž$‰*5¯þìÞwȰi¤Ÿi[Í̳ž|ø¿v2VF°œN~å6¯NéH?½PÙ3LDñJçìÑs-õó4=³VÆûZà±g \N…™¶Üíõ¿Å(¦}‘ú—ÿûòqÝŒ Pnn‰ŸqéaêWÕ¥–°ƒµÁwm¬ÑJ}šNÐüjrØõ%®°‹N¬ºèÏ4|×>bÿõ¼Ð¨>ݨ±“ùE“ lisrˆrNkí”D\_>,:!77S)¯žÛÚ]OÒ2¦±r.ÿZƥǔïkÁÃ`9Ç¢©£¶|ñá,ÐhdUžž“œMðs: V9Ûñ:šyRzô—šG†Ô(w*C=ÕiŠŸÑ §ÑÓH1Ý!ðŠú/uõ ÜEN:Ñ3çjQ…¬ïì%ïqŒ,¶5Gt>Œœ¼pëü{PåÈ«âsŒÁU†eýl4ÛÊõ>þñö§v;¶ò£êÃ[ù?SÿËÖ˜ùiÑÔ«ÖüËRÜmè8B¹µä zsÁÏÝ1ÝúEepG°CH Ïì*ÅÉ3n¡°tҌ͌™FßøÐ©õ >‹ þ¦2œ²_CúvØý‡³÷bùZòU5´P¼VTòHQO6rµŽÔ3up_gå0X‘“™>œ,‡‹jÞ?>0%@}ú†:Ãô¤GPv¡ôO)NrDd@ãÐVËÌÛ ßÉLøQ6öHq{‡’z•?ˆ¼¹å<õæAÖáféqIOº ÇU_±‹©ÝªõÁe£UàÜ´c(§ÃŒý¿ù¿µxÖ ©Küª†¹e|)Æ\G(ŸI:ƒåKy1—±xð†:ÓH-fúqyŸØÒ3lˆüòœ›Š1.…Nƒ÷ðyΗ*$û8§vÌÝj8W|Ê„CŽá ­r&?Ýø·ü“jôýÂi ;ô8« EL#.Sƒâ íà3nù(5‹ç9ÀØÛ³›„V›ò%TÆ<á£#ÿ4ï߸jyNå!G0šr í8¸GXl!&žëLƒKjé:mÉ _Ö¥Âá[FêBeáaÄ.øL¨!®‚¾„œ ÷î8BI4°1;þ–ø'TÆ4Ä't¥–Í|sšÏGÂ,À*ê˜ Ö>²M\Xæ¹ÌË!JV¿·ÍÝAO¼t5XBæ.Ác™¢ºœ äH™?ÞBAzîЯ¨k97dyõt!uJб`åNS)ƒ½ ¥æ€#M¼o9(bÍzv7Ô»x§ßT†7W÷c ±Þ˜é^RÙÕ7òN‡·ÞEÕ¡›Ö›x«q·uüÏX‡Çæq9üû±Ðƒ± *ca› 'J-aúzn£r ÒD¯gû‚©Ä*ŒóÓOnëbÅ¿:þ»fŽG£¤ ʱ5“u.÷܆¸.X'ZÁ[:6Ò¹xð†çÆ{?çi4 !ÊLjûŒa_å¹n†^õþò‡ÓÓËéN)ë|¤Óq\„³ñtµ‡ktsÉóûN/©^O‡éß =øíÆc(ŸA¨hX[P“?†7»ÊaPzmÓð£š3–>° i’ÎŃå68—=º AE©°“<’å0,¢ Oð/Vˆù¼W1å0ê³”wÿØZÌb#Ýì*‡Ã4-~"Þ«=òè›úXàŘÀ¸aÎP©W‘Ã\mIQúß5 Ké¸&öÔ0·k òbƒ ˜ÚÎRcGµ?»àþ/üóÑ:fMÁ?ã üháNŽ…˜°¿Ù8MíQC뿟éÜkY3ØèF4ÿÓ‹×¶Èxl H+µ˜WrÅÚ”x:¿/ÄåL®eg9Òü‰bS Ç2 ˜ôÓéÜ|¿73¶Esþ^Ð O——…Ô]}ó"¡Doä}A±Ý V¶"±s‹ËêÆÅÿ?–{7jØ£&êtóæâñAí£±‹1«N#IŽIà vªG£cš‘òr¨¤'_óäð¸8ýÊ@4/{ÂÿøÁ&Åî`ôȘ‹5#`†ë³ð¹¤ôá‡#ÈK%ôËÔ}=¸±]ÖL·òjáEÞ$¾ó*da­»Ýß±ŒmüSH0—ÎQ”{w 8Nb/^å zºÓ¼ß׆1™·½ÕÄ\4R‡lHFkL§­gË`±O)Àç‹ÛáO÷¤´gba¤0öú€@ ¼HjY\Û§±3îþù L…Ÿ—BžûŸ<}xv%]TÞx& 5ãè‘1/’ò ÄOð·´¤‰#óeQ<õðRS6Á‡‰ óµe° 8%Yft²a=aq ·) Ë(wg å7¾Á‰sájR¿9k¸ŒPõºM"Èí‹4H‡K Ý·‹†J¿ÇÂ1þå@]AlUàö¢ƒ ŸZuH±wå7ó/Åéô$Â4‹G± 7©AY€rmö¯ÆT?éA–b_j?EŽ‹Ð sæNC뻞¨ãL{F}ºÛ2¸m(ÇnjYNv ׆Ã`ƒºyµÌ*õû/Zö>‰ Ö@(y¥¼?¦¶ÛK(xÝޤˆ6KÙMa2ƒ“YH*/‡î]¸Ubp€ÞPä)Ó‚–dó˜¶'Ï…ƒ³x>–ðiÝZßÓNëT=9ß:ñÀd$æ±Ê¹€tCËpwÌÕÂo÷ûû"nôáp³kxn¼lVøoE1 k±|Ìeê/¤é¨êKåDrr"Ä/n2Ð?þ˱ÎÿkÇ É‹›©¨ÖsÒdTvì–cgÒ,…õ2]!ÞJök77ÌÏLB¸;  C¬>aœ €Ì?($t¢¢›ü"ˆú|ÿËæù#µ¹Uµô¬·Ë`§æ:C3òÏGo*†ÿÔú;JÈmƒjÿ‰ÿàéYªº¾­D}3• 1*æ¤_=`@î/2a9•Óùô»ÛÝ`HÃ<·ª…¤À ¸Y¡¹¶›;“¦›À·¥l"ªÕH‘S¥gm/†HÏë_¸ÆS”«* }[Ê-”{7ügý­F8Éý–Π>d$ÉÄÜ¿é¨Ia3\ãý/éêÓ—,7às[Tj1P“&9mš†z*‡kñ@3éÒ1<·“†*~¹¥ûµøxËÝÉ7&t! œâr„’&é –È'FâÂd¡·Aý’ZFr—ž&º®%gN<ÖQÂÏÁ†˜¯@éGàôWuﮛŘ.›“#y:j}¾iáÓ¬ûiq4+=ôÿvÂå£R`+’k–ºæà`¥~ïLôn8÷z“&sà;)@0µ¼„>~Ø'+f¿ñ²Áà‹½çrSé›xaŸ'à/®rOåÞí]sÙRgB‰{ç1“ýÞšô¼X£X‹ð°'®Ìƒªò{øú‰îs!±TÀÃ5"Û>Äž ÜôÃèLû7«x»^Ã7=/ѤX‰rF_|©;nöY}L…ŽmJ¡$ýÀ@rÔ¿pYúÏG °´ŒäÙ›KÁÊ®RP2¸™ ›*wƒ*mŸ†b{¾è¬OÛPúõáî7Ì)‡ž:ôÆßö–FÊk9.#ON¹Éò¶Å%ëÜÝ6´´JÕ§'íѬéÑ×å‚%B“ ,Ã>¸9þ¦$=ò-Tm€7•Ó€M".¤€Î.-ô¬w Ÿ‹ÆàF¨,,¯@¬9ÎéIú–~I;¸™âÄ+øQÁ€u£áã3&ä›;ØõÍ–¢.áßHX]¾˜~9rs@@7”T¹ÿìÇ. ùöÙ »‹8êïŸB®Î@Oél4\"§Ñ Ì_`äb@ [ÄüœèùBòü¤[úÕÛA)/8 (6`R¨¿ß üËRz1À«áñH*”C›f„BA:+F7•€>¢z7ÉÀoš€{3:’H“uçhžg…à6Q¾BŠëÏÕŽçDeFòU[1h|.¦6>YçîbzŒÑÔoƒ•…O@˜ÓþÓRåÐÓ·€þoë†XúerCü(ÜÁ†GõgU©˜ãî™ Aÿî/êàf…¾-åŠí7Ìt¡_O¿‚¹IyjÖÆÆœMýf>×ºØ xó¦Ù^´Vôbu€sa#UJö 6ag ÔX[RO9—Íÿ;Â?Íñrá3 –¤Œ6‡›,ûT½˜ÎàЯ:‚‰:ûX—_–~Ñáħ)žI2zÔ`ÕÁh‚°1,µ3¨AmÖja5•Zð¹0ìR/å±Î§«ªC3•ò2@7®pL¿¤ñ}•0ÊIX]Ãy æPéw v¹ÆÅµ™bœt.Ì–ó¸Ûé€[N 5b¨æøZ saPí=Igr–½©8àÖ7ãßu…í§sw¨Þó ã²4'” t.D0˜m@Æôƒt&gl¸‹2Þo*FƒU¹%ûÀ ¼ àƒàÆúíÿ|VŒ?¢*‡“ŸàΟ?\Ђø?¯útþ‰¡í]t:xÏæM?©÷Ì7²´¸0.*;{´Ú{.Óp°Î.e7= ~Àšé“þ¿œmg€w¯»±FÓz/3P½xvÏ }–¦[Çû aøgA12ÄÀ‹ Ôn¥„쫺ÊÓ¥„Ê_¬/¶ð Îr˜fV-€ªÀ÷EÈî$ –r3õ•Ñßµýœ¹t:å×à _§2:´!9ë åoÿ!ë\·\µa(ü¿Ï×>€‚5 ÆØÔ63‡<}ñ–dsÚµ&ÚŸdùÂÍ0$!Ë”Dªí£€ùæ†ù^·ê>õyøëë- wI»WÞØ+—žw3¿­ö„MnºIb£À©Ó~‡)õ‚İk£SØ>Þ\sâ…L‘Ûî×ù"Ø|œ+u»#²óKëŸ †v®íìI­ÿÝ‘óþ»k©I×=·Ó•ÒM·q*¼v. ¶uÛ¨”M·Û¾îä>.7 »ªDXÜ÷ØÆ*ù—$Ông$K~‘ÚWD’Gyy«ˆ0“šÑªZ7hfÈÕ-í`.»Â¡8—”ÆÊ˜&šª¼€ z&héKÄþ& S …#W‹âÜ\"NÖ¿]>  =ës¬çñkÌgäY#^+w¸Ÿ~sPm¸O½M/¯òzaH3”rÈ•Ÿ‘ñ¿ª‡¤g=žÊy²¿wè>¶ÿðÒey8seÍÈlõ¿¥Ï²¼p|z½è£½¦+a2⃓ü涇‡;ÁO¿äÆÏN*?yñ¶¡ðp¤ÇîNJmÿ ]3 GîtKÆi`Îúäx=½ßöªsWüm=¶÷ò\Ùs—£©,Á ²ƒ´ 8~Œå9ºKÛ@¸„u@á—M(6SÈÂIXu´Ïšv'G€rPqÂX€% ° žRÁ©)sqÅäü¥Š‡s³rÌ6§˜ãmù:”‹åßûEÍDÕ@Bq`bÅUÓV[âƒÆ@ŽŒùÀP¢Í }d6›úì6æÒ9•ÚLšé…GžP„·œe .Gzá+ÖæÉŠÛZ9û9'ðüùN¸x¨]ûAÞÑ7­bl³-Tª4c<ƒiDR gXÂ#½]ŽÑ©ñ€à$99æâtËtiªb¢-üͱáMßf“g€-#pj^ìž—}áÔ?0 Ææ…cûät¼Èg^´d;‘#;úŽäL^2w¦ßæ^›O½¨w½ðž+›[iY°Õñ†ç.«çœ³ÕœªàŒ5®‰?yÇú\(‘É]Þ5p±HîMäL&ÔØHêîôAìÝë½iËð&p1Ù)I»ÔiI+4YNÝòh9C‘}îj b#?SwÇÛ ¸›Õ!µhú’‚Ék ÞÞÁàÒÔe@êö F‹Ü :Ö¯C=L@*²é‰^Iâu?rƒöèÚ_¯LÍu§ÔqåbrAQW5"²êbg‘ÕcµêEÞ]NÕÏ>ÂA\bd“Ö”.Väa÷4¥8¨\Šß=õ ƒýå}F.ª8ÌcFŠrÀ)l² ªôò­›–’ª@‘/´@Žž+©c×Á`;nÍ©M+ä× Î£EÜ]Š*¾ù ÍÜ}}‹±ë‹ÀF A—àìøƒ£sï/ªA½Ïr*žŽ/zCðÕ}Pd“×¹×3y¨¸â,®ˆ…4þ‘êüÃÞÀ¸d®·æ»þîÍ-™àFÛ cgrg4FMò·#ò$¨•v)DSÌBwGÖÆN±B9ªH^ÞPTÊE-èXXŸŠ÷&JB¸éÊÇ4iz4vœE%Wv°!cÎTh&§>[{:X˜áÎ’ÆŽèÉ48-¹3[:±z΃*Ýt;  æÙU”¯®ø¹.Žˆ-¨`h­‘ZÓˆÔ Z4z¦.ÜûäWXìjªñròp|ÊG.‹œ$­@ àV iĺZû VR›¡ÆÐ [|§²LôùÀý‘?’f(ïú<}Y0€³š%'4±åüÕy·%“¤A*—°Ú< (‰%¿=ÙµVP°Bê†V1ø­Ë»±ž» dGJÚs†Ÿ–£ ‡b€.”jsjl„ö /lÛÉhÀœdôCšìyºV’h‘Rd-Fnîæ¼ Ü>çc.†èeÔMoÙ€_SêÂoؘ{Á`yÃI¸§¦ôω6vM80•)¤{˜ŠPrªÛ Ýéƒ z„ê…Fé/Zä®Öõ¬Ð„v ´~QhrEÕ %m+·æˆÄPÞmù0ÂÙX.(ßKÐ%Ú“Ótpi Wgw­*ÁÄž3"ËÓ»ÜiNÑû20áªj8+;E‡Æ“Â@ÉÉßMYè›+J øPâ ®1¿r}dÕ&‡´ÙÁÐ¥åýr'8`Íþii¢îŠîe5ŠCµäG&V®ñ¬’ïžÙyŽ¢™l¦9¡ÉŒ€YŠú½¨\Ôá²HyÉûQ¸V/Ó'i*ó¯Eš'~QRÀógc;áiþæä?ÎýPªçÁeÙ¨¬ü¿€%7¬Jà7§&qtãoÉ;^Û¤øˆÚ•DY„’ê™—:ðê®úaè½à°àÝjâ3T8áäȃD ô¼ÀÀ·fÀ¶ÔPòPRÍ¢•tgN*v‚+_0´24äÊA%A0ó­ª¡Ñ úúì” ý€`U­œ‡æ-R~ãkrs”Wd°i—QtÀ€¡Y‚j\}•HGœYm2™§íò7IcÀ­½æ»;o%‚†¼C™ 9©[.ÕZU1Â)x×ÚKá³n–MúʹYPª}Nx‹ÚÅD>öÝÐ<íAªºus—Öò®úaTŠ wô¸SRå¡b!ÿÑçK 5 „&.}Ø8&ñD¡É>Bܹå‰zÑPb>W,`<ÁvÝa–SS-²Dý,ÑU·%jâZ× ŸMi%±Â’Ïèø¦MÈà3EÀ…ÕLm€ÔÝØj†ü“NU*Òÿ»…t¼?âœÏj8k %'ôjlt©ª¬dñ"¶€A²p5°i˜¼4ãIe(˜®,ê¦Õ{ø0Áþ¥øÃ¥Žhν´³_pMÞ6øüõ¥z6Õo.€x(©Fjl”Å´ª] ›¿17¥·$…Yá+jâ¡–“R£Wt’8ÈOáÚŒìèÉÉ.ˆ£³}µ ×ðÿ%²(·ÍUH‚I¼Ú„¥üçÌRyf¦éú*0ÜL8lLŽžŠ !ƒè‘3Ò$žX&6 Ϲخ A«Fÿìù Kˆ˜¥fP–œf2§qÄHþfò½Ä¯±*š¨œ²6BT2<ÉF×t¶È&˜ cλqxзçbm*ÊǃQÞŽÅ´©JZ¹RW;ËéZúæ+”|<°÷8=ÛÕ~p¾ÒE©ë2Dêîôa#ŒDñR-¸}Ó¦gÔ¶TÃ>èGýbru}ÃP õ–•Y} ‹¶„Ïqú8?RÐV¥M%B¸@l7û³c¤5k°ª|34ª`*Vå0¨8] …¡g·þ¢$ÔõE1veµ‘LV÷‹ë½ ;dø‰Ö®[7’`3æl'ô¯nwBB.jie.¦µ*l9%¡8 ^Ž:Rôðw ݱâ8ôªøß¤K»öž‹,¬ú«K…¡išÚD­-KC;'ŒÞŽº)!o)šrqÒz?=ãWqÈ·\\ú~x‰Çn÷©ã§oåŸ;ðC!àÃy"»†¼;ÊgDqéàŒ¡¹ç€ûIÆ’ÖIñRv… sTù¢3†«5, ¶¡4Â(âæÀ$|´ në ”¨³vŽ1Bq-¯ÙÔË.È[­q'Å!ZFdUu[·EËд/IƒY6Ž€Æ߯P'²k1°ž.˜W¤€ŒÏ§˜VØ·Z.ª(b˜ Ö5²kà‰ç®¨õVØ›Ôb€ŠšS7“¦ªb– ôÃ&ŵv´¿¶+~àNI½¶™âê[©‰å~›àQl†¨nìM™»ç©mƸ49]ÆuÉñÔ„‘m/eô­¨†=îáÊMò’h9tZXmQiM¢¾»ÅfZ $­J~ŒA5S+Ya¾Î]9˜&Ó¢ª¹˜¥šª¼Pó®ð#mC2¶üÔtµÜ±dMj9˜(– ÉÈM0ôŠ À5•R.Z¬ÈìHeü7°@>&¿«íh]' á)Ã`e•¨ºå¬qàJu‡¾ÕFv §Ø—Ü)u€ä/eÓȤMŒ¥é–‘8˜ÓZ<ç@Þy7ËG+…aß°Q-UYeUBj]¨@9BšZl ×x¥+®N¸ìÿÃÍõژףø‡®ê(•£ë¨‹ô³l& iåâÐ\F_RØP¢1ÀÁ눫j~¤ò4N¦Å íÎ+'îÌ o`¼Ü™dð(…üjj_…|>¾9ìÜžû+0®ÙnÂA`/'[Älë)»ùÓ !Ûæ œž:%ÿy½(¶.gI&BðÛJÝU#šQn´ (TÚÆÉ¿lÁÜh׌œ“ 5¾)„+u‘îàÕÍz·*ëv–æz3Lêv£D]µ$R9kWûïϛҲTÔJÝ |¸W’œºä x<Šêdm*W:ÑSGVuq°T±´–wš´0Y2†:ps›ì]žY©‹,ªùÓ$/ÕZ°û‹bNJ&ä üF=q]ôwŸÅáJ³Šz'Þ9­NuÔœײLôh^¸|cÖ1»&ï#?Ýüw¤=R[–0Ý_‚_;ö@r8¸HžÀætüç¤=×ÙMmtph¼¹L«ðOð‰½¯)ï½ûÔw®h~£Ë]ìŒ@¼Ôã?û2añ»XÊ ³P¿¹rWø[Ž Pm]ŠM‘‡6/eLDàƒŠ#î.6‚õ}”Ï ä]ನ$ómIÁ‘ZFÜùRä?¹9œ¼{8Ô¼è¦ÅÉc™âëÜ%ÅÆGl y?.Þ½`4gþƵ‡ù—³´Mæ¨pÿ×pçÏÅQ'ÇÕ{K¦ÚìõpØY;W/nytý¤©LfÇÆé™5W`vÄKDcè,3%-ð-èoJp¥è$É W:àxUï¤ï‚>è^ò‚$%ïtBN®R7Å#ñ¹çÑLe×Ã<;è‡-áÔÅÅmº®H‘E-™DWi—c„)8'Õs‡úÕ9\´bm]2Ì‹ tɛþÃe²Ðƒ—'Sœž lúµMq츞<3Á àDñÉqæÔæˆØÜˆúlPºvWŠN²8Ù$1÷ü\h'ÀœrãÈßïÞ¥î†[FB%{JS<ºi¾,Ó©m0Zí¦ày뀤ïÄ"BÑi0c¾ªÜA îâ ™Ƭ Ĺ:&B.pPÝ><© ”´>y +KpòïÀÃ… z4>«—<)^“ëg¤Xq3Y }9ÛôPì›ñf·«$ý€D—ÛïaðmˆI ÄïÙa¶L<½³‚#S2¨¬ œzÀÀöìd’4[úœXEÓºª$ªìè€ò»böYrœ0ž³1<€ ÀÐq±F:7לtà¶Ýe-ÃØþó!Ú»íÍ=Ø~]íŽp ¡íÖöÉñ-©kj±×Ëí#½ülçvÃ_œœý&Û_TèZήüæD7œße¿þøëõb è† 8_Œ=À¾6á/í7àÖCÒ_:cvâvÝM‰tÓ†,„ðo(½Y”Kmjhž7g ¶Û,ÄP†{yfOrœ=ô^'Æëá<Ûéñ³Ö{}-Ô_±›‹"ߺ1%Ƚš–·Üåá3P„áqÝ)u­rÛÀE-Õ¯3*Dô ’7ßÄ1Þ­J-ÝÔíæ›r<¶l.®' Š,N@O w{%óÉs»;»÷ƒ•R Ôµä”ïÐv¿æ_Íá¢pA"+Póή»™¾= K·YÂ]€r•xhå-Rê6æÛ6N•ÒÚ©æ¾ÊzµB €åBÿ’(Þ¡Ô¨s#i¬€Óˆ–Ì“ÇtÏiKItKË­CZ=ºþ}o7U¾mÉ•¯;ù]Hƒ> |b;Þ)‘úK¿Õqᢖ^‘ÚÉià·E9¨fýÅ4ÌÏ”k©˜ê¼l÷bJâ›aû…2õ»šùû›•á)ç¦?ŒWíÜÇVëgYثʋ²šM)¦{VÒWm‘VèLXµÂ>„ðµ$â©õý¸ÉrœÍ-ý…Ëtc| [ÌþâË…ðã*U–:­ºbŒõñßHÛ:êõqx Öû:~º.M|Ôyþ2)×L-}XÙY×*tüKùˆ€Wê¯*„hžÐhÚj'å)ÜÆ%{ û-ÔOó”˜Í›Ó)ÏÈÂ)ÕÒ©ôX§úÕÙÈepIÃôû›xJÔçà [¯Þ¢)~X1׿>m©ÎÑÒIžè‰·$B¢F훎áÒgŠãLÄ~=ߢAŽ´’ á"Ãtö8©?qÇiåVg6œñÂÚRÖ•q‰•)úE-à5ß\>åŠô$|b¾ª×,ñv‘çü>’û«Êô‘>C¾„ÇÜçY¯TfKëܼcOåœ\Hí}ã•D„ŽaÜ^,dò¢fühôgVæ‹SQ®B—sácîüLm¤bBÛ=m=ƾi*™³ÚH%§–?;á —Í¥±I£2ëì®ì›7¿†7[}З%ƒðÛQILK'ÃÖ¨ìòÎé ëplüâý45OYJå¨×U‹Z‹£÷å!D¯u]œÛÀÖ™nGÁŸ”d<– Û¦¬:ízúoJ‚4š9Ùdk!T8Ê2‰÷»óçR~¦7àos&^ÑQÒ’k1zÈ. ﯄‡ûM ÎŽJ¼«Z½“ÃÏð×Ï©œxôÞ‡"é ï¹\_tHʹI P ’›Á  (K™†ßÔñÆD[¼–›ÝMê‡Öv)WΚmJ Â;f“AÎäM8'÷gm„­Ä׸½‰í?0V& ’匭a2ʃ6ÌÁ\‹ `;MfWŠ`«ä¬xÜÙJÀÅËAY #I‹~—œDá¸Ë)Þ_°a{ìQ@ÇBÝ]c•á±)°©¨íO/ÑÅQ–Ë>”haÕƒ…@$ZHr ì(È`¿È'€ÚÆ-cÜKÀ©Ü¥à,ËmŸ+k‡B(k·’ǺiöwêYòüñw-§_ïÇÆ?’æ{*Ï÷ÿ÷c±V4-ñ¡†b¿G¾žÌôöAT¬›~ñ Ó´þ˜{Iæô³å%ýé+•\ å›û²q§GcÊFÑbDƒAÙ ª¹œAýjôboN#Hïœ {ÔÖ´‚3ÒÉ öæxÇúŽqôBZxsÍQ…uÝ´KKÙ©q>ÑØÄâõLÃx> SQ¨2¾À„r 6]µ}9 ½ eGO?Z:gË\m<6”u‹nÕ‘2]|l˜rà½DV+Ã`Íö¶CÂ…\bOD šbæ!ž3Æé5}¸Pˆ§À Á™Õ¬6­¹o3$"+ÔG¾Ò§p-»ýý߈6ÇePÆR„z²PL>B~íns‹ÈÞë™ † eÊ›-dTõc`hóÐ-}ËèçRŽ]†3E ì›ÑR™xY⹡ÍbwGd…EªAmçà‘Æ®!Óh^S0pØø”¼×¢ÚÒ±m([›`Ú=WÇÁËØƒ\NÃQ¯ ‘#]C}¸ÎI.”51çmë~•ú§P>ÿ¥ž/BÚÝý²H}ðüc&FÔP'âZŽ])ˆ¬]1 °þ3hµ¦iC´­– eÃá€i…mMöaïöÏÖèhp(+ð¡T‹Â ë¬L²1šŠ¢÷×Ï$h ,†>Ĥ¥Óshi[*dlëÝ)íÑ­½mYÎ÷£§Î¤>F u†Úݬ a#íA¼7pCY!1í5* e©t›êïø<ÄM „’o©³•/ï3qÀÜØ‡VÎekà/.l‘Añä5vˆj.§¢½&†¬Z”ã© ‰]åByÃ-îƒâ{tÚª>‡•"xGK›PÅönaÊ  T¬Œ.X~'YÁØ(5_Ý)^âBçCò§ÉÚÝFdoPgÿ­{¥rPÞp#c(&iÆå4餼‹õ¢2p½‚nnÚ0L–zë´G1%µAåX.Ü)ï‚é†ûÈÜõD*´3†÷v”ƒöh´¯‡í%jN}Æ.H®Z‹Uq#”RÓPøeKŒ'ÝÅÙ’¾È¹`~0:·*Òó”Ë‹>DÖ®þD:© iÉcl$½Ú ”µ 2™ÚpcxPÃçÄ7é:£sø2Î\NC4`>¦à3Ž·rFRe+eݤýY .msY i ËüVÒ¯Gé~Çÿ‹Ë] ä—wµ¤ã1ø¬¤vYIY ‰Ñ°ÿJˆõQÅÞÕHÆ2dA¨ +#b‹"'}µd‡¤0é¹;-×1öøD;c‹þÒÈ{ISÓn}Üå‹PJZ輌5ÐT›OTèÅhn‚é„p-·q À”d9úJÅ˼±'¬Z‰\ÊQ‹lÊ\NEß‚ÙÐM9¢hê¨)®® j¡»œ·?é‹íÂÇ&¾2ñay¨±ïÑpo‡U3¡¬„y*úN¿’œéBâ°Ï:œD ½[ÅßÈ~ñ9y×Ùw–µf~;æê8#¬Â¢S«“Ü<û@EWËMhCtvµFÙJ´V¦-¹œ†xrÛqŸ.†sL"ä„ ¸i‹#šÕvõ~löWPàSHKþÆaÞbÝå¾Sõm¯ãRôjòÍÃà oªG}±o¸`÷ËróÝ_ƒÀȰþÆÜL(;r9oõb´ µvõQÛ&Mµ9xlIí&Le€HÒo×%¹¹±,%-§¤â+áÌm2((o(k¬Š«Wq¿œF;'‰öèÎäõûúJBYñ/+#‚:G7~°`åÆõªcãYçdû°LAmR¹XŽþgœüÂ…\∊@4ݲؠ×XAW{"…SÞÍûòÁOÝ>7« •õ¨åC_¤ŠwËy¬±Èɶþ/&§:{lQËñLm ¬G[ø=dˆT|ÿÌ[w[þwTX>vNòi²ÔñÅhïùL"Žv.cCY›`ÖPJö¤ùwír¡ìÈå4îÈ`"°\(oøßú”œNoØâWØH\bìÁ»Hš™rð^“'Ä®h‚1pør.‡§ó׌½Û±÷óNËgP¹Œ K¹ìh·Áµ¸u´¡ Øûª6:ÙÃ"{DÖf-L§ìZË®¶Š¡š+û`x‰ßýÿÚ¬Ý)ï†)¹vÖ„î‘0bµìŠi‡Æ´#°g(ƒŸ÷”µÉÖ©¦ã§ÎˆýKÿÕ‡ò&±¥õ koölº[CÇ¿,ª¬×a#²ginmåBÙ³ ŽFù«p˜Ö6>ãG Aã~Ä]ènÔÆ~šj_<n{¾Û¿j£ÎV£-2¥£¯äA‡¿GmÙ®Û9± Éu)RVÀB€.*Òݵw* èöÍêOMbÆã"B÷ú_x¼îGÊVÊ2òéãöõF¬ùª}žñëT°G}º-éûÕ0ÊÊåt\VZ„âÓ0È÷ÔüJbDÙÈ«ë™ÊAÁÃÑSXÚñ=ÅA–£¯ÄàC¬­Ýj0ÄÓàw’ì¢Gx¸˜â*'0É.{3{sßêGœ%C0S PVÄ«Ÿ· æ[»k†Gºv’ì¸ÔyÓ/Œ¢|—ºÐ]ˆž€'á£=à#É0æ–6F7GY›ø¸=ùunÈ¿k— eGd÷Î% ¯š2Ñ,jV÷&üÄ…rF“á¦Ç¹sÌõt\—ÏZKÂ_,i¸á¤lGYÈrñ—/L“…aæ¡1cîѰG«j—!˹Mn;/C¯ÚŸj|À*ö§"eŒt<ÐЄ²¡Ž!ºâX.Þ‹ýï3áB.‘%Ñ4²`¢ÆX•(ïlyèzR£ì‚C2l¯ñAH¿í2œ)â)¨LÚZ'¹·âšÉœ±= _jPª#¦€r(z'Ü% ÌRÕûîñGœÔYçë—š­"F¹\MY‚A5Ô°c‹Ù\/56Eµdé“*êŸ(Á 9З|ñÈö +‡EUMÔ³ž¡áôÒ 3æ%}BÇOƒ$¨µîˆ)‘3 èfŸ6M²æÄ…øn€"/8õR*Ù0T5HHÄ¢¹ŠÖ‡½u@ÙZŸ¶3Q·D”CQò„K‚Bl2dĺBÕø‚ŠâJ+§±ª{7mú،ɞÊq¯`\N1À:¦±Ïæëöõ•œƒÜžŽ—GÙ_ŽßFñ<svüçº ñˆÝlGÁä4¨´dèRÒ„%‡ÅE>”éÓ[U°–˜ºBΙœ• íGQ{·]ò‚i,‚)*®´+ÇÓñ ^Ø“ D†}n¸4ÄŽ¡˜JÂÛ¥ ÉD”äÒÓ”FQ6·Ù?/®¸W.ß™Ô:8E ¤$chÕ;™£Nr¿¢C…ˆÕe“ÓXÓ&5q/MŒܵ9UÁyŸ²5ϲe ŠW5ÎûsZ•\¼¸D9­3Ö‡Sä¥_³]=ËWËɹSÄ-¹ÀqJÙG”N?²ËªúMXiñxv’ãì°åN^;æØÉê¶ØëürФ]²õyjK©mU¶ã£O(×a¾þœözH5‘Ó3@NƒŠóíM}Ú(6D;e«Î±îOWïÆ¥«½Ž§â[¶—Ry )+Öùôï©úV«sùVìó•àgŠJªÇ <=.¤HpÄŒ€‹Ï1ßÂU¨ÿ#Ié{‹+Z’Ô%˜HŽ}’V¯gA…ŠÑ¹qkjPÚD i8ÚŠŒø3ì‰û ÕêXqz‚§ +êÀx;”®”¡;¨/«A*EÉœ2•ÃEÅsKO ÆcB†m"þ.Û@›û|µ‘zW#Á `%|€qÊÆA¦=Q>³êr(Z/ìZ Œµ:ñ%ݸ½Ÿrºp÷OÉŠ8$Z>sIpÏ©¿;¢’@æú‡f"æ7YˆGq°Ç÷i[3+”éŸqz€$¦AÁð˜ƒÙGIÆø”A´®­™}\I»æäþíRö—Yœ8(•@Š ¦áˆJU˜÷4ë]|Õ—Öà6fCïæ¾šÑw†½$¨m½àác{NÏã!ÁÈRáÿŒIÈ éæ®`9çö@Lcº¼ö!Ô: 3 ìsÀƒéœ0‡&†‚†‡WÌ9ÔØ! óõ˜ xŽuÖϰ¸ð?¡Í @¼$Á¦ F²B ^L² x.ɼ]êókkÓ¥ûÑSboh³É,ÝÁ}¶¼$(`­ƒ’l5›¿«Q]·¿‚Tõ¹µ®YL‹ÿ*U¼§Z|+§Y©“š†õ-ãH ~bHCëÝ{…r:h ÞœY6•`Î%õ0–@Z½k|"w)—±~%§±*Ïð=_Q($ÁµÚ©Ü&³î©J˜Dæõ@;—-ÏWõùj«ßw€ºínƒòªHÒô -£â:›‘;c0+FÉ)e¾•=GfÅ)~D-iLúX™_>QHP N/ðb뢇ñ(S(غB: '“Â!ÁÑÒ˜Kö§ƒû~´†¬#}kKÄ/ω…r(z´ ÷×´AŽZÊéB ¸RO”’8Rd ­ÊÇ‘‡Y FÖ ;©‚žñ±ˆàóôDÞn;¾ßkt»s•¤:'£—˜Íi8úb”üc]ÊþTî–BÖ z¸"Ï™¥Bzjí…è;›Õ,WlFíiÔqƒðÂÞ f}`\ï2B'üm«AµóÊK_ƒÉCôZe²nlÔÇþÝQ×#N3 *Ñcrëž›^cÚ$Á Ç¬â|;à°QpÄ60ס&EÅ2¶Ü•4¨ÉôáëbóXKÁi©Ç¿dÝ"fO1)XcÂÿÙšÓf5ìè5d=©=ÍkEÕòí`m­›éÈ,·?mqL{Nƒ2i( äKMÌÖ»ûT·Ówì,dOÓ;zÉôa¨¨œæ¿Ëi6 #/v`Ù蟅í^¾P2()É»â!Ó¨|M™ö­J¹š \˜6ÎŽúp¬ŽAÑ%,BK¤²PÑssˆ—ÓIëòí uâ©F‚‚e¾Î½ŠóKª¡TºËõH>y—´ –ÊZB$¤áˆ©Pá¡¥N0ÇKªavˆi1IV_Éq'miå4Vž¸…Á üކ½dâòÙn§Ò–÷|ÅŒ8aDSC ÷,8÷­[‡F…Š8î›zê„f÷ @0²o1;ÇBƨÄ4L|P9P`«4å úû6ê¯óéXŽW÷<¿¨õT\O7Z½\}z<å_ú#ë#Â`÷m)Ê¿dSŠŸRm2jIúÆQuÃy¤5t5® —ú£ÐDÉsëÆ/5®}Lüý9 •]úQfêI ÜUÙ|éT÷-•ãRo×Sg°ÿÝ1æÝØÐ(ÖÖ£T6?%Ô-¹*i}¸ˆû‚(ŽéÀžêJ7ˆk¿š³+@ó›q $L讹#mÂÇþl)J]PÃ>ÒA” óAJƒli%hlL1ÊI¾æ:£@F¨Öã–È<8èÓõ †ž$·‚=×…GŠ4\rbààî!ÁÑêR$(Ö-‘bɘÁW¾*{ÂÕô©°<xÖ…-2Ss1p1) ò=¦[ ;¹(ĺw‘Q.Œ3ý nmË”Ùò>·‡„ 1›EÊÞZÍš'½œoТfù7ßXõš@—àég àÇÂïX¼ž¼‹CJ¥š ‡5óSub#«¤ƒ¡t Â{™ms1ˆi,b ÃÏ;ÉÝè-µdi‹ÙPÓ¥’Ì[·~ò½ÅnË¿;t/¡óÇ{¢€Ù¡°v.sžgRÆ¥uÍ@1ãè.ŒN³è«,Áˆ£gIJ\ä¾½šº™£uqHÃ1³ušˆ8h·›h©»mµÌ0n´ÑáG2 ›Õ˜<Í'îj“ÙØž†ŒJúÁš KåR +§Aå³ Íó¦-LOqŠù˜xâó©òÛ¬ÖøˆdœZšècëŠoµÞß~êEFUÔØ=âÒcîúdÆó™òž+G‡ŠAär}[ÄP£ZæëÔf³(BY¼5Å4ȨJý«Sãb¡°àÒ¡š•`„E~LY!”s£Oû,%€ð1‡”™æý9¡ÃÃàÑIDl¹Ti,‚9ë »²á!Ø T‡4™à&î¯iýÓZ²uO|í<ñËì,›Œ„ÔØ=mj£M¾àZ5N œ*¨l/³[YãÊ¡æ0îXpñWÍÞánƒA7ìOq¤4ÈXü©¼Ûå–ô2F/SæîÓ~$O¬qXßÓ®/5XÆcÂ\j²wêûÓýLHPìRIÓ[ð²¡+,z’±˜– ÔŽyu‚-v1ª«‘àÀÄ36I€uÝ_j$(dö:BpHFfýÈV¤îJ‡T…˜¼Q«9tçÇæ7A?—sü¹‹Ü%(–¶Ûó¹éð^W ±`}ò*1EødͱãC„ Ié¬FõˬMmJÛ»I £0UÕÝ‘+Rv4‘Ó úi£PýngïC‚cÜòÂÝr”¿®¸¥›°þ%KÂqTâ„hƒèe9ò0–@Z½¬¼\ ºfÃ:Œ6úñØoB‚¢ƒ_p¢˜yé.„ÄþXñä¥÷Õ¸ZN3x£6d°˜÷Qj'¡8*VGÏ ’@FY÷iO½…Œ”Ôø&SµœWmMæ}á€ê¨X=ƒjéÙ.>ØŠ.MGÍ„ôu†¬uayUTûÙCÉwzúøíù‘_ž_YYNm¨“ŠËEÏXTÉéøWºè$ŽSK…Á\û—Ìt°º±­Â“b_"Ç|˜ÀD;2Š BÔ^I¨æHE¹ä*ébi…_©)Ûmž@ó%ƒ·×R­Š·L‘h¢…rµICÿçê¯Kzíyº5¨ƒ¸%RìƒÂ»X-UÔhß—×R¼G– `m~m ,ÎïR·¤x%É}r•„½J9ÞZÒ c…©JÛÒ©½qÙm¿}Õ\ø„¹éðaË—Ë ñ×Å»;ÁKNcUÇ4÷":’ÜÕïk:,‘‹’ñе Ó5_cmÁ®&EDª ~:Ø{ÉŠ×þ4KUvå&x¯¡’@þÕ;4ðz³‡ä-g”öèVzû]­­çÆïèY#ð°dj¨wjB½“8ÐU'UûYˆ&A©“f;9UaZTGÞž™C¸×>–­©‰Ù<ýi6ŠÛC¹ÙÁL¢Õ,&TY) eöÁaÕ~K˜6Á ½â\“B2zô˜†#jW¡ÞSÍÛ¬ã³çÎ9vƒÏÖÉ’b>HVÅÆÉvªmîézîF™de”£Zi ÀèŠ%;~„xKxUÑE¯‚#3%ud™PIˆîEÅ.X> ef–ðô¹ÉòvwiÅÃ[Wëþ:»Æ¯iLž¢? jxz )8ÚÈñývw{O;Ÿ1OLÃ…þ‰RÂ"4)Õ­çIþAJ ‹@WÌRö§tÅò2+ÁÈúáW)J}ÚÖÔjùä,l“àô7? ¯FXMßA‚R6K•téƒÀ!8É´’¦Å¿ (¾“8yÄØb}C8Zdžî|1˪~¸ƒ®¾tš°×©Ý’‘H5LÒšòEÈæ-5^'è*M 08ðjÉ|ì~}}I˜wØýUR ik8$%åÇC!mÖ[RþZê$ýÆÓ¥_&¸ iüù%Õ€¾ªKzáIä4ȾԶAÏ¡H05&}©a$¦LÁ£lÐÔ$qò6saU:YŽ¤Æ¢Ø¯Jî¤4Ȭ¸Fþ|HFMÔºÃ37ÍÛq¦âœIêmóõ‹{Þ½àŠ Ei¬ UR³M3ôùú„ñ?±‚è–yàî}Ràw¹õÉÛ ã0ŠiL›;Š01½ ÷ ÏùªspŒl/óžÞš§ykKÞ­%‡¸¡|p²öC*qnÂd/Øbªe«/5’,Æ =0ƒ“Ì,ž`ÖG»¾ÔÌ6LœøÐ*rAòÎvâE¡ÃÒ1\,½|DÜ?¥w…dÄ{.)%Pü .ëÖæš-8öÓXŠUÙ㾤JúùˆŒÒ§oF#™•wc¥€‘ “/\C46·ƒÓ‹âÉæ±í8»J #©8IX `ÇÒ_Ò‘=L¶†2Ut‡^ŒDLƒûŽÊ¥"½øFñ¹1;ñ÷ ¿[‡ Ž\€Ü„—ñ«Ý_°*O[«õŠ[îJ{goN(UY) 2«·Ý‰ü«m‹C ±yMj?X—oñâK=oÈ.ÿm< ;Ì!Yê¶Et¹‰@Å÷©w×:š›?ÎU%AiÀêsHÀrIÒF»˜1½˜eŒæh~»Lá-ó‹Sü²e¥¸7¡?%fÔœ Ê¥Z”k¯Ôþœ|<;I‚³¾7S`$J$6 sÑÊ)ªÎÈœY6 ^N£B±ô¬±È;rÁ„`„:€‡;ñG´å0çÇG²Ÿs;²ôøãƒéÅS`lFüCaй—Óñ#ª’=³žÒóäÖ}6(Ç*»¶Ó±öæª_õ-·ø®*Õ&-Ï׈¡щr(Jppßds½¯Š_ãÑÁ¯ûúÿ}˜Ê»ÏF.éÊ»±oïßЮŽá‚Ø”ÁúÞà‚è.$wgOñLrœ›g»cb©†Å+áy ˜ÞèuûܵU¾1BÄUµ¶2Ž TVxåù8„u¹*S]Fu¾n_£5Å}˜Søéºª§;Ї©w.Ù¹TÅðçÕúÉÄáŒuK&>x›—sˆCÞ¹ƾ-ÃÄ`pX¦ðý‰ª|xÉu—ZÿÏRÄ×¶¿ŒbЇ‰ìŠ´µn"{×ú%Õ;®‰¶%EÙBç—ÓéTIBF6$Ù8¤4 ?’Ø/‡ Õ8%RùVÖ0!׸›ìâÔ%8³¤²ÕàÈâ.ÎÃ(&£rÕLÃÞpÏ»s†ßBlRÿ6 x =18çýi,[¿1ç¶²ƒHXýßF1â|l!J¥|vçÓèj6Øõõ•Ä8Ä´¢T  ª £šIÈݱmÕÙ»±Šž8ˆ6ã ·Îxx­‰·C´Kà”|Îê×}‹ÞX}ÙìÁ©Tñ/A!rà&N˜ånty€ÄÄ}&YLá¹…w‘X·?§º ÅÛ©²r0åáxz󗪡|,T¬{c<µHEÚ‚Sk þCÕ¦;hQt•]‘‰¡A°Ã˜Ô®¾ý¦Ì½äÏË9ÀhÔøTôHL¹ƒ|ÿÑ÷‚ãUÎÐò|-°§7Ð^ ÊÊy•±—~½ ‹-ÑŸàq¤3’ä…•Œ&磺BPò"¬£ô¡ü㹊p=ñNPÞ~ÏQ¯ãGε~ƒ*èD×p;Œ î^@@ÇÂVXï³¢Ï:Í&kúÖ@‘8Àµ? ˆÔ‹©7àŒØuh©4ƒ|$Ð&JFÇýL´Nö˜‚ó¤yVB·wÐi¯ÀTï>åf”:±ø“%l8Æ de^À‹@Ü—Ûü‘I=>7&ví¥ê|Û$MOî ÒL»,& ñßÝ/ItPÐ’Œ± äÂø QóÊ»è ;Î&Âþ$©½ mbÞ%èÚ’¡ÚqÖ~ó –¶û¡b˜âsøs;;ÔÊ‘LVã-ûçBD·2$ìì?|iØ=á™6’7 é ¾ªÝ!uëMVƒô@TR¼# ~©„䀕X×/!Ä#Ég‘–k%±^ñÝÙŠ˜³k:ØšÔ‘ ½g¢.ÈvØÃ^3IÀÈìÝHiÊ‘ZˆŠʆ +Ï«wøíú¦²g*~88Ň:mh¢´]‚ûõ/´¹—Ë4æy÷KžÁ‡¼ENÑð^ÉúeiKüf!>k—‰’4¨‰¦ ±*Xt{ÑL%—¶Sª€-&UÓ?Øûˆ™l)¨Çg âdºJž?G3 ïöm“4e’¯dn´Üߦ†Hc!âË.†6ç [iE>È﩯–W]Í·Òð¥þ—T‰hèêõ˜t%Í –ÔÂÖ«Wz <†[&É×{5_Œá;©¬r¤bÛk¢¤ 2ÐGZp=ƒ¾J¨5¨Yа®wÈG&õšAˆ5¬CDò5äH%ô:b¾ KñáZ\[ýbaà¸ýؘó‘Lª7™ËöÏ´½Å‚K nÅ:ä <±?¥íS®¼K`Ûëä·H¢“KË „ ©¦GWÑ’A-¨eÐ~¥] 'àd ãt5?V ýÞLºK ¬’ž !@{!Û¯D!`“?Rˆ– ]~øoáO!¶¿€\¸óɘÁ)MH~dC=Ò*Ҍֈ ÜA Ÿ™ÔSÚÞAygþ´ þ&‰_Q¾Ö;>%-)KPÉAoÑÀHûm’ÉKkúWª?ÂÆ|@íú^ŠÈP$Hª ïAȸTB²?H%¬ö|c`k©U4ø([ _º„˜<' ®7mÎLQ6l’ÿÜäÔT™k¥·à«Ù‚©DÁ5ʬŽtH]˜FãÙ>îúZÙd±nBÊ—Îßjˆ—Q¹m´Íf% ]ºtM ç¶oÛuÉӞϲ‰þÈOYIuÚî'C(]ï)gil^{j<_ç‘Ám½¸µ¹ÿ]2ÎäÉ_R2¨‘lÉhje+§OŸ¡&2iɹ\Ü§È Ò ÐÏ*9ĬàÌåe{‰Õ4l1 j€&JæŒûÿûDL¥¦Ò€ Ðxu#±?5Ê{iX%è¼¢1—f×íd“}hÈðE²¦‚tõ;? ÍÊÆ¢!mµ!ºÈ¥(*Q†ÛVÎT©,é ü$+«¬ö|m?‚åÿ°|Þ?Î…õ'ð$ueótÉKd”ß”Sò*ºHi;lœË"¾'\qEë¯+U¿#T¤b·æ—Ó4˜QóŸw¦êïËf’(ØÏóCàBÌö[iïÞÀÝŸ¨(á{éì—Ô—H3’d2{î—X‘ýiÅ—(ª—œ«€ÙRÙwæ0z ©1³×“.<,ð!Aû¬•ÄZý :@bß¹YêUÄ`p/5Ò¦eXj¡¥J®õ<¬Œy¦ ‘x–,l-ý”®Á_À-ÜR•À—äÞkpï'P‘¡å±ðiàëA<}DÐtI€ƒ”X·˜•Lrð¦bqW+u¼Ê‰ K&/Ó«•$Jæ·#mH Ÿ5‚é'5£±0É&JööCª¬¬”µ¾ÑW:…¬gà¼x =_¢¦óšDïEˆÀ·lï©Ü„¸L¯¨-° ¨3¨B4Î 3´È'U»W—Q–]q;<HôA ›T²í/[P2¤‘üŸ ªhp­A~j$ÄŒ)ÿ¿K©FŸ«ÈIüHpA´Ÿ^e#£Mо±;¤Ô *A‡¬ëP'é&* ³ «‚Züˆ ZÿN8“’TrˆlEÅ@¡ ø•àÒHM4¤– )Ù*)ƒKÛÁý²àë÷$ÂøëJhÀÒó Ü-¨|œÀ–äÝëŒTq¥bíEh­ JÁ¯#l¦ÂÚ2!ú‘µDx€NÐ7iþ‘e§aå¸ê5Âúö^péi礼²¦ÒÈç‚§èjÞR¨]DÒÂc¿À’…ìKöò›¼æô%~1~åø|.Ⱥ×öÚwVz /tžõ&wEÁr…j|SiÀãj”¤¢ ²ñ«gó*!$_?hº`/°CïEȾ(È̪ï s'ó·ä‰’¶—(ä`A­ŒÏ‡¦A lKÒ¥¬*ô¤U^© ðTä l;ñ T¶à7M…è¼Kú^¨R²r b‰¥ • _ao åÀþŠùÑ”EÁ…¹*‰è§·”jå!ÀíØs–r1~'pŒ‰×#  ¨lú5Ò[îë:ñ[öI÷)AŠuàâźOª—S…8Wy¨’ç÷ÁJÀ ý dŒT'Ǹ[”]lí”4+õ' C‡M*[Ò@ù ¸ÖTZH?ÅŽR¾©ÜµoéáCT)›VþÐ}*ÃÜz‚Öwf’4ða/ð4³mEQñ#A÷Igo` zZPÙ_ ÚÊ’ÃZÄ_"5° «2¥´ Úƒ °½€lµ÷…Õ7I”ì ‡©AjTÕt“•ÌVtÙ Ý<|¿ñ+ö¤Jêæ<¶¸&™\XÂwÒnšdð‚§-X>¨‹CÔ’KùGHyÁzSü²Uk;±ÝÂX©ì L2dAŸ"å§²O†¼$þNã¡UVöT:òI,æä}ÑSB–Æð™¼Uð,€Ô;Ô¶ËXUz©ˆãO”zS—J1¾dXÁ7oDƒ±äšÃà Xµl¾£ "yb©Äæ)!Ÿ K¼0®ƒ(¡X˜†ë:«Ú¯•Þ—¼ÈÒŽ²@&ˆðK»O”Yp@©÷Ô‚W’Ìò¼ ˜dr´ññQÀ%-»ÕùÙ¯AB©úŽÖº| £‡þÞ¬@Ôˆü;¿^&[Œí×(Y /)û8Rǽuï1-J*àþ'ðÓ²Mî-Gü¾’?Í×Åz›éÛ«[?¢`ÃXö2ÿ¦Íf¦ ÿHxúèËíÇ ÌQšTÖ,ÛU-8³ž¦I× úhÊGœ÷ÿÿ fl—a_|!’Þ¤íäÞþç=²_Ÿ)–À-N!€ëMãÎÚývzÏüšÎ’“ÁØÙÊ(.ï•Z|t ±ÎøeÈA¥·‰ŸøŽÿÿJ‹—$¹ùjèXrI&“Ô­ŠÙAè^Tò"¥ía—ï&]ŽÈñKuüGÍKð1Ë›M蛌‰çË^½íåù_k?’dr¬¥ç9£*›ã¶íVo fOßþá›_ž˜?©Y<•Í#»ŠæžzžçãÚK³(G@ò2_ SLåáwF«‚/ÍÒÁ[R?²¢¡D´ýr½iØ(`±<Y³½ã”ù(Ÿ>-g]¿Yð_É¿Æþð) .}€{íJ9žxÐ|)=—Šñúh“mU+í¢úÛd(XóуMX äÕÖª:XÆA¼T~% ÝTÌ8ª¶úR*¶`½)¾ @­ôR0ètuöž´ÇZeð}»t,2|££Ås*meLXrÄ÷øÜgÙ/…ø`°2àW}–ZC÷®;XÓ¾Šw‰¶b^¹Þ4¬­î î%IM”ð‘ ékq©õ¥7¸¿‡öÅwÍËMvM?®2àóE`Ôòö-%ÏUEGjV)7ÀÓC$/X#Iâ©^ne ðºEõ‡ä"Í`7Kjá¶Ô5{k”˜Ð¼eß¶ êŸÉ·SH±Y¯" Ç;Ž¡’A“xë ,òð¢AØZ²4 ^Ì‚êkkp³En’O¶æ,-Iâ4úƒëšíc™·‚Rí~g*m-Ádø8Êl›‚§-º”K^ð'þÓ&¦>oˆ 9´ˆ…¨ ³®ý’ëDÖmáxú Å;Â@tVo8v²®Í–Ü(JÊqÕdÔs‘¾•Õêõ¨B1²W4ÉdL6Þ â|¥U`7m˜?Ml¤zûˆü¼ê49NQ”I[ÑR+¹mFôŸZ½)þËݯ2^¿Æ9[#¨µFï߈ä_ÇÂ[¨ÓÕ$“™‹ÿ|(¨Ä—0€ª°%;uÃ/6\¿F»Æ¯ðûÁam[L2ÙûOóîÓ½÷tžûO{ÝšŽGÙÜÌúŒ_*V¶‰q$ÏUù#>H\Ú<äÛ{˜-X¼Ê aC¾pˆ‘ƒÇ”}ŽáÌ“LZ£k>&‡ƒdgÉ ZÞB¹YÑÿe&þËÖÙ%8lÂ@ø”=5Z‡® )àlééÛN$ iû}#„À€;Ië‡ c¨LDBFª[OÉæ¶Ÿ$ýiÃÙðâéÛñm¥üê# |½Ô¤d÷ßþ_°TEìl\ƒ4é0__¦Ï÷«½; ´æJ=ÝF*[ñãdí’lv O`šò©翜]Ž‚“?•EâxO|—Ïúil«ß¢’“רb&¶7²þ¯Ûò4Û¯T'hˆ™ y§·…‰A¸f¢—grêå,™´{·xgˆº6±…¡gD]›`˜Hpb^±Ï´QÉFÝ© ¾§_ßæ æ,ùM§™VÃÓȾۂÃk 10é‡ÐEù'êSzЧ˜¥£ç3¬ûSa%eÉNæ@].0®ÀK²ÓæÄèO«O¯ržæª˜ànÍSÜÆU1ؽõÛ¼Á˜XêåìÝ+ϧ£ ˆ¬û’ hvø·¨‰§sFÌNcb…üó´—Óy:Õo·ÖÊz¿Fo–µsãþ(+ ÙÞ`oåÈ l]ùgQzÇØ#„ÀêEoý-0šê4ènuáRÍ™ƒ‰f7«–1C½Ä±u W3’ ¢ÏÚJ6bp[Ñ‚¹žV«˜»7Ÿæ|bØ@îÑrøm/j•^ÐÃËX\-Иf,õïÛÄûï[IºÈ‘rÂù“ú—dè„-üºæÂ‹¼_‘”a<Sàdé%ÒÝêrb©Jxa¯’Æ|Ó|¸•ì¤9\-Ð3Øj§E—}Sz}Ó‚ÁZ'Eà” k±µ'ØK`ÝÑí3k9©¸V%á¬p<šd«y¨à¶°<‡•·Ú.x‘€B×.±µtüé¹ÇL–;Ÿbùq_;µM,®JlªùAЊo¬d"rQ.Ç)¤¼á‘·ºØkß¾ø“¥ËDÄÈ1‰¸†¦x‘-™¸“î¬kWõ3’ÙíÆ&‹ú L“UŽ„_lqU"¤œ…ÕïA*õt´îŸ­Œi ‹Bd—Ó[ú-ïC)DŒ¾èŠ èÚ†Ú—¨b]“Ê\Ìã{‹â׳@Yºå•cºõIUvΧ ˆÝ‰˜”Ë”j‘±l)ÿÜâZõ|rµ±jêVïLu’t‘cóÅn“½ò+6¼%0`-Oû_’P*Dón J[=ÉÏß¾†±%zÇïÃnëQx•Û»ËêJöY ¸§1*–ãÖP¿&½ëw`ïiŒ+]»öÝôŽò’:M3Õœ¼œDµŒG¨?ÿŒ<‹îBÓŸ­ºh¹lȶûÝ~D•‚‰º‰¨¼ •,}S¼|Õ]|ÞlÒO’D9{š!ªÔIÒõæésÑ”ïS)½Ðo6’˸v©kW˜›Ð–䙪¨ó§bÒM dÁKf‰6‚_Q«„ài…†JÄ,B´2ØkL±•ÇÕ8 l\3‚Û=ŒFnðŽÊè˜N—h`ë†GºžŽôE¬“äÞÒuÖ6ÛõLƒªÝuúÍ9j–ötîË ª7{2(„Ù¿›E¡ëCbZèˆ,Ë®Pc­ƒ®èOüó„¤ _Â,Òè ŒÆsë͸løCŠ$·dReãð³“töEú)³Î8×¼9Î õKäWu.š²³F•7ÔEÁY¶®ó†"ä™N’÷ø”š¥»¿T¡Ð2oÂ/Ì«a‹Å÷Hõ0Äý:Gì£Îô¢qîïR³…¦~:âÑ–ú©rÌ(yI%3¦6Œ°£»Û]þý.}CÀnbôœwwQâ†æÀ[ çÂ}#UÃñè¥:kz Éœ5uÇv«cte¦¢õTÙ]¤Ü£p<¤ì`1À^;¯ã³—!"ïÊ#)uíî›pñCjÉ»BBJ&¤ƒ =ad)¼z<ù¾GIãڅ樂I½¡rHvŠ|¥‹ÁŒÛõ+±i;q~ƒîøƒ˜ŸÏ`IsçhÊ?¤‚ø‰º/NDTÇc‰Áµ]ÎñËPr@øÚ=Háå ¾bþiv8x¦[eJ?ä’ž\3w—Tß|öt]iz~×0¿yí™tg]¦fÓÔMÌôĨ€¢%©‰vùö÷[„¥âj©Û-V£>¥Ž ‘ÌÄü˜ £Ö‹7òþ¦M}‹¿á¼5uWH6Ô41z¦Ê¯ùJ¬ ¿ÿ&£'ÔËø•Tê¤xÉÎÙEÃÂ%ë¢âVâÿÃѰ ôbÐ?ÂgK¦Ë1ÍzüUªQËXÜ$4êjÕ#hؒ“Áº™§Ù¿ç“-ìÎe ÷ÏüÂo 'igmÏöÖˆŒÖ¨—qÔxHšdûHœb…ø;è—°½=­Gµ{iÕd›ÒËÄO·Úéaþ‘–“ÔCœ&V+Y'ߟcÚÙ -yW8ç@‹\^T.«Œ¨Wðô:íùtŒ_c—y< ¤×¤N¾ŸÎ‡t1÷£n“’t‘Ñ ¨rÈ¥Þ¹.Qú-¹GêöÙ ô)µ ÄI?rEtC˜£-Ѻ>¤wô•Ž=ãÒÚÐ}º•Wÿ â-ÇÎI©ÐQ¨'>î f¶Q^’jF—AtO*nœum‚aݳ–#(K=6žAX©fÇîáñO*‰ è´È¦7Þðv ñããéþkš¡¦[É$]Æ8é'aëÁçiçt*d ÅlöµŠ›?¢ñ0ó†lr<½*¯v¤ŠÀ"XU!¯ºcÁ‘Fžõ’ãÜj¼í¢‹5©£ûô}ÖÑOõïÒÏú/1î[ׯÿ#U{œÒ{A—×,#hÚæPª8G‡@S¹(n wÉ[Œu2X×®ØÁvZëTуv]w-Çæèes/ëq䀠ÿ>ʶpnµS!Å Álwçø9ŠŒîS/gɤݻÇ{OäÀê6¾1.v?ão»^ƒºžšúræ3yÔ’]Í€ÍW¶p6ÒíÏ•©vÌÆžç—¦àðÞc~².*tt„ê?åkS­RØ…`ÅÂ{ÁTÿ*—l¬©§O…lÜØû2ÂWHÞ„í7ôÒ1¥Bž†‘´Õ8˜B°õ?=6ùÏ6Ôi‚ÓDµ¨<Ý,ài?[Br`©§3Ö<ØnqPÔ,yC]˜ØÈKÞ[OL‚G’ƒçGÉÎxrÕ”jp» ÂoÛBÖµ«­§½ØtQäOõ¯à¹sI2î³P2Õ ÐÈÌØ}£Zé¤OM<¯RY*z•ä?K>ëmTFñ¸y«ÏÔ|¿Z3òûi(9` j€Æœt‘·àûÇû©A˜ -j‘ð®¯é4sJvBP . ´o»Œ ¼•~[øõk[á¼"evê·[÷<Ÿ6ÓŒEáRicìGT{ R„à–Ü5’½ZÔøqX’ÌßîɧdRŒŠÈ!ÙÝÍÀñp+Ù‰—¨PËÉ`ûG.ŸˆHrËñíCAáeçcU{ÞŒ¬,‰™‡žåËŠžOŸâÒgâ‚(ìlKX÷ÎÞF;¾ßöü‹¬3Kså„¡ð*³Úè–ÉUCQÝÁ«OrБð—ë?Bˆ¡Û5(6f¥–:-=½\×ðj<`âæKám߃þéîC¨ÂÞ¸Iƒ^\(yÙßbPÏvAõ^Xp=iÝ3¤“+v¨½Ä»‚ç_þ.<­°%•¼à¤ çº@Ç1aíøñåFJƒ …’ ÝÙA'F ¼»U(éLDm?ÈI±ù™.v×­Ò(¾Éµ†û=A4ž¹!€¬‹®ç"d\Ízûz±´{·ûWÊb$ ×à…BZˆ’²Ôuî wúqÁ.9;è$bÈ3° š#‚(Y™ËA™MÉWÛ9:&t /9ZÃrT£ß•KÓ%‹päqaë|Êä%ÄÚTÞÅðÌPìÅ^V7üðï qÒpëÊpHü™z sòç«Þ•/"MYñ‡·%†ˆŽý’2‚ß+Âã.UÈ3èÙS†bã8Í^Æ;) ’uî ƒ§žK$‹¯«hù%™©9£ñM‡ ÄAêB…áÜ^ÝÊF:ƒÑEªîQ#ö9?Ê_îíoTìéCG‹ìڃdžjñE—åAB"w9 x?…‹ß´Èe¥:I‘œ'Êȸ)wÉ;ß*ì3f4-¡<~+QÌdÚv=›Ò©ÓàLuiˆµ™LðÎH}ÆèXÿL½‰|y´óde ´ÝkE™%à.¯Ç.Œ§QA8.¼w“íž4·5@­G”hÅÉCèÜÄG¥(Áë? 8oÄŠn‡ü(Û;Á¯p±(UZÖ«‡èº~Ïß ÿ`Áï7­J&N@{ü¦µ¢vø˜›–ÇÕNu0â´á™ûéÄÅI§qåô¶·ÐVÀý@>wr“xcTÁj%GR‡ÍçszLi ‚(ö0ó_ƒ¿Ø]l%ã³Ì;>îvYŠ;g• â„$®öL‡ß¬ë¡:—åéw.²s#1ãIW9¼Jå9XˆŒC+®S‹Nækñòõõù%øño¢\O2îîáO%HÍpøFyëÆq"êqw´d¤`ÀxJ÷©¹Ì‹³Ah„j.b(n>6ZE£¨,¸;¿çñ÷7ŽõIE(Õ z¹Ð‹°Ž’t£gK¡ l©Ä-Â+n¾+•ì8Ù¶«*òcº4–S5Õ¤3ØÛUe6ý^²„8¿ ÀÂaàh’A—jÜ¿””£ôp§¦º½Øxœè­Ò‰XéœèmËôr5ojH'°6*.Âè¶"Œ§‡Ýy.{ÐQ‡ÊØÐüoŽ6A’º™U°žšÀ_ ¡Yš Æv `^IÖ ÉÁÈE5$pw—o/( È‰¡‹ûÚPw?ÖÈ’Ôu50‚¹3ûÑ ÁQ[- Íßôk@v:SÝÑ!¹ïšm†ïžIõüÓ>S2î.U‚6oToY†/†vôôz–Ç.XÒòøM,|Fð^ÕB³ q5XˆRS>ªÞê°.”/º;y¬ÏÁUöÙ®Úd´_R°__² çU€‡Ÿع¢ÙŒè2·Ç.ªƵ .… 3OZ ù3ͺ¬÷wúïSù 0M–ä…:`p†Øeφ­\ñ$­Å×Åo1kI•$fìûHËùbµrÙM×cH§hi8~‰Yo¸µ“V2i.°§´g'ä¢zïC ÍÞ.ÚÔK8ƒŠNÇ*nÞo1Ë?Þ%ÎÛ-ËP¬þÆC2©UBųñý˜©°?#ZÊ’øJß–#g¹®E(1ÒIª^NßÙâ˨)T@Ëþ‘À3°n?„Ö6¨v½D øq¡;³Ë×U^6•mà÷ã†uíf3÷˜°ßÒù»)»KG„JÞð#Œ-ÿT3ųÔiéÀF¨sÌÙyY#Â(" —±:ÜIƒt:G¨°€ø5hY\ªYL™¥ç™zÐæÅªœtWìHh‚žrKÖl»j²ÐëGÄøeDåíþ—ŠÓîì ¯-š0–Lâä`ïFš€h|`Iê ±Ž‡ÛByî œ¾…6tCÄ º`2Œ!ér´:IÞIcæiPiQhÌ|2HGò)^ìIZQ¥ó$ÔìÙËËŒÉ÷›á-Uæh¥ÒÙN§oÒ+FÒlpmÈõ×m¾»fFRL’7ÜüÜê!±îYãÇ »k{{h&(AsÔ¹ oé| ý‚àÇtl$’MÐbd/Ũ‚ÙÔ-–Lê M½¤ï3Ä$Ú1]Ê Þ3þ÷€­w[£¦-»‘­W#üøƒ8R¸‡l̘"›q9 %;ÐÇQ[?)#Û ÎMD#ªm”ê•FÑé¸E óÖ¤Þvo×èt/Ÿ&3kÂÙˆC^D[Žž²•ê2lJ_0çú<­΃’nöhšË·ÖyV\µ ~]¸ÈümaÏôU-–1uDßI7ÔbH0+<~;¨S•ùÉÞÒòþf,ê84¨Ôh§Å,.ÝŒk¡§è$¡5òa´JU[“LüqØ|[oÕc/ÂèîcsÊÙ?OéÄ—t}•æ}Ž£—Gz½Bé4ÂÕË/ ÆÞ,Pç&¶Êæ>ÌXõ×ú|I5@Ë ´l¼|=Õã–l|]įÖ裑ꀥLáqåÙš³N#4n¼¡ÿfí3ržîÃn„¤ÓK „7& w¨=qÇ[vÎ.¬‚Xþ"ôâÔ~ˆ×¯Í5ßõ$¼ÌP¡uGu,:Ièù0Z¥c}>ž<ÏíR…,ÙIÉVè’SŽjév+¡Zó| Ìì4ûN=oˆìÆXTÁ>H[’hÄ¡ÌeÕ ˆL.Ë,Š>€ÆÓãÖ¹+$¤.:ƒ?J¸»ø(µZ/ö£G¯;]Þµ~yØ •JBCÆ–vD¶!ÙàÉ*ß’ ÕA§aqÂxŒ—oÝ ̇˜5‡› tbBI»—Mð†’ǘUfÕW‘‡‰_ÃÀÏðAt5#fú²§É„á@¼ÑÍ%=c"é Þ‚9&土l–ûhéI³dÇòXh/Âíã}šàÈxÃø”ÁúÍŒkÔÔIq¤·iù½ðÂmùDîB KHyœ¢áã•@’—­0ÿ÷YòúDQM£!›¥.3_í®Ù¸ÝHðP*àñ„ÑÔ KkæÑùÓ…d"6Bð!´8Éf^/Ö¼.Âh½ &ý:]’ziÕªŒõùxÒJ^4¼ïß0-õL+Nè;p.û·•}Ymœˆ˜9ƒr Z󨙒Ó4R®At°ŠuЬ\¨K¹ V+×sA;¤J3—u(e©¶ƒ…U²Ùk8è4œ,-Þ!æ<ÉqëŸRoHÿ/‚zÁËŒké 8ﯰ:I˜'0¾«tGL©‡# F½¼[Ýy$]½u.Û®G{•Ç—ÀºÉ˾|Ç‚]¢c.1ŠJPx­—ýÀçm׋€/·™ {ÜOùe-à’×ú[ÕŒé3UÚò–À(ÖIbWq!€CúØÅ4ˆ~œ…VKt¶„•ÛQç&"u»Y£Ë`)ZQÏJrèe'Áž¼ó•%DF 3Ì€+AœtG®ÁT|©-™mó¶ d¯õÛ K†1hø”X®óC ª¨òº0xp/þà ±\ª´^…LG.c.Y;÷l=Šú@ØUv’Õ´T«Õ´uúO–LÄ.\ñFÅŽÒJRby°g4Fý…÷`Þkxkcªäæa÷¹L¿’¡ëj|½JbÂùPON15H­Ù,I²ÒbþˆcÃòpñfµŠÒ͵Ÿ2ÎK„ä~{wÍM"Y/ã© (^ …§’h 'o“óÝìXøJó`Î5_mN’\Z Ùlˆ14v»iX© b§êjíU ÖÕ‡Ý<¼Äl6(IFëþÜ“z˜Iì:¹\Ãeë %Óê$aD‹-JÓM‡mÃP­'u 'úü¡•n áY½-©; !6Û•BÜçrw·IƒÊ›Ct‡„Ðé¼GI&a: qB‚1”Ø>è™D¶êRˆŠy3öøJ/<‡ü«ËEÄúDoHáIï.Æ6ÃqÑDûr®þ+,™TÜ‹÷!"TOu-¼§ï’ð÷ò?ï#Èhú*p:æÅ§(úDfžÚéæ“¤‰¶ \]¹©X.áÙ“ê .UR7Âi.b´U¢zãpŒñ)™„.»Š«‡B¶Ò#¯Ò6Ñú$òúÜPå[BÎsûJJè„!Fn³Á­ŒzlÈïX*Kp&Â. ü„}®ÓtÌ=ØÇŠ‘Ô‰"–mW[@ñRžÂ·ä¸z¿•\¾‚lqÄ«s Z.Žš¥ºèy ºÚéü½ þ©Î7‰ ¹Ø¸E1ö“8$;bà˜Ëµ”E•:€hŠn¼…ǽ‰‹~'v»Ù¸¤ÜŽB1î;yâ›só]ç–í4 CÑæÇL"ŠAµ‹ãÌèaH: ,~nöVÙy¹7}Ø}/Pç2Ž ««lÿˆ—{•:ÜEvÃ1wIq?МQ>«ìwÓ•Ý_ô™UÚ4þJáç) r7ËÃÈ¢1ÕPg.3érƹ3N¹• šÌ‘Ú®#¤%ò;x?çY[ìsÅW Á6ù=؇x¤ÌĹT u¹D‰Žæ†XœsAfÒL23ë K[D³ùë²lºè¬èȤ˙¹Ž9üHÅ àk,Pö¯![™’‡6“ä‚Ç‘˜£1 ’ŒW#‹Æªï±{’÷]teÍù+¯|᜘S¦sÈÑ#M½¿ X~Vˆì oñÛ6xW9¬¶Ù%‡­4‰¸r÷ÏñÒˆÏTÜ›nƒ}Ê©³¾T~^rD‡Öʉ‘Ud‡m¥ÍÞB†v§"3WH;¿tÜÌ—\O^j‚2±DäP¾hCRÜŽ‘MÌÈãÚ8š·‰ìލ+1·éíù@¹Œ‚Ÿf+©ºþ 0ã°!½h²“c7ÎOL{êFÁL^&»|šDÔKA¦ÏëȬáJIñ“™:±OÆq]f.ÅBŸ?Ëëò¨ë¦ónêk\õh%ø]ñ­MJ¼–gßs`ºöq8ž‰;‚ì‰m’Ù2¿À˜MF“äêù_n6Ïóƒ?~¯>KíNñžß¦*s´"úÑzBºŠÉä^žHŠ[ã(M|žcÄÇtÄF´V§$dšúÓËhy&äp ¨˜1±Z{ÉL­5­;¥ùÐô¼G“öšý—EcÃ0P‡áx&Œt>V-øO æUdVÔœe 1…­½ôÚä«ÝD!²_x„D°ÚhYW¶Øè›¥ÒR/h×_oyë›´-ñL¨ËåDmà7{”?qô<ßÒÁ;)†13ûb|Äù éº;öˆ‘ÝåQš`ÆO“mà‰,cb–>çÚØ»6ó¸ë;ØðóÁ Â8ö&±.ZÚü8Xá,ªä¶‘Y¤>²¨’çÉñÃkŠ.ª_Œ  ¡¢í´·Ðx&è·dOþß…O>‚¦$Üqñ‡0Î6pÂNWná|Êc”¢1•4õ,š•ï`1•0¢ Ô‡ÝÔy7]w?jI¾¨2¢’•ÝC‘RDÆîh›|ïf•3 9+ÇΦøØ N_¨¼’qþÄ?m09þ]7Í5ùo³éº{.ÿY†ì?êüâèMaZ¶,cO&å-YÒªÚnò-Yß’=‹}XíÎ7˜ ö;ÄP<]Þ”Mðé³éJÎ#ÅH›Y½%TKÀÀ=ÃOVØJ\=ð—â‘¡]ËÌzÜ5› ±Û›Î²#a \Ò\ð|ýcº’Çá`„·ýŸ2h)•çãÀ•ö’qPmòY·*?Òº®ošOŸYcŽR0æ»#2\÷dS 1÷¨c úɇ&v‘îâfï¿Qe7Á¶Æ›ÌO6I*³u¼ »Äå Ãë%×âùØ‘ÙíY™¬+,’©šqcž›JÄ)‰½LÛÉ#ÀSpV=pDñÆ{˜Ö&õ¯†¸h¬h,ƒ ðœãdà-™u%Ë%3«Ý5ÔûZ;ÿtÖè㸓u™=ú`žÚpžM&a'Å–¬®×MvÃoN¼7~H Ä=òsÁRðCë­ö§ýáÇ2½^«´ÀÀï |±K²"þé(ð˜¾%?ƒØÖ½î€wÑk‰æ8M”z•Ql‰„Œë1ÄqÍjÛÈ~-tŒÚ÷ºèŽ£ÍIçºtõô_Ê!ã¢Þ|­–V´÷£}¿ZF€§îÑîŽÉ¹'©Z#O½ªþ~ [è2À´:FÙ‘ÁhJÂÝyóÏ~ˆÓy\tÄÅ:äiËV7À—e‘ºÇÈŸ>é1 RG•ú óYÜf ŠuÑì¦8ä…“cŒ3 µ(IW𔄌SCðú 8‹’ê\ËQyÊ^Ë“8í>1(cGÀúx}ñUÍEt9¶M§‘>GY–Wßd\ß—´~8«âÀôF†Öعü9Nõ]…Ïò¸¤¨-êV¡Ÿá·Œ"†®‚‚Þ¢Ë ×²ññ šF(gÍðá!]T‚,¶Û"<²Ë¶i@ððKÿîy'6½UÞÇù+)Ÿ¬AQ“ïeïó `øWn ý%€ó“ œ!ÓýZ"ßÙø‹PSg¤Ú®ÀiôfÑwö5:2Õòá#¹QìXPÒä¤p·ÿè\”xí`@n2hºÈ8ön­¢W3•€Ï§:ó‚ÍŠcdQÐ —•PQ1µ~“¤¿Ù:Ûu7A _+•¡Ù`ŠØ–^}Ûaf±ÏÓ?Î;ËŠÆœãÁÜw´šOæî9f²¦X†v¹-ÈpL˸¢ÞÑê;èkÚ^Ö-3uß Å o,?©VZ (u]5—Í2]~5ž§E–Áî…„=']ø¼ 96Ëø€ýa.µ,rœvþà|ùàkq6ulÇi®:#ûnv}”JÁ)db—Z&ñì!w5–¼Ð ÁÐ¥ª~v']­b?M‡I­ ª4X6p„|ÆZŒãZà#P WÆ_µÄÐ,Àá ÖP\¼—$æÚ}„aÏâ[ɽ¼o *[Rù°=è=žR6 *(¦{üÇ©»ˆŒå,ßùß’ê©Ä£F$GÞw«¿R9ñ›K0¼gòâÒœðþ"øt©Z×¹¬–PFã‘Pê¼s vжg±ófhÌ匕íE˜KwŠN-rnDS"û,^ªs™)ó%G9_Ä­¡+>§Ù…J¸7ËA‘°Sòñ&Y4v‘Õ^S¢¤ÍÀyR,OÀðÕôÝ ¸l3ɰ²@w@0+±Àr :ƒa1_#[©e\E°Sºeјðƒ¢ý(ç&Ôç$¬’кè½¥ã—n­U©²És쎜¸Ç©ù•<}1ÍÛ°âNâC:dË"¬'gŸÅ>ätöߌ’©-uñˆðÛ+—R§ºâãQ¹3ù#! ’!o£ÈÖ.üG%×M ÿNí%³_i_\‚øÛpÝšZýÌåGö PvS?m7èù¤X´ ç¡PWí¾=§J, -Š{Ùˆ|¦C¨ãPv•½?¥êúÂ6b¶&næÄïRTœOêþ˜K¹Çå>±r0n©Uec§ƒ”;°"Â(s©MæÓw ‰4í×Ú$ÌMd5ŸR§4Ë„*Õù ¬Ûµ±ÚR‘Å÷œRwaèA eÂSÊñw“F€ëEÃxLWî\>:dO[±Lt)<²v&¹Û„r:®ÝÁ•“}Y– U\qqé‘ ÁZO<„Há DË‚öúÑ:ÈbÄÉ:Æì»¹Ô²È‡ €‹ež:ùgÙþ™ëÒ ²çiRK.âHËuqɘáfÃ8 u÷^.²žVÇ¡MdŒËL;K†1b\‰– .]ÍÅq„og*"$b¾\UV-B檊/7&™B¥Ê*7S±ÐÜ’#µJ£L›ûþB±6Á(yjÑ`‰Õ†ü[^tÞó=¸*ý©FINÈSwÈ“_–kľ]¦?ïå,“Ë‚¤‘µ{û‘;*Ýј†éð&uŠeA½áJPdë ‘Å#¹¶ ºMä‡Ü­ šbWã™_æÓ«"t#7&™B¥Ê*×Ë-ÑV, ÓüJ-k/)S,  Ú„+©¢Û‰– QÚŸR•a¡jÎéXÀ_˜¸%—ê½\¹;F²RWìEA剖 5ÝŽ÷¡/#ïRVxôÝØË&M¾ÈÇbí£ÃÇ‹by‡"ϯZá š´`µÁAÚîšûvÍÉ7aZ¦˜€Í³OQ¬õÙ!]Í^ç€â%)_ŽFA¦P©²ÊÍT/>o©ŠòË‘¬(¶žp‹±¾Þ±x$—®H]úéwÜõ^”Çå¤âƒ„U&36ß–ç²5î LIØwÁߎUü.5ðÄš´ÑŸ‚þA蟌®&h7J†þLA/ “Yql 7á?ü¬ óà z§-å¤kíoþF~òŠÌ‹ùy.³T¡Aö²I““ðýrxìGU×€áôò£0y˜XM}㋨dŠU6NÃñ•e¶S¸Â•ëÆßH™¨XíIÖe¸lº_ÈIÔíûáVû4ºbÆ“Úbµé®»)˺‰µÞôªÓWNgìýÆ-òQ5¤ Õ´¹-ÊÄ]½É¨»2ª´•Oê2ù†×¶LhT{\ F÷X“‚õ nɉÛÕ"õag¿aÄ?—'Œ¼Jqàˆ|ˆÖÆ*V- ZbBaÔ€¬JÊùœtDÕî&Pèzà·¡´Æˆr'2Ö¾¸h{JKÝ'î¥&_Ø•ZªzyqÈ- ú=õ]Ð Å{õ+rOXÕêNÒÏõ’œ4Z€J¿›ësxn—kóðŸ2àE o ÞÎo—µ”YñL :ÅZ¶IÆràãr².üËh 5¡XÍ凨ò¢•còD-Ôý?ùn⪴§­¸ïVkdzLm"û>jtÖøŸLä\ÍVȇÛ*ƒŽˆ¶ÈþI"Ž_\0KÞÊü–ïØßy5åïŒïºCUÆQ©+ò|Ë!å]jû†7踰ÊëY¤Yƒk½¹œ(¹¯¢d½Œ¡~ù—¦.ìeÁÖ[Öôµ»¹eë9áeÝ’¨ ±’ã¢âјZŠÕ¨UÕ‡>¦Á•PÂ?FÖäôù+ÔXт˂yŒS)и®ê8#ô¿¢¡˜rœ¨K¡2V±£é‚ 8‹Gr·D_ã§½—ÀTB ísðl#ŸV,¾€­Ù …iÇû(¹ouÊ^ ð;ÿÏ&ò¾íx#¸?ywij]¥ß|›ñ|yz<½\RäCƒÈ+º(Ð9Iìi%1#T^íI_ ÈÕEwx周B'íta?JnŒ€íˆT†}*j³Vœ‡º Ø~$T òKÕòùvk ʯã$)ö²3ì"µm/B®;^³1¦<åF,CBsá‹åäWÿ}Ê=Žƒ¡Ù>lšº[þlá°V{`L¨Jh¢Dt¬í'{lÚ¢;-ÿ\Õñ8=ïû‡Ð]€nïÛÝÄ•d”/Z1;¦‹à¨O%àIÀ/øBÏ¡ãfˆWs2¨Ð5ãðýÀ¹§«¦ N‹vÈ8 N¥XN?nG"Ý®BŒòŽódK¤w¶ÝÕGß Љ0*°DKZsX|Qù×Ò´ØÆ®=.¶+¥€TŒ®{»s`QÙ;)Ÿ QVøÅŸ'Ãý%Ê$Êéøz!fÒ >¿H”¶jNXÇ&ç=¿±½PßpA€‹®>µÿþ-ˆi—Ê×ëäÁŸˆÄÖ”û(blTy«,z2ãIèžN£pߺ(®\TŒµwâRýÚŠƒf ¯!"ÈåS2¬èdé|–ðL,QFHæ…˜ÿ™Kjtî¹ëæâu»ßr½ƒrqã%O·|jE1&›Ê#Ì «Q°¢$ƒìû™+ñíÐv<¼ˆ.ŽÇ/ˇ°!fÞåÇx7”(Ÿ¯UôU É}PèWjéo‘¤ÊcØ® põX8Ÿ|÷9“,¶2ªKG'Ķ7«´cøÊp@"`wâE?ø¦Üí<ý+ ¥UÆ“r’Ø‘K°%‹HDeˆÑÆTÓëªkØ÷b»˜|ÄS.$˜“ŽBùÚ›ï\³*Áߥ%‘NO÷~à±áàö1ÚäÀ!œÝM1‚Çô‡£=²CgdÔ¹6`o[a¤â ÿÎÿTHÆNbBvÚÍMˆ>ó”ű‰çû}k •1ùóBû€b4H1Ü9äÞŽ»UŽñÀ6´õU‰Å`#x–åÓã_[Êû¤\#K=­âãê`p{¹/ܯÀÓ`‚I˜*PØß¿5Çy7ÄJ°Ÿr(4‘°m±Çwô@^-óþT–Ä ûXqÛ|¬¼W\J´‡¢!!…º+ÇaiA…ÅãòÁÇ5Ý­_¬Ð[î~ŠùZÇëýð­òð}Ýñ3´„§É‰û‚eLqzù°äëäÊ êYZ_}ãK© ÷Ûä£ ¹Ñ@$¥@›SòFJ™?§\Ÿ»UsºÚBi¢ýëòX ´.íŸÖp-Q÷Ut1gœê+‡¥—8Ì8JΓ5ŽbÝ&ö\72žÂ³ Â%HR}áÓ{Bq¥Ñ5‹`=:Fovr8ñhq«Râ«2ÁõúÑÂýX ÌòrÁíûæ­—°„(W¢ÿzoudDQdÄËÀÔ¹ÄOë`óß,ãÙG2ügÿÒÑôÓÃöëe¨!ž¼Ýø»…¥Ëhè…XAœs²J4çЭä]ôåÅÑUÞÊ‚éx-ªŒE ‰ØESUåà$‘ËX•rœÖݰ ülõ‘ þ‡òVòLSà}Y5€_†êÝ}zˆĹc×ùzÔí¯«Æ‚«}9¹q¼·]°4Muƒ%81ŠÐ-PŸ Än)0ïÂz ̯%¢v®ù¨á~ãqõ!ýɾ+—±*ôqjœ®&[•!^ãs÷pž`&³ûH ©íÀ%„®®;Çt|бäÚÆÇ¿‘w?–¦ÍÝ=ûÃüùñiË5£¤`€5Z;«´ŒI¹òÛR%Ý,«_5*n¹ß±‹!adâ2V…úÔøö&eiå2Võ2w˜Ä¯Kyå1÷±¨"Áú”ÝÄÌF±Frb¤ÖR~–úØ·B]iÕ®óÿöâ8%ÊÔÀáÐÐc5wî„Ãë¿Wþ8Òñï}Éñ%Тd鯗ա\çžK‰Äé{ð™oÙ±[Åõp“(…m•ž_vñêx­úDÜŸ6±mwâùÖÝ_ÇÓ¼Â/–Ã</Ç•,Q/sLG lÛ/ão·yºâûa!Šmo‰ãx†xo9×OSµ¥zw‹ßÊÈŒrŠÏV®ˆþ—{úQvËãëôþ;^: ìáÕÖ áþq·Š /yo;ÂAôð·Š=Ä2$°‘…<ûħK„HÉ=©Qzß*mþc½ˆ»Ì7L5Âí*N˜'~Œ Õiýüd±•1鈳$Z½ŠoR6¶!YÌYmH+®²#ë1u>·´òAQ°Ô‚;ýo¹ßáãy%¨Ó,^îXí>ZþªÐÊx'Ô¬úÇ»drκbÃï­¸ýàxh kn™ªmI”O#ÿvºÕ’8ÿ …=Z¨R¬,ˆy‘D˜D«äÒ¦c•Cí½m;Cþä¨Ý–1Ϋ)xÐZ"Ea:j€G‚¤c„°´àWXdfˆÕN¼å>áná{º  JÞôK©4”‰ÍŠCÖšŠ8"=¦ãméxNQóß•:6EÉA|Z%j(Ñ>6Ϡ܇DYxÉzj_³Qz3Ò£ö/Ú$åXêŸ[uÔoHP¢ Z ÷q<ìyºÁ\ «­%ŒµäÀè/‹@xH¤’C)>^«‡M„ ƒvmõ£lÅñâØúþ YíEàêj`TÂ{)·AwF2RâWoùïÊŒ ?¤‘dcµ‘>_§R,‘yô-¹”iUèÝ¡ÕÉxt@}oÓì^X’AÞµ¹IÓæ¢÷a…_KÓV7®z„Y¢“˜b¼|rmÛÕÉL =È8 üò«J±4¡‘~~Hûަ€Oú®šñÝ *mw–CU_D~Í7ÈÎÎò|oæn+nБƒddSHsßÿÿy´Ø3XÁ}_ îQuþ÷Öã·;p݉{. ’ùî"‰¾–`›ƒÊؘ„e,"FS«%‡t„“¯¿‘â\ȳƲu¶0T¸<ØÒ/$#ÄR+ZÇ;€;‹‡÷Iô• K°K kðq‹–Ô'DGÙ[瓪5ïší·ÕÄahnT×¢Šý[´z£™Óö ñ!òǨ>Ö°”$½ž‡N­)Ö $¾KË‚¹PübGå%xHfÌ_I ¥¾][B‘”Ú–gHYZù+R/Ԓ稜. ¤•TÍ®¯„z³š˜õú5Ï剿K”ðzZr:IQ 좈•ê<³ß`…Ë^s™Ï»…ì´<˜ƒhX^ÁcRÏû±uú¯âÇœ­mç–÷•·2Õi `8™íÞ\tUó—æÁ |¬GŒD®eõk¤ã\P#„È~;+õÓyÍñ_Ûìïm‹S<ݰ3¨Gè…ÄóÑâ2\é}ÒÅBX"ª})f¡æddÛ6MhqT!w®÷‰Þ…»¾îe/”7kÄ{Ë/Ì.û#¶À€£eñ/ñ`;¯7Cëü¿?¨Ñ=ÀQXø$¸‡Ûj~»þ×åÐ6¶Õ#w7„“ÊÇDòbâp´°ø–j·«ˆÊ+&z40HRbžñ#"’YŽìpÏøJu‘2m¥µð”ARr§e\u:Ÿà'mxêJeˆÕFí´oe{¼§ ¬–ÎnM$oÞ'u7,éA—pˆÑé1y¨3ƒuñhS_<) ˜PÇY^Åž ×¾`>‹*cè d‹2K¤¥ ®NkíØÓH )tZæÿ±¼Õ‰éN'<[™9z€ KôåNuê,íá1WŽGŠéÅs]Há¼îÿºq}íOÒÝÍ݉™®×­%'£¥ãe=ø Ïþß@W?vÿ©WJXV/Ðþ´ྔ ¬Lé™ÿ¨Æ#Ñ™ïuk޵ ³ <695K—b ðUãÀ90Q±Ý–o\#s(%ï–H9ð| 1ÅÀ] d·€2×€¼‹¶²rRd>ŸàoD¥€ŸXEÌj/Ó\¼Þœ/_s€=ߢ?1]o›_z‚r˜b‰2Ä3U·ýŒ þ¦a6=¹+ŸÝÎe8¼¶Úm»¢ m¹KpçK%Órý;9‡þ¾8ài8û)…h1FB­ |0•2ðSBÒƒº%B |\¯èfçã> ÞÜF¨¢d™ø>ÿS^ûƒTzÞÉU”HÍá7Y 5Zì”9œ¶í=ëír[”Æ/Ï]VF"ÉïÀï4¶`šŒo‘1cA’)ÚÌËL!ë“AÃ2 K„Æúñ‘ÞlÛ–£|«³!.®â–V¬ý[qû—æ„Г·²ÊG‹ŽøQоU¢SÆúÏØè‘´ø™drD€ôÿG¨Íù Ó‰¯ÎDìÂ(ü3úÚ5¿0‘\“ Zþ aºzbq“ÒV·x òrg©(ÉÜQQª×g]/Ô¦Xüˆ£3Ôo~Ư² :Þ˶ÎC2ÓR –¤šé| ¯T4"­x½‘2n¯‚îy‰åÄ6\JQ¬v2žÈ¨2.!)-!y†”%1öÝRŸ)t89¼Â[w @f Œ3ä Ê‹Û/ÅÅVN_Õ%—Ô–MFŒô 3óÑrwç‰ç£ %…×ÃÃN¹·v~ûºïøÙú‚|døs§«XtCj+SïØþœË–_!ÚÆo:l«]¬‚~´`ž. à„Ñ¡"VI—Ÿ|”Rmy†TZPqzͤÄwéšÄW>‰ï2¯)GÌëmÃr ±PrÄÜŠs½KðöIÞq¹zÊ#η¸œ÷ÌÔ¨ú—(QÖÐu ͳªcIˆß¥BŠ«2ê:MT†X-Üë¡'ïÁá\*TžIZÙôVv‰ïR-c¿g‰¬ÞoA•w⿜u®wò+Ÿø)-”‰‚†Äe¬J½}ù]q‘á½bÔ¾Ê]“Xñoe¦¢^£CÇ­Ùæ%o7Òº°RÄõ4b (#C¡è9*>ìÌ莤Êx*м•oUFh}Ì<í.ÅNK±;ômHr¡Q”ï2Õõs_B-/U‘s|;Ê—ÔW_yþ·F7jêÿPÃ:ò-½Žk•SáZSãDÄ;¨ecŸÛ²Mœ"/1?’e»Ÿê’ü*CóS•ÑM¬°#±%¾W_",ÎUKYçÜì%PIRåoÌÿ‰ªm!ºí£ÔZÂeA¥ü=qúƒÆ$ò“¶¬Yãuäµ@;ÕË#øèPÅ„X©$d)` °Jh?y+.üBvŠ…Ò‚eH §$vZR}e4#©,u_ŠêÄk È‘ùˆGjB=ÑgŠ…Ò‚eH Ï!£Åç§öÂH»¨x{3¼ú9öGÞIëÌ×OÉ{Zó|¶”¡:‰•YÌ(ÞñCö‚WÞÅ/+ ¿‘ÈVëþê[ç‚n»º¶"Ä!U$@‚3Rcî%FK .~­7H&öÀ¶?ø •¥É憑ZØÏH3ž·~PÈ?Ø6^P<©°¸¹’ß%èh]|®ˆOh©­œF›.ôÌYÞ¨ñ‰õ)æ³ÏÿÍ8,*–·ìÐÝÅgÌüëÂ]*“n7R."4XÆOÞ×JA„Ÿd©_Ф-­\†”¯ÔCÄôª…¡‘Ý[;’Qðé¿ wh°°5++£Н’ï¢óxUްn|>HÃÁ¬Òʃ¤1¯ä1)ÞÏfµé–àÄÑ1B°Vˤ³‹ôxÜÕÃì”Ê/×Xe_ã•]Ç]’ß™8R §ŽøŒË™Y1ïOZ̬s¤3—5–à-æ»-¢¯ÌjF/cÈ–HѺ-UÐUç+y­RT¯u7HOf!ºMýÁ™²GÈàH‹²¶ýü˜0ãnˆÝûÓMèÙ–^åD5RþcxþؤnÍ1'B hÇ&ïï6ÈuL{ºãiÓP²+¥dw½æ,ú‰ùe/ÂÛ«¾S&¾t¼&<ݰàÜvñó±!ÜÿöO|0}ýbîfn¢wçc÷ÈÚéÑPüK°s?Ûd…YœUj”ëø»/Ñk8nV‡Ÿ×tùßKþÐržmó}•x#;g`r£]èÒ[IeÑà¾â&Ÿ¯ .Ê;¹¶µ ¥@̸°Ú+ŠÕ‰7}p5€C•.BÕC¡K:tEA'Ÿ©G¡²¹eΩN²B‹cÄ)®Û£.réNO„ˆÙ’wy"¸o\g%Fˆ%ÝW$ Álš–"Þò›1|bqˆÅ¯øÚÞ}císYîùÝæ»Ë$¢¹ô @;$ÌÈTG @)X±èBRCÊÒÊH:ÚÄ üÃ}ÜçÓ¥´YH2§\c‘–ᙥ"T8J±½‡zñuÔo«'5uD×=sµ‘Tå‹Tí”»‘ë‘»5•9­R ‚nècˆÅ¯I‡ÔðI§TJÆ/ŠRƒÑGä“°ŒE¨#ݲ3C<Œ ê½å€€ZÙ-ý¶î,¤'ÁŽÑ¡Peék-e/Hbñs”ïÌ]£D_¹ŒU¡ƒÔlƒ;Qq«Z*õ+ ž‹HB}"«ûíƒÀ§ZP±€÷>Q}2ÂBÕ(by#b°¼"Bˆ¨I¡Á§"Ü7RñÎÖt_T³‡Õ$¥«F¥u¸#ÇG±p¤ÔpC[â¬Üú@’R–ÈØo‡ZZ;tbn•l]®±È¯Ú>aR_¡>gR*ýÑÖW§QrXì‘#„¥¿ü_u¢'øµx«.ô¡>]¸\ݹœˆ¢°ˆ´äCúÎŒüq‹ÊN•àG ©&mröæŽÆÖ^oŽ¡º¹»A7'‹¢ôt×ÑPbî÷üon’Û2*]XÌDæyã*HGK*-áÃÂzþÓê´,=qÂËÑ’Ã î×Vº– b— ¶$*CŒîC1ªÛN%œ(\PãàwoC¼¢üì´øóC0˜—‡bcûHl$‡RÜ`d@Ys`' ."¾ø4I"¦L¢ IîEäàNí8nnB³­ã5¦=;­%RyYEÉÛ¦ñ‚“6W’Nñ}%f×uÂU§çºáAk•¾V&çL@wùØæÇ¦¡dýßùß’Ûâ4¶B›ÏøGÅe°LþQ[Ûþz.¬Oòù˜”o™N|»ûS²Xœxô——-9#ÈåÃgq° ìáu(Qª³wPæ&Ñ–ARPt°dç(uϋ͒ÙE ƽ¶;ÃŽFz#¸«â¿çÐõ+WóiÅ™´ü…3ouººKyØäÙÃkäÎíçÇÀ=ûþØZÞ'[KGG%‰2¦|ºa½Æ÷FH1ZºapX ˆ |Ó+Ðý]ž‘·²ªz§*†_Y gŒ¾b¹˜æfn\•1k˜cŸ¾»_2¶iîL—Ó4X;>¯ Dí´–Hk©w€'°!”T+?#Z¶4ÑÎ×V#eÉ•ðÙ:cpþuâëX‚»5Øq¿™3«_|C DßÚ Z"E…ª˜p ®ttÀÖª{×uèr¨TW¢K"w8†£§ÒÃÙ¿4sɳ¤C7„“¤¥E¬Mõ+™Ä ^Zz5m%àuîÞ¦#a –ÕžJú褜»¿¬GR%ÝR°ÆËn¿Ê‹‰$-Mñ˜ÁmÇ3ê&§£ç"ÁçÃWÅ*èÄøn‰¶ Rt¿ëb($".du¥@,4puÛŒÀ=-¹ŒPLÙÎÛæë‹äѲW“ƒ”K1)—gHYZù»d­Ç A±’ ö{âÉÝ’˜MP}ÕÒЇvƒ¸ Ú1|Lèa8Í’¨ 2[…ÂìåçŒþZš¶ÂLçàÚÁì?\[ZÐBn·£„»DMí¬%‡£Ñ¦€%°o°Æ+<5ñjf‰$…m{%r„t‘§n?nws`H»å[ŽòþX© ±Ó»E¶VÁ!Hzš\{¼Î ú¨LsžGs>n7Cµþu'oRÛ,Qräi•>¾‰ŸXÆ"b¬Gß–ña ¼š%Òø[Øn1¡üè;¨ó$.ÕZ e¸ü- 3«LD1BDô/-bU 柭p íôz¾ùÔ‰2V© å÷2໯rœ¹InèÈ(©Œñ=œý £‡$驮◰4ÅëEú»@¸¢ÚvÛ°.‹´>Ñ¡9DôË]!ÎG~»°äuZ¬7#„%!6ûJȘó¨h‚BMÈ1B°zwCS<õ¤QM·3œz>¿wîfû õ€­ Œ‡ZÑØ™‹ªFWv~mçóµJÿ¬á‹ŽÁxÝ€ˆ!ÉU³€$*CŒ~P-«?÷éO[· þÒ&°?|íH™‹/ž“.¬5KÙ8Ù†¹s(câ3œ/ÊKb‰» ·NÓ¹:âääf8ó*ÁŠH˜ïÇÎSœ¯¼Oúõc9àeµÛ{€¥@ „ü±É77ù|ˆÊ£+Saå›(oaÚÊw”Bøýšà3.W…2ÚäÀ“Rb‘Œ Œ øÏÊ‘÷h ¿¶"b4E’ŠüxHŽPènðá+ç_TPÖÙ©|~sètDå(À÷ÞQP½7?n£ÏÒ#¸›Õ{x»œWÙÖV^KÚVaâ%ª_¸ÃYŒŸ )ΙãM V·d‰l´âä„(Ü00ÇLÂÇðåÝüû€Œ“òÌò )ôÆ•×;ÿuå·¥­p‹Î ÛAÅh D¡Qª—ÕNÁ,ºõÌŽR[@•!Žàßùß’ÛFbK¿æßó¿—â:r¦äÛÙcÛŸÅD‰ˆ¾ƒ“Ñ&‡ã7∀1í­ÓóD\àpÄŒŠå¯‹³0:G’?úÿBb!BBG4Of˜´âo•Xªàœ¶Õ)–°HWŸ¤·:ò»úíQ”ü¥©,>…6en––€˜Þö¦µTE«w©DäwM0¶jG[9”ADo(j€ª~ ¬m7·hÔ&’“ý£Ë:­<S ­%’ ýÖ)Kb…}<âý0œ°ˆ˜–o>nHÙJBr ù£Z¾u„8["aÝ¡è1áõR÷þk16`8ßn°Ï˜ˆ}ÛÄ·%’j`Msþm¶?ÔžÔ¢k 2àà›mÀÌpÐ$«“ÌMrõßÓ4£MÕm§µÊ²î¦Óq•dÍQÎ|, ;CÇðÅ×'¨êvÀ6KÉ’ã/m8òù˜˜Kq¨‚°T\<øa)],Æ!. ðœÊÊ«¨“Ž+x)¾+ñSŒs}xõ+%-sü)Jã|8¼ÔÝtk"/óqËm!ÿàåTÀ?àM|º±ke"Ñ%B½<¹ƒÛf¶»ÁÞØÎý"P§Å -‘–@íæ¡ÈßoÄ<‹¥ÀügEܯBÐq¬îãKöoUÖR\/½$H1ÝÈ"5¤±p¬‚±yW …ÎØ—äW.[å>$Šó»Ï:£@b ÷Çà¾Uc·êü¿[3Qb,8*6Tí—Ö)×;Ñ£nW (ò)åÝ ·tªb .á–ŠäR ßžÌg7 v(¡Š9FOªœNRä~?Ž àçX|\é)_¦E2U2s>·Ü“xÖÌs™æ1¿‚æ˜ –© çbI´zÑWªêu%öz1UuSéà§fÙö'­HÝhéˆ>\÷GW¦ŽhÛp,²§Û7öÎÈ(?ácæ©ÉÚ¤w‡Å €ÄlÚï–p½§ÁIm#¬Ã¾Àîw÷ËÀJà’ÁµLB6züÂ\xúļ[@š¤{=!°Ð(Ä h\*èÒ ëÖ¤ÖiË ±¯/iO*E„vݹPT†8²fœv|F|ïVA|’&ÐVNù–Åõî4¦=ú#ÀR`QqôäèæöÁ£|*¯y¥;é~/ľ?»-TÈð~…óéqo7o4£¥£LÛ÷G€—Ùþœ6Vƒš¦‰„®3›ˆ(ÐÕYü sýà¡»dK“ø£×±= oæ øc¶ æŒgþw]*… BT A% Ÿ¯…{Þ¥”“ ’´bɪÖôNȧu@JV·î;¢Ïåq¿Ø\ÜX ˆ6p;' 5mÚäÆZ€Éá)[YãˇԘì.Ú«Ð/2NoŠÍ-å4Á¦Á%²è/xLÛÝ`¨ÞÜéú{ü0¡¸¹­T†s>“j¢e~2†ãÚ" -N,ƒ¤Ðæ†N‡á¹$`ŽöòÍm›7&úª›{ Ï3¨’šŒab¡Ç¤2ÄèõTÏ¢(Õ<=WÏ[å>\t‹ØßJ¶=i}·-YŒ-qì’Å`L{d)„MyË»ÐÒÊL«9Æ©'R ìÛ¾ŠøÑTª êØuB5[ÔÅ£Z©}+ÏÃÆd‡C »ZÌs”öicGãÕ‹=þaÍr1 ÈŸ¢m/,A°áà7DÄ”=âù‚]p³€DÂdSø`{\x©{ÞÁÅ,ÖJ ‘ÑS^kÒZ j“n7úîwk+£ûuëž<'Úu(WZö¼ÆX•!VL ·<ƒÂ¿»@¼-‰Èu¨'5m--˜ÿDüŸ-ï››ýÀ(ìª[8»½šXÂû!aá9†]}‰PIûhv-9U´µ!ùüÛœx+®.KAWd v•‚º0±$…bªÜ[˜åC¾>.|ζÄCur«B×ÙR ¢ò2ÔBéº_–HQ¾?iYh…6\Fiµ»ÂB%æ­ ‰zÿ‰(ˆ„¶i•úXCWÉüGކI5SÊ’˜aûn–Ê’8×;ÅyŠðÕS‚óDY×`ï‘‚%—à\÷îèOÛ¢ˆ>]Åj'¿bmÁ±Æ„â俦—àK°M:Fˆ¥rƒqr…ˆ›½¾ÔXUÿEeH'^º€ƒ/g¼pBü]?,ºN/¸oM4&ÜíD=1£ö4Qš»~Ϧ*&D¸$ƒ,9pœå9¦-V229[•!Žôåý8° ¡ºN%…Š¿tz|‹"À…  ñ•U‚9tL Áøw¿0ÅÎìJÿ®ÆÈš¬ïÓ<ݘGGh°o­¤àZ/ŒÜõ¯ýƒÔ“ Êµ”å£ã¼1”Þä.©]ÞêQ»Ü=SZZDÏ}ퟣ%Q|loK…¯{‘T™Èõ²5"¯uõËT í‘Ò:+ϲ´òw‰êél$Ŷçã_%2Â$Õ2o©¦Ð²jöὉíþÅi ÷á qGË]¬Í°áø›H'Þò(·^o"©é[\C2š­Û‹øÞNΕÒÈ3¤X§²…ánù/]Ö3®¥T¨ßßð2Ft‰"üù³ ëλ¹”£Ø¢4&yKTç\Õ²´òw‰У<%¾KÑ=) Ey%¿ª®}Å”MÎ{>ª˜›;2J*#OlJY³cñ}ê§xAø",’óo%p)¼šŠQ88ñý¦³½¢füä $RD/Öi8†ÚÖhåê´–HQh8ÝàÜi­Š,‰£Mè2Hò–Bk‰ÄÆxÃøÝauûØ •½©iQa¬Uü˜>UÎTNÞŸnB#¨Á ±³•Ì%ßqµ ³ä$1&Öî}#[)26a(öñ‰ŠA ᵲ¥¤NËÅ¢ÉòÄñƒ3Š,n2‹¸×켕 Äæ ÌM¢-ƒ´…S>œ/Ö;oï„àÇ)U1!êK2¨X@"qTµÒ×ý°U‚1ïùß’Û&Š<1™~ìÝ׿¾.[Šå-  ¦o}kѹóI8­±9†]}‰€u8° ­ÅøMÀ q…ð8qµ!j_µ³¼»á%Š¿© öïùÝÑï½°mÐ2ˆŒV¥Ù°ÑQE¢—KQÒ”ù´äPœöGe÷ÉøÖ#é-§ä5pd/7lÊúÊÝÛöUÜ 'ÑÕÿn>SOºÛʨL¥¹ÒæTf|Ó_T ÿѶ"l#8ÿQ"~ý—,¶0ýj ÇbE gà—?ÆSÕD1‘‚¢]½¸¬Šµ0 Åš§²Û5 ZÀâ+#Põ1Ò ÕÏðÓË»\÷Õé´Dh¶½2GOÁäHE3Ýð¢hGìØ¶â ]'2_¯/µ -5pÄîÌÎÓJ‰žpGôDŽ)²¤êk–Yþë¾÷kâ±Õ'­%vŠeH`§HéY¸šÀ,¿nB3Ú¶Þò¾àVVÁæ,Ÿa¯-P»N)Ô‘þc.š¡Z°ª5?.‚jÛÛ.•æýIkUdi²}òù˜èS§­$‹‘c“Ž8kN˜J!"(–ÊÕ)*´³¯ì5Ïî=8üâ1¹UZwàI¼À¿ÐE–V.CŠë ÅZæëŠüz´­”KŽçƒh›}§X0äÉüzG¡"¥Ìa“UÇ[ÈãHReˆ1* ‚A‘ã¦[ÒâäÂ¥PúãÇmµ€Dº ‘ Ø{´_ßÁÞðu>Ðap½~,9½IÚM?~·ýØúļµÍiZ,Ni+Óbêpz ÿ=þþè´VIQ£Ìÿæ&M[Üp 1ï>ë î†%%þV= ,šœ\ò*†Ãq¢ðâ–àÑQçÿ½Ó^l¯Ú4wê§EQ%œVˆÝÇÍÀðR‡iÚó@›D“h‹‡`BÜwž—ÇõÓQsdD!t‹\Ý/ÊîþùõN@~L÷p/Ð@XÈ=9JšÆ|xb,1éÌ$¯7®ë†Ám–Ü/Òy5Ç£úƒV¬bõæ=ÿ÷åy;¼À‘5?®Ó¼-–œ³C#à”ØL”€çéз""j‘áM0n¹È%‹‘c’¥#Î’h‰îÞ:ȱ6ünMÀMrÊo5«îÚÚ¶‡eßɨ/=ȉÐrð3ˆë’ÅÈ‘UZq-o•"£’X•ºFN]y ëÄç{A]ÑûÛ-ûs7$YvÏ{«b+›TiQÝÙ’¨ ±zžqm–Ø×ņƒÊ7«:>oœ"¨îæð¯+!Ï>PþÕ_RÅç¶w‰ÝjúVøJŽ–ýæHi…ó—mɶæûõ%ÿ-¡÷zK«”¯ó¦ÄoÍy©ˆ—>«4[íÁXû¤ògGeã,ªJrÉȵVP^ùÞVÍ÷ÍJ÷µôBrI•á>(‡¿a…Æç•Ä2cú]R¿HJ¯¥§„.¡/>WÁôžÒÇ (?zäü¤"¾}IJ Ξ]àœ 6 ©-ª:3g<4“êj+²nWˆð¢™5hŸOR)ù$óú3q®¬&tâ*Î|9·Ã9cI &ŽFyæ ðpX<2wÚ÷饽Eß3ÍQøÝžâöå0Ù’(æ1×¼ìåóÛ£±F["Eº¹½´!åëõ~ žTívì-ï“›dU;Ja÷#b¼ÀÞé¼~°öR¬”,C“ Ƀ©¥¼îLóëpqh×þ¤E[Žœ©ËÜ 0Ÿ¯ Þ|m êâÈQS¤®OÒyÒÊc„ºÀî ™Uð’CbF)”`>§•¥,O”;ô­5Z DJŠÈÇcm^ Ú1Å0¡­2úæƒâËcp½)Én™˜Ý^%Ž=/ì‹Dè Õ˜dni ¥Tlr‹á’Ê«»_«±·ï·CûÙj`&àò¶É77 º3¨N£qµH-6¼:üͺãÉyîV¶Âq’¨ 1‡â?ƒÐ®cØÕÇ8ôô,â(o…6< ;;­¥ Fа8ƒ7Ü5°•n[­yDŒ‹8Mòç¿ÿ®Ÿü¯‹O¸î¨}•}~I÷¶ýµ/~ü_u«ù•ûFe1ràœÅÙ7ÞeûíøŽÀH¨#QàÀ)®2_ÑòÿŠû'_ÍA¶ät´—hõ¢Ïea,t¨ŽŒÂï’áȤX, \‡Šô>Í×û§mÙ)Qäã(ñ˜¦kÞ7)*CÌž¼Oë´ì-6-ZÜ-¹­}‚w ÍÀ:ËOf89ZŠ˜e–ÜDö„2#ç·A×VhsÄBR•«åã"¾-‘¼ã=ûÃF ºñÔŠ¤Šb0ÒÇný‡«sÛn¶è{ÿ¯í3#!ˆtIÊ9Ì×7„N×J8{À«¨‹eY–ÿàqÍJÞï;m)w…Í>o€ñŸ,€cAOÀ ÁU§{Çبe´Ú]Ѭ1ZuÃ}8Šf\ïçoŒ …–†äº®—AævZ·x³fŸñ†õr=†ø¸ÌØOÞ{Øá˜»í d8> ñ¹r°Œ§‹öqÌ[$#x•ixæ€bKèÞÕ-A˜y`Fô ®ˆª…‰Å„ö21R7Õ ª^”»b¶êò¦>@v˜ DSji7`YEˆª²ýÀ¹Gœ’(ã(ÊžY.WÚÊÝ{T@Öæ®\õn Vû$ӹŻ™fO¹­Öð;¥I”ý¸ï&¦+cÚø(Ö£5Ž‹·Kã6¯ÑfdU5-u2¦}Œ…ÑS{ ¢¯¥h,»uó½üQ]‹ÍX³Ž¾Õò–ª«Îs° uï|aÒÕ”úȹ“Ь&~Wh±OÿTÄÊ1úL€¢¤ÃÐîÌ c×K zXŸQ¬…¾Z+8(;ö¥¼=¸q¶`=8/H²/Ý0, ¸Å~“†²PÆÃ¬ñÖ{uë2A(ân•¼ ÕÒnˆ ×Ù£¥ºzäŽ}Š{×gluo—_eL°s¯Æ[eãA/o‚«8µ¯ÕÅö}ÊpÏœÕnë«N¦Èq<‹œ,#\¬ÞѨ|‘,ÅøŒYÆBÔ7a…OÚM1e†šwhzX1ñ¦%1±¢xJxŒàGÎGŒà(ƒÉxa+—7œ<º«`* QN)Êaþ -tD_bÜè•s”Ì(б6AªA€—•©¤b¶íåR ˜ àiâuð*¦ä£hÝijúvºÒ®tî5éͰ¨¿\6Ž-†ö…Qþ$Ù‹ì”&JÙeè°¥X-ñÅÃXï¢/`NùzFgEs}“ )~ÆP\¯”]1«†?hUíž”`ôån(}@²¦;ÕÞŸŸf‚±h2®†ËN»‚ë§Š®Ø¶=Ê‹L¿LüõÛP ¶®°^ˆöT °, ŸŸpCYvט38Ë¿h7°@V©L{Œàh¥ØcšÝ`lnþ*YýteަöîUî¼›Ú죚yëî­{Aõo_*“SuZ¥ô3Ï@Ÿ?ÌÔO Š 7AÛ*š·sÇZ’ gTW/ÑW5>âù‘Aé#Ü*ÒM"³»¢P·YÂݽN¾ô¸ct£ÂHÛù|HçÀ¬B}kiÆŠ‚ e¸‰cÇ(_d²«Zr»êš D3?„¿˜$#xv—‘¾Îõæ?%«`ø¯ß¿ÄMÚÏÊÛ$Ð’©øÆØ®y¯»¦œ&Õí4á|€¸ôBª¥ÚLz×ʸjü )A*Ò1SšB"Û©ª6ïSXS5úkJ­«þ´|O),|(§Ô!¥©ÖLоÐ[èꮜ¡5m¤Ê»+U#¬ì@jT(}©î*K`7d/ˆ·†;(hÌ6Uñþø°ì®TArXƒw&)o¬Y¥uèÌß’$'ÓQ2 VÍoÒ·jCÙ΄Ǽƒr&Qª\4—¯LT¾zo_S¹#,|}@K#W´V¬Ã¢Å Dî+.Rá|ò§@ Ú4ôÖ6kʤú-P¢/Ó´˜|ïP´rWQ©”»Ò› íä’A3¾§ªÒi m_yòJArkú쪇Ê7„3*¢sÝtó§q¤ÙÛ'Ñ>…ITE ù ª9’.R­¦í„’ZüV—R> %uÕ²«~›X¹ÛÊ™ÙU¬Xµît¢Ž$Éä‡wÀxê3庫¨{#K(e(ïðI=`jÚMߪåÛ¤Ÿn‘ÅŸ)ï*¤~”ª0ëMh¯)”DÅ\í´+½“,àÖÉ5dW¹TF‚¢'1ùNÅŠ«5‡Ù„Pv¨ ­?‰öà¿â­…)÷ÃŒîårç5n]mÜD'ë?T¿ st_D¯)œw¡ ™D <³%!ÙwªÞ!_É» Un§AÆL)í*/ÈÒÜ@!Ÿ]¯î†´/áˆS67Õ€ó$#øQ˜;;^”;ð8U¯kQG]tl%òeBUáRÁÒ •¾ZŸÂfZÔ”;/MœØÂl˜eþÏð+Õ} 婚n§émaÏ fS©¹J%'/ÐT:å½  Aòi§‰ ƒ96`G¿Á¤ð уü«p/¤w…|—mje-\5÷þü„ˆ@Ð÷oÖCxMÜ’)rpŸ¯ªZμ›X©ÖMt*ïšpXù¦„)XÆÓaÌcž ÛéåŸe^H[U2Á6¨˜M«ªwÑ4ÿM&È.iWQg9ËýD³Š•K¥›$1°An×½3R,rÃo&lÉ´Ò7ôöJ¡/ÿh4ï®)æ î‰rÚªç#Hé™>;”R5í' ”®Z ë?lªø&èÞɤAq¥$…²+· Ø5í¤9k¤’r‡ò R^hýâÍvŽÕJúR©Áð!¦U•vÕog•JPIí,Š=é Ãñõ+z©»BçcåURåêÚ®—jÞ]©:Í€•L»+·ËQÈ Û#¸“kà9äJBIL/U“„·/Õ ±gQÁ/Êjȳmòñ`\ƒ·AAÄž[ ¼µŸ;#}!­¹æ ¨ *ÕKu@ˆ^ª"P0løÐ/—:•’Êõ29ÇQUïÖ·­„Î;A4QA¡R3¤5È7UÕl¢¾¦L¿TYL3”H%ïPí÷ƒ«jó÷A´‘]Ûý¶€ßqÿóu¿RÞÓ,}¿tßzû[S|„þ«ßéSERwØŽM_?H‡¦È!HF‹'‘¨Êåj‚0çÒÏ)¥~AnÖ„>ì² (o'€óõ÷oC‡¬—êï_šÿÛ™Dµ¼©ñæînP†¥‹7èoôŸ5åHS‘§ Ãsʪ›3©vWÞ~ð¤×åH龦^¼U1áM!—Ù>ªi’d4nŠÉIÅJð¦v£Ü+oÛ9Èïúó>‹NM–›MÜr7*–Ó¶²©]iÙyìëcÙš^çÃÕóá/Ó®ÚÉÔGyk²qÝ,ç0}Kb)"ö÷˜í‘JÌžIž®Ô0, ºge߸2“JH±§Õž(e%-ÒÛ箚@ê—å R®¤Ú¸n[»?œ Zdêî®èüSo”Ldàðäv¡¼nÚC'«GTN2µ·¹>gZ;&¨Ü øÉP3 Y#Ü*’ªC'#×9§Ðœ,r7€ÊÉÙ„špÖ3°ÏB2'k¿qZJHéEªS †RÛɳSù£¼Ó5f´sN2Ïd!Âd(‰¦ÈiX ./¬w3íU0Æp¼¹½/£Â»“>kðá†óÝÐC·´•jcytd½Û8az:PI‹ó®©†´“‹Ûe˜ŒLµS F[¥^ÔÙDô$ª&ð 'ãm´îhë©!;\ W®a†7‡¾ ”„‚ëU÷EJ{4Pfß)§Ó½6Â1¤ˆ<«î¬¯î)ûˆÂþ]ã Ì=ɲ5]~™U‹õ9E9* ÷óÉlóíéÊs  9ÓëŒEèu W2ëGcwµl: $:ûámÉ"K!ôýÿ5ÿ¿íç:©igoÈCôÃÁ+¶¬°ò-ɼ‚*äã*¼ÿ_°Ó‘Ñ{2ŽïaÿÎŽÌ¿[zòý›Äj|§ƒsXœ!š=Sv%…š\WsáFœœ±ŸºÁæì¦—+¸Ró:±5À\¯ßü?ÜÜßuäh’ÛåÔy ôâåC(ãŒƒÒ Ýò‘ª;ì«Î£õ¨{‹Ûš®àXr=¹yQf¡pÇïåÏq%7qîv,7×bŠlljÞPlf°±™…¥g^ g+!Œö.ÉÓeèÏýÈz¥v-Óc ņ>VgÁZ޾£Pl–nŸ›å”AZuaûüœÿ\3º=IÞ\‡j7÷™ZÖߘƒóœ¥©‡‰Œ/öfã$Ê¿žçB2·NΓ7$iã/^nîꆮ +½B+¢‡HǮѽÎI]‘LŸÑ–’˜pëFh˜-Tù¾Œ†j'S.Ùéí±RjWOþr~¥Åe«C7ØØsÂÔÈÒZqÆál%®”7GìYŽ•·àô-8¸õ0^† ± s Á¯WÚ9»žF í3Õ Að°za ã?!!¤2SýT t#€šnâ§•ùJ_ØæÊ¯)s a,)ÜOée¹Ê?…7 g¬7˜Ô¿Ì]#wûV‚óþ9µ¦ž4RñîX!b§¼ÙWS* PGI;)×rÍÑ ^yu´ìÜPd¤¼JŒ’5Öº+Îü”ÚŠï‰îkfï$s@Ðl@¦XÏq¦Yçç߀:úYur?ï¶<²Pý‘Z§êTyRèIë0¶ŽI÷ÆX¾Cp ë¯#q’zÇ`½‡6.é°A Ýo‹2ØÏÇâ\ÌMdû6Q´;b”º;a ëäû% srÂu¶‰­óçzàlx7…J¦Ú–õÆFÍ@ÒŽ£”[[ȼ÷J=¬kÿE‚ ñ3¡,«HsL±u¶`?¹Ïá&PÙM’x#¯8 &TF´Î{c8Ã4ưú}n~ˆƒgdj§ûR’bóSKÃüÇ+½")ÜšÙÒ¶©úš´6P?H:µî8ôB9-ü©ê@2åd™’+¶Eå#‰9pw,Ù æ<)yÛCRuBî|¶܇s6@à®ñfÐOÎ@HMûy· gÙ9/À¨ÍÿÙaK2SÞx¢™Ë»¦‰f&GM …wˆðÍH5ïþšMÜ’T8`vÞy›ÝCÔm„žË*$Ô,š»Aå$ £Nëõ¾,ÞÉó±°dÅÒ€ F÷/ÞH7K+Ïøq§‘òŒp;fà릜¦Ï{S’“M6Ó¼¨ˆÁ˜¾Ó?f•f·‚‚„L25ä¤i’78pMHKžÒJóG"‚f} |Þb"ÜNÇaà5Î"hIàUe8y)4‹Áó?}tv½ÿñÏ_øš)QžQªšb9@{¹< Íz'TÕsп¡Y-ñ⸕ô—8í·¿¨S›¾§N¦üž ~¥š¦”90œ#cãƒÇ¶,¼Oå )ö›öJ¹Ó6«þ÷&M?>ÕoäS¥©¼±ès`Œ‘ôßú=Õ”Ó4T§eIgë>,ÆÙB-rÿÎ+¼Sr[P Ûƒ}¿y¾ám€ÜNd ãN¢)·KA¨"°¥SîŽ%E‰îŠ­Ù8ÊöR'}Ö{ë ÐÁ?ÛB•4­&8»ê`°L d,Ì^à¥)tá›(ÃM© ½çv¥êŠ- ÌùXàå.Ê]©X -šÇo*¿Áßm §_ISO$)Or§©<“Yp;‘üÎ 2ˆÚLsc™ê×$º_½²¦™T;7@I{¹8'ÅÙ2(®åÁázÜj¬|òL£ºƒZk§|=®¬Ÿ×ÕüR™Q9¬Ì•²ŽÜO™€E¡¡æõËÔ“˜#yóæ\¹—L‘÷‡ÓÂa$i£Œúq½ l'ƛ̔›Ûò" æÀ)ófx f\e2C¹×0mÍç=þÄdP?éÓÜ“ÿBóö5S!¤ëñnÁØSŸ¶ÿeèie˜ƒÚód ±6ɵNÈX·WiÝ»×?»~h1—a]ut¥lTu•n°ªÃCy­ÏÿÙkúï‚F=ˆ·™OÛ‰oBª·¸&´ ÄéÁv6ßÚ‚°¥^Ët^…wǸöôcÙ–6ôr´Ž¼“ûƒ!Ó´{nØcOr#„Õ¥.o´ÈÊz²J‰å`ƒ¬…{þ_3©wÞ~Ý;ÍAr‚3wšZËÛ)%$2SœSCç†7‰ “úFï3)³4 C²AÑTm-s·$Mi Ö)„“y€Ù# ¼ziθdç4 â1}@’+÷á(F8E^HJX+¯G?)Ϥ&¤¬f¾ÿ|¤¯™ÒôëÿúÇû‹êT|øú¯_}Qn¿-}”¼ò6T»‰Ý‰û·Cÿ/ÿˆUáuZÉ„K^d!Õ…Üúbñû]‡»é©ù0 ”y`Ê”ìZ8'SŒÄPº‡Ð[0F±l©Æäº@$ršƒ`Ÿ÷(N»–§Oª†Ø-K´×º7x¯ì ŸçèíJK˜è²ðîô:Ë'wú“X²“fO'‰pRßu’X›†cwŠìÎùx²Œp%/.õ(RÒ¬r›|N¹“¨t‚¢)}(·®ÚÕIuÁ u Ú Ñ–±gûdÂ]äÚ©*ÞÍUÈöEð}™$Sþ™-ìsNw¾&òU2ß @}i(øzòÝÂýГ£¥:€‚´rÊXh'Æít(9ö¼v« ‚–PÛ:@Ôçd"®væé®5Gî윻A§»’W×÷œßMæ »–#g c˪{e˜åèÓ©‰s`ó âú©±Ÿôš•ôÁ^E·3籕æÇ‡ba{‰ÎM q*`ÆÎ9ƒ-ŽW¨@‹úÉ¥»[Þ©ª¹%-èä¨Ðï6ç5SE™’ð«Ü¥òÝàwzUà)¿ü:Sù°ÀÉ>—œA_G„ï{“á0Èœœ¼\-¯Ún€ó‡aÐ]£P·>졞Áà ;;¸´ îMšÊPõb7·SµkŽoaHOÎs›äù¿cÔ,HìÕŠ3’Ï[ ‡Ø ÁӠǰèØš%*žS‘¤ƒ¡„tÌ´3§wZ¤³Âï‚×ÕÿÔ¤iKyÒWjm ðÌô+ ³éSnºœˆ|w &x YÉ‹‹}ÂÉx8åÙú¿ œ Pɉûʧ¹ì–c•»æuÞÉ)/À @‘É)?“cÖ¥&qÝé»G/^hcªœ4€V Rž5„+w‹L¡yÑ N@–)¼¯b›EÉ|V-’¶^²E q% uM“Éaѽ\ g)»’Ï ÎÿâÙ¾^ÂjÁˆØ¶Öÿ²÷³¸5~WÈwªèý(¬z£¥3‰Ìåžš&ðŒj‚-Ó`tWYN\²c©C1n¼SÛ-.¦«¹Læòy‹Òɯ9Ò¯QM8-ÈN¨%H0|@51ÛÉu¬a m·¤ ØIù*;ŒYB݉¿<ˆ•aÈM£Œ.UŽ\ sËž²¥{κ¹Œ}$Øw ÷±SH¹>jiV³tí꾦½ÆL cÞKF‹Pk Œ–`ª¦qC (d ca¦†a´„-+É[7ûFH±yú“fPÛÌPèÅ‚’— MwA3Ny¹ Ñ)y[нâ<ØÉ<t‡ A§®€õ ºRØÉ’q©/Ô [’kuèdäÊ›á¬éáÕʤvXºð­ðû¤Ï’ûÔ+ý´4¡”†"/$´«TÈYjp%×W-åÓ oí\t9ýHRWКÿú¥QI$b^Õa£œâ?á€à ÍÔg&óÊ¿/…ÒXx[õVÙ!³tkÁWM­Ÿi7”ÝÊ]™*å~Û~–wKÅ´sѵ¨G¾í-îȨ–ÒÑ]¸(‡X¦‹VÞøBUMv¤¶ñeÝäþ5Aîhs CY§ó³hÙ ‘Š0T äNuŸµܺ²½gY*ñRÛ–ÖaÄ›C^±vjNÙaˆ‘®=®°í4!÷œ ÆNg&vDâ2.Ó®€òÿIµ&4|¥ ):9ñ´™ªÉÌ!‹b³^€c™ªŽÑ4+ò{:\±NÁØo4f//¶ËèCALí÷*[º;=ÙëWÈ‚°"õ«šn„”pŽáè¹Ý2i7­¦mÃég˜®{mŒÔ¼9•zâMŸq>È0lç‚ÕT –bb`VÔ›—U»Hgèɼ™k´›ñÉÂ:HÄ¢,~äPÙ·¤0bG-W’3å©óà0Óƒª»zÞ5‚#-¨xènSw´¸§uz!$Ò¿µ ¼2Ž›r™ÀHl«1rÀ̸³/N‡ú¼‘Ã0誠Xô $ÁÜú2ws|S ãR[ÓN»Ú’H ª‚ÿ*Ž-t¹Â{ðÝŒMEˇÐ|kï á"ˆ!ïR*=xµW9x~lz0Ô‡a/—ámËH»‰ …#u Ú±¼Î¥*šô$ dr»u#äaоù¢xÔ´G×e+÷K¨ª‘äŠmÀ+ÖÉ)ª‹Çx3@_ÎñøóláoWxwº›ÓÛ¯x?­ Ç/Åz[Ïö£žà»¹ÊpZ+µm>ÆÖTÿÌT¨›$!cTÕaÐË{¹©9iÚΚ.en§+틪çÃÇDc4h<¯ßìÎÁè-8Ö{ÏRkÉœ`:Û™ Üqdhå '”¾uÌ:IoBªHü•`ÇpÆc‰L¿•ܦÃÛªÜG°­Üð´X†c§}á]ÉØ_ÌÜ•z9wöp9(S +ãz©óæ«ôRÝ42†¢Ž6\Ú  Ï[ Bªg€€¬eqG°çˆw€R¿&œt îˆù7^•­þLx>8–x-n™“y„Á-VáøÏ48âp>”0œNr÷~ÏHG‘9Q÷vbJ@q +œkæt²rÊa°ü¿†Û-¬•Ætlj’G¦Ê-H×”vWFU•ó¡€C*%r×4¤@»iu¬`¶ÇcX¹ë®¤„Ào¶ëò÷Ÿ3‰8øÿÑ…˜;T5EŸßú¾}ÌYýáëãwN)íó5’ !e 4о8Æoºu>’(”¬Ú öF(75Õ„“YcsùþE{B›J» øýW³ææÃ´»òæÐ®E}Òžâ\Œvê½ð6%˜òæh—JŸ¹µLsc™Lhþ發fR‘¤!ÖhüÖ<æÔ¸ÓÚnéwUöŸ p#„É^î›[8þ öºâ:˜ÎÑtî¸ìÈí2×Ék1Ð[Ž›Gܾé2&¯bdïõ ðŽEMIò•„ÿ2™ž¶ðî6ó•ÄÌ÷ûâ m©~”œ6ŠÐÅ™*jœtQÞhÑpê 1Þ„ 8¿ ’Ø)KS°-œ68žÿ‡ÐAB»‰ L°B8P±8vFŽ N³Ø¿~±'kíe$é U|èSŒÀ´«T“Åžòrè]¡CË­¾õ’ÉèþüÝB®€Pê`NÊ ÞöªÂ¿Yõç7* ‰ ½(»vôl|_ÀªéN8 ‚y3õ"üc9ÒÉdWå’î: ²)t´o5}vЕ2´mg!Å®©FfE½<åÝÆªƒñ3b`©à ªŠ¼Ù%Dú” I’ ´›r\§0Bà·Åóv,¯4|;釓¿¤.cc•û2AwÉÆ˜ %êTQÇI†ñ‹ö$ÁôÀ”ÃðfŒul8{-¢·»6ÕÎyé}iJZ± ³Ìœ6€µþ¦J°ä£Rjnhw ´¢ØIFBéÓ‘¿È°ƒF«þw v 7§=ADS¶¨_^pC b¹úéÙ/åN ¡üÃ@7×$AV:x~©®!¬`cÔÝŠ¤Ùé>&i#D°n§’JUé=9pë@öWC°Ð,’ËÞR׿yO»†ò¡Úg–—lT*ÀäF;´kZ:ëx‰ªÉë>1{F˜ cŒÓØÃÙFãó ´H `xS*- ãr,J¬üíŒ_w#´jT½œ Ú(!Ê ÑX¬ °Ì9uƒî,X`’eÞô@a0.·¥*Q’‘OþÅÐpøê0ÉJ²[?xá F[wÀ¸KUä„6:5U6Iy튶Â~Ф\ú¹ItBõÇkŒò¶¨+|Þ²@†#–Z œŠ'1á>ŒD!öyÖ~XÓŒô%ôðÜd¸Ò•4¿•¥q&‹#øžõÐAWù!áÖ'~%Ý‘3 DG[RÇÚÞv»>Ü¥)í¦c )ÈPÅòbßP{·±(‘[¹Hi@š/¾SG*œ=›»•ïÉ Ýè3zìHÒAª,й¡BÚ^ê ¡³x¿·®ô™œÄÛáÁÙ±Ó"ÎGpÉÁï(SêX|¼öJ l事z1mªi7WNWiÝï1Á¼¹ 9á‰çéoW—­ù~r’åÆ@ã3 3·Å}Û æN7è0eñöÌÓƒŠ{Ü`Ö>€ßžÂü5¸_¿ ›…¡ßàªë¿&qW¶™nÿ«“FÆÃÒƒádøvýåúߎ·§ÿ¡‡³Å ÷W»Îµ$Ák 2¼J×·fáú_†“¸¸'P]I㌻¸ÌnéÞ“¸­ÇN„öR[ÚŸFþ2âcÀž£ùÚ,Âù¸9¯ê±ÒÂEkíro³Ìa9¾ÊìœKu?wÛô4Í 6Jgrà¾bw{Qn±\½\šwWr­zD –ñtú¢Á2•»Éö=ú&¤’LªªEqçù/4M1_:|7ÿf‘YîÕ(âó+ª Îß‚dc 꺆óž\iáfpކœ#Š»]–íNœ6‡=ª=‰œƒ »‘EónÐ}YhÈÞIë| IbÂíZÔúÅÛ wT epIÉé¾@sаÒ=·“)k€rBò;vËÝÜQpöò•£H'#×âT=ÏNVƒß¤-5Î QN)l¼;áò™7©ªªº ÖáÞ–'ªB­ôÉ©@ûÞmàf\z©Š\eaÇ3öµè³7±dêŽ$åmtWYok§¤"gQ¨TàÓ˜áÍô¨Ü‚†bVéÖ@Ñð}4Î*•\wÌ“r¹ä¥íÎûîcñ*ñ…´³ß’ñ/sØ&Ÿx¦%Õ]1oä0 º+:W“p»Œ$‚X^Åe¤6ªIÂ){UI Z>ªN3#ÙysMÄ}„‘c”æÊmè¥?í¶œpBDÝe½ÐfÛyìaÞ¦T¯AUA½¨d‚4¾XR}²Œpö©ÚÓÚ¥œYñK¥›Ø<õXB¡ ,Ÿ;+aÙhN¡D“(úŸ›u㸈êï\ÃŒ¹Z/j鼫÷sKG‹ÞZŽS†ê]D†¼'YHN˜ xìÆ­/ 9=â2ÂtzòkÔ]â\Ú“¹G³> Û¦0 猪n¢î}$YH‹VƒjpM»N ®šßÔý†w%QïŽÌd“$¡0U[EaÈù3F«Ïøu¥qs¼üx‡÷¸ÆjOÅ ~–7ñ÷úÁQ䦬äîJu‘­êRIî~ÎLL@N›6°@ÛÃõ§ëãáâ„#"ôpò,ŒA/ÛIYLVÃâº##o,whÂÛK%ªªb~5ËÙÄ2feÌÅNȉ/EX˜yŠ–œ º*·KCÔH·ä@"OöƒÆ ÝUÒT kïÞ—Ñð½%W\ÈUN~6æ ¾ð£oèîJ½ŒK£ ¬AwüÀ>Œ£‘[VÕCöÇ1 9 Y5¢’»j'S–ÉŽª=Ç–áô&¥øhHqW´ „¿·Ê‘óáœà|@MÑë~Á¨vÀx‘vq?»I'\ƒQ¯ô€yZPŠ”'bž–£= V*öÀ…ÒsƒàÖ­‡8=‡ÃŒ‡«üÇ5€-Èh@q=Á0“jÉ®Iœ¨:që HñE(šVH×4AnkJ—»#¡šÐ" ¢ÖÂàÚ;Ø^ƒï+L·kØæÑ»!=pæ’݃Þ1峿¦x+ð‘KªËogÉ{MÒúÃîãºÛrŸt•gaNÛrWº®T‡y’OØN5»ÿaß›ÁB±KâóªÜ®à>Kà£"9°,ŒÏo¬a1óø?³ÿåd„Åš ëÌà½ðr÷Y«X,Q¹(÷$îêΫ1ûž¾3E8ŠUáL©*ãª/p_Y_–nIzª9‘vè|ÅOYG÷NœMqÖ¶tãl$&´ˆedN }ÊÜZí¯%dB·©Üi*oÉULs7ð˜iÇR‡¢Xn”ƪ)»n+B­9ò)úCž†ÛµÙNý§äE”°€PN  ¿ÊÝ ªôí®¼%tp·n2Çr’¸Ò$ éÏü·3o}­r¸[Œ`Ì\©Ó®©˜óTgúy˶TR]€>Ü §NFñ}ò!ÃÀ{ù]¸9Y~$4e¿7dc¬àš.Ó×9á?iCmAòy«â]—çXŽí^Ô53ÃÔC’«Ü  ¦¢‹õ73óÇ\}@fzŒR§2\µK$|_ËÞ{8oä0 º«Xäu–LŠÝ•%ˆûpÎG¬hÉAI‚…ZswçM(ŒŸGxäíyŵì>Ø_bÍa,% »ò¦ÔZZ@‹T°Ö¯ô>Æ× °¬ Q@ÌŽ>Ç)ÐJ؃Ûèî¼aqï:+p©0Ÿ:€è–ª¦ Pk œÄ!/àv9w Òã¨?;HFp^-{T_PqõÙ“­\Ôœ¸'Tƒ(o#¸?ÐGAb]ánt„€ÌÖT¥ãI2Œ9“R®I‚úŠîår\=[î›ôC÷¹t§ü'´V¸Ñ rš‘9¡Ù 4‰Er:È@TÍr€ÒŒ|ÊcÂ}ºÁ­q/wð½ÓƒÙf&¼— ¶æ¨¿°¦AÝ ¹3ɤΗ ^¤õêa°ï¹£  ë´øÌ;è“ÛiE8-ÈAÜ®‡ù¡0˜(åNwsÎÅôFŘdØû2®â¹uÁ¼D=_ð}ÂÄ5äHÕ‰óá(„='lkÎu8!tç9+û~¢ñ}¿y åý¾©>'Ø;Í çH9õs¢îü{Éœ¦Ö1ƒ7øN©Š‰ …N®»—ŒŠúV`ÚT'y³ešÿ"s(”sR¡†pE2§ÐI\ ‡9êçÓe•¾‘`ã3ªÜ ’'X!üt:¨•‹º5ð]j?p¦Ÿû\Š å®Ç˜ÆWoÿ'¤¢)^.†S_@‹¸]‹%JbiÔxáè*wNù°ð#SÕxƪw¨NÜ:QhnЪ©åÚã$@å±Ð†t¦š¦Ü$Sÿ“~ßVþ¦³NrT°X ¾m‹—„dPŸJHü©´ÿbA»SÄŽ[r’\SyFq o4`¨* “9åå}Õ…øú+\‡’¤é^.L-èXúy‹#ƘÈÅÝó`ŒV¬ ¨Ep8yu\Kw¶\L2ˆ³+†§¸ÆŽ]Ñ[wÄ(Êx˜¨añ¹±B_Þc,l,_ ± ôhLfŒÁ†ð/åw ²žªJ'SÞj‰³«wNXldzȮ¼ pº/îà¸Ìä7f(­'Ãc4a9i~ç(¼«62õÉ Fàšÿ)§)”gúyÏNìjáSmcÉ É ²3K,¤– à£ê ïn˜ª£5„…Ës™àZ#hO3¼‘¦8tAÝsʆ?E¡—?ú&ÅMÚeuc!ìØn4G4ƒN‹¸dcœûæ„7ž!üÈœ,êäˆJapêï¦òÍàuÀ[Š¡Â b¸a‡c'#tü¦'Ëx:4å¾Ô²Œpz†6²j4€žW}ï'lÁC6ág}B¿ð”4•Î`Gz¤êJA½“3·3°;ÖR²ó7E[CŸ-+Öòm ÛÜ“¤¼+Pkj™l¬µÖ“|¾¹`à+Æ(­ÈùÖÑTÏB(}ùœ!<ò¢LÒ©°[ï’< ûrÏ£H2ðÝk½@…)uöå ™± IÚ¨ãƒú_F¦®3§À}= ï=Î!¼Á4Rá>nywõcHˆ ?üúܯ IÒô ×j`óÙéRÉ–#Ü €€*šbËv€•«^Ñtþ eR³€7Ó]CE$¤¶+ -ÀªÁËM»½À(aŽÅš­"d™™­Âoª÷꾓k5à’ƒ’8¿É¨ÔCɶ2lÝU†ÓZ$ª*m[å\¸FØ…»Ã77Çål’LÉÕ+áL"ˆ7c4¯ˆë_Áœ¯ÙÌ’M6” WŒIµ÷¸«ö{àçê™Ö‹ê$쎬J­ð®S‰=o~ê šH#ö0'ä‚Ú¹@†"¦Á(J=(P²ØÝÈX˜×@Ó'>MªÔx×µûß›h¾cëÜ]9öá8»Œ„Ñ*Î=(hZ¨Mý`­LH$ èÅÉtƒæ)šf x¼Ð ISQéäº;T.Ăˀvi(›`° ´BÜzp‹Å»¸âIi·&8-ÈN”?ÞqaÒÌÝ—&ÕÐË΂h´ pKr­3 àˆaζ]Âu'×®ÝrÈÆ;vM)›õ•¦+sÊþ#0™ ú‚øäMU­‰¸Ç& ô>ÃtåU×dœÛåàÅÐ¥ñØ«M·™ìPÿ]OçÖ #m¤Â zCú­iWŒÇ±/ìcá9ŠÉd7ýôx<Ïo­”eEKKäÀ ¶E}8ì½fî¶[â2ÃqäÆí¢N IP¼ö,N}í %²½iÿÆSt·”ì(ÒæBrÉÅuwP=æ>ÚÒpÉ3¼¥íLªKeÁÁ”áØi—lŒcù–êΫ~<*Ë«ú7!`â'ÈÜSåÙ"=BBw kß ×ys×(7ôdö‹$%U‹{‚3§§ñRñx«°áîâÝ„ûpú!#ñÖ­â-«j†¬ZxU=;uô‰ŸNFxÃìËë–]Y› S‡›ntç¾`‹ÆnŒ½Åi®²"k5“\86·3 $§7wR¼M¸]F‘õæŽúþ¶ØñÇ¢²½*(šà£ôÓÁÖ'[¥’M’,áXùÉhÝÇiw¨¼9´îôCFmà£è÷Âàîš&“¹ ÿe{•{)ìI–y“c©Aì%ÈÄÕÊp>.ò>JuõÅx´ãï¾ÁQ ò€"#-iÕsò)éISÚUEAsH˜ŒynŽP»…Ú¾“˜pëN}€â wT eJºq¹ÓÜgjö›,`§R|µ±Ã® u¼c’ZC\4åÍ´]}21*µKb†T'¬Æ…20»‡4T3ù°T.ª®¼)qvúTÄÙÌ+õs…Î’ „ƒÓ"Þ;C×`:‰žÏß×âaÄ›b¼lÂÙIY¸g^^@Få `­ê®yÜBõCM:dÆ~ èKw.Ù¨TÀFý¾”no9.•„¡'ׇ±Ã–(¸}4LqÀ›&ä1d”²‰,Û‰Sˆ@CM©²¸ÒêýJIL³ªHR¸F'¥xúçÓz& m½ò¦c6¼›ÎÌÂDßjÖ›§àÜíÅ$¬ò}Ay3iP}HjÉal=¾„VÈyKZ¥^FX×  dZxW*âš:9¢-7¼-Êä¨5‡C°ôÀª¬­ãÆò$]ùuŽJ¼)÷ñ²èÝ0~Ü d°žÚ¸ñ> ÊY/<Û&¸b´aÞô—‘¶Ô'{†h}¿ç,Ù\$#8Sóœ®á¼3UâpЬ?3ûý›¾€2 yS­Èªv1ˆUîáálÔ Hõž:ÐVéÂTÀíšrÂýÍf>?ï¶ pk´õ°}(ˆ©/åÜ]S§…¨æMaJ5&ƒyáûa »G±eJÄu®ÝZœêçÝ<—ÀAÇœäo'ãé¹õ°oZ\j V¥º×:¼þ¡¬)·sŒ…0 9 dÿ¤º›ƒ 0¥×yÝ/IŒð=$cN¢„s( åÿKÒvÎtç‹«B“ôþÇ[æ£ Kª¿‰£(djûà"Nùahű Ìpë@Ñ”7Ó’ 9\}÷ÁùAÉ -¨J²`@qbêAm‡$@¸è("ÎÛÇFã0OÊvŽæß [¦ÜÄz­†ùÔ'm÷…=¢E˜7…)ÕcSÄ Ÿô»PžqŸ˜µÃ\ÅZ½%™ÒïBÍÕ¼¥ß”æG2/†þŠnÇü§Æ&ˆémé€àÆ£_‹Ïiº«|"ª€¡ÁÈ_$#øY¦ð)UçcêŽÛµ*ÃäM£´«˜«o£ ˆWG‹¸™»wà»ìKuO,2ÿgŸÐcN¦¤Üàr7‘ðëþr¥êÄí Ô iO*¼™ -áˆeuÃÝãöZ›@Xz`{~ì8òQj?¹c™ðå)Y}À ä”6ì¢Ëp_Ü®EÝ©“S”‹ÑQq†âòdØÖŸµÝ [€ÓFH.îE@yªÝDÔWDÏáCÆç”·§éàžt2À&QÃèÔ±ƒ¢¨ Ä¢…ëãáäaj° îü…y#joÒç¤|QýÆÓ7v &IĪç#H{.:¶—¤LÜúl»m¬bK#‘äp_Èë”ö¶~Q¹'`Š·ál㊀½ëþ;µ2Å3¾Àx45/üC˵3ðÒj]{ŸàG¿?«8O™Aœ½)~ûÒðA£êus°¤ÀY(òcXó¶Ê™@—Ënš}¾ÂÕaoÆÁQÆ–+0É_FƲ‹:)qöÂþ!º›»=Pžq,‹ÚÖbÄàç ÃÏ]oÃ##Í.×®÷'ó®Gý¡ò2Q;˜2Q By72‚ýå~uôcÔ nœ¢… ;9bj—¹Û%â>µ°8(Þí•à»K'.Y‘LvÔ°‡€ðvF1C£Rá}Â;iÚ J"»ù»lvbålƒß¸¨jÊ™ñ•gu9µ$Ư$©[AÞ’Šû®iúóTU9 d–lð¦˜<˜bR­ø]ÉuÍXéïRgçyo\Ó„FöjRöRL¸]‹z6F{¢YŒ`ŒJ]GØ?¨HîSΔ÷©Rʋꤒ÷J(òJ2¥Óv/†4_38’;òaÛ8àš¯¶°Á8· îÔ‡Qi$Å)l Çu1ˆûÊ vè>ƒí+*šÊ€V:Ýí4ëð_ëÈʱ*˜?ýB௴îM&2 ²_Ç/\ŸuFúúµ÷vjŠ‚ȵš¢ÞA-}RÇç¹èLKŸ*·g¹b‚u6Á¼'G︨‹.£lZtòßISQ©* 8+un€²U\ÈßÐŒ?Î ŒVš‹§o ì Á¿ÿñý§|§ß4m¿šŽ™¼ÒLë 6þÅùÿA"¤2 Hé·äåÎe:Tkê4÷• ù˜:ûÙÒQ¦ÐôgÒøIù$¾ÐÏvfÝúô_HHÓ¬R!8QYc¶»ÏÿrW­ÎTÌ ›ª¸ò0/@K¿KÙ[ßQ^“¤SaÍ3mf5"ü…"8˜Ì2 jN3mÔM:ÊÓüŸÅá0^è½}ýæsþïH¸ÍŠŸT5uåv*`Žø»\);Ö/¥1å‰  ¯#IA©Bîªv–8~Çtà«âßSÎèÎS>(Õ}!QÜËjmAv“?J¹f£”ÑÝá©«õ@MÓ+eÊêB+~` ‰J5Ñ(“J;]e8ù !4n Å°«ýÊ}}Ü5!‚8æš1e¸aø¿7sÊA)ÛeæIÝ©£M%ý€ÊQ ÆP²¦˜¥Ã€ªik½[Öç- RÒ®„ËskœêPÅc³¿ÓX°ÊamôÙY“m“?zb™c¿OŒý÷O%÷6Ãß” ’)æ“ oRKÑ8b\w…’ŒÈ¤¢,^@4ÐM>oQdjU>ï Væä Sƒy‚6‚ µ¸RFGÅ…=PÐoèË„ª·Y¾M¨p;ƒdgïö•ÐŽ“7µÖ¸4ʺTß>d¼ÜtÎ÷|•˜Í0´¥ ºëÁè ¤h½iØÜÑJa0K4sÿ£)UU;ÒȰ#ä•jšò‘¸A…Tpªëx,œg¿r$ÕãVíg>!ù,7Tfzñç ¯Yò•rI,DTîËäE–c3ÅÜä¤eòvþþI;ª&Ø•-†•$#Kùo¸ÿ¤Ó‹ËÝúéÇö WŠÁp¥TØœ…TøKaîHSjùÐêsÏ š¹”zOp;RÛâó$i*ªsR¦T³î :‰ âRQ°d†¯i#@/¥Ÿ“Îò"ÕŠñ‘Tµß¯ôâ ‚Ø&ÄØ5®œ©ª´åvB‘YïOm%7:’tT«úD÷“Å ògaHª2œ¼¯.OXÑ’M¨`ƒUü›;ߥî:YcNæH_ãnIñú¦V´PÁ©Ìkþ§ »ú+õš¥ÜÓÍ nœrš1î<å(µ¾Ê…¯鼅å¶éûÉœµ‚ÓDUª YsæÍ‹.žÎ©B&»)¦F±º>b]Ȫlh7¥LØ‘`¿¦/ê B¿'.S2Ü’mTœ#«É‚•uÙm|¡ Ø@¶Hû•x7ȪÅÊV/[Ë-¨Få W2Ê ßÅñÛ°B4—˜Ž#Áœåvm”އÙ±ƒ¸Aƒn*ÐSPìd“±*øB|"I•\«U°ÞXDœ– á h§JýB’®R¾ - jÍíaãrHöreû‚Þ¦(q!ÁfÈÚMd(Tˆ ÿòGa£`8ïóÂL‚8ªí„Z/©·nyñrw-¿D¼Æ ÉHHT*•Ue8á>5í„–®Úç:(•§y!Á|UÚU*ÄÚǧò *¾ÐÀÎ^jMG…ë£Ãl²»òF†ÝU‡Œ ?œi_D‹ª“#ŽìàR†BO¿'!nx"8Â@C¨`†³J©®èˆ÷nÎÜ.G´¤ŒãóšÀò5{h8Z/!MbµšI…b&5¡]¥f¨žaO¤|S¤Ð¡>º¾Ö,~™T¡XëCÓ´a¨wBšwLÊõÿvìñß81WåNÀ"Ÿª:¼Ù\›ÿze¤¥y~È{úf¥£@»¦Û9u+³M¤ãN02Ó‰}X`,´@FÓ|±¿Ó|¤ÆÙé‹:oYŒ¾E¡Ò7W@{ªÜ,P¾3€vsÕs¯x%ÏûæOr,®:SÞ8î€8›x»xIWí%?Ó_&ÿí,³'4"ÞÑ•ØÀ*Mm@åóSõîÐWQÅvªéP-i7(SèÞ[O, 5 ƒr§âýõµ†™2ª_€1Çurî“Ë‘¦ÌÇʹ›X†j;]#Ⓤ#ŸA>™ZwFù–X\©:•»9Öb4Ô‘`ûª–úfÆv4ù¼eŒ…,Œ˜`ZA•’ó*†éPîJÑÞ·be« †à$#8°SqðwñE „¹s•á´j¯¡WUþ$Vñýu_i¼>ŠK™³£>5Iš˜^3ÝNM1Ï ’ºÒ–Õ¡°—CvÓªúY‰ŒnY c!ƒïcy)ÛOX`¯ùEôò>°^Eƒ81[ˆV”óŽ8íuÓɈrW*·AÇ+¯@ ìPŽu_ô5 Åíz%à#±„!ÁÛ}`=4ˆ-×ñË¡F5qVÜÎÔî—Â^È  ÑnZU?“ˆç}E¥”ݰ|‹Q-¹+ž”v£R)²« Ì¿á±@ÆBL¸ <ߘÁûþ`öšBéMŽ­ÉΑÃ_ä”ʱà ýɨ¾ãBMÑèZ˜Ø‚`ê—voc’â¥K^ ã y†¥àÀHõaæ(Âý¯­3ÛvÆ¡è{ÿ`o ( Ž±Ó¶¹)߯ot$áô°V¡³%ÏÆL ¹5{û¯“bœm¡wàÎkP)ÝQVžT_’æÈù.g`¿W@Ç7 )}9wpW3鎞őäñÀ²Õ×$®77固ÚØaÐoÝo­d! uÚØômšBðá«ahkè PòÐC¹Ûb=ñ]»¾ª²ìfÃë*O5Ûnv¨¼8C¤Cü¬}&5Gg®¦ö­F›;+y#Ô€ã‡Égݬ°R@7æï¦òbƒ$ÝËÀ¹0vÖ$¨šEO@ÁÄ9¤qãÝr-§ƒ%¶’¡XMi @º,‰¡É\ÔØ\l ¤’úšé£Áì°íÅÜÿèöàZ@R2­+ô´LËŽÏë7£gX$øCÄ_éÏN ø#°¢¤A_›‹%褫âæ y@hC¨‡±.]¹y¢Ö‰^ÁylPQGK >êQCë -Å2T& œ¨v<©rhu@‹Ai€Ù¿ ›6 í -š=P .ÿÃ3$’54–©ùÃÅz€+À3` ²I}™vÖ9°vߥuÕ#+‡V@’ÕûÑýóÛÅèÊw$ è ®Õ (+‡âJ®ÙÍÿêøµ[¿r•¹€ézÁà²Ï+˜³ WÉè)mè²ôÜ÷›œÆ—‡ÎÂGaÓ4‚îÔ$£=φc¼‰;’ÌuþUËÙ¼vQß]$ ”7N±#'£}sŠ} •„j2Œž…>X`2©ûâÿ‚²ÀVç›¶È»d^¸:¡£†èh0:êNÎu8èÃôågAßb2 WhwN `K aàðx M#h¦FiÜ‹;¤qã̘@A‘%tæË[h¤µ=tFfþVž”Æä;æ4ÌF##ZÁÇ!PN.86 q‚u8*_’s9»3.<À ±Ñw¸P»sÿvÐ1÷+Ó+œ¥,߇Þtow„ÃkÐlãrÆSÔt˜¼š¸Ÿ(›Ë«k ÅuŒ»RCÉ¡›Á]Î7 ¶ÓÓ1dÙ©E͘‡4qtº#ƒ¾£Ñdì·@ägðÁ¸ƒ(g!$´eçüòI­0x¿´Ââ@HÛ ´ÁIyzòâ ¯è0\ñA~²ÿènZvé æ¤CïÐa4FžÜ¤6ŒS!˲÷OQ§·7¿ÐÀ?ñt90§Zæ¬"—I úfŠq ü­èse]aü†Í91€+Ä aº–E¯ 驌§.SͯaY4ð‚‘ìâsŸ u“ À£Ô XÎúàþP¼;)¾¹QÈâm‡â*„BÀ ÍLÕ¡5@t;Ùk‚€•ºÃ¹€UʆÃ,U¸M«³Î„ÅE: ¤Iëa†@ÚY: ŠrX††UËy¨v^Mª‹cp|”émÙ1c‡n¾o³nËn–«i¤-Þ5¥ò 冶èÆ|N *f“¶C‡fD>\u]…Ð~æyá-"èÐ\%*¨e¯%dï0‰{¥·â/.ro ëlWí¤äEÔg˜S,”ž€gI/‡?Ð}p&Ð?i;={âò¦º‚s‡tÙØñ}h€u:øPFâ&IE´_™«‹PB^Pg¥ò¡¼€ºfÁM=¥£Øë”· «yIW?ñ |ƒæ5¶R­qÂq¤dŸãpë0zXåÌ+ˆÍVÉ(nÑÀ¸õæÐ»0ºb?„›.¦•Å·à'%ñ^EgìPr@k†Væ®H»Œœï¿õ×ÿÆè¦6zC7ÞÕÍ^ib×ÔØgY÷M_vE¦«Ë^6§Î 4ƒ~ªv?M;'ðjR!’7¨jý<Þ¸„ü0Œ.ˆÛ§ ãâ_Îj¯‰ßI7<9ìÚ_X®¦Z)©Oz”³+%6k# âêŒñ‚ õ Ì“ ?4¤±S©/£øiÑä»ù9`³Ù…ºOãÛl2¯š•—äl^s÷ ¿!ÕTÒpÀÚvÜ"¥à>Q• ïE'DÔ¦—Y^]«)¦4 ìïÀIÛ °c@±ß’ Ça«'Ãø 4YØ…¹:=ñt0.ÁîáèœüÎM˜šÜŠ ’ àÊfѽ/lÎÏÎÕ1sŽ‘þ‡†ÑÃ5 =Ëvªå0’ìê} ¯#ŒTž®Ùõìw±VBy†x&¹ïxEÊIÉ©¸¢\ðw-g^'vI7§w¨÷týHß'QWî¦â:\ü í0W*‰¡µ,/@ë%[È÷Òƾ°z8Á¢¶ƒ_ð‚x¸Äl'-|ƒe’¶‡ÞÙâ8‰‚ò µËn#µ2 Å¡^f9»"ã C;dµØói–ó»”àêÚM‡ÖFP¯É’·IÉs˜\wo» umtØÒ ôh]öaÈ5 5ƒùçÝm¿!ÍXžÛHÜ¡ÑÑí Ä\…áø½˜¼¸>†Bb³œM«û "æ]€jÏ/™¥~ÏåÎM’øc4\>;téAH3Û!Ýfý€Á—ÊF‰M+'@Œê8äÍ5t’å L–³±«,¡”&IÓI_Œ6WÐ52ô8à۠Ån΃»//£ò®‰¡n« ªnfÝñt‰eŒ ”9¹VSj€¥Ï*‡Y;‚å ƒ·ÉŒÄã uÓ‚€Á0ª„ʸ?;h»éŸ‘Qo/‰Ún /à6$Ù€9´]âܺç|“ V¨²¯®5´eúv;Irî¡‘Š© ÜnHÃÐOàRêGRr§u‡FŸÐá­`D€²¼¸vz>ƒÒë¦äÄÕA–WP_vÇâÁn6xwö#Í¡ÔC¡Â¼8C“Y\º ‰Z`ÉìTI¼¯®Õu˜n²ÈB™gð ÉyBòÒW2³á»”ät>ŸFÙò:IÚ>ar5wàÊÝu˜–bj®Ý,zUíe–k(m|c^Ë7óÞÕ›zç`ÜëË‹ƒ‡ƒëóL«ÃsbÞnH^ dæwõo³\CqÈ8ã*¯A33nXѲ#ÚžwÓ—ó£ˆUŽE[Â¥±5ïP7Ë5ô]ÊÛ8q(N[áà#=g ß¹¢Þ¿|nG0ޘƀÁ³ ¤Eƒ¡qùmöV¿"ún†añ™Kô 1ÜN1"GI)èNNôËåãTzÇìÇ ¢òBïÞ:àÞœ<^¨ šN/¾šàï¯ á´bÐÓkÇ—€3‰ë7{í[ïÿ¥{öfRpkAŸÆŽLëMµOŒ®c]8 ÓìÂ5 *Ö‹«S‰ÞѱZn:·QsÁ~1N;åÊÊNx‚âêlˆ“7ïŒÖBÝYÞÅá‡Åó}(¥ º¶9¨í“¸:3¯N1dAõ¸©ƒžz'B¦­LâŸïw\»ŽV¤í¡÷´'&û|¯áe°êMµ?ÈwPæÆÿuÞŽ–üõhÉ+ÙÞÏ<¤3°ÆÚÌvïC;³+J9ö؉>¦œC¹M¯º'v4 T¹;Dntñf“ úË5ô lˆ;–Àí†4 ÑdÑÔ¬g–®à»¨$6;“é Žé¢!&5J<)àÿÎSËÁ“Ò˜<³ë½ È’˜GbhtûhÅ%" Ìöm–Ùµšb–Ò0ÄyÔ mWyÃxÁw¬´1ÔíZTŠ;ÕÉi|{áà ÄÉÑ>.w* mõªü '³¼šúÄàáâïm‡Æ3Kil6›øÔ‚Êqãy¬Îçªæù4›X5½`»e8‹f˜Ö)Ã}«i;ìKÚ´›Ý¹BûT›¤SŒ¡›wb< Äçd\ A®z¥’e—Nêìݬ4éløOè †>l¯.˜vv®ãp@[ÀlR]ç^ÇR_­‰p¢`wy1¿¿Éá`üðî#$§•JÑ/÷Ñ›òVYu{HVY9¯•é0®.MÁò,@bÊy£ÔÏ àdéþF/8›åêÚ ½ñFøD›ÓpÿÓ¹KáÓ/|ݸ i»Jù˜åÕµ†ÎÈ^ÊÍ8Êœ‡ÁL¾ëÄŽ7òLeø}7‹I}hÜ!i¬t^†Ójwâ ®¦‚Á‡Jæêò9kë`A¼\jœŦúÉ0 ÕXËÕQ¤Yà%Š>äét(Fn7ƒ»à€ø >q·¡ löåÐv•‚ãkÓ²ZëØö<“ÊÆ«I6©.ªmCÛŠžÐÄ.Õt@`÷n6¹eÓ­ÈàcÝða„ƒ·ÜI’ê‡6t¤­ËKºžd^œ‹Jëµð!tqzœÕÅÎ7i…y”jÞB=´s½Qòæs놫IuÁcˆÜ ƒswÔaŸRÙ |Q %¥í¡iÝ5$y²ÃË! zîȊױú$®À0¶ŸVÏ:3ÏjÛ–kÓèÎé•LQ¤‰V_0l3ŒúWH+ 4màCP^]PðÎFÕ¤› cH¦ii-hR°2  «Ão@}; “§¢Ñ)Õµ™æ-4θá–rsAèøCÖuPTwgÓúqyHçêÌk@D¤íNX†ª72¯¥»ãÀ˜ÏíA<Œ®‡¥ºtÆqtX°Ê\Ó²ÉWÎ.BY;ŒÕЋ…îØÛn*:tÃý ±‹ŸA«ÂLÞ?€`yâ5,œ,±Eya³ÕÄb»Yí"ÔnÊÉ[hÒÉÃÑå«°™>h ÝxX‡sJ\#$Ë1,• *¡Yc¦š!ës¡eâO5p3>ŸOϱ– Ê«KØsÀ ±—’зåðøwàì˜s$K=Únèc€Õ ÜP‰ƒ÷OA?žM¶bš†):i´…¦t§þ“t×12'BºWCvi¡Ò¸1Å{%žìƒÃZ3È¡à”¼F=Ò¡•M?.8¡Ð‘‰ùÛíA²í“_숳ÌdôÃìô¦Ì¸µu§ígwÄÍÄÄ,ô-o6H4¼"Ø ­×B«CéŸP/Ö–Êœ wá´:âÕG¥¢ù ÒÙ°—zK »ßór¾!K@7b…‡ƒ)'h„jðæY ,ÃÄír 8¢gXçå¯Ê•³½Úˆ¤¥¨\añ‹ Iº@àØ¬ú,Û_¸ÅúÁIpЀ¾K‡V³Ýhô†Ûöâð’làŽgfÃÊ ø!œ üþ!{ç6˜8!n¦XNS^]ÒpÀÔ+$Λ}ØôÚ0®€<ÁnåP½=ã¯P•Ö½v<å8v>˜‰Áy—^0œ\´P5ñÌ8è\Ó%vÙéó ,õþ[ÖL°˜@@]µ'ºÂ¶b´”–PL.8-WdóÐS¯ÞÏ”Á ʽ¹Ñùb+žL ’A®hÁ(.ŒÅÆPia¨Â-ƒ«õeÞ2Øw£ë0:îÎ8QÊB­•ÎmïÁŸl]‡“näz#&e2vXøçYižtgb³Ù¤ºà]nCžÆ³|½ m¸G0FŸ‚Òîìt‡2E‘ºKîòù•?(sg˜ÆNÛwNå lÃI7r½ñž*É.k)µ9ã«í‰Ön}¡…crÐ@6:{(j g&ãçpКó¬·ÑtÊë$®“}D`8`v@•||?’ð¯l˜}—n ÿ$4€õîšFP¾£"yƒÚU«Ï]±;œ×rFÆá‚»^zQß/~½S‚Ä1ÐùQÊa´B"«°ËB QðÎY:»#íúõ^5¥aŠ®m¡žV’‹ûC{|/QïC É¿Ë^NÜü0L5«çÐA]-æüW7ª« Z¡— œã‡C Ð)Räl–×Ðìu WäHET®´Âp…”¡øÛM ¡ö¥&!§Fº=x+y%v©¦˜´Àí†4€&­#÷²³dœ/<µO«n«°Š†WÎÒõ6†ÕâJŒ|Z OÚ®Œs0$ ‡È¶'œ•[9 ?’¡ög5 Þ”Ví—ÙtîW—¶3 &BšýEM-°|ä’´Â$AÐþ¾`\¥ÓSÑŒý‚ˆG.ÐZ(g“ŠBO¡Ð 3Þ(oÈŒë¥Á™W¤¡«ªmM#H'ü’ M@ç ¼îJG(u”å¦Ìå¼3ÇÛƒr×íGÓ8¡4¥DzïáS9H Þ:°‚)ì\U~Øì£”lT]¬We³²#f~ƒ Â21ÄnPíN)7XkQÞç6œ# ;tÏçµáð Õè%ÙLwuØ5N³‘hù8—Wòô™ú.Ñ4ž* qÒ}h4'±a=`¨Cx…$†èN1B“ŒœÔ £ç\IE5)eÝV®.X÷ÁøÍ”;¸år¾sãxJc2FjžämÒ?–›(mo–Ä}€¡_¼¦ó]/ž9ƒËÁ½–;χS ,õ5±ï÷ÒŒÅHf£¬ºÁ\gµ•à±¥´}˜¾ ÞKs2ÁòjR!ž#—®b†W—4¢ݲÝÈV@Yah£n.ÞùH]ø•3Ï:úx³;m,;unÛÊÈ/ƒýÁ4øÙ'}Gq„L×NÅá 󇢨a |åÕ$»¬ÒÙg‰‰üíÄ"†ÃWìC•™jä0Õ“3`ã´ÔóÀ¯¤¸–ĵA§$vÆœ“c´öO½°WàUu6ȳECey:ÝT^lPðp@Ê¡sÆi ŒãÎÑ'ýnàÍË+ º‡G0#IlP%wP%Ôdþa#ñZj¹¡<>¡ú÷ ”ð:Ø74®l°óê —'! Èʸ,_’ rxǪÂÙÕh@p+ À×Bw óå;ü ål$8p½Qò|8D œ•Ñ0:–*FluZ¼, ´ÂâÃ`³þ+à”X85®A~”Ùÿú£â^…ˆW‰}í´™¶=4 ;WbøiÜ8óÉ‹ J•Öø4<(š‹^ÎS`SàDËÞ¿` ³Ž¸]©~–á !Ü’åo·¬È‡zQäãÄ9ñ .œ•<ùãð ÍŸ9/;;Ðài•޽⨊W“ ñ¿  ,éuCmR`§lÅp%œ„ &Ý5 ƒrà§„ƒo§”ÙîóÉ–9üoÏ›ô½äŒ}”Ökä.g‡¾)›ry'6^œ9Õè—•FõÅ¡lÐc‚:ö$H<iÁ„ÅXÃ`·d‡mrË®Ï3HÛ 0µNÝõ:¥„¹ ÞŒ<Õ¥À;Ï9†øSð@\/'µÀa9`x5©Ü_¬Ng“تÉ$oÐÛ" ]]Ð½ÚØaNÑ€R л # ÓR)A;´”¯¡i¡œq5MwA [)AiLžå»‹×3Ìb Éc´á‡*Ê56‹&A‚ú´*Pu™™!˜/W?9M7q0× […i|9hÖ]ô<œô•€3ä8–­›µéî0»Y´ð&à·î”†ÃLM  4&Ï<:ÈVuô¥=n×Õ45]„¢cçCºÊç©f¦Õ¬fdWóójÖ';œÄ“ÐEx¼†¦áTM%ØÁKw.:¶I»!2WJbZ¡~lü0Œ^Õ~ìÃÎn«ËZ'¡Ôö›"u¨jÛãªjØ5MŸ<Ír5Õ]ü×JOõ¶-±ªäGIÝÈ~øÃÀ¾»„›ä8Lôx«Í0›ÙÄ¡5 2»Æ˜W0~=€ÿ†yÓÆ¼ºÖÐI’7ÀJm¡¤ØCz µb6<[þÖ‘y$À‘ˆJÄæTøL|`¬WÿÍ1½Ìj+]; nvwÁ0A·®9 :`ΜQa`Eÿ€¸þLÆÁÁ¥Ó±Ô×Ä—YïÖ €ºãZmèµ›ewá5 :`(`ï=.Ý€N‚Š[7‹£ÄÕ :¤a˜8´Þ€*Íñ"}Ù]x½!@\‚ÜIÿ‰ÈÎW6[¼²ìgeµ¼ÂV؆ä fKZ~d8cPàн»HF¦¼™Å‘ âjzP6ˆCo…Òcòêàcga羚 ¸^†ÓP¨Á‹ÿT2ñêZMñv1H^’P@§äëS:ŒŸÚðÄôc1·Èr©.>œxÕ ˆÓp7Ë.khN˜0çŠXMQ³C5AŠ©gƱɘiP÷fl>Êß_Û‡E7[}åÅf³JÞÌ®…kDWÓHÂÞvHãFŒÎδNâoÆÌLo–‰ï(¦ãy§;3KÛ BA‘?t(ç¤Î öwÎ/j/!LIk‰U»ÙÝ,Æî†¡Ü€ú€¡ BàÜlòÿ\æÌ›Y/5t{HJª ~²§àKfDVœöþz^ÿô4i/Êœ«n«°Ê{^fÛ.“žøÚXé¥&ÁÐGr-ú=î¥ZXå£õé·%*ek©|åËkÄòƬ’ –«Š ù|_[Õ-ñP9H{Œg uëÙTw•þ«‡+;vÖœ¿³bÍ]ˆ¦Û®æ­¦Á ±iØvø¿§š_°®{ÈÕƒëz3(¯¥‡v¾hIbßG¶cbDׯªF qß….~©óâY(ݬ=‰Õ/…Ô= ªÈº­jླྀfNJÚüei4õo5­dµí2? Sÿò·¿üùËʼ“èÉMks@¿AJ6d HÔšl5…SdåH¼ªû›‚œ²FÊ*çá±Êgr.w]hÔ=4«˜ÊBõ­óßÌã÷NéË­tó^‹ 3}',ß)ë·ÓŽ/ï@»Óû.¦½p¯<(õ™X2O”~;•©K–™:(—w‹6Âÿᆷr=¾‚Kî_8;µqžäËbz+¹ý˹ó%>—òÞKănè_Xš´éÍ]sp¢l{ ´…êÕGÌ+8±‘fn†+D`‹%œä*ö÷¿Œ¿ ºþ=`\!›2Ôž—Y(©]HíNÒÍ®å0àj*yshžåˆñ½=œ†0(¾ï;×§Üù´?ë_þN+ý¢x>a$o”̇lW}¸è r•Ûry(_±3¯ˆœ¤°þjh×ò•qßn1(EÓJ1ÖIHÛ93AÚKPìÃ;ÉÐnŠu=H*ÌzÙ2ŒdÓ¬ðwúg&³?”^ƒ4IoŸ¤+¿®´Á$ø” äKÊðz¿âêË\‚ð |PÖ”’ÉîÙÍ’Nfz\Nb%å&¨9‰šDf¹BËçíAK¥à g€ivm/éŒ,­±A/*œ43¸(Kz±êU×?ÀUå C°»Ú¶Ë ÚF” &««'hÀÊUeƒéTT_šïÅì‚= zìK§ôËN‰ò꘹5T)yC¨—J‚Ô™« í—‚õ«ËXs¼u#5I³¾ÊêxÍïòRû†áÕ¤BYŒ¶Ð4ŒÚ…‡Çßé:ŸšÍÚZÕ^°C­®€ú(øpYý†66Í›i= \!Ï3AÅ“_Ìo€ÎÃj7€-bøc× gg˜N*/íÐË^HI0è.º‘aØ¥Bôí½„ÜïT* y£ÕEçŠAå£Òw³Xõ„©ä’M‹fùìœÞ¢ÚtÛ¥è¡ì¥]-&ºëFÛN¤³Œî.›%Ù^ê?ƒ¶KOzsÕ‘ž«šû.Y¥‹Vü£½û¡7ÖÙG·Ãâ³ü9¸[$Ã8ó€`ÿ™&‹ˆ+V—Óêiøšt¾ñ7Œ5påèªHþ0¯ªšëϲó%C;ÿ»òÆuÊêèùw‘+qÕy)“n»š„N0e˜ð* ÁâM@)/Àj–TGªŠ²€0 Ùläó) ÄlÀ‰ò³e±;ºÚºYIÃe7\AÈÔavÖ­ºi"¶£‹WA«Ù6‹l'®œV˜*ê]J0 †+Dò-ËnúqÁÉÖùA(¼ì¸¹Ö›%¥ëê¸ÔòÉÁçÛé)ù¦Íîh0¦¨!oæðïð^Yžì)‰·8ˆUxÑŸʼî”_ßÜnGrp'I{©ùæZ¨‡S¢•UDC†¥L¬Qj¨06'oã~ûàlV\×®mdÝV®W,oÌ. I¢ž4¾ë& v‡¢ÛAÙ…[ êH_|9bù:‡ð‘†Ä8ÔÊÇkÖAi+ý X0¤v9•U «Ù~©ÉjpŒ5Ýt˜m—í?¤Ñ¢Æl‡áê²Òpâž”¿ý…wØî œ 9T¶½—áóËq0U`eoDÛïºÌ²ÃpUI8PÎŒàæ¨­§z´þ¹¶ßkÌ¿«¨•U4ð{eÚè}ÝYɪÛ*må$í¸Q'Hpæˆ?V: M›—sv­¦˜‡4nœE5¶i'^R7:“ô‹Ózj=)©Ñ€zØÐNF¯Þ×VW5/5Œ$—ÕT5:y¢é½2])™}¾)׿‡\fYŠÚ“Ê ¼†åj*­+ì—ákÛ¦Qì0gíª“aÛa‚„‚ž”]ŽG¨„fº´1}MÝ–—ÙvÉ?)«ÅmùçI¨á¥€±Ë0íp6 Ú»áÀdv-‡AdMÒöOªzPçɰÂâèàtPìη¼ÎŽ:µ8–Êß/‚W­†ô‚á‚«"(9 ì¡›®×rè& wó€Éùe%ø5ŸJ“•Uûe0Kå}™ªÃt9¯«tÅp ð¤í®Š¿9IÚ1ƒ²:çƒ\´k]7Z4£Á/+¨9u[a8»¬Už,}W}>Õ&5y3‹Ë­!Wh¼ÁbŽö¸;`¢A^“ j=*93ôeþ[ ¨fØf–Sè3à‡‘ÖXmßÍr6Å}“C’>¦3½ƒ ¾“•â$QÆ–FPžž¼xÒŒ·rx¼Ëê„Ë,•þ Œ×„]Q»ëƒùè&¬6Áp5_Í­ôϵ]Ñ7W<ã¾K.Ÿ&ÊúÍÄWæ& Ÿgä8«à±ü_'_ñ«½Þ¹>„–€óPªB.I:.&OÆ'¼à€(UtÔ¹¤óxL·R»g:Ë̹Çq;r§„ឺò/£ôå….^¨óJ9¨(,¤¹,Û.Ê/N&’2®\lÙžýâM o´’ri‰~nÊ“—+Û~¹¢…^´íR}~Yƒ Nb˜‡¾ê²êèRƒ,Ç¡}ɺ-‹pÞ±L™›©ôR[´žÚaHçB•o (€žžø‚Íy“ýgÓm­çq['ÌA?/ó›äÑb?züË?þòû—_úË?èAÚÈï¥[’’!i‡*׃4‰;r eH;4X‘ÔÅ,_²èF]«PYB‹ÅKÖÀCUh×ð~jãë\ËK:«SÏMë~>©BRY7Ý6Ö[*­í ȃz;´ é»éöâóмRÙßô¢÷Jt—^–‚÷*‘áÛǬ̀åßìòöû¿Ôgr§/–oLjp‹¬ð‚ ÑI”Ò@Ùò¨”q‘ûö¼Çw¿šÒÔüʪ¿¬‹:#v¥ØójVèà®Rɬ:Ý/ èf÷þ çq)oËUEÏæb7Eò|¶ËnºQ~‘êvZõÛ/!n7F“Ò˜Œ½^4>Ò´¹4Ó -üC’žîÔî—à~HõC¤’œD-çþ¡ÎUù¸&JmýPZ1ƒÓk9ÄlS)Ë¢-åk‘\†RC¡²˜¬æÆã 8þÛd÷†iÞL£‚_Ó—Ë€X;#|!×/MO‡Ò—;Œûx3(út&•»ÂSÏî(·ÁPå¶ÐÃ\q;~‘<¸Þ`·\¿ÓCîržI%M´ð †³tÔ›íeL¿ÍI#ëΠCY4×/UÈWÛð¢í+±di‡k•Ũ3TOl;eËûrÞ¤°ÛjðW¹œ2ó7¹BsøZówŠä-4 ÐÐ\íÂJ0rù•^j”¥kP—ÔaW÷² õ݃_uáEUះÓlÄ}YFÒn e“häÅÉ:Øw®.6±¿šGÕì°‡ù½èRé×Ðs½øº*ºÛrêæ¾Óˆ8æWAØ1;ë¼;ßx×PV>ø‹e GV§ZtoϦP½â©j !—„ Ò-ŒÙ+¢¦s¶ð²³IuZ\(âÝ¢Ëa‚ÑPImx;\i+vY W§9¡²ZÓ^°Øë˜P¯BKSZÔ¬jfÇàáuṁ$¦ •v¸vÍÓP-Ôï0à°Ý,x•z•K„ÿ섚 =T£_­3%dN\³ü÷óÌ«Ré’_Yއ˜eëÆ·>éͧV?ýqq¦dVº»Éôê«Z!ó,ØÙe…ú`3¢Ã'ÑÝT^ hz%¤õn¥¢^t'ŽM`ÞTp‚XO„¦ä)EVK,Ëž ö-IBβB’x¥þ–HîXÁ_žRÛK»]2uuìÖßnVÃ=USvéÐÊ&è,”L…é†ä-–<»ŒN h¥g¿ÁŠïaÄ&zC³÷ÓmýfDe5‹"ÿuÆ+/ØD«C BÃή{¨,NeãꑘÂÀ4nG/7;ÅÌÎð£tʳØwâ/;¡–†¶8⃛'äe89 £NÄŠ­Ë&™¦SVËÎË™^3']œ õÜ4r¡,ŽÿýBÀW ½ þå›QS†¡‰£Ž,&­›vvõ„r,7P lÝi˜6i1åÓó,Qµe<«¾)qÉÙàãñŸ?(š,‹9}ŸkÃýhvº#®”„³¢½ýë#$™‰#Œõ ¬-wë34Œ%q€ÐMËMí˜Øoì8s[v:ôuî_ýþµJ. {w’¬‰ëJ—ݺpµ;ÍÉ\/Ošä«ÊÄò"Õ]þùOÚ•$¯¬ú¢Õ'ÌZ(®M§K'¾Y;_WJÊW4Løù¦L]+ëç&é œõ‡Óª½ù½º÷¡ü+›NÖG/+þ:h$oI(OÂÜO§kæÞ¹†JÉqÐŒ`V{Eÿ†gqÖDU½Ow F,Áæ^)à<@oœz“¦Ž” éh'óA®ØõÁ‰[`÷51½rÎDäüñѧÆ…Ü™‰~»ŒÔ…–~Zë…#!jH<]G“—o§_^‰ÊJî€D¡$=È¥ß Ë¤Bg•Pÿ'&í+ú$;yÍ@-¹G.ûGà:¾b¥>ä?rá\އÁê|¼KýÎu“}€Q;Oo¶åwl“Û15Œ…±¿Â‘'›åÓÛ¹J‘žwÃVH°–ö„”ÈÓÂý¯d ÜÙ(1‘g¦ ¯)¼|#Ž‹@nÓiw–2sGó–e§Š[ÆÆ&^—\v¥É|c Œ ñtä’Q§¥ËâøGš»d‡Èç`YïVìF»f#vPƒÀÈ›a;BúhÊ74iÁ²•Ó‚²Bp?4‰ÒÍ­ƒ!Í¡ÝÔ½ðÁ.+Èûç“$‹£îê‘0ŒânŒû7#™ÕF˸ %Ç=Æ7oh&SúöÚt†aäŽ; ð/”?–|V½•³PVpXÏ}çãòú.ïTï·£©þ– Ÿÿü#€(>µ &py-lmdb-py-lmdb_1.4.1/lib/000077500000000000000000000000001441346354400152635ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/lib/lmdb.h000066400000000000000000002204361441346354400163610ustar00rootroot00000000000000/** @file lmdb.h * @brief Lightning memory-mapped database library * * @mainpage Lightning Memory-Mapped Database Manager (LMDB) * * @section intro_sec Introduction * LMDB is a Btree-based database management library modeled loosely on the * BerkeleyDB API, but much simplified. The entire database is exposed * in a memory map, and all data fetches return data directly * from the mapped memory, so no malloc's or memcpy's occur during * data fetches. As such, the library is extremely simple because it * requires no page caching layer of its own, and it is extremely high * performance and memory-efficient. It is also fully transactional with * full ACID semantics, and when the memory map is read-only, the * database integrity cannot be corrupted by stray pointer writes from * application code. * * The library is fully thread-aware and supports concurrent read/write * access from multiple processes and threads. Data pages use a copy-on- * write strategy so no active data pages are ever overwritten, which * also provides resistance to corruption and eliminates the need of any * special recovery procedures after a system crash. Writes are fully * serialized; only one write transaction may be active at a time, which * guarantees that writers can never deadlock. The database structure is * multi-versioned so readers run with no locks; writers cannot block * readers, and readers don't block writers. * * Unlike other well-known database mechanisms which use either write-ahead * transaction logs or append-only data writes, LMDB requires no maintenance * during operation. Both write-ahead loggers and append-only databases * require periodic checkpointing and/or compaction of their log or database * files otherwise they grow without bound. LMDB tracks free pages within * the database and re-uses them for new write operations, so the database * size does not grow without bound in normal use. * * The memory map can be used as a read-only or read-write map. It is * read-only by default as this provides total immunity to corruption. * Using read-write mode offers much higher write performance, but adds * the possibility for stray application writes thru pointers to silently * corrupt the database. Of course if your application code is known to * be bug-free (...) then this is not an issue. * * If this is your first time using a transactional embedded key/value * store, you may find the \ref starting page to be helpful. * * @section caveats_sec Caveats * Troubleshooting the lock file, plus semaphores on BSD systems: * * - A broken lockfile can cause sync issues. * Stale reader transactions left behind by an aborted program * cause further writes to grow the database quickly, and * stale locks can block further operation. * * Fix: Check for stale readers periodically, using the * #mdb_reader_check function or the \ref mdb_stat_1 "mdb_stat" tool. * Stale writers will be cleared automatically on some systems: * - Windows - automatic * - Linux, systems using POSIX mutexes with Robust option - automatic * - not on BSD, systems using POSIX semaphores. * Otherwise just make all programs using the database close it; * the lockfile is always reset on first open of the environment. * * - On BSD systems or others configured with MDB_USE_POSIX_SEM, * startup can fail due to semaphores owned by another userid. * * Fix: Open and close the database as the user which owns the * semaphores (likely last user) or as root, while no other * process is using the database. * * Restrictions/caveats (in addition to those listed for some functions): * * - Only the database owner should normally use the database on * BSD systems or when otherwise configured with MDB_USE_POSIX_SEM. * Multiple users can cause startup to fail later, as noted above. * * - There is normally no pure read-only mode, since readers need write * access to locks and lock file. Exceptions: On read-only filesystems * or with the #MDB_NOLOCK flag described under #mdb_env_open(). * * - An LMDB configuration will often reserve considerable \b unused * memory address space and maybe file size for future growth. * This does not use actual memory or disk space, but users may need * to understand the difference so they won't be scared off. * * - By default, in versions before 0.9.10, unused portions of the data * file might receive garbage data from memory freed by other code. * (This does not happen when using the #MDB_WRITEMAP flag.) As of * 0.9.10 the default behavior is to initialize such memory before * writing to the data file. Since there may be a slight performance * cost due to this initialization, applications may disable it using * the #MDB_NOMEMINIT flag. Applications handling sensitive data * which must not be written should not use this flag. This flag is * irrelevant when using #MDB_WRITEMAP. * * - A thread can only use one transaction at a time, plus any child * transactions. Each transaction belongs to one thread. See below. * The #MDB_NOTLS flag changes this for read-only transactions. * * - Use an MDB_env* in the process which opened it, not after fork(). * * - Do not have open an LMDB database twice in the same process at * the same time. Not even from a plain open() call - close()ing it * breaks fcntl() advisory locking. (It is OK to reopen it after * fork() - exec*(), since the lockfile has FD_CLOEXEC set.) * * - Avoid long-lived transactions. Read transactions prevent * reuse of pages freed by newer write transactions, thus the * database can grow quickly. Write transactions prevent * other write transactions, since writes are serialized. * * - Avoid suspending a process with active transactions. These * would then be "long-lived" as above. Also read transactions * suspended when writers commit could sometimes see wrong data. * * ...when several processes can use a database concurrently: * * - Avoid aborting a process with an active transaction. * The transaction becomes "long-lived" as above until a check * for stale readers is performed or the lockfile is reset, * since the process may not remove it from the lockfile. * * This does not apply to write transactions if the system clears * stale writers, see above. * * - If you do that anyway, do a periodic check for stale readers. Or * close the environment once in a while, so the lockfile can get reset. * * - Do not use LMDB databases on remote filesystems, even between * processes on the same host. This breaks flock() on some OSes, * possibly memory map sync, and certainly sync between programs * on different hosts. * * - Opening a database can fail if another process is opening or * closing it at exactly the same time. * * @author Howard Chu, Symas Corporation. * * @copyright Copyright 2011-2021 Howard Chu, Symas Corp. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * @par Derived From: * This code is derived from btree.c written by Martin Hedenfalk. * * Copyright (c) 2009, 2010 Martin Hedenfalk * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _LMDB_H_ #define _LMDB_H_ #include #ifdef __cplusplus extern "C" { #endif /** Unix permissions for creating files, or dummy definition for Windows */ #ifdef _MSC_VER typedef int mdb_mode_t; #else typedef mode_t mdb_mode_t; #endif /** An abstraction for a file handle. * On POSIX systems file handles are small integers. On Windows * they're opaque pointers. */ #ifdef _WIN32 typedef void *mdb_filehandle_t; #else typedef int mdb_filehandle_t; #endif /** @defgroup mdb LMDB API * @{ * @brief OpenLDAP Lightning Memory-Mapped Database Manager */ /** @defgroup Version Version Macros * @{ */ /** Library major version */ #define MDB_VERSION_MAJOR 0 /** Library minor version */ #define MDB_VERSION_MINOR 9 /** Library patch version */ #define MDB_VERSION_PATCH 29 /** Combine args a,b,c into a single integer for easy version comparisons */ #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c)) /** The full library version as a single integer */ #define MDB_VERSION_FULL \ MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH) /** The release date of this library version */ #define MDB_VERSION_DATE "March 16, 2021" /** A stringifier for the version info */ #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")" /** A helper for the stringifier macro */ #define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d) /** The full library version as a C string */ #define MDB_VERSION_STRING \ MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE) /** @} */ /** @brief Opaque structure for a database environment. * * A DB environment supports multiple databases, all residing in the same * shared-memory map. */ typedef struct MDB_env MDB_env; /** @brief Opaque structure for a transaction handle. * * All database operations require a transaction handle. Transactions may be * read-only or read-write. */ typedef struct MDB_txn MDB_txn; /** @brief A handle for an individual database in the DB environment. */ typedef unsigned int MDB_dbi; /** @brief Opaque structure for navigating through a database */ typedef struct MDB_cursor MDB_cursor; /** @brief Generic structure used for passing keys and data in and out * of the database. * * Values returned from the database are valid only until a subsequent * update operation, or the end of the transaction. Do not modify or * free them, they commonly point into the database itself. * * Key sizes must be between 1 and #mdb_env_get_maxkeysize() inclusive. * The same applies to data sizes in databases with the #MDB_DUPSORT flag. * Other data items can in theory be from 0 to 0xffffffff bytes long. */ typedef struct MDB_val { size_t mv_size; /**< size of the data item */ void *mv_data; /**< address of the data item */ } MDB_val; /** @brief A callback function used to compare two keys in a database */ typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b); /** @brief A callback function used to relocate a position-dependent data item * in a fixed-address database. * * The \b newptr gives the item's desired address in * the memory map, and \b oldptr gives its previous address. The item's actual * data resides at the address in \b item. This callback is expected to walk * through the fields of the record in \b item and modify any * values based at the \b oldptr address to be relative to the \b newptr address. * @param[in,out] item The item that is to be relocated. * @param[in] oldptr The previous address. * @param[in] newptr The new address to relocate to. * @param[in] relctx An application-provided context, set by #mdb_set_relctx(). * @todo This feature is currently unimplemented. */ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx); /** @defgroup mdb_env Environment Flags * @{ */ /** mmap at a fixed address (experimental) */ #define MDB_FIXEDMAP 0x01 /** no environment directory */ #define MDB_NOSUBDIR 0x4000 /** don't fsync after commit */ #define MDB_NOSYNC 0x10000 /** read only */ #define MDB_RDONLY 0x20000 /** don't fsync metapage after commit */ #define MDB_NOMETASYNC 0x40000 /** use writable mmap */ #define MDB_WRITEMAP 0x80000 /** use asynchronous msync when #MDB_WRITEMAP is used */ #define MDB_MAPASYNC 0x100000 /** tie reader locktable slots to #MDB_txn objects instead of to threads */ #define MDB_NOTLS 0x200000 /** don't do any locking, caller must manage their own locks */ #define MDB_NOLOCK 0x400000 /** don't do readahead (no effect on Windows) */ #define MDB_NORDAHEAD 0x800000 /** don't initialize malloc'd memory before writing to datafile */ #define MDB_NOMEMINIT 0x1000000 /** @} */ /** @defgroup mdb_dbi_open Database Flags * @{ */ /** use reverse string keys */ #define MDB_REVERSEKEY 0x02 /** use sorted duplicates */ #define MDB_DUPSORT 0x04 /** numeric keys in native byte order: either unsigned int or size_t. * The keys must all be of the same size. */ #define MDB_INTEGERKEY 0x08 /** with #MDB_DUPSORT, sorted dup items have fixed size */ #define MDB_DUPFIXED 0x10 /** with #MDB_DUPSORT, dups are #MDB_INTEGERKEY-style integers */ #define MDB_INTEGERDUP 0x20 /** with #MDB_DUPSORT, use reverse string dups */ #define MDB_REVERSEDUP 0x40 /** create DB if not already existing */ #define MDB_CREATE 0x40000 /** @} */ /** @defgroup mdb_put Write Flags * @{ */ /** For put: Don't write if the key already exists. */ #define MDB_NOOVERWRITE 0x10 /** Only for #MDB_DUPSORT
* For put: don't write if the key and data pair already exist.
* For mdb_cursor_del: remove all duplicate data items. */ #define MDB_NODUPDATA 0x20 /** For mdb_cursor_put: overwrite the current key/data pair */ #define MDB_CURRENT 0x40 /** For put: Just reserve space for data, don't copy it. Return a * pointer to the reserved space. */ #define MDB_RESERVE 0x10000 /** Data is being appended, don't split full pages. */ #define MDB_APPEND 0x20000 /** Duplicate data is being appended, don't split full pages. */ #define MDB_APPENDDUP 0x40000 /** Store multiple data items in one call. Only for #MDB_DUPFIXED. */ #define MDB_MULTIPLE 0x80000 /* @} */ /** @defgroup mdb_copy Copy Flags * @{ */ /** Compacting copy: Omit free space from copy, and renumber all * pages sequentially. */ #define MDB_CP_COMPACT 0x01 /* @} */ /** @brief Cursor Get operations. * * This is the set of all operations for retrieving data * using a cursor. */ typedef enum MDB_cursor_op { MDB_FIRST, /**< Position at first key/data item */ MDB_FIRST_DUP, /**< Position at first data item of current key. Only for #MDB_DUPSORT */ MDB_GET_BOTH, /**< Position at key/data pair. Only for #MDB_DUPSORT */ MDB_GET_BOTH_RANGE, /**< position at key, nearest data. Only for #MDB_DUPSORT */ MDB_GET_CURRENT, /**< Return key/data at current cursor position */ MDB_GET_MULTIPLE, /**< Return up to a page of duplicate data items from current cursor position. Move cursor to prepare for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ MDB_LAST, /**< Position at last key/data item */ MDB_LAST_DUP, /**< Position at last data item of current key. Only for #MDB_DUPSORT */ MDB_NEXT, /**< Position at next data item */ MDB_NEXT_DUP, /**< Position at next data item of current key. Only for #MDB_DUPSORT */ MDB_NEXT_MULTIPLE, /**< Return up to a page of duplicate data items from next cursor position. Move cursor to prepare for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ MDB_NEXT_NODUP, /**< Position at first data item of next key */ MDB_PREV, /**< Position at previous data item */ MDB_PREV_DUP, /**< Position at previous data item of current key. Only for #MDB_DUPSORT */ MDB_PREV_NODUP, /**< Position at last data item of previous key */ MDB_SET, /**< Position at specified key */ MDB_SET_KEY, /**< Position at specified key, return key + data */ MDB_SET_RANGE, /**< Position at first key greater than or equal to specified key. */ MDB_PREV_MULTIPLE /**< Position at previous page and return up to a page of duplicate data items. Only for #MDB_DUPFIXED */ } MDB_cursor_op; /** @defgroup errors Return Codes * * BerkeleyDB uses -30800 to -30999, we'll go under them * @{ */ /** Successful result */ #define MDB_SUCCESS 0 /** key/data pair already exists */ #define MDB_KEYEXIST (-30799) /** key/data pair not found (EOF) */ #define MDB_NOTFOUND (-30798) /** Requested page not found - this usually indicates corruption */ #define MDB_PAGE_NOTFOUND (-30797) /** Located page was wrong type */ #define MDB_CORRUPTED (-30796) /** Update of meta page failed or environment had fatal error */ #define MDB_PANIC (-30795) /** Environment version mismatch */ #define MDB_VERSION_MISMATCH (-30794) /** File is not a valid LMDB file */ #define MDB_INVALID (-30793) /** Environment mapsize reached */ #define MDB_MAP_FULL (-30792) /** Environment maxdbs reached */ #define MDB_DBS_FULL (-30791) /** Environment maxreaders reached */ #define MDB_READERS_FULL (-30790) /** Too many TLS keys in use - Windows only */ #define MDB_TLS_FULL (-30789) /** Txn has too many dirty pages */ #define MDB_TXN_FULL (-30788) /** Cursor stack too deep - internal error */ #define MDB_CURSOR_FULL (-30787) /** Page has not enough space - internal error */ #define MDB_PAGE_FULL (-30786) /** Database contents grew beyond environment mapsize */ #define MDB_MAP_RESIZED (-30785) /** Operation and DB incompatible, or DB type changed. This can mean: *
    *
  • The operation expects an #MDB_DUPSORT / #MDB_DUPFIXED database. *
  • Opening a named DB when the unnamed DB has #MDB_DUPSORT / #MDB_INTEGERKEY. *
  • Accessing a data record as a database, or vice versa. *
  • The database was dropped and recreated with different flags. *
*/ #define MDB_INCOMPATIBLE (-30784) /** Invalid reuse of reader locktable slot */ #define MDB_BAD_RSLOT (-30783) /** Transaction must abort, has a child, or is invalid */ #define MDB_BAD_TXN (-30782) /** Unsupported size of key/DB name/data, or wrong DUPFIXED size */ #define MDB_BAD_VALSIZE (-30781) /** The specified DBI was changed unexpectedly */ #define MDB_BAD_DBI (-30780) /** The last defined error code */ #define MDB_LAST_ERRCODE MDB_BAD_DBI /** @} */ /** @brief Statistics for a database in the environment */ typedef struct MDB_stat { unsigned int ms_psize; /**< Size of a database page. This is currently the same for all databases. */ unsigned int ms_depth; /**< Depth (height) of the B-tree */ size_t ms_branch_pages; /**< Number of internal (non-leaf) pages */ size_t ms_leaf_pages; /**< Number of leaf pages */ size_t ms_overflow_pages; /**< Number of overflow pages */ size_t ms_entries; /**< Number of data items */ } MDB_stat; /** @brief Information about the environment */ typedef struct MDB_envinfo { void *me_mapaddr; /**< Address of map, if fixed */ size_t me_mapsize; /**< Size of the data memory map */ size_t me_last_pgno; /**< ID of the last used page */ size_t me_last_txnid; /**< ID of the last committed transaction */ unsigned int me_maxreaders; /**< max reader slots in the environment */ unsigned int me_numreaders; /**< max reader slots used in the environment */ } MDB_envinfo; /** @brief Return the LMDB library version information. * * @param[out] major if non-NULL, the library major version number is copied here * @param[out] minor if non-NULL, the library minor version number is copied here * @param[out] patch if non-NULL, the library patch version number is copied here * @retval "version string" The library version as a string */ char *mdb_version(int *major, int *minor, int *patch); /** @brief Return a string describing a given error code. * * This function is a superset of the ANSI C X3.159-1989 (ANSI C) strerror(3) * function. If the error code is greater than or equal to 0, then the string * returned by the system function strerror(3) is returned. If the error code * is less than 0, an error string corresponding to the LMDB library error is * returned. See @ref errors for a list of LMDB-specific error codes. * @param[in] err The error code * @retval "error message" The description of the error */ char *mdb_strerror(int err); /** @brief Create an LMDB environment handle. * * This function allocates memory for a #MDB_env structure. To release * the allocated memory and discard the handle, call #mdb_env_close(). * Before the handle may be used, it must be opened using #mdb_env_open(). * Various other options may also need to be set before opening the handle, * e.g. #mdb_env_set_mapsize(), #mdb_env_set_maxreaders(), #mdb_env_set_maxdbs(), * depending on usage requirements. * @param[out] env The address where the new handle will be stored * @return A non-zero error value on failure and 0 on success. */ int mdb_env_create(MDB_env **env); /** @brief Open an environment handle. * * If this function fails, #mdb_env_close() must be called to discard the #MDB_env handle. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] path The directory in which the database files reside. This * directory must already exist and be writable. * @param[in] flags Special options for this environment. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. * Flags set by mdb_env_set_flags() are also used. *
    *
  • #MDB_FIXEDMAP * use a fixed address for the mmap region. This flag must be specified * when creating the environment, and is stored persistently in the environment. * If successful, the memory map will always reside at the same virtual address * and pointers used to reference data items in the database will be constant * across multiple invocations. This option may not always work, depending on * how the operating system has allocated memory to shared libraries and other uses. * The feature is highly experimental. *
  • #MDB_NOSUBDIR * By default, LMDB creates its environment in a directory whose * pathname is given in \b path, and creates its data and lock files * under that directory. With this option, \b path is used as-is for * the database main data file. The database lock file is the \b path * with "-lock" appended. *
  • #MDB_RDONLY * Open the environment in read-only mode. No write operations will be * allowed. LMDB will still modify the lock file - except on read-only * filesystems, where LMDB does not use locks. *
  • #MDB_WRITEMAP * Use a writeable memory map unless MDB_RDONLY is set. This uses * fewer mallocs but loses protection from application bugs * like wild pointer writes and other bad updates into the database. * This may be slightly faster for DBs that fit entirely in RAM, but * is slower for DBs larger than RAM. * Incompatible with nested transactions. * Do not mix processes with and without MDB_WRITEMAP on the same * environment. This can defeat durability (#mdb_env_sync etc). *
  • #MDB_NOMETASYNC * Flush system buffers to disk only once per transaction, omit the * metadata flush. Defer that until the system flushes files to disk, * or next non-MDB_RDONLY commit or #mdb_env_sync(). This optimization * maintains database integrity, but a system crash may undo the last * committed transaction. I.e. it preserves the ACI (atomicity, * consistency, isolation) but not D (durability) database property. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_NOSYNC * Don't flush system buffers to disk when committing a transaction. * This optimization means a system crash can corrupt the database or * lose the last transactions if buffers are not yet flushed to disk. * The risk is governed by how often the system flushes dirty buffers * to disk and how often #mdb_env_sync() is called. However, if the * filesystem preserves write order and the #MDB_WRITEMAP flag is not * used, transactions exhibit ACI (atomicity, consistency, isolation) * properties and only lose D (durability). I.e. database integrity * is maintained, but a system crash may undo the final transactions. * Note that (#MDB_NOSYNC | #MDB_WRITEMAP) leaves the system with no * hint for when to write transactions to disk, unless #mdb_env_sync() * is called. (#MDB_MAPASYNC | #MDB_WRITEMAP) may be preferable. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_MAPASYNC * When using #MDB_WRITEMAP, use asynchronous flushes to disk. * As with #MDB_NOSYNC, a system crash can then corrupt the * database or lose the last transactions. Calling #mdb_env_sync() * ensures on-disk database integrity until next commit. * This flag may be changed at any time using #mdb_env_set_flags(). *
  • #MDB_NOTLS * Don't use Thread-Local Storage. Tie reader locktable slots to * #MDB_txn objects instead of to threads. I.e. #mdb_txn_reset() keeps * the slot reserved for the #MDB_txn object. A thread may use parallel * read-only transactions. A read-only transaction may span threads if * the user synchronizes its use. Applications that multiplex many * user threads over individual OS threads need this option. Such an * application must also serialize the write transactions in an OS * thread, since LMDB's write locking is unaware of the user threads. *
  • #MDB_NOLOCK * Don't do any locking. If concurrent access is anticipated, the * caller must manage all concurrency itself. For proper operation * the caller must enforce single-writer semantics, and must ensure * that no readers are using old transactions while a writer is * active. The simplest approach is to use an exclusive lock so that * no readers may be active at all when a writer begins. *
  • #MDB_NORDAHEAD * Turn off readahead. Most operating systems perform readahead on * read requests by default. This option turns it off if the OS * supports it. Turning it off may help random read performance * when the DB is larger than RAM and system RAM is full. * The option is not implemented on Windows. *
  • #MDB_NOMEMINIT * Don't initialize malloc'd memory before writing to unused spaces * in the data file. By default, memory for pages written to the data * file is obtained using malloc. While these pages may be reused in * subsequent transactions, freshly malloc'd pages will be initialized * to zeroes before use. This avoids persisting leftover data from other * code (that used the heap and subsequently freed the memory) into the * data file. Note that many other system libraries may allocate * and free memory from the heap for arbitrary uses. E.g., stdio may * use the heap for file I/O buffers. This initialization step has a * modest performance cost so some applications may want to disable * it using this flag. This option can be a problem for applications * which handle sensitive data like passwords, and it makes memory * checkers like Valgrind noisy. This flag is not needed with #MDB_WRITEMAP, * which writes directly to the mmap instead of using malloc for pages. The * initialization is also skipped if #MDB_RESERVE is used; the * caller is expected to overwrite all of the memory that was * reserved in that case. * This flag may be changed at any time using #mdb_env_set_flags(). *
* @param[in] mode The UNIX permissions to set on created files and semaphores. * This parameter is ignored on Windows. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_VERSION_MISMATCH - the version of the LMDB library doesn't match the * version that created the database environment. *
  • #MDB_INVALID - the environment file headers are corrupted. *
  • ENOENT - the directory specified by the path parameter doesn't exist. *
  • EACCES - the user didn't have permission to access the environment files. *
  • EAGAIN - the environment was locked by another process. *
*/ int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode); /** @brief Copy an LMDB environment to the specified path. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] path The directory in which the copy will reside. This * directory must already exist and be writable but must otherwise be * empty. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copy(MDB_env *env, const char *path); /** @brief Copy an LMDB environment to the specified file descriptor. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] fd The filedescriptor to write the copy to. It must * have already been opened for Write access. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); /** @brief Copy an LMDB environment to the specified path, with options. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] path The directory in which the copy will reside. This * directory must already exist and be writable but must otherwise be * empty. * @param[in] flags Special options for this operation. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_CP_COMPACT - Perform compaction while copying: omit free * pages and sequentially renumber all pages in output. This option * consumes more CPU and runs more slowly than the default. * Currently it fails if the environment has suffered a page leak. *
* @return A non-zero error value on failure and 0 on success. */ int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags); /** @brief Copy an LMDB environment to the specified file descriptor, * with options. * * This function may be used to make a backup of an existing environment. * No lockfile is created, since it gets recreated at need. See * #mdb_env_copy2() for further details. * @note This call can trigger significant file size growth if run in * parallel with write transactions, because it employs a read-only * transaction. See long-lived transactions under @ref caveats_sec. * @param[in] env An environment handle returned by #mdb_env_create(). It * must have already been opened successfully. * @param[in] fd The filedescriptor to write the copy to. It must * have already been opened for Write access. * @param[in] flags Special options for this operation. * See #mdb_env_copy2() for options. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags); /** @brief Return statistics about the LMDB environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] stat The address of an #MDB_stat structure * where the statistics will be copied */ int mdb_env_stat(MDB_env *env, MDB_stat *stat); /** @brief Return information about the LMDB environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] stat The address of an #MDB_envinfo structure * where the information will be copied */ int mdb_env_info(MDB_env *env, MDB_envinfo *stat); /** @brief Flush the data buffers to disk. * * Data is always written to disk when #mdb_txn_commit() is called, * but the operating system may keep it buffered. LMDB always flushes * the OS buffers upon commit as well, unless the environment was * opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC. This call is * not valid if the environment was opened with #MDB_RDONLY. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] force If non-zero, force a synchronous flush. Otherwise * if the environment has the #MDB_NOSYNC flag set the flushes * will be omitted, and with #MDB_MAPASYNC they will be asynchronous. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - the environment is read-only. *
  • EINVAL - an invalid parameter was specified. *
  • EIO - an error occurred during synchronization. *
*/ int mdb_env_sync(MDB_env *env, int force); /** @brief Close the environment and release the memory map. * * Only a single thread may call this function. All transactions, databases, * and cursors must already be closed before calling this function. Attempts to * use any such handles after calling this function will cause a SIGSEGV. * The environment handle will be freed and must not be used again after this call. * @param[in] env An environment handle returned by #mdb_env_create() */ void mdb_env_close(MDB_env *env); /** @brief Set environment flags. * * This may be used to set some flags in addition to those from * #mdb_env_open(), or to unset these flags. If several threads * change the flags at the same time, the result is undefined. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] flags The flags to change, bitwise OR'ed together * @param[in] onoff A non-zero value sets the flags, zero clears them. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff); /** @brief Get environment flags. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] flags The address of an integer to store the flags * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_flags(MDB_env *env, unsigned int *flags); /** @brief Return the path that was used in #mdb_env_open(). * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] path Address of a string pointer to contain the path. This * is the actual string in the environment, not a copy. It should not be * altered in any way. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_path(MDB_env *env, const char **path); /** @brief Return the filedescriptor for the given environment. * * This function may be called after fork(), so the descriptor can be * closed before exec*(). Other LMDB file descriptors have FD_CLOEXEC. * (Until LMDB 0.9.18, only the lockfile had that.) * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *fd); /** @brief Set the size of the memory map to use for this environment. * * The size should be a multiple of the OS page size. The default is * 10485760 bytes. The size of the memory map is also the maximum size * of the database. The value should be chosen as large as possible, * to accommodate future growth of the database. * This function should be called after #mdb_env_create() and before #mdb_env_open(). * It may be called at later times if no transactions are active in * this process. Note that the library does not check for this condition, * the caller must ensure it explicitly. * * The new size takes effect immediately for the current process but * will not be persisted to any others until a write transaction has been * committed by the current process. Also, only mapsize increases are * persisted into the environment. * * If the mapsize is increased by another process, and data has grown * beyond the range of the current mapsize, #mdb_txn_begin() will * return #MDB_MAP_RESIZED. This function may be called with a size * of zero to adopt the new size. * * Any attempt to set a size smaller than the space already consumed * by the environment will be silently changed to the current size of the used space. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] size The size in bytes * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment has * an active write transaction. *
*/ int mdb_env_set_mapsize(MDB_env *env, size_t size); /** @brief Set the maximum number of threads/reader slots for the environment. * * This defines the number of slots in the lock table that is used to track readers in the * the environment. The default is 126. * Starting a read-only transaction normally ties a lock table slot to the * current thread until the environment closes or the thread exits. If * MDB_NOTLS is in use, #mdb_txn_begin() instead ties the slot to the * MDB_txn object until it or the #MDB_env object is destroyed. * This function may only be called after #mdb_env_create() and before #mdb_env_open(). * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] readers The maximum number of reader lock table slots * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment is already open. *
*/ int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers); /** @brief Get the maximum number of threads/reader slots for the environment. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] readers Address of an integer to store the number of readers * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers); /** @brief Set the maximum number of named databases for the environment. * * This function is only needed if multiple databases will be used in the * environment. Simpler applications that use the environment as a single * unnamed database can ignore this option. * This function may only be called after #mdb_env_create() and before #mdb_env_open(). * * Currently a moderate number of slots are cheap but a huge number gets * expensive: 7-120 words per transaction, and every #mdb_dbi_open() * does a linear search of the opened slots. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] dbs The maximum number of databases * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified, or the environment is already open. *
*/ int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs); /** @brief Get the maximum size of keys and #MDB_DUPSORT data we can write. * * Depends on the compile-time constant #MDB_MAXKEYSIZE. Default 511. * See @ref MDB_val. * @param[in] env An environment handle returned by #mdb_env_create() * @return The maximum size of a key we can write */ int mdb_env_get_maxkeysize(MDB_env *env); /** @brief Set application information associated with the #MDB_env. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] ctx An arbitrary pointer for whatever the application needs. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_set_userctx(MDB_env *env, void *ctx); /** @brief Get the application information associated with the #MDB_env. * * @param[in] env An environment handle returned by #mdb_env_create() * @return The pointer set by #mdb_env_set_userctx(). */ void *mdb_env_get_userctx(MDB_env *env); /** @brief A callback function for most LMDB assert() failures, * called before printing the message and aborting. * * @param[in] env An environment handle returned by #mdb_env_create(). * @param[in] msg The assertion message, not including newline. */ typedef void MDB_assert_func(MDB_env *env, const char *msg); /** Set or reset the assert() callback of the environment. * Disabled if liblmdb is built with NDEBUG. * @note This hack should become obsolete as lmdb's error handling matures. * @param[in] env An environment handle returned by #mdb_env_create(). * @param[in] func An #MDB_assert_func function, or 0. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func); /** @brief Create a transaction for use with the environment. * * The transaction handle may be discarded using #mdb_txn_abort() or #mdb_txn_commit(). * @note A transaction and its cursors must only be used by a single * thread, and a thread may only have a single transaction at a time. * If #MDB_NOTLS is in use, this does not apply to read-only transactions. * @note Cursors may not span transactions. * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] parent If this parameter is non-NULL, the new transaction * will be a nested transaction, with the transaction indicated by \b parent * as its parent. Transactions may be nested to any level. A parent * transaction and its cursors may not issue any other operations than * mdb_txn_commit and mdb_txn_abort while it has active child transactions. * @param[in] flags Special options for this transaction. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_RDONLY * This transaction will not perform any write operations. *
* @param[out] txn Address where the new #MDB_txn handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_PANIC - a fatal error occurred earlier and the environment * must be shut down. *
  • #MDB_MAP_RESIZED - another process wrote data beyond this MDB_env's * mapsize and this environment's map must be resized as well. * See #mdb_env_set_mapsize(). *
  • #MDB_READERS_FULL - a read-only transaction was requested and * the reader lock table is full. See #mdb_env_set_maxreaders(). *
  • ENOMEM - out of memory. *
*/ int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn); /** @brief Returns the transaction's #MDB_env * * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ MDB_env *mdb_txn_env(MDB_txn *txn); /** @brief Return the transaction's ID. * * This returns the identifier associated with this transaction. For a * read-only transaction, this corresponds to the snapshot being read; * concurrent readers will frequently have the same transaction ID. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A transaction ID, valid if input is an active transaction. */ size_t mdb_txn_id(MDB_txn *txn); /** @brief Commit all the operations of a transaction into the database. * * The transaction handle is freed. It and its cursors must not be used * again after this call, except with #mdb_cursor_renew(). * @note Earlier documentation incorrectly said all cursors would be freed. * Only write-transactions free cursors. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
  • ENOSPC - no more disk space. *
  • EIO - a low-level I/O error occurred while writing. *
  • ENOMEM - out of memory. *
*/ int mdb_txn_commit(MDB_txn *txn); /** @brief Abandon all the operations of the transaction instead of saving them. * * The transaction handle is freed. It and its cursors must not be used * again after this call, except with #mdb_cursor_renew(). * @note Earlier documentation incorrectly said all cursors would be freed. * Only write-transactions free cursors. * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ void mdb_txn_abort(MDB_txn *txn); /** @brief Reset a read-only transaction. * * Abort the transaction like #mdb_txn_abort(), but keep the transaction * handle. #mdb_txn_renew() may reuse the handle. This saves allocation * overhead if the process will start a new read-only transaction soon, * and also locking overhead if #MDB_NOTLS is in use. The reader table * lock is released, but the table slot stays tied to its thread or * #MDB_txn. Use mdb_txn_abort() to discard a reset handle, and to free * its lock table slot if MDB_NOTLS is in use. * Cursors opened within the transaction must not be used * again after this call, except with #mdb_cursor_renew(). * Reader locks generally don't interfere with writers, but they keep old * versions of database pages allocated. Thus they prevent the old pages * from being reused when writers commit new data, and so under heavy load * the database size may grow much more rapidly than otherwise. * @param[in] txn A transaction handle returned by #mdb_txn_begin() */ void mdb_txn_reset(MDB_txn *txn); /** @brief Renew a read-only transaction. * * This acquires a new reader lock for a transaction handle that had been * released by #mdb_txn_reset(). It must be called before a reset transaction * may be used again. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_PANIC - a fatal error occurred earlier and the environment * must be shut down. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_txn_renew(MDB_txn *txn); /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ #define mdb_open(txn,name,flags,dbi) mdb_dbi_open(txn,name,flags,dbi) /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ #define mdb_close(env,dbi) mdb_dbi_close(env,dbi) /** @brief Open a database in the environment. * * A database handle denotes the name and parameters of a database, * independently of whether such a database exists. * The database handle may be discarded by calling #mdb_dbi_close(). * The old database handle is returned if the database was already open. * The handle may only be closed once. * * The database handle will be private to the current transaction until * the transaction is successfully committed. If the transaction is * aborted the handle will be closed automatically. * After a successful commit the handle will reside in the shared * environment, and may be used by other transactions. * * This function must not be called from multiple concurrent * transactions in the same process. A transaction that uses * this function must finish (either commit or abort) before * any other transaction in the process may use this function. * * To use named databases (with name != NULL), #mdb_env_set_maxdbs() * must be called before opening the environment. Database names are * keys in the unnamed database, and may be read but not written. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] name The name of the database to open. If only a single * database is needed in the environment, this value may be NULL. * @param[in] flags Special options for this database. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_REVERSEKEY * Keys are strings to be compared in reverse order, from the end * of the strings to the beginning. By default, Keys are treated as strings and * compared from beginning to end. *
  • #MDB_DUPSORT * Duplicate keys may be used in the database. (Or, from another perspective, * keys may have multiple data items, stored in sorted order.) By default * keys must be unique and may have only a single data item. *
  • #MDB_INTEGERKEY * Keys are binary integers in native byte order, either unsigned int * or size_t, and will be sorted as such. * The keys must all be of the same size. *
  • #MDB_DUPFIXED * This flag may only be used in combination with #MDB_DUPSORT. This option * tells the library that the data items for this database are all the same * size, which allows further optimizations in storage and retrieval. When * all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE * and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple * items at once. *
  • #MDB_INTEGERDUP * This option specifies that duplicate data items are binary integers, * similar to #MDB_INTEGERKEY keys. *
  • #MDB_REVERSEDUP * This option specifies that duplicate data items should be compared as * strings in reverse order. *
  • #MDB_CREATE * Create the named database if it doesn't exist. This option is not * allowed in a read-only transaction or a read-only environment. *
* @param[out] dbi Address where the new #MDB_dbi handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - the specified database doesn't exist in the environment * and #MDB_CREATE was not specified. *
  • #MDB_DBS_FULL - too many databases have been opened. See #mdb_env_set_maxdbs(). *
*/ int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi); /** @brief Retrieve statistics for a database. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] stat The address of an #MDB_stat structure * where the statistics will be copied * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat); /** @brief Retrieve the DB flags for a database handle. * * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] flags Address where the flags will be returned. * @return A non-zero error value on failure and 0 on success. */ int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags); /** @brief Close a database handle. Normally unnecessary. Use with care: * * This call is not mutex protected. Handles should only be closed by * a single thread, and only if no other threads are going to reference * the database handle or one of its cursors any further. Do not close * a handle if an existing transaction has modified its database. * Doing so can cause misbehavior from database corruption to errors * like MDB_BAD_VALSIZE (since the DB name is gone). * * Closing a database handle is not necessary, but lets #mdb_dbi_open() * reuse the handle value. Usually it's better to set a bigger * #mdb_env_set_maxdbs(), unless that value would be large. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] dbi A database handle returned by #mdb_dbi_open() */ void mdb_dbi_close(MDB_env *env, MDB_dbi dbi); /** @brief Empty or delete+close a database. * * See #mdb_dbi_close() for restrictions about closing the DB handle. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] del 0 to empty the DB, 1 to delete it from the * environment and close the DB handle. * @return A non-zero error value on failure and 0 on success. */ int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del); /** @brief Set a custom key comparison function for a database. * * The comparison function is called whenever it is necessary to compare a * key specified by the application with a key currently stored in the database. * If no comparison function is specified, and no special key flags were specified * with #mdb_dbi_open(), the keys are compared lexically, with shorter keys collating * before longer keys. * @warning This function must be called before any data access functions are used, * otherwise data corruption may occur. The same comparison function must be used by every * program accessing the database, every time the database is used. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] cmp A #MDB_cmp_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); /** @brief Set a custom data comparison function for a #MDB_DUPSORT database. * * This comparison function is called whenever it is necessary to compare a data * item specified by the application with a data item currently stored in the database. * This function only takes effect if the database was opened with the #MDB_DUPSORT * flag. * If no comparison function is specified, and no special key flags were specified * with #mdb_dbi_open(), the data items are compared lexically, with shorter items collating * before longer items. * @warning This function must be called before any data access functions are used, * otherwise data corruption may occur. The same comparison function must be used by every * program accessing the database, every time the database is used. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] cmp A #MDB_cmp_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); /** @brief Set a relocation function for a #MDB_FIXEDMAP database. * * @todo The relocation function is called whenever it is necessary to move the data * of an item to a different position in the database (e.g. through tree * balancing operations, shifts as a result of adds or deletes, etc.). It is * intended to allow address/position-dependent data items to be stored in * a database in an environment opened with the #MDB_FIXEDMAP option. * Currently the relocation feature is unimplemented and setting * this function has no effect. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] rel A #MDB_rel_func function * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel); /** @brief Set a context pointer for a #MDB_FIXEDMAP database's relocation function. * * See #mdb_set_relfunc and #MDB_rel_func for more details. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] ctx An arbitrary pointer for whatever the application needs. * It will be passed to the callback function set by #mdb_set_relfunc * as its \b relctx parameter whenever the callback is invoked. * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx); /** @brief Get items from a database. * * This function retrieves key/data pairs from the database. The address * and length of the data associated with the specified \b key are returned * in the structure to which \b data refers. * If the database supports duplicate keys (#MDB_DUPSORT) then the * first data item for the key will be returned. Retrieval of other * items requires the use of #mdb_cursor_get(). * * @note The memory pointed to by the returned values is owned by the * database. The caller need not dispose of the memory, and may not * modify it in any way. For values returned in a read-only transaction * any modification attempts will cause a SIGSEGV. * @note Values returned from the database are valid only until a * subsequent update operation, or the end of the transaction. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to search for in the database * @param[out] data The data corresponding to the key * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - the key was not in the database. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); /** @brief Store items into a database. * * This function stores key/data pairs in the database. The default behavior * is to enter the new key/data pair, replacing any previously existing key * if duplicates are disallowed, or adding a duplicate data item if * duplicates are allowed (#MDB_DUPSORT). * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to store in the database * @param[in,out] data The data to store * @param[in] flags Special options for this operation. This parameter * must be set to 0 or by bitwise OR'ing together one or more of the * values described here. *
    *
  • #MDB_NODUPDATA - enter the new key/data pair only if it does not * already appear in the database. This flag may only be specified * if the database was opened with #MDB_DUPSORT. The function will * return #MDB_KEYEXIST if the key/data pair already appears in the * database. *
  • #MDB_NOOVERWRITE - enter the new key/data pair only if the key * does not already appear in the database. The function will return * #MDB_KEYEXIST if the key already appears in the database, even if * the database supports duplicates (#MDB_DUPSORT). The \b data * parameter will be set to point to the existing item. *
  • #MDB_RESERVE - reserve space for data of the given size, but * don't copy the given data. Instead, return a pointer to the * reserved space, which the caller can fill in later - before * the next update operation or the transaction ends. This saves * an extra memcpy if the data is being generated later. * LMDB does nothing else with this memory, the caller is expected * to modify all of the space requested. This flag must not be * specified if the database was opened with #MDB_DUPSORT. *
  • #MDB_APPEND - append the given key/data pair to the end of the * database. This option allows fast bulk loading when keys are * already known to be in the correct order. Loading unsorted keys * with this flag will cause a #MDB_KEYEXIST error. *
  • #MDB_APPENDDUP - as above, but for sorted dup data. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). *
  • #MDB_TXN_FULL - the transaction has too many dirty pages. *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned int flags); /** @brief Delete items from a database. * * This function removes key/data pairs from the database. * If the database does not support sorted duplicate data items * (#MDB_DUPSORT) the data parameter is ignored. * If the database supports sorted duplicates and the data parameter * is NULL, all of the duplicate data items for the key will be * deleted. Otherwise, if the data parameter is non-NULL * only the matching data item will be deleted. * This function will return #MDB_NOTFOUND if the specified key/data * pair is not in the database. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] key The key to delete from the database * @param[in] data The data to delete * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); /** @brief Create a cursor handle. * * A cursor is associated with a specific transaction and database. * A cursor cannot be used when its database handle is closed. Nor * when its transaction has ended, except with #mdb_cursor_renew(). * It can be discarded with #mdb_cursor_close(). * A cursor in a write-transaction can be closed before its transaction * ends, and will otherwise be closed when its transaction ends. * A cursor in a read-only transaction must be closed explicitly, before * or after its transaction ends. It can be reused with * #mdb_cursor_renew() before finally closing it. * @note Earlier documentation said that cursors in every transaction * were closed when the transaction committed or aborted. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] cursor Address where the new #MDB_cursor handle will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor); /** @brief Close a cursor handle. * * The cursor handle will be freed and must not be used again after this call. * Its transaction must still be live if it is a write-transaction. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ void mdb_cursor_close(MDB_cursor *cursor); /** @brief Renew a cursor handle. * * A cursor is associated with a specific transaction and database. * Cursors that are only used in read-only * transactions may be re-used, to avoid unnecessary malloc/free overhead. * The cursor may be associated with a new read-only transaction, and * referencing the same database handle as it was created with. * This may be done whether the previous transaction is live or dead. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor); /** @brief Return the cursor's transaction handle. * * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ MDB_txn *mdb_cursor_txn(MDB_cursor *cursor); /** @brief Return the cursor's database handle. * * @param[in] cursor A cursor handle returned by #mdb_cursor_open() */ MDB_dbi mdb_cursor_dbi(MDB_cursor *cursor); /** @brief Retrieve by cursor. * * This function retrieves key/data pairs from the database. The address and length * of the key are returned in the object to which \b key refers (except for the * case of the #MDB_SET option, in which the \b key object is unchanged), and * the address and length of the data are returned in the object to which \b data * refers. * See #mdb_get() for restrictions on using the output values. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in,out] key The key for a retrieved item * @param[in,out] data The data of a retrieved item * @param[in] op A cursor operation #MDB_cursor_op * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_NOTFOUND - no matching key found. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data, MDB_cursor_op op); /** @brief Store by cursor. * * This function stores key/data pairs into the database. * The cursor is positioned at the new item, or on failure usually near it. * @note Earlier documentation incorrectly said errors would leave the * state of the cursor unchanged. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in] key The key operated on. * @param[in] data The data operated on. * @param[in] flags Options for this operation. This parameter * must be set to 0 or one of the values described here. *
    *
  • #MDB_CURRENT - replace the item at the current cursor position. * The \b key parameter must still be provided, and must match it. * If using sorted duplicates (#MDB_DUPSORT) the data item must still * sort into the same place. This is intended to be used when the * new data is the same size as the old. Otherwise it will simply * perform a delete of the old record followed by an insert. *
  • #MDB_NODUPDATA - enter the new key/data pair only if it does not * already appear in the database. This flag may only be specified * if the database was opened with #MDB_DUPSORT. The function will * return #MDB_KEYEXIST if the key/data pair already appears in the * database. *
  • #MDB_NOOVERWRITE - enter the new key/data pair only if the key * does not already appear in the database. The function will return * #MDB_KEYEXIST if the key already appears in the database, even if * the database supports duplicates (#MDB_DUPSORT). *
  • #MDB_RESERVE - reserve space for data of the given size, but * don't copy the given data. Instead, return a pointer to the * reserved space, which the caller can fill in later - before * the next update operation or the transaction ends. This saves * an extra memcpy if the data is being generated later. This flag * must not be specified if the database was opened with #MDB_DUPSORT. *
  • #MDB_APPEND - append the given key/data pair to the end of the * database. No key comparisons are performed. This option allows * fast bulk loading when keys are already known to be in the * correct order. Loading unsorted keys with this flag will cause * a #MDB_KEYEXIST error. *
  • #MDB_APPENDDUP - as above, but for sorted dup data. *
  • #MDB_MULTIPLE - store multiple contiguous data elements in a * single request. This flag may only be specified if the database * was opened with #MDB_DUPFIXED. The \b data argument must be an * array of two MDB_vals. The mv_size of the first MDB_val must be * the size of a single data element. The mv_data of the first MDB_val * must point to the beginning of the array of contiguous data elements. * The mv_size of the second MDB_val must be the count of the number * of data elements to store. On return this field will be set to * the count of the number of elements actually written. The mv_data * of the second MDB_val is unused. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • #MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). *
  • #MDB_TXN_FULL - the transaction has too many dirty pages. *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data, unsigned int flags); /** @brief Delete current key/data pair * * This function deletes the key/data pair to which the cursor refers. * This does not invalidate the cursor, so operations such as MDB_NEXT * can still be used on it. * Both MDB_NEXT and MDB_GET_CURRENT will return the same record after * this operation. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[in] flags Options for this operation. This parameter * must be set to 0 or one of the values described here. *
    *
  • #MDB_NODUPDATA - delete all of the data items for the current key. * This flag may only be specified if the database was opened with #MDB_DUPSORT. *
* @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EACCES - an attempt was made to write in a read-only transaction. *
  • EINVAL - an invalid parameter was specified. *
*/ int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags); /** @brief Return count of duplicates for current key. * * This call is only valid on databases that support sorted duplicate * data items #MDB_DUPSORT. * @param[in] cursor A cursor handle returned by #mdb_cursor_open() * @param[out] countp Address where the count will be stored * @return A non-zero error value on failure and 0 on success. Some possible * errors are: *
    *
  • EINVAL - cursor is not initialized, or an invalid parameter was specified. *
*/ int mdb_cursor_count(MDB_cursor *cursor, size_t *countp); /** @brief Compare two data items according to a particular database. * * This returns a comparison as if the two data items were keys in the * specified database. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] a The first item to compare * @param[in] b The second item to compare * @return < 0 if a < b, 0 if a == b, > 0 if a > b */ int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); /** @brief Compare two data items according to a particular database. * * This returns a comparison as if the two items were data items of * the specified database. The database must have the #MDB_DUPSORT flag. * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[in] a The first item to compare * @param[in] b The second item to compare * @return < 0 if a < b, 0 if a == b, > 0 if a > b */ int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); /** @brief A callback function used to print a message from the library. * * @param[in] msg The string to be printed. * @param[in] ctx An arbitrary context pointer for the callback. * @return < 0 on failure, >= 0 on success. */ typedef int (MDB_msg_func)(const char *msg, void *ctx); /** @brief Dump the entries in the reader lock table. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[in] func A #MDB_msg_func function * @param[in] ctx Anything the message function needs * @return < 0 on failure, >= 0 on success. */ int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx); /** @brief Check for stale entries in the reader lock table. * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] dead Number of stale slots that were cleared * @return 0 on success, non-zero on failure. */ int mdb_reader_check(MDB_env *env, int *dead); /** @} */ #ifdef __cplusplus } #endif /** @page tools LMDB Command Line Tools The following describes the command line tools that are available for LMDB. \li \ref mdb_copy_1 \li \ref mdb_dump_1 \li \ref mdb_load_1 \li \ref mdb_stat_1 */ #endif /* _LMDB_H_ */ py-lmdb-py-lmdb_1.4.1/lib/mdb.c000066400000000000000000010713611441346354400162020ustar00rootroot00000000000000/** @file mdb.c * @brief Lightning memory-mapped database library * * A Btree-based database management library modeled loosely on the * BerkeleyDB API, but much simplified. */ /* * Copyright 2011-2021 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * This code is derived from btree.c written by Martin Hedenfalk. * * Copyright (c) 2009, 2010 Martin Hedenfalk * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #if defined(__WIN64__) #define _FILE_OFFSET_BITS 64 #endif #ifdef _WIN32 #include #include #include /* get wcscpy() */ /** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it * as int64 which is wrong. MSVC doesn't define it at all, so just * don't use it. */ #define MDB_PID_T int #define MDB_THR_T DWORD #include #include #ifdef __GNUC__ # include #else # define LITTLE_ENDIAN 1234 # define BIG_ENDIAN 4321 # define BYTE_ORDER LITTLE_ENDIAN # ifndef SSIZE_MAX # define SSIZE_MAX INT_MAX # endif #endif #else #include #include #define MDB_PID_T pid_t #define MDB_THR_T pthread_t #include #include #include #ifdef HAVE_SYS_FILE_H #include #endif #include #endif #if defined(__mips) && defined(__linux) /* MIPS has cache coherency issues, requires explicit cache control */ #include extern int cacheflush(char *addr, int nbytes, int cache); #define CACHEFLUSH(addr, bytes, cache) cacheflush(addr, bytes, cache) #else #define CACHEFLUSH(addr, bytes, cache) #endif #if defined(__linux) && !defined(MDB_FDATASYNC_WORKS) /** fdatasync is broken on ext3/ext4fs on older kernels, see * description in #mdb_env_open2 comments. You can safely * define MDB_FDATASYNC_WORKS if this code will only be run * on kernels 3.6 and newer. */ #define BROKEN_FDATASYNC #endif #include #include #include #include #include #include #include #include #ifdef _MSC_VER #include typedef SSIZE_T ssize_t; #else #include #endif #if defined(__sun) || defined(ANDROID) /* Most platforms have posix_memalign, older may only have memalign */ #define HAVE_MEMALIGN 1 #include /* On Solaris, we need the POSIX sigwait function */ #if defined (__sun) # define _POSIX_PTHREAD_SEMANTICS 1 #endif #endif #if !(defined(BYTE_ORDER) || defined(__BYTE_ORDER)) #include #include /* defines BYTE_ORDER on HPUX and Solaris */ #endif #if defined(__FreeBSD__) && defined(__FreeBSD_version) && __FreeBSD_version >= 1100110 # define MDB_USE_POSIX_MUTEX 1 # define MDB_USE_ROBUST 1 #elif defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) # define MDB_USE_POSIX_SEM 1 # define MDB_FDATASYNC fsync #elif defined(ANDROID) # define MDB_FDATASYNC fsync #endif #ifndef _WIN32 #include #include #ifdef MDB_USE_POSIX_SEM # define MDB_USE_HASH 1 #include #else #define MDB_USE_POSIX_MUTEX 1 #endif #endif #if defined(_WIN32) + defined(MDB_USE_POSIX_SEM) \ + defined(MDB_USE_POSIX_MUTEX) != 1 # error "Ambiguous shared-lock implementation" #endif #ifdef USE_VALGRIND #include #define VGMEMP_CREATE(h,r,z) VALGRIND_CREATE_MEMPOOL(h,r,z) #define VGMEMP_ALLOC(h,a,s) VALGRIND_MEMPOOL_ALLOC(h,a,s) #define VGMEMP_FREE(h,a) VALGRIND_MEMPOOL_FREE(h,a) #define VGMEMP_DESTROY(h) VALGRIND_DESTROY_MEMPOOL(h) #define VGMEMP_DEFINED(a,s) VALGRIND_MAKE_MEM_DEFINED(a,s) #else #define VGMEMP_CREATE(h,r,z) #define VGMEMP_ALLOC(h,a,s) #define VGMEMP_FREE(h,a) #define VGMEMP_DESTROY(h) #define VGMEMP_DEFINED(a,s) #endif #ifndef BYTE_ORDER # if (defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN)) && !(defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)) /* Solaris just defines one or the other */ # define LITTLE_ENDIAN 1234 # define BIG_ENDIAN 4321 # ifdef _LITTLE_ENDIAN # define BYTE_ORDER LITTLE_ENDIAN # else # define BYTE_ORDER BIG_ENDIAN # endif # else # define BYTE_ORDER __BYTE_ORDER # endif #endif #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN __LITTLE_ENDIAN #endif #ifndef BIG_ENDIAN #define BIG_ENDIAN __BIG_ENDIAN #endif #if defined(__i386) || defined(__x86_64) || defined(_M_IX86) #define MISALIGNED_OK 1 #endif #include "lmdb.h" #include "midl.h" #if (BYTE_ORDER == LITTLE_ENDIAN) == (BYTE_ORDER == BIG_ENDIAN) # error "Unknown or unsupported endianness (BYTE_ORDER)" #elif (-6 & 5) || CHAR_BIT != 8 || UINT_MAX < 0xffffffff || ULONG_MAX % 0xFFFF # error "Two's complement, reasonably sized integer types, please" #endif #ifdef __GNUC__ /** Put infrequently used env functions in separate section */ # ifdef __APPLE__ # define ESECT __attribute__ ((section("__TEXT,text_env"))) # else # define ESECT __attribute__ ((section("text_env"))) # endif #else #define ESECT #endif #ifdef _WIN32 #define CALL_CONV WINAPI #else #define CALL_CONV #endif /** @defgroup internal LMDB Internals * @{ */ /** @defgroup compat Compatibility Macros * A bunch of macros to minimize the amount of platform-specific ifdefs * needed throughout the rest of the code. When the features this library * needs are similar enough to POSIX to be hidden in a one-or-two line * replacement, this macro approach is used. * @{ */ /** Features under development */ #ifndef MDB_DEVEL #define MDB_DEVEL 0 #endif /** Wrapper around __func__, which is a C99 feature */ #if __STDC_VERSION__ >= 199901L # define mdb_func_ __func__ #elif __GNUC__ >= 2 || _MSC_VER >= 1300 # define mdb_func_ __FUNCTION__ #else /* If a debug message says (), update the #if statements above */ # define mdb_func_ "" #endif /* Internal error codes, not exposed outside liblmdb */ #define MDB_NO_ROOT (MDB_LAST_ERRCODE + 10) #ifdef _WIN32 #define MDB_OWNERDEAD ((int) WAIT_ABANDONED) #elif defined(MDB_USE_POSIX_MUTEX) && defined(EOWNERDEAD) #define MDB_OWNERDEAD EOWNERDEAD /**< #LOCK_MUTEX0() result if dead owner */ #endif #ifdef __GLIBC__ #define GLIBC_VER ((__GLIBC__ << 16 )| __GLIBC_MINOR__) #endif /** Some platforms define the EOWNERDEAD error code * even though they don't support Robust Mutexes. * Compile with -DMDB_USE_ROBUST=0, or use some other * mechanism like -DMDB_USE_POSIX_SEM instead of * -DMDB_USE_POSIX_MUTEX. * (Posix semaphores are not robust.) */ #ifndef MDB_USE_ROBUST /* Android currently lacks Robust Mutex support. So does glibc < 2.4. */ # if defined(MDB_USE_POSIX_MUTEX) && (defined(ANDROID) || \ (defined(__GLIBC__) && GLIBC_VER < 0x020004)) # define MDB_USE_ROBUST 0 # else # define MDB_USE_ROBUST 1 # endif #endif /* !MDB_USE_ROBUST */ #if defined(MDB_USE_POSIX_MUTEX) && (MDB_USE_ROBUST) /* glibc < 2.12 only provided _np API */ # if (defined(__GLIBC__) && GLIBC_VER < 0x02000c) || \ (defined(PTHREAD_MUTEX_ROBUST_NP) && !defined(PTHREAD_MUTEX_ROBUST)) # define PTHREAD_MUTEX_ROBUST PTHREAD_MUTEX_ROBUST_NP # define pthread_mutexattr_setrobust(attr, flag) pthread_mutexattr_setrobust_np(attr, flag) # define pthread_mutex_consistent(mutex) pthread_mutex_consistent_np(mutex) # endif #endif /* MDB_USE_POSIX_MUTEX && MDB_USE_ROBUST */ #if defined(MDB_OWNERDEAD) && (MDB_USE_ROBUST) #define MDB_ROBUST_SUPPORTED 1 #endif #ifdef _WIN32 #define MDB_USE_HASH 1 #define MDB_PIDLOCK 0 #define THREAD_RET DWORD #define pthread_t HANDLE #define pthread_mutex_t HANDLE #define pthread_cond_t HANDLE typedef HANDLE mdb_mutex_t, mdb_mutexref_t; #define pthread_key_t DWORD #define pthread_self() GetCurrentThreadId() #define pthread_key_create(x,y) \ ((*(x) = TlsAlloc()) == TLS_OUT_OF_INDEXES ? ErrCode() : 0) #define pthread_key_delete(x) TlsFree(x) #define pthread_getspecific(x) TlsGetValue(x) #define pthread_setspecific(x,y) (TlsSetValue(x,y) ? 0 : ErrCode()) #define pthread_mutex_unlock(x) ReleaseMutex(*x) #define pthread_mutex_lock(x) WaitForSingleObject(*x, INFINITE) #define pthread_cond_signal(x) SetEvent(*x) #define pthread_cond_wait(cond,mutex) do{SignalObjectAndWait(*mutex, *cond, INFINITE, FALSE); WaitForSingleObject(*mutex, INFINITE);}while(0) #define THREAD_CREATE(thr,start,arg) \ (((thr) = CreateThread(NULL, 0, start, arg, 0, NULL)) ? 0 : ErrCode()) #define THREAD_FINISH(thr) \ (WaitForSingleObject(thr, INFINITE) ? ErrCode() : 0) #define LOCK_MUTEX0(mutex) WaitForSingleObject(mutex, INFINITE) #define UNLOCK_MUTEX(mutex) ReleaseMutex(mutex) #define mdb_mutex_consistent(mutex) 0 #define getpid() GetCurrentProcessId() #define MDB_FDATASYNC(fd) (!FlushFileBuffers(fd)) #define MDB_MSYNC(addr,len,flags) (!FlushViewOfFile(addr,len)) #define ErrCode() GetLastError() #define GET_PAGESIZE(x) {SYSTEM_INFO si; GetSystemInfo(&si); (x) = si.dwPageSize;} #define close(fd) (CloseHandle(fd) ? 0 : -1) #define munmap(ptr,len) UnmapViewOfFile(ptr) #ifdef PROCESS_QUERY_LIMITED_INFORMATION #define MDB_PROCESS_QUERY_LIMITED_INFORMATION PROCESS_QUERY_LIMITED_INFORMATION #else #define MDB_PROCESS_QUERY_LIMITED_INFORMATION 0x1000 #endif #define Z "I" #else #define THREAD_RET void * #define THREAD_CREATE(thr,start,arg) pthread_create(&thr,NULL,start,arg) #define THREAD_FINISH(thr) pthread_join(thr,NULL) #define Z "z" /**< printf format modifier for size_t */ /** For MDB_LOCK_FORMAT: True if readers take a pid lock in the lockfile */ #define MDB_PIDLOCK 1 #ifdef MDB_USE_POSIX_SEM typedef sem_t *mdb_mutex_t, *mdb_mutexref_t; #define LOCK_MUTEX0(mutex) mdb_sem_wait(mutex) #define UNLOCK_MUTEX(mutex) sem_post(mutex) static int mdb_sem_wait(sem_t *sem) { int rc; while ((rc = sem_wait(sem)) && (rc = errno) == EINTR) ; return rc; } #else /* MDB_USE_POSIX_MUTEX: */ /** Shared mutex/semaphore as the original is stored. * * Not for copies. Instead it can be assigned to an #mdb_mutexref_t. * When mdb_mutexref_t is a pointer and mdb_mutex_t is not, then it * is array[size 1] so it can be assigned to the pointer. */ typedef pthread_mutex_t mdb_mutex_t[1]; /** Reference to an #mdb_mutex_t */ typedef pthread_mutex_t *mdb_mutexref_t; /** Lock the reader or writer mutex. * Returns 0 or a code to give #mdb_mutex_failed(), as in #LOCK_MUTEX(). */ #define LOCK_MUTEX0(mutex) pthread_mutex_lock(mutex) /** Unlock the reader or writer mutex. */ #define UNLOCK_MUTEX(mutex) pthread_mutex_unlock(mutex) /** Mark mutex-protected data as repaired, after death of previous owner. */ #define mdb_mutex_consistent(mutex) pthread_mutex_consistent(mutex) #endif /* MDB_USE_POSIX_SEM */ /** Get the error code for the last failed system function. */ #define ErrCode() errno /** An abstraction for a file handle. * On POSIX systems file handles are small integers. On Windows * they're opaque pointers. */ #define HANDLE int /** A value for an invalid file handle. * Mainly used to initialize file variables and signify that they are * unused. */ #define INVALID_HANDLE_VALUE (-1) /** Get the size of a memory page for the system. * This is the basic size that the platform's memory manager uses, and is * fundamental to the use of memory-mapped files. */ #define GET_PAGESIZE(x) ((x) = sysconf(_SC_PAGE_SIZE)) #endif #if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) #define MNAME_LEN 32 #else #define MNAME_LEN (sizeof(pthread_mutex_t)) #endif /** @} */ #ifdef MDB_ROBUST_SUPPORTED /** Lock mutex, handle any error, set rc = result. * Return 0 on success, nonzero (not rc) on error. */ #define LOCK_MUTEX(rc, env, mutex) \ (((rc) = LOCK_MUTEX0(mutex)) && \ ((rc) = mdb_mutex_failed(env, mutex, rc))) static int mdb_mutex_failed(MDB_env *env, mdb_mutexref_t mutex, int rc); #else #define LOCK_MUTEX(rc, env, mutex) ((rc) = LOCK_MUTEX0(mutex)) #define mdb_mutex_failed(env, mutex, rc) (rc) #endif #ifndef _WIN32 /** A flag for opening a file and requesting synchronous data writes. * This is only used when writing a meta page. It's not strictly needed; * we could just do a normal write and then immediately perform a flush. * But if this flag is available it saves us an extra system call. * * @note If O_DSYNC is undefined but exists in /usr/include, * preferably set some compiler flag to get the definition. */ #ifndef MDB_DSYNC # ifdef O_DSYNC # define MDB_DSYNC O_DSYNC # else # define MDB_DSYNC O_SYNC # endif #endif #endif /** Function for flushing the data of a file. Define this to fsync * if fdatasync() is not supported. */ #ifndef MDB_FDATASYNC # define MDB_FDATASYNC fdatasync #endif #ifndef MDB_MSYNC # define MDB_MSYNC(addr,len,flags) msync(addr,len,flags) #endif #ifndef MS_SYNC #define MS_SYNC 1 #endif #ifndef MS_ASYNC #define MS_ASYNC 0 #endif /** A page number in the database. * Note that 64 bit page numbers are overkill, since pages themselves * already represent 12-13 bits of addressable memory, and the OS will * always limit applications to a maximum of 63 bits of address space. * * @note In the #MDB_node structure, we only store 48 bits of this value, * which thus limits us to only 60 bits of addressable data. */ typedef MDB_ID pgno_t; /** A transaction ID. * See struct MDB_txn.mt_txnid for details. */ typedef MDB_ID txnid_t; /** @defgroup debug Debug Macros * @{ */ #ifndef MDB_DEBUG /** Enable debug output. Needs variable argument macros (a C99 feature). * Set this to 1 for copious tracing. Set to 2 to add dumps of all IDLs * read from and written to the database (used for free space management). */ #define MDB_DEBUG 0 #endif #if MDB_DEBUG static int mdb_debug; static txnid_t mdb_debug_start; /** Print a debug message with printf formatting. * Requires double parenthesis around 2 or more args. */ # define DPRINTF(args) ((void) ((mdb_debug) && DPRINTF0 args)) # define DPRINTF0(fmt, ...) \ fprintf(stderr, "%s:%d " fmt "\n", mdb_func_, __LINE__, __VA_ARGS__) #else # define DPRINTF(args) ((void) 0) #endif /** Print a debug string. * The string is printed literally, with no format processing. */ #define DPUTS(arg) DPRINTF(("%s", arg)) /** Debugging output value of a cursor DBI: Negative in a sub-cursor. */ #define DDBI(mc) \ (((mc)->mc_flags & C_SUB) ? -(int)(mc)->mc_dbi : (int)(mc)->mc_dbi) /** @} */ /** @brief The maximum size of a database page. * * It is 32k or 64k, since value-PAGEBASE must fit in * #MDB_page.%mp_upper. * * LMDB will use database pages < OS pages if needed. * That causes more I/O in write transactions: The OS must * know (read) the whole page before writing a partial page. * * Note that we don't currently support Huge pages. On Linux, * regular data files cannot use Huge pages, and in general * Huge pages aren't actually pageable. We rely on the OS * demand-pager to read our data and page it out when memory * pressure from other processes is high. So until OSs have * actual paging support for Huge pages, they're not viable. */ #define MAX_PAGESIZE (PAGEBASE ? 0x10000 : 0x8000) /** The minimum number of keys required in a database page. * Setting this to a larger value will place a smaller bound on the * maximum size of a data item. Data items larger than this size will * be pushed into overflow pages instead of being stored directly in * the B-tree node. This value used to default to 4. With a page size * of 4096 bytes that meant that any item larger than 1024 bytes would * go into an overflow page. That also meant that on average 2-3KB of * each overflow page was wasted space. The value cannot be lower than * 2 because then there would no longer be a tree structure. With this * value, items larger than 2KB will go into overflow pages, and on * average only 1KB will be wasted. */ #define MDB_MINKEYS 2 /** A stamp that identifies a file as an LMDB file. * There's nothing special about this value other than that it is easily * recognizable, and it will reflect any byte order mismatches. */ #define MDB_MAGIC 0xBEEFC0DE /** The version number for a database's datafile format. */ #define MDB_DATA_VERSION ((MDB_DEVEL) ? 999 : 1) /** The version number for a database's lockfile format. */ #define MDB_LOCK_VERSION 1 /** @brief The max size of a key we can write, or 0 for computed max. * * This macro should normally be left alone or set to 0. * Note that a database with big keys or dupsort data cannot be * reliably modified by a liblmdb which uses a smaller max. * The default is 511 for backwards compat, or 0 when #MDB_DEVEL. * * Other values are allowed, for backwards compat. However: * A value bigger than the computed max can break if you do not * know what you are doing, and liblmdb <= 0.9.10 can break when * modifying a DB with keys/dupsort data bigger than its max. * * Data items in an #MDB_DUPSORT database are also limited to * this size, since they're actually keys of a sub-DB. Keys and * #MDB_DUPSORT data items must fit on a node in a regular page. */ #ifndef MDB_MAXKEYSIZE #define MDB_MAXKEYSIZE ((MDB_DEVEL) ? 0 : 511) #endif /** The maximum size of a key we can write to the environment. */ #if MDB_MAXKEYSIZE #define ENV_MAXKEY(env) (MDB_MAXKEYSIZE) #else #define ENV_MAXKEY(env) ((env)->me_maxkey) #endif /** @brief The maximum size of a data item. * * We only store a 32 bit value for node sizes. */ #define MAXDATASIZE 0xffffffffUL #if MDB_DEBUG /** Key size which fits in a #DKBUF. * @ingroup debug */ #define DKBUF_MAXKEYSIZE ((MDB_MAXKEYSIZE) > 0 ? (MDB_MAXKEYSIZE) : 511) /** A key buffer. * @ingroup debug * This is used for printing a hex dump of a key's contents. */ #define DKBUF char kbuf[DKBUF_MAXKEYSIZE*2+1] /** Display a key in hex. * @ingroup debug * Invoke a function to display a key in hex. */ #define DKEY(x) mdb_dkey(x, kbuf) #else #define DKBUF #define DKEY(x) 0 #endif /** An invalid page number. * Mainly used to denote an empty tree. */ #define P_INVALID (~(pgno_t)0) /** Test if the flags \b f are set in a flag word \b w. */ #define F_ISSET(w, f) (((w) & (f)) == (f)) /** Round \b n up to an even number. */ #define EVEN(n) (((n) + 1U) & -2) /* sign-extending -2 to match n+1U */ /** Used for offsets within a single page. * Since memory pages are typically 4 or 8KB in size, 12-13 bits, * this is plenty. */ typedef uint16_t indx_t; /** Default size of memory map. * This is certainly too small for any actual applications. Apps should always set * the size explicitly using #mdb_env_set_mapsize(). */ #define DEFAULT_MAPSIZE 1048576 /** @defgroup readers Reader Lock Table * Readers don't acquire any locks for their data access. Instead, they * simply record their transaction ID in the reader table. The reader * mutex is needed just to find an empty slot in the reader table. The * slot's address is saved in thread-specific data so that subsequent read * transactions started by the same thread need no further locking to proceed. * * If #MDB_NOTLS is set, the slot address is not saved in thread-specific data. * * No reader table is used if the database is on a read-only filesystem, or * if #MDB_NOLOCK is set. * * Since the database uses multi-version concurrency control, readers don't * actually need any locking. This table is used to keep track of which * readers are using data from which old transactions, so that we'll know * when a particular old transaction is no longer in use. Old transactions * that have discarded any data pages can then have those pages reclaimed * for use by a later write transaction. * * The lock table is constructed such that reader slots are aligned with the * processor's cache line size. Any slot is only ever used by one thread. * This alignment guarantees that there will be no contention or cache * thrashing as threads update their own slot info, and also eliminates * any need for locking when accessing a slot. * * A writer thread will scan every slot in the table to determine the oldest * outstanding reader transaction. Any freed pages older than this will be * reclaimed by the writer. The writer doesn't use any locks when scanning * this table. This means that there's no guarantee that the writer will * see the most up-to-date reader info, but that's not required for correct * operation - all we need is to know the upper bound on the oldest reader, * we don't care at all about the newest reader. So the only consequence of * reading stale information here is that old pages might hang around a * while longer before being reclaimed. That's actually good anyway, because * the longer we delay reclaiming old pages, the more likely it is that a * string of contiguous pages can be found after coalescing old pages from * many old transactions together. * @{ */ /** Number of slots in the reader table. * This value was chosen somewhat arbitrarily. 126 readers plus a * couple mutexes fit exactly into 8KB on my development machine. * Applications should set the table size using #mdb_env_set_maxreaders(). */ #define DEFAULT_READERS 126 /** The size of a CPU cache line in bytes. We want our lock structures * aligned to this size to avoid false cache line sharing in the * lock table. * This value works for most CPUs. For Itanium this should be 128. */ #ifndef CACHELINE #define CACHELINE 64 #endif /** The information we store in a single slot of the reader table. * In addition to a transaction ID, we also record the process and * thread ID that owns a slot, so that we can detect stale information, * e.g. threads or processes that went away without cleaning up. * @note We currently don't check for stale records. We simply re-init * the table when we know that we're the only process opening the * lock file. */ typedef struct MDB_rxbody { /** Current Transaction ID when this transaction began, or (txnid_t)-1. * Multiple readers that start at the same time will probably have the * same ID here. Again, it's not important to exclude them from * anything; all we need to know is which version of the DB they * started from so we can avoid overwriting any data used in that * particular version. */ volatile txnid_t mrb_txnid; /** The process ID of the process owning this reader txn. */ volatile MDB_PID_T mrb_pid; /** The thread ID of the thread owning this txn. */ volatile MDB_THR_T mrb_tid; } MDB_rxbody; /** The actual reader record, with cacheline padding. */ typedef struct MDB_reader { union { MDB_rxbody mrx; /** shorthand for mrb_txnid */ #define mr_txnid mru.mrx.mrb_txnid #define mr_pid mru.mrx.mrb_pid #define mr_tid mru.mrx.mrb_tid /** cache line alignment */ char pad[(sizeof(MDB_rxbody)+CACHELINE-1) & ~(CACHELINE-1)]; } mru; } MDB_reader; /** The header for the reader table. * The table resides in a memory-mapped file. (This is a different file * than is used for the main database.) * * For POSIX the actual mutexes reside in the shared memory of this * mapped file. On Windows, mutexes are named objects allocated by the * kernel; we store the mutex names in this mapped file so that other * processes can grab them. This same approach is also used on * MacOSX/Darwin (using named semaphores) since MacOSX doesn't support * process-shared POSIX mutexes. For these cases where a named object * is used, the object name is derived from a 64 bit FNV hash of the * environment pathname. As such, naming collisions are extremely * unlikely. If a collision occurs, the results are unpredictable. */ typedef struct MDB_txbody { /** Stamp identifying this as an LMDB file. It must be set * to #MDB_MAGIC. */ uint32_t mtb_magic; /** Format of this lock file. Must be set to #MDB_LOCK_FORMAT. */ uint32_t mtb_format; #if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) char mtb_rmname[MNAME_LEN]; #else /** Mutex protecting access to this table. * This is the reader table lock used with LOCK_MUTEX(). */ mdb_mutex_t mtb_rmutex; #endif /** The ID of the last transaction committed to the database. * This is recorded here only for convenience; the value can always * be determined by reading the main database meta pages. */ volatile txnid_t mtb_txnid; /** The number of slots that have been used in the reader table. * This always records the maximum count, it is not decremented * when readers release their slots. */ volatile unsigned mtb_numreaders; } MDB_txbody; /** The actual reader table definition. */ typedef struct MDB_txninfo { union { MDB_txbody mtb; #define mti_magic mt1.mtb.mtb_magic #define mti_format mt1.mtb.mtb_format #define mti_rmutex mt1.mtb.mtb_rmutex #define mti_rmname mt1.mtb.mtb_rmname #define mti_txnid mt1.mtb.mtb_txnid #define mti_numreaders mt1.mtb.mtb_numreaders char pad[(sizeof(MDB_txbody)+CACHELINE-1) & ~(CACHELINE-1)]; } mt1; union { #if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) char mt2_wmname[MNAME_LEN]; #define mti_wmname mt2.mt2_wmname #else mdb_mutex_t mt2_wmutex; #define mti_wmutex mt2.mt2_wmutex #endif char pad[(MNAME_LEN+CACHELINE-1) & ~(CACHELINE-1)]; } mt2; MDB_reader mti_readers[1]; } MDB_txninfo; /** Lockfile format signature: version, features and field layout */ #define MDB_LOCK_FORMAT \ ((uint32_t) \ ((MDB_LOCK_VERSION) \ /* Flags which describe functionality */ \ + (((MDB_PIDLOCK) != 0) << 16))) /** @} */ /** Common header for all page types. The page type depends on #mp_flags. * * #P_BRANCH and #P_LEAF pages have unsorted '#MDB_node's at the end, with * sorted #mp_ptrs[] entries referring to them. Exception: #P_LEAF2 pages * omit mp_ptrs and pack sorted #MDB_DUPFIXED values after the page header. * * #P_OVERFLOW records occupy one or more contiguous pages where only the * first has a page header. They hold the real data of #F_BIGDATA nodes. * * #P_SUBP sub-pages are small leaf "pages" with duplicate data. * A node with flag #F_DUPDATA but not #F_SUBDATA contains a sub-page. * (Duplicate data can also go in sub-databases, which use normal pages.) * * #P_META pages contain #MDB_meta, the start point of an LMDB snapshot. * * Each non-metapage up to #MDB_meta.%mm_last_pg is reachable exactly once * in the snapshot: Either used by a database or listed in a freeDB record. */ typedef struct MDB_page { #define mp_pgno mp_p.p_pgno #define mp_next mp_p.p_next union { pgno_t p_pgno; /**< page number */ struct MDB_page *p_next; /**< for in-memory list of freed pages */ } mp_p; uint16_t mp_pad; /**< key size if this is a LEAF2 page */ /** @defgroup mdb_page Page Flags * @ingroup internal * Flags for the page headers. * @{ */ #define P_BRANCH 0x01 /**< branch page */ #define P_LEAF 0x02 /**< leaf page */ #define P_OVERFLOW 0x04 /**< overflow page */ #define P_META 0x08 /**< meta page */ #define P_DIRTY 0x10 /**< dirty page, also set for #P_SUBP pages */ #define P_LEAF2 0x20 /**< for #MDB_DUPFIXED records */ #define P_SUBP 0x40 /**< for #MDB_DUPSORT sub-pages */ #define P_LOOSE 0x4000 /**< page was dirtied then freed, can be reused */ #define P_KEEP 0x8000 /**< leave this page alone during spill */ /** @} */ uint16_t mp_flags; /**< @ref mdb_page */ #define mp_lower mp_pb.pb.pb_lower #define mp_upper mp_pb.pb.pb_upper #define mp_pages mp_pb.pb_pages union { struct { indx_t pb_lower; /**< lower bound of free space */ indx_t pb_upper; /**< upper bound of free space */ } pb; uint32_t pb_pages; /**< number of overflow pages */ } mp_pb; indx_t mp_ptrs[1]; /**< dynamic size */ } MDB_page; /** Size of the page header, excluding dynamic data at the end */ #define PAGEHDRSZ ((unsigned) offsetof(MDB_page, mp_ptrs)) /** Address of first usable data byte in a page, after the header */ #define METADATA(p) ((void *)((char *)(p) + PAGEHDRSZ)) /** ITS#7713, change PAGEBASE to handle 65536 byte pages */ #define PAGEBASE ((MDB_DEVEL) ? PAGEHDRSZ : 0) /** Number of nodes on a page */ #define NUMKEYS(p) (((p)->mp_lower - (PAGEHDRSZ-PAGEBASE)) >> 1) /** The amount of space remaining in the page */ #define SIZELEFT(p) (indx_t)((p)->mp_upper - (p)->mp_lower) /** The percentage of space used in the page, in tenths of a percent. */ #define PAGEFILL(env, p) (1000L * ((env)->me_psize - PAGEHDRSZ - SIZELEFT(p)) / \ ((env)->me_psize - PAGEHDRSZ)) /** The minimum page fill factor, in tenths of a percent. * Pages emptier than this are candidates for merging. */ #define FILL_THRESHOLD 250 /** Test if a page is a leaf page */ #define IS_LEAF(p) F_ISSET((p)->mp_flags, P_LEAF) /** Test if a page is a LEAF2 page */ #define IS_LEAF2(p) F_ISSET((p)->mp_flags, P_LEAF2) /** Test if a page is a branch page */ #define IS_BRANCH(p) F_ISSET((p)->mp_flags, P_BRANCH) /** Test if a page is an overflow page */ #define IS_OVERFLOW(p) F_ISSET((p)->mp_flags, P_OVERFLOW) /** Test if a page is a sub page */ #define IS_SUBP(p) F_ISSET((p)->mp_flags, P_SUBP) /** The number of overflow pages needed to store the given size. */ #define OVPAGES(size, psize) ((PAGEHDRSZ-1 + (size)) / (psize) + 1) /** Link in #MDB_txn.%mt_loose_pgs list. * Kept outside the page header, which is needed when reusing the page. */ #define NEXT_LOOSE_PAGE(p) (*(MDB_page **)((p) + 2)) /** Header for a single key/data pair within a page. * Used in pages of type #P_BRANCH and #P_LEAF without #P_LEAF2. * We guarantee 2-byte alignment for 'MDB_node's. * * #mn_lo and #mn_hi are used for data size on leaf nodes, and for child * pgno on branch nodes. On 64 bit platforms, #mn_flags is also used * for pgno. (Branch nodes have no flags). Lo and hi are in host byte * order in case some accesses can be optimized to 32-bit word access. * * Leaf node flags describe node contents. #F_BIGDATA says the node's * data part is the page number of an overflow page with actual data. * #F_DUPDATA and #F_SUBDATA can be combined giving duplicate data in * a sub-page/sub-database, and named databases (just #F_SUBDATA). */ typedef struct MDB_node { /** part of data size or pgno * @{ */ #if BYTE_ORDER == LITTLE_ENDIAN unsigned short mn_lo, mn_hi; #else unsigned short mn_hi, mn_lo; #endif /** @} */ /** @defgroup mdb_node Node Flags * @ingroup internal * Flags for node headers. * @{ */ #define F_BIGDATA 0x01 /**< data put on overflow page */ #define F_SUBDATA 0x02 /**< data is a sub-database */ #define F_DUPDATA 0x04 /**< data has duplicates */ /** valid flags for #mdb_node_add() */ #define NODE_ADD_FLAGS (F_DUPDATA|F_SUBDATA|MDB_RESERVE|MDB_APPEND) /** @} */ unsigned short mn_flags; /**< @ref mdb_node */ unsigned short mn_ksize; /**< key size */ char mn_data[1]; /**< key and data are appended here */ } MDB_node; /** Size of the node header, excluding dynamic data at the end */ #define NODESIZE offsetof(MDB_node, mn_data) /** Bit position of top word in page number, for shifting mn_flags */ #define PGNO_TOPWORD ((pgno_t)-1 > 0xffffffffu ? 32 : 0) /** Size of a node in a branch page with a given key. * This is just the node header plus the key, there is no data. */ #define INDXSIZE(k) (NODESIZE + ((k) == NULL ? 0 : (k)->mv_size)) /** Size of a node in a leaf page with a given key and data. * This is node header plus key plus data size. */ #define LEAFSIZE(k, d) (NODESIZE + (k)->mv_size + (d)->mv_size) /** Address of node \b i in page \b p */ #define NODEPTR(p, i) ((MDB_node *)((char *)(p) + (p)->mp_ptrs[i] + PAGEBASE)) /** Address of the key for the node */ #define NODEKEY(node) (void *)((node)->mn_data) /** Address of the data for a node */ #define NODEDATA(node) (void *)((char *)(node)->mn_data + (node)->mn_ksize) /** Get the page number pointed to by a branch node */ #define NODEPGNO(node) \ ((node)->mn_lo | ((pgno_t) (node)->mn_hi << 16) | \ (PGNO_TOPWORD ? ((pgno_t) (node)->mn_flags << PGNO_TOPWORD) : 0)) /** Set the page number in a branch node */ #define SETPGNO(node,pgno) do { \ (node)->mn_lo = (pgno) & 0xffff; (node)->mn_hi = (pgno) >> 16; \ if (PGNO_TOPWORD) (node)->mn_flags = (pgno) >> PGNO_TOPWORD; } while(0) /** Get the size of the data in a leaf node */ #define NODEDSZ(node) ((node)->mn_lo | ((unsigned)(node)->mn_hi << 16)) /** Set the size of the data for a leaf node */ #define SETDSZ(node,size) do { \ (node)->mn_lo = (size) & 0xffff; (node)->mn_hi = (size) >> 16;} while(0) /** The size of a key in a node */ #define NODEKSZ(node) ((node)->mn_ksize) /** Copy a page number from src to dst */ #ifdef MISALIGNED_OK #define COPY_PGNO(dst,src) dst = src #else #if SIZE_MAX > 4294967295UL #define COPY_PGNO(dst,src) do { \ unsigned short *s, *d; \ s = (unsigned short *)&(src); \ d = (unsigned short *)&(dst); \ *d++ = *s++; \ *d++ = *s++; \ *d++ = *s++; \ *d = *s; \ } while (0) #else #define COPY_PGNO(dst,src) do { \ unsigned short *s, *d; \ s = (unsigned short *)&(src); \ d = (unsigned short *)&(dst); \ *d++ = *s++; \ *d = *s; \ } while (0) #endif #endif /** The address of a key in a LEAF2 page. * LEAF2 pages are used for #MDB_DUPFIXED sorted-duplicate sub-DBs. * There are no node headers, keys are stored contiguously. */ #define LEAF2KEY(p, i, ks) ((char *)(p) + PAGEHDRSZ + ((i)*(ks))) /** Set the \b node's key into \b keyptr, if requested. */ #define MDB_GET_KEY(node, keyptr) { if ((keyptr) != NULL) { \ (keyptr)->mv_size = NODEKSZ(node); (keyptr)->mv_data = NODEKEY(node); } } /** Set the \b node's key into \b key. */ #define MDB_GET_KEY2(node, key) { key.mv_size = NODEKSZ(node); key.mv_data = NODEKEY(node); } /** Information about a single database in the environment. */ typedef struct MDB_db { uint32_t md_pad; /**< also ksize for LEAF2 pages */ uint16_t md_flags; /**< @ref mdb_dbi_open */ uint16_t md_depth; /**< depth of this tree */ pgno_t md_branch_pages; /**< number of internal pages */ pgno_t md_leaf_pages; /**< number of leaf pages */ pgno_t md_overflow_pages; /**< number of overflow pages */ size_t md_entries; /**< number of data items */ pgno_t md_root; /**< the root page of this tree */ } MDB_db; #define MDB_VALID 0x8000 /**< DB handle is valid, for me_dbflags */ #define PERSISTENT_FLAGS (0xffff & ~(MDB_VALID)) /** #mdb_dbi_open() flags */ #define VALID_FLAGS (MDB_REVERSEKEY|MDB_DUPSORT|MDB_INTEGERKEY|MDB_DUPFIXED|\ MDB_INTEGERDUP|MDB_REVERSEDUP|MDB_CREATE) /** Handle for the DB used to track free pages. */ #define FREE_DBI 0 /** Handle for the default DB. */ #define MAIN_DBI 1 /** Number of DBs in metapage (free and main) - also hardcoded elsewhere */ #define CORE_DBS 2 /** Number of meta pages - also hardcoded elsewhere */ #define NUM_METAS 2 /** Meta page content. * A meta page is the start point for accessing a database snapshot. * Pages 0-1 are meta pages. Transaction N writes meta page #(N % 2). */ typedef struct MDB_meta { /** Stamp identifying this as an LMDB file. It must be set * to #MDB_MAGIC. */ uint32_t mm_magic; /** Version number of this file. Must be set to #MDB_DATA_VERSION. */ uint32_t mm_version; void *mm_address; /**< address for fixed mapping */ size_t mm_mapsize; /**< size of mmap region */ MDB_db mm_dbs[CORE_DBS]; /**< first is free space, 2nd is main db */ /** The size of pages used in this DB */ #define mm_psize mm_dbs[FREE_DBI].md_pad /** Any persistent environment flags. @ref mdb_env */ #define mm_flags mm_dbs[FREE_DBI].md_flags /** Last used page in the datafile. * Actually the file may be shorter if the freeDB lists the final pages. */ pgno_t mm_last_pg; volatile txnid_t mm_txnid; /**< txnid that committed this page */ } MDB_meta; /** Buffer for a stack-allocated meta page. * The members define size and alignment, and silence type * aliasing warnings. They are not used directly; that could * mean incorrectly using several union members in parallel. */ typedef union MDB_metabuf { MDB_page mb_page; struct { char mm_pad[PAGEHDRSZ]; MDB_meta mm_meta; } mb_metabuf; } MDB_metabuf; /** Auxiliary DB info. * The information here is mostly static/read-only. There is * only a single copy of this record in the environment. */ typedef struct MDB_dbx { MDB_val md_name; /**< name of the database */ MDB_cmp_func *md_cmp; /**< function for comparing keys */ MDB_cmp_func *md_dcmp; /**< function for comparing data items */ MDB_rel_func *md_rel; /**< user relocate function */ void *md_relctx; /**< user-provided context for md_rel */ } MDB_dbx; /** A database transaction. * Every operation requires a transaction handle. */ struct MDB_txn { MDB_txn *mt_parent; /**< parent of a nested txn */ /** Nested txn under this txn, set together with flag #MDB_TXN_HAS_CHILD */ MDB_txn *mt_child; pgno_t mt_next_pgno; /**< next unallocated page */ /** The ID of this transaction. IDs are integers incrementing from 1. * Only committed write transactions increment the ID. If a transaction * aborts, the ID may be re-used by the next writer. */ txnid_t mt_txnid; MDB_env *mt_env; /**< the DB environment */ /** The list of pages that became unused during this transaction. */ MDB_IDL mt_free_pgs; /** The list of loose pages that became unused and may be reused * in this transaction, linked through #NEXT_LOOSE_PAGE(page). */ MDB_page *mt_loose_pgs; /** Number of loose pages (#mt_loose_pgs) */ int mt_loose_count; /** The sorted list of dirty pages we temporarily wrote to disk * because the dirty list was full. page numbers in here are * shifted left by 1, deleted slots have the LSB set. */ MDB_IDL mt_spill_pgs; union { /** For write txns: Modified pages. Sorted when not MDB_WRITEMAP. */ MDB_ID2L dirty_list; /** For read txns: This thread/txn's reader table slot, or NULL. */ MDB_reader *reader; } mt_u; /** Array of records for each DB known in the environment. */ MDB_dbx *mt_dbxs; /** Array of MDB_db records for each known DB */ MDB_db *mt_dbs; /** Array of sequence numbers for each DB handle */ unsigned int *mt_dbiseqs; /** @defgroup mt_dbflag Transaction DB Flags * @ingroup internal * @{ */ #define DB_DIRTY 0x01 /**< DB was written in this txn */ #define DB_STALE 0x02 /**< Named-DB record is older than txnID */ #define DB_NEW 0x04 /**< Named-DB handle opened in this txn */ #define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */ #define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */ #define DB_DUPDATA 0x20 /**< DB is #MDB_DUPSORT data */ /** @} */ /** In write txns, array of cursors for each DB */ MDB_cursor **mt_cursors; /** Array of flags for each DB */ unsigned char *mt_dbflags; /** Number of DB records in use, or 0 when the txn is finished. * This number only ever increments until the txn finishes; we * don't decrement it when individual DB handles are closed. */ MDB_dbi mt_numdbs; /** @defgroup mdb_txn Transaction Flags * @ingroup internal * @{ */ /** #mdb_txn_begin() flags */ #define MDB_TXN_BEGIN_FLAGS MDB_RDONLY #define MDB_TXN_RDONLY MDB_RDONLY /**< read-only transaction */ /* internal txn flags */ #define MDB_TXN_WRITEMAP MDB_WRITEMAP /**< copy of #MDB_env flag in writers */ #define MDB_TXN_FINISHED 0x01 /**< txn is finished or never began */ #define MDB_TXN_ERROR 0x02 /**< txn is unusable after an error */ #define MDB_TXN_DIRTY 0x04 /**< must write, even if dirty list is empty */ #define MDB_TXN_SPILLS 0x08 /**< txn or a parent has spilled pages */ #define MDB_TXN_HAS_CHILD 0x10 /**< txn has an #MDB_txn.%mt_child */ /** most operations on the txn are currently illegal */ #define MDB_TXN_BLOCKED (MDB_TXN_FINISHED|MDB_TXN_ERROR|MDB_TXN_HAS_CHILD) /** @} */ unsigned int mt_flags; /**< @ref mdb_txn */ /** #dirty_list room: Array size - \#dirty pages visible to this txn. * Includes ancestor txns' dirty pages not hidden by other txns' * dirty/spilled pages. Thus commit(nested txn) has room to merge * dirty_list into mt_parent after freeing hidden mt_parent pages. */ unsigned int mt_dirty_room; }; /** Enough space for 2^32 nodes with minimum of 2 keys per node. I.e., plenty. * At 4 keys per node, enough for 2^64 nodes, so there's probably no need to * raise this on a 64 bit machine. */ #define CURSOR_STACK 32 struct MDB_xcursor; /** Cursors are used for all DB operations. * A cursor holds a path of (page pointer, key index) from the DB * root to a position in the DB, plus other state. #MDB_DUPSORT * cursors include an xcursor to the current data item. Write txns * track their cursors and keep them up to date when data moves. * Exception: An xcursor's pointer to a #P_SUBP page can be stale. * (A node with #F_DUPDATA but no #F_SUBDATA contains a subpage). */ struct MDB_cursor { /** Next cursor on this DB in this txn */ MDB_cursor *mc_next; /** Backup of the original cursor if this cursor is a shadow */ MDB_cursor *mc_backup; /** Context used for databases with #MDB_DUPSORT, otherwise NULL */ struct MDB_xcursor *mc_xcursor; /** The transaction that owns this cursor */ MDB_txn *mc_txn; /** The database handle this cursor operates on */ MDB_dbi mc_dbi; /** The database record for this cursor */ MDB_db *mc_db; /** The database auxiliary record for this cursor */ MDB_dbx *mc_dbx; /** The @ref mt_dbflag for this database */ unsigned char *mc_dbflag; unsigned short mc_snum; /**< number of pushed pages */ unsigned short mc_top; /**< index of top page, normally mc_snum-1 */ /** @defgroup mdb_cursor Cursor Flags * @ingroup internal * Cursor state flags. * @{ */ #define C_INITIALIZED 0x01 /**< cursor has been initialized and is valid */ #define C_EOF 0x02 /**< No more data */ #define C_SUB 0x04 /**< Cursor is a sub-cursor */ #define C_DEL 0x08 /**< last op was a cursor_del */ #define C_UNTRACK 0x40 /**< Un-track cursor when closing */ /** @} */ unsigned int mc_flags; /**< @ref mdb_cursor */ MDB_page *mc_pg[CURSOR_STACK]; /**< stack of pushed pages */ indx_t mc_ki[CURSOR_STACK]; /**< stack of page indices */ }; /** Context for sorted-dup records. * We could have gone to a fully recursive design, with arbitrarily * deep nesting of sub-databases. But for now we only handle these * levels - main DB, optional sub-DB, sorted-duplicate DB. */ typedef struct MDB_xcursor { /** A sub-cursor for traversing the Dup DB */ MDB_cursor mx_cursor; /** The database record for this Dup DB */ MDB_db mx_db; /** The auxiliary DB record for this Dup DB */ MDB_dbx mx_dbx; /** The @ref mt_dbflag for this Dup DB */ unsigned char mx_dbflag; } MDB_xcursor; /** Check if there is an inited xcursor */ #define XCURSOR_INITED(mc) \ ((mc)->mc_xcursor && ((mc)->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) /** Update the xcursor's sub-page pointer, if any, in \b mc. Needed * when the node which contains the sub-page may have moved. Called * with leaf page \b mp = mc->mc_pg[\b top]. */ #define XCURSOR_REFRESH(mc, top, mp) do { \ MDB_page *xr_pg = (mp); \ MDB_node *xr_node; \ if (!XCURSOR_INITED(mc) || (mc)->mc_ki[top] >= NUMKEYS(xr_pg)) break; \ xr_node = NODEPTR(xr_pg, (mc)->mc_ki[top]); \ if ((xr_node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) \ (mc)->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(xr_node); \ } while (0) /** State of FreeDB old pages, stored in the MDB_env */ typedef struct MDB_pgstate { pgno_t *mf_pghead; /**< Reclaimed freeDB pages, or NULL before use */ txnid_t mf_pglast; /**< ID of last used record, or 0 if !mf_pghead */ } MDB_pgstate; /** The database environment. */ struct MDB_env { HANDLE me_fd; /**< The main data file */ HANDLE me_lfd; /**< The lock file */ HANDLE me_mfd; /**< For writing and syncing the meta pages */ /** Failed to update the meta page. Probably an I/O error. */ #define MDB_FATAL_ERROR 0x80000000U /** Some fields are initialized. */ #define MDB_ENV_ACTIVE 0x20000000U /** me_txkey is set */ #define MDB_ENV_TXKEY 0x10000000U /** fdatasync is unreliable */ #define MDB_FSYNCONLY 0x08000000U uint32_t me_flags; /**< @ref mdb_env */ unsigned int me_psize; /**< DB page size, inited from me_os_psize */ unsigned int me_os_psize; /**< OS page size, from #GET_PAGESIZE */ unsigned int me_maxreaders; /**< size of the reader table */ /** Max #MDB_txninfo.%mti_numreaders of interest to #mdb_env_close() */ volatile int me_close_readers; MDB_dbi me_numdbs; /**< number of DBs opened */ MDB_dbi me_maxdbs; /**< size of the DB table */ MDB_PID_T me_pid; /**< process ID of this env */ char *me_path; /**< path to the DB files */ char *me_map; /**< the memory map of the data file */ MDB_txninfo *me_txns; /**< the memory map of the lock file or NULL */ MDB_meta *me_metas[NUM_METAS]; /**< pointers to the two meta pages */ void *me_pbuf; /**< scratch area for DUPSORT put() */ MDB_txn *me_txn; /**< current write transaction */ MDB_txn *me_txn0; /**< prealloc'd write transaction */ size_t me_mapsize; /**< size of the data memory map */ off_t me_size; /**< current file size */ pgno_t me_maxpg; /**< me_mapsize / me_psize */ MDB_dbx *me_dbxs; /**< array of static DB info */ uint16_t *me_dbflags; /**< array of flags from MDB_db.md_flags */ unsigned int *me_dbiseqs; /**< array of dbi sequence numbers */ pthread_key_t me_txkey; /**< thread-key for readers */ txnid_t me_pgoldest; /**< ID of oldest reader last time we looked */ MDB_pgstate me_pgstate; /**< state of old pages from freeDB */ # define me_pglast me_pgstate.mf_pglast # define me_pghead me_pgstate.mf_pghead MDB_page *me_dpages; /**< list of malloc'd blocks for re-use */ /** IDL of pages that became unused in a write txn */ MDB_IDL me_free_pgs; /** ID2L of pages written during a write txn. Length MDB_IDL_UM_SIZE. */ MDB_ID2L me_dirty_list; /** Max number of freelist items that can fit in a single overflow page */ int me_maxfree_1pg; /** Max size of a node on a page */ unsigned int me_nodemax; #if !(MDB_MAXKEYSIZE) unsigned int me_maxkey; /**< max size of a key */ #endif int me_live_reader; /**< have liveness lock in reader table */ #ifdef _WIN32 int me_pidquery; /**< Used in OpenProcess */ #endif #ifdef MDB_USE_POSIX_MUTEX /* Posix mutexes reside in shared mem */ # define me_rmutex me_txns->mti_rmutex /**< Shared reader lock */ # define me_wmutex me_txns->mti_wmutex /**< Shared writer lock */ #else mdb_mutex_t me_rmutex; mdb_mutex_t me_wmutex; #endif void *me_userctx; /**< User-settable context */ MDB_assert_func *me_assert_func; /**< Callback for assertion failures */ }; /** Nested transaction */ typedef struct MDB_ntxn { MDB_txn mnt_txn; /**< the transaction */ MDB_pgstate mnt_pgstate; /**< parent transaction's saved freestate */ } MDB_ntxn; /** max number of pages to commit in one writev() call */ #define MDB_COMMIT_PAGES 64 #if defined(IOV_MAX) && IOV_MAX < MDB_COMMIT_PAGES #undef MDB_COMMIT_PAGES #define MDB_COMMIT_PAGES IOV_MAX #endif /** max bytes to write in one call */ #define MAX_WRITE (0x40000000U >> (sizeof(ssize_t) == 4)) /** Check \b txn and \b dbi arguments to a function */ #define TXN_DBI_EXIST(txn, dbi, validity) \ ((txn) && (dbi)<(txn)->mt_numdbs && ((txn)->mt_dbflags[dbi] & (validity))) /** Check for misused \b dbi handles */ #define TXN_DBI_CHANGED(txn, dbi) \ ((txn)->mt_dbiseqs[dbi] != (txn)->mt_env->me_dbiseqs[dbi]) static int mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp); static int mdb_page_new(MDB_cursor *mc, uint32_t flags, int num, MDB_page **mp); static int mdb_page_touch(MDB_cursor *mc); #define MDB_END_NAMES {"committed", "empty-commit", "abort", "reset", \ "reset-tmp", "fail-begin", "fail-beginchild"} enum { /* mdb_txn_end operation number, for logging */ MDB_END_COMMITTED, MDB_END_EMPTY_COMMIT, MDB_END_ABORT, MDB_END_RESET, MDB_END_RESET_TMP, MDB_END_FAIL_BEGIN, MDB_END_FAIL_BEGINCHILD }; #define MDB_END_OPMASK 0x0F /**< mask for #mdb_txn_end() operation number */ #define MDB_END_UPDATE 0x10 /**< update env state (DBIs) */ #define MDB_END_FREE 0x20 /**< free txn unless it is #MDB_env.%me_txn0 */ #define MDB_END_SLOT MDB_NOTLS /**< release any reader slot if #MDB_NOTLS */ static void mdb_txn_end(MDB_txn *txn, unsigned mode); static int mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **mp, int *lvl); static int mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int modify); #define MDB_PS_MODIFY 1 #define MDB_PS_ROOTONLY 2 #define MDB_PS_FIRST 4 #define MDB_PS_LAST 8 static int mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags); static int mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst); #define MDB_SPLIT_REPLACE MDB_APPENDDUP /**< newkey is not new */ static int mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno, unsigned int nflags); static int mdb_env_read_header(MDB_env *env, MDB_meta *meta); static MDB_meta *mdb_env_pick_meta(const MDB_env *env); static int mdb_env_write_meta(MDB_txn *txn); #if defined(MDB_USE_POSIX_MUTEX) && !defined(MDB_ROBUST_SUPPORTED) /* Drop unused excl arg */ # define mdb_env_close0(env, excl) mdb_env_close1(env) #endif static void mdb_env_close0(MDB_env *env, int excl); static MDB_node *mdb_node_search(MDB_cursor *mc, MDB_val *key, int *exactp); static int mdb_node_add(MDB_cursor *mc, indx_t indx, MDB_val *key, MDB_val *data, pgno_t pgno, unsigned int flags); static void mdb_node_del(MDB_cursor *mc, int ksize); static void mdb_node_shrink(MDB_page *mp, indx_t indx); static int mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft); static int mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data); static size_t mdb_leaf_size(MDB_env *env, MDB_val *key, MDB_val *data); static size_t mdb_branch_size(MDB_env *env, MDB_val *key); static int mdb_rebalance(MDB_cursor *mc); static int mdb_update_key(MDB_cursor *mc, MDB_val *key); static void mdb_cursor_pop(MDB_cursor *mc); static int mdb_cursor_push(MDB_cursor *mc, MDB_page *mp); static int mdb_cursor_del0(MDB_cursor *mc); static int mdb_del0(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned flags); static int mdb_cursor_sibling(MDB_cursor *mc, int move_right); static int mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op); static int mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op); static int mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op, int *exactp); static int mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data); static int mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data); static void mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx); static void mdb_xcursor_init0(MDB_cursor *mc); static void mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node); static void mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int force); static int mdb_drop0(MDB_cursor *mc, int subs); static void mdb_default_cmp(MDB_txn *txn, MDB_dbi dbi); static int mdb_reader_check0(MDB_env *env, int rlocked, int *dead); /** @cond */ static MDB_cmp_func mdb_cmp_memn, mdb_cmp_memnr, mdb_cmp_int, mdb_cmp_cint, mdb_cmp_long; /** @endcond */ /** Compare two items pointing at size_t's of unknown alignment. */ #ifdef MISALIGNED_OK # define mdb_cmp_clong mdb_cmp_long #else # define mdb_cmp_clong mdb_cmp_cint #endif #ifdef _WIN32 static SECURITY_DESCRIPTOR mdb_null_sd; static SECURITY_ATTRIBUTES mdb_all_sa; static int mdb_sec_inited; struct MDB_name; static int utf8_to_utf16(const char *src, struct MDB_name *dst, int xtra); #endif /** Return the library version info. */ char * ESECT mdb_version(int *major, int *minor, int *patch) { if (major) *major = MDB_VERSION_MAJOR; if (minor) *minor = MDB_VERSION_MINOR; if (patch) *patch = MDB_VERSION_PATCH; return MDB_VERSION_STRING; } /** Table of descriptions for LMDB @ref errors */ static char *const mdb_errstr[] = { "MDB_KEYEXIST: Key/data pair already exists", "MDB_NOTFOUND: No matching key/data pair found", "MDB_PAGE_NOTFOUND: Requested page not found", "MDB_CORRUPTED: Located page was wrong type", "MDB_PANIC: Update of meta page failed or environment had fatal error", "MDB_VERSION_MISMATCH: Database environment version mismatch", "MDB_INVALID: File is not an LMDB file", "MDB_MAP_FULL: Environment mapsize limit reached", "MDB_DBS_FULL: Environment maxdbs limit reached", "MDB_READERS_FULL: Environment maxreaders limit reached", "MDB_TLS_FULL: Thread-local storage keys full - too many environments open", "MDB_TXN_FULL: Transaction has too many dirty pages - transaction too big", "MDB_CURSOR_FULL: Internal error - cursor stack limit reached", "MDB_PAGE_FULL: Internal error - page has no more space", "MDB_MAP_RESIZED: Database contents grew beyond environment mapsize", "MDB_INCOMPATIBLE: Operation and DB incompatible, or DB flags changed", "MDB_BAD_RSLOT: Invalid reuse of reader locktable slot", "MDB_BAD_TXN: Transaction must abort, has a child, or is invalid", "MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size", "MDB_BAD_DBI: The specified DBI handle was closed/changed unexpectedly", }; char * mdb_strerror(int err) { #ifdef _WIN32 /** HACK: pad 4KB on stack over the buf. Return system msgs in buf. * This works as long as no function between the call to mdb_strerror * and the actual use of the message uses more than 4K of stack. */ #define MSGSIZE 1024 #define PADSIZE 4096 char buf[MSGSIZE+PADSIZE], *ptr = buf; #endif int i; if (!err) return ("Successful return: 0"); if (err >= MDB_KEYEXIST && err <= MDB_LAST_ERRCODE) { i = err - MDB_KEYEXIST; return mdb_errstr[i]; } #ifdef _WIN32 /* These are the C-runtime error codes we use. The comment indicates * their numeric value, and the Win32 error they would correspond to * if the error actually came from a Win32 API. A major mess, we should * have used LMDB-specific error codes for everything. */ switch(err) { case ENOENT: /* 2, FILE_NOT_FOUND */ case EIO: /* 5, ACCESS_DENIED */ case ENOMEM: /* 12, INVALID_ACCESS */ case EACCES: /* 13, INVALID_DATA */ case EBUSY: /* 16, CURRENT_DIRECTORY */ case EINVAL: /* 22, BAD_COMMAND */ case ENOSPC: /* 28, OUT_OF_PAPER */ return strerror(err); default: ; } buf[0] = 0; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE); return ptr; #else return strerror(err); #endif } /** assert(3) variant in cursor context */ #define mdb_cassert(mc, expr) mdb_assert0((mc)->mc_txn->mt_env, expr, #expr) /** assert(3) variant in transaction context */ #define mdb_tassert(txn, expr) mdb_assert0((txn)->mt_env, expr, #expr) /** assert(3) variant in environment context */ #define mdb_eassert(env, expr) mdb_assert0(env, expr, #expr) #ifndef NDEBUG # define mdb_assert0(env, expr, expr_txt) ((expr) ? (void)0 : \ mdb_assert_fail(env, expr_txt, mdb_func_, __FILE__, __LINE__)) static void ESECT mdb_assert_fail(MDB_env *env, const char *expr_txt, const char *func, const char *file, int line) { char buf[400]; sprintf(buf, "%.100s:%d: Assertion '%.200s' failed in %.40s()", file, line, expr_txt, func); if (env->me_assert_func) env->me_assert_func(env, buf); fprintf(stderr, "%s\n", buf); abort(); } #else # define mdb_assert0(env, expr, expr_txt) ((void) 0) #endif /* NDEBUG */ #if MDB_DEBUG /** Return the page number of \b mp which may be sub-page, for debug output */ static pgno_t mdb_dbg_pgno(MDB_page *mp) { pgno_t ret; COPY_PGNO(ret, mp->mp_pgno); return ret; } /** Display a key in hexadecimal and return the address of the result. * @param[in] key the key to display * @param[in] buf the buffer to write into. Should always be #DKBUF. * @return The key in hexadecimal form. */ char * mdb_dkey(MDB_val *key, char *buf) { char *ptr = buf; unsigned char *c = key->mv_data; unsigned int i; if (!key) return ""; if (key->mv_size > DKBUF_MAXKEYSIZE) return "MDB_MAXKEYSIZE"; /* may want to make this a dynamic check: if the key is mostly * printable characters, print it as-is instead of converting to hex. */ #if 1 buf[0] = '\0'; for (i=0; imv_size; i++) ptr += sprintf(ptr, "%02x", *c++); #else sprintf(buf, "%.*s", key->mv_size, key->mv_data); #endif return buf; } static const char * mdb_leafnode_type(MDB_node *n) { static char *const tp[2][2] = {{"", ": DB"}, {": sub-page", ": sub-DB"}}; return F_ISSET(n->mn_flags, F_BIGDATA) ? ": overflow page" : tp[F_ISSET(n->mn_flags, F_DUPDATA)][F_ISSET(n->mn_flags, F_SUBDATA)]; } /** Display all the keys in the page. */ void mdb_page_list(MDB_page *mp) { pgno_t pgno = mdb_dbg_pgno(mp); const char *type, *state = (mp->mp_flags & P_DIRTY) ? ", dirty" : ""; MDB_node *node; unsigned int i, nkeys, nsize, total = 0; MDB_val key; DKBUF; switch (mp->mp_flags & (P_BRANCH|P_LEAF|P_LEAF2|P_META|P_OVERFLOW|P_SUBP)) { case P_BRANCH: type = "Branch page"; break; case P_LEAF: type = "Leaf page"; break; case P_LEAF|P_SUBP: type = "Sub-page"; break; case P_LEAF|P_LEAF2: type = "LEAF2 page"; break; case P_LEAF|P_LEAF2|P_SUBP: type = "LEAF2 sub-page"; break; case P_OVERFLOW: fprintf(stderr, "Overflow page %"Z"u pages %u%s\n", pgno, mp->mp_pages, state); return; case P_META: fprintf(stderr, "Meta-page %"Z"u txnid %"Z"u\n", pgno, ((MDB_meta *)METADATA(mp))->mm_txnid); return; default: fprintf(stderr, "Bad page %"Z"u flags 0x%X\n", pgno, mp->mp_flags); return; } nkeys = NUMKEYS(mp); fprintf(stderr, "%s %"Z"u numkeys %d%s\n", type, pgno, nkeys, state); for (i=0; imp_pad; key.mv_data = LEAF2KEY(mp, i, nsize); total += nsize; fprintf(stderr, "key %d: nsize %d, %s\n", i, nsize, DKEY(&key)); continue; } node = NODEPTR(mp, i); key.mv_size = node->mn_ksize; key.mv_data = node->mn_data; nsize = NODESIZE + key.mv_size; if (IS_BRANCH(mp)) { fprintf(stderr, "key %d: page %"Z"u, %s\n", i, NODEPGNO(node), DKEY(&key)); total += nsize; } else { if (F_ISSET(node->mn_flags, F_BIGDATA)) nsize += sizeof(pgno_t); else nsize += NODEDSZ(node); total += nsize; nsize += sizeof(indx_t); fprintf(stderr, "key %d: nsize %d, %s%s\n", i, nsize, DKEY(&key), mdb_leafnode_type(node)); } total = EVEN(total); } fprintf(stderr, "Total: header %d + contents %d + unused %d\n", IS_LEAF2(mp) ? PAGEHDRSZ : PAGEBASE + mp->mp_lower, total, SIZELEFT(mp)); } void mdb_cursor_chk(MDB_cursor *mc) { unsigned int i; MDB_node *node; MDB_page *mp; if (!mc->mc_snum || !(mc->mc_flags & C_INITIALIZED)) return; for (i=0; imc_top; i++) { mp = mc->mc_pg[i]; node = NODEPTR(mp, mc->mc_ki[i]); if (NODEPGNO(node) != mc->mc_pg[i+1]->mp_pgno) printf("oops!\n"); } if (mc->mc_ki[i] >= NUMKEYS(mc->mc_pg[i])) printf("ack!\n"); if (XCURSOR_INITED(mc)) { node = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) && mc->mc_xcursor->mx_cursor.mc_pg[0] != NODEDATA(node)) { printf("blah!\n"); } } } #endif #if (MDB_DEBUG) > 2 /** Count all the pages in each DB and in the freelist * and make sure it matches the actual number of pages * being used. * All named DBs must be open for a correct count. */ static void mdb_audit(MDB_txn *txn) { MDB_cursor mc; MDB_val key, data; MDB_ID freecount, count; MDB_dbi i; int rc; freecount = 0; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0) freecount += *(MDB_ID *)data.mv_data; mdb_tassert(txn, rc == MDB_NOTFOUND); count = 0; for (i = 0; imt_numdbs; i++) { MDB_xcursor mx; if (!(txn->mt_dbflags[i] & DB_VALID)) continue; mdb_cursor_init(&mc, txn, i, &mx); if (txn->mt_dbs[i].md_root == P_INVALID) continue; count += txn->mt_dbs[i].md_branch_pages + txn->mt_dbs[i].md_leaf_pages + txn->mt_dbs[i].md_overflow_pages; if (txn->mt_dbs[i].md_flags & MDB_DUPSORT) { rc = mdb_page_search(&mc, NULL, MDB_PS_FIRST); for (; rc == MDB_SUCCESS; rc = mdb_cursor_sibling(&mc, 1)) { unsigned j; MDB_page *mp; mp = mc.mc_pg[mc.mc_top]; for (j=0; jmn_flags & F_SUBDATA) { MDB_db db; memcpy(&db, NODEDATA(leaf), sizeof(db)); count += db.md_branch_pages + db.md_leaf_pages + db.md_overflow_pages; } } } mdb_tassert(txn, rc == MDB_NOTFOUND); } } if (freecount + count + NUM_METAS != txn->mt_next_pgno) { fprintf(stderr, "audit: %"Z"u freecount: %"Z"u count: %"Z"u total: %"Z"u next_pgno: %"Z"u\n", txn->mt_txnid, freecount, count+NUM_METAS, freecount+count+NUM_METAS, txn->mt_next_pgno); } } #endif int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) { return txn->mt_dbxs[dbi].md_cmp(a, b); } int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) { MDB_cmp_func *dcmp = txn->mt_dbxs[dbi].md_dcmp; #if UINT_MAX < SIZE_MAX if (dcmp == mdb_cmp_int && a->mv_size == sizeof(size_t)) dcmp = mdb_cmp_clong; #endif return dcmp(a, b); } /** Allocate memory for a page. * Re-use old malloc'd pages first for singletons, otherwise just malloc. * Set #MDB_TXN_ERROR on failure. */ static MDB_page * mdb_page_malloc(MDB_txn *txn, unsigned num) { MDB_env *env = txn->mt_env; MDB_page *ret = env->me_dpages; size_t psize = env->me_psize, sz = psize, off; /* For ! #MDB_NOMEMINIT, psize counts how much to init. * For a single page alloc, we init everything after the page header. * For multi-page, we init the final page; if the caller needed that * many pages they will be filling in at least up to the last page. */ if (num == 1) { if (ret) { VGMEMP_ALLOC(env, ret, sz); VGMEMP_DEFINED(ret, sizeof(ret->mp_next)); env->me_dpages = ret->mp_next; return ret; } psize -= off = PAGEHDRSZ; } else { sz *= num; off = sz - psize; } if ((ret = malloc(sz)) != NULL) { VGMEMP_ALLOC(env, ret, sz); if (!(env->me_flags & MDB_NOMEMINIT)) { memset((char *)ret + off, 0, psize); ret->mp_pad = 0; } } else { txn->mt_flags |= MDB_TXN_ERROR; } return ret; } /** Free a single page. * Saves single pages to a list, for future reuse. * (This is not used for multi-page overflow pages.) */ static void mdb_page_free(MDB_env *env, MDB_page *mp) { mp->mp_next = env->me_dpages; VGMEMP_FREE(env, mp); env->me_dpages = mp; } /** Free a dirty page */ static void mdb_dpage_free(MDB_env *env, MDB_page *dp) { if (!IS_OVERFLOW(dp) || dp->mp_pages == 1) { mdb_page_free(env, dp); } else { /* large pages just get freed directly */ VGMEMP_FREE(env, dp); free(dp); } } /** Return all dirty pages to dpage list */ static void mdb_dlist_free(MDB_txn *txn) { MDB_env *env = txn->mt_env; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned i, n = dl[0].mid; for (i = 1; i <= n; i++) { mdb_dpage_free(env, dl[i].mptr); } dl[0].mid = 0; } /** Loosen or free a single page. * Saves single pages to a list for future reuse * in this same txn. It has been pulled from the freeDB * and already resides on the dirty list, but has been * deleted. Use these pages first before pulling again * from the freeDB. * * If the page wasn't dirtied in this txn, just add it * to this txn's free list. */ static int mdb_page_loose(MDB_cursor *mc, MDB_page *mp) { int loose = 0; pgno_t pgno = mp->mp_pgno; MDB_txn *txn = mc->mc_txn; if ((mp->mp_flags & P_DIRTY) && mc->mc_dbi != FREE_DBI) { if (txn->mt_parent) { MDB_ID2 *dl = txn->mt_u.dirty_list; /* If txn has a parent, make sure the page is in our * dirty list. */ if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { if (mp != dl[x].mptr) { /* bad cursor? */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); txn->mt_flags |= MDB_TXN_ERROR; return MDB_CORRUPTED; } /* ok, it's ours */ loose = 1; } } } else { /* no parent txn, so it's just ours */ loose = 1; } } if (loose) { DPRINTF(("loosen db %d page %"Z"u", DDBI(mc), mp->mp_pgno)); NEXT_LOOSE_PAGE(mp) = txn->mt_loose_pgs; txn->mt_loose_pgs = mp; txn->mt_loose_count++; mp->mp_flags |= P_LOOSE; } else { int rc = mdb_midl_append(&txn->mt_free_pgs, pgno); if (rc) return rc; } return MDB_SUCCESS; } /** Set or clear P_KEEP in dirty, non-overflow, non-sub pages watched by txn. * @param[in] mc A cursor handle for the current operation. * @param[in] pflags Flags of the pages to update: * P_DIRTY to set P_KEEP, P_DIRTY|P_KEEP to clear it. * @param[in] all No shortcuts. Needed except after a full #mdb_page_flush(). * @return 0 on success, non-zero on failure. */ static int mdb_pages_xkeep(MDB_cursor *mc, unsigned pflags, int all) { enum { Mask = P_SUBP|P_DIRTY|P_LOOSE|P_KEEP }; MDB_txn *txn = mc->mc_txn; MDB_cursor *m3, *m0 = mc; MDB_xcursor *mx; MDB_page *dp, *mp; MDB_node *leaf; unsigned i, j; int rc = MDB_SUCCESS, level; /* Mark pages seen by cursors */ if (mc->mc_flags & C_UNTRACK) mc = NULL; /* will find mc in mt_cursors */ for (i = txn->mt_numdbs;; mc = txn->mt_cursors[--i]) { for (; mc; mc=mc->mc_next) { if (!(mc->mc_flags & C_INITIALIZED)) continue; for (m3 = mc;; m3 = &mx->mx_cursor) { mp = NULL; for (j=0; jmc_snum; j++) { mp = m3->mc_pg[j]; if ((mp->mp_flags & Mask) == pflags) mp->mp_flags ^= P_KEEP; } mx = m3->mc_xcursor; /* Proceed to mx if it is at a sub-database */ if (! (mx && (mx->mx_cursor.mc_flags & C_INITIALIZED))) break; if (! (mp && (mp->mp_flags & P_LEAF))) break; leaf = NODEPTR(mp, m3->mc_ki[j-1]); if (!(leaf->mn_flags & F_SUBDATA)) break; } } if (i == 0) break; } if (all) { /* Mark dirty root pages */ for (i=0; imt_numdbs; i++) { if (txn->mt_dbflags[i] & DB_DIRTY) { pgno_t pgno = txn->mt_dbs[i].md_root; if (pgno == P_INVALID) continue; if ((rc = mdb_page_get(m0, pgno, &dp, &level)) != MDB_SUCCESS) break; if ((dp->mp_flags & Mask) == pflags && level <= 1) dp->mp_flags ^= P_KEEP; } } } return rc; } static int mdb_page_flush(MDB_txn *txn, int keep); /** Spill pages from the dirty list back to disk. * This is intended to prevent running into #MDB_TXN_FULL situations, * but note that they may still occur in a few cases: * 1) our estimate of the txn size could be too small. Currently this * seems unlikely, except with a large number of #MDB_MULTIPLE items. * 2) child txns may run out of space if their parents dirtied a * lot of pages and never spilled them. TODO: we probably should do * a preemptive spill during #mdb_txn_begin() of a child txn, if * the parent's dirty_room is below a given threshold. * * Otherwise, if not using nested txns, it is expected that apps will * not run into #MDB_TXN_FULL any more. The pages are flushed to disk * the same way as for a txn commit, e.g. their P_DIRTY flag is cleared. * If the txn never references them again, they can be left alone. * If the txn only reads them, they can be used without any fuss. * If the txn writes them again, they can be dirtied immediately without * going thru all of the work of #mdb_page_touch(). Such references are * handled by #mdb_page_unspill(). * * Also note, we never spill DB root pages, nor pages of active cursors, * because we'll need these back again soon anyway. And in nested txns, * we can't spill a page in a child txn if it was already spilled in a * parent txn. That would alter the parent txns' data even though * the child hasn't committed yet, and we'd have no way to undo it if * the child aborted. * * @param[in] m0 cursor A cursor handle identifying the transaction and * database for which we are checking space. * @param[in] key For a put operation, the key being stored. * @param[in] data For a put operation, the data being stored. * @return 0 on success, non-zero on failure. */ static int mdb_page_spill(MDB_cursor *m0, MDB_val *key, MDB_val *data) { MDB_txn *txn = m0->mc_txn; MDB_page *dp; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned int i, j, need; int rc; if (m0->mc_flags & C_SUB) return MDB_SUCCESS; /* Estimate how much space this op will take */ i = m0->mc_db->md_depth; /* Named DBs also dirty the main DB */ if (m0->mc_dbi >= CORE_DBS) i += txn->mt_dbs[MAIN_DBI].md_depth; /* For puts, roughly factor in the key+data size */ if (key) i += (LEAFSIZE(key, data) + txn->mt_env->me_psize) / txn->mt_env->me_psize; i += i; /* double it for good measure */ need = i; if (txn->mt_dirty_room > i) return MDB_SUCCESS; if (!txn->mt_spill_pgs) { txn->mt_spill_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX); if (!txn->mt_spill_pgs) return ENOMEM; } else { /* purge deleted slots */ MDB_IDL sl = txn->mt_spill_pgs; unsigned int num = sl[0]; j=0; for (i=1; i<=num; i++) { if (!(sl[i] & 1)) sl[++j] = sl[i]; } sl[0] = j; } /* Preserve pages which may soon be dirtied again */ if ((rc = mdb_pages_xkeep(m0, P_DIRTY, 1)) != MDB_SUCCESS) goto done; /* Less aggressive spill - we originally spilled the entire dirty list, * with a few exceptions for cursor pages and DB root pages. But this * turns out to be a lot of wasted effort because in a large txn many * of those pages will need to be used again. So now we spill only 1/8th * of the dirty pages. Testing revealed this to be a good tradeoff, * better than 1/2, 1/4, or 1/10. */ if (need < MDB_IDL_UM_MAX / 8) need = MDB_IDL_UM_MAX / 8; /* Save the page IDs of all the pages we're flushing */ /* flush from the tail forward, this saves a lot of shifting later on. */ for (i=dl[0].mid; i && need; i--) { MDB_ID pn = dl[i].mid << 1; dp = dl[i].mptr; if (dp->mp_flags & (P_LOOSE|P_KEEP)) continue; /* Can't spill twice, make sure it's not already in a parent's * spill list. */ if (txn->mt_parent) { MDB_txn *tx2; for (tx2 = txn->mt_parent; tx2; tx2 = tx2->mt_parent) { if (tx2->mt_spill_pgs) { j = mdb_midl_search(tx2->mt_spill_pgs, pn); if (j <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[j] == pn) { dp->mp_flags |= P_KEEP; break; } } } if (tx2) continue; } if ((rc = mdb_midl_append(&txn->mt_spill_pgs, pn))) goto done; need--; } mdb_midl_sort(txn->mt_spill_pgs); /* Flush the spilled part of dirty list */ if ((rc = mdb_page_flush(txn, i)) != MDB_SUCCESS) goto done; /* Reset any dirty pages we kept that page_flush didn't see */ rc = mdb_pages_xkeep(m0, P_DIRTY|P_KEEP, i); done: txn->mt_flags |= rc ? MDB_TXN_ERROR : MDB_TXN_SPILLS; return rc; } /** Find oldest txnid still referenced. Expects txn->mt_txnid > 0. */ static txnid_t mdb_find_oldest(MDB_txn *txn) { int i; txnid_t mr, oldest = txn->mt_txnid - 1; if (txn->mt_env->me_txns) { MDB_reader *r = txn->mt_env->me_txns->mti_readers; for (i = txn->mt_env->me_txns->mti_numreaders; --i >= 0; ) { if (r[i].mr_pid) { mr = r[i].mr_txnid; if (oldest > mr) oldest = mr; } } } return oldest; } /** Add a page to the txn's dirty list */ static void mdb_page_dirty(MDB_txn *txn, MDB_page *mp) { MDB_ID2 mid; int rc, (*insert)(MDB_ID2L, MDB_ID2 *); if (txn->mt_flags & MDB_TXN_WRITEMAP) { insert = mdb_mid2l_append; } else { insert = mdb_mid2l_insert; } mid.mid = mp->mp_pgno; mid.mptr = mp; rc = insert(txn->mt_u.dirty_list, &mid); mdb_tassert(txn, rc == 0); txn->mt_dirty_room--; } /** Allocate page numbers and memory for writing. Maintain me_pglast, * me_pghead and mt_next_pgno. Set #MDB_TXN_ERROR on failure. * * If there are free pages available from older transactions, they * are re-used first. Otherwise allocate a new page at mt_next_pgno. * Do not modify the freedB, just merge freeDB records into me_pghead[] * and move me_pglast to say which records were consumed. Only this * function can create me_pghead and move me_pglast/mt_next_pgno. * @param[in] mc cursor A cursor handle identifying the transaction and * database for which we are allocating. * @param[in] num the number of pages to allocate. * @param[out] mp Address of the allocated page(s). Requests for multiple pages * will always be satisfied by a single contiguous chunk of memory. * @return 0 on success, non-zero on failure. */ static int mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp) { #ifdef MDB_PARANOID /* Seems like we can ignore this now */ /* Get at most more freeDB records once me_pghead * has enough pages. If not enough, use new pages from the map. * If and mc is updating the freeDB, only get new * records if me_pghead is empty. Then the freelist cannot play * catch-up with itself by growing while trying to save it. */ enum { Paranoid = 1, Max_retries = 500 }; #else enum { Paranoid = 0, Max_retries = INT_MAX /*infinite*/ }; #endif int rc, retry = num * 60; MDB_txn *txn = mc->mc_txn; MDB_env *env = txn->mt_env; pgno_t pgno, *mop = env->me_pghead; unsigned i, j, mop_len = mop ? mop[0] : 0, n2 = num-1; MDB_page *np; txnid_t oldest = 0, last; MDB_cursor_op op; MDB_cursor m2; int found_old = 0; /* If there are any loose pages, just use them */ if (num == 1 && txn->mt_loose_pgs) { np = txn->mt_loose_pgs; txn->mt_loose_pgs = NEXT_LOOSE_PAGE(np); txn->mt_loose_count--; DPRINTF(("db %d use loose page %"Z"u", DDBI(mc), np->mp_pgno)); *mp = np; return MDB_SUCCESS; } *mp = NULL; /* If our dirty list is already full, we can't do anything */ if (txn->mt_dirty_room == 0) { rc = MDB_TXN_FULL; goto fail; } for (op = MDB_FIRST;; op = MDB_NEXT) { MDB_val key, data; MDB_node *leaf; pgno_t *idl; /* Seek a big enough contiguous page range. Prefer * pages at the tail, just truncating the list. */ if (mop_len > n2) { i = mop_len; do { pgno = mop[i]; if (mop[i-n2] == pgno+n2) goto search_done; } while (--i > n2); if (--retry < 0) break; } if (op == MDB_FIRST) { /* 1st iteration */ /* Prepare to fetch more and coalesce */ last = env->me_pglast; oldest = env->me_pgoldest; mdb_cursor_init(&m2, txn, FREE_DBI, NULL); if (last) { op = MDB_SET_RANGE; key.mv_data = &last; /* will look up last+1 */ key.mv_size = sizeof(last); } if (Paranoid && mc->mc_dbi == FREE_DBI) retry = -1; } if (Paranoid && retry < 0 && mop_len) break; last++; /* Do not fetch more if the record will be too recent */ if (oldest <= last) { if (!found_old) { oldest = mdb_find_oldest(txn); env->me_pgoldest = oldest; found_old = 1; } if (oldest <= last) break; } rc = mdb_cursor_get(&m2, &key, NULL, op); if (rc) { if (rc == MDB_NOTFOUND) break; goto fail; } last = *(txnid_t*)key.mv_data; if (oldest <= last) { if (!found_old) { oldest = mdb_find_oldest(txn); env->me_pgoldest = oldest; found_old = 1; } if (oldest <= last) break; } np = m2.mc_pg[m2.mc_top]; leaf = NODEPTR(np, m2.mc_ki[m2.mc_top]); if ((rc = mdb_node_read(&m2, leaf, &data)) != MDB_SUCCESS) goto fail; idl = (MDB_ID *) data.mv_data; i = idl[0]; if (!mop) { if (!(env->me_pghead = mop = mdb_midl_alloc(i))) { rc = ENOMEM; goto fail; } } else { if ((rc = mdb_midl_need(&env->me_pghead, i)) != 0) goto fail; mop = env->me_pghead; } env->me_pglast = last; #if (MDB_DEBUG) > 1 DPRINTF(("IDL read txn %"Z"u root %"Z"u num %u", last, txn->mt_dbs[FREE_DBI].md_root, i)); for (j = i; j; j--) DPRINTF(("IDL %"Z"u", idl[j])); #endif /* Merge in descending sorted order */ mdb_midl_xmerge(mop, idl); mop_len = mop[0]; } /* Use new pages from the map when nothing suitable in the freeDB */ i = 0; pgno = txn->mt_next_pgno; if (pgno + num >= env->me_maxpg) { DPUTS("DB size maxed out"); rc = MDB_MAP_FULL; goto fail; } search_done: if (env->me_flags & MDB_WRITEMAP) { np = (MDB_page *)(env->me_map + env->me_psize * pgno); } else { if (!(np = mdb_page_malloc(txn, num))) { rc = ENOMEM; goto fail; } } if (i) { mop[0] = mop_len -= num; /* Move any stragglers down */ for (j = i-num; j < mop_len; ) mop[++j] = mop[++i]; } else { txn->mt_next_pgno = pgno + num; } np->mp_pgno = pgno; mdb_page_dirty(txn, np); *mp = np; return MDB_SUCCESS; fail: txn->mt_flags |= MDB_TXN_ERROR; return rc; } /** Copy the used portions of a non-overflow page. * @param[in] dst page to copy into * @param[in] src page to copy from * @param[in] psize size of a page */ static void mdb_page_copy(MDB_page *dst, MDB_page *src, unsigned int psize) { enum { Align = sizeof(pgno_t) }; indx_t upper = src->mp_upper, lower = src->mp_lower, unused = upper-lower; /* If page isn't full, just copy the used portion. Adjust * alignment so memcpy may copy words instead of bytes. */ if ((unused &= -Align) && !IS_LEAF2(src)) { upper = (upper + PAGEBASE) & -Align; memcpy(dst, src, (lower + PAGEBASE + (Align-1)) & -Align); memcpy((pgno_t *)((char *)dst+upper), (pgno_t *)((char *)src+upper), psize - upper); } else { memcpy(dst, src, psize - unused); } } /** Pull a page off the txn's spill list, if present. * If a page being referenced was spilled to disk in this txn, bring * it back and make it dirty/writable again. * @param[in] txn the transaction handle. * @param[in] mp the page being referenced. It must not be dirty. * @param[out] ret the writable page, if any. ret is unchanged if * mp wasn't spilled. */ static int mdb_page_unspill(MDB_txn *txn, MDB_page *mp, MDB_page **ret) { MDB_env *env = txn->mt_env; const MDB_txn *tx2; unsigned x; pgno_t pgno = mp->mp_pgno, pn = pgno << 1; for (tx2 = txn; tx2; tx2=tx2->mt_parent) { if (!tx2->mt_spill_pgs) continue; x = mdb_midl_search(tx2->mt_spill_pgs, pn); if (x <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[x] == pn) { MDB_page *np; int num; if (txn->mt_dirty_room == 0) return MDB_TXN_FULL; if (IS_OVERFLOW(mp)) num = mp->mp_pages; else num = 1; if (env->me_flags & MDB_WRITEMAP) { np = mp; } else { np = mdb_page_malloc(txn, num); if (!np) return ENOMEM; if (num > 1) memcpy(np, mp, num * env->me_psize); else mdb_page_copy(np, mp, env->me_psize); } if (tx2 == txn) { /* If in current txn, this page is no longer spilled. * If it happens to be the last page, truncate the spill list. * Otherwise mark it as deleted by setting the LSB. */ if (x == txn->mt_spill_pgs[0]) txn->mt_spill_pgs[0]--; else txn->mt_spill_pgs[x] |= 1; } /* otherwise, if belonging to a parent txn, the * page remains spilled until child commits */ mdb_page_dirty(txn, np); np->mp_flags |= P_DIRTY; *ret = np; break; } } return MDB_SUCCESS; } /** Touch a page: make it dirty and re-insert into tree with updated pgno. * Set #MDB_TXN_ERROR on failure. * @param[in] mc cursor pointing to the page to be touched * @return 0 on success, non-zero on failure. */ static int mdb_page_touch(MDB_cursor *mc) { MDB_page *mp = mc->mc_pg[mc->mc_top], *np; MDB_txn *txn = mc->mc_txn; MDB_cursor *m2, *m3; pgno_t pgno; int rc; if (!F_ISSET(mp->mp_flags, P_DIRTY)) { if (txn->mt_flags & MDB_TXN_SPILLS) { np = NULL; rc = mdb_page_unspill(txn, mp, &np); if (rc) goto fail; if (np) goto done; } if ((rc = mdb_midl_need(&txn->mt_free_pgs, 1)) || (rc = mdb_page_alloc(mc, 1, &np))) goto fail; pgno = np->mp_pgno; DPRINTF(("touched db %d page %"Z"u -> %"Z"u", DDBI(mc), mp->mp_pgno, pgno)); mdb_cassert(mc, mp->mp_pgno != pgno); mdb_midl_xappend(txn->mt_free_pgs, mp->mp_pgno); /* Update the parent page, if any, to point to the new page */ if (mc->mc_top) { MDB_page *parent = mc->mc_pg[mc->mc_top-1]; MDB_node *node = NODEPTR(parent, mc->mc_ki[mc->mc_top-1]); SETPGNO(node, pgno); } else { mc->mc_db->md_root = pgno; } } else if (txn->mt_parent && !IS_SUBP(mp)) { MDB_ID2 mid, *dl = txn->mt_u.dirty_list; pgno = mp->mp_pgno; /* If txn has a parent, make sure the page is in our * dirty list. */ if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { if (mp != dl[x].mptr) { /* bad cursor? */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); txn->mt_flags |= MDB_TXN_ERROR; return MDB_CORRUPTED; } return 0; } } mdb_cassert(mc, dl[0].mid < MDB_IDL_UM_MAX); /* No - copy it */ np = mdb_page_malloc(txn, 1); if (!np) return ENOMEM; mid.mid = pgno; mid.mptr = np; rc = mdb_mid2l_insert(dl, &mid); mdb_cassert(mc, rc == 0); } else { return 0; } mdb_page_copy(np, mp, txn->mt_env->me_psize); np->mp_pgno = pgno; np->mp_flags |= P_DIRTY; done: /* Adjust cursors pointing to mp */ mc->mc_pg[mc->mc_top] = np; m2 = txn->mt_cursors[mc->mc_dbi]; if (mc->mc_flags & C_SUB) { for (; m2; m2=m2->mc_next) { m3 = &m2->mc_xcursor->mx_cursor; if (m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) m3->mc_pg[mc->mc_top] = np; } } else { for (; m2; m2=m2->mc_next) { if (m2->mc_snum < mc->mc_snum) continue; if (m2 == mc) continue; if (m2->mc_pg[mc->mc_top] == mp) { m2->mc_pg[mc->mc_top] = np; if (IS_LEAF(np)) XCURSOR_REFRESH(m2, mc->mc_top, np); } } } return 0; fail: txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_env_sync(MDB_env *env, int force) { int rc = 0; if (env->me_flags & MDB_RDONLY) return EACCES; if (force || !F_ISSET(env->me_flags, MDB_NOSYNC)) { if (env->me_flags & MDB_WRITEMAP) { int flags = ((env->me_flags & MDB_MAPASYNC) && !force) ? MS_ASYNC : MS_SYNC; if (MDB_MSYNC(env->me_map, env->me_mapsize, flags)) rc = ErrCode(); #ifdef _WIN32 else if (flags == MS_SYNC && MDB_FDATASYNC(env->me_fd)) rc = ErrCode(); #endif } else { #ifdef BROKEN_FDATASYNC if (env->me_flags & MDB_FSYNCONLY) { if (fsync(env->me_fd)) rc = ErrCode(); } else #endif if (MDB_FDATASYNC(env->me_fd)) rc = ErrCode(); } } return rc; } /** Back up parent txn's cursors, then grab the originals for tracking */ static int mdb_cursor_shadow(MDB_txn *src, MDB_txn *dst) { MDB_cursor *mc, *bk; MDB_xcursor *mx; size_t size; int i; for (i = src->mt_numdbs; --i >= 0; ) { if ((mc = src->mt_cursors[i]) != NULL) { size = sizeof(MDB_cursor); if (mc->mc_xcursor) size += sizeof(MDB_xcursor); for (; mc; mc = bk->mc_next) { bk = malloc(size); if (!bk) return ENOMEM; *bk = *mc; mc->mc_backup = bk; mc->mc_db = &dst->mt_dbs[i]; /* Kill pointers into src to reduce abuse: The * user may not use mc until dst ends. But we need a valid * txn pointer here for cursor fixups to keep working. */ mc->mc_txn = dst; mc->mc_dbflag = &dst->mt_dbflags[i]; if ((mx = mc->mc_xcursor) != NULL) { *(MDB_xcursor *)(bk+1) = *mx; mx->mx_cursor.mc_txn = dst; } mc->mc_next = dst->mt_cursors[i]; dst->mt_cursors[i] = mc; } } } return MDB_SUCCESS; } /** Close this write txn's cursors, give parent txn's cursors back to parent. * @param[in] txn the transaction handle. * @param[in] merge true to keep changes to parent cursors, false to revert. * @return 0 on success, non-zero on failure. */ static void mdb_cursors_close(MDB_txn *txn, unsigned merge) { MDB_cursor **cursors = txn->mt_cursors, *mc, *next, *bk; MDB_xcursor *mx; int i; for (i = txn->mt_numdbs; --i >= 0; ) { for (mc = cursors[i]; mc; mc = next) { next = mc->mc_next; if ((bk = mc->mc_backup) != NULL) { if (merge) { /* Commit changes to parent txn */ mc->mc_next = bk->mc_next; mc->mc_backup = bk->mc_backup; mc->mc_txn = bk->mc_txn; mc->mc_db = bk->mc_db; mc->mc_dbflag = bk->mc_dbflag; if ((mx = mc->mc_xcursor) != NULL) mx->mx_cursor.mc_txn = bk->mc_txn; } else { /* Abort nested txn */ *mc = *bk; if ((mx = mc->mc_xcursor) != NULL) *mx = *(MDB_xcursor *)(bk+1); } mc = bk; } /* Only malloced cursors are permanently tracked. */ free(mc); } cursors[i] = NULL; } } #if !(MDB_PIDLOCK) /* Currently the same as defined(_WIN32) */ enum Pidlock_op { Pidset, Pidcheck }; #else enum Pidlock_op { Pidset = F_SETLK, Pidcheck = F_GETLK }; #endif /** Set or check a pid lock. Set returns 0 on success. * Check returns 0 if the process is certainly dead, nonzero if it may * be alive (the lock exists or an error happened so we do not know). * * On Windows Pidset is a no-op, we merely check for the existence * of the process with the given pid. On POSIX we use a single byte * lock on the lockfile, set at an offset equal to the pid. */ static int mdb_reader_pid(MDB_env *env, enum Pidlock_op op, MDB_PID_T pid) { #if !(MDB_PIDLOCK) /* Currently the same as defined(_WIN32) */ int ret = 0; HANDLE h; if (op == Pidcheck) { h = OpenProcess(env->me_pidquery, FALSE, pid); /* No documented "no such process" code, but other program use this: */ if (!h) return ErrCode() != ERROR_INVALID_PARAMETER; /* A process exists until all handles to it close. Has it exited? */ ret = WaitForSingleObject(h, 0) != 0; CloseHandle(h); } return ret; #else for (;;) { int rc; struct flock lock_info; memset(&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_WRLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = pid; lock_info.l_len = 1; if ((rc = fcntl(env->me_lfd, op, &lock_info)) == 0) { if (op == F_GETLK && lock_info.l_type != F_UNLCK) rc = -1; } else if ((rc = ErrCode()) == EINTR) { continue; } return rc; } #endif } /** Common code for #mdb_txn_begin() and #mdb_txn_renew(). * @param[in] txn the transaction handle to initialize * @return 0 on success, non-zero on failure. */ static int mdb_txn_renew0(MDB_txn *txn) { MDB_env *env = txn->mt_env; MDB_txninfo *ti = env->me_txns; MDB_meta *meta; unsigned int i, nr, flags = txn->mt_flags; uint16_t x; int rc, new_notls = 0; if ((flags &= MDB_TXN_RDONLY) != 0) { if (!ti) { meta = mdb_env_pick_meta(env); txn->mt_txnid = meta->mm_txnid; txn->mt_u.reader = NULL; } else { MDB_reader *r = (env->me_flags & MDB_NOTLS) ? txn->mt_u.reader : pthread_getspecific(env->me_txkey); if (r) { if (r->mr_pid != env->me_pid || r->mr_txnid != (txnid_t)-1) return MDB_BAD_RSLOT; } else { MDB_PID_T pid = env->me_pid; MDB_THR_T tid = pthread_self(); mdb_mutexref_t rmutex = env->me_rmutex; if (!env->me_live_reader) { rc = mdb_reader_pid(env, Pidset, pid); if (rc) return rc; env->me_live_reader = 1; } if (LOCK_MUTEX(rc, env, rmutex)) return rc; nr = ti->mti_numreaders; for (i=0; imti_readers[i].mr_pid == 0) break; if (i == env->me_maxreaders) { UNLOCK_MUTEX(rmutex); return MDB_READERS_FULL; } r = &ti->mti_readers[i]; /* Claim the reader slot, carefully since other code * uses the reader table un-mutexed: First reset the * slot, next publish it in mti_numreaders. After * that, it is safe for mdb_env_close() to touch it. * When it will be closed, we can finally claim it. */ r->mr_pid = 0; r->mr_txnid = (txnid_t)-1; r->mr_tid = tid; if (i == nr) ti->mti_numreaders = ++nr; env->me_close_readers = nr; r->mr_pid = pid; UNLOCK_MUTEX(rmutex); new_notls = (env->me_flags & MDB_NOTLS); if (!new_notls && (rc=pthread_setspecific(env->me_txkey, r))) { r->mr_pid = 0; return rc; } } do /* LY: Retry on a race, ITS#7970. */ r->mr_txnid = ti->mti_txnid; while(r->mr_txnid != ti->mti_txnid); txn->mt_txnid = r->mr_txnid; txn->mt_u.reader = r; meta = env->me_metas[txn->mt_txnid & 1]; } } else { /* Not yet touching txn == env->me_txn0, it may be active */ if (ti) { if (LOCK_MUTEX(rc, env, env->me_wmutex)) return rc; txn->mt_txnid = ti->mti_txnid; meta = env->me_metas[txn->mt_txnid & 1]; } else { meta = mdb_env_pick_meta(env); txn->mt_txnid = meta->mm_txnid; } txn->mt_txnid++; #if MDB_DEBUG if (txn->mt_txnid == mdb_debug_start) mdb_debug = 1; #endif txn->mt_child = NULL; txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; txn->mt_dirty_room = MDB_IDL_UM_MAX; txn->mt_u.dirty_list = env->me_dirty_list; txn->mt_u.dirty_list[0].mid = 0; txn->mt_free_pgs = env->me_free_pgs; txn->mt_free_pgs[0] = 0; txn->mt_spill_pgs = NULL; env->me_txn = txn; memcpy(txn->mt_dbiseqs, env->me_dbiseqs, env->me_maxdbs * sizeof(unsigned int)); } /* Copy the DB info and flags */ memcpy(txn->mt_dbs, meta->mm_dbs, CORE_DBS * sizeof(MDB_db)); /* Moved to here to avoid a data race in read TXNs */ txn->mt_next_pgno = meta->mm_last_pg+1; txn->mt_flags = flags; /* Setup db info */ txn->mt_numdbs = env->me_numdbs; for (i=CORE_DBS; imt_numdbs; i++) { x = env->me_dbflags[i]; txn->mt_dbs[i].md_flags = x & PERSISTENT_FLAGS; txn->mt_dbflags[i] = (x & MDB_VALID) ? DB_VALID|DB_USRVALID|DB_STALE : 0; } txn->mt_dbflags[MAIN_DBI] = DB_VALID|DB_USRVALID; txn->mt_dbflags[FREE_DBI] = DB_VALID; if (env->me_flags & MDB_FATAL_ERROR) { DPUTS("environment had fatal error, must shutdown!"); rc = MDB_PANIC; } else if (env->me_maxpg < txn->mt_next_pgno) { rc = MDB_MAP_RESIZED; } else { return MDB_SUCCESS; } mdb_txn_end(txn, new_notls /*0 or MDB_END_SLOT*/ | MDB_END_FAIL_BEGIN); return rc; } int mdb_txn_renew(MDB_txn *txn) { int rc; if (!txn || !F_ISSET(txn->mt_flags, MDB_TXN_RDONLY|MDB_TXN_FINISHED)) return EINVAL; rc = mdb_txn_renew0(txn); if (rc == MDB_SUCCESS) { DPRINTF(("renew txn %"Z"u%c %p on mdbenv %p, root page %"Z"u", txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', (void *)txn, (void *)txn->mt_env, txn->mt_dbs[MAIN_DBI].md_root)); } return rc; } int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret) { MDB_txn *txn; MDB_ntxn *ntxn; int rc, size, tsize; flags &= MDB_TXN_BEGIN_FLAGS; flags |= env->me_flags & MDB_WRITEMAP; if (env->me_flags & MDB_RDONLY & ~flags) /* write txn in RDONLY env */ return EACCES; if (parent) { /* Nested transactions: Max 1 child, write txns only, no writemap */ flags |= parent->mt_flags; if (flags & (MDB_RDONLY|MDB_WRITEMAP|MDB_TXN_BLOCKED)) { return (parent->mt_flags & MDB_TXN_RDONLY) ? EINVAL : MDB_BAD_TXN; } /* Child txns save MDB_pgstate and use own copy of cursors */ size = env->me_maxdbs * (sizeof(MDB_db)+sizeof(MDB_cursor *)+1); size += tsize = sizeof(MDB_ntxn); } else if (flags & MDB_RDONLY) { size = env->me_maxdbs * (sizeof(MDB_db)+1); size += tsize = sizeof(MDB_txn); } else { /* Reuse preallocated write txn. However, do not touch it until * mdb_txn_renew0() succeeds, since it currently may be active. */ txn = env->me_txn0; goto renew; } if ((txn = calloc(1, size)) == NULL) { DPRINTF(("calloc: %s", strerror(errno))); return ENOMEM; } txn->mt_dbxs = env->me_dbxs; /* static */ txn->mt_dbs = (MDB_db *) ((char *)txn + tsize); txn->mt_dbflags = (unsigned char *)txn + size - env->me_maxdbs; txn->mt_flags = flags; txn->mt_env = env; if (parent) { unsigned int i; txn->mt_cursors = (MDB_cursor **)(txn->mt_dbs + env->me_maxdbs); txn->mt_dbiseqs = parent->mt_dbiseqs; txn->mt_u.dirty_list = malloc(sizeof(MDB_ID2)*MDB_IDL_UM_SIZE); if (!txn->mt_u.dirty_list || !(txn->mt_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX))) { free(txn->mt_u.dirty_list); free(txn); return ENOMEM; } txn->mt_txnid = parent->mt_txnid; txn->mt_dirty_room = parent->mt_dirty_room; txn->mt_u.dirty_list[0].mid = 0; txn->mt_spill_pgs = NULL; txn->mt_next_pgno = parent->mt_next_pgno; parent->mt_flags |= MDB_TXN_HAS_CHILD; parent->mt_child = txn; txn->mt_parent = parent; txn->mt_numdbs = parent->mt_numdbs; memcpy(txn->mt_dbs, parent->mt_dbs, txn->mt_numdbs * sizeof(MDB_db)); /* Copy parent's mt_dbflags, but clear DB_NEW */ for (i=0; imt_numdbs; i++) txn->mt_dbflags[i] = parent->mt_dbflags[i] & ~DB_NEW; rc = 0; ntxn = (MDB_ntxn *)txn; ntxn->mnt_pgstate = env->me_pgstate; /* save parent me_pghead & co */ if (env->me_pghead) { size = MDB_IDL_SIZEOF(env->me_pghead); env->me_pghead = mdb_midl_alloc(env->me_pghead[0]); if (env->me_pghead) memcpy(env->me_pghead, ntxn->mnt_pgstate.mf_pghead, size); else rc = ENOMEM; } if (!rc) rc = mdb_cursor_shadow(parent, txn); if (rc) mdb_txn_end(txn, MDB_END_FAIL_BEGINCHILD); } else { /* MDB_RDONLY */ txn->mt_dbiseqs = env->me_dbiseqs; renew: rc = mdb_txn_renew0(txn); } if (rc) { if (txn != env->me_txn0) free(txn); } else { txn->mt_flags |= flags; /* could not change txn=me_txn0 earlier */ *ret = txn; DPRINTF(("begin txn %"Z"u%c %p on mdbenv %p, root page %"Z"u", txn->mt_txnid, (flags & MDB_RDONLY) ? 'r' : 'w', (void *) txn, (void *) env, txn->mt_dbs[MAIN_DBI].md_root)); } return rc; } MDB_env * mdb_txn_env(MDB_txn *txn) { if(!txn) return NULL; return txn->mt_env; } size_t mdb_txn_id(MDB_txn *txn) { if(!txn) return 0; return txn->mt_txnid; } /** Export or close DBI handles opened in this txn. */ static void mdb_dbis_update(MDB_txn *txn, int keep) { int i; MDB_dbi n = txn->mt_numdbs; MDB_env *env = txn->mt_env; unsigned char *tdbflags = txn->mt_dbflags; for (i = n; --i >= CORE_DBS;) { if (tdbflags[i] & DB_NEW) { if (keep) { env->me_dbflags[i] = txn->mt_dbs[i].md_flags | MDB_VALID; } else { char *ptr = env->me_dbxs[i].md_name.mv_data; if (ptr) { env->me_dbxs[i].md_name.mv_data = NULL; env->me_dbxs[i].md_name.mv_size = 0; env->me_dbflags[i] = 0; env->me_dbiseqs[i]++; free(ptr); } } } } if (keep && env->me_numdbs < n) env->me_numdbs = n; } /** End a transaction, except successful commit of a nested transaction. * May be called twice for readonly txns: First reset it, then abort. * @param[in] txn the transaction handle to end * @param[in] mode why and how to end the transaction */ static void mdb_txn_end(MDB_txn *txn, unsigned mode) { MDB_env *env = txn->mt_env; #if MDB_DEBUG static const char *const names[] = MDB_END_NAMES; #endif /* Export or close DBI handles opened in this txn */ mdb_dbis_update(txn, mode & MDB_END_UPDATE); DPRINTF(("%s txn %"Z"u%c %p on mdbenv %p, root page %"Z"u", names[mode & MDB_END_OPMASK], txn->mt_txnid, (txn->mt_flags & MDB_TXN_RDONLY) ? 'r' : 'w', (void *) txn, (void *)env, txn->mt_dbs[MAIN_DBI].md_root)); if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { if (txn->mt_u.reader) { txn->mt_u.reader->mr_txnid = (txnid_t)-1; if (!(env->me_flags & MDB_NOTLS)) { txn->mt_u.reader = NULL; /* txn does not own reader */ } else if (mode & MDB_END_SLOT) { txn->mt_u.reader->mr_pid = 0; txn->mt_u.reader = NULL; } /* else txn owns the slot until it does MDB_END_SLOT */ } txn->mt_numdbs = 0; /* prevent further DBI activity */ txn->mt_flags |= MDB_TXN_FINISHED; } else if (!F_ISSET(txn->mt_flags, MDB_TXN_FINISHED)) { pgno_t *pghead = env->me_pghead; if (!(mode & MDB_END_UPDATE)) /* !(already closed cursors) */ mdb_cursors_close(txn, 0); if (!(env->me_flags & MDB_WRITEMAP)) { mdb_dlist_free(txn); } txn->mt_numdbs = 0; txn->mt_flags = MDB_TXN_FINISHED; if (!txn->mt_parent) { mdb_midl_shrink(&txn->mt_free_pgs); env->me_free_pgs = txn->mt_free_pgs; /* me_pgstate: */ env->me_pghead = NULL; env->me_pglast = 0; env->me_txn = NULL; mode = 0; /* txn == env->me_txn0, do not free() it */ /* The writer mutex was locked in mdb_txn_begin. */ if (env->me_txns) UNLOCK_MUTEX(env->me_wmutex); } else { txn->mt_parent->mt_child = NULL; txn->mt_parent->mt_flags &= ~MDB_TXN_HAS_CHILD; env->me_pgstate = ((MDB_ntxn *)txn)->mnt_pgstate; mdb_midl_free(txn->mt_free_pgs); free(txn->mt_u.dirty_list); } mdb_midl_free(txn->mt_spill_pgs); mdb_midl_free(pghead); } if (mode & MDB_END_FREE) free(txn); } void mdb_txn_reset(MDB_txn *txn) { if (txn == NULL) return; /* This call is only valid for read-only txns */ if (!(txn->mt_flags & MDB_TXN_RDONLY)) return; mdb_txn_end(txn, MDB_END_RESET); } void mdb_txn_abort(MDB_txn *txn) { if (txn == NULL) return; if (txn->mt_child) mdb_txn_abort(txn->mt_child); mdb_txn_end(txn, MDB_END_ABORT|MDB_END_SLOT|MDB_END_FREE); } /** Save the freelist as of this transaction to the freeDB. * This changes the freelist. Keep trying until it stabilizes. */ static int mdb_freelist_save(MDB_txn *txn) { /* env->me_pghead[] can grow and shrink during this call. * env->me_pglast and txn->mt_free_pgs[] can only grow. * Page numbers cannot disappear from txn->mt_free_pgs[]. */ MDB_cursor mc; MDB_env *env = txn->mt_env; int rc, maxfree_1pg = env->me_maxfree_1pg, more = 1; txnid_t pglast = 0, head_id = 0; pgno_t freecnt = 0, *free_pgs, *mop; ssize_t head_room = 0, total_room = 0, mop_len, clean_limit; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); if (env->me_pghead) { /* Make sure first page of freeDB is touched and on freelist */ rc = mdb_page_search(&mc, NULL, MDB_PS_FIRST|MDB_PS_MODIFY); if (rc && rc != MDB_NOTFOUND) return rc; } if (!env->me_pghead && txn->mt_loose_pgs) { /* Put loose page numbers in mt_free_pgs, since * we may be unable to return them to me_pghead. */ MDB_page *mp = txn->mt_loose_pgs; MDB_ID2 *dl = txn->mt_u.dirty_list; unsigned x; if ((rc = mdb_midl_need(&txn->mt_free_pgs, txn->mt_loose_count)) != 0) return rc; for (; mp; mp = NEXT_LOOSE_PAGE(mp)) { mdb_midl_xappend(txn->mt_free_pgs, mp->mp_pgno); /* must also remove from dirty list */ if (txn->mt_flags & MDB_TXN_WRITEMAP) { for (x=1; x<=dl[0].mid; x++) if (dl[x].mid == mp->mp_pgno) break; mdb_tassert(txn, x <= dl[0].mid); } else { x = mdb_mid2l_search(dl, mp->mp_pgno); mdb_tassert(txn, dl[x].mid == mp->mp_pgno); mdb_dpage_free(env, mp); } dl[x].mptr = NULL; } { /* squash freed slots out of the dirty list */ unsigned y; for (y=1; dl[y].mptr && y <= dl[0].mid; y++); if (y <= dl[0].mid) { for(x=y, y++;;) { while (!dl[y].mptr && y <= dl[0].mid) y++; if (y > dl[0].mid) break; dl[x++] = dl[y++]; } dl[0].mid = x-1; } else { /* all slots freed */ dl[0].mid = 0; } } txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; } /* MDB_RESERVE cancels meminit in ovpage malloc (when no WRITEMAP) */ clean_limit = (env->me_flags & (MDB_NOMEMINIT|MDB_WRITEMAP)) ? SSIZE_MAX : maxfree_1pg; for (;;) { /* Come back here after each Put() in case freelist changed */ MDB_val key, data; pgno_t *pgs; ssize_t j; /* If using records from freeDB which we have not yet * deleted, delete them and any we reserved for me_pghead. */ while (pglast < env->me_pglast) { rc = mdb_cursor_first(&mc, &key, NULL); if (rc) return rc; pglast = head_id = *(txnid_t *)key.mv_data; total_room = head_room = 0; mdb_tassert(txn, pglast <= env->me_pglast); rc = mdb_cursor_del(&mc, 0); if (rc) return rc; } /* Save the IDL of pages freed by this txn, to a single record */ if (freecnt < txn->mt_free_pgs[0]) { if (!freecnt) { /* Make sure last page of freeDB is touched and on freelist */ rc = mdb_page_search(&mc, NULL, MDB_PS_LAST|MDB_PS_MODIFY); if (rc && rc != MDB_NOTFOUND) return rc; } free_pgs = txn->mt_free_pgs; /* Write to last page of freeDB */ key.mv_size = sizeof(txn->mt_txnid); key.mv_data = &txn->mt_txnid; do { freecnt = free_pgs[0]; data.mv_size = MDB_IDL_SIZEOF(free_pgs); rc = mdb_cursor_put(&mc, &key, &data, MDB_RESERVE); if (rc) return rc; /* Retry if mt_free_pgs[] grew during the Put() */ free_pgs = txn->mt_free_pgs; } while (freecnt < free_pgs[0]); mdb_midl_sort(free_pgs); memcpy(data.mv_data, free_pgs, data.mv_size); #if (MDB_DEBUG) > 1 { unsigned int i = free_pgs[0]; DPRINTF(("IDL write txn %"Z"u root %"Z"u num %u", txn->mt_txnid, txn->mt_dbs[FREE_DBI].md_root, i)); for (; i; i--) DPRINTF(("IDL %"Z"u", free_pgs[i])); } #endif continue; } mop = env->me_pghead; mop_len = (mop ? mop[0] : 0) + txn->mt_loose_count; /* Reserve records for me_pghead[]. Split it if multi-page, * to avoid searching freeDB for a page range. Use keys in * range [1,me_pglast]: Smaller than txnid of oldest reader. */ if (total_room >= mop_len) { if (total_room == mop_len || --more < 0) break; } else if (head_room >= maxfree_1pg && head_id > 1) { /* Keep current record (overflow page), add a new one */ head_id--; head_room = 0; } /* (Re)write {key = head_id, IDL length = head_room} */ total_room -= head_room; head_room = mop_len - total_room; if (head_room > maxfree_1pg && head_id > 1) { /* Overflow multi-page for part of me_pghead */ head_room /= head_id; /* amortize page sizes */ head_room += maxfree_1pg - head_room % (maxfree_1pg + 1); } else if (head_room < 0) { /* Rare case, not bothering to delete this record */ head_room = 0; } key.mv_size = sizeof(head_id); key.mv_data = &head_id; data.mv_size = (head_room + 1) * sizeof(pgno_t); rc = mdb_cursor_put(&mc, &key, &data, MDB_RESERVE); if (rc) return rc; /* IDL is initially empty, zero out at least the length */ pgs = (pgno_t *)data.mv_data; j = head_room > clean_limit ? head_room : 0; do { pgs[j] = 0; } while (--j >= 0); total_room += head_room; } /* Return loose page numbers to me_pghead, though usually none are * left at this point. The pages themselves remain in dirty_list. */ if (txn->mt_loose_pgs) { MDB_page *mp = txn->mt_loose_pgs; unsigned count = txn->mt_loose_count; MDB_IDL loose; /* Room for loose pages + temp IDL with same */ if ((rc = mdb_midl_need(&env->me_pghead, 2*count+1)) != 0) return rc; mop = env->me_pghead; loose = mop + MDB_IDL_ALLOCLEN(mop) - count; for (count = 0; mp; mp = NEXT_LOOSE_PAGE(mp)) loose[ ++count ] = mp->mp_pgno; loose[0] = count; mdb_midl_sort(loose); mdb_midl_xmerge(mop, loose); txn->mt_loose_pgs = NULL; txn->mt_loose_count = 0; mop_len = mop[0]; } /* Fill in the reserved me_pghead records */ rc = MDB_SUCCESS; if (mop_len) { MDB_val key, data; mop += mop_len; rc = mdb_cursor_first(&mc, &key, &data); for (; !rc; rc = mdb_cursor_next(&mc, &key, &data, MDB_NEXT)) { txnid_t id = *(txnid_t *)key.mv_data; ssize_t len = (ssize_t)(data.mv_size / sizeof(MDB_ID)) - 1; MDB_ID save; mdb_tassert(txn, len >= 0 && id <= env->me_pglast); key.mv_data = &id; if (len > mop_len) { len = mop_len; data.mv_size = (len + 1) * sizeof(MDB_ID); } data.mv_data = mop -= len; save = mop[0]; mop[0] = len; rc = mdb_cursor_put(&mc, &key, &data, MDB_CURRENT); mop[0] = save; if (rc || !(mop_len -= len)) break; } } return rc; } /** Flush (some) dirty pages to the map, after clearing their dirty flag. * @param[in] txn the transaction that's being committed * @param[in] keep number of initial pages in dirty_list to keep dirty. * @return 0 on success, non-zero on failure. */ static int mdb_page_flush(MDB_txn *txn, int keep) { MDB_env *env = txn->mt_env; MDB_ID2L dl = txn->mt_u.dirty_list; unsigned psize = env->me_psize, j; int i, pagecount = dl[0].mid, rc; size_t size = 0, pos = 0; pgno_t pgno = 0; MDB_page *dp = NULL; #ifdef _WIN32 OVERLAPPED ov; #else struct iovec iov[MDB_COMMIT_PAGES]; ssize_t wpos = 0, wsize = 0, wres; size_t next_pos = 1; /* impossible pos, so pos != next_pos */ int n = 0; #endif j = i = keep; if (env->me_flags & MDB_WRITEMAP) { /* Clear dirty flags */ while (++i <= pagecount) { dp = dl[i].mptr; /* Don't flush this page yet */ if (dp->mp_flags & (P_LOOSE|P_KEEP)) { dp->mp_flags &= ~P_KEEP; dl[++j] = dl[i]; continue; } dp->mp_flags &= ~P_DIRTY; } goto done; } /* Write the pages */ for (;;) { if (++i <= pagecount) { dp = dl[i].mptr; /* Don't flush this page yet */ if (dp->mp_flags & (P_LOOSE|P_KEEP)) { dp->mp_flags &= ~P_KEEP; dl[i].mid = 0; continue; } pgno = dl[i].mid; /* clear dirty flag */ dp->mp_flags &= ~P_DIRTY; pos = pgno * psize; size = psize; if (IS_OVERFLOW(dp)) size *= dp->mp_pages; } #ifdef _WIN32 else break; /* Windows actually supports scatter/gather I/O, but only on * unbuffered file handles. Since we're relying on the OS page * cache for all our data, that's self-defeating. So we just * write pages one at a time. We use the ov structure to set * the write offset, to at least save the overhead of a Seek * system call. */ DPRINTF(("committing page %"Z"u", pgno)); memset(&ov, 0, sizeof(ov)); ov.Offset = pos & 0xffffffff; ov.OffsetHigh = pos >> 16 >> 16; if (!WriteFile(env->me_fd, dp, size, NULL, &ov)) { rc = ErrCode(); DPRINTF(("WriteFile: %d", rc)); return rc; } #else /* Write up to MDB_COMMIT_PAGES dirty pages at a time. */ if (pos!=next_pos || n==MDB_COMMIT_PAGES || wsize+size>MAX_WRITE) { if (n) { retry_write: /* Write previous page(s) */ #ifdef MDB_USE_PWRITEV wres = pwritev(env->me_fd, iov, n, wpos); #else if (n == 1) { wres = pwrite(env->me_fd, iov[0].iov_base, wsize, wpos); } else { retry_seek: if (lseek(env->me_fd, wpos, SEEK_SET) == -1) { rc = ErrCode(); if (rc == EINTR) goto retry_seek; DPRINTF(("lseek: %s", strerror(rc))); return rc; } wres = writev(env->me_fd, iov, n); } #endif if (wres != wsize) { if (wres < 0) { rc = ErrCode(); if (rc == EINTR) goto retry_write; DPRINTF(("Write error: %s", strerror(rc))); } else { rc = EIO; /* TODO: Use which error code? */ DPUTS("short write, filesystem full?"); } return rc; } n = 0; } if (i > pagecount) break; wpos = pos; wsize = 0; } DPRINTF(("committing page %"Z"u", pgno)); next_pos = pos + size; iov[n].iov_len = size; iov[n].iov_base = (char *)dp; wsize += size; n++; #endif /* _WIN32 */ } /* MIPS has cache coherency issues, this is a no-op everywhere else * Note: for any size >= on-chip cache size, entire on-chip cache is * flushed. */ CACHEFLUSH(env->me_map, txn->mt_next_pgno * env->me_psize, DCACHE); for (i = keep; ++i <= pagecount; ) { dp = dl[i].mptr; /* This is a page we skipped above */ if (!dl[i].mid) { dl[++j] = dl[i]; dl[j].mid = dp->mp_pgno; continue; } mdb_dpage_free(env, dp); } done: i--; txn->mt_dirty_room += i - j; dl[0].mid = j; return MDB_SUCCESS; } int mdb_txn_commit(MDB_txn *txn) { int rc; unsigned int i, end_mode; MDB_env *env; if (txn == NULL) return EINVAL; /* mdb_txn_end() mode for a commit which writes nothing */ end_mode = MDB_END_EMPTY_COMMIT|MDB_END_UPDATE|MDB_END_SLOT|MDB_END_FREE; if (txn->mt_child) { rc = mdb_txn_commit(txn->mt_child); if (rc) goto fail; } env = txn->mt_env; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) { goto done; } if (txn->mt_flags & (MDB_TXN_FINISHED|MDB_TXN_ERROR)) { DPUTS("txn has failed/finished, can't commit"); if (txn->mt_parent) txn->mt_parent->mt_flags |= MDB_TXN_ERROR; rc = MDB_BAD_TXN; goto fail; } if (txn->mt_parent) { MDB_txn *parent = txn->mt_parent; MDB_page **lp; MDB_ID2L dst, src; MDB_IDL pspill; unsigned x, y, len, ps_len; /* Append our free list to parent's */ rc = mdb_midl_append_list(&parent->mt_free_pgs, txn->mt_free_pgs); if (rc) goto fail; mdb_midl_free(txn->mt_free_pgs); /* Failures after this must either undo the changes * to the parent or set MDB_TXN_ERROR in the parent. */ parent->mt_next_pgno = txn->mt_next_pgno; parent->mt_flags = txn->mt_flags; /* Merge our cursors into parent's and close them */ mdb_cursors_close(txn, 1); /* Update parent's DB table. */ memcpy(parent->mt_dbs, txn->mt_dbs, txn->mt_numdbs * sizeof(MDB_db)); parent->mt_numdbs = txn->mt_numdbs; parent->mt_dbflags[FREE_DBI] = txn->mt_dbflags[FREE_DBI]; parent->mt_dbflags[MAIN_DBI] = txn->mt_dbflags[MAIN_DBI]; for (i=CORE_DBS; imt_numdbs; i++) { /* preserve parent's DB_NEW status */ x = parent->mt_dbflags[i] & DB_NEW; parent->mt_dbflags[i] = txn->mt_dbflags[i] | x; } dst = parent->mt_u.dirty_list; src = txn->mt_u.dirty_list; /* Remove anything in our dirty list from parent's spill list */ if ((pspill = parent->mt_spill_pgs) && (ps_len = pspill[0])) { x = y = ps_len; pspill[0] = (pgno_t)-1; /* Mark our dirty pages as deleted in parent spill list */ for (i=0, len=src[0].mid; ++i <= len; ) { MDB_ID pn = src[i].mid << 1; while (pn > pspill[x]) x--; if (pn == pspill[x]) { pspill[x] = 1; y = --x; } } /* Squash deleted pagenums if we deleted any */ for (x=y; ++x <= ps_len; ) if (!(pspill[x] & 1)) pspill[++y] = pspill[x]; pspill[0] = y; } /* Remove anything in our spill list from parent's dirty list */ if (txn->mt_spill_pgs && txn->mt_spill_pgs[0]) { for (i=1; i<=txn->mt_spill_pgs[0]; i++) { MDB_ID pn = txn->mt_spill_pgs[i]; if (pn & 1) continue; /* deleted spillpg */ pn >>= 1; y = mdb_mid2l_search(dst, pn); if (y <= dst[0].mid && dst[y].mid == pn) { free(dst[y].mptr); while (y < dst[0].mid) { dst[y] = dst[y+1]; y++; } dst[0].mid--; } } } /* Find len = length of merging our dirty list with parent's */ x = dst[0].mid; dst[0].mid = 0; /* simplify loops */ if (parent->mt_parent) { len = x + src[0].mid; y = mdb_mid2l_search(src, dst[x].mid + 1) - 1; for (i = x; y && i; y--) { pgno_t yp = src[y].mid; while (yp < dst[i].mid) i--; if (yp == dst[i].mid) { i--; len--; } } } else { /* Simplify the above for single-ancestor case */ len = MDB_IDL_UM_MAX - txn->mt_dirty_room; } /* Merge our dirty list with parent's */ y = src[0].mid; for (i = len; y; dst[i--] = src[y--]) { pgno_t yp = src[y].mid; while (yp < dst[x].mid) dst[i--] = dst[x--]; if (yp == dst[x].mid) free(dst[x--].mptr); } mdb_tassert(txn, i == x); dst[0].mid = len; free(txn->mt_u.dirty_list); parent->mt_dirty_room = txn->mt_dirty_room; if (txn->mt_spill_pgs) { if (parent->mt_spill_pgs) { /* TODO: Prevent failure here, so parent does not fail */ rc = mdb_midl_append_list(&parent->mt_spill_pgs, txn->mt_spill_pgs); if (rc) parent->mt_flags |= MDB_TXN_ERROR; mdb_midl_free(txn->mt_spill_pgs); mdb_midl_sort(parent->mt_spill_pgs); } else { parent->mt_spill_pgs = txn->mt_spill_pgs; } } /* Append our loose page list to parent's */ for (lp = &parent->mt_loose_pgs; *lp; lp = &NEXT_LOOSE_PAGE(*lp)) ; *lp = txn->mt_loose_pgs; parent->mt_loose_count += txn->mt_loose_count; parent->mt_child = NULL; mdb_midl_free(((MDB_ntxn *)txn)->mnt_pgstate.mf_pghead); free(txn); return rc; } if (txn != env->me_txn) { DPUTS("attempt to commit unknown transaction"); rc = EINVAL; goto fail; } mdb_cursors_close(txn, 0); if (!txn->mt_u.dirty_list[0].mid && !(txn->mt_flags & (MDB_TXN_DIRTY|MDB_TXN_SPILLS))) goto done; DPRINTF(("committing txn %"Z"u %p on mdbenv %p, root page %"Z"u", txn->mt_txnid, (void*)txn, (void*)env, txn->mt_dbs[MAIN_DBI].md_root)); /* Update DB root pointers */ if (txn->mt_numdbs > CORE_DBS) { MDB_cursor mc; MDB_dbi i; MDB_val data; data.mv_size = sizeof(MDB_db); mdb_cursor_init(&mc, txn, MAIN_DBI, NULL); for (i = CORE_DBS; i < txn->mt_numdbs; i++) { if (txn->mt_dbflags[i] & DB_DIRTY) { if (TXN_DBI_CHANGED(txn, i)) { rc = MDB_BAD_DBI; goto fail; } data.mv_data = &txn->mt_dbs[i]; rc = mdb_cursor_put(&mc, &txn->mt_dbxs[i].md_name, &data, F_SUBDATA); if (rc) goto fail; } } } rc = mdb_freelist_save(txn); if (rc) goto fail; mdb_midl_free(env->me_pghead); env->me_pghead = NULL; mdb_midl_shrink(&txn->mt_free_pgs); #if (MDB_DEBUG) > 2 mdb_audit(txn); #endif if ((rc = mdb_page_flush(txn, 0)) || (rc = mdb_env_sync(env, 0)) || (rc = mdb_env_write_meta(txn))) goto fail; end_mode = MDB_END_COMMITTED|MDB_END_UPDATE; done: mdb_txn_end(txn, end_mode); return MDB_SUCCESS; fail: mdb_txn_abort(txn); return rc; } /** Read the environment parameters of a DB environment before * mapping it into memory. * @param[in] env the environment handle * @param[out] meta address of where to store the meta information * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_read_header(MDB_env *env, MDB_meta *meta) { MDB_metabuf pbuf; MDB_page *p; MDB_meta *m; int i, rc, off; enum { Size = sizeof(pbuf) }; /* We don't know the page size yet, so use a minimum value. * Read both meta pages so we can use the latest one. */ for (i=off=0; imm_psize) { #ifdef _WIN32 DWORD len; OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); ov.Offset = off; rc = ReadFile(env->me_fd, &pbuf, Size, &len, &ov) ? (int)len : -1; if (rc == -1 && ErrCode() == ERROR_HANDLE_EOF) rc = 0; #else rc = pread(env->me_fd, &pbuf, Size, off); #endif if (rc != Size) { if (rc == 0 && off == 0) return ENOENT; rc = rc < 0 ? (int) ErrCode() : MDB_INVALID; DPRINTF(("read: %s", mdb_strerror(rc))); return rc; } p = (MDB_page *)&pbuf; if (!F_ISSET(p->mp_flags, P_META)) { DPRINTF(("page %"Z"u not a meta page", p->mp_pgno)); return MDB_INVALID; } m = METADATA(p); if (m->mm_magic != MDB_MAGIC) { DPUTS("meta has invalid magic"); return MDB_INVALID; } if (m->mm_version != MDB_DATA_VERSION) { DPRINTF(("database is version %u, expected version %u", m->mm_version, MDB_DATA_VERSION)); return MDB_VERSION_MISMATCH; } if (off == 0 || m->mm_txnid > meta->mm_txnid) *meta = *m; } return 0; } /** Fill in most of the zeroed #MDB_meta for an empty database environment */ static void ESECT mdb_env_init_meta0(MDB_env *env, MDB_meta *meta) { meta->mm_magic = MDB_MAGIC; meta->mm_version = MDB_DATA_VERSION; meta->mm_mapsize = env->me_mapsize; meta->mm_psize = env->me_psize; meta->mm_last_pg = NUM_METAS-1; meta->mm_flags = env->me_flags & 0xffff; meta->mm_flags |= MDB_INTEGERKEY; /* this is mm_dbs[FREE_DBI].md_flags */ meta->mm_dbs[FREE_DBI].md_root = P_INVALID; meta->mm_dbs[MAIN_DBI].md_root = P_INVALID; } /** Write the environment parameters of a freshly created DB environment. * @param[in] env the environment handle * @param[in] meta the #MDB_meta to write * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_init_meta(MDB_env *env, MDB_meta *meta) { MDB_page *p, *q; int rc; unsigned int psize; #ifdef _WIN32 DWORD len; OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); #define DO_PWRITE(rc, fd, ptr, size, len, pos) do { \ ov.Offset = pos; \ rc = WriteFile(fd, ptr, size, &len, &ov); } while(0) #else int len; #define DO_PWRITE(rc, fd, ptr, size, len, pos) do { \ len = pwrite(fd, ptr, size, pos); \ if (len == -1 && ErrCode() == EINTR) continue; \ rc = (len >= 0); break; } while(1) #endif DPUTS("writing new meta page"); psize = env->me_psize; p = calloc(NUM_METAS, psize); if (!p) return ENOMEM; p->mp_pgno = 0; p->mp_flags = P_META; *(MDB_meta *)METADATA(p) = *meta; q = (MDB_page *)((char *)p + psize); q->mp_pgno = 1; q->mp_flags = P_META; *(MDB_meta *)METADATA(q) = *meta; DO_PWRITE(rc, env->me_fd, p, psize * NUM_METAS, len, 0); if (!rc) rc = ErrCode(); else if ((unsigned) len == psize * NUM_METAS) rc = MDB_SUCCESS; else rc = ENOSPC; free(p); return rc; } /** Update the environment info to commit a transaction. * @param[in] txn the transaction that's being committed * @return 0 on success, non-zero on failure. */ static int mdb_env_write_meta(MDB_txn *txn) { MDB_env *env; MDB_meta meta, metab, *mp; unsigned flags; size_t mapsize; off_t off; int rc, len, toggle; char *ptr; HANDLE mfd; #ifdef _WIN32 OVERLAPPED ov; #else int r2; #endif toggle = txn->mt_txnid & 1; DPRINTF(("writing meta page %d for root page %"Z"u", toggle, txn->mt_dbs[MAIN_DBI].md_root)); env = txn->mt_env; flags = env->me_flags; mp = env->me_metas[toggle]; mapsize = env->me_metas[toggle ^ 1]->mm_mapsize; /* Persist any increases of mapsize config */ if (mapsize < env->me_mapsize) mapsize = env->me_mapsize; if (flags & MDB_WRITEMAP) { mp->mm_mapsize = mapsize; mp->mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI]; mp->mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; mp->mm_last_pg = txn->mt_next_pgno - 1; #if (__GNUC__ * 100 + __GNUC_MINOR__ >= 404) && /* TODO: portability */ \ !(defined(__i386__) || defined(__x86_64__)) /* LY: issue a memory barrier, if not x86. ITS#7969 */ __sync_synchronize(); #endif mp->mm_txnid = txn->mt_txnid; if (!(flags & (MDB_NOMETASYNC|MDB_NOSYNC))) { unsigned meta_size = env->me_psize; rc = (env->me_flags & MDB_MAPASYNC) ? MS_ASYNC : MS_SYNC; ptr = (char *)mp - PAGEHDRSZ; #ifndef _WIN32 /* POSIX msync() requires ptr = start of OS page */ r2 = (ptr - env->me_map) & (env->me_os_psize - 1); ptr -= r2; meta_size += r2; #endif if (MDB_MSYNC(ptr, meta_size, rc)) { rc = ErrCode(); goto fail; } } goto done; } metab.mm_txnid = mp->mm_txnid; metab.mm_last_pg = mp->mm_last_pg; meta.mm_mapsize = mapsize; meta.mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI]; meta.mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; meta.mm_last_pg = txn->mt_next_pgno - 1; meta.mm_txnid = txn->mt_txnid; off = offsetof(MDB_meta, mm_mapsize); ptr = (char *)&meta + off; len = sizeof(MDB_meta) - off; off += (char *)mp - env->me_map; /* Write to the SYNC fd unless MDB_NOSYNC/MDB_NOMETASYNC. * (me_mfd goes to the same file as me_fd, but writing to it * also syncs to disk. Avoids a separate fdatasync() call.) */ mfd = (flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ? env->me_fd : env->me_mfd; #ifdef _WIN32 { memset(&ov, 0, sizeof(ov)); ov.Offset = off; if (!WriteFile(mfd, ptr, len, (DWORD *)&rc, &ov)) rc = -1; } #else retry_write: rc = pwrite(mfd, ptr, len, off); #endif if (rc != len) { rc = rc < 0 ? ErrCode() : EIO; #ifndef _WIN32 if (rc == EINTR) goto retry_write; #endif DPUTS("write failed, disk error?"); /* On a failure, the pagecache still contains the new data. * Write some old data back, to prevent it from being used. * Use the non-SYNC fd; we know it will fail anyway. */ meta.mm_last_pg = metab.mm_last_pg; meta.mm_txnid = metab.mm_txnid; #ifdef _WIN32 memset(&ov, 0, sizeof(ov)); ov.Offset = off; WriteFile(env->me_fd, ptr, len, NULL, &ov); #else r2 = pwrite(env->me_fd, ptr, len, off); (void)r2; /* Silence warnings. We don't care about pwrite's return value */ #endif fail: env->me_flags |= MDB_FATAL_ERROR; return rc; } /* MIPS has cache coherency issues, this is a no-op everywhere else */ CACHEFLUSH(env->me_map + off, len, DCACHE); done: /* Memory ordering issues are irrelevant; since the entire writer * is wrapped by wmutex, all of these changes will become visible * after the wmutex is unlocked. Since the DB is multi-version, * readers will get consistent data regardless of how fresh or * how stale their view of these values is. */ if (env->me_txns) env->me_txns->mti_txnid = txn->mt_txnid; return MDB_SUCCESS; } /** Check both meta pages to see which one is newer. * @param[in] env the environment handle * @return newest #MDB_meta. */ static MDB_meta * mdb_env_pick_meta(const MDB_env *env) { MDB_meta *const *metas = env->me_metas; return metas[ metas[0]->mm_txnid < metas[1]->mm_txnid ]; } int ESECT mdb_env_create(MDB_env **env) { MDB_env *e; e = calloc(1, sizeof(MDB_env)); if (!e) return ENOMEM; e->me_maxreaders = DEFAULT_READERS; e->me_maxdbs = e->me_numdbs = CORE_DBS; e->me_fd = INVALID_HANDLE_VALUE; e->me_lfd = INVALID_HANDLE_VALUE; e->me_mfd = INVALID_HANDLE_VALUE; #ifdef MDB_USE_POSIX_SEM e->me_rmutex = SEM_FAILED; e->me_wmutex = SEM_FAILED; #endif e->me_pid = getpid(); GET_PAGESIZE(e->me_os_psize); VGMEMP_CREATE(e,0,0); *env = e; return MDB_SUCCESS; } static int ESECT mdb_env_map(MDB_env *env, void *addr) { MDB_page *p; unsigned int flags = env->me_flags; #ifdef _WIN32 int rc; HANDLE mh; LONG sizelo, sizehi; size_t msize; if (flags & MDB_RDONLY) { /* Don't set explicit map size, use whatever exists */ msize = 0; sizelo = 0; sizehi = 0; } else { msize = env->me_mapsize; sizelo = msize & 0xffffffff; sizehi = msize >> 16 >> 16; /* only needed on Win64 */ /* Windows won't create mappings for zero length files. * and won't map more than the file size. * Just set the maxsize right now. */ if (!(flags & MDB_WRITEMAP) && (SetFilePointer(env->me_fd, sizelo, &sizehi, 0) != (DWORD)sizelo || !SetEndOfFile(env->me_fd) || SetFilePointer(env->me_fd, 0, NULL, 0) != 0)) return ErrCode(); } mh = CreateFileMapping(env->me_fd, NULL, flags & MDB_WRITEMAP ? PAGE_READWRITE : PAGE_READONLY, sizehi, sizelo, NULL); if (!mh) return ErrCode(); env->me_map = MapViewOfFileEx(mh, flags & MDB_WRITEMAP ? FILE_MAP_WRITE : FILE_MAP_READ, 0, 0, msize, addr); rc = env->me_map ? 0 : ErrCode(); CloseHandle(mh); if (rc) return rc; #else int mmap_flags = MAP_SHARED; int prot = PROT_READ; #ifdef MAP_NOSYNC /* Used on FreeBSD */ if (flags & MDB_NOSYNC) mmap_flags |= MAP_NOSYNC; #endif if (flags & MDB_WRITEMAP) { prot |= PROT_WRITE; if (ftruncate(env->me_fd, env->me_mapsize) < 0) return ErrCode(); } env->me_map = mmap(addr, env->me_mapsize, prot, mmap_flags, env->me_fd, 0); if (env->me_map == MAP_FAILED) { env->me_map = NULL; return ErrCode(); } if (flags & MDB_NORDAHEAD) { /* Turn off readahead. It's harmful when the DB is larger than RAM. */ #ifdef MADV_RANDOM madvise(env->me_map, env->me_mapsize, MADV_RANDOM); #else #ifdef POSIX_MADV_RANDOM posix_madvise(env->me_map, env->me_mapsize, POSIX_MADV_RANDOM); #endif /* POSIX_MADV_RANDOM */ #endif /* MADV_RANDOM */ } #endif /* _WIN32 */ /* Can happen because the address argument to mmap() is just a * hint. mmap() can pick another, e.g. if the range is in use. * The MAP_FIXED flag would prevent that, but then mmap could * instead unmap existing pages to make room for the new map. */ if (addr && env->me_map != addr) return EBUSY; /* TODO: Make a new MDB_* error code? */ p = (MDB_page *)env->me_map; env->me_metas[0] = METADATA(p); env->me_metas[1] = (MDB_meta *)((char *)env->me_metas[0] + env->me_psize); return MDB_SUCCESS; } int ESECT mdb_env_set_mapsize(MDB_env *env, size_t size) { /* If env is already open, caller is responsible for making * sure there are no active txns. */ if (env->me_map) { int rc; MDB_meta *meta; void *old; if (env->me_txn) return EINVAL; meta = mdb_env_pick_meta(env); if (!size) size = meta->mm_mapsize; { /* Silently round up to minimum if the size is too small */ size_t minsize = (meta->mm_last_pg + 1) * env->me_psize; if (size < minsize) size = minsize; } munmap(env->me_map, env->me_mapsize); env->me_mapsize = size; old = (env->me_flags & MDB_FIXEDMAP) ? env->me_map : NULL; rc = mdb_env_map(env, old); if (rc) return rc; } env->me_mapsize = size; if (env->me_psize) env->me_maxpg = env->me_mapsize / env->me_psize; return MDB_SUCCESS; } int ESECT mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs) { if (env->me_map) return EINVAL; env->me_maxdbs = dbs + CORE_DBS; return MDB_SUCCESS; } int ESECT mdb_env_set_maxreaders(MDB_env *env, unsigned int readers) { if (env->me_map || readers < 1) return EINVAL; env->me_maxreaders = readers; return MDB_SUCCESS; } int ESECT mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers) { if (!env || !readers) return EINVAL; *readers = env->me_maxreaders; return MDB_SUCCESS; } static int ESECT mdb_fsize(HANDLE fd, size_t *size) { #ifdef _WIN32 LARGE_INTEGER fsize; if (!GetFileSizeEx(fd, &fsize)) return ErrCode(); *size = fsize.QuadPart; #else struct stat st; if (fstat(fd, &st)) return ErrCode(); *size = st.st_size; #endif return MDB_SUCCESS; } #ifdef _WIN32 typedef wchar_t mdb_nchar_t; # define MDB_NAME(str) L##str # define mdb_name_cpy wcscpy #else /** Character type for file names: char on Unix, wchar_t on Windows */ typedef char mdb_nchar_t; # define MDB_NAME(str) str /**< #mdb_nchar_t[] string literal */ # define mdb_name_cpy strcpy /**< Copy name (#mdb_nchar_t string) */ #endif /** Filename - string of #mdb_nchar_t[] */ typedef struct MDB_name { int mn_len; /**< Length */ int mn_alloced; /**< True if #mn_val was malloced */ mdb_nchar_t *mn_val; /**< Contents */ } MDB_name; /** Filename suffixes [datafile,lockfile][without,with MDB_NOSUBDIR] */ static const mdb_nchar_t *const mdb_suffixes[2][2] = { { MDB_NAME("/data.mdb"), MDB_NAME("") }, { MDB_NAME("/lock.mdb"), MDB_NAME("-lock") } }; #define MDB_SUFFLEN 9 /**< Max string length in #mdb_suffixes[] */ /** Set up filename + scratch area for filename suffix, for opening files. * It should be freed with #mdb_fname_destroy(). * On Windows, paths are converted from char *UTF-8 to wchar_t *UTF-16. * * @param[in] path Pathname for #mdb_env_open(). * @param[in] envflags Whether a subdir and/or lockfile will be used. * @param[out] fname Resulting filename, with room for a suffix if necessary. */ static int ESECT mdb_fname_init(const char *path, unsigned envflags, MDB_name *fname) { int no_suffix = F_ISSET(envflags, MDB_NOSUBDIR|MDB_NOLOCK); fname->mn_alloced = 0; #ifdef _WIN32 return utf8_to_utf16(path, fname, no_suffix ? 0 : MDB_SUFFLEN); #else fname->mn_len = strlen(path); if (no_suffix) fname->mn_val = (char *) path; else if ((fname->mn_val = malloc(fname->mn_len + MDB_SUFFLEN+1)) != NULL) { fname->mn_alloced = 1; strcpy(fname->mn_val, path); } else return ENOMEM; return MDB_SUCCESS; #endif } /** Destroy \b fname from #mdb_fname_init() */ #define mdb_fname_destroy(fname) \ do { if ((fname).mn_alloced) free((fname).mn_val); } while (0) #ifdef O_CLOEXEC /* POSIX.1-2008: Set FD_CLOEXEC atomically at open() */ # define MDB_CLOEXEC O_CLOEXEC #else # define MDB_CLOEXEC 0 #endif /** File type, access mode etc. for #mdb_fopen() */ enum mdb_fopen_type { #ifdef _WIN32 MDB_O_RDONLY, MDB_O_RDWR, MDB_O_META, MDB_O_COPY, MDB_O_LOCKS #else /* A comment in mdb_fopen() explains some O_* flag choices. */ MDB_O_RDONLY= O_RDONLY, /**< for RDONLY me_fd */ MDB_O_RDWR = O_RDWR |O_CREAT, /**< for me_fd */ MDB_O_META = O_WRONLY|MDB_DSYNC |MDB_CLOEXEC, /**< for me_mfd */ MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL|MDB_CLOEXEC, /**< for #mdb_env_copy() */ /** Bitmask for open() flags in enum #mdb_fopen_type. The other bits * distinguish otherwise-equal MDB_O_* constants from each other. */ MDB_O_MASK = MDB_O_RDWR|MDB_CLOEXEC | MDB_O_RDONLY|MDB_O_META|MDB_O_COPY, MDB_O_LOCKS = MDB_O_RDWR|MDB_CLOEXEC | ((MDB_O_MASK+1) & ~MDB_O_MASK) /**< for me_lfd */ #endif }; /** Open an LMDB file. * @param[in] env The LMDB environment. * @param[in,out] fname Path from from #mdb_fname_init(). A suffix is * appended if necessary to create the filename, without changing mn_len. * @param[in] which Determines file type, access mode, etc. * @param[in] mode The Unix permissions for the file, if we create it. * @param[out] res Resulting file handle. * @return 0 on success, non-zero on failure. */ static int ESECT mdb_fopen(const MDB_env *env, MDB_name *fname, enum mdb_fopen_type which, mdb_mode_t mode, HANDLE *res) { int rc = MDB_SUCCESS; HANDLE fd; #ifdef _WIN32 DWORD acc, share, disp, attrs; #else int flags; #endif if (fname->mn_alloced) /* modifiable copy */ mdb_name_cpy(fname->mn_val + fname->mn_len, mdb_suffixes[which==MDB_O_LOCKS][F_ISSET(env->me_flags, MDB_NOSUBDIR)]); /* The directory must already exist. Usually the file need not. * MDB_O_META requires the file because we already created it using * MDB_O_RDWR. MDB_O_COPY must not overwrite an existing file. * * With MDB_O_COPY we do not want the OS to cache the writes, since * the source data is already in the OS cache. * * The lockfile needs FD_CLOEXEC (close file descriptor on exec*()) * to avoid the flock() issues noted under Caveats in lmdb.h. * Also set it for other filehandles which the user cannot get at * and close himself, which he may need after fork(). I.e. all but * me_fd, which programs do use via mdb_env_get_fd(). */ #ifdef _WIN32 acc = GENERIC_READ|GENERIC_WRITE; share = FILE_SHARE_READ|FILE_SHARE_WRITE; disp = OPEN_ALWAYS; attrs = FILE_ATTRIBUTE_NORMAL; switch (which) { case MDB_O_RDONLY: /* read-only datafile */ acc = GENERIC_READ; disp = OPEN_EXISTING; break; case MDB_O_META: /* for writing metapages */ acc = GENERIC_WRITE; disp = OPEN_EXISTING; attrs = FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH; break; case MDB_O_COPY: /* mdb_env_copy() & co */ acc = GENERIC_WRITE; share = 0; disp = CREATE_NEW; attrs = FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH; break; default: break; /* silence gcc -Wswitch (not all enum values handled) */ } fd = CreateFileW(fname->mn_val, acc, share, NULL, disp, attrs, NULL); #else fd = open(fname->mn_val, which & MDB_O_MASK, mode); #endif if (fd == INVALID_HANDLE_VALUE) rc = ErrCode(); #ifndef _WIN32 else { if (which != MDB_O_RDONLY && which != MDB_O_RDWR) { /* Set CLOEXEC if we could not pass it to open() */ if (!MDB_CLOEXEC && (flags = fcntl(fd, F_GETFD)) != -1) (void) fcntl(fd, F_SETFD, flags | FD_CLOEXEC); } if (which == MDB_O_COPY && env->me_psize >= env->me_os_psize) { /* This may require buffer alignment. There is no portable * way to ask how much, so we require OS pagesize alignment. */ # ifdef F_NOCACHE /* __APPLE__ */ (void) fcntl(fd, F_NOCACHE, 1); # elif defined O_DIRECT /* open(...O_DIRECT...) would break on filesystems without * O_DIRECT support (ITS#7682). Try to set it here instead. */ if ((flags = fcntl(fd, F_GETFL)) != -1) (void) fcntl(fd, F_SETFL, flags | O_DIRECT); # endif } } #endif /* !_WIN32 */ *res = fd; return rc; } #ifdef BROKEN_FDATASYNC #include #include #endif /** Further setup required for opening an LMDB environment */ static int ESECT mdb_env_open2(MDB_env *env) { unsigned int flags = env->me_flags; int i, newenv = 0, rc; MDB_meta meta; #ifdef _WIN32 /* See if we should use QueryLimited */ rc = GetVersion(); if ((rc & 0xff) > 5) env->me_pidquery = MDB_PROCESS_QUERY_LIMITED_INFORMATION; else env->me_pidquery = PROCESS_QUERY_INFORMATION; #endif /* _WIN32 */ #ifdef BROKEN_FDATASYNC /* ext3/ext4 fdatasync is broken on some older Linux kernels. * https://lkml.org/lkml/2012/9/3/83 * Kernels after 3.6-rc6 are known good. * https://lkml.org/lkml/2012/9/10/556 * See if the DB is on ext3/ext4, then check for new enough kernel * Kernels 2.6.32.60, 2.6.34.15, 3.2.30, and 3.5.4 are also known * to be patched. */ { struct statfs st; fstatfs(env->me_fd, &st); while (st.f_type == 0xEF53) { struct utsname uts; int i; uname(&uts); if (uts.release[0] < '3') { if (!strncmp(uts.release, "2.6.32.", 7)) { i = atoi(uts.release+7); if (i >= 60) break; /* 2.6.32.60 and newer is OK */ } else if (!strncmp(uts.release, "2.6.34.", 7)) { i = atoi(uts.release+7); if (i >= 15) break; /* 2.6.34.15 and newer is OK */ } } else if (uts.release[0] == '3') { i = atoi(uts.release+2); if (i > 5) break; /* 3.6 and newer is OK */ if (i == 5) { i = atoi(uts.release+4); if (i >= 4) break; /* 3.5.4 and newer is OK */ } else if (i == 2) { i = atoi(uts.release+4); if (i >= 30) break; /* 3.2.30 and newer is OK */ } } else { /* 4.x and newer is OK */ break; } env->me_flags |= MDB_FSYNCONLY; break; } } #endif if ((i = mdb_env_read_header(env, &meta)) != 0) { if (i != ENOENT) return i; DPUTS("new mdbenv"); newenv = 1; env->me_psize = env->me_os_psize; if (env->me_psize > MAX_PAGESIZE) env->me_psize = MAX_PAGESIZE; memset(&meta, 0, sizeof(meta)); mdb_env_init_meta0(env, &meta); meta.mm_mapsize = DEFAULT_MAPSIZE; } else { env->me_psize = meta.mm_psize; } /* Was a mapsize configured? */ if (!env->me_mapsize) { env->me_mapsize = meta.mm_mapsize; } { /* Make sure mapsize >= committed data size. Even when using * mm_mapsize, which could be broken in old files (ITS#7789). */ size_t minsize = (meta.mm_last_pg + 1) * meta.mm_psize; if (env->me_mapsize < minsize) env->me_mapsize = minsize; } meta.mm_mapsize = env->me_mapsize; if (newenv && !(flags & MDB_FIXEDMAP)) { /* mdb_env_map() may grow the datafile. Write the metapages * first, so the file will be valid if initialization fails. * Except with FIXEDMAP, since we do not yet know mm_address. * We could fill in mm_address later, but then a different * program might end up doing that - one with a memory layout * and map address which does not suit the main program. */ rc = mdb_env_init_meta(env, &meta); if (rc) return rc; newenv = 0; } rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta.mm_address : NULL); if (rc) return rc; if (newenv) { if (flags & MDB_FIXEDMAP) meta.mm_address = env->me_map; i = mdb_env_init_meta(env, &meta); if (i != MDB_SUCCESS) { return i; } } env->me_maxfree_1pg = (env->me_psize - PAGEHDRSZ) / sizeof(pgno_t) - 1; env->me_nodemax = (((env->me_psize - PAGEHDRSZ) / MDB_MINKEYS) & -2) - sizeof(indx_t); #if !(MDB_MAXKEYSIZE) env->me_maxkey = env->me_nodemax - (NODESIZE + sizeof(MDB_db)); #endif env->me_maxpg = env->me_mapsize / env->me_psize; #if MDB_DEBUG { MDB_meta *meta = mdb_env_pick_meta(env); MDB_db *db = &meta->mm_dbs[MAIN_DBI]; DPRINTF(("opened database version %u, pagesize %u", meta->mm_version, env->me_psize)); DPRINTF(("using meta page %d", (int) (meta->mm_txnid & 1))); DPRINTF(("depth: %u", db->md_depth)); DPRINTF(("entries: %"Z"u", db->md_entries)); DPRINTF(("branch pages: %"Z"u", db->md_branch_pages)); DPRINTF(("leaf pages: %"Z"u", db->md_leaf_pages)); DPRINTF(("overflow pages: %"Z"u", db->md_overflow_pages)); DPRINTF(("root: %"Z"u", db->md_root)); } #endif return MDB_SUCCESS; } /** Release a reader thread's slot in the reader lock table. * This function is called automatically when a thread exits. * @param[in] ptr This points to the slot in the reader lock table. */ static void mdb_env_reader_dest(void *ptr) { MDB_reader *reader = ptr; #ifndef _WIN32 if (reader->mr_pid == getpid()) /* catch pthread_exit() in child process */ #endif /* We omit the mutex, so do this atomically (i.e. skip mr_txnid) */ reader->mr_pid = 0; } #ifdef _WIN32 /** Junk for arranging thread-specific callbacks on Windows. This is * necessarily platform and compiler-specific. Windows supports up * to 1088 keys. Let's assume nobody opens more than 64 environments * in a single process, for now. They can override this if needed. */ #ifndef MAX_TLS_KEYS #define MAX_TLS_KEYS 64 #endif static pthread_key_t mdb_tls_keys[MAX_TLS_KEYS]; static int mdb_tls_nkeys; static void NTAPI mdb_tls_callback(PVOID module, DWORD reason, PVOID ptr) { int i; switch(reason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: for (i=0; ime_txns->mti_txnid = meta->mm_txnid; #ifdef _WIN32 { OVERLAPPED ov; /* First acquire a shared lock. The Unlock will * then release the existing exclusive lock. */ memset(&ov, 0, sizeof(ov)); if (!LockFileEx(env->me_lfd, 0, 0, 1, 0, &ov)) { rc = ErrCode(); } else { UnlockFile(env->me_lfd, 0, 0, 1, 0); *excl = 0; } } #else { struct flock lock_info; /* The shared lock replaces the existing lock */ memset((void *)&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_RDLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = 0; lock_info.l_len = 1; while ((rc = fcntl(env->me_lfd, F_SETLK, &lock_info)) && (rc = ErrCode()) == EINTR) ; *excl = rc ? -1 : 0; /* error may mean we lost the lock */ } #endif return rc; } /** Try to get exclusive lock, otherwise shared. * Maintain *excl = -1: no/unknown lock, 0: shared, 1: exclusive. */ static int ESECT mdb_env_excl_lock(MDB_env *env, int *excl) { int rc = 0; #ifdef _WIN32 if (LockFile(env->me_lfd, 0, 0, 1, 0)) { *excl = 1; } else { OVERLAPPED ov; memset(&ov, 0, sizeof(ov)); if (LockFileEx(env->me_lfd, 0, 0, 1, 0, &ov)) { *excl = 0; } else { rc = ErrCode(); } } #else struct flock lock_info; memset((void *)&lock_info, 0, sizeof(lock_info)); lock_info.l_type = F_WRLCK; lock_info.l_whence = SEEK_SET; lock_info.l_start = 0; lock_info.l_len = 1; while ((rc = fcntl(env->me_lfd, F_SETLK, &lock_info)) && (rc = ErrCode()) == EINTR) ; if (!rc) { *excl = 1; } else # ifndef MDB_USE_POSIX_MUTEX if (*excl < 0) /* always true when MDB_USE_POSIX_MUTEX */ # endif { lock_info.l_type = F_RDLCK; while ((rc = fcntl(env->me_lfd, F_SETLKW, &lock_info)) && (rc = ErrCode()) == EINTR) ; if (rc == 0) *excl = 0; } #endif return rc; } #ifdef MDB_USE_HASH /* * hash_64 - 64 bit Fowler/Noll/Vo-0 FNV-1a hash code * * @(#) $Revision: 5.1 $ * @(#) $Id: hash_64a.c,v 5.1 2009/06/30 09:01:38 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/fnv/RCS/hash_64a.c,v $ * * http://www.isthe.com/chongo/tech/comp/fnv/index.html * *** * * Please do not copyright this code. This code is in the public domain. * * LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO * EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * By: * chongo /\oo/\ * http://www.isthe.com/chongo/ * * Share and Enjoy! :-) */ typedef unsigned long long mdb_hash_t; #define MDB_HASH_INIT ((mdb_hash_t)0xcbf29ce484222325ULL) /** perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer * @param[in] val value to hash * @param[in] hval initial value for hash * @return 64 bit hash * * NOTE: To use the recommended 64 bit FNV-1a hash, use MDB_HASH_INIT as the * hval arg on the first call. */ static mdb_hash_t mdb_hash_val(MDB_val *val, mdb_hash_t hval) { unsigned char *s = (unsigned char *)val->mv_data; /* unsigned string */ unsigned char *end = s + val->mv_size; /* * FNV-1a hash each octet of the string */ while (s < end) { /* xor the bottom with the current octet */ hval ^= (mdb_hash_t)*s++; /* multiply by the 64 bit FNV magic prime mod 2^64 */ hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40); } /* return our new hash value */ return hval; } /** Hash the string and output the encoded hash. * This uses modified RFC1924 Ascii85 encoding to accommodate systems with * very short name limits. We don't care about the encoding being reversible, * we just want to preserve as many bits of the input as possible in a * small printable string. * @param[in] str string to hash * @param[out] encbuf an array of 11 chars to hold the hash */ static const char mdb_a85[]= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"; static void ESECT mdb_pack85(unsigned long l, char *out) { int i; for (i=0; i<5; i++) { *out++ = mdb_a85[l % 85]; l /= 85; } } static void ESECT mdb_hash_enc(MDB_val *val, char *encbuf) { mdb_hash_t h = mdb_hash_val(val, MDB_HASH_INIT); mdb_pack85(h, encbuf); mdb_pack85(h>>32, encbuf+5); encbuf[10] = '\0'; } #endif /** Open and/or initialize the lock region for the environment. * @param[in] env The LMDB environment. * @param[in] fname Filename + scratch area, from #mdb_fname_init(). * @param[in] mode The Unix permissions for the file, if we create it. * @param[in,out] excl In -1, out lock type: -1 none, 0 shared, 1 exclusive * @return 0 on success, non-zero on failure. */ static int ESECT mdb_env_setup_locks(MDB_env *env, MDB_name *fname, int mode, int *excl) { #ifdef _WIN32 # define MDB_ERRCODE_ROFS ERROR_WRITE_PROTECT #else # define MDB_ERRCODE_ROFS EROFS #endif int rc; off_t size, rsize; rc = mdb_fopen(env, fname, MDB_O_LOCKS, mode, &env->me_lfd); if (rc) { /* Omit lockfile if read-only env on read-only filesystem */ if (rc == MDB_ERRCODE_ROFS && (env->me_flags & MDB_RDONLY)) { return MDB_SUCCESS; } goto fail; } if (!(env->me_flags & MDB_NOTLS)) { rc = pthread_key_create(&env->me_txkey, mdb_env_reader_dest); if (rc) goto fail; env->me_flags |= MDB_ENV_TXKEY; #ifdef _WIN32 /* Windows TLS callbacks need help finding their TLS info. */ if (mdb_tls_nkeys >= MAX_TLS_KEYS) { rc = MDB_TLS_FULL; goto fail; } mdb_tls_keys[mdb_tls_nkeys++] = env->me_txkey; #endif } /* Try to get exclusive lock. If we succeed, then * nobody is using the lock region and we should initialize it. */ if ((rc = mdb_env_excl_lock(env, excl))) goto fail; #ifdef _WIN32 size = GetFileSize(env->me_lfd, NULL); #else size = lseek(env->me_lfd, 0, SEEK_END); if (size == -1) goto fail_errno; #endif rsize = (env->me_maxreaders-1) * sizeof(MDB_reader) + sizeof(MDB_txninfo); if (size < rsize && *excl > 0) { #ifdef _WIN32 if (SetFilePointer(env->me_lfd, rsize, NULL, FILE_BEGIN) != (DWORD)rsize || !SetEndOfFile(env->me_lfd)) goto fail_errno; #else if (ftruncate(env->me_lfd, rsize) != 0) goto fail_errno; #endif } else { rsize = size; size = rsize - sizeof(MDB_txninfo); env->me_maxreaders = size/sizeof(MDB_reader) + 1; } { #ifdef _WIN32 HANDLE mh; mh = CreateFileMapping(env->me_lfd, NULL, PAGE_READWRITE, 0, 0, NULL); if (!mh) goto fail_errno; env->me_txns = MapViewOfFileEx(mh, FILE_MAP_WRITE, 0, 0, rsize, NULL); CloseHandle(mh); if (!env->me_txns) goto fail_errno; #else void *m = mmap(NULL, rsize, PROT_READ|PROT_WRITE, MAP_SHARED, env->me_lfd, 0); if (m == MAP_FAILED) goto fail_errno; env->me_txns = m; #endif } if (*excl > 0) { #ifdef _WIN32 BY_HANDLE_FILE_INFORMATION stbuf; struct { DWORD volume; DWORD nhigh; DWORD nlow; } idbuf; MDB_val val; char encbuf[11]; if (!mdb_sec_inited) { InitializeSecurityDescriptor(&mdb_null_sd, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(&mdb_null_sd, TRUE, 0, FALSE); mdb_all_sa.nLength = sizeof(SECURITY_ATTRIBUTES); mdb_all_sa.bInheritHandle = FALSE; mdb_all_sa.lpSecurityDescriptor = &mdb_null_sd; mdb_sec_inited = 1; } if (!GetFileInformationByHandle(env->me_lfd, &stbuf)) goto fail_errno; idbuf.volume = stbuf.dwVolumeSerialNumber; idbuf.nhigh = stbuf.nFileIndexHigh; idbuf.nlow = stbuf.nFileIndexLow; val.mv_data = &idbuf; val.mv_size = sizeof(idbuf); mdb_hash_enc(&val, encbuf); sprintf(env->me_txns->mti_rmname, "Global\\MDBr%s", encbuf); sprintf(env->me_txns->mti_wmname, "Global\\MDBw%s", encbuf); env->me_rmutex = CreateMutexA(&mdb_all_sa, FALSE, env->me_txns->mti_rmname); if (!env->me_rmutex) goto fail_errno; env->me_wmutex = CreateMutexA(&mdb_all_sa, FALSE, env->me_txns->mti_wmname); if (!env->me_wmutex) goto fail_errno; #elif defined(MDB_USE_POSIX_SEM) struct stat stbuf; struct { dev_t dev; ino_t ino; } idbuf; MDB_val val; char encbuf[11]; #if defined(__NetBSD__) #define MDB_SHORT_SEMNAMES 1 /* limited to 14 chars */ #endif if (fstat(env->me_lfd, &stbuf)) goto fail_errno; idbuf.dev = stbuf.st_dev; idbuf.ino = stbuf.st_ino; val.mv_data = &idbuf; val.mv_size = sizeof(idbuf); mdb_hash_enc(&val, encbuf); #ifdef MDB_SHORT_SEMNAMES encbuf[9] = '\0'; /* drop name from 15 chars to 14 chars */ #endif sprintf(env->me_txns->mti_rmname, "/MDBr%s", encbuf); sprintf(env->me_txns->mti_wmname, "/MDBw%s", encbuf); /* Clean up after a previous run, if needed: Try to * remove both semaphores before doing anything else. */ sem_unlink(env->me_txns->mti_rmname); sem_unlink(env->me_txns->mti_wmname); env->me_rmutex = sem_open(env->me_txns->mti_rmname, O_CREAT|O_EXCL, mode, 1); if (env->me_rmutex == SEM_FAILED) goto fail_errno; env->me_wmutex = sem_open(env->me_txns->mti_wmname, O_CREAT|O_EXCL, mode, 1); if (env->me_wmutex == SEM_FAILED) goto fail_errno; #else /* MDB_USE_POSIX_MUTEX: */ pthread_mutexattr_t mattr; /* Solaris needs this before initing a robust mutex. Otherwise * it may skip the init and return EBUSY "seems someone already * inited" or EINVAL "it was inited differently". */ memset(env->me_txns->mti_rmutex, 0, sizeof(*env->me_txns->mti_rmutex)); memset(env->me_txns->mti_wmutex, 0, sizeof(*env->me_txns->mti_wmutex)); if ((rc = pthread_mutexattr_init(&mattr))) goto fail; rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); #ifdef MDB_ROBUST_SUPPORTED if (!rc) rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST); #endif if (!rc) rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr); if (!rc) rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr); pthread_mutexattr_destroy(&mattr); if (rc) goto fail; #endif /* _WIN32 || MDB_USE_POSIX_SEM */ env->me_txns->mti_magic = MDB_MAGIC; env->me_txns->mti_format = MDB_LOCK_FORMAT; env->me_txns->mti_txnid = 0; env->me_txns->mti_numreaders = 0; } else { if (env->me_txns->mti_magic != MDB_MAGIC) { DPUTS("lock region has invalid magic"); rc = MDB_INVALID; goto fail; } if (env->me_txns->mti_format != MDB_LOCK_FORMAT) { DPRINTF(("lock region has format+version 0x%x, expected 0x%x", env->me_txns->mti_format, MDB_LOCK_FORMAT)); rc = MDB_VERSION_MISMATCH; goto fail; } rc = ErrCode(); if (rc && rc != EACCES && rc != EAGAIN) { goto fail; } #ifdef _WIN32 env->me_rmutex = OpenMutexA(SYNCHRONIZE, FALSE, env->me_txns->mti_rmname); if (!env->me_rmutex) goto fail_errno; env->me_wmutex = OpenMutexA(SYNCHRONIZE, FALSE, env->me_txns->mti_wmname); if (!env->me_wmutex) goto fail_errno; #elif defined(MDB_USE_POSIX_SEM) env->me_rmutex = sem_open(env->me_txns->mti_rmname, 0); if (env->me_rmutex == SEM_FAILED) goto fail_errno; env->me_wmutex = sem_open(env->me_txns->mti_wmname, 0); if (env->me_wmutex == SEM_FAILED) goto fail_errno; #endif } return MDB_SUCCESS; fail_errno: rc = ErrCode(); fail: return rc; } /** Only a subset of the @ref mdb_env flags can be changed * at runtime. Changing other flags requires closing the * environment and re-opening it with the new flags. */ #define CHANGEABLE (MDB_NOSYNC|MDB_NOMETASYNC|MDB_MAPASYNC|MDB_NOMEMINIT) #define CHANGELESS (MDB_FIXEDMAP|MDB_NOSUBDIR|MDB_RDONLY| \ MDB_WRITEMAP|MDB_NOTLS|MDB_NOLOCK|MDB_NORDAHEAD) #if VALID_FLAGS & PERSISTENT_FLAGS & (CHANGEABLE|CHANGELESS) # error "Persistent DB flags & env flags overlap, but both go in mm_flags" #endif int ESECT mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode) { int rc, excl = -1; MDB_name fname; if (env->me_fd!=INVALID_HANDLE_VALUE || (flags & ~(CHANGEABLE|CHANGELESS))) return EINVAL; flags |= env->me_flags; rc = mdb_fname_init(path, flags, &fname); if (rc) return rc; if (flags & MDB_RDONLY) { /* silently ignore WRITEMAP when we're only getting read access */ flags &= ~MDB_WRITEMAP; } else { if (!((env->me_free_pgs = mdb_midl_alloc(MDB_IDL_UM_MAX)) && (env->me_dirty_list = calloc(MDB_IDL_UM_SIZE, sizeof(MDB_ID2))))) rc = ENOMEM; } env->me_flags = flags |= MDB_ENV_ACTIVE; if (rc) goto leave; env->me_path = strdup(path); env->me_dbxs = calloc(env->me_maxdbs, sizeof(MDB_dbx)); env->me_dbflags = calloc(env->me_maxdbs, sizeof(uint16_t)); env->me_dbiseqs = calloc(env->me_maxdbs, sizeof(unsigned int)); if (!(env->me_dbxs && env->me_path && env->me_dbflags && env->me_dbiseqs)) { rc = ENOMEM; goto leave; } env->me_dbxs[FREE_DBI].md_cmp = mdb_cmp_long; /* aligned MDB_INTEGERKEY */ /* For RDONLY, get lockfile after we know datafile exists */ if (!(flags & (MDB_RDONLY|MDB_NOLOCK))) { rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; } rc = mdb_fopen(env, &fname, (flags & MDB_RDONLY) ? MDB_O_RDONLY : MDB_O_RDWR, mode, &env->me_fd); if (rc) goto leave; if ((flags & (MDB_RDONLY|MDB_NOLOCK)) == MDB_RDONLY) { rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; } if ((rc = mdb_env_open2(env)) == MDB_SUCCESS) { if (!(flags & (MDB_RDONLY|MDB_WRITEMAP))) { /* Synchronous fd for meta writes. Needed even with * MDB_NOSYNC/MDB_NOMETASYNC, in case these get reset. */ rc = mdb_fopen(env, &fname, MDB_O_META, mode, &env->me_mfd); if (rc) goto leave; } DPRINTF(("opened dbenv %p", (void *) env)); if (excl > 0) { rc = mdb_env_share_locks(env, &excl); if (rc) goto leave; } if (!(flags & MDB_RDONLY)) { MDB_txn *txn; int tsize = sizeof(MDB_txn), size = tsize + env->me_maxdbs * (sizeof(MDB_db)+sizeof(MDB_cursor *)+sizeof(unsigned int)+1); if ((env->me_pbuf = calloc(1, env->me_psize)) && (txn = calloc(1, size))) { txn->mt_dbs = (MDB_db *)((char *)txn + tsize); txn->mt_cursors = (MDB_cursor **)(txn->mt_dbs + env->me_maxdbs); txn->mt_dbiseqs = (unsigned int *)(txn->mt_cursors + env->me_maxdbs); txn->mt_dbflags = (unsigned char *)(txn->mt_dbiseqs + env->me_maxdbs); txn->mt_env = env; txn->mt_dbxs = env->me_dbxs; txn->mt_flags = MDB_TXN_FINISHED; env->me_txn0 = txn; } else { rc = ENOMEM; } } } leave: if (rc) { mdb_env_close0(env, excl); } mdb_fname_destroy(fname); return rc; } /** Destroy resources from mdb_env_open(), clear our readers & DBIs */ static void ESECT mdb_env_close0(MDB_env *env, int excl) { int i; if (!(env->me_flags & MDB_ENV_ACTIVE)) return; /* Doing this here since me_dbxs may not exist during mdb_env_close */ if (env->me_dbxs) { for (i = env->me_maxdbs; --i >= CORE_DBS; ) free(env->me_dbxs[i].md_name.mv_data); free(env->me_dbxs); } free(env->me_pbuf); free(env->me_dbiseqs); free(env->me_dbflags); free(env->me_path); free(env->me_dirty_list); free(env->me_txn0); mdb_midl_free(env->me_free_pgs); if (env->me_flags & MDB_ENV_TXKEY) { pthread_key_delete(env->me_txkey); #ifdef _WIN32 /* Delete our key from the global list */ for (i=0; ime_txkey) { mdb_tls_keys[i] = mdb_tls_keys[mdb_tls_nkeys-1]; mdb_tls_nkeys--; break; } #endif } if (env->me_map) { munmap(env->me_map, env->me_mapsize); } if (env->me_mfd != INVALID_HANDLE_VALUE) (void) close(env->me_mfd); if (env->me_fd != INVALID_HANDLE_VALUE) (void) close(env->me_fd); if (env->me_txns) { MDB_PID_T pid = getpid(); /* Clearing readers is done in this function because * me_txkey with its destructor must be disabled first. * * We skip the the reader mutex, so we touch only * data owned by this process (me_close_readers and * our readers), and clear each reader atomically. */ for (i = env->me_close_readers; --i >= 0; ) if (env->me_txns->mti_readers[i].mr_pid == pid) env->me_txns->mti_readers[i].mr_pid = 0; #ifdef _WIN32 if (env->me_rmutex) { CloseHandle(env->me_rmutex); if (env->me_wmutex) CloseHandle(env->me_wmutex); } /* Windows automatically destroys the mutexes when * the last handle closes. */ #elif defined(MDB_USE_POSIX_SEM) if (env->me_rmutex != SEM_FAILED) { sem_close(env->me_rmutex); if (env->me_wmutex != SEM_FAILED) sem_close(env->me_wmutex); /* If we have the filelock: If we are the * only remaining user, clean up semaphores. */ if (excl == 0) mdb_env_excl_lock(env, &excl); if (excl > 0) { sem_unlink(env->me_txns->mti_rmname); sem_unlink(env->me_txns->mti_wmname); } } #elif defined(MDB_ROBUST_SUPPORTED) /* If we have the filelock: If we are the * only remaining user, clean up robust * mutexes. */ if (excl == 0) mdb_env_excl_lock(env, &excl); if (excl > 0) { pthread_mutex_destroy(env->me_txns->mti_rmutex); pthread_mutex_destroy(env->me_txns->mti_wmutex); } #endif munmap((void *)env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo)); } if (env->me_lfd != INVALID_HANDLE_VALUE) { #ifdef _WIN32 if (excl >= 0) { /* Unlock the lockfile. Windows would have unlocked it * after closing anyway, but not necessarily at once. */ UnlockFile(env->me_lfd, 0, 0, 1, 0); } #endif (void) close(env->me_lfd); } env->me_flags &= ~(MDB_ENV_ACTIVE|MDB_ENV_TXKEY); } void ESECT mdb_env_close(MDB_env *env) { MDB_page *dp; if (env == NULL) return; VGMEMP_DESTROY(env); while ((dp = env->me_dpages) != NULL) { VGMEMP_DEFINED(&dp->mp_next, sizeof(dp->mp_next)); env->me_dpages = dp->mp_next; free(dp); } mdb_env_close0(env, 0); free(env); } /** Compare two items pointing at aligned size_t's */ static int mdb_cmp_long(const MDB_val *a, const MDB_val *b) { return (*(size_t *)a->mv_data < *(size_t *)b->mv_data) ? -1 : *(size_t *)a->mv_data > *(size_t *)b->mv_data; } /** Compare two items pointing at aligned unsigned int's. * * This is also set as #MDB_INTEGERDUP|#MDB_DUPFIXED's #MDB_dbx.%md_dcmp, * but #mdb_cmp_clong() is called instead if the data type is size_t. */ static int mdb_cmp_int(const MDB_val *a, const MDB_val *b) { return (*(unsigned int *)a->mv_data < *(unsigned int *)b->mv_data) ? -1 : *(unsigned int *)a->mv_data > *(unsigned int *)b->mv_data; } /** Compare two items pointing at unsigned ints of unknown alignment. * Nodes and keys are guaranteed to be 2-byte aligned. */ static int mdb_cmp_cint(const MDB_val *a, const MDB_val *b) { #if BYTE_ORDER == LITTLE_ENDIAN unsigned short *u, *c; int x; u = (unsigned short *) ((char *) a->mv_data + a->mv_size); c = (unsigned short *) ((char *) b->mv_data + a->mv_size); do { x = *--u - *--c; } while(!x && u > (unsigned short *)a->mv_data); return x; #else unsigned short *u, *c, *end; int x; end = (unsigned short *) ((char *) a->mv_data + a->mv_size); u = (unsigned short *)a->mv_data; c = (unsigned short *)b->mv_data; do { x = *u++ - *c++; } while(!x && u < end); return x; #endif } /** Compare two items lexically */ static int mdb_cmp_memn(const MDB_val *a, const MDB_val *b) { int diff; ssize_t len_diff; unsigned int len; len = a->mv_size; len_diff = (ssize_t) a->mv_size - (ssize_t) b->mv_size; if (len_diff > 0) { len = b->mv_size; len_diff = 1; } diff = memcmp(a->mv_data, b->mv_data, len); return diff ? diff : len_diff<0 ? -1 : len_diff; } /** Compare two items in reverse byte order */ static int mdb_cmp_memnr(const MDB_val *a, const MDB_val *b) { const unsigned char *p1, *p2, *p1_lim; ssize_t len_diff; int diff; p1_lim = (const unsigned char *)a->mv_data; p1 = (const unsigned char *)a->mv_data + a->mv_size; p2 = (const unsigned char *)b->mv_data + b->mv_size; len_diff = (ssize_t) a->mv_size - (ssize_t) b->mv_size; if (len_diff > 0) { p1_lim += len_diff; len_diff = 1; } while (p1 > p1_lim) { diff = *--p1 - *--p2; if (diff) return diff; } return len_diff<0 ? -1 : len_diff; } /** Search for key within a page, using binary search. * Returns the smallest entry larger or equal to the key. * If exactp is non-null, stores whether the found entry was an exact match * in *exactp (1 or 0). * Updates the cursor index with the index of the found entry. * If no entry larger or equal to the key is found, returns NULL. */ static MDB_node * mdb_node_search(MDB_cursor *mc, MDB_val *key, int *exactp) { unsigned int i = 0, nkeys; int low, high; int rc = 0; MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_node *node = NULL; MDB_val nodekey; MDB_cmp_func *cmp; DKBUF; nkeys = NUMKEYS(mp); DPRINTF(("searching %u keys in %s %spage %"Z"u", nkeys, IS_LEAF(mp) ? "leaf" : "branch", IS_SUBP(mp) ? "sub-" : "", mdb_dbg_pgno(mp))); low = IS_LEAF(mp) ? 0 : 1; high = nkeys - 1; cmp = mc->mc_dbx->md_cmp; /* Branch pages have no data, so if using integer keys, * alignment is guaranteed. Use faster mdb_cmp_int. */ if (cmp == mdb_cmp_cint && IS_BRANCH(mp)) { if (NODEPTR(mp, 1)->mn_ksize == sizeof(size_t)) cmp = mdb_cmp_long; else cmp = mdb_cmp_int; } if (IS_LEAF2(mp)) { nodekey.mv_size = mc->mc_db->md_pad; node = NODEPTR(mp, 0); /* fake */ while (low <= high) { i = (low + high) >> 1; nodekey.mv_data = LEAF2KEY(mp, i, nodekey.mv_size); rc = cmp(key, &nodekey); DPRINTF(("found leaf index %u [%s], rc = %i", i, DKEY(&nodekey), rc)); if (rc == 0) break; if (rc > 0) low = i + 1; else high = i - 1; } } else { while (low <= high) { i = (low + high) >> 1; node = NODEPTR(mp, i); nodekey.mv_size = NODEKSZ(node); nodekey.mv_data = NODEKEY(node); rc = cmp(key, &nodekey); #if MDB_DEBUG if (IS_LEAF(mp)) DPRINTF(("found leaf index %u [%s], rc = %i", i, DKEY(&nodekey), rc)); else DPRINTF(("found branch index %u [%s -> %"Z"u], rc = %i", i, DKEY(&nodekey), NODEPGNO(node), rc)); #endif if (rc == 0) break; if (rc > 0) low = i + 1; else high = i - 1; } } if (rc > 0) { /* Found entry is less than the key. */ i++; /* Skip to get the smallest entry larger than key. */ if (!IS_LEAF2(mp)) node = NODEPTR(mp, i); } if (exactp) *exactp = (rc == 0 && nkeys > 0); /* store the key index */ mc->mc_ki[mc->mc_top] = i; if (i >= nkeys) /* There is no entry larger or equal to the key. */ return NULL; /* nodeptr is fake for LEAF2 */ return node; } #if 0 static void mdb_cursor_adjust(MDB_cursor *mc, func) { MDB_cursor *m2; for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2->mc_pg[m2->mc_top] == mc->mc_pg[mc->mc_top]) { func(mc, m2); } } } #endif /** Pop a page off the top of the cursor's stack. */ static void mdb_cursor_pop(MDB_cursor *mc) { if (mc->mc_snum) { DPRINTF(("popping page %"Z"u off db %d cursor %p", mc->mc_pg[mc->mc_top]->mp_pgno, DDBI(mc), (void *) mc)); mc->mc_snum--; if (mc->mc_snum) { mc->mc_top--; } else { mc->mc_flags &= ~C_INITIALIZED; } } } /** Push a page onto the top of the cursor's stack. * Set #MDB_TXN_ERROR on failure. */ static int mdb_cursor_push(MDB_cursor *mc, MDB_page *mp) { DPRINTF(("pushing page %"Z"u on db %d cursor %p", mp->mp_pgno, DDBI(mc), (void *) mc)); if (mc->mc_snum >= CURSOR_STACK) { mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_CURSOR_FULL; } mc->mc_top = mc->mc_snum++; mc->mc_pg[mc->mc_top] = mp; mc->mc_ki[mc->mc_top] = 0; return MDB_SUCCESS; } /** Find the address of the page corresponding to a given page number. * Set #MDB_TXN_ERROR on failure. * @param[in] mc the cursor accessing the page. * @param[in] pgno the page number for the page to retrieve. * @param[out] ret address of a pointer where the page's address will be stored. * @param[out] lvl dirty_list inheritance level of found page. 1=current txn, 0=mapped page. * @return 0 on success, non-zero on failure. */ static int mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **ret, int *lvl) { MDB_txn *txn = mc->mc_txn; MDB_env *env = txn->mt_env; MDB_page *p = NULL; int level; if (! (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_WRITEMAP))) { MDB_txn *tx2 = txn; level = 1; do { MDB_ID2L dl = tx2->mt_u.dirty_list; unsigned x; /* Spilled pages were dirtied in this txn and flushed * because the dirty list got full. Bring this page * back in from the map (but don't unspill it here, * leave that unless page_touch happens again). */ if (tx2->mt_spill_pgs) { MDB_ID pn = pgno << 1; x = mdb_midl_search(tx2->mt_spill_pgs, pn); if (x <= tx2->mt_spill_pgs[0] && tx2->mt_spill_pgs[x] == pn) { p = (MDB_page *)(env->me_map + env->me_psize * pgno); goto done; } } if (dl[0].mid) { unsigned x = mdb_mid2l_search(dl, pgno); if (x <= dl[0].mid && dl[x].mid == pgno) { p = dl[x].mptr; goto done; } } level++; } while ((tx2 = tx2->mt_parent) != NULL); } if (pgno < txn->mt_next_pgno) { level = 0; p = (MDB_page *)(env->me_map + env->me_psize * pgno); } else { DPRINTF(("page %"Z"u not found", pgno)); txn->mt_flags |= MDB_TXN_ERROR; return MDB_PAGE_NOTFOUND; } done: *ret = p; if (lvl) *lvl = level; return MDB_SUCCESS; } /** Finish #mdb_page_search() / #mdb_page_search_lowest(). * The cursor is at the root page, set up the rest of it. */ static int mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int flags) { MDB_page *mp = mc->mc_pg[mc->mc_top]; int rc; DKBUF; while (IS_BRANCH(mp)) { MDB_node *node; indx_t i; DPRINTF(("branch page %"Z"u has %u keys", mp->mp_pgno, NUMKEYS(mp))); /* Don't assert on branch pages in the FreeDB. We can get here * while in the process of rebalancing a FreeDB branch page; we must * let that proceed. ITS#8336 */ mdb_cassert(mc, !mc->mc_dbi || NUMKEYS(mp) > 1); DPRINTF(("found index 0 to page %"Z"u", NODEPGNO(NODEPTR(mp, 0)))); if (flags & (MDB_PS_FIRST|MDB_PS_LAST)) { i = 0; if (flags & MDB_PS_LAST) { i = NUMKEYS(mp) - 1; /* if already init'd, see if we're already in right place */ if (mc->mc_flags & C_INITIALIZED) { if (mc->mc_ki[mc->mc_top] == i) { mc->mc_top = mc->mc_snum++; mp = mc->mc_pg[mc->mc_top]; goto ready; } } } } else { int exact; node = mdb_node_search(mc, key, &exact); if (node == NULL) i = NUMKEYS(mp) - 1; else { i = mc->mc_ki[mc->mc_top]; if (!exact) { mdb_cassert(mc, i > 0); i--; } } DPRINTF(("following index %u for key [%s]", i, DKEY(key))); } mdb_cassert(mc, i < NUMKEYS(mp)); node = NODEPTR(mp, i); if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = i; if ((rc = mdb_cursor_push(mc, mp))) return rc; ready: if (flags & MDB_PS_MODIFY) { if ((rc = mdb_page_touch(mc)) != 0) return rc; mp = mc->mc_pg[mc->mc_top]; } } if (!IS_LEAF(mp)) { DPRINTF(("internal error, index points to a %02X page!?", mp->mp_flags)); mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_CORRUPTED; } DPRINTF(("found leaf page %"Z"u for key [%s]", mp->mp_pgno, key ? DKEY(key) : "null")); mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; return MDB_SUCCESS; } /** Search for the lowest key under the current branch page. * This just bypasses a NUMKEYS check in the current page * before calling mdb_page_search_root(), because the callers * are all in situations where the current page is known to * be underfilled. */ static int mdb_page_search_lowest(MDB_cursor *mc) { MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_node *node = NODEPTR(mp, 0); int rc; if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = 0; if ((rc = mdb_cursor_push(mc, mp))) return rc; return mdb_page_search_root(mc, NULL, MDB_PS_FIRST); } /** Search for the page a given key should be in. * Push it and its parent pages on the cursor stack. * @param[in,out] mc the cursor for this operation. * @param[in] key the key to search for, or NULL for first/last page. * @param[in] flags If MDB_PS_MODIFY is set, visited pages in the DB * are touched (updated with new page numbers). * If MDB_PS_FIRST or MDB_PS_LAST is set, find first or last leaf. * This is used by #mdb_cursor_first() and #mdb_cursor_last(). * If MDB_PS_ROOTONLY set, just fetch root node, no further lookups. * @return 0 on success, non-zero on failure. */ static int mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags) { int rc; pgno_t root; /* Make sure the txn is still viable, then find the root from * the txn's db table and set it as the root of the cursor's stack. */ if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) { DPUTS("transaction may not be used now"); return MDB_BAD_TXN; } else { /* Make sure we're using an up-to-date root */ if (*mc->mc_dbflag & DB_STALE) { MDB_cursor mc2; if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi)) return MDB_BAD_DBI; mdb_cursor_init(&mc2, mc->mc_txn, MAIN_DBI, NULL); rc = mdb_page_search(&mc2, &mc->mc_dbx->md_name, 0); if (rc) return rc; { MDB_val data; int exact = 0; uint16_t flags; MDB_node *leaf = mdb_node_search(&mc2, &mc->mc_dbx->md_name, &exact); if (!exact) return MDB_NOTFOUND; if ((leaf->mn_flags & (F_DUPDATA|F_SUBDATA)) != F_SUBDATA) return MDB_INCOMPATIBLE; /* not a named DB */ rc = mdb_node_read(&mc2, leaf, &data); if (rc) return rc; memcpy(&flags, ((char *) data.mv_data + offsetof(MDB_db, md_flags)), sizeof(uint16_t)); /* The txn may not know this DBI, or another process may * have dropped and recreated the DB with other flags. */ if ((mc->mc_db->md_flags & PERSISTENT_FLAGS) != flags) return MDB_INCOMPATIBLE; memcpy(mc->mc_db, data.mv_data, sizeof(MDB_db)); } *mc->mc_dbflag &= ~DB_STALE; } root = mc->mc_db->md_root; if (root == P_INVALID) { /* Tree is empty. */ DPUTS("tree is empty"); return MDB_NOTFOUND; } } mdb_cassert(mc, root > 1); if (!mc->mc_pg[0] || mc->mc_pg[0]->mp_pgno != root) if ((rc = mdb_page_get(mc, root, &mc->mc_pg[0], NULL)) != 0) return rc; mc->mc_snum = 1; mc->mc_top = 0; DPRINTF(("db %d root page %"Z"u has flags 0x%X", DDBI(mc), root, mc->mc_pg[0]->mp_flags)); if (flags & MDB_PS_MODIFY) { if ((rc = mdb_page_touch(mc))) return rc; } if (flags & MDB_PS_ROOTONLY) return MDB_SUCCESS; return mdb_page_search_root(mc, key, flags); } static int mdb_ovpage_free(MDB_cursor *mc, MDB_page *mp) { MDB_txn *txn = mc->mc_txn; pgno_t pg = mp->mp_pgno; unsigned x = 0, ovpages = mp->mp_pages; MDB_env *env = txn->mt_env; MDB_IDL sl = txn->mt_spill_pgs; MDB_ID pn = pg << 1; int rc; DPRINTF(("free ov page %"Z"u (%d)", pg, ovpages)); /* If the page is dirty or on the spill list we just acquired it, * so we should give it back to our current free list, if any. * Otherwise put it onto the list of pages we freed in this txn. * * Won't create me_pghead: me_pglast must be inited along with it. * Unsupported in nested txns: They would need to hide the page * range in ancestor txns' dirty and spilled lists. */ if (env->me_pghead && !txn->mt_parent && ((mp->mp_flags & P_DIRTY) || (sl && (x = mdb_midl_search(sl, pn)) <= sl[0] && sl[x] == pn))) { unsigned i, j; pgno_t *mop; MDB_ID2 *dl, ix, iy; rc = mdb_midl_need(&env->me_pghead, ovpages); if (rc) return rc; if (!(mp->mp_flags & P_DIRTY)) { /* This page is no longer spilled */ if (x == sl[0]) sl[0]--; else sl[x] |= 1; goto release; } /* Remove from dirty list */ dl = txn->mt_u.dirty_list; x = dl[0].mid--; for (ix = dl[x]; ix.mptr != mp; ix = iy) { if (x > 1) { x--; iy = dl[x]; dl[x] = ix; } else { mdb_cassert(mc, x > 1); j = ++(dl[0].mid); dl[j] = ix; /* Unsorted. OK when MDB_TXN_ERROR. */ txn->mt_flags |= MDB_TXN_ERROR; return MDB_CORRUPTED; } } txn->mt_dirty_room++; if (!(env->me_flags & MDB_WRITEMAP)) mdb_dpage_free(env, mp); release: /* Insert in me_pghead */ mop = env->me_pghead; j = mop[0] + ovpages; for (i = mop[0]; i && mop[i] < pg; i--) mop[j--] = mop[i]; while (j>i) mop[j--] = pg++; mop[0] += ovpages; } else { rc = mdb_midl_append_range(&txn->mt_free_pgs, pg, ovpages); if (rc) return rc; } mc->mc_db->md_overflow_pages -= ovpages; return 0; } /** Return the data associated with a given node. * @param[in] mc The cursor for this operation. * @param[in] leaf The node being read. * @param[out] data Updated to point to the node's data. * @return 0 on success, non-zero on failure. */ static int mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data) { MDB_page *omp; /* overflow page */ pgno_t pgno; int rc; if (!F_ISSET(leaf->mn_flags, F_BIGDATA)) { data->mv_size = NODEDSZ(leaf); data->mv_data = NODEDATA(leaf); return MDB_SUCCESS; } /* Read overflow data. */ data->mv_size = NODEDSZ(leaf); memcpy(&pgno, NODEDATA(leaf), sizeof(pgno)); if ((rc = mdb_page_get(mc, pgno, &omp, NULL)) != 0) { DPRINTF(("read overflow page %"Z"u failed", pgno)); return rc; } data->mv_data = METADATA(omp); return MDB_SUCCESS; } int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) { MDB_cursor mc; MDB_xcursor mx; int exact = 0; DKBUF; DPRINTF(("===> get db %u key [%s]", dbi, DKEY(key))); if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; mdb_cursor_init(&mc, txn, dbi, &mx); return mdb_cursor_set(&mc, key, data, MDB_SET, &exact); } /** Find a sibling for a page. * Replaces the page at the top of the cursor's stack with the * specified sibling, if one exists. * @param[in] mc The cursor for this operation. * @param[in] move_right Non-zero if the right sibling is requested, * otherwise the left sibling. * @return 0 on success, non-zero on failure. */ static int mdb_cursor_sibling(MDB_cursor *mc, int move_right) { int rc; MDB_node *indx; MDB_page *mp; if (mc->mc_snum < 2) { return MDB_NOTFOUND; /* root has no siblings */ } mdb_cursor_pop(mc); DPRINTF(("parent page is page %"Z"u, index %u", mc->mc_pg[mc->mc_top]->mp_pgno, mc->mc_ki[mc->mc_top])); if (move_right ? (mc->mc_ki[mc->mc_top] + 1u >= NUMKEYS(mc->mc_pg[mc->mc_top])) : (mc->mc_ki[mc->mc_top] == 0)) { DPRINTF(("no more keys left, moving to %s sibling", move_right ? "right" : "left")); if ((rc = mdb_cursor_sibling(mc, move_right)) != MDB_SUCCESS) { /* undo cursor_pop before returning */ mc->mc_top++; mc->mc_snum++; return rc; } } else { if (move_right) mc->mc_ki[mc->mc_top]++; else mc->mc_ki[mc->mc_top]--; DPRINTF(("just moving to %s index key %u", move_right ? "right" : "left", mc->mc_ki[mc->mc_top])); } mdb_cassert(mc, IS_BRANCH(mc->mc_pg[mc->mc_top])); indx = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if ((rc = mdb_page_get(mc, NODEPGNO(indx), &mp, NULL)) != 0) { /* mc will be inconsistent if caller does mc_snum++ as above */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); return rc; } mdb_cursor_push(mc, mp); if (!move_right) mc->mc_ki[mc->mc_top] = NUMKEYS(mp)-1; return MDB_SUCCESS; } /** Move the cursor to the next data item. */ static int mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { MDB_page *mp; MDB_node *leaf; int rc; if ((mc->mc_flags & C_DEL && op == MDB_NEXT_DUP)) return MDB_NOTFOUND; if (!(mc->mc_flags & C_INITIALIZED)) return mdb_cursor_first(mc, key, data); mp = mc->mc_pg[mc->mc_top]; if (mc->mc_flags & C_EOF) { if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mp)-1) return MDB_NOTFOUND; mc->mc_flags ^= C_EOF; } if (mc->mc_db->md_flags & MDB_DUPSORT) { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (op == MDB_NEXT || op == MDB_NEXT_DUP) { rc = mdb_cursor_next(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_NEXT); if (op != MDB_NEXT || rc != MDB_NOTFOUND) { if (rc == MDB_SUCCESS) MDB_GET_KEY(leaf, key); return rc; } } } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (op == MDB_NEXT_DUP) return MDB_NOTFOUND; } } DPRINTF(("cursor_next: top page is %"Z"u in cursor %p", mdb_dbg_pgno(mp), (void *) mc)); if (mc->mc_flags & C_DEL) { mc->mc_flags ^= C_DEL; goto skip; } if (mc->mc_ki[mc->mc_top] + 1u >= NUMKEYS(mp)) { DPUTS("=====> move to next sibling page"); if ((rc = mdb_cursor_sibling(mc, 1)) != MDB_SUCCESS) { mc->mc_flags |= C_EOF; return rc; } mp = mc->mc_pg[mc->mc_top]; DPRINTF(("next page is %"Z"u, key index %u", mp->mp_pgno, mc->mc_ki[mc->mc_top])); } else mc->mc_ki[mc->mc_top]++; skip: DPRINTF(("==> cursor points to page %"Z"u with %u keys, key index %u", mdb_dbg_pgno(mp), NUMKEYS(mp), mc->mc_ki[mc->mc_top])); if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); return MDB_SUCCESS; } mdb_cassert(mc, IS_LEAF(mp)); leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc != MDB_SUCCESS) return rc; } else if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Move the cursor to the previous data item. */ static int mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { MDB_page *mp; MDB_node *leaf; int rc; if (!(mc->mc_flags & C_INITIALIZED)) { rc = mdb_cursor_last(mc, key, data); if (rc) return rc; mc->mc_ki[mc->mc_top]++; } mp = mc->mc_pg[mc->mc_top]; if ((mc->mc_db->md_flags & MDB_DUPSORT) && mc->mc_ki[mc->mc_top] < NUMKEYS(mp)) { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (op == MDB_PREV || op == MDB_PREV_DUP) { rc = mdb_cursor_prev(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_PREV); if (op != MDB_PREV || rc != MDB_NOTFOUND) { if (rc == MDB_SUCCESS) { MDB_GET_KEY(leaf, key); mc->mc_flags &= ~C_EOF; } return rc; } } } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (op == MDB_PREV_DUP) return MDB_NOTFOUND; } } DPRINTF(("cursor_prev: top page is %"Z"u in cursor %p", mdb_dbg_pgno(mp), (void *) mc)); mc->mc_flags &= ~(C_EOF|C_DEL); if (mc->mc_ki[mc->mc_top] == 0) { DPUTS("=====> move to prev sibling page"); if ((rc = mdb_cursor_sibling(mc, 0)) != MDB_SUCCESS) { return rc; } mp = mc->mc_pg[mc->mc_top]; mc->mc_ki[mc->mc_top] = NUMKEYS(mp) - 1; DPRINTF(("prev page is %"Z"u, key index %u", mp->mp_pgno, mc->mc_ki[mc->mc_top])); } else mc->mc_ki[mc->mc_top]--; DPRINTF(("==> cursor points to page %"Z"u with %u keys, key index %u", mdb_dbg_pgno(mp), NUMKEYS(mp), mc->mc_ki[mc->mc_top])); if (!IS_LEAF(mp)) return MDB_CORRUPTED; if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); return MDB_SUCCESS; } leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_last(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc != MDB_SUCCESS) return rc; } else if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Set the cursor on a specific data item. */ static int mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op, int *exactp) { int rc; MDB_page *mp; MDB_node *leaf = NULL; DKBUF; if (key->mv_size == 0) return MDB_BAD_VALSIZE; if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); /* See if we're already on the right page */ if (mc->mc_flags & C_INITIALIZED) { MDB_val nodekey; mp = mc->mc_pg[mc->mc_top]; if (!NUMKEYS(mp)) { mc->mc_ki[mc->mc_top] = 0; return MDB_NOTFOUND; } if (mp->mp_flags & P_LEAF2) { nodekey.mv_size = mc->mc_db->md_pad; nodekey.mv_data = LEAF2KEY(mp, 0, nodekey.mv_size); } else { leaf = NODEPTR(mp, 0); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* Probably happens rarely, but first node on the page * was the one we wanted. */ mc->mc_ki[mc->mc_top] = 0; if (exactp) *exactp = 1; goto set1; } if (rc > 0) { unsigned int i; unsigned int nkeys = NUMKEYS(mp); if (nkeys > 1) { if (mp->mp_flags & P_LEAF2) { nodekey.mv_data = LEAF2KEY(mp, nkeys-1, nodekey.mv_size); } else { leaf = NODEPTR(mp, nkeys-1); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* last node was the one we wanted */ mc->mc_ki[mc->mc_top] = nkeys-1; if (exactp) *exactp = 1; goto set1; } if (rc < 0) { if (mc->mc_ki[mc->mc_top] < NUMKEYS(mp)) { /* This is definitely the right page, skip search_page */ if (mp->mp_flags & P_LEAF2) { nodekey.mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], nodekey.mv_size); } else { leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); MDB_GET_KEY2(leaf, nodekey); } rc = mc->mc_dbx->md_cmp(key, &nodekey); if (rc == 0) { /* current node was the one we wanted */ if (exactp) *exactp = 1; goto set1; } } rc = 0; mc->mc_flags &= ~C_EOF; goto set2; } } /* If any parents have right-sibs, search. * Otherwise, there's nothing further. */ for (i=0; imc_top; i++) if (mc->mc_ki[i] < NUMKEYS(mc->mc_pg[i])-1) break; if (i == mc->mc_top) { /* There are no other pages */ mc->mc_ki[mc->mc_top] = nkeys; return MDB_NOTFOUND; } } if (!mc->mc_top) { /* There are no other pages */ mc->mc_ki[mc->mc_top] = 0; if (op == MDB_SET_RANGE && !exactp) { rc = 0; goto set1; } else return MDB_NOTFOUND; } } else { mc->mc_pg[0] = 0; } rc = mdb_page_search(mc, key, 0); if (rc != MDB_SUCCESS) return rc; mp = mc->mc_pg[mc->mc_top]; mdb_cassert(mc, IS_LEAF(mp)); set2: leaf = mdb_node_search(mc, key, exactp); if (exactp != NULL && !*exactp) { /* MDB_SET specified and not an exact match. */ return MDB_NOTFOUND; } if (leaf == NULL) { DPUTS("===> inexact leaf not found, goto sibling"); if ((rc = mdb_cursor_sibling(mc, 1)) != MDB_SUCCESS) { mc->mc_flags |= C_EOF; return rc; /* no entries matched */ } mp = mc->mc_pg[mc->mc_top]; mdb_cassert(mc, IS_LEAF(mp)); leaf = NODEPTR(mp, 0); } set1: mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; if (IS_LEAF2(mp)) { if (op == MDB_SET_RANGE || op == MDB_SET_KEY) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); } return MDB_SUCCESS; } if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); if (op == MDB_SET || op == MDB_SET_KEY || op == MDB_SET_RANGE) { rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); } else { int ex2, *ex2p; if (op == MDB_GET_BOTH) { ex2p = &ex2; ex2 = 0; } else { ex2p = NULL; } rc = mdb_cursor_set(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_SET_RANGE, ex2p); if (rc != MDB_SUCCESS) return rc; } } else if (data) { if (op == MDB_GET_BOTH || op == MDB_GET_BOTH_RANGE) { MDB_val olddata; MDB_cmp_func *dcmp; if ((rc = mdb_node_read(mc, leaf, &olddata)) != MDB_SUCCESS) return rc; dcmp = mc->mc_dbx->md_dcmp; #if UINT_MAX < SIZE_MAX if (dcmp == mdb_cmp_int && olddata.mv_size == sizeof(size_t)) dcmp = mdb_cmp_clong; #endif rc = dcmp(data, &olddata); if (rc) { if (op == MDB_GET_BOTH || rc > 0) return MDB_NOTFOUND; rc = 0; } *data = olddata; } else { if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } /* The key already matches in all other cases */ if (op == MDB_SET_RANGE || op == MDB_SET_KEY) MDB_GET_KEY(leaf, key); DPRINTF(("==> cursor placed on key [%s]", DKEY(key))); return rc; } /** Move the cursor to the first item in the database. */ static int mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data) { int rc; MDB_node *leaf; if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (!(mc->mc_flags & C_INITIALIZED) || mc->mc_top) { rc = mdb_page_search(mc, NULL, MDB_PS_FIRST); if (rc != MDB_SUCCESS) return rc; } mdb_cassert(mc, IS_LEAF(mc->mc_pg[mc->mc_top])); leaf = NODEPTR(mc->mc_pg[mc->mc_top], 0); mc->mc_flags |= C_INITIALIZED; mc->mc_flags &= ~C_EOF; mc->mc_ki[mc->mc_top] = 0; if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { if ( key ) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], 0, key->mv_size); } return MDB_SUCCESS; } if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc) return rc; } else if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } /** Move the cursor to the last item in the database. */ static int mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data) { int rc; MDB_node *leaf; if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); if (!(mc->mc_flags & C_INITIALIZED) || mc->mc_top) { rc = mdb_page_search(mc, NULL, MDB_PS_LAST); if (rc != MDB_SUCCESS) return rc; } mdb_cassert(mc, IS_LEAF(mc->mc_pg[mc->mc_top])); mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]) - 1; mc->mc_flags |= C_INITIALIZED|C_EOF; leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { if (key) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], key->mv_size); } return MDB_SUCCESS; } if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { mdb_xcursor_init1(mc, leaf); rc = mdb_cursor_last(&mc->mc_xcursor->mx_cursor, data, NULL); if (rc) return rc; } else if (data) { if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } MDB_GET_KEY(leaf, key); return MDB_SUCCESS; } int mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) { int rc; int exact = 0; int (*mfunc)(MDB_cursor *mc, MDB_val *key, MDB_val *data); if (mc == NULL) return EINVAL; if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; switch (op) { case MDB_GET_CURRENT: if (!(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; } else { MDB_page *mp = mc->mc_pg[mc->mc_top]; int nkeys = NUMKEYS(mp); if (!nkeys || mc->mc_ki[mc->mc_top] >= nkeys) { mc->mc_ki[mc->mc_top] = nkeys; rc = MDB_NOTFOUND; break; } rc = MDB_SUCCESS; if (IS_LEAF2(mp)) { key->mv_size = mc->mc_db->md_pad; key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size); } else { MDB_node *leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); MDB_GET_KEY(leaf, key); if (data) { if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { rc = mdb_cursor_get(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_GET_CURRENT); } else { rc = mdb_node_read(mc, leaf, data); } } } } break; case MDB_GET_BOTH: case MDB_GET_BOTH_RANGE: if (data == NULL) { rc = EINVAL; break; } if (mc->mc_xcursor == NULL) { rc = MDB_INCOMPATIBLE; break; } /* FALLTHRU */ case MDB_SET: case MDB_SET_KEY: case MDB_SET_RANGE: if (key == NULL) { rc = EINVAL; } else { rc = mdb_cursor_set(mc, key, data, op, op == MDB_SET_RANGE ? NULL : &exact); } break; case MDB_GET_MULTIPLE: if (data == NULL || !(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } rc = MDB_SUCCESS; if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) || (mc->mc_xcursor->mx_cursor.mc_flags & C_EOF)) break; goto fetchm; case MDB_NEXT_MULTIPLE: if (data == NULL) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } rc = mdb_cursor_next(mc, key, data, MDB_NEXT_DUP); if (rc == MDB_SUCCESS) { if (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) { MDB_cursor *mx; fetchm: mx = &mc->mc_xcursor->mx_cursor; data->mv_size = NUMKEYS(mx->mc_pg[mx->mc_top]) * mx->mc_db->md_pad; data->mv_data = METADATA(mx->mc_pg[mx->mc_top]); mx->mc_ki[mx->mc_top] = NUMKEYS(mx->mc_pg[mx->mc_top])-1; } else { rc = MDB_NOTFOUND; } } break; case MDB_PREV_MULTIPLE: if (data == NULL) { rc = EINVAL; break; } if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { rc = MDB_INCOMPATIBLE; break; } if (!(mc->mc_flags & C_INITIALIZED)) rc = mdb_cursor_last(mc, key, data); else rc = MDB_SUCCESS; if (rc == MDB_SUCCESS) { MDB_cursor *mx = &mc->mc_xcursor->mx_cursor; if (mx->mc_flags & C_INITIALIZED) { rc = mdb_cursor_sibling(mx, 0); if (rc == MDB_SUCCESS) goto fetchm; } else { rc = MDB_NOTFOUND; } } break; case MDB_NEXT: case MDB_NEXT_DUP: case MDB_NEXT_NODUP: rc = mdb_cursor_next(mc, key, data, op); break; case MDB_PREV: case MDB_PREV_DUP: case MDB_PREV_NODUP: rc = mdb_cursor_prev(mc, key, data, op); break; case MDB_FIRST: rc = mdb_cursor_first(mc, key, data); break; case MDB_FIRST_DUP: mfunc = mdb_cursor_first; mmove: if (data == NULL || !(mc->mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } if (mc->mc_xcursor == NULL) { rc = MDB_INCOMPATIBLE; break; } if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) { mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]); rc = MDB_NOTFOUND; break; } { MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { MDB_GET_KEY(leaf, key); rc = mdb_node_read(mc, leaf, data); break; } } if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) { rc = EINVAL; break; } rc = mfunc(&mc->mc_xcursor->mx_cursor, data, NULL); break; case MDB_LAST: rc = mdb_cursor_last(mc, key, data); break; case MDB_LAST_DUP: mfunc = mdb_cursor_last; goto mmove; default: DPRINTF(("unhandled/unimplemented cursor operation %u", op)); rc = EINVAL; break; } if (mc->mc_flags & C_DEL) mc->mc_flags ^= C_DEL; return rc; } /** Touch all the pages in the cursor stack. Set mc_top. * Makes sure all the pages are writable, before attempting a write operation. * @param[in] mc The cursor to operate on. */ static int mdb_cursor_touch(MDB_cursor *mc) { int rc = MDB_SUCCESS; if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & (DB_DIRTY|DB_DUPDATA))) { /* Touch DB record of named DB */ MDB_cursor mc2; MDB_xcursor mcx; if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi)) return MDB_BAD_DBI; mdb_cursor_init(&mc2, mc->mc_txn, MAIN_DBI, &mcx); rc = mdb_page_search(&mc2, &mc->mc_dbx->md_name, MDB_PS_MODIFY); if (rc) return rc; *mc->mc_dbflag |= DB_DIRTY; } mc->mc_top = 0; if (mc->mc_snum) { do { rc = mdb_page_touch(mc); } while (!rc && ++(mc->mc_top) < mc->mc_snum); mc->mc_top = mc->mc_snum-1; } return rc; } /** Do not spill pages to disk if txn is getting full, may fail instead */ #define MDB_NOSPILL 0x8000 int mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data, unsigned int flags) { MDB_env *env; MDB_node *leaf = NULL; MDB_page *fp, *mp, *sub_root = NULL; uint16_t fp_flags; MDB_val xdata, *rdata, dkey, olddata; MDB_db dummy; int do_sub = 0, insert_key, insert_data; unsigned int mcount = 0, dcount = 0, nospill; size_t nsize; int rc, rc2; unsigned int nflags; DKBUF; if (mc == NULL || key == NULL) return EINVAL; env = mc->mc_txn->mt_env; /* Check this first so counter will always be zero on any * early failures. */ if (flags & MDB_MULTIPLE) { dcount = data[1].mv_size; data[1].mv_size = 0; if (!F_ISSET(mc->mc_db->md_flags, MDB_DUPFIXED)) return MDB_INCOMPATIBLE; } nospill = flags & MDB_NOSPILL; flags &= ~MDB_NOSPILL; if (mc->mc_txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (mc->mc_txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (key->mv_size-1 >= ENV_MAXKEY(env)) return MDB_BAD_VALSIZE; #if SIZE_MAX > MAXDATASIZE if (data->mv_size > ((mc->mc_db->md_flags & MDB_DUPSORT) ? ENV_MAXKEY(env) : MAXDATASIZE)) return MDB_BAD_VALSIZE; #else if ((mc->mc_db->md_flags & MDB_DUPSORT) && data->mv_size > ENV_MAXKEY(env)) return MDB_BAD_VALSIZE; #endif DPRINTF(("==> put db %d key [%s], size %"Z"u, data size %"Z"u", DDBI(mc), DKEY(key), key ? key->mv_size : 0, data->mv_size)); dkey.mv_size = 0; if (flags & MDB_CURRENT) { if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; rc = MDB_SUCCESS; } else if (mc->mc_db->md_root == P_INVALID) { /* new database, cursor has nothing to point to */ mc->mc_snum = 0; mc->mc_top = 0; mc->mc_flags &= ~C_INITIALIZED; rc = MDB_NO_ROOT; } else { int exact = 0; MDB_val d2; if (flags & MDB_APPEND) { MDB_val k2; rc = mdb_cursor_last(mc, &k2, &d2); if (rc == 0) { rc = mc->mc_dbx->md_cmp(key, &k2); if (rc > 0) { rc = MDB_NOTFOUND; mc->mc_ki[mc->mc_top]++; } else { /* new key is <= last key */ rc = MDB_KEYEXIST; } } } else { rc = mdb_cursor_set(mc, key, &d2, MDB_SET, &exact); } if ((flags & MDB_NOOVERWRITE) && rc == 0) { DPRINTF(("duplicate key [%s]", DKEY(key))); *data = d2; return MDB_KEYEXIST; } if (rc && rc != MDB_NOTFOUND) return rc; } if (mc->mc_flags & C_DEL) mc->mc_flags ^= C_DEL; /* Cursor is positioned, check for room in the dirty list */ if (!nospill) { if (flags & MDB_MULTIPLE) { rdata = &xdata; xdata.mv_size = data->mv_size * dcount; } else { rdata = data; } if ((rc2 = mdb_page_spill(mc, key, rdata))) return rc2; } if (rc == MDB_NO_ROOT) { MDB_page *np; /* new database, write a root leaf page */ DPUTS("allocating new root leaf page"); if ((rc2 = mdb_page_new(mc, P_LEAF, 1, &np))) { return rc2; } mdb_cursor_push(mc, np); mc->mc_db->md_root = np->mp_pgno; mc->mc_db->md_depth++; *mc->mc_dbflag |= DB_DIRTY; if ((mc->mc_db->md_flags & (MDB_DUPSORT|MDB_DUPFIXED)) == MDB_DUPFIXED) np->mp_flags |= P_LEAF2; mc->mc_flags |= C_INITIALIZED; } else { /* make sure all cursor pages are writable */ rc2 = mdb_cursor_touch(mc); if (rc2) return rc2; } insert_key = insert_data = rc; if (insert_key) { /* The key does not exist */ DPRINTF(("inserting key at index %i", mc->mc_ki[mc->mc_top])); if ((mc->mc_db->md_flags & MDB_DUPSORT) && LEAFSIZE(key, data) > env->me_nodemax) { /* Too big for a node, insert in sub-DB. Set up an empty * "old sub-page" for prep_subDB to expand to a full page. */ fp_flags = P_LEAF|P_DIRTY; fp = env->me_pbuf; fp->mp_pad = data->mv_size; /* used if MDB_DUPFIXED */ fp->mp_lower = fp->mp_upper = (PAGEHDRSZ-PAGEBASE); olddata.mv_size = PAGEHDRSZ; goto prep_subDB; } } else { /* there's only a key anyway, so this is a no-op */ if (IS_LEAF2(mc->mc_pg[mc->mc_top])) { char *ptr; unsigned int ksize = mc->mc_db->md_pad; if (key->mv_size != ksize) return MDB_BAD_VALSIZE; ptr = LEAF2KEY(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], ksize); memcpy(ptr, key->mv_data, ksize); fix_parent: /* if overwriting slot 0 of leaf, need to * update branch key if there is a parent page */ if (mc->mc_top && !mc->mc_ki[mc->mc_top]) { unsigned short dtop = 1; mc->mc_top--; /* slot 0 is always an empty key, find real slot */ while (mc->mc_top && !mc->mc_ki[mc->mc_top]) { mc->mc_top--; dtop++; } if (mc->mc_ki[mc->mc_top]) rc2 = mdb_update_key(mc, key); else rc2 = MDB_SUCCESS; mc->mc_top += dtop; if (rc2) return rc2; } return MDB_SUCCESS; } more: leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); olddata.mv_size = NODEDSZ(leaf); olddata.mv_data = NODEDATA(leaf); /* DB has dups? */ if (F_ISSET(mc->mc_db->md_flags, MDB_DUPSORT)) { /* Prepare (sub-)page/sub-DB to accept the new item, * if needed. fp: old sub-page or a header faking * it. mp: new (sub-)page. offset: growth in page * size. xdata: node data with new page or DB. */ unsigned i, offset = 0; mp = fp = xdata.mv_data = env->me_pbuf; mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno; /* Was a single item before, must convert now */ if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { MDB_cmp_func *dcmp; /* Just overwrite the current item */ if (flags == MDB_CURRENT) goto current; dcmp = mc->mc_dbx->md_dcmp; #if UINT_MAX < SIZE_MAX if (dcmp == mdb_cmp_int && olddata.mv_size == sizeof(size_t)) dcmp = mdb_cmp_clong; #endif /* does data match? */ if (!dcmp(data, &olddata)) { if (flags & (MDB_NODUPDATA|MDB_APPENDDUP)) return MDB_KEYEXIST; /* overwrite it */ goto current; } /* Back up original data item */ dkey.mv_size = olddata.mv_size; dkey.mv_data = memcpy(fp+1, olddata.mv_data, olddata.mv_size); /* Make sub-page header for the dup items, with dummy body */ fp->mp_flags = P_LEAF|P_DIRTY|P_SUBP; fp->mp_lower = (PAGEHDRSZ-PAGEBASE); xdata.mv_size = PAGEHDRSZ + dkey.mv_size + data->mv_size; if (mc->mc_db->md_flags & MDB_DUPFIXED) { fp->mp_flags |= P_LEAF2; fp->mp_pad = data->mv_size; xdata.mv_size += 2 * data->mv_size; /* leave space for 2 more */ } else { xdata.mv_size += 2 * (sizeof(indx_t) + NODESIZE) + (dkey.mv_size & 1) + (data->mv_size & 1); } fp->mp_upper = xdata.mv_size - PAGEBASE; olddata.mv_size = xdata.mv_size; /* pretend olddata is fp */ } else if (leaf->mn_flags & F_SUBDATA) { /* Data is on sub-DB, just store it */ flags |= F_DUPDATA|F_SUBDATA; goto put_sub; } else { /* Data is on sub-page */ fp = olddata.mv_data; switch (flags) { default: if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { offset = EVEN(NODESIZE + sizeof(indx_t) + data->mv_size); break; } offset = fp->mp_pad; if (SIZELEFT(fp) < offset) { offset *= 4; /* space for 4 more */ break; } /* FALLTHRU */ /* Big enough MDB_DUPFIXED sub-page */ case MDB_CURRENT: fp->mp_flags |= P_DIRTY; COPY_PGNO(fp->mp_pgno, mp->mp_pgno); mc->mc_xcursor->mx_cursor.mc_pg[0] = fp; flags |= F_DUPDATA; goto put_sub; } xdata.mv_size = olddata.mv_size + offset; } fp_flags = fp->mp_flags; if (NODESIZE + NODEKSZ(leaf) + xdata.mv_size > env->me_nodemax) { /* Too big for a sub-page, convert to sub-DB */ fp_flags &= ~P_SUBP; prep_subDB: if (mc->mc_db->md_flags & MDB_DUPFIXED) { fp_flags |= P_LEAF2; dummy.md_pad = fp->mp_pad; dummy.md_flags = MDB_DUPFIXED; if (mc->mc_db->md_flags & MDB_INTEGERDUP) dummy.md_flags |= MDB_INTEGERKEY; } else { dummy.md_pad = 0; dummy.md_flags = 0; } dummy.md_depth = 1; dummy.md_branch_pages = 0; dummy.md_leaf_pages = 1; dummy.md_overflow_pages = 0; dummy.md_entries = NUMKEYS(fp); xdata.mv_size = sizeof(MDB_db); xdata.mv_data = &dummy; if ((rc = mdb_page_alloc(mc, 1, &mp))) return rc; offset = env->me_psize - olddata.mv_size; flags |= F_DUPDATA|F_SUBDATA; dummy.md_root = mp->mp_pgno; sub_root = mp; } if (mp != fp) { mp->mp_flags = fp_flags | P_DIRTY; mp->mp_pad = fp->mp_pad; mp->mp_lower = fp->mp_lower; mp->mp_upper = fp->mp_upper + offset; if (fp_flags & P_LEAF2) { memcpy(METADATA(mp), METADATA(fp), NUMKEYS(fp) * fp->mp_pad); } else { memcpy((char *)mp + mp->mp_upper + PAGEBASE, (char *)fp + fp->mp_upper + PAGEBASE, olddata.mv_size - fp->mp_upper - PAGEBASE); memcpy((char *)(&mp->mp_ptrs), (char *)(&fp->mp_ptrs), NUMKEYS(fp) * sizeof(mp->mp_ptrs[0])); for (i=0; imp_ptrs[i] += offset; } } rdata = &xdata; flags |= F_DUPDATA; do_sub = 1; if (!insert_key) mdb_node_del(mc, 0); goto new_sub; } current: /* LMDB passes F_SUBDATA in 'flags' to write a DB record */ if ((leaf->mn_flags ^ flags) & F_SUBDATA) return MDB_INCOMPATIBLE; /* overflow page overwrites need special handling */ if (F_ISSET(leaf->mn_flags, F_BIGDATA)) { MDB_page *omp; pgno_t pg; int level, ovpages, dpages = OVPAGES(data->mv_size, env->me_psize); memcpy(&pg, olddata.mv_data, sizeof(pg)); if ((rc2 = mdb_page_get(mc, pg, &omp, &level)) != 0) return rc2; ovpages = omp->mp_pages; /* Is the ov page large enough? */ if (ovpages >= dpages) { if (!(omp->mp_flags & P_DIRTY) && (level || (env->me_flags & MDB_WRITEMAP))) { rc = mdb_page_unspill(mc->mc_txn, omp, &omp); if (rc) return rc; level = 0; /* dirty in this txn or clean */ } /* Is it dirty? */ if (omp->mp_flags & P_DIRTY) { /* yes, overwrite it. Note in this case we don't * bother to try shrinking the page if the new data * is smaller than the overflow threshold. */ if (level > 1) { /* It is writable only in a parent txn */ size_t sz = (size_t) env->me_psize * ovpages, off; MDB_page *np = mdb_page_malloc(mc->mc_txn, ovpages); MDB_ID2 id2; if (!np) return ENOMEM; id2.mid = pg; id2.mptr = np; /* Note - this page is already counted in parent's dirty_room */ rc2 = mdb_mid2l_insert(mc->mc_txn->mt_u.dirty_list, &id2); mdb_cassert(mc, rc2 == 0); /* Currently we make the page look as with put() in the * parent txn, in case the user peeks at MDB_RESERVEd * or unused parts. Some users treat ovpages specially. */ if (!(flags & MDB_RESERVE)) { /* Skip the part where LMDB will put *data. * Copy end of page, adjusting alignment so * compiler may copy words instead of bytes. */ off = (PAGEHDRSZ + data->mv_size) & -sizeof(size_t); memcpy((size_t *)((char *)np + off), (size_t *)((char *)omp + off), sz - off); sz = PAGEHDRSZ; } memcpy(np, omp, sz); /* Copy beginning of page */ omp = np; } SETDSZ(leaf, data->mv_size); if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = METADATA(omp); else memcpy(METADATA(omp), data->mv_data, data->mv_size); return MDB_SUCCESS; } } if ((rc2 = mdb_ovpage_free(mc, omp)) != MDB_SUCCESS) return rc2; } else if (data->mv_size == olddata.mv_size) { /* same size, just replace it. Note that we could * also reuse this node if the new data is smaller, * but instead we opt to shrink the node in that case. */ if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = olddata.mv_data; else if (!(mc->mc_flags & C_SUB)) memcpy(olddata.mv_data, data->mv_data, data->mv_size); else { memcpy(NODEKEY(leaf), key->mv_data, key->mv_size); goto fix_parent; } return MDB_SUCCESS; } mdb_node_del(mc, 0); } rdata = data; new_sub: nflags = flags & NODE_ADD_FLAGS; nsize = IS_LEAF2(mc->mc_pg[mc->mc_top]) ? key->mv_size : mdb_leaf_size(env, key, rdata); if (SIZELEFT(mc->mc_pg[mc->mc_top]) < nsize) { if (( flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA ) nflags &= ~MDB_APPEND; /* sub-page may need room to grow */ if (!insert_key) nflags |= MDB_SPLIT_REPLACE; rc = mdb_page_split(mc, key, rdata, P_INVALID, nflags); } else { /* There is room already in this leaf page. */ rc = mdb_node_add(mc, mc->mc_ki[mc->mc_top], key, rdata, 0, nflags); if (rc == 0) { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; unsigned i = mc->mc_top; MDB_page *mp = mc->mc_pg[i]; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc || m3->mc_snum < mc->mc_snum || m3->mc_pg[i] != mp) continue; if (m3->mc_ki[i] >= mc->mc_ki[i] && insert_key) { m3->mc_ki[i]++; } XCURSOR_REFRESH(m3, i, mp); } } } if (rc == MDB_SUCCESS) { /* Now store the actual data in the child DB. Note that we're * storing the user data in the keys field, so there are strict * size limits on dupdata. The actual data fields of the child * DB are all zero size. */ if (do_sub) { int xflags, new_dupdata; size_t ecount; put_sub: xdata.mv_size = 0; xdata.mv_data = ""; leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if ((flags & (MDB_CURRENT|MDB_APPENDDUP)) == MDB_CURRENT) { xflags = MDB_CURRENT|MDB_NOSPILL; } else { mdb_xcursor_init1(mc, leaf); xflags = (flags & MDB_NODUPDATA) ? MDB_NOOVERWRITE|MDB_NOSPILL : MDB_NOSPILL; } if (sub_root) mc->mc_xcursor->mx_cursor.mc_pg[0] = sub_root; new_dupdata = (int)dkey.mv_size; /* converted, write the original data first */ if (dkey.mv_size) { rc = mdb_cursor_put(&mc->mc_xcursor->mx_cursor, &dkey, &xdata, xflags); if (rc) goto bad_sub; /* we've done our job */ dkey.mv_size = 0; } if (!(leaf->mn_flags & F_SUBDATA) || sub_root) { /* Adjust other cursors pointing to mp */ MDB_cursor *m2; MDB_xcursor *mx = mc->mc_xcursor; unsigned i = mc->mc_top; MDB_page *mp = mc->mc_pg[i]; for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2 == mc || m2->mc_snum < mc->mc_snum) continue; if (!(m2->mc_flags & C_INITIALIZED)) continue; if (m2->mc_pg[i] == mp) { if (m2->mc_ki[i] == mc->mc_ki[i]) { mdb_xcursor_init2(m2, mx, new_dupdata); } else if (!insert_key) { XCURSOR_REFRESH(m2, i, mp); } } } } ecount = mc->mc_xcursor->mx_db.md_entries; if (flags & MDB_APPENDDUP) xflags |= MDB_APPEND; rc = mdb_cursor_put(&mc->mc_xcursor->mx_cursor, data, &xdata, xflags); if (flags & F_SUBDATA) { void *db = NODEDATA(leaf); memcpy(db, &mc->mc_xcursor->mx_db, sizeof(MDB_db)); } insert_data = mc->mc_xcursor->mx_db.md_entries - ecount; } /* Increment count unless we just replaced an existing item. */ if (insert_data) mc->mc_db->md_entries++; if (insert_key) { /* Invalidate txn if we created an empty sub-DB */ if (rc) goto bad_sub; /* If we succeeded and the key didn't exist before, * make sure the cursor is marked valid. */ mc->mc_flags |= C_INITIALIZED; } if (flags & MDB_MULTIPLE) { if (!rc) { mcount++; /* let caller know how many succeeded, if any */ data[1].mv_size = mcount; if (mcount < dcount) { data[0].mv_data = (char *)data[0].mv_data + data[0].mv_size; insert_key = insert_data = 0; goto more; } } } return rc; bad_sub: if (rc == MDB_KEYEXIST) /* should not happen, we deleted that item */ rc = MDB_CORRUPTED; } mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_cursor_del(MDB_cursor *mc, unsigned int flags) { MDB_node *leaf; MDB_page *mp; int rc; if (mc->mc_txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (mc->mc_txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) return MDB_NOTFOUND; if (!(flags & MDB_NOSPILL) && (rc = mdb_page_spill(mc, NULL, NULL))) return rc; rc = mdb_cursor_touch(mc); if (rc) return rc; mp = mc->mc_pg[mc->mc_top]; if (!IS_LEAF(mp)) return MDB_CORRUPTED; if (IS_LEAF2(mp)) goto del_key; leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { if (flags & MDB_NODUPDATA) { /* mdb_cursor_del0() will subtract the final entry */ mc->mc_db->md_entries -= mc->mc_xcursor->mx_db.md_entries - 1; mc->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED; } else { if (!F_ISSET(leaf->mn_flags, F_SUBDATA)) { mc->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); } rc = mdb_cursor_del(&mc->mc_xcursor->mx_cursor, MDB_NOSPILL); if (rc) return rc; /* If sub-DB still has entries, we're done */ if (mc->mc_xcursor->mx_db.md_entries) { if (leaf->mn_flags & F_SUBDATA) { /* update subDB info */ void *db = NODEDATA(leaf); memcpy(db, &mc->mc_xcursor->mx_db, sizeof(MDB_db)); } else { MDB_cursor *m2; /* shrink fake page */ mdb_node_shrink(mp, mc->mc_ki[mc->mc_top]); leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]); mc->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); /* fix other sub-DB cursors pointed at fake pages on this page */ for (m2 = mc->mc_txn->mt_cursors[mc->mc_dbi]; m2; m2=m2->mc_next) { if (m2 == mc || m2->mc_snum < mc->mc_snum) continue; if (!(m2->mc_flags & C_INITIALIZED)) continue; if (m2->mc_pg[mc->mc_top] == mp) { XCURSOR_REFRESH(m2, mc->mc_top, mp); } } } mc->mc_db->md_entries--; return rc; } else { mc->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED; } /* otherwise fall thru and delete the sub-DB */ } if (leaf->mn_flags & F_SUBDATA) { /* add all the child DB's pages to the free list */ rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); if (rc) goto fail; } } /* LMDB passes F_SUBDATA in 'flags' to delete a DB record */ else if ((leaf->mn_flags ^ flags) & F_SUBDATA) { rc = MDB_INCOMPATIBLE; goto fail; } /* add overflow pages to free list */ if (F_ISSET(leaf->mn_flags, F_BIGDATA)) { MDB_page *omp; pgno_t pg; memcpy(&pg, NODEDATA(leaf), sizeof(pg)); if ((rc = mdb_page_get(mc, pg, &omp, NULL)) || (rc = mdb_ovpage_free(mc, omp))) goto fail; } del_key: return mdb_cursor_del0(mc); fail: mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } /** Allocate and initialize new pages for a database. * Set #MDB_TXN_ERROR on failure. * @param[in] mc a cursor on the database being added to. * @param[in] flags flags defining what type of page is being allocated. * @param[in] num the number of pages to allocate. This is usually 1, * unless allocating overflow pages for a large record. * @param[out] mp Address of a page, or NULL on failure. * @return 0 on success, non-zero on failure. */ static int mdb_page_new(MDB_cursor *mc, uint32_t flags, int num, MDB_page **mp) { MDB_page *np; int rc; if ((rc = mdb_page_alloc(mc, num, &np))) return rc; DPRINTF(("allocated new mpage %"Z"u, page size %u", np->mp_pgno, mc->mc_txn->mt_env->me_psize)); np->mp_flags = flags | P_DIRTY; np->mp_lower = (PAGEHDRSZ-PAGEBASE); np->mp_upper = mc->mc_txn->mt_env->me_psize - PAGEBASE; if (IS_BRANCH(np)) mc->mc_db->md_branch_pages++; else if (IS_LEAF(np)) mc->mc_db->md_leaf_pages++; else if (IS_OVERFLOW(np)) { mc->mc_db->md_overflow_pages += num; np->mp_pages = num; } *mp = np; return 0; } /** Calculate the size of a leaf node. * The size depends on the environment's page size; if a data item * is too large it will be put onto an overflow page and the node * size will only include the key and not the data. Sizes are always * rounded up to an even number of bytes, to guarantee 2-byte alignment * of the #MDB_node headers. * @param[in] env The environment handle. * @param[in] key The key for the node. * @param[in] data The data for the node. * @return The number of bytes needed to store the node. */ static size_t mdb_leaf_size(MDB_env *env, MDB_val *key, MDB_val *data) { size_t sz; sz = LEAFSIZE(key, data); if (sz > env->me_nodemax) { /* put on overflow page */ sz -= data->mv_size - sizeof(pgno_t); } return EVEN(sz + sizeof(indx_t)); } /** Calculate the size of a branch node. * The size should depend on the environment's page size but since * we currently don't support spilling large keys onto overflow * pages, it's simply the size of the #MDB_node header plus the * size of the key. Sizes are always rounded up to an even number * of bytes, to guarantee 2-byte alignment of the #MDB_node headers. * @param[in] env The environment handle. * @param[in] key The key for the node. * @return The number of bytes needed to store the node. */ static size_t mdb_branch_size(MDB_env *env, MDB_val *key) { size_t sz; sz = INDXSIZE(key); if (sz > env->me_nodemax) { /* put on overflow page */ /* not implemented */ /* sz -= key->size - sizeof(pgno_t); */ } return sz + sizeof(indx_t); } /** Add a node to the page pointed to by the cursor. * Set #MDB_TXN_ERROR on failure. * @param[in] mc The cursor for this operation. * @param[in] indx The index on the page where the new node should be added. * @param[in] key The key for the new node. * @param[in] data The data for the new node, if any. * @param[in] pgno The page number, if adding a branch node. * @param[in] flags Flags for the node. * @return 0 on success, non-zero on failure. Possible errors are: *
    *
  • ENOMEM - failed to allocate overflow pages for the node. *
  • MDB_PAGE_FULL - there is insufficient room in the page. This error * should never happen since all callers already calculate the * page's free space before calling this function. *
*/ static int mdb_node_add(MDB_cursor *mc, indx_t indx, MDB_val *key, MDB_val *data, pgno_t pgno, unsigned int flags) { unsigned int i; size_t node_size = NODESIZE; ssize_t room; indx_t ofs; MDB_node *node; MDB_page *mp = mc->mc_pg[mc->mc_top]; MDB_page *ofp = NULL; /* overflow page */ void *ndata; DKBUF; mdb_cassert(mc, mp->mp_upper >= mp->mp_lower); DPRINTF(("add to %s %spage %"Z"u index %i, data size %"Z"u key size %"Z"u [%s]", IS_LEAF(mp) ? "leaf" : "branch", IS_SUBP(mp) ? "sub-" : "", mdb_dbg_pgno(mp), indx, data ? data->mv_size : 0, key ? key->mv_size : 0, key ? DKEY(key) : "null")); if (IS_LEAF2(mp)) { /* Move higher keys up one slot. */ int ksize = mc->mc_db->md_pad, dif; char *ptr = LEAF2KEY(mp, indx, ksize); dif = NUMKEYS(mp) - indx; if (dif > 0) memmove(ptr+ksize, ptr, dif*ksize); /* insert new key */ memcpy(ptr, key->mv_data, ksize); /* Just using these for counting */ mp->mp_lower += sizeof(indx_t); mp->mp_upper -= ksize - sizeof(indx_t); return MDB_SUCCESS; } room = (ssize_t)SIZELEFT(mp) - (ssize_t)sizeof(indx_t); if (key != NULL) node_size += key->mv_size; if (IS_LEAF(mp)) { mdb_cassert(mc, key && data); if (F_ISSET(flags, F_BIGDATA)) { /* Data already on overflow page. */ node_size += sizeof(pgno_t); } else if (node_size + data->mv_size > mc->mc_txn->mt_env->me_nodemax) { int ovpages = OVPAGES(data->mv_size, mc->mc_txn->mt_env->me_psize); int rc; /* Put data on overflow page. */ DPRINTF(("data size is %"Z"u, node would be %"Z"u, put data on overflow page", data->mv_size, node_size+data->mv_size)); node_size = EVEN(node_size + sizeof(pgno_t)); if ((ssize_t)node_size > room) goto full; if ((rc = mdb_page_new(mc, P_OVERFLOW, ovpages, &ofp))) return rc; DPRINTF(("allocated overflow page %"Z"u", ofp->mp_pgno)); flags |= F_BIGDATA; goto update; } else { node_size += data->mv_size; } } node_size = EVEN(node_size); if ((ssize_t)node_size > room) goto full; update: /* Move higher pointers up one slot. */ for (i = NUMKEYS(mp); i > indx; i--) mp->mp_ptrs[i] = mp->mp_ptrs[i - 1]; /* Adjust free space offsets. */ ofs = mp->mp_upper - node_size; mdb_cassert(mc, ofs >= mp->mp_lower + sizeof(indx_t)); mp->mp_ptrs[indx] = ofs; mp->mp_upper = ofs; mp->mp_lower += sizeof(indx_t); /* Write the node data. */ node = NODEPTR(mp, indx); node->mn_ksize = (key == NULL) ? 0 : key->mv_size; node->mn_flags = flags; if (IS_LEAF(mp)) SETDSZ(node,data->mv_size); else SETPGNO(node,pgno); if (key) memcpy(NODEKEY(node), key->mv_data, key->mv_size); if (IS_LEAF(mp)) { ndata = NODEDATA(node); if (ofp == NULL) { if (F_ISSET(flags, F_BIGDATA)) memcpy(ndata, data->mv_data, sizeof(pgno_t)); else if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = ndata; else memcpy(ndata, data->mv_data, data->mv_size); } else { memcpy(ndata, &ofp->mp_pgno, sizeof(pgno_t)); ndata = METADATA(ofp); if (F_ISSET(flags, MDB_RESERVE)) data->mv_data = ndata; else memcpy(ndata, data->mv_data, data->mv_size); } } return MDB_SUCCESS; full: DPRINTF(("not enough room in page %"Z"u, got %u ptrs", mdb_dbg_pgno(mp), NUMKEYS(mp))); DPRINTF(("upper-lower = %u - %u = %"Z"d", mp->mp_upper,mp->mp_lower,room)); DPRINTF(("node size = %"Z"u", node_size)); mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return MDB_PAGE_FULL; } /** Delete the specified node from a page. * @param[in] mc Cursor pointing to the node to delete. * @param[in] ksize The size of a node. Only used if the page is * part of a #MDB_DUPFIXED database. */ static void mdb_node_del(MDB_cursor *mc, int ksize) { MDB_page *mp = mc->mc_pg[mc->mc_top]; indx_t indx = mc->mc_ki[mc->mc_top]; unsigned int sz; indx_t i, j, numkeys, ptr; MDB_node *node; char *base; DPRINTF(("delete node %u on %s page %"Z"u", indx, IS_LEAF(mp) ? "leaf" : "branch", mdb_dbg_pgno(mp))); numkeys = NUMKEYS(mp); mdb_cassert(mc, indx < numkeys); if (IS_LEAF2(mp)) { int x = numkeys - 1 - indx; base = LEAF2KEY(mp, indx, ksize); if (x) memmove(base, base + ksize, x * ksize); mp->mp_lower -= sizeof(indx_t); mp->mp_upper += ksize - sizeof(indx_t); return; } node = NODEPTR(mp, indx); sz = NODESIZE + node->mn_ksize; if (IS_LEAF(mp)) { if (F_ISSET(node->mn_flags, F_BIGDATA)) sz += sizeof(pgno_t); else sz += NODEDSZ(node); } sz = EVEN(sz); ptr = mp->mp_ptrs[indx]; for (i = j = 0; i < numkeys; i++) { if (i != indx) { mp->mp_ptrs[j] = mp->mp_ptrs[i]; if (mp->mp_ptrs[i] < ptr) mp->mp_ptrs[j] += sz; j++; } } base = (char *)mp + mp->mp_upper + PAGEBASE; memmove(base + sz, base, ptr - mp->mp_upper); mp->mp_lower -= sizeof(indx_t); mp->mp_upper += sz; } /** Compact the main page after deleting a node on a subpage. * @param[in] mp The main page to operate on. * @param[in] indx The index of the subpage on the main page. */ static void mdb_node_shrink(MDB_page *mp, indx_t indx) { MDB_node *node; MDB_page *sp, *xp; char *base; indx_t delta, nsize, len, ptr; int i; node = NODEPTR(mp, indx); sp = (MDB_page *)NODEDATA(node); delta = SIZELEFT(sp); nsize = NODEDSZ(node) - delta; /* Prepare to shift upward, set len = length(subpage part to shift) */ if (IS_LEAF2(sp)) { len = nsize; if (nsize & 1) return; /* do not make the node uneven-sized */ } else { xp = (MDB_page *)((char *)sp + delta); /* destination subpage */ for (i = NUMKEYS(sp); --i >= 0; ) xp->mp_ptrs[i] = sp->mp_ptrs[i] - delta; len = PAGEHDRSZ; } sp->mp_upper = sp->mp_lower; COPY_PGNO(sp->mp_pgno, mp->mp_pgno); SETDSZ(node, nsize); /* Shift upward */ base = (char *)mp + mp->mp_upper + PAGEBASE; memmove(base + delta, base, (char *)sp + len - base); ptr = mp->mp_ptrs[indx]; for (i = NUMKEYS(mp); --i >= 0; ) { if (mp->mp_ptrs[i] <= ptr) mp->mp_ptrs[i] += delta; } mp->mp_upper += delta; } /** Initial setup of a sorted-dups cursor. * Sorted duplicates are implemented as a sub-database for the given key. * The duplicate data items are actually keys of the sub-database. * Operations on the duplicate data items are performed using a sub-cursor * initialized when the sub-database is first accessed. This function does * the preliminary setup of the sub-cursor, filling in the fields that * depend only on the parent DB. * @param[in] mc The main cursor whose sorted-dups cursor is to be initialized. */ static void mdb_xcursor_init0(MDB_cursor *mc) { MDB_xcursor *mx = mc->mc_xcursor; mx->mx_cursor.mc_xcursor = NULL; mx->mx_cursor.mc_txn = mc->mc_txn; mx->mx_cursor.mc_db = &mx->mx_db; mx->mx_cursor.mc_dbx = &mx->mx_dbx; mx->mx_cursor.mc_dbi = mc->mc_dbi; mx->mx_cursor.mc_dbflag = &mx->mx_dbflag; mx->mx_cursor.mc_snum = 0; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags = C_SUB; mx->mx_dbx.md_name.mv_size = 0; mx->mx_dbx.md_name.mv_data = NULL; mx->mx_dbx.md_cmp = mc->mc_dbx->md_dcmp; mx->mx_dbx.md_dcmp = NULL; mx->mx_dbx.md_rel = mc->mc_dbx->md_rel; } /** Final setup of a sorted-dups cursor. * Sets up the fields that depend on the data from the main cursor. * @param[in] mc The main cursor whose sorted-dups cursor is to be initialized. * @param[in] node The data containing the #MDB_db record for the * sorted-dup database. */ static void mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node) { MDB_xcursor *mx = mc->mc_xcursor; if (node->mn_flags & F_SUBDATA) { memcpy(&mx->mx_db, NODEDATA(node), sizeof(MDB_db)); mx->mx_cursor.mc_pg[0] = 0; mx->mx_cursor.mc_snum = 0; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags = C_SUB; } else { MDB_page *fp = NODEDATA(node); mx->mx_db.md_pad = 0; mx->mx_db.md_flags = 0; mx->mx_db.md_depth = 1; mx->mx_db.md_branch_pages = 0; mx->mx_db.md_leaf_pages = 1; mx->mx_db.md_overflow_pages = 0; mx->mx_db.md_entries = NUMKEYS(fp); COPY_PGNO(mx->mx_db.md_root, fp->mp_pgno); mx->mx_cursor.mc_snum = 1; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags = C_INITIALIZED|C_SUB; mx->mx_cursor.mc_pg[0] = fp; mx->mx_cursor.mc_ki[0] = 0; if (mc->mc_db->md_flags & MDB_DUPFIXED) { mx->mx_db.md_flags = MDB_DUPFIXED; mx->mx_db.md_pad = fp->mp_pad; if (mc->mc_db->md_flags & MDB_INTEGERDUP) mx->mx_db.md_flags |= MDB_INTEGERKEY; } } DPRINTF(("Sub-db -%u root page %"Z"u", mx->mx_cursor.mc_dbi, mx->mx_db.md_root)); mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; #if UINT_MAX < SIZE_MAX if (mx->mx_dbx.md_cmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t)) mx->mx_dbx.md_cmp = mdb_cmp_clong; #endif } /** Fixup a sorted-dups cursor due to underlying update. * Sets up some fields that depend on the data from the main cursor. * Almost the same as init1, but skips initialization steps if the * xcursor had already been used. * @param[in] mc The main cursor whose sorted-dups cursor is to be fixed up. * @param[in] src_mx The xcursor of an up-to-date cursor. * @param[in] new_dupdata True if converting from a non-#F_DUPDATA item. */ static void mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int new_dupdata) { MDB_xcursor *mx = mc->mc_xcursor; if (new_dupdata) { mx->mx_cursor.mc_snum = 1; mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags |= C_INITIALIZED; mx->mx_cursor.mc_ki[0] = 0; mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; #if UINT_MAX < SIZE_MAX mx->mx_dbx.md_cmp = src_mx->mx_dbx.md_cmp; #endif } else if (!(mx->mx_cursor.mc_flags & C_INITIALIZED)) { return; } mx->mx_db = src_mx->mx_db; mx->mx_cursor.mc_pg[0] = src_mx->mx_cursor.mc_pg[0]; DPRINTF(("Sub-db -%u root page %"Z"u", mx->mx_cursor.mc_dbi, mx->mx_db.md_root)); } /** Initialize a cursor for a given transaction and database. */ static void mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx) { mc->mc_next = NULL; mc->mc_backup = NULL; mc->mc_dbi = dbi; mc->mc_txn = txn; mc->mc_db = &txn->mt_dbs[dbi]; mc->mc_dbx = &txn->mt_dbxs[dbi]; mc->mc_dbflag = &txn->mt_dbflags[dbi]; mc->mc_snum = 0; mc->mc_top = 0; mc->mc_pg[0] = 0; mc->mc_ki[0] = 0; mc->mc_flags = 0; if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) { mdb_tassert(txn, mx != NULL); mc->mc_xcursor = mx; mdb_xcursor_init0(mc); } else { mc->mc_xcursor = NULL; } if (*mc->mc_dbflag & DB_STALE) { mdb_page_search(mc, NULL, MDB_PS_ROOTONLY); } } int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret) { MDB_cursor *mc; size_t size = sizeof(MDB_cursor); if (!ret || !TXN_DBI_EXIST(txn, dbi, DB_VALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (dbi == FREE_DBI && !F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EINVAL; if (txn->mt_dbs[dbi].md_flags & MDB_DUPSORT) size += sizeof(MDB_xcursor); if ((mc = malloc(size)) != NULL) { mdb_cursor_init(mc, txn, dbi, (MDB_xcursor *)(mc + 1)); if (txn->mt_cursors) { mc->mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = mc; mc->mc_flags |= C_UNTRACK; } } else { return ENOMEM; } *ret = mc; return MDB_SUCCESS; } int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *mc) { if (!mc || !TXN_DBI_EXIST(txn, mc->mc_dbi, DB_VALID)) return EINVAL; if ((mc->mc_flags & C_UNTRACK) || txn->mt_cursors) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; mdb_cursor_init(mc, txn, mc->mc_dbi, mc->mc_xcursor); return MDB_SUCCESS; } /* Return the count of duplicate data items for the current key */ int mdb_cursor_count(MDB_cursor *mc, size_t *countp) { MDB_node *leaf; if (mc == NULL || countp == NULL) return EINVAL; if (mc->mc_xcursor == NULL) return MDB_INCOMPATIBLE; if (mc->mc_txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (!(mc->mc_flags & C_INITIALIZED)) return EINVAL; if (!mc->mc_snum) return MDB_NOTFOUND; if (mc->mc_flags & C_EOF) { if (mc->mc_ki[mc->mc_top] >= NUMKEYS(mc->mc_pg[mc->mc_top])) return MDB_NOTFOUND; mc->mc_flags ^= C_EOF; } leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { *countp = 1; } else { if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) return EINVAL; *countp = mc->mc_xcursor->mx_db.md_entries; } return MDB_SUCCESS; } void mdb_cursor_close(MDB_cursor *mc) { if (mc && !mc->mc_backup) { /* remove from txn, if tracked */ if ((mc->mc_flags & C_UNTRACK) && mc->mc_txn->mt_cursors) { MDB_cursor **prev = &mc->mc_txn->mt_cursors[mc->mc_dbi]; while (*prev && *prev != mc) prev = &(*prev)->mc_next; if (*prev == mc) *prev = mc->mc_next; } free(mc); } } MDB_txn * mdb_cursor_txn(MDB_cursor *mc) { if (!mc) return NULL; return mc->mc_txn; } MDB_dbi mdb_cursor_dbi(MDB_cursor *mc) { return mc->mc_dbi; } /** Replace the key for a branch node with a new key. * Set #MDB_TXN_ERROR on failure. * @param[in] mc Cursor pointing to the node to operate on. * @param[in] key The new key to use. * @return 0 on success, non-zero on failure. */ static int mdb_update_key(MDB_cursor *mc, MDB_val *key) { MDB_page *mp; MDB_node *node; char *base; size_t len; int delta, ksize, oksize; indx_t ptr, i, numkeys, indx; DKBUF; indx = mc->mc_ki[mc->mc_top]; mp = mc->mc_pg[mc->mc_top]; node = NODEPTR(mp, indx); ptr = mp->mp_ptrs[indx]; #if MDB_DEBUG { MDB_val k2; char kbuf2[DKBUF_MAXKEYSIZE*2+1]; k2.mv_data = NODEKEY(node); k2.mv_size = node->mn_ksize; DPRINTF(("update key %u (ofs %u) [%s] to [%s] on page %"Z"u", indx, ptr, mdb_dkey(&k2, kbuf2), DKEY(key), mp->mp_pgno)); } #endif /* Sizes must be 2-byte aligned. */ ksize = EVEN(key->mv_size); oksize = EVEN(node->mn_ksize); delta = ksize - oksize; /* Shift node contents if EVEN(key length) changed. */ if (delta) { if (delta > 0 && SIZELEFT(mp) < delta) { pgno_t pgno; /* not enough space left, do a delete and split */ DPRINTF(("Not enough room, delta = %d, splitting...", delta)); pgno = NODEPGNO(node); mdb_node_del(mc, 0); return mdb_page_split(mc, key, NULL, pgno, MDB_SPLIT_REPLACE); } numkeys = NUMKEYS(mp); for (i = 0; i < numkeys; i++) { if (mp->mp_ptrs[i] <= ptr) mp->mp_ptrs[i] -= delta; } base = (char *)mp + mp->mp_upper + PAGEBASE; len = ptr - mp->mp_upper + NODESIZE; memmove(base - delta, base, len); mp->mp_upper -= delta; node = NODEPTR(mp, indx); } /* But even if no shift was needed, update ksize */ if (node->mn_ksize != key->mv_size) node->mn_ksize = key->mv_size; if (key->mv_size) memcpy(NODEKEY(node), key->mv_data, key->mv_size); return MDB_SUCCESS; } static void mdb_cursor_copy(const MDB_cursor *csrc, MDB_cursor *cdst); /** Perform \b act while tracking temporary cursor \b mn */ #define WITH_CURSOR_TRACKING(mn, act) do { \ MDB_cursor dummy, *tracked, **tp = &(mn).mc_txn->mt_cursors[mn.mc_dbi]; \ if ((mn).mc_flags & C_SUB) { \ dummy.mc_flags = C_INITIALIZED; \ dummy.mc_xcursor = (MDB_xcursor *)&(mn); \ tracked = &dummy; \ } else { \ tracked = &(mn); \ } \ tracked->mc_next = *tp; \ *tp = tracked; \ { act; } \ *tp = tracked->mc_next; \ } while (0) /** Move a node from csrc to cdst. */ static int mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft) { MDB_node *srcnode; MDB_val key, data; pgno_t srcpg; MDB_cursor mn; int rc; unsigned short flags; DKBUF; /* Mark src and dst as dirty. */ if ((rc = mdb_page_touch(csrc)) || (rc = mdb_page_touch(cdst))) return rc; if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], csrc->mc_ki[csrc->mc_top], key.mv_size); data.mv_size = 0; data.mv_data = NULL; srcpg = 0; flags = 0; } else { srcnode = NODEPTR(csrc->mc_pg[csrc->mc_top], csrc->mc_ki[csrc->mc_top]); mdb_cassert(csrc, !((size_t)srcnode & 1)); srcpg = NODEPGNO(srcnode); flags = srcnode->mn_flags; if (csrc->mc_ki[csrc->mc_top] == 0 && IS_BRANCH(csrc->mc_pg[csrc->mc_top])) { unsigned int snum = csrc->mc_snum; MDB_node *s2; /* must find the lowest key below src */ rc = mdb_page_search_lowest(csrc); if (rc) return rc; if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size); } else { s2 = NODEPTR(csrc->mc_pg[csrc->mc_top], 0); key.mv_size = NODEKSZ(s2); key.mv_data = NODEKEY(s2); } csrc->mc_snum = snum--; csrc->mc_top = snum; } else { key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } data.mv_size = NODEDSZ(srcnode); data.mv_data = NODEDATA(srcnode); } mn.mc_xcursor = NULL; if (IS_BRANCH(cdst->mc_pg[cdst->mc_top]) && cdst->mc_ki[cdst->mc_top] == 0) { unsigned int snum = cdst->mc_snum; MDB_node *s2; MDB_val bkey; /* must find the lowest key below dst */ mdb_cursor_copy(cdst, &mn); rc = mdb_page_search_lowest(&mn); if (rc) return rc; if (IS_LEAF2(mn.mc_pg[mn.mc_top])) { bkey.mv_size = mn.mc_db->md_pad; bkey.mv_data = LEAF2KEY(mn.mc_pg[mn.mc_top], 0, bkey.mv_size); } else { s2 = NODEPTR(mn.mc_pg[mn.mc_top], 0); bkey.mv_size = NODEKSZ(s2); bkey.mv_data = NODEKEY(s2); } mn.mc_snum = snum--; mn.mc_top = snum; mn.mc_ki[snum] = 0; rc = mdb_update_key(&mn, &bkey); if (rc) return rc; } DPRINTF(("moving %s node %u [%s] on page %"Z"u to node %u on page %"Z"u", IS_LEAF(csrc->mc_pg[csrc->mc_top]) ? "leaf" : "branch", csrc->mc_ki[csrc->mc_top], DKEY(&key), csrc->mc_pg[csrc->mc_top]->mp_pgno, cdst->mc_ki[cdst->mc_top], cdst->mc_pg[cdst->mc_top]->mp_pgno)); /* Add the node to the destination page. */ rc = mdb_node_add(cdst, cdst->mc_ki[cdst->mc_top], &key, &data, srcpg, flags); if (rc != MDB_SUCCESS) return rc; /* Delete the node from the source page. */ mdb_node_del(csrc, key.mv_size); { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = csrc->mc_dbi; MDB_page *mpd, *mps; mps = csrc->mc_pg[csrc->mc_top]; /* If we're adding on the left, bump others up */ if (fromleft) { mpd = cdst->mc_pg[csrc->mc_top]; for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (!(m3->mc_flags & C_INITIALIZED) || m3->mc_top < csrc->mc_top) continue; if (m3 != cdst && m3->mc_pg[csrc->mc_top] == mpd && m3->mc_ki[csrc->mc_top] >= cdst->mc_ki[csrc->mc_top]) { m3->mc_ki[csrc->mc_top]++; } if (m3 !=csrc && m3->mc_pg[csrc->mc_top] == mps && m3->mc_ki[csrc->mc_top] == csrc->mc_ki[csrc->mc_top]) { m3->mc_pg[csrc->mc_top] = cdst->mc_pg[cdst->mc_top]; m3->mc_ki[csrc->mc_top] = cdst->mc_ki[cdst->mc_top]; m3->mc_ki[csrc->mc_top-1]++; } if (IS_LEAF(mps)) XCURSOR_REFRESH(m3, csrc->mc_top, m3->mc_pg[csrc->mc_top]); } } else /* Adding on the right, bump others down */ { for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == csrc) continue; if (!(m3->mc_flags & C_INITIALIZED) || m3->mc_top < csrc->mc_top) continue; if (m3->mc_pg[csrc->mc_top] == mps) { if (!m3->mc_ki[csrc->mc_top]) { m3->mc_pg[csrc->mc_top] = cdst->mc_pg[cdst->mc_top]; m3->mc_ki[csrc->mc_top] = cdst->mc_ki[cdst->mc_top]; m3->mc_ki[csrc->mc_top-1]--; } else { m3->mc_ki[csrc->mc_top]--; } if (IS_LEAF(mps)) XCURSOR_REFRESH(m3, csrc->mc_top, m3->mc_pg[csrc->mc_top]); } } } } /* Update the parent separators. */ if (csrc->mc_ki[csrc->mc_top] == 0) { if (csrc->mc_ki[csrc->mc_top-1] != 0) { if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_data = LEAF2KEY(csrc->mc_pg[csrc->mc_top], 0, key.mv_size); } else { srcnode = NODEPTR(csrc->mc_pg[csrc->mc_top], 0); key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } DPRINTF(("update separator for source page %"Z"u to [%s]", csrc->mc_pg[csrc->mc_top]->mp_pgno, DKEY(&key))); mdb_cursor_copy(csrc, &mn); mn.mc_snum--; mn.mc_top--; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_update_key(&mn, &key)); if (rc) return rc; } if (IS_BRANCH(csrc->mc_pg[csrc->mc_top])) { MDB_val nullkey; indx_t ix = csrc->mc_ki[csrc->mc_top]; nullkey.mv_size = 0; csrc->mc_ki[csrc->mc_top] = 0; rc = mdb_update_key(csrc, &nullkey); csrc->mc_ki[csrc->mc_top] = ix; mdb_cassert(csrc, rc == MDB_SUCCESS); } } if (cdst->mc_ki[cdst->mc_top] == 0) { if (cdst->mc_ki[cdst->mc_top-1] != 0) { if (IS_LEAF2(csrc->mc_pg[csrc->mc_top])) { key.mv_data = LEAF2KEY(cdst->mc_pg[cdst->mc_top], 0, key.mv_size); } else { srcnode = NODEPTR(cdst->mc_pg[cdst->mc_top], 0); key.mv_size = NODEKSZ(srcnode); key.mv_data = NODEKEY(srcnode); } DPRINTF(("update separator for destination page %"Z"u to [%s]", cdst->mc_pg[cdst->mc_top]->mp_pgno, DKEY(&key))); mdb_cursor_copy(cdst, &mn); mn.mc_snum--; mn.mc_top--; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_update_key(&mn, &key)); if (rc) return rc; } if (IS_BRANCH(cdst->mc_pg[cdst->mc_top])) { MDB_val nullkey; indx_t ix = cdst->mc_ki[cdst->mc_top]; nullkey.mv_size = 0; cdst->mc_ki[cdst->mc_top] = 0; rc = mdb_update_key(cdst, &nullkey); cdst->mc_ki[cdst->mc_top] = ix; mdb_cassert(cdst, rc == MDB_SUCCESS); } } return MDB_SUCCESS; } /** Merge one page into another. * The nodes from the page pointed to by \b csrc will * be copied to the page pointed to by \b cdst and then * the \b csrc page will be freed. * @param[in] csrc Cursor pointing to the source page. * @param[in] cdst Cursor pointing to the destination page. * @return 0 on success, non-zero on failure. */ static int mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst) { MDB_page *psrc, *pdst; MDB_node *srcnode; MDB_val key, data; unsigned nkeys; int rc; indx_t i, j; psrc = csrc->mc_pg[csrc->mc_top]; pdst = cdst->mc_pg[cdst->mc_top]; DPRINTF(("merging page %"Z"u into %"Z"u", psrc->mp_pgno, pdst->mp_pgno)); mdb_cassert(csrc, csrc->mc_snum > 1); /* can't merge root page */ mdb_cassert(csrc, cdst->mc_snum > 1); /* Mark dst as dirty. */ if ((rc = mdb_page_touch(cdst))) return rc; /* get dst page again now that we've touched it. */ pdst = cdst->mc_pg[cdst->mc_top]; /* Move all nodes from src to dst. */ j = nkeys = NUMKEYS(pdst); if (IS_LEAF2(psrc)) { key.mv_size = csrc->mc_db->md_pad; key.mv_data = METADATA(psrc); for (i = 0; i < NUMKEYS(psrc); i++, j++) { rc = mdb_node_add(cdst, j, &key, NULL, 0, 0); if (rc != MDB_SUCCESS) return rc; key.mv_data = (char *)key.mv_data + key.mv_size; } } else { for (i = 0; i < NUMKEYS(psrc); i++, j++) { srcnode = NODEPTR(psrc, i); if (i == 0 && IS_BRANCH(psrc)) { MDB_cursor mn; MDB_node *s2; mdb_cursor_copy(csrc, &mn); mn.mc_xcursor = NULL; /* must find the lowest key below src */ rc = mdb_page_search_lowest(&mn); if (rc) return rc; if (IS_LEAF2(mn.mc_pg[mn.mc_top])) { key.mv_size = mn.mc_db->md_pad; key.mv_data = LEAF2KEY(mn.mc_pg[mn.mc_top], 0, key.mv_size); } else { s2 = NODEPTR(mn.mc_pg[mn.mc_top], 0); key.mv_size = NODEKSZ(s2); key.mv_data = NODEKEY(s2); } } else { key.mv_size = srcnode->mn_ksize; key.mv_data = NODEKEY(srcnode); } data.mv_size = NODEDSZ(srcnode); data.mv_data = NODEDATA(srcnode); rc = mdb_node_add(cdst, j, &key, &data, NODEPGNO(srcnode), srcnode->mn_flags); if (rc != MDB_SUCCESS) return rc; } } DPRINTF(("dst page %"Z"u now has %u keys (%.1f%% filled)", pdst->mp_pgno, NUMKEYS(pdst), (float)PAGEFILL(cdst->mc_txn->mt_env, pdst) / 10)); /* Unlink the src page from parent and add to free list. */ csrc->mc_top--; mdb_node_del(csrc, 0); if (csrc->mc_ki[csrc->mc_top] == 0) { key.mv_size = 0; rc = mdb_update_key(csrc, &key); if (rc) { csrc->mc_top++; return rc; } } csrc->mc_top++; psrc = csrc->mc_pg[csrc->mc_top]; /* If not operating on FreeDB, allow this page to be reused * in this txn. Otherwise just add to free list. */ rc = mdb_page_loose(csrc, psrc); if (rc) return rc; if (IS_LEAF(psrc)) csrc->mc_db->md_leaf_pages--; else csrc->mc_db->md_branch_pages--; { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = csrc->mc_dbi; unsigned int top = csrc->mc_top; for (m2 = csrc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (csrc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == csrc) continue; if (m3->mc_snum < csrc->mc_snum) continue; if (m3->mc_pg[top] == psrc) { m3->mc_pg[top] = pdst; m3->mc_ki[top] += nkeys; m3->mc_ki[top-1] = cdst->mc_ki[top-1]; } else if (m3->mc_pg[top-1] == csrc->mc_pg[top-1] && m3->mc_ki[top-1] > csrc->mc_ki[top-1]) { m3->mc_ki[top-1]--; } if (IS_LEAF(psrc)) XCURSOR_REFRESH(m3, top, m3->mc_pg[top]); } } { unsigned int snum = cdst->mc_snum; uint16_t depth = cdst->mc_db->md_depth; mdb_cursor_pop(cdst); rc = mdb_rebalance(cdst); /* Did the tree height change? */ if (depth != cdst->mc_db->md_depth) snum += cdst->mc_db->md_depth - depth; cdst->mc_snum = snum; cdst->mc_top = snum-1; } return rc; } /** Copy the contents of a cursor. * @param[in] csrc The cursor to copy from. * @param[out] cdst The cursor to copy to. */ static void mdb_cursor_copy(const MDB_cursor *csrc, MDB_cursor *cdst) { unsigned int i; cdst->mc_txn = csrc->mc_txn; cdst->mc_dbi = csrc->mc_dbi; cdst->mc_db = csrc->mc_db; cdst->mc_dbx = csrc->mc_dbx; cdst->mc_snum = csrc->mc_snum; cdst->mc_top = csrc->mc_top; cdst->mc_flags = csrc->mc_flags; for (i=0; imc_snum; i++) { cdst->mc_pg[i] = csrc->mc_pg[i]; cdst->mc_ki[i] = csrc->mc_ki[i]; } } /** Rebalance the tree after a delete operation. * @param[in] mc Cursor pointing to the page where rebalancing * should begin. * @return 0 on success, non-zero on failure. */ static int mdb_rebalance(MDB_cursor *mc) { MDB_node *node; int rc, fromleft; unsigned int ptop, minkeys, thresh; MDB_cursor mn; indx_t oldki; if (IS_BRANCH(mc->mc_pg[mc->mc_top])) { minkeys = 2; thresh = 1; } else { minkeys = 1; thresh = FILL_THRESHOLD; } DPRINTF(("rebalancing %s page %"Z"u (has %u keys, %.1f%% full)", IS_LEAF(mc->mc_pg[mc->mc_top]) ? "leaf" : "branch", mdb_dbg_pgno(mc->mc_pg[mc->mc_top]), NUMKEYS(mc->mc_pg[mc->mc_top]), (float)PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) / 10)); if (PAGEFILL(mc->mc_txn->mt_env, mc->mc_pg[mc->mc_top]) >= thresh && NUMKEYS(mc->mc_pg[mc->mc_top]) >= minkeys) { DPRINTF(("no need to rebalance page %"Z"u, above fill threshold", mdb_dbg_pgno(mc->mc_pg[mc->mc_top]))); return MDB_SUCCESS; } if (mc->mc_snum < 2) { MDB_page *mp = mc->mc_pg[0]; if (IS_SUBP(mp)) { DPUTS("Can't rebalance a subpage, ignoring"); return MDB_SUCCESS; } if (NUMKEYS(mp) == 0) { DPUTS("tree is completely empty"); mc->mc_db->md_root = P_INVALID; mc->mc_db->md_depth = 0; mc->mc_db->md_leaf_pages = 0; rc = mdb_midl_append(&mc->mc_txn->mt_free_pgs, mp->mp_pgno); if (rc) return rc; /* Adjust cursors pointing to mp */ mc->mc_snum = 0; mc->mc_top = 0; mc->mc_flags &= ~C_INITIALIZED; { MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (!(m3->mc_flags & C_INITIALIZED) || (m3->mc_snum < mc->mc_snum)) continue; if (m3->mc_pg[0] == mp) { m3->mc_snum = 0; m3->mc_top = 0; m3->mc_flags &= ~C_INITIALIZED; } } } } else if (IS_BRANCH(mp) && NUMKEYS(mp) == 1) { int i; DPUTS("collapsing root page!"); rc = mdb_midl_append(&mc->mc_txn->mt_free_pgs, mp->mp_pgno); if (rc) return rc; mc->mc_db->md_root = NODEPGNO(NODEPTR(mp, 0)); rc = mdb_page_get(mc, mc->mc_db->md_root, &mc->mc_pg[0], NULL); if (rc) return rc; mc->mc_db->md_depth--; mc->mc_db->md_branch_pages--; mc->mc_ki[0] = mc->mc_ki[1]; for (i = 1; imc_db->md_depth; i++) { mc->mc_pg[i] = mc->mc_pg[i+1]; mc->mc_ki[i] = mc->mc_ki[i+1]; } { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc) continue; if (!(m3->mc_flags & C_INITIALIZED)) continue; if (m3->mc_pg[0] == mp) { for (i=0; imc_db->md_depth; i++) { m3->mc_pg[i] = m3->mc_pg[i+1]; m3->mc_ki[i] = m3->mc_ki[i+1]; } m3->mc_snum--; m3->mc_top--; } } } } else DPUTS("root page doesn't need rebalancing"); return MDB_SUCCESS; } /* The parent (branch page) must have at least 2 pointers, * otherwise the tree is invalid. */ ptop = mc->mc_top-1; mdb_cassert(mc, NUMKEYS(mc->mc_pg[ptop]) > 1); /* Leaf page fill factor is below the threshold. * Try to move keys from left or right neighbor, or * merge with a neighbor page. */ /* Find neighbors. */ mdb_cursor_copy(mc, &mn); mn.mc_xcursor = NULL; oldki = mc->mc_ki[mc->mc_top]; if (mc->mc_ki[ptop] == 0) { /* We're the leftmost leaf in our parent. */ DPUTS("reading right neighbor"); mn.mc_ki[ptop]++; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = 0; mc->mc_ki[mc->mc_top] = NUMKEYS(mc->mc_pg[mc->mc_top]); fromleft = 0; } else { /* There is at least one neighbor to the left. */ DPUTS("reading left neighbor"); mn.mc_ki[ptop]--; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = NUMKEYS(mn.mc_pg[mn.mc_top]) - 1; mc->mc_ki[mc->mc_top] = 0; fromleft = 1; } DPRINTF(("found neighbor page %"Z"u (%u keys, %.1f%% full)", mn.mc_pg[mn.mc_top]->mp_pgno, NUMKEYS(mn.mc_pg[mn.mc_top]), (float)PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) / 10)); /* If the neighbor page is above threshold and has enough keys, * move one key from it. Otherwise we should try to merge them. * (A branch page must never have less than 2 keys.) */ if (PAGEFILL(mc->mc_txn->mt_env, mn.mc_pg[mn.mc_top]) >= thresh && NUMKEYS(mn.mc_pg[mn.mc_top]) > minkeys) { rc = mdb_node_move(&mn, mc, fromleft); if (fromleft) { /* if we inserted on left, bump position up */ oldki++; } } else { if (!fromleft) { rc = mdb_page_merge(&mn, mc); } else { oldki += NUMKEYS(mn.mc_pg[mn.mc_top]); mn.mc_ki[mn.mc_top] += mc->mc_ki[mn.mc_top] + 1; /* We want mdb_rebalance to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_page_merge(mc, &mn)); mdb_cursor_copy(&mn, mc); } mc->mc_flags &= ~C_EOF; } mc->mc_ki[mc->mc_top] = oldki; return rc; } /** Complete a delete operation started by #mdb_cursor_del(). */ static int mdb_cursor_del0(MDB_cursor *mc) { int rc; MDB_page *mp; indx_t ki; unsigned int nkeys; MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; ki = mc->mc_ki[mc->mc_top]; mp = mc->mc_pg[mc->mc_top]; mdb_node_del(mc, mc->mc_db->md_pad); mc->mc_db->md_entries--; { /* Adjust other cursors pointing to mp */ for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { m3 = (mc->mc_flags & C_SUB) ? &m2->mc_xcursor->mx_cursor : m2; if (! (m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (m3 == mc || m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] == ki) { m3->mc_flags |= C_DEL; if (mc->mc_db->md_flags & MDB_DUPSORT) { /* Sub-cursor referred into dataset which is gone */ m3->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); } continue; } else if (m3->mc_ki[mc->mc_top] > ki) { m3->mc_ki[mc->mc_top]--; } XCURSOR_REFRESH(m3, mc->mc_top, mp); } } } rc = mdb_rebalance(mc); if (rc) goto fail; /* DB is totally empty now, just bail out. * Other cursors adjustments were already done * by mdb_rebalance and aren't needed here. */ if (!mc->mc_snum) { mc->mc_flags |= C_EOF; return rc; } mp = mc->mc_pg[mc->mc_top]; nkeys = NUMKEYS(mp); /* Adjust other cursors pointing to mp */ for (m2 = mc->mc_txn->mt_cursors[dbi]; !rc && m2; m2=m2->mc_next) { m3 = (mc->mc_flags & C_SUB) ? &m2->mc_xcursor->mx_cursor : m2; if (!(m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (m3->mc_snum < mc->mc_snum) continue; if (m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] >= mc->mc_ki[mc->mc_top]) { /* if m3 points past last node in page, find next sibling */ if (m3->mc_ki[mc->mc_top] >= nkeys) { rc = mdb_cursor_sibling(m3, 1); if (rc == MDB_NOTFOUND) { m3->mc_flags |= C_EOF; rc = MDB_SUCCESS; continue; } if (rc) goto fail; } if (m3->mc_xcursor && !(m3->mc_flags & C_EOF)) { MDB_node *node = NODEPTR(m3->mc_pg[m3->mc_top], m3->mc_ki[m3->mc_top]); /* If this node has dupdata, it may need to be reinited * because its data has moved. * If the xcursor was not initd it must be reinited. * Else if node points to a subDB, nothing is needed. * Else (xcursor was initd, not a subDB) needs mc_pg[0] reset. */ if (node->mn_flags & F_DUPDATA) { if (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) { if (!(node->mn_flags & F_SUBDATA)) m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); } else { mdb_xcursor_init1(m3, node); rc = mdb_cursor_first(&m3->mc_xcursor->mx_cursor, NULL, NULL); if (rc) goto fail; } } m3->mc_xcursor->mx_cursor.mc_flags |= C_DEL; } } } } mc->mc_flags |= C_DEL; fail: if (rc) mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) { if (!key || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; if (!F_ISSET(txn->mt_dbs[dbi].md_flags, MDB_DUPSORT)) { /* must ignore any data */ data = NULL; } return mdb_del0(txn, dbi, key, data, 0); } static int mdb_del0(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned flags) { MDB_cursor mc; MDB_xcursor mx; MDB_cursor_op op; MDB_val rdata, *xdata; int rc, exact = 0; DKBUF; DPRINTF(("====> delete db %u key [%s]", dbi, DKEY(key))); mdb_cursor_init(&mc, txn, dbi, &mx); if (data) { op = MDB_GET_BOTH; rdata = *data; xdata = &rdata; } else { op = MDB_SET; xdata = NULL; flags |= MDB_NODUPDATA; } rc = mdb_cursor_set(&mc, key, xdata, op, &exact); if (rc == 0) { /* let mdb_page_split know about this cursor if needed: * delete will trigger a rebalance; if it needs to move * a node from one page to another, it will have to * update the parent's separator key(s). If the new sepkey * is larger than the current one, the parent page may * run out of space, triggering a split. We need this * cursor to be consistent until the end of the rebalance. */ mc.mc_flags |= C_UNTRACK; mc.mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = &mc; rc = mdb_cursor_del(&mc, flags); txn->mt_cursors[dbi] = mc.mc_next; } return rc; } /** Split a page and insert a new node. * Set #MDB_TXN_ERROR on failure. * @param[in,out] mc Cursor pointing to the page and desired insertion index. * The cursor will be updated to point to the actual page and index where * the node got inserted after the split. * @param[in] newkey The key for the newly inserted node. * @param[in] newdata The data for the newly inserted node. * @param[in] newpgno The page number, if the new node is a branch node. * @param[in] nflags The #NODE_ADD_FLAGS for the new node. * @return 0 on success, non-zero on failure. */ static int mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno, unsigned int nflags) { unsigned int flags; int rc = MDB_SUCCESS, new_root = 0, did_split = 0; indx_t newindx; pgno_t pgno = 0; int i, j, split_indx, nkeys, pmax; MDB_env *env = mc->mc_txn->mt_env; MDB_node *node; MDB_val sepkey, rkey, xdata, *rdata = &xdata; MDB_page *copy = NULL; MDB_page *mp, *rp, *pp; int ptop; MDB_cursor mn; DKBUF; mp = mc->mc_pg[mc->mc_top]; newindx = mc->mc_ki[mc->mc_top]; nkeys = NUMKEYS(mp); DPRINTF(("-----> splitting %s page %"Z"u and adding [%s] at index %i/%i", IS_LEAF(mp) ? "leaf" : "branch", mp->mp_pgno, DKEY(newkey), mc->mc_ki[mc->mc_top], nkeys)); /* Create a right sibling. */ if ((rc = mdb_page_new(mc, mp->mp_flags, 1, &rp))) return rc; rp->mp_pad = mp->mp_pad; DPRINTF(("new right sibling: page %"Z"u", rp->mp_pgno)); /* Usually when splitting the root page, the cursor * height is 1. But when called from mdb_update_key, * the cursor height may be greater because it walks * up the stack while finding the branch slot to update. */ if (mc->mc_top < 1) { if ((rc = mdb_page_new(mc, P_BRANCH, 1, &pp))) goto done; /* shift current top to make room for new parent */ for (i=mc->mc_snum; i>0; i--) { mc->mc_pg[i] = mc->mc_pg[i-1]; mc->mc_ki[i] = mc->mc_ki[i-1]; } mc->mc_pg[0] = pp; mc->mc_ki[0] = 0; mc->mc_db->md_root = pp->mp_pgno; DPRINTF(("root split! new root = %"Z"u", pp->mp_pgno)); new_root = mc->mc_db->md_depth++; /* Add left (implicit) pointer. */ if ((rc = mdb_node_add(mc, 0, NULL, NULL, mp->mp_pgno, 0)) != MDB_SUCCESS) { /* undo the pre-push */ mc->mc_pg[0] = mc->mc_pg[1]; mc->mc_ki[0] = mc->mc_ki[1]; mc->mc_db->md_root = mp->mp_pgno; mc->mc_db->md_depth--; goto done; } mc->mc_snum++; mc->mc_top++; ptop = 0; } else { ptop = mc->mc_top-1; DPRINTF(("parent branch page is %"Z"u", mc->mc_pg[ptop]->mp_pgno)); } mdb_cursor_copy(mc, &mn); mn.mc_xcursor = NULL; mn.mc_pg[mn.mc_top] = rp; mn.mc_ki[ptop] = mc->mc_ki[ptop]+1; if (nflags & MDB_APPEND) { mn.mc_ki[mn.mc_top] = 0; sepkey = *newkey; split_indx = newindx; nkeys = 0; } else { split_indx = (nkeys+1) / 2; if (IS_LEAF2(rp)) { char *split, *ins; int x; unsigned int lsize, rsize, ksize; /* Move half of the keys to the right sibling */ x = mc->mc_ki[mc->mc_top] - split_indx; ksize = mc->mc_db->md_pad; split = LEAF2KEY(mp, split_indx, ksize); rsize = (nkeys - split_indx) * ksize; lsize = (nkeys - split_indx) * sizeof(indx_t); mp->mp_lower -= lsize; rp->mp_lower += lsize; mp->mp_upper += rsize - lsize; rp->mp_upper -= rsize - lsize; sepkey.mv_size = ksize; if (newindx == split_indx) { sepkey.mv_data = newkey->mv_data; } else { sepkey.mv_data = split; } if (x<0) { ins = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], ksize); memcpy(rp->mp_ptrs, split, rsize); sepkey.mv_data = rp->mp_ptrs; memmove(ins+ksize, ins, (split_indx - mc->mc_ki[mc->mc_top]) * ksize); memcpy(ins, newkey->mv_data, ksize); mp->mp_lower += sizeof(indx_t); mp->mp_upper -= ksize - sizeof(indx_t); } else { if (x) memcpy(rp->mp_ptrs, split, x * ksize); ins = LEAF2KEY(rp, x, ksize); memcpy(ins, newkey->mv_data, ksize); memcpy(ins+ksize, split + x * ksize, rsize - x * ksize); rp->mp_lower += sizeof(indx_t); rp->mp_upper -= ksize - sizeof(indx_t); mc->mc_ki[mc->mc_top] = x; } } else { int psize, nsize, k; /* Maximum free space in an empty page */ pmax = env->me_psize - PAGEHDRSZ; if (IS_LEAF(mp)) nsize = mdb_leaf_size(env, newkey, newdata); else nsize = mdb_branch_size(env, newkey); nsize = EVEN(nsize); /* grab a page to hold a temporary copy */ copy = mdb_page_malloc(mc->mc_txn, 1); if (copy == NULL) { rc = ENOMEM; goto done; } copy->mp_pgno = mp->mp_pgno; copy->mp_flags = mp->mp_flags; copy->mp_lower = (PAGEHDRSZ-PAGEBASE); copy->mp_upper = env->me_psize - PAGEBASE; /* prepare to insert */ for (i=0, j=0; imp_ptrs[j++] = 0; } copy->mp_ptrs[j++] = mp->mp_ptrs[i]; } /* When items are relatively large the split point needs * to be checked, because being off-by-one will make the * difference between success or failure in mdb_node_add. * * It's also relevant if a page happens to be laid out * such that one half of its nodes are all "small" and * the other half of its nodes are "large." If the new * item is also "large" and falls on the half with * "large" nodes, it also may not fit. * * As a final tweak, if the new item goes on the last * spot on the page (and thus, onto the new page), bias * the split so the new page is emptier than the old page. * This yields better packing during sequential inserts. */ if (nkeys < 32 || nsize > pmax/16 || newindx >= nkeys) { /* Find split point */ psize = 0; if (newindx <= split_indx || newindx >= nkeys) { i = 0; j = 1; k = newindx >= nkeys ? nkeys : split_indx+1+IS_LEAF(mp); } else { i = nkeys; j = -1; k = split_indx-1; } for (; i!=k; i+=j) { if (i == newindx) { psize += nsize; node = NULL; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[i] + PAGEBASE); psize += NODESIZE + NODEKSZ(node) + sizeof(indx_t); if (IS_LEAF(mp)) { if (F_ISSET(node->mn_flags, F_BIGDATA)) psize += sizeof(pgno_t); else psize += NODEDSZ(node); } psize = EVEN(psize); } if (psize > pmax || i == k-j) { split_indx = i + (j<0); break; } } } if (split_indx == newindx) { sepkey.mv_size = newkey->mv_size; sepkey.mv_data = newkey->mv_data; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[split_indx] + PAGEBASE); sepkey.mv_size = node->mn_ksize; sepkey.mv_data = NODEKEY(node); } } } DPRINTF(("separator is %d [%s]", split_indx, DKEY(&sepkey))); /* Copy separator key to the parent. */ if (SIZELEFT(mn.mc_pg[ptop]) < mdb_branch_size(env, &sepkey)) { int snum = mc->mc_snum; mn.mc_snum--; mn.mc_top--; did_split = 1; /* We want other splits to find mn when doing fixups */ WITH_CURSOR_TRACKING(mn, rc = mdb_page_split(&mn, &sepkey, NULL, rp->mp_pgno, 0)); if (rc) goto done; /* root split? */ if (mc->mc_snum > snum) { ptop++; } /* Right page might now have changed parent. * Check if left page also changed parent. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; imc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } mc->mc_pg[ptop] = mn.mc_pg[ptop]; if (mn.mc_ki[ptop]) { mc->mc_ki[ptop] = mn.mc_ki[ptop] - 1; } else { /* find right page's left sibling */ mc->mc_ki[ptop] = mn.mc_ki[ptop]; mdb_cursor_sibling(mc, 0); } } } else { mn.mc_top--; rc = mdb_node_add(&mn, mn.mc_ki[ptop], &sepkey, NULL, rp->mp_pgno, 0); mn.mc_top++; } if (rc != MDB_SUCCESS) { goto done; } if (nflags & MDB_APPEND) { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[mc->mc_top] = 0; rc = mdb_node_add(mc, 0, newkey, newdata, newpgno, nflags); if (rc) goto done; for (i=0; imc_top; i++) mc->mc_ki[i] = mn.mc_ki[i]; } else if (!IS_LEAF2(mp)) { /* Move nodes */ mc->mc_pg[mc->mc_top] = rp; i = split_indx; j = 0; do { if (i == newindx) { rkey.mv_data = newkey->mv_data; rkey.mv_size = newkey->mv_size; if (IS_LEAF(mp)) { rdata = newdata; } else pgno = newpgno; flags = nflags; /* Update index for the new key. */ mc->mc_ki[mc->mc_top] = j; } else { node = (MDB_node *)((char *)mp + copy->mp_ptrs[i] + PAGEBASE); rkey.mv_data = NODEKEY(node); rkey.mv_size = node->mn_ksize; if (IS_LEAF(mp)) { xdata.mv_data = NODEDATA(node); xdata.mv_size = NODEDSZ(node); rdata = &xdata; } else pgno = NODEPGNO(node); flags = node->mn_flags; } if (!IS_LEAF(mp) && j == 0) { /* First branch index doesn't need key data. */ rkey.mv_size = 0; } rc = mdb_node_add(mc, j, &rkey, rdata, pgno, flags); if (rc) goto done; if (i == nkeys) { i = 0; j = 0; mc->mc_pg[mc->mc_top] = copy; } else { i++; j++; } } while (i != split_indx); nkeys = NUMKEYS(copy); for (i=0; imp_ptrs[i] = copy->mp_ptrs[i]; mp->mp_lower = copy->mp_lower; mp->mp_upper = copy->mp_upper; memcpy(NODEPTR(mp, nkeys-1), NODEPTR(copy, nkeys-1), env->me_psize - copy->mp_upper - PAGEBASE); /* reset back to original page */ if (newindx < split_indx) { mc->mc_pg[mc->mc_top] = mp; } else { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[ptop]++; /* Make sure mc_ki is still valid. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; i<=ptop; i++) { mc->mc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } } } if (nflags & MDB_RESERVE) { node = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!(node->mn_flags & F_BIGDATA)) newdata->mv_data = NODEDATA(node); } } else { if (newindx >= split_indx) { mc->mc_pg[mc->mc_top] = rp; mc->mc_ki[ptop]++; /* Make sure mc_ki is still valid. */ if (mn.mc_pg[ptop] != mc->mc_pg[ptop] && mc->mc_ki[ptop] >= NUMKEYS(mc->mc_pg[ptop])) { for (i=0; i<=ptop; i++) { mc->mc_pg[i] = mn.mc_pg[i]; mc->mc_ki[i] = mn.mc_ki[i]; } } } } { /* Adjust other cursors pointing to mp */ MDB_cursor *m2, *m3; MDB_dbi dbi = mc->mc_dbi; nkeys = NUMKEYS(mp); for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2=m2->mc_next) { if (mc->mc_flags & C_SUB) m3 = &m2->mc_xcursor->mx_cursor; else m3 = m2; if (m3 == mc) continue; if (!(m2->mc_flags & m3->mc_flags & C_INITIALIZED)) continue; if (new_root) { int k; /* sub cursors may be on different DB */ if (m3->mc_pg[0] != mp) continue; /* root split */ for (k=new_root; k>=0; k--) { m3->mc_ki[k+1] = m3->mc_ki[k]; m3->mc_pg[k+1] = m3->mc_pg[k]; } if (m3->mc_ki[0] >= nkeys) { m3->mc_ki[0] = 1; } else { m3->mc_ki[0] = 0; } m3->mc_pg[0] = mc->mc_pg[0]; m3->mc_snum++; m3->mc_top++; } if (m3->mc_top >= mc->mc_top && m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] >= newindx && !(nflags & MDB_SPLIT_REPLACE)) m3->mc_ki[mc->mc_top]++; if (m3->mc_ki[mc->mc_top] >= nkeys) { m3->mc_pg[mc->mc_top] = rp; m3->mc_ki[mc->mc_top] -= nkeys; for (i=0; imc_top; i++) { m3->mc_ki[i] = mn.mc_ki[i]; m3->mc_pg[i] = mn.mc_pg[i]; } } } else if (!did_split && m3->mc_top >= ptop && m3->mc_pg[ptop] == mc->mc_pg[ptop] && m3->mc_ki[ptop] >= mc->mc_ki[ptop]) { m3->mc_ki[ptop]++; } if (IS_LEAF(mp)) XCURSOR_REFRESH(m3, mc->mc_top, m3->mc_pg[mc->mc_top]); } } DPRINTF(("mp left: %d, rp left: %d", SIZELEFT(mp), SIZELEFT(rp))); done: if (copy) /* tmp page */ mdb_page_free(env, copy); if (rc) mc->mc_txn->mt_flags |= MDB_TXN_ERROR; return rc; } int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned int flags) { MDB_cursor mc; MDB_xcursor mx; int rc; if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (flags & ~(MDB_NOOVERWRITE|MDB_NODUPDATA|MDB_RESERVE|MDB_APPEND|MDB_APPENDDUP)) return EINVAL; if (txn->mt_flags & (MDB_TXN_RDONLY|MDB_TXN_BLOCKED)) return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN; mdb_cursor_init(&mc, txn, dbi, &mx); mc.mc_next = txn->mt_cursors[dbi]; txn->mt_cursors[dbi] = &mc; rc = mdb_cursor_put(&mc, key, data, flags); txn->mt_cursors[dbi] = mc.mc_next; return rc; } #ifndef MDB_WBUF #define MDB_WBUF (1024*1024) #endif #define MDB_EOF 0x10 /**< #mdb_env_copyfd1() is done reading */ /** State needed for a double-buffering compacting copy. */ typedef struct mdb_copy { MDB_env *mc_env; MDB_txn *mc_txn; pthread_mutex_t mc_mutex; pthread_cond_t mc_cond; /**< Condition variable for #mc_new */ char *mc_wbuf[2]; char *mc_over[2]; int mc_wlen[2]; int mc_olen[2]; pgno_t mc_next_pgno; HANDLE mc_fd; int mc_toggle; /**< Buffer number in provider */ int mc_new; /**< (0-2 buffers to write) | (#MDB_EOF at end) */ /** Error code. Never cleared if set. Both threads can set nonzero * to fail the copy. Not mutex-protected, LMDB expects atomic int. */ volatile int mc_error; } mdb_copy; /** Dedicated writer thread for compacting copy. */ static THREAD_RET ESECT CALL_CONV mdb_env_copythr(void *arg) { mdb_copy *my = arg; char *ptr; int toggle = 0, wsize, rc; #ifdef _WIN32 DWORD len; #define DO_WRITE(rc, fd, ptr, w2, len) rc = WriteFile(fd, ptr, w2, &len, NULL) #else int len; #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) #ifdef SIGPIPE sigset_t set; sigemptyset(&set); sigaddset(&set, SIGPIPE); if ((rc = pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0) my->mc_error = rc; #endif #endif pthread_mutex_lock(&my->mc_mutex); for(;;) { while (!my->mc_new) pthread_cond_wait(&my->mc_cond, &my->mc_mutex); if (my->mc_new == 0 + MDB_EOF) /* 0 buffers, just EOF */ break; wsize = my->mc_wlen[toggle]; ptr = my->mc_wbuf[toggle]; again: rc = MDB_SUCCESS; while (wsize > 0 && !my->mc_error) { DO_WRITE(rc, my->mc_fd, ptr, wsize, len); if (!rc) { rc = ErrCode(); #if defined(SIGPIPE) && !defined(_WIN32) if (rc == EPIPE) { /* Collect the pending SIGPIPE, otherwise at least OS X * gives it to the process on thread-exit (ITS#8504). */ int tmp; sigwait(&set, &tmp); } #endif break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; wsize -= len; continue; } else { rc = EIO; break; } } if (rc) { my->mc_error = rc; } /* If there's an overflow page tail, write it too */ if (my->mc_olen[toggle]) { wsize = my->mc_olen[toggle]; ptr = my->mc_over[toggle]; my->mc_olen[toggle] = 0; goto again; } my->mc_wlen[toggle] = 0; toggle ^= 1; /* Return the empty buffer to provider */ my->mc_new--; pthread_cond_signal(&my->mc_cond); } pthread_mutex_unlock(&my->mc_mutex); return (THREAD_RET)0; #undef DO_WRITE } /** Give buffer and/or #MDB_EOF to writer thread, await unused buffer. * * @param[in] my control structure. * @param[in] adjust (1 to hand off 1 buffer) | (MDB_EOF when ending). */ static int ESECT mdb_env_cthr_toggle(mdb_copy *my, int adjust) { pthread_mutex_lock(&my->mc_mutex); my->mc_new += adjust; pthread_cond_signal(&my->mc_cond); while (my->mc_new & 2) /* both buffers in use */ pthread_cond_wait(&my->mc_cond, &my->mc_mutex); pthread_mutex_unlock(&my->mc_mutex); my->mc_toggle ^= (adjust & 1); /* Both threads reset mc_wlen, to be safe from threading errors */ my->mc_wlen[my->mc_toggle] = 0; return my->mc_error; } /** Depth-first tree traversal for compacting copy. * @param[in] my control structure. * @param[in,out] pg database root. * @param[in] flags includes #F_DUPDATA if it is a sorted-duplicate sub-DB. */ static int ESECT mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) { MDB_cursor mc = {0}; MDB_node *ni; MDB_page *mo, *mp, *leaf; char *buf, *ptr; int rc, toggle; unsigned int i; /* Empty DB, nothing to do */ if (*pg == P_INVALID) return MDB_SUCCESS; mc.mc_snum = 1; mc.mc_txn = my->mc_txn; rc = mdb_page_get(&mc, *pg, &mc.mc_pg[0], NULL); if (rc) return rc; rc = mdb_page_search_root(&mc, NULL, MDB_PS_FIRST); if (rc) return rc; /* Make cursor pages writable */ buf = ptr = malloc(my->mc_env->me_psize * mc.mc_snum); if (buf == NULL) return ENOMEM; for (i=0; imc_env->me_psize); mc.mc_pg[i] = (MDB_page *)ptr; ptr += my->mc_env->me_psize; } /* This is writable space for a leaf page. Usually not needed. */ leaf = (MDB_page *)ptr; toggle = my->mc_toggle; while (mc.mc_snum > 0) { unsigned n; mp = mc.mc_pg[mc.mc_top]; n = NUMKEYS(mp); if (IS_LEAF(mp)) { if (!IS_LEAF2(mp) && !(flags & F_DUPDATA)) { for (i=0; imn_flags & F_BIGDATA) { MDB_page *omp; pgno_t pg; /* Need writable leaf */ if (mp != leaf) { mc.mc_pg[mc.mc_top] = leaf; mdb_page_copy(leaf, mp, my->mc_env->me_psize); mp = leaf; ni = NODEPTR(mp, i); } memcpy(&pg, NODEDATA(ni), sizeof(pg)); memcpy(NODEDATA(ni), &my->mc_next_pgno, sizeof(pgno_t)); rc = mdb_page_get(&mc, pg, &omp, NULL); if (rc) goto done; if (my->mc_wlen[toggle] >= MDB_WBUF) { rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]); memcpy(mo, omp, my->mc_env->me_psize); mo->mp_pgno = my->mc_next_pgno; my->mc_next_pgno += omp->mp_pages; my->mc_wlen[toggle] += my->mc_env->me_psize; if (omp->mp_pages > 1) { my->mc_olen[toggle] = my->mc_env->me_psize * (omp->mp_pages - 1); my->mc_over[toggle] = (char *)omp + my->mc_env->me_psize; rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } } else if (ni->mn_flags & F_SUBDATA) { MDB_db db; /* Need writable leaf */ if (mp != leaf) { mc.mc_pg[mc.mc_top] = leaf; mdb_page_copy(leaf, mp, my->mc_env->me_psize); mp = leaf; ni = NODEPTR(mp, i); } memcpy(&db, NODEDATA(ni), sizeof(db)); my->mc_toggle = toggle; rc = mdb_env_cwalk(my, &db.md_root, ni->mn_flags & F_DUPDATA); if (rc) goto done; toggle = my->mc_toggle; memcpy(NODEDATA(ni), &db, sizeof(db)); } } } } else { mc.mc_ki[mc.mc_top]++; if (mc.mc_ki[mc.mc_top] < n) { pgno_t pg; again: ni = NODEPTR(mp, mc.mc_ki[mc.mc_top]); pg = NODEPGNO(ni); rc = mdb_page_get(&mc, pg, &mp, NULL); if (rc) goto done; mc.mc_top++; mc.mc_snum++; mc.mc_ki[mc.mc_top] = 0; if (IS_BRANCH(mp)) { /* Whenever we advance to a sibling branch page, * we must proceed all the way down to its first leaf. */ mdb_page_copy(mc.mc_pg[mc.mc_top], mp, my->mc_env->me_psize); goto again; } else mc.mc_pg[mc.mc_top] = mp; continue; } } if (my->mc_wlen[toggle] >= MDB_WBUF) { rc = mdb_env_cthr_toggle(my, 1); if (rc) goto done; toggle = my->mc_toggle; } mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]); mdb_page_copy(mo, mp, my->mc_env->me_psize); mo->mp_pgno = my->mc_next_pgno++; my->mc_wlen[toggle] += my->mc_env->me_psize; if (mc.mc_top) { /* Update parent if there is one */ ni = NODEPTR(mc.mc_pg[mc.mc_top-1], mc.mc_ki[mc.mc_top-1]); SETPGNO(ni, mo->mp_pgno); mdb_cursor_pop(&mc); } else { /* Otherwise we're done */ *pg = mo->mp_pgno; break; } } done: free(buf); return rc; } /** Copy environment with compaction. */ static int ESECT mdb_env_copyfd1(MDB_env *env, HANDLE fd) { MDB_meta *mm; MDB_page *mp; mdb_copy my = {0}; MDB_txn *txn = NULL; pthread_t thr; pgno_t root, new_root; int rc = MDB_SUCCESS; #ifdef _WIN32 if (!(my.mc_mutex = CreateMutex(NULL, FALSE, NULL)) || !(my.mc_cond = CreateEvent(NULL, FALSE, FALSE, NULL))) { rc = ErrCode(); goto done; } my.mc_wbuf[0] = _aligned_malloc(MDB_WBUF*2, env->me_os_psize); if (my.mc_wbuf[0] == NULL) { /* _aligned_malloc() sets errno, but we use Windows error codes */ rc = ERROR_NOT_ENOUGH_MEMORY; goto done; } #else if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) != 0) return rc; if ((rc = pthread_cond_init(&my.mc_cond, NULL)) != 0) goto done2; #ifdef HAVE_MEMALIGN my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2); if (my.mc_wbuf[0] == NULL) { rc = errno; goto done; } #else { void *p; if ((rc = posix_memalign(&p, env->me_os_psize, MDB_WBUF*2)) != 0) goto done; my.mc_wbuf[0] = p; } #endif #endif memset(my.mc_wbuf[0], 0, MDB_WBUF*2); my.mc_wbuf[1] = my.mc_wbuf[0] + MDB_WBUF; my.mc_next_pgno = NUM_METAS; my.mc_env = env; my.mc_fd = fd; rc = THREAD_CREATE(thr, mdb_env_copythr, &my); if (rc) goto done; rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) goto finish; mp = (MDB_page *)my.mc_wbuf[0]; memset(mp, 0, NUM_METAS * env->me_psize); mp->mp_pgno = 0; mp->mp_flags = P_META; mm = (MDB_meta *)METADATA(mp); mdb_env_init_meta0(env, mm); mm->mm_address = env->me_metas[0]->mm_address; mp = (MDB_page *)(my.mc_wbuf[0] + env->me_psize); mp->mp_pgno = 1; mp->mp_flags = P_META; *(MDB_meta *)METADATA(mp) = *mm; mm = (MDB_meta *)METADATA(mp); /* Set metapage 1 with current main DB */ root = new_root = txn->mt_dbs[MAIN_DBI].md_root; if (root != P_INVALID) { /* Count free pages + freeDB pages. Subtract from last_pg * to find the new last_pg, which also becomes the new root. */ MDB_ID freecount = 0; MDB_cursor mc; MDB_val key, data; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0) freecount += *(MDB_ID *)data.mv_data; if (rc != MDB_NOTFOUND) goto finish; freecount += txn->mt_dbs[FREE_DBI].md_branch_pages + txn->mt_dbs[FREE_DBI].md_leaf_pages + txn->mt_dbs[FREE_DBI].md_overflow_pages; new_root = txn->mt_next_pgno - 1 - freecount; mm->mm_last_pg = new_root; mm->mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; mm->mm_dbs[MAIN_DBI].md_root = new_root; } else { /* When the DB is empty, handle it specially to * fix any breakage like page leaks from ITS#8174. */ mm->mm_dbs[MAIN_DBI].md_flags = txn->mt_dbs[MAIN_DBI].md_flags; } if (root != P_INVALID || mm->mm_dbs[MAIN_DBI].md_flags) { mm->mm_txnid = 1; /* use metapage 1 */ } my.mc_wlen[0] = env->me_psize * NUM_METAS; my.mc_txn = txn; rc = mdb_env_cwalk(&my, &root, 0); if (rc == MDB_SUCCESS && root != new_root) { rc = MDB_INCOMPATIBLE; /* page leak or corrupt DB */ } finish: if (rc) my.mc_error = rc; mdb_env_cthr_toggle(&my, 1 | MDB_EOF); rc = THREAD_FINISH(thr); mdb_txn_abort(txn); done: #ifdef _WIN32 if (my.mc_wbuf[0]) _aligned_free(my.mc_wbuf[0]); if (my.mc_cond) CloseHandle(my.mc_cond); if (my.mc_mutex) CloseHandle(my.mc_mutex); #else free(my.mc_wbuf[0]); pthread_cond_destroy(&my.mc_cond); done2: pthread_mutex_destroy(&my.mc_mutex); #endif return rc ? rc : my.mc_error; } /** Copy environment as-is. */ static int ESECT mdb_env_copyfd0(MDB_env *env, HANDLE fd) { MDB_txn *txn = NULL; mdb_mutexref_t wmutex = NULL; int rc; size_t wsize, w3; char *ptr; #ifdef _WIN32 DWORD len, w2; #define DO_WRITE(rc, fd, ptr, w2, len) rc = WriteFile(fd, ptr, w2, &len, NULL) #else ssize_t len; size_t w2; #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) #endif /* Do the lock/unlock of the reader mutex before starting the * write txn. Otherwise other read txns could block writers. */ rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) return rc; if (env->me_txns) { /* We must start the actual read txn after blocking writers */ mdb_txn_end(txn, MDB_END_RESET_TMP); /* Temporarily block writers until we snapshot the meta pages */ wmutex = env->me_wmutex; if (LOCK_MUTEX(rc, env, wmutex)) goto leave; rc = mdb_txn_renew0(txn); if (rc) { UNLOCK_MUTEX(wmutex); goto leave; } } wsize = env->me_psize * NUM_METAS; ptr = env->me_map; w2 = wsize; while (w2 > 0) { DO_WRITE(rc, fd, ptr, w2, len); if (!rc) { rc = ErrCode(); break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; w2 -= len; continue; } else { /* Non-blocking or async handles are not supported */ rc = EIO; break; } } if (wmutex) UNLOCK_MUTEX(wmutex); if (rc) goto leave; w3 = txn->mt_next_pgno * env->me_psize; { size_t fsize = 0; if ((rc = mdb_fsize(env->me_fd, &fsize))) goto leave; if (w3 > fsize) w3 = fsize; } wsize = w3 - wsize; while (wsize > 0) { if (wsize > MAX_WRITE) w2 = MAX_WRITE; else w2 = wsize; DO_WRITE(rc, fd, ptr, w2, len); if (!rc) { rc = ErrCode(); break; } else if (len > 0) { rc = MDB_SUCCESS; ptr += len; wsize -= len; continue; } else { rc = EIO; break; } } leave: mdb_txn_abort(txn); return rc; } int ESECT mdb_env_copyfd2(MDB_env *env, HANDLE fd, unsigned int flags) { if (flags & MDB_CP_COMPACT) return mdb_env_copyfd1(env, fd); else return mdb_env_copyfd0(env, fd); } int ESECT mdb_env_copyfd(MDB_env *env, HANDLE fd) { return mdb_env_copyfd2(env, fd, 0); } int ESECT mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags) { int rc; MDB_name fname; HANDLE newfd = INVALID_HANDLE_VALUE; rc = mdb_fname_init(path, env->me_flags | MDB_NOLOCK, &fname); if (rc == MDB_SUCCESS) { rc = mdb_fopen(env, &fname, MDB_O_COPY, 0666, &newfd); mdb_fname_destroy(fname); } if (rc == MDB_SUCCESS) { rc = mdb_env_copyfd2(env, newfd, flags); if (close(newfd) < 0 && rc == MDB_SUCCESS) rc = ErrCode(); } return rc; } int ESECT mdb_env_copy(MDB_env *env, const char *path) { return mdb_env_copy2(env, path, 0); } int ESECT mdb_env_set_flags(MDB_env *env, unsigned int flag, int onoff) { if (flag & ~CHANGEABLE) return EINVAL; if (onoff) env->me_flags |= flag; else env->me_flags &= ~flag; return MDB_SUCCESS; } int ESECT mdb_env_get_flags(MDB_env *env, unsigned int *arg) { if (!env || !arg) return EINVAL; *arg = env->me_flags & (CHANGEABLE|CHANGELESS); return MDB_SUCCESS; } int ESECT mdb_env_set_userctx(MDB_env *env, void *ctx) { if (!env) return EINVAL; env->me_userctx = ctx; return MDB_SUCCESS; } void * ESECT mdb_env_get_userctx(MDB_env *env) { return env ? env->me_userctx : NULL; } int ESECT mdb_env_set_assert(MDB_env *env, MDB_assert_func *func) { if (!env) return EINVAL; #ifndef NDEBUG env->me_assert_func = func; #endif return MDB_SUCCESS; } int ESECT mdb_env_get_path(MDB_env *env, const char **arg) { if (!env || !arg) return EINVAL; *arg = env->me_path; return MDB_SUCCESS; } int ESECT mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *arg) { if (!env || !arg) return EINVAL; *arg = env->me_fd; return MDB_SUCCESS; } /** Common code for #mdb_stat() and #mdb_env_stat(). * @param[in] env the environment to operate in. * @param[in] db the #MDB_db record containing the stats to return. * @param[out] arg the address of an #MDB_stat structure to receive the stats. * @return 0, this function always succeeds. */ static int ESECT mdb_stat0(MDB_env *env, MDB_db *db, MDB_stat *arg) { arg->ms_psize = env->me_psize; arg->ms_depth = db->md_depth; arg->ms_branch_pages = db->md_branch_pages; arg->ms_leaf_pages = db->md_leaf_pages; arg->ms_overflow_pages = db->md_overflow_pages; arg->ms_entries = db->md_entries; return MDB_SUCCESS; } int ESECT mdb_env_stat(MDB_env *env, MDB_stat *arg) { MDB_meta *meta; if (env == NULL || arg == NULL) return EINVAL; meta = mdb_env_pick_meta(env); return mdb_stat0(env, &meta->mm_dbs[MAIN_DBI], arg); } int ESECT mdb_env_info(MDB_env *env, MDB_envinfo *arg) { MDB_meta *meta; if (env == NULL || arg == NULL) return EINVAL; meta = mdb_env_pick_meta(env); arg->me_mapaddr = meta->mm_address; arg->me_last_pgno = meta->mm_last_pg; arg->me_last_txnid = meta->mm_txnid; arg->me_mapsize = env->me_mapsize; arg->me_maxreaders = env->me_maxreaders; arg->me_numreaders = env->me_txns ? env->me_txns->mti_numreaders : 0; return MDB_SUCCESS; } /** Set the default comparison functions for a database. * Called immediately after a database is opened to set the defaults. * The user can then override them with #mdb_set_compare() or * #mdb_set_dupsort(). * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() */ static void mdb_default_cmp(MDB_txn *txn, MDB_dbi dbi) { uint16_t f = txn->mt_dbs[dbi].md_flags; txn->mt_dbxs[dbi].md_cmp = (f & MDB_REVERSEKEY) ? mdb_cmp_memnr : (f & MDB_INTEGERKEY) ? mdb_cmp_cint : mdb_cmp_memn; txn->mt_dbxs[dbi].md_dcmp = !(f & MDB_DUPSORT) ? 0 : ((f & MDB_INTEGERDUP) ? ((f & MDB_DUPFIXED) ? mdb_cmp_int : mdb_cmp_cint) : ((f & MDB_REVERSEDUP) ? mdb_cmp_memnr : mdb_cmp_memn)); } int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi) { MDB_val key, data; MDB_dbi i; MDB_cursor mc; MDB_db dummy; int rc, dbflag, exact; unsigned int unused = 0, seq; char *namedup; size_t len; if (flags & ~VALID_FLAGS) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; /* main DB? */ if (!name) { *dbi = MAIN_DBI; if (flags & PERSISTENT_FLAGS) { uint16_t f2 = flags & PERSISTENT_FLAGS; /* make sure flag changes get committed */ if ((txn->mt_dbs[MAIN_DBI].md_flags | f2) != txn->mt_dbs[MAIN_DBI].md_flags) { txn->mt_dbs[MAIN_DBI].md_flags |= f2; txn->mt_flags |= MDB_TXN_DIRTY; } } mdb_default_cmp(txn, MAIN_DBI); return MDB_SUCCESS; } if (txn->mt_dbxs[MAIN_DBI].md_cmp == NULL) { mdb_default_cmp(txn, MAIN_DBI); } /* Is the DB already open? */ len = strlen(name); for (i=CORE_DBS; imt_numdbs; i++) { if (!txn->mt_dbxs[i].md_name.mv_size) { /* Remember this free slot */ if (!unused) unused = i; continue; } if (len == txn->mt_dbxs[i].md_name.mv_size && !strncmp(name, txn->mt_dbxs[i].md_name.mv_data, len)) { *dbi = i; return MDB_SUCCESS; } } /* If no free slot and max hit, fail */ if (!unused && txn->mt_numdbs >= txn->mt_env->me_maxdbs) return MDB_DBS_FULL; /* Cannot mix named databases with some mainDB flags */ if (txn->mt_dbs[MAIN_DBI].md_flags & (MDB_DUPSORT|MDB_INTEGERKEY)) return (flags & MDB_CREATE) ? MDB_INCOMPATIBLE : MDB_NOTFOUND; /* Find the DB info */ dbflag = DB_NEW|DB_VALID|DB_USRVALID; exact = 0; key.mv_size = len; key.mv_data = (void *)name; mdb_cursor_init(&mc, txn, MAIN_DBI, NULL); rc = mdb_cursor_set(&mc, &key, &data, MDB_SET, &exact); if (rc == MDB_SUCCESS) { /* make sure this is actually a DB */ MDB_node *node = NODEPTR(mc.mc_pg[mc.mc_top], mc.mc_ki[mc.mc_top]); if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) != F_SUBDATA) return MDB_INCOMPATIBLE; } else { if (rc != MDB_NOTFOUND || !(flags & MDB_CREATE)) return rc; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EACCES; } /* Done here so we cannot fail after creating a new DB */ if ((namedup = strdup(name)) == NULL) return ENOMEM; if (rc) { /* MDB_NOTFOUND and MDB_CREATE: Create new DB */ data.mv_size = sizeof(MDB_db); data.mv_data = &dummy; memset(&dummy, 0, sizeof(dummy)); dummy.md_root = P_INVALID; dummy.md_flags = flags & PERSISTENT_FLAGS; WITH_CURSOR_TRACKING(mc, rc = mdb_cursor_put(&mc, &key, &data, F_SUBDATA)); dbflag |= DB_DIRTY; } if (rc) { free(namedup); } else { /* Got info, register DBI in this txn */ unsigned int slot = unused ? unused : txn->mt_numdbs; txn->mt_dbxs[slot].md_name.mv_data = namedup; txn->mt_dbxs[slot].md_name.mv_size = len; txn->mt_dbxs[slot].md_rel = NULL; txn->mt_dbflags[slot] = dbflag; /* txn-> and env-> are the same in read txns, use * tmp variable to avoid undefined assignment */ seq = ++txn->mt_env->me_dbiseqs[slot]; txn->mt_dbiseqs[slot] = seq; memcpy(&txn->mt_dbs[slot], data.mv_data, sizeof(MDB_db)); *dbi = slot; mdb_default_cmp(txn, slot); if (!unused) { txn->mt_numdbs++; } } return rc; } int ESECT mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *arg) { if (!arg || !TXN_DBI_EXIST(txn, dbi, DB_VALID)) return EINVAL; if (txn->mt_flags & MDB_TXN_BLOCKED) return MDB_BAD_TXN; if (txn->mt_dbflags[dbi] & DB_STALE) { MDB_cursor mc; MDB_xcursor mx; /* Stale, must read the DB's root. cursor_init does it for us. */ mdb_cursor_init(&mc, txn, dbi, &mx); } return mdb_stat0(txn->mt_env, &txn->mt_dbs[dbi], arg); } void mdb_dbi_close(MDB_env *env, MDB_dbi dbi) { char *ptr; if (dbi < CORE_DBS || dbi >= env->me_maxdbs) return; ptr = env->me_dbxs[dbi].md_name.mv_data; /* If there was no name, this was already closed */ if (ptr) { env->me_dbxs[dbi].md_name.mv_data = NULL; env->me_dbxs[dbi].md_name.mv_size = 0; env->me_dbflags[dbi] = 0; env->me_dbiseqs[dbi]++; free(ptr); } } int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags) { /* We could return the flags for the FREE_DBI too but what's the point? */ if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; *flags = txn->mt_dbs[dbi].md_flags & PERSISTENT_FLAGS; return MDB_SUCCESS; } /** Add all the DB's pages to the free list. * @param[in] mc Cursor on the DB to free. * @param[in] subs non-Zero to check for sub-DBs in this DB. * @return 0 on success, non-zero on failure. */ static int mdb_drop0(MDB_cursor *mc, int subs) { int rc; rc = mdb_page_search(mc, NULL, MDB_PS_FIRST); if (rc == MDB_SUCCESS) { MDB_txn *txn = mc->mc_txn; MDB_node *ni; MDB_cursor mx; unsigned int i; /* DUPSORT sub-DBs have no ovpages/DBs. Omit scanning leaves. * This also avoids any P_LEAF2 pages, which have no nodes. * Also if the DB doesn't have sub-DBs and has no overflow * pages, omit scanning leaves. */ if ((mc->mc_flags & C_SUB) || (!subs && !mc->mc_db->md_overflow_pages)) mdb_cursor_pop(mc); mdb_cursor_copy(mc, &mx); while (mc->mc_snum > 0) { MDB_page *mp = mc->mc_pg[mc->mc_top]; unsigned n = NUMKEYS(mp); if (IS_LEAF(mp)) { for (i=0; imn_flags & F_BIGDATA) { MDB_page *omp; pgno_t pg; memcpy(&pg, NODEDATA(ni), sizeof(pg)); rc = mdb_page_get(mc, pg, &omp, NULL); if (rc != 0) goto done; mdb_cassert(mc, IS_OVERFLOW(omp)); rc = mdb_midl_append_range(&txn->mt_free_pgs, pg, omp->mp_pages); if (rc) goto done; mc->mc_db->md_overflow_pages -= omp->mp_pages; if (!mc->mc_db->md_overflow_pages && !subs) break; } else if (subs && (ni->mn_flags & F_SUBDATA)) { mdb_xcursor_init1(mc, ni); rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); if (rc) goto done; } } if (!subs && !mc->mc_db->md_overflow_pages) goto pop; } else { if ((rc = mdb_midl_need(&txn->mt_free_pgs, n)) != 0) goto done; for (i=0; imt_free_pgs, pg); } } if (!mc->mc_top) break; mc->mc_ki[mc->mc_top] = i; rc = mdb_cursor_sibling(mc, 1); if (rc) { if (rc != MDB_NOTFOUND) goto done; /* no more siblings, go back to beginning * of previous level. */ pop: mdb_cursor_pop(mc); mc->mc_ki[0] = 0; for (i=1; imc_snum; i++) { mc->mc_ki[i] = 0; mc->mc_pg[i] = mx.mc_pg[i]; } } } /* free it */ rc = mdb_midl_append(&txn->mt_free_pgs, mc->mc_db->md_root); done: if (rc) txn->mt_flags |= MDB_TXN_ERROR; } else if (rc == MDB_NOTFOUND) { rc = MDB_SUCCESS; } mc->mc_flags &= ~C_INITIALIZED; return rc; } int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del) { MDB_cursor *mc, *m2; int rc; if ((unsigned)del > 1 || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) return EACCES; if (TXN_DBI_CHANGED(txn, dbi)) return MDB_BAD_DBI; rc = mdb_cursor_open(txn, dbi, &mc); if (rc) return rc; rc = mdb_drop0(mc, mc->mc_db->md_flags & MDB_DUPSORT); /* Invalidate the dropped DB's cursors */ for (m2 = txn->mt_cursors[dbi]; m2; m2 = m2->mc_next) m2->mc_flags &= ~(C_INITIALIZED|C_EOF); if (rc) goto leave; /* Can't delete the main DB */ if (del && dbi >= CORE_DBS) { rc = mdb_del0(txn, MAIN_DBI, &mc->mc_dbx->md_name, NULL, F_SUBDATA); if (!rc) { txn->mt_dbflags[dbi] = DB_STALE; mdb_dbi_close(txn->mt_env, dbi); } else { txn->mt_flags |= MDB_TXN_ERROR; } } else { /* reset the DB record, mark it dirty */ txn->mt_dbflags[dbi] |= DB_DIRTY; txn->mt_dbs[dbi].md_depth = 0; txn->mt_dbs[dbi].md_branch_pages = 0; txn->mt_dbs[dbi].md_leaf_pages = 0; txn->mt_dbs[dbi].md_overflow_pages = 0; txn->mt_dbs[dbi].md_entries = 0; txn->mt_dbs[dbi].md_root = P_INVALID; txn->mt_flags |= MDB_TXN_DIRTY; } leave: mdb_cursor_close(mc); return rc; } int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_cmp = cmp; return MDB_SUCCESS; } int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_dcmp = cmp; return MDB_SUCCESS; } int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_rel = rel; return MDB_SUCCESS; } int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx) { if (!TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) return EINVAL; txn->mt_dbxs[dbi].md_relctx = ctx; return MDB_SUCCESS; } int ESECT mdb_env_get_maxkeysize(MDB_env *env) { return ENV_MAXKEY(env); } int ESECT mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx) { unsigned int i, rdrs; MDB_reader *mr; char buf[64]; int rc = 0, first = 1; if (!env || !func) return -1; if (!env->me_txns) { return func("(no reader locks)\n", ctx); } rdrs = env->me_txns->mti_numreaders; mr = env->me_txns->mti_readers; for (i=0; i> 1; cursor = base + pivot + 1; val = pid - ids[cursor]; if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { /* found, so it's a duplicate */ return -1; } } if( val > 0 ) { ++cursor; } ids[0]++; for (n = ids[0]; n > cursor; n--) ids[n] = ids[n-1]; ids[n] = pid; return 0; } int ESECT mdb_reader_check(MDB_env *env, int *dead) { if (!env) return EINVAL; if (dead) *dead = 0; return env->me_txns ? mdb_reader_check0(env, 0, dead) : MDB_SUCCESS; } /** As #mdb_reader_check(). \b rlocked is set if caller locked #me_rmutex. */ static int ESECT mdb_reader_check0(MDB_env *env, int rlocked, int *dead) { mdb_mutexref_t rmutex = rlocked ? NULL : env->me_rmutex; unsigned int i, j, rdrs; MDB_reader *mr; MDB_PID_T *pids, pid; int rc = MDB_SUCCESS, count = 0; rdrs = env->me_txns->mti_numreaders; pids = malloc((rdrs+1) * sizeof(MDB_PID_T)); if (!pids) return ENOMEM; pids[0] = 0; mr = env->me_txns->mti_readers; for (i=0; ime_pid) { if (mdb_pid_insert(pids, pid) == 0) { if (!mdb_reader_pid(env, Pidcheck, pid)) { /* Stale reader found */ j = i; if (rmutex) { if ((rc = LOCK_MUTEX0(rmutex)) != 0) { if ((rc = mdb_mutex_failed(env, rmutex, rc))) break; rdrs = 0; /* the above checked all readers */ } else { /* Recheck, a new process may have reused pid */ if (mdb_reader_pid(env, Pidcheck, pid)) j = rdrs; } } for (; jme_rmutex); if (!rlocked) { /* Keep mti_txnid updated, otherwise next writer can * overwrite data which latest meta page refers to. */ meta = mdb_env_pick_meta(env); env->me_txns->mti_txnid = meta->mm_txnid; /* env is hosed if the dead thread was ours */ if (env->me_txn) { env->me_flags |= MDB_FATAL_ERROR; env->me_txn = NULL; rc = MDB_PANIC; } } DPRINTF(("%cmutex owner died, %s", (rlocked ? 'r' : 'w'), (rc ? "this process' env is hosed" : "recovering"))); rc2 = mdb_reader_check0(env, rlocked, NULL); if (rc2 == 0) rc2 = mdb_mutex_consistent(mutex); if (rc || (rc = rc2)) { DPRINTF(("LOCK_MUTEX recovery failed, %s", mdb_strerror(rc))); UNLOCK_MUTEX(mutex); } } else { #ifdef _WIN32 rc = ErrCode(); #endif DPRINTF(("LOCK_MUTEX failed, %s", mdb_strerror(rc))); } return rc; } #endif /* MDB_ROBUST_SUPPORTED */ #if defined(_WIN32) /** Convert \b src to new wchar_t[] string with room for \b xtra extra chars */ static int ESECT utf8_to_utf16(const char *src, MDB_name *dst, int xtra) { int rc, need = 0; wchar_t *result = NULL; for (;;) { /* malloc result, then fill it in */ need = MultiByteToWideChar(CP_UTF8, 0, src, -1, result, need); if (!need) { rc = ErrCode(); free(result); return rc; } if (!result) { result = malloc(sizeof(wchar_t) * (need + xtra)); if (!result) return ENOMEM; continue; } dst->mn_alloced = 1; dst->mn_len = need - 1; dst->mn_val = result; return MDB_SUCCESS; } } #endif /* defined(_WIN32) */ /** @} */ py-lmdb-py-lmdb_1.4.1/lib/midl.c000066400000000000000000000146741441346354400163700ustar00rootroot00000000000000/** @file midl.c * @brief ldap bdb back-end ID List functions */ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * * Copyright 2000-2020 The OpenLDAP Foundation. * Portions Copyright 2001-2020 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #include #include #include #include #include #include "midl.h" /** @defgroup internal LMDB Internals * @{ */ /** @defgroup idls ID List Management * @{ */ #define CMP(x,y) ( (x) < (y) ? -1 : (x) > (y) ) unsigned mdb_midl_search( MDB_IDL ids, MDB_ID id ) { /* * binary search of id in ids * if found, returns position of id * if not found, returns first position greater than id */ unsigned base = 0; unsigned cursor = 1; int val = 0; unsigned n = ids[0]; while( 0 < n ) { unsigned pivot = n >> 1; cursor = base + pivot + 1; val = CMP( ids[cursor], id ); if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { return cursor; } } if( val > 0 ) { ++cursor; } return cursor; } #if 0 /* superseded by append/sort */ int mdb_midl_insert( MDB_IDL ids, MDB_ID id ) { unsigned x, i; x = mdb_midl_search( ids, id ); assert( x > 0 ); if( x < 1 ) { /* internal error */ return -2; } if ( x <= ids[0] && ids[x] == id ) { /* duplicate */ assert(0); return -1; } if ( ++ids[0] >= MDB_IDL_DB_MAX ) { /* no room */ --ids[0]; return -2; } else { /* insert id */ for (i=ids[0]; i>x; i--) ids[i] = ids[i-1]; ids[x] = id; } return 0; } #endif MDB_IDL mdb_midl_alloc(int num) { MDB_IDL ids = malloc((num+2) * sizeof(MDB_ID)); if (ids) { *ids++ = num; *ids = 0; } return ids; } void mdb_midl_free(MDB_IDL ids) { if (ids) free(ids-1); } void mdb_midl_shrink( MDB_IDL *idp ) { MDB_IDL ids = *idp; if (*(--ids) > MDB_IDL_UM_MAX && (ids = realloc(ids, (MDB_IDL_UM_MAX+2) * sizeof(MDB_ID)))) { *ids++ = MDB_IDL_UM_MAX; *idp = ids; } } static int mdb_midl_grow( MDB_IDL *idp, int num ) { MDB_IDL idn = *idp-1; /* grow it */ idn = realloc(idn, (*idn + num + 2) * sizeof(MDB_ID)); if (!idn) return ENOMEM; *idn++ += num; *idp = idn; return 0; } int mdb_midl_need( MDB_IDL *idp, unsigned num ) { MDB_IDL ids = *idp; num += ids[0]; if (num > ids[-1]) { num = (num + num/4 + (256 + 2)) & -256; if (!(ids = realloc(ids-1, num * sizeof(MDB_ID)))) return ENOMEM; *ids++ = num - 2; *idp = ids; } return 0; } int mdb_midl_append( MDB_IDL *idp, MDB_ID id ) { MDB_IDL ids = *idp; /* Too big? */ if (ids[0] >= ids[-1]) { if (mdb_midl_grow(idp, MDB_IDL_UM_MAX)) return ENOMEM; ids = *idp; } ids[0]++; ids[ids[0]] = id; return 0; } int mdb_midl_append_list( MDB_IDL *idp, MDB_IDL app ) { MDB_IDL ids = *idp; /* Too big? */ if (ids[0] + app[0] >= ids[-1]) { if (mdb_midl_grow(idp, app[0])) return ENOMEM; ids = *idp; } memcpy(&ids[ids[0]+1], &app[1], app[0] * sizeof(MDB_ID)); ids[0] += app[0]; return 0; } int mdb_midl_append_range( MDB_IDL *idp, MDB_ID id, unsigned n ) { MDB_ID *ids = *idp, len = ids[0]; /* Too big? */ if (len + n > ids[-1]) { if (mdb_midl_grow(idp, n | MDB_IDL_UM_MAX)) return ENOMEM; ids = *idp; } ids[0] = len + n; ids += len; while (n) ids[n--] = id++; return 0; } void mdb_midl_xmerge( MDB_IDL idl, MDB_IDL merge ) { MDB_ID old_id, merge_id, i = merge[0], j = idl[0], k = i+j, total = k; idl[0] = (MDB_ID)-1; /* delimiter for idl scan below */ old_id = idl[j]; while (i) { merge_id = merge[i--]; for (; old_id < merge_id; old_id = idl[--j]) idl[k--] = old_id; idl[k--] = merge_id; } idl[0] = total; } /* Quicksort + Insertion sort for small arrays */ #define SMALL 8 #define MIDL_SWAP(a,b) { itmp=(a); (a)=(b); (b)=itmp; } void mdb_midl_sort( MDB_IDL ids ) { /* Max possible depth of int-indexed tree * 2 items/level */ int istack[sizeof(int)*CHAR_BIT * 2]; int i,j,k,l,ir,jstack; MDB_ID a, itmp; ir = (int)ids[0]; l = 1; jstack = 0; for(;;) { if (ir - l < SMALL) { /* Insertion sort */ for (j=l+1;j<=ir;j++) { a = ids[j]; for (i=j-1;i>=1;i--) { if (ids[i] >= a) break; ids[i+1] = ids[i]; } ids[i+1] = a; } if (jstack == 0) break; ir = istack[jstack--]; l = istack[jstack--]; } else { k = (l + ir) >> 1; /* Choose median of left, center, right */ MIDL_SWAP(ids[k], ids[l+1]); if (ids[l] < ids[ir]) { MIDL_SWAP(ids[l], ids[ir]); } if (ids[l+1] < ids[ir]) { MIDL_SWAP(ids[l+1], ids[ir]); } if (ids[l] < ids[l+1]) { MIDL_SWAP(ids[l], ids[l+1]); } i = l+1; j = ir; a = ids[l+1]; for(;;) { do i++; while(ids[i] > a); do j--; while(ids[j] < a); if (j < i) break; MIDL_SWAP(ids[i],ids[j]); } ids[l+1] = ids[j]; ids[j] = a; jstack += 2; if (ir-i+1 >= j-l) { istack[jstack] = ir; istack[jstack-1] = i; ir = j-1; } else { istack[jstack] = j-1; istack[jstack-1] = l; l = i; } } } } unsigned mdb_mid2l_search( MDB_ID2L ids, MDB_ID id ) { /* * binary search of id in ids * if found, returns position of id * if not found, returns first position greater than id */ unsigned base = 0; unsigned cursor = 1; int val = 0; unsigned n = (unsigned)ids[0].mid; while( 0 < n ) { unsigned pivot = n >> 1; cursor = base + pivot + 1; val = CMP( id, ids[cursor].mid ); if( val < 0 ) { n = pivot; } else if ( val > 0 ) { base = cursor; n -= pivot + 1; } else { return cursor; } } if( val > 0 ) { ++cursor; } return cursor; } int mdb_mid2l_insert( MDB_ID2L ids, MDB_ID2 *id ) { unsigned x, i; x = mdb_mid2l_search( ids, id->mid ); if( x < 1 ) { /* internal error */ return -2; } if ( x <= ids[0].mid && ids[x].mid == id->mid ) { /* duplicate */ return -1; } if ( ids[0].mid >= MDB_IDL_UM_MAX ) { /* too big */ return -2; } else { /* insert id */ ids[0].mid++; for (i=(unsigned)ids[0].mid; i>x; i--) ids[i] = ids[i-1]; ids[x] = *id; } return 0; } int mdb_mid2l_append( MDB_ID2L ids, MDB_ID2 *id ) { /* Too big? */ if (ids[0].mid >= MDB_IDL_UM_MAX) { return -2; } ids[0].mid++; ids[ids[0].mid] = *id; return 0; } /** @} */ /** @} */ py-lmdb-py-lmdb_1.4.1/lib/midl.h000066400000000000000000000131171441346354400163640ustar00rootroot00000000000000/** @file midl.h * @brief LMDB ID List header file. * * This file was originally part of back-bdb but has been * modified for use in libmdb. Most of the macros defined * in this file are unused, just left over from the original. * * This file is only used internally in libmdb and its definitions * are not exposed publicly. */ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * * Copyright 2000-2020 The OpenLDAP Foundation. * Portions Copyright 2001-2020 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . */ #ifndef _MDB_MIDL_H_ #define _MDB_MIDL_H_ #include #ifdef __cplusplus extern "C" { #endif /** @defgroup internal LMDB Internals * @{ */ /** @defgroup idls ID List Management * @{ */ /** A generic unsigned ID number. These were entryIDs in back-bdb. * Preferably it should have the same size as a pointer. */ typedef size_t MDB_ID; /** An IDL is an ID List, a sorted array of IDs. The first * element of the array is a counter for how many actual * IDs are in the list. In the original back-bdb code, IDLs are * sorted in ascending order. For libmdb IDLs are sorted in * descending order. */ typedef MDB_ID *MDB_IDL; /* IDL sizes - likely should be even bigger * limiting factors: sizeof(ID), thread stack size */ #define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */ #define MDB_IDL_DB_SIZE (1< + * @param[in] txn Transaction used for the copy. If NULL, a temporary + * transaction will be used. This is only valid if the #MDB_CP_COMPACT + * flag is set. + * * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags); +int mdb_env_copy3(MDB_env *env, const char *path, unsigned int flags, MDB_txn *txn); /** @brief Copy an LMDB environment to the specified file descriptor, * with options. @@ -701,9 +706,13 @@ int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags); * have already been opened for Write access. * @param[in] flags Special options for this operation. * See #mdb_env_copy2() for options. + * @param[in] txn Transaction used for the copy. If NULL, a temporary + * transaction will be used. This is only valid if the #MDB_CP_COMPACT + * flag is set. * @return A non-zero error value on failure and 0 on success. */ int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags); +int mdb_env_copyfd3(MDB_env *env, mdb_filehandle_t fd, unsigned int flags, MDB_txn *txn); /** @brief Return statistics about the LMDB environment. * diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 8cecdb2e69..9ede4183dd 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -9332,12 +9332,12 @@ done: /** Copy environment with compaction. */ static int ESECT -mdb_env_copyfd1(MDB_env *env, HANDLE fd) +mdb_env_copyfd1(MDB_env *env, HANDLE fd, MDB_txn *txn) { MDB_meta *mm; MDB_page *mp; mdb_copy my = {0}; - MDB_txn *txn = NULL; + MDB_txn *orig_txn = txn; pthread_t thr; pgno_t root, new_root; int rc = MDB_SUCCESS; @@ -9383,9 +9383,11 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) if (rc) goto done; - rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); - if (rc) - goto finish; + if (!txn) { + rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); + if (rc) + goto finish; + } mp = (MDB_page *)my.mc_wbuf[0]; memset(mp, 0, NUM_METAS * env->me_psize); @@ -9445,7 +9447,8 @@ finish: my.mc_error = rc; mdb_env_cthr_toggle(&my, 1 | MDB_EOF); rc = THREAD_FINISH(thr); - mdb_txn_abort(txn); + if (!orig_txn) + mdb_txn_abort(txn); done: #ifdef _WIN32 @@ -9562,12 +9565,22 @@ leave: } int ESECT -mdb_env_copyfd2(MDB_env *env, HANDLE fd, unsigned int flags) +mdb_env_copyfd3(MDB_env *env, HANDLE fd, unsigned int flags, MDB_txn *txn) { if (flags & MDB_CP_COMPACT) - return mdb_env_copyfd1(env, fd); + return mdb_env_copyfd1(env, fd, txn); else + { + if (txn) /* may only use txn with compact */ + return EINVAL; return mdb_env_copyfd0(env, fd); + } +} + +int ESECT +mdb_env_copyfd2(MDB_env *env, HANDLE fd, unsigned int flags) +{ + return mdb_env_copyfd3(env, fd, flags, NULL); } int ESECT @@ -9578,6 +9591,12 @@ mdb_env_copyfd(MDB_env *env, HANDLE fd) int ESECT mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags) +{ + return mdb_env_copy3(env, path, flags, NULL); +} + +int ESECT +mdb_env_copy3(MDB_env *env, const char *path, unsigned int flags, MDB_txn *txn) { int rc; MDB_name fname; @@ -9589,7 +9608,7 @@ mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags) mdb_fname_destroy(fname); } if (rc == MDB_SUCCESS) { - rc = mdb_env_copyfd2(env, newfd, flags); + rc = mdb_env_copyfd3(env, newfd, flags, txn); if (close(newfd) < 0 && rc == MDB_SUCCESS) rc = ErrCode(); } py-lmdb-py-lmdb_1.4.1/lib/py-lmdb/preload.h000066400000000000000000000032311441346354400204250ustar00rootroot00000000000000/* * Copyright 2015 The py-lmdb authors, all rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * OpenLDAP is a registered trademark of the OpenLDAP Foundation. * * Individual files and/or contributed packages may be copyright by * other parties and/or subject to additional restrictions. * * This work also contains materials derived from public sources. * * Additional information about OpenLDAP can be obtained at * . */ #ifndef LMDB_PRELOAD_H #define LMDB_PRELOAD_H #include /** * Touch a byte from every page in `x`, causing any read faults necessary for * copying the value to occur. This should be called with the GIL released, in * order to dramatically decrease the chances of a page fault being taken with * the GIL held. * * We do this since PyMalloc cannot be invoked with the GIL released, and we * cannot know the size of the MDB result value before dropping the GIL. This * seems the simplest and cheapest compromise to ensuring multithreaded Python * apps don't hard stall when dealing with a database larger than RAM. */ static void preload(int rc, void *x, size_t size) { if(rc == 0) { volatile char j; size_t i; for(i = 0; i < size; i += 4096) { j = ((volatile char *)x)[i]; } (void) j; /* -Wunused-variable */ } } #endif /* !LMDB_PRELOAD_H */ py-lmdb-py-lmdb_1.4.1/lib/win32-stdint/000077500000000000000000000000001441346354400175305ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/lib/win32-stdint/stdint.h000066400000000000000000000176341441346354400212210ustar00rootroot00000000000000// ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2013 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. Neither the name of the product nor the names of its contributors may // be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #if _MSC_VER > 1000 #pragma once #endif #if _MSC_VER >= 1600 // [ #include #else // ] _MSC_VER >= 1600 [ #include // For Visual Studio 6 in C++ mode and for many Visual Studio versions when // compiling for ARM we should wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #ifdef __cplusplus extern "C" { #endif # include #ifdef __cplusplus } #endif // Define _W64 macros to mark types changing their size, like intptr_t. #ifndef _W64 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 # define _W64 __w64 # else # define _W64 # endif #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types // Visual Studio 6 and Embedded Visual C++ 4 doesn't // realize that, e.g. char has the same size as __int8 // so we give up on __intX for them. #if (_MSC_VER < 1300) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef signed __int8 int8_t; typedef signed __int16 int16_t; typedef signed __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef signed __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants // These #ifndef's are needed to prevent collisions with . // Check out Issue 9 for the details. #ifndef INTMAX_C // [ # define INTMAX_C INT64_C #endif // INTMAX_C ] #ifndef UINTMAX_C // [ # define UINTMAX_C UINT64_C #endif // UINTMAX_C ] #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_VER >= 1600 ] #endif // _MSC_STDINT_H_ ] py-lmdb-py-lmdb_1.4.1/lib/win32/000077500000000000000000000000001441346354400162255ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/lib/win32/inttypes.h000066400000000000000000000175631441346354400202710ustar00rootroot00000000000000// ISO C9x compliant inttypes.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2013 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. Neither the name of the product nor the names of its contributors may // be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_INTTYPES_H_ // [ #define _MSC_INTTYPES_H_ #if _MSC_VER > 1000 #pragma once #endif #include "stdint.h" // 7.8 Format conversion of integer types typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; // 7.8.1 Macros for format specifiers #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 // The fprintf macros for signed integers are: #define PRId8 "d" #define PRIi8 "i" #define PRIdLEAST8 "d" #define PRIiLEAST8 "i" #define PRIdFAST8 "d" #define PRIiFAST8 "i" #define PRId16 "hd" #define PRIi16 "hi" #define PRIdLEAST16 "hd" #define PRIiLEAST16 "hi" #define PRIdFAST16 "hd" #define PRIiFAST16 "hi" #define PRId32 "I32d" #define PRIi32 "I32i" #define PRIdLEAST32 "I32d" #define PRIiLEAST32 "I32i" #define PRIdFAST32 "I32d" #define PRIiFAST32 "I32i" #define PRId64 "I64d" #define PRIi64 "I64i" #define PRIdLEAST64 "I64d" #define PRIiLEAST64 "I64i" #define PRIdFAST64 "I64d" #define PRIiFAST64 "I64i" #define PRIdMAX "I64d" #define PRIiMAX "I64i" #define PRIdPTR "Id" #define PRIiPTR "Ii" // The fprintf macros for unsigned integers are: #define PRIo8 "o" #define PRIu8 "u" #define PRIx8 "x" #define PRIX8 "X" #define PRIoLEAST8 "o" #define PRIuLEAST8 "u" #define PRIxLEAST8 "x" #define PRIXLEAST8 "X" #define PRIoFAST8 "o" #define PRIuFAST8 "u" #define PRIxFAST8 "x" #define PRIXFAST8 "X" #define PRIo16 "ho" #define PRIu16 "hu" #define PRIx16 "hx" #define PRIX16 "hX" #define PRIoLEAST16 "ho" #define PRIuLEAST16 "hu" #define PRIxLEAST16 "hx" #define PRIXLEAST16 "hX" #define PRIoFAST16 "ho" #define PRIuFAST16 "hu" #define PRIxFAST16 "hx" #define PRIXFAST16 "hX" #define PRIo32 "I32o" #define PRIu32 "I32u" #define PRIx32 "I32x" #define PRIX32 "I32X" #define PRIoLEAST32 "I32o" #define PRIuLEAST32 "I32u" #define PRIxLEAST32 "I32x" #define PRIXLEAST32 "I32X" #define PRIoFAST32 "I32o" #define PRIuFAST32 "I32u" #define PRIxFAST32 "I32x" #define PRIXFAST32 "I32X" #define PRIo64 "I64o" #define PRIu64 "I64u" #define PRIx64 "I64x" #define PRIX64 "I64X" #define PRIoLEAST64 "I64o" #define PRIuLEAST64 "I64u" #define PRIxLEAST64 "I64x" #define PRIXLEAST64 "I64X" #define PRIoFAST64 "I64o" #define PRIuFAST64 "I64u" #define PRIxFAST64 "I64x" #define PRIXFAST64 "I64X" #define PRIoMAX "I64o" #define PRIuMAX "I64u" #define PRIxMAX "I64x" #define PRIXMAX "I64X" #define PRIoPTR "Io" #define PRIuPTR "Iu" #define PRIxPTR "Ix" #define PRIXPTR "IX" // The fscanf macros for signed integers are: #define SCNd8 "d" #define SCNi8 "i" #define SCNdLEAST8 "d" #define SCNiLEAST8 "i" #define SCNdFAST8 "d" #define SCNiFAST8 "i" #define SCNd16 "hd" #define SCNi16 "hi" #define SCNdLEAST16 "hd" #define SCNiLEAST16 "hi" #define SCNdFAST16 "hd" #define SCNiFAST16 "hi" #define SCNd32 "ld" #define SCNi32 "li" #define SCNdLEAST32 "ld" #define SCNiLEAST32 "li" #define SCNdFAST32 "ld" #define SCNiFAST32 "li" #define SCNd64 "I64d" #define SCNi64 "I64i" #define SCNdLEAST64 "I64d" #define SCNiLEAST64 "I64i" #define SCNdFAST64 "I64d" #define SCNiFAST64 "I64i" #define SCNdMAX "I64d" #define SCNiMAX "I64i" #ifdef _WIN64 // [ # define SCNdPTR "I64d" # define SCNiPTR "I64i" #else // _WIN64 ][ # define SCNdPTR "ld" # define SCNiPTR "li" #endif // _WIN64 ] // The fscanf macros for unsigned integers are: #define SCNo8 "o" #define SCNu8 "u" #define SCNx8 "x" #define SCNX8 "X" #define SCNoLEAST8 "o" #define SCNuLEAST8 "u" #define SCNxLEAST8 "x" #define SCNXLEAST8 "X" #define SCNoFAST8 "o" #define SCNuFAST8 "u" #define SCNxFAST8 "x" #define SCNXFAST8 "X" #define SCNo16 "ho" #define SCNu16 "hu" #define SCNx16 "hx" #define SCNX16 "hX" #define SCNoLEAST16 "ho" #define SCNuLEAST16 "hu" #define SCNxLEAST16 "hx" #define SCNXLEAST16 "hX" #define SCNoFAST16 "ho" #define SCNuFAST16 "hu" #define SCNxFAST16 "hx" #define SCNXFAST16 "hX" #define SCNo32 "lo" #define SCNu32 "lu" #define SCNx32 "lx" #define SCNX32 "lX" #define SCNoLEAST32 "lo" #define SCNuLEAST32 "lu" #define SCNxLEAST32 "lx" #define SCNXLEAST32 "lX" #define SCNoFAST32 "lo" #define SCNuFAST32 "lu" #define SCNxFAST32 "lx" #define SCNXFAST32 "lX" #define SCNo64 "I64o" #define SCNu64 "I64u" #define SCNx64 "I64x" #define SCNX64 "I64X" #define SCNoLEAST64 "I64o" #define SCNuLEAST64 "I64u" #define SCNxLEAST64 "I64x" #define SCNXLEAST64 "I64X" #define SCNoFAST64 "I64o" #define SCNuFAST64 "I64u" #define SCNxFAST64 "I64x" #define SCNXFAST64 "I64X" #define SCNoMAX "I64o" #define SCNuMAX "I64u" #define SCNxMAX "I64x" #define SCNXMAX "I64X" #ifdef _WIN64 // [ # define SCNoPTR "I64o" # define SCNuPTR "I64u" # define SCNxPTR "I64x" # define SCNXPTR "I64X" #else // _WIN64 ][ # define SCNoPTR "lo" # define SCNuPTR "lu" # define SCNxPTR "lx" # define SCNXPTR "lX" #endif // _WIN64 ] #endif // __STDC_FORMAT_MACROS ] // 7.8.2 Functions for greatest-width integer types // 7.8.2.1 The imaxabs function #define imaxabs _abs64 // 7.8.2.2 The imaxdiv function // This is modified version of div() function from Microsoft's div.c found // in %MSVC.NET%\crt\src\div.c #ifdef STATIC_IMAXDIV // [ static #else // STATIC_IMAXDIV ][ _inline #endif // STATIC_IMAXDIV ] imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) { imaxdiv_t result; result.quot = numer / denom; result.rem = numer % denom; if (numer < 0 && result.rem > 0) { // did division wrong; must fix up ++result.quot; result.rem -= denom; } return result; } // 7.8.2.3 The strtoimax and strtoumax functions #define strtoimax _strtoi64 #define strtoumax _strtoui64 // 7.8.2.4 The wcstoimax and wcstoumax functions #define wcstoimax _wcstoi64 #define wcstoumax _wcstoui64 #endif // _MSC_INTTYPES_H_ ] py-lmdb-py-lmdb_1.4.1/lib/win32/unistd.h000066400000000000000000000000001441346354400176720ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/lmdb/000077500000000000000000000000001441346354400154335ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/lmdb/__init__.py000066400000000000000000000032561441346354400175520ustar00rootroot00000000000000# Copyright 2013-2021 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . """ Python wrapper for OpenLDAP's "Lightning" MDB database. Please see https://lmdb.readthedocs.io/ """ import os import sys def _reading_docs(): # Hack: disable speedups while testing or reading docstrings. Don't check # for basename for embedded python - variable 'argv' does not exists there or is empty. if not(hasattr(sys, 'argv')) or not sys.argv: return False basename = os.path.basename(sys.argv[0]) return any(x in basename for x in ('sphinx-build', 'pydoc')) try: if _reading_docs() or os.getenv('LMDB_FORCE_CFFI') is not None: raise ImportError from lmdb.cpython import * from lmdb.cpython import open from lmdb.cpython import __all__ except ImportError: if (not _reading_docs()) and os.getenv('LMDB_FORCE_CPYTHON') is not None: raise from lmdb.cffi import * from lmdb.cffi import open from lmdb.cffi import __all__ from lmdb.cffi import __doc__ __version__ = '1.4.1' py-lmdb-py-lmdb_1.4.1/lmdb/__main__.py000066400000000000000000000015351441346354400175310ustar00rootroot00000000000000# Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # Hack to support Python >=v2.6 'pythom -mlmdb' from __future__ import absolute_import import lmdb.tool lmdb.tool.main() py-lmdb-py-lmdb_1.4.1/lmdb/cffi.py000066400000000000000000002640621441346354400167260ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # """ CPython/CFFI wrapper for OpenLDAP's "Lightning" MDB database. Please see https://lmdb.readthedocs.io/ """ from __future__ import absolute_import from __future__ import with_statement import errno import inspect import os import sys import threading is_win32 = sys.platform == 'win32' if is_win32: import msvcrt try: import __builtin__ except ImportError: import builtins as __builtin__ # type: ignore import lmdb try: from lmdb import _config except ImportError: _config = None # type: ignore __all__ = [ 'Cursor', 'Environment', 'Transaction', '_Database', 'enable_drop_gil', 'version', ] __all__ += [ 'BadDbiError', 'BadRslotError', 'BadTxnError', 'BadValsizeError', 'CorruptedError', 'CursorFullError', 'DbsFullError', 'DiskError', 'Error', 'IncompatibleError', 'InvalidError', 'InvalidParameterError', 'KeyExistsError', 'LockError', 'MapFullError', 'MapResizedError', 'MemoryError', 'NotFoundError', 'PageFullError', 'PageNotFoundError', 'PanicError', 'ReadersFullError', 'ReadonlyError', 'TlsFullError', 'TxnFullError', 'VersionMismatchError', ] # Handle moronic Python 3 mess. UnicodeType = getattr(__builtin__, 'unicode', str) BytesType = getattr(__builtin__, 'bytes', str) O_0755 = int('0755', 8) O_0111 = int('0111', 8) EMPTY_BYTES = UnicodeType().encode() # Used to track context across CFFI callbacks. _callbacks = threading.local() _CFFI_CDEF = ''' typedef int mode_t; typedef ... MDB_env; typedef struct MDB_txn MDB_txn; typedef struct MDB_cursor MDB_cursor; typedef unsigned int MDB_dbi; enum MDB_cursor_op { MDB_FIRST, MDB_FIRST_DUP, MDB_GET_BOTH, MDB_GET_BOTH_RANGE, MDB_GET_CURRENT, MDB_GET_MULTIPLE, MDB_LAST, MDB_LAST_DUP, MDB_NEXT, MDB_NEXT_DUP, MDB_NEXT_MULTIPLE, MDB_NEXT_NODUP, MDB_PREV, MDB_PREV_DUP, MDB_PREV_NODUP, MDB_SET, MDB_SET_KEY, MDB_SET_RANGE, ... }; typedef enum MDB_cursor_op MDB_cursor_op; struct MDB_val { size_t mv_size; void *mv_data; ...; }; typedef struct MDB_val MDB_val; struct MDB_stat { unsigned int ms_psize; unsigned int ms_depth; size_t ms_branch_pages; size_t ms_leaf_pages; size_t ms_overflow_pages; size_t ms_entries; ...; }; typedef struct MDB_stat MDB_stat; struct MDB_envinfo { void *me_mapaddr; size_t me_mapsize; size_t me_last_pgno; size_t me_last_txnid; unsigned int me_maxreaders; unsigned int me_numreaders; ...; }; typedef struct MDB_envinfo MDB_envinfo; typedef int (*MDB_cmp_func)(const MDB_val *a, const MDB_val *b); typedef void (*MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx); char *mdb_strerror(int err); int mdb_env_create(MDB_env **env); int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode); int mdb_env_copy2(MDB_env *env, const char *path, int flags); int mdb_env_copyfd2(MDB_env *env, int fd, int flags); int mdb_env_stat(MDB_env *env, MDB_stat *stat); int mdb_env_info(MDB_env *env, MDB_envinfo *stat); int mdb_env_get_maxkeysize(MDB_env *env); int mdb_env_sync(MDB_env *env, int force); void mdb_env_close(MDB_env *env); int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff); int mdb_env_get_flags(MDB_env *env, unsigned int *flags); int mdb_env_get_path(MDB_env *env, const char **path); int mdb_env_set_mapsize(MDB_env *env, size_t size); int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers); int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers); int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs); int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn); int mdb_txn_commit(MDB_txn *txn); void mdb_txn_reset(MDB_txn *txn); int mdb_txn_renew(MDB_txn *txn); void mdb_txn_abort(MDB_txn *txn); size_t mdb_txn_id(MDB_txn *txn); int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi); int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat); int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del_); int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor); void mdb_cursor_close(MDB_cursor *cursor); int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags); int mdb_cursor_count(MDB_cursor *cursor, size_t *countp); int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val*data, int op); typedef int (MDB_msg_func)(const char *msg, void *ctx); int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx); int mdb_reader_check(MDB_env *env, int *dead); int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags); #define MDB_VERSION_MAJOR ... #define MDB_VERSION_MINOR ... #define MDB_VERSION_PATCH ... #define EACCES ... #define EAGAIN ... #define EINVAL ... #define ENOMEM ... #define ENOSPC ... #define MDB_BAD_RSLOT ... #define MDB_BAD_DBI ... #define MDB_BAD_TXN ... #define MDB_BAD_VALSIZE ... #define MDB_CORRUPTED ... #define MDB_CURSOR_FULL ... #define MDB_DBS_FULL ... #define MDB_INCOMPATIBLE ... #define MDB_INVALID ... #define MDB_KEYEXIST ... #define MDB_MAP_FULL ... #define MDB_MAP_RESIZED ... #define MDB_NOTFOUND ... #define MDB_PAGE_FULL ... #define MDB_PAGE_NOTFOUND ... #define MDB_PANIC ... #define MDB_READERS_FULL ... #define MDB_TLS_FULL ... #define MDB_TXN_FULL ... #define MDB_VERSION_MISMATCH ... #define MDB_APPEND ... #define MDB_APPENDDUP ... #define MDB_CP_COMPACT ... #define MDB_CREATE ... #define MDB_DUPFIXED ... #define MDB_DUPSORT ... #define MDB_INTEGERDUP ... #define MDB_INTEGERKEY ... #define MDB_MAPASYNC ... #define MDB_NODUPDATA ... #define MDB_NOLOCK ... #define MDB_NOMEMINIT ... #define MDB_NOMETASYNC ... #define MDB_NOOVERWRITE ... #define MDB_NORDAHEAD ... #define MDB_NOSUBDIR ... #define MDB_NOSYNC ... #define MDB_NOTLS ... #define MDB_RDONLY ... #define MDB_REVERSEKEY ... #define MDB_WRITEMAP ... // Helpers below inline MDB_vals. Avoids key alloc/dup on CPython, where // CFFI will use PyString_AS_STRING when passed as an argument. static int pymdb_del(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, char *val_s, size_t vallen); static int pymdb_put(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, char *val_s, size_t vallen, unsigned int flags); static int pymdb_get(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, MDB_val *val_out); static int pymdb_cursor_get(MDB_cursor *cursor, char *key_s, size_t key_len, char *data_s, size_t data_len, MDB_val *key, MDB_val *data, int op); static int pymdb_cursor_put(MDB_cursor *cursor, char *key_s, size_t keylen, char *val_s, size_t vallen, int flags); // Prefaults a range static void preload(int rc, void *x, size_t size); ''' _CFFI_CDEF_PATCHED = ''' int mdb_env_copy3(MDB_env *env, const char *path, unsigned int flags, MDB_txn *txn); int mdb_env_copyfd3(MDB_env *env, int fd, unsigned int flags, MDB_txn *txn); ''' _CFFI_VERIFY = ''' #include #include "lmdb.h" #include "preload.h" // Helpers below inline MDB_vals. Avoids key alloc/dup on CPython, where // CFFI will use PyString_AS_STRING when passed as an argument. static int pymdb_get(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, MDB_val *val_out) { MDB_val key = {keylen, key_s}; int rc = mdb_get(txn, dbi, &key, val_out); return rc; } static int pymdb_put(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, char *val_s, size_t vallen, unsigned int flags) { MDB_val key = {keylen, key_s}; MDB_val val = {vallen, val_s}; return mdb_put(txn, dbi, &key, &val, flags); } static int pymdb_del(MDB_txn *txn, MDB_dbi dbi, char *key_s, size_t keylen, char *val_s, size_t vallen) { MDB_val key = {keylen, key_s}; MDB_val val = {vallen, val_s}; MDB_val *valptr; if(vallen == 0) { valptr = NULL; } else { valptr = &val; } return mdb_del(txn, dbi, &key, valptr); } static int pymdb_cursor_get(MDB_cursor *cursor, char *key_s, size_t key_len, char *data_s, size_t data_len, MDB_val *key, MDB_val *data, int op) { MDB_val tmp_key = {key_len, key_s}; MDB_val tmp_data = {data_len, data_s}; int rc = mdb_cursor_get(cursor, &tmp_key, &tmp_data, op); if(! rc) { *key = tmp_key; *data = tmp_data; } return rc; } static int pymdb_cursor_put(MDB_cursor *cursor, char *key_s, size_t keylen, char *val_s, size_t vallen, int flags) { MDB_val tmpkey = {keylen, key_s}; MDB_val tmpval = {vallen, val_s}; return mdb_cursor_put(cursor, &tmpkey, &tmpval, flags); } ''' if not lmdb._reading_docs(): import cffi # Try to use distutils-bundled CFFI configuration to avoid a recompile and # potential compile errors during first module import. _config_vars = _config.CONFIG if _config else { 'extra_compile_args': ['-w'], 'extra_sources': ['lib/mdb.c', 'lib/midl.c'], 'extra_include_dirs': ['lib'], 'extra_library_dirs': [], 'libraries': [] } _have_patched_lmdb = '-DHAVE_PATCHED_LMDB=1' in _config.CONFIG['extra_compile_args'] # type: ignore if _have_patched_lmdb: _CFFI_CDEF += _CFFI_CDEF_PATCHED _ffi = cffi.FFI() _ffi.cdef(_CFFI_CDEF) _lib = _ffi.verify(_CFFI_VERIFY, modulename='lmdb_cffi', ext_package='lmdb', sources=_config_vars['extra_sources'], extra_compile_args=_config_vars['extra_compile_args'], include_dirs=_config_vars['extra_include_dirs'], libraries=_config_vars['libraries'], library_dirs=_config_vars['extra_library_dirs']) @_ffi.callback("int(char *, void *)") def _msg_func(s, _): """mdb_msg_func() callback. Appends `s` to _callbacks.msg_func list. """ _callbacks.msg_func.append(_ffi.string(s).decode()) return 0 class Error(Exception): """Raised when an LMDB-related error occurs, and no more specific :py:class:`lmdb.Error` subclass exists.""" def __init__(self, what, code=0): self.what = what self.code = code self.reason = _ffi.string(_lib.mdb_strerror(code)) msg = what if code: msg = '%s: %s' % (what, self.reason) hint = getattr(self, 'MDB_HINT', None) if hint: msg += ' (%s)' % (hint,) Exception.__init__(self, msg) class KeyExistsError(Error): """Key/data pair already exists.""" MDB_NAME = 'MDB_KEYEXIST' class NotFoundError(Error): """No matching key/data pair found. Normally py-lmdb indicates a missing key by returning ``None``, or a user-supplied default value, however LMDB may return this error where py-lmdb does not know to convert it into a non-exceptional return. """ MDB_NAME = 'MDB_NOTFOUND' class PageNotFoundError(Error): """Request page not found.""" MDB_NAME = 'MDB_PAGE_NOTFOUND' class CorruptedError(Error): """Located page was of the wrong type.""" MDB_NAME = 'MDB_CORRUPTED' class PanicError(Error): """Update of meta page failed.""" MDB_NAME = 'MDB_PANIC' class VersionMismatchError(Error): """Database environment version mismatch.""" MDB_NAME = 'MDB_VERSION_MISMATCH' class InvalidError(Error): """File is not an MDB file.""" MDB_NAME = 'MDB_INVALID' class MapFullError(Error): """Environment map_size= limit reached.""" MDB_NAME = 'MDB_MAP_FULL' MDB_HINT = 'Please use a larger Environment(map_size=) parameter' class DbsFullError(Error): """Environment max_dbs= limit reached.""" MDB_NAME = 'MDB_DBS_FULL' MDB_HINT = 'Please use a larger Environment(max_dbs=) parameter' class ReadersFullError(Error): """Environment max_readers= limit reached.""" MDB_NAME = 'MDB_READERS_FULL' MDB_HINT = 'Please use a larger Environment(max_readers=) parameter' class TlsFullError(Error): """Thread-local storage keys full - too many environments open.""" MDB_NAME = 'MDB_TLS_FULL' class TxnFullError(Error): """Transaciton has too many dirty pages - transaction too big.""" MDB_NAME = 'MDB_TXN_FULL' MDB_HINT = 'Please do less work within your transaction' class CursorFullError(Error): """Internal error - cursor stack limit reached.""" MDB_NAME = 'MDB_CURSOR_FULL' class PageFullError(Error): """Internal error - page has no more space.""" MDB_NAME = 'MDB_PAGE_FULL' class MapResizedError(Error): """Database contents grew beyond environment map_size=.""" MDB_NAME = 'MDB_MAP_RESIZED' class IncompatibleError(Error): """Operation and DB incompatible, or DB flags changed.""" MDB_NAME = 'MDB_INCOMPATIBLE' class BadRslotError(Error): """Invalid reuse of reader locktable slot.""" MDB_NAME = 'MDB_BAD_RSLOT' class BadDbiError(Error): """The specified DBI was changed unexpectedly.""" MDB_NAME = 'MDB_BAD_DBI' class BadTxnError(Error): """Transaction cannot recover - it must be aborted.""" MDB_NAME = 'MDB_BAD_TXN' class BadValsizeError(Error): """Too big key/data, key is empty, or wrong DUPFIXED size.""" MDB_NAME = 'MDB_BAD_VALSIZE' class ReadonlyError(Error): """An attempt was made to modify a read-only database.""" MDB_NAME = 'EACCES' class InvalidParameterError(Error): """An invalid parameter was specified.""" MDB_NAME = 'EINVAL' class LockError(Error): """The environment was locked by another process.""" MDB_NAME = 'EAGAIN' class MemoryError(Error): """Out of memory.""" MDB_NAME = 'ENOMEM' class DiskError(Error): """No more disk space.""" MDB_NAME = 'ENOSPC' # Prepare _error_map, a mapping of integer MDB_ERROR_CODE to exception class. if not lmdb._reading_docs(): _error_map = {} for obj in list(globals().values()): if inspect.isclass(obj) and issubclass(obj, Error) and obj is not Error: _error_map[getattr(_lib, obj.MDB_NAME)] = obj del obj def _error(what, rc): """Lookup and instantiate the correct exception class for the error code `rc`, using :py:class:`Error` if no better class exists.""" return _error_map.get(rc, Error)(what, rc) class Some_LMDB_Resource_That_Was_Deleted_Or_Closed(object): """We need this because CFFI on PyPy treats None as cffi.NULL, instead of throwing an exception it feeds LMDB null pointers. That means simply replacing native handles with None during _invalidate() will cause NULL pointer dereferences. Instead use this class, and its weird name to cause a TypeError, with a very obvious string in the exception text. The only alternatives to this are inserting a check around every single use of a native handle to ensure the handle is still valid prior to calling LMDB, or doing no crash-safety checking at all. """ def __nonzero__(self): return 0 def __bool__(self): return False def __repr__(self): return "" _invalid = Some_LMDB_Resource_That_Was_Deleted_Or_Closed() def _mvbuf(mv): """Convert a MDB_val cdata to a CFFI buffer object.""" return _ffi.buffer(mv.mv_data, mv.mv_size) def _mvstr(mv): """Convert a MDB_val cdata to Python bytes.""" return _ffi.buffer(mv.mv_data, mv.mv_size)[:] def preload(mv): _lib.preload(0, mv.mv_data, mv.mv_size) def enable_drop_gil(): """Deprecated.""" def version(subpatch=False): """ Return a tuple of integers `(major, minor, patch)` describing the LMDB library version that the binding is linked against. The version of the binding itself is available from ``lmdb.__version__``. `subpatch`: If true, returns a 4 integer tuple consisting of the same plus an extra integer that represents any patches applied by py-lmdb itself (0 representing no patches). """ if subpatch: return (_lib.MDB_VERSION_MAJOR, _lib.MDB_VERSION_MINOR, _lib.MDB_VERSION_PATCH, 1 if _have_patched_lmdb else 0) return (_lib.MDB_VERSION_MAJOR, _lib.MDB_VERSION_MINOR, _lib.MDB_VERSION_PATCH) class Environment(object): """ Structure for a database environment. An environment may contain multiple databases, all residing in the same shared-memory map and underlying disk file. To write to the environment a :py:class:`Transaction` must be created. One simultaneous write transaction is allowed, however there is no limit on the number of read transactions even when a write transaction exists. This class is aliased to `lmdb.open`. It is a serious error to have open the same LMDB file in the same process at the same time. Failure to heed this may lead to data corruption and interpreter crash. Equivalent to `mdb_env_open() `_ `path`: Location of directory (if `subdir=True`) or file prefix to store the database. `map_size`: Maximum size database may grow to; used to size the memory mapping. If database grows larger than ``map_size``, an exception will be raised and the user must close and reopen :py:class:`Environment`. On 64-bit there is no penalty for making this huge (say 1TB). Must be <2GB on 32-bit. .. note:: **The default map size is set low to encourage a crash**, so users can figure out a good value before learning about this option too late. `subdir`: If ``True``, `path` refers to a subdirectory to store the data and lock files in, otherwise it refers to a filename prefix. `readonly`: If ``True``, disallow any write operations. Note the lock file is still modified. If specified, the ``write`` flag to :py:meth:`begin` or :py:class:`Transaction` is ignored. `metasync`: If ``False``, flush system buffers to disk only once per transaction, omit the metadata flush. Defer that until the system flushes files to disk, or next commit or :py:meth:`sync`. This optimization maintains database integrity, but a system crash may undo the last committed transaction. I.e. it preserves the ACI (atomicity, consistency, isolation) but not D (durability) database property. `sync`: If ``False``, don't flush system buffers to disk when committing a transaction. This optimization means a system crash can corrupt the database or lose the last transactions if buffers are not yet flushed to disk. The risk is governed by how often the system flushes dirty buffers to disk and how often :py:meth:`sync` is called. However, if the filesystem preserves write order and `writemap=False`, transactions exhibit ACI (atomicity, consistency, isolation) properties and only lose D (durability). I.e. database integrity is maintained, but a system crash may undo the final transactions. Note that `sync=False, writemap=True` leaves the system with no hint for when to write transactions to disk, unless :py:meth:`sync` is called. `map_async=True, writemap=True` may be preferable. `mode`: File creation mode. `create`: If ``False``, do not create the directory `path` if it is missing. `readahead`: If ``False``, LMDB will disable the OS filesystem readahead mechanism, which may improve random read performance when a database is larger than RAM. `writemap`: If ``True``, use a writeable memory map unless `readonly=True`. This is faster and uses fewer mallocs, but loses protection from application bugs like wild pointer writes and other bad updates into the database. Incompatible with nested transactions. Processes with and without `writemap` on the same environment do not cooperate well. `meminit`: If ``False`` LMDB will not zero-initialize buffers prior to writing them to disk. This improves performance but may cause old heap data to be written saved in the unused portion of the buffer. Do not use this option if your application manipulates confidential data (e.g. plaintext passwords) in memory. This option is only meaningful when `writemap=False`; new pages are always zero-initialized when `writemap=True`. `map_async`: When ``writemap=True``, use asynchronous flushes to disk. As with ``sync=False``, a system crash can then corrupt the database or lose the last transactions. Calling :py:meth:`sync` ensures on-disk database integrity until next commit. `max_readers`: Maximum number of simultaneous read transactions. Can only be set by the first process to open an environment, as it affects the size of the lock file and shared memory area. Attempts to simultaneously start more than this many *read* transactions will fail. `max_dbs`: Maximum number of databases available. If 0, assume environment will be used as a single database. `max_spare_txns`: Read-only transactions to cache after becoming unused. Caching transactions avoids two allocations, one lock and linear scan of the shared environment per invocation of :py:meth:`begin`, :py:class:`Transaction`, :py:meth:`get`, :py:meth:`gets`, or :py:meth:`cursor`. Should match the process's maximum expected concurrent transactions (e.g. thread count). `lock`: If ``False``, don't do any locking. If concurrent access is anticipated, the caller must manage all concurrency itself. For proper operation the caller must enforce single-writer semantics, and must ensure that no readers are using old transactions while a writer is active. The simplest approach is to use an exclusive lock so that no readers may be active at all when a writer begins. """ def __init__(self, path, map_size=10485760, subdir=True, readonly=False, metasync=True, sync=True, map_async=False, mode=O_0755, create=True, readahead=True, writemap=False, meminit=True, max_readers=126, max_dbs=0, max_spare_txns=1, lock=True): self._max_spare_txns = max_spare_txns self._spare_txns = [] envpp = _ffi.new('MDB_env **') rc = _lib.mdb_env_create(envpp) if rc: raise _error("mdb_env_create", rc) self._env = envpp[0] self._deps = set() self._creating_db_in_readonly = False self.set_mapsize(map_size) rc = _lib.mdb_env_set_maxreaders(self._env, max_readers) if rc: raise _error("mdb_env_set_maxreaders", rc) rc = _lib.mdb_env_set_maxdbs(self._env, max_dbs) if rc: raise _error("mdb_env_set_maxdbs", rc) if create and subdir and not readonly: try: os.mkdir(path, mode) except EnvironmentError as e: if e.errno != errno.EEXIST: raise flags = _lib.MDB_NOTLS if not subdir: flags |= _lib.MDB_NOSUBDIR if readonly: flags |= _lib.MDB_RDONLY self.readonly = readonly if not metasync: flags |= _lib.MDB_NOMETASYNC if not sync: flags |= _lib.MDB_NOSYNC if map_async: flags |= _lib.MDB_MAPASYNC if not readahead: flags |= _lib.MDB_NORDAHEAD if writemap: flags |= _lib.MDB_WRITEMAP if not meminit: flags |= _lib.MDB_NOMEMINIT if not lock: flags |= _lib.MDB_NOLOCK if isinstance(path, UnicodeType): path = path.encode(sys.getfilesystemencoding()) rc = _lib.mdb_env_open(self._env, path, flags, mode & ~O_0111) if rc: raise _error(path, rc) with self.begin(db=object()) as txn: self._db = _Database( env=self, txn=txn, name=None, reverse_key=False, dupsort=False, create=True, integerkey=False, integerdup=False, dupfixed=False ) self._dbs = {None: self._db} def __enter__(self): return self def __exit__(self, _1, _2, _3): self.close() def __del__(self): self.close() _env = None _deps = None _spare_txns = None _dbs = None def set_mapsize(self, map_size): """Change the maximum size of the map file. This function will fail if any transactions are active in the current process. `map_size`: The new size in bytes. Equivalent to `mdb_env_set_mapsize() `_ Warning: There's a data race in the underlying library that may cause catastrophic loss of data if you use this method. You are safe if one of the following are true: * Only one process accessing a particular LMDB file ever calls this method. * You use locking external to this library to ensure that only one process accessing the current LMDB file can be inside this function. """ rc = _lib.mdb_env_set_mapsize(self._env, map_size) if rc: raise _error("mdb_env_set_mapsize", rc) def close(self): """Close the environment, invalidating any open iterators, cursors, and transactions. Repeat calls to :py:meth:`close` have no effect. Equivalent to `mdb_env_close() `_ """ if self._env: if self._deps: while self._deps: self._deps.pop()._invalidate() self._deps = None if self._spare_txns: while self._spare_txns: _lib.mdb_txn_abort(self._spare_txns.pop()) self._spare_txns = None if self._dbs: self._dbs.clear() self._dbs = None self._db = None _lib.mdb_env_close(self._env) self._env = _invalid def path(self): """Directory path or file name prefix where this environment is stored. Equivalent to `mdb_env_get_path() `_ """ path = _ffi.new('char **') rc = _lib.mdb_env_get_path(self._env, path) if rc: raise _error("mdb_env_get_path", rc) return _ffi.string(path[0]).decode(sys.getfilesystemencoding()) def copy(self, path, compact=False, txn=None): """Make a consistent copy of the environment in the given destination directory. `compact`: If ``True``, perform compaction while copying: omit free pages and sequentially renumber all pages in output. This option consumes more CPU and runs more slowly than the default, but may produce a smaller output database. `txn`: If provided, the backup will be taken from the database with respect to that transaction, otherwise a temporary read-only transaction will be created. Note: this parameter being non-None is not available if the module was built with LMDB_PURE. Note: this parameter may be set only if compact=True. Equivalent to `mdb_env_copy2() or mdb_env_copy3() `_ """ flags = _lib.MDB_CP_COMPACT if compact else 0 if txn and not _have_patched_lmdb: raise TypeError("Non-patched LMDB doesn't support transaction with env.copy") if txn and not flags: raise TypeError("txn argument only compatible with compact=True") encoded = path.encode(sys.getfilesystemencoding()) if _have_patched_lmdb: rc = _lib.mdb_env_copy3(self._env, encoded, flags, txn._txn if txn else _ffi.NULL) if rc: raise _error("mdb_env_copy3", rc) else: rc = _lib.mdb_env_copy2(self._env, encoded, flags) if rc: raise _error("mdb_env_copy2", rc) def copyfd(self, fd, compact=False, txn=None): """Copy a consistent version of the environment to file descriptor `fd`. `compact`: If ``True``, perform compaction while copying: omit free pages and sequentially renumber all pages in output. This option consumes more CPU and runs more slowly than the default, but may produce a smaller output database. `txn`: If provided, the backup will be taken from the database with respect to that transaction, otherwise a temporary read-only transaction will be created. Note: this parameter being non-None is not available if the module was built with LMDB_PURE. Equivalent to `mdb_env_copyfd2() or mdb_env_copyfd3 `_ """ if txn and not _have_patched_lmdb: raise TypeError("Non-patched LMDB doesn't support transaction with env.copy") if is_win32: # Convert C library handle to kernel handle. fd = msvcrt.get_osfhandle(fd) flags = _lib.MDB_CP_COMPACT if compact else 0 if txn and not flags: raise TypeError("txn argument only compatible with compact=True") if _have_patched_lmdb: rc = _lib.mdb_env_copyfd3(self._env, fd, flags, txn._txn if txn else _ffi.NULL) if rc: raise _error("mdb_env_copyfd3", rc) else: rc = _lib.mdb_env_copyfd2(self._env, fd, flags) if rc: raise _error("mdb_env_copyfd2", rc) def sync(self, force=False): """Flush the data buffers to disk. Equivalent to `mdb_env_sync() `_ Data is always written to disk when :py:meth:`Transaction.commit` is called, but the operating system may keep it buffered. MDB always flushes the OS buffers upon commit as well, unless the environment was opened with `sync=False` or `metasync=False`. `force`: If ``True``, force a synchronous flush. Otherwise if the environment was opened with `sync=False` the flushes will be omitted, and with `map_async=True` they will be asynchronous. """ rc = _lib.mdb_env_sync(self._env, force) if rc: raise _error("mdb_env_sync", rc) def _convert_stat(self, st): """Convert a MDB_stat to a dict. """ return { "psize": st.ms_psize, "depth": st.ms_depth, "branch_pages": st.ms_branch_pages, "leaf_pages": st.ms_leaf_pages, "overflow_pages": st.ms_overflow_pages, "entries": st.ms_entries } def stat(self): """stat() Return some environment statistics for the default database as a dict: +--------------------+---------------------------------------+ | ``psize`` | Size of a database page in bytes. | +--------------------+---------------------------------------+ | ``depth`` | Height of the B-tree. | +--------------------+---------------------------------------+ | ``branch_pages`` | Number of internal (non-leaf) pages. | +--------------------+---------------------------------------+ | ``leaf_pages`` | Number of leaf pages. | +--------------------+---------------------------------------+ | ``overflow_pages`` | Number of overflow pages. | +--------------------+---------------------------------------+ | ``entries`` | Number of data items. | +--------------------+---------------------------------------+ Equivalent to `mdb_env_stat() `_ """ st = _ffi.new('MDB_stat *') rc = _lib.mdb_env_stat(self._env, st) if rc: raise _error("mdb_env_stat", rc) return self._convert_stat(st) def info(self): """Return some nice environment information as a dict: +--------------------+---------------------------------------------+ | ``map_addr`` | Address of database map in RAM. | +--------------------+---------------------------------------------+ | ``map_size`` | Size of database map in RAM. | +--------------------+---------------------------------------------+ | ``last_pgno`` | ID of last used page. | +--------------------+---------------------------------------------+ | ``last_txnid`` | ID of last committed transaction. | +--------------------+---------------------------------------------+ | ``max_readers`` | Number of reader slots allocated in the | | | lock file. Equivalent to the value of | | | `maxreaders=` specified by the first | | | process opening the Environment. | +--------------------+---------------------------------------------+ | ``num_readers`` | Maximum number of reader slots in | | | simultaneous use since the lock file was | | | initialized. | +--------------------+---------------------------------------------+ Equivalent to `mdb_env_info() `_ """ info = _ffi.new('MDB_envinfo *') rc = _lib.mdb_env_info(self._env, info) if rc: raise _error("mdb_env_info", rc) return { "map_addr": int(_ffi.cast('long', info.me_mapaddr)), "map_size": info.me_mapsize, "last_pgno": info.me_last_pgno, "last_txnid": info.me_last_txnid, "max_readers": info.me_maxreaders, "num_readers": info.me_numreaders } def flags(self): """Return a dict describing Environment constructor flags used to instantiate this environment.""" flags_ = _ffi.new('unsigned int[]', 1) rc = _lib.mdb_env_get_flags(self._env, flags_) if rc: raise _error("mdb_env_get_flags", rc) flags = flags_[0] return { 'subdir': not (flags & _lib.MDB_NOSUBDIR), 'readonly': bool(flags & _lib.MDB_RDONLY), 'metasync': not (flags & _lib.MDB_NOMETASYNC), 'sync': not (flags & _lib.MDB_NOSYNC), 'map_async': bool(flags & _lib.MDB_MAPASYNC), 'readahead': not (flags & _lib.MDB_NORDAHEAD), 'writemap': bool(flags & _lib.MDB_WRITEMAP), 'meminit': not (flags & _lib.MDB_NOMEMINIT), 'lock': not (flags & _lib.MDB_NOLOCK), } def max_key_size(self): """Return the maximum size in bytes of a record's key part. This matches the ``MDB_MAXKEYSIZE`` constant set at compile time.""" return _lib.mdb_env_get_maxkeysize(self._env) def max_readers(self): """Return the maximum number of readers specified during open of the environment by the first process. This is the same as `max_readers=` specified to the constructor if this process was the first to open the environment.""" readers_ = _ffi.new('unsigned int[]', 1) rc = _lib.mdb_env_get_maxreaders(self._env, readers_) if rc: raise _error("mdb_env_get_maxreaders", rc) return readers_[0] def readers(self): """Return a multi line Unicode string describing the current state of the reader lock table.""" _callbacks.msg_func = [] try: rc = _lib.mdb_reader_list(self._env, _msg_func, _ffi.NULL) if rc: raise _error("mdb_reader_list", rc) return UnicodeType().join(_callbacks.msg_func) finally: del _callbacks.msg_func def reader_check(self): """Search the reader lock table for stale entries, for example due to a crashed process. Returns the number of stale entries that were cleared. """ reaped = _ffi.new('int[]', 1) rc = _lib.mdb_reader_check(self._env, reaped) if rc: raise _error('mdb_reader_check', rc) return reaped[0] def open_db(self, key=None, txn=None, reverse_key=False, dupsort=False, create=True, integerkey=False, integerdup=False, dupfixed=False): """ Open a database, returning an instance of :py:class:`_Database`. Repeat :py:meth:`Environment.open_db` calls for the same name will return the same handle. As a special case, the main database is always open. Equivalent to `mdb_dbi_open() `_ Named databases are implemented by *storing a special descriptor in the main database*. All databases in an environment *share the same file*. Because the descriptor is present in the main database, attempts to create a named database will fail if a key matching the database's name already exists. Furthermore *the key is visible to lookups and enumerations*. If your main database keyspace conflicts with the names you use for named databases, then move the contents of your main database to another named database. :: >>> env = lmdb.open('/tmp/test', max_dbs=2) >>> with env.begin(write=True) as txn: ... txn.put('somename', 'somedata') >>> # Error: database cannot share name of existing key! >>> subdb = env.open_db('somename') A newly created database will not exist if the transaction that created it aborted, nor if another process deleted it. The handle resides in the shared environment, it is not owned by the current transaction or process. Only one thread should call this function; it is not mutex-protected in a read-only transaction. The `dupsort`, `integerkey`, `integerdup`, and `dupfixed` parameters are ignored if the database already exists. The state of those settings are persistent and immutable per database. See :py:meth:`_Database.flags` to view the state of those options for an opened database. A consequence of the immutability of these flags is that the default non-named database will never have these flags set. Preexisting transactions, other than the current transaction and any parents, must not use the new handle, nor must their children. `key`: Bytestring database name. If ``None``, indicates the main database should be returned, otherwise indicates a named database should be created inside the main database. In other words, *a key representing the database will be visible in the main database, and the database name cannot conflict with any existing key.* `txn`: Transaction used to create the database if it does not exist. If unspecified, a temporarily write transaction is used. Do not call :py:meth:`open_db` from inside an existing transaction without supplying it here. Note the passed transaction must have `write=True`. `reverse_key`: If ``True``, keys are compared from right to left (e.g. DNS names). `dupsort`: Duplicate keys may be used in the database. (Or, from another perspective, keys may have multiple data items, stored in sorted order.) By default keys must be unique and may have only a single data item. `create`: If ``True``, create the database if it doesn't exist, otherwise raise an exception. `integerkey`: If ``True``, indicates keys in the database are C unsigned or ``size_t`` integers encoded in native byte order. Keys must all be either unsigned or ``size_t``, they cannot be mixed in a single database. `integerdup`: If ``True``, values in the database are C unsigned or ``size_t`` integers encoded in native byte order. Implies `dupsort` and `dupfixed` are ``True``. `dupfixed`: If ``True``, values for each key in database are of fixed size, allowing each additional duplicate value for a key to be stored without a header indicating its size. Implies `dupsort` is ``True``. """ if isinstance(key, UnicodeType): raise TypeError('key must be bytes') if key is None and (reverse_key or dupsort or integerkey or integerdup or dupfixed): raise ValueError('May not set flags on the main database') db = self._dbs.get(key) if db: return db if integerdup: dupfixed = True if dupfixed: dupsort = True if txn: db = _Database(self, txn, key, reverse_key, dupsort, create, integerkey, integerdup, dupfixed) else: try: self._creating_db_in_readonly = True with self.begin(write=not self.readonly) as txn: db = _Database(self, txn, key, reverse_key, dupsort, create, integerkey, integerdup, dupfixed) finally: self._creating_db_in_readonly = False self._dbs[key] = db return db def begin(self, db=None, parent=None, write=False, buffers=False): """Shortcut for :py:class:`lmdb.Transaction`""" return Transaction(self, db, parent, write, buffers) class _Database(object): """ Internal database handle. This class is opaque, save a single method. Should not be constructed directly. Use :py:meth:`Environment.open_db` instead. """ def __init__(self, env, txn, name, reverse_key, dupsort, create, integerkey, integerdup, dupfixed): env._deps.add(self) self._deps = set() self._name = name flags = 0 if reverse_key: flags |= _lib.MDB_REVERSEKEY if dupsort: flags |= _lib.MDB_DUPSORT if create: flags |= _lib.MDB_CREATE if integerkey: flags |= _lib.MDB_INTEGERKEY if integerdup: flags |= _lib.MDB_INTEGERDUP if dupfixed: flags |= _lib.MDB_DUPFIXED dbipp = _ffi.new('MDB_dbi *') self._dbi = None rc = _lib.mdb_dbi_open(txn._txn, name or _ffi.NULL, flags, dbipp) if rc: raise _error("mdb_dbi_open", rc) self._dbi = dbipp[0] self._load_flags(txn) def _load_flags(self, txn): """Load MDB's notion of the database flags.""" flags_ = _ffi.new('unsigned int[]', 1) rc = _lib.mdb_dbi_flags(txn._txn, self._dbi, flags_) if rc: raise _error("mdb_dbi_flags", rc) self._flags = flags_[0] def flags(self, *args): """Return the database's associated flags as a dict of _Database constructor kwargs.""" if len(args) > 1: raise TypeError('flags takes 0 or 1 arguments') return { 'reverse_key': bool(self._flags & _lib.MDB_REVERSEKEY), 'dupsort': bool(self._flags & _lib.MDB_DUPSORT), 'integerkey': bool(self._flags & _lib.MDB_INTEGERKEY), 'integerdup': bool(self._flags & _lib.MDB_INTEGERDUP), 'dupfixed': bool(self._flags & _lib.MDB_DUPFIXED), } def _invalidate(self): self._dbi = _invalid open = Environment class Transaction(object): """ A transaction object. All operations require a transaction handle, transactions may be read-only or read-write. Write transactions may not span threads. Transaction objects implement the context manager protocol, so that reliable release of the transaction happens even in the face of unhandled exceptions: .. code-block:: python # Transaction aborts correctly: with env.begin(write=True) as txn: crash() # Transaction commits automatically: with env.begin(write=True) as txn: txn.put('a', 'b') Equivalent to `mdb_txn_begin() `_ `env`: Environment the transaction should be on. `db`: Default named database to operate on. If unspecified, defaults to the environment's main database. Can be overridden on a per-call basis below. `parent`: ``None``, or a parent transaction (see lmdb.h). `write`: Transactions are read-only by default. To modify the database, you must pass `write=True`. This flag is ignored if :py:class:`Environment` was opened with ``readonly=True``. `buffers`: If ``True``, indicates :py:func:`buffer` objects should be yielded instead of bytestrings. This setting applies to the :py:class:`Transaction` instance itself and any :py:class:`Cursors ` created within the transaction. This feature significantly improves performance, since MDB has a zero-copy design, but it requires care when manipulating the returned buffer objects. The benefit of this facility is diminished when using small keys and values. """ # If constructor fails, then __del__ will attempt to access these # attributes. _env = _invalid _txn = _invalid _parent = None _write = False # Mutations occurred since transaction start. Required to know when Cursor # key/value must be refreshed. _mutations = 0 def __init__(self, env, db=None, parent=None, write=False, buffers=False): env._deps.add(self) self.env = env # hold ref self._db = db or env._db self._env = env._env self._key = _ffi.new('MDB_val *') self._val = _ffi.new('MDB_val *') self._to_py = _mvbuf if buffers else _mvstr self._deps = set() if parent: self._parent = parent parent_txn = parent._txn parent._deps.add(self) else: parent_txn = _ffi.NULL if write: if env.readonly: msg = 'Cannot start write transaction with read-only env' raise _error(msg, _lib.EACCES) txnpp = _ffi.new('MDB_txn **') rc = _lib.mdb_txn_begin(self._env, parent_txn, 0, txnpp) if rc: raise _error("mdb_txn_begin", rc) self._txn = txnpp[0] self._write = True else: try: # Exception catch in order to avoid racy 'if txns:' test if env._creating_db_in_readonly: # Don't use spare txns for creating a DB when read-only raise IndexError self._txn = env._spare_txns.pop() env._max_spare_txns += 1 rc = _lib.mdb_txn_renew(self._txn) if rc: while self._deps: self._deps.pop()._invalidate() _lib.mdb_txn_abort(self._txn) self._txn = _invalid self._invalidate() raise _error("mdb_txn_renew", rc) except IndexError: txnpp = _ffi.new('MDB_txn **') flags = _lib.MDB_RDONLY rc = _lib.mdb_txn_begin(self._env, parent_txn, flags, txnpp) if rc: raise _error("mdb_txn_begin", rc) self._txn = txnpp[0] def _invalidate(self): if self._txn: self.abort() self.env._deps.discard(self) self._parent = None self._env = _invalid def __del__(self): self.abort() def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): if exc_type: self.abort() else: self.commit() def id(self): """id() Return the transaction's ID. This returns the identifier associated with this transaction. For a read-only transaction, this corresponds to the snapshot being read; concurrent readers will frequently have the same transaction ID. """ return _lib.mdb_txn_id(self._txn) def stat(self, db): """stat(db) Return statistics like :py:meth:`Environment.stat`, except for a single DBI. `db` must be a database handle returned by :py:meth:`open_db`. """ st = _ffi.new('MDB_stat *') rc = _lib.mdb_stat(self._txn, db._dbi, st) if rc: raise _error('mdb_stat', rc) return self.env._convert_stat(st) def drop(self, db, delete=True): """Delete all keys in a named database and optionally delete the named database itself. Deleting the named database causes it to become unavailable, and invalidates existing cursors. Equivalent to `mdb_drop() `_ """ while db._deps: db._deps.pop()._invalidate() rc = _lib.mdb_drop(self._txn, db._dbi, delete) self._mutations += 1 if rc: raise _error("mdb_drop", rc) if db._name in self.env._dbs: del self.env._dbs[db._name] def _cache_spare(self): # In order to avoid taking and maintaining a lock, a race is allowed # below which may result in more spare txns than desired. It seems # unlikely the race could ever result in a large amount of spare txns, # and in any case a correctly configured program should not be opening # more read-only transactions than there are configured spares. if self.env._max_spare_txns > 0: _lib.mdb_txn_reset(self._txn) self.env._spare_txns.append(self._txn) self.env._max_spare_txns -= 1 self._txn = _invalid self._invalidate() return True return False def commit(self): """Commit the pending transaction. Equivalent to `mdb_txn_commit() `_ """ while self._deps: self._deps.pop()._invalidate() if self._write or not self._cache_spare(): rc = _lib.mdb_txn_commit(self._txn) self._txn = _invalid if rc: raise _error("mdb_txn_commit", rc) self._invalidate() def abort(self): """Abort the pending transaction. Repeat calls to :py:meth:`abort` have no effect after a previously successful :py:meth:`commit` or :py:meth:`abort`, or after the associated :py:class:`Environment` has been closed. Equivalent to `mdb_txn_abort() `_ """ if self._txn: while self._deps: self._deps.pop()._invalidate() if self._write or not self._cache_spare(): rc = _lib.mdb_txn_abort(self._txn) self._txn = _invalid if rc: raise _error("mdb_txn_abort", rc) self._invalidate() def get(self, key, default=None, db=None): """Fetch the first value matching `key`, returning `default` if `key` does not exist. A cursor must be used to fetch all values for a key in a `dupsort=True` database. Equivalent to `mdb_get() `_ """ rc = _lib.pymdb_get(self._txn, (db or self._db)._dbi, key, len(key), self._val) if rc: if rc == _lib.MDB_NOTFOUND: return default raise _error("mdb_cursor_get", rc) preload(self._val) return self._to_py(self._val) def put(self, key, value, dupdata=True, overwrite=True, append=False, db=None): """Store a record, returning ``True`` if it was written, or ``False`` to indicate the key was already present and `overwrite=False`. On success, the cursor is positioned on the new record. Equivalent to `mdb_put() `_ `key`: Bytestring key to store. `value`: Bytestring value to store. `dupdata`: If ``False`` and database was opened with `dupsort=True`, will return ``False`` if the key already has that value. In other words, this only affects the return value. `overwrite`: If ``False``, do not overwrite any existing matching key. If False and writing to a dupsort=True database, this will not add a value to the key and this function will return ``False``. `append`: If ``True``, append the pair to the end of the database without comparing its order first. Appending a key that is not greater than the highest existing key will fail and return ``False``. `db`: Named database to operate on. If unspecified, defaults to the database given to the :py:class:`Transaction` constructor. """ flags = 0 if not dupdata: flags |= _lib.MDB_NODUPDATA if not overwrite: flags |= _lib.MDB_NOOVERWRITE if append: flags |= _lib.MDB_APPEND rc = _lib.pymdb_put(self._txn, (db or self._db)._dbi, key, len(key), value, len(value), flags) self._mutations += 1 if rc: if rc == _lib.MDB_KEYEXIST: return False raise _error("mdb_put", rc) return True def replace(self, key, value, db=None): """Use a temporary cursor to invoke :py:meth:`Cursor.replace`. `db`: Named database to operate on. If unspecified, defaults to the database given to the :py:class:`Transaction` constructor. """ with Cursor(db or self._db, self) as curs: return curs.replace(key, value) def pop(self, key, db=None): """Use a temporary cursor to invoke :py:meth:`Cursor.pop`. `db`: Named database to operate on. If unspecified, defaults to the database given to the :py:class:`Transaction` constructor. """ with Cursor(db or self._db, self) as curs: return curs.pop(key) def delete(self, key, value=EMPTY_BYTES, db=None): """Delete a key from the database. Equivalent to `mdb_del() `_ `key`: The key to delete. value: If the database was opened with dupsort=True and value is not the empty bytestring, then delete elements matching only this `(key, value)` pair, otherwise all values for key are deleted. Returns True if at least one key was deleted. """ if value is None: # for bug-compatibility with cpython impl value = EMPTY_BYTES rc = _lib.pymdb_del(self._txn, (db or self._db)._dbi, key, len(key), value, len(value)) self._mutations += 1 if rc: if rc == _lib.MDB_NOTFOUND: return False raise _error("mdb_del", rc) return True def cursor(self, db=None): """Shortcut for ``lmdb.Cursor(db, self)``""" return Cursor(db or self._db, self) class Cursor(object): """ Structure for navigating a database. Equivalent to `mdb_cursor_open() `_ `db`: :py:class:`_Database` to navigate. `txn`: :py:class:`Transaction` to navigate. As a convenience, :py:meth:`Transaction.cursor` can be used to quickly return a cursor: :: >>> env = lmdb.open('/tmp/foo') >>> child_db = env.open_db('child_db') >>> with env.begin() as txn: ... cursor = txn.cursor() # Cursor on main database. ... cursor2 = txn.cursor(child_db) # Cursor on child database. Cursors start in an unpositioned state. If :py:meth:`iternext` or :py:meth:`iterprev` are used in this state, iteration proceeds from the start or end respectively. Iterators directly position using the cursor, meaning strange behavior results when multiple iterators exist on the same cursor. .. note:: From the perspective of the Python binding, cursors return to an 'unpositioned' state once any scanning or seeking method (e.g. :py:meth:`next`, :py:meth:`prev_nodup`, :py:meth:`set_range`) returns ``False`` or raises an exception. This is primarily to ensure safe, consistent semantics in the face of any error condition. When the Cursor returns to an unpositioned state, its :py:meth:`key` and :py:meth:`value` return empty strings to indicate there is no active position, although internally the LMDB cursor may still have a valid position. This may lead to slightly surprising behaviour when iterating the values for a `dupsort=True` database's keys, since methods such as :py:meth:`iternext_dup` will cause Cursor to appear unpositioned, despite it returning ``False`` only to indicate there are no more values for the current key. In that case, simply calling :py:meth:`next` would cause iteration to resume at the next available key. This behaviour may change in future. Iterator methods such as :py:meth:`iternext` and :py:meth:`iterprev` accept `keys` and `values` arguments. If both are ``True``, then the value of :py:meth:`item` is yielded on each iteration. If only `keys` is ``True``, :py:meth:`key` is yielded, otherwise only :py:meth:`value` is yielded. Prior to iteration, a cursor can be positioned anywhere in the database: :: >>> with env.begin() as txn: ... cursor = txn.cursor() ... if not cursor.set_range('5'): # Position at first key >= '5'. ... print('Not found!') ... else: ... for key, value in cursor: # Iterate from first key >= '5'. ... print((key, value)) Iteration is not required to navigate, and sometimes results in ugly or inefficient code. In cases where the iteration order is not obvious, or is related to the data being read, use of :py:meth:`set_key`, :py:meth:`set_range`, :py:meth:`key`, :py:meth:`value`, and :py:meth:`item` may be preferable: :: >>> # Record the path from a child to the root of a tree. >>> path = ['child14123'] >>> while path[-1] != 'root': ... assert cursor.set_key(path[-1]), \\ ... 'Tree is broken! Path: %s' % (path,) ... path.append(cursor.value()) """ def __init__(self, db, txn): db._deps.add(self) txn._deps.add(self) self.db = db # hold ref self.txn = txn # hold ref self._dbi = db._dbi self._txn = txn._txn self._key = _ffi.new('MDB_val *') self._val = _ffi.new('MDB_val *') self._valid = False self._to_py = txn._to_py curpp = _ffi.new('MDB_cursor **') self._cur = None rc = _lib.mdb_cursor_open(self._txn, self._dbi, curpp) if rc: raise _error("mdb_cursor_open", rc) self._cur = curpp[0] # If Transaction.mutations!=last_mutation, must MDB_GET_CURRENT to # refresh `key' and `val'. self._last_mutation = txn._mutations def _invalidate(self): if self._cur: _lib.mdb_cursor_close(self._cur) self.db._deps.discard(self) self.txn._deps.discard(self) self._cur = _invalid self._dbi = _invalid self._txn = _invalid def __del__(self): self._invalidate() def close(self): """Close the cursor, freeing its associated resources.""" self._invalidate() def __enter__(self): return self def __exit__(self, _1, _2, _3): self._invalidate() def key(self): """Return the current key.""" # Must refresh `key` and `val` following mutation. if self._last_mutation != self.txn._mutations: self._cursor_get(_lib.MDB_GET_CURRENT) return self._to_py(self._key) def value(self): """Return the current value.""" # Must refresh `key` and `val` following mutation. if self._last_mutation != self.txn._mutations: self._cursor_get(_lib.MDB_GET_CURRENT) preload(self._val) return self._to_py(self._val) def item(self): """Return the current `(key, value)` pair.""" # Must refresh `key` and `val` following mutation. if self._last_mutation != self.txn._mutations: self._cursor_get(_lib.MDB_GET_CURRENT) preload(self._val) return self._to_py(self._key), self._to_py(self._val) def _iter(self, op, keys, values): if not values: get = self.key elif not keys: get = self.value else: get = self.item cur = self._cur key = self._key val = self._val rc = 0 while self._valid: yield get() rc = _lib.mdb_cursor_get(cur, key, val, op) self._valid = not rc if rc: self._key.mv_size = 0 self._val.mv_size = 0 if rc != _lib.MDB_NOTFOUND: raise _error("mdb_cursor_get", rc) def iternext(self, keys=True, values=True): """Return a forward iterator that yields the current element before calling :py:meth:`next`, repeating until the end of the database is reached. As a convenience, :py:class:`Cursor` implements the iterator protocol by automatically returning a forward iterator when invoked: :: >>> # Equivalent: >>> it = iter(cursor) >>> it = cursor.iternext(keys=True, values=True) If the cursor is not yet positioned, it is moved to the first key in the database, otherwise iteration proceeds from the current position. """ if not self._valid: self.first() return self._iter(_lib.MDB_NEXT, keys, values) __iter__ = iternext def iternext_dup(self, keys=False, values=True): """Return a forward iterator that yields the current value ("duplicate") of the current key before calling :py:meth:`next_dup`, repeating until the last value of the current key is reached. Only meaningful for databases opened with `dupsort=True`. .. code-block:: python if not cursor.set_key("foo"): print("No values found for 'foo'") else: for idx, data in enumerate(cursor.iternext_dup()): print("%d'th value for 'foo': %s" % (idx, data)) """ return self._iter(_lib.MDB_NEXT_DUP, keys, values) def iternext_nodup(self, keys=True, values=False): """Return a forward iterator that yields the current value ("duplicate") of the current key before calling :py:meth:`next_nodup`, repeating until the end of the database is reached. Only meaningful for databases opened with `dupsort=True`. If the cursor is not yet positioned, it is moved to the first key in the database, otherwise iteration proceeds from the current position. .. code-block:: python for key in cursor.iternext_nodup(): print("Key '%s' has %d values" % (key, cursor.count())) """ if not self._valid: self.first() return self._iter(_lib.MDB_NEXT_NODUP, keys, values) def iterprev(self, keys=True, values=True): """Return a reverse iterator that yields the current element before calling :py:meth:`prev`, until the start of the database is reached. If the cursor is not yet positioned, it is moved to the last key in the database, otherwise iteration proceeds from the current position. :: >>> with env.begin() as txn: ... for i, (key, value) in enumerate(txn.cursor().iterprev()): ... print('%dth last item is (%r, %r)' % (1+i, key, value)) """ if not self._valid: self.last() return self._iter(_lib.MDB_PREV, keys, values) def iterprev_dup(self, keys=False, values=True): """Return a reverse iterator that yields the current value ("duplicate") of the current key before calling :py:meth:`prev_dup`, repeating until the first value of the current key is reached. Only meaningful for databases opened with `dupsort=True`. """ return self._iter(_lib.MDB_PREV_DUP, keys, values) def iterprev_nodup(self, keys=True, values=False): """Return a reverse iterator that yields the current value ("duplicate") of the current key before calling :py:meth:`prev_nodup`, repeating until the start of the database is reached. If the cursor is not yet positioned, it is moved to the last key in the database, otherwise iteration proceeds from the current position. Only meaningful for databases opened with `dupsort=True`. """ if not self._valid: self.last() return self._iter(_lib.MDB_PREV_NODUP, keys, values) def _cursor_get(self, op): rc = _lib.mdb_cursor_get(self._cur, self._key, self._val, op) self._valid = v = not rc self._last_mutation = self.txn._mutations if rc: self._key.mv_size = 0 self._val.mv_size = 0 if rc != _lib.MDB_NOTFOUND: if not (rc == _lib.EINVAL and op == _lib.MDB_GET_CURRENT): raise _error("mdb_cursor_get", rc) return v def _cursor_get_kv(self, op, k, v): rc = _lib.pymdb_cursor_get(self._cur, k, len(k), v, len(v), self._key, self._val, op) self._valid = v = not rc if rc: self._key.mv_size = 0 self._val.mv_size = 0 if rc != _lib.MDB_NOTFOUND: if not (rc == _lib.EINVAL and op == _lib.MDB_GET_CURRENT): raise _error("mdb_cursor_get", rc) return v def first(self): """Move to the first key in the database, returning ``True`` on success or ``False`` if the database is empty. If the database was opened with `dupsort=True` and the key contains duplicates, the cursor is positioned on the first value ("duplicate"). Equivalent to `mdb_cursor_get() `_ with `MDB_FIRST `_ """ return self._cursor_get(_lib.MDB_FIRST) def first_dup(self): """Move to the first value ("duplicate") for the current key, returning ``True`` on success or ``False`` if the database is empty. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_FIRST_DUP `_ """ return self._cursor_get(_lib.MDB_FIRST_DUP) def last(self): """Move to the last key in the database, returning ``True`` on success or ``False`` if the database is empty. If the database was opened with `dupsort=True` and the key contains duplicates, the cursor is positioned on the last value ("duplicate"). Equivalent to `mdb_cursor_get() `_ with `MDB_LAST `_ """ return self._cursor_get(_lib.MDB_LAST) def last_dup(self): """Move to the last value ("duplicate") for the current key, returning ``True`` on success or ``False`` if the database is empty. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_LAST_DUP `_ """ return self._cursor_get(_lib.MDB_LAST_DUP) def prev(self): """Move to the previous element, returning ``True`` on success or ``False`` if there is no previous item. For databases opened with `dupsort=True`, moves to the previous data item ("duplicate") for the current key if one exists, otherwise moves to the previous key. Equivalent to `mdb_cursor_get() `_ with `MDB_PREV `_ """ return self._cursor_get(_lib.MDB_PREV) def prev_dup(self): """Move to the previous value ("duplicate") of the current key, returning ``True`` on success or ``False`` if there is no previous value. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_PREV_DUP `_ """ return self._cursor_get(_lib.MDB_PREV_DUP) def prev_nodup(self): """Move to the last value ("duplicate") of the previous key, returning ``True`` on success or ``False`` if there is no previous key. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_PREV_NODUP `_ """ return self._cursor_get(_lib.MDB_PREV_NODUP) def next(self): """Move to the next element, returning ``True`` on success or ``False`` if there is no next element. For databases opened with `dupsort=True`, moves to the next value ("duplicate") for the current key if one exists, otherwise moves to the first value of the next key. Equivalent to `mdb_cursor_get() `_ with `MDB_NEXT `_ """ return self._cursor_get(_lib.MDB_NEXT) def next_dup(self): """Move to the next value ("duplicate") of the current key, returning ``True`` on success or ``False`` if there is no next value. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_NEXT_DUP `_ """ return self._cursor_get(_lib.MDB_NEXT_DUP) def next_nodup(self): """Move to the first value ("duplicate") of the next key, returning ``True`` on success or ``False`` if there is no next key. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_NEXT_NODUP `_ """ return self._cursor_get(_lib.MDB_NEXT_NODUP) def set_key(self, key): """Seek exactly to `key`, returning ``True`` on success or ``False`` if the exact key was not found. It is an error to :py:meth:`set_key` the empty bytestring. For databases opened with `dupsort=True`, moves to the first value ("duplicate") for the key. Equivalent to `mdb_cursor_get() `_ with `MDB_SET_KEY `_ """ return self._cursor_get_kv(_lib.MDB_SET_KEY, key, EMPTY_BYTES) def set_key_dup(self, key, value): """Seek exactly to `(key, value)`, returning ``True`` on success or ``False`` if the exact key and value was not found. It is an error to :py:meth:`set_key` the empty bytestring. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_GET_BOTH `_ """ return self._cursor_get_kv(_lib.MDB_GET_BOTH, key, value) def get(self, key, default=None): """Equivalent to :py:meth:`set_key()`, except :py:meth:`value` is returned when `key` is found, otherwise `default`. """ if self._cursor_get_kv(_lib.MDB_SET_KEY, key, EMPTY_BYTES): return self.value() return default def getmulti(self, keys, dupdata=False, dupfixed_bytes=None, keyfixed=False): """Returns an iterable of `(key, value)` 2-tuples containing results for each key in the iterable `keys`. `keys`: Iterable to read keys from. `dupdata`: If ``True`` and database was opened with `dupsort=True`, read all duplicate values for each matching key. `dupfixed_bytes`: If database was opened with `dupsort=True` and `dupfixed=True`, accepts the size of each value, in bytes, and applies an optimization reducing the number of database lookups. `keyfixed`: If `dupfixed_bytes` is set and database key size is fixed, setting keyfixed=True will result in this function returning a memoryview to the results as a structured array of bytes. The structured array can be instantiated by passing the memoryview buffer to NumPy: .. code-block:: python key_bytes, val_bytes = 4, 8 dtype = np.dtype([(f'S{key_bytes}', f'S{val_bytes}}')]) arr = np.frombuffer( cur.getmulti(keys, dupdata=True, dupfixed_bytes=val_bytes, keyfixed=True) ) """ if dupfixed_bytes and dupfixed_bytes < 0: raise _error("dupfixed_bytes must be a positive integer.") elif (dupfixed_bytes or keyfixed) and not dupdata: raise _error("dupdata is required for dupfixed_bytes/key_bytes.") elif keyfixed and not dupfixed_bytes: raise _error("dupfixed_bytes is required for key_bytes.") if dupfixed_bytes: get_op = _lib.MDB_GET_MULTIPLE next_op = _lib.MDB_NEXT_MULTIPLE else: get_op = _lib.MDB_GET_CURRENT next_op = _lib.MDB_NEXT_DUP a = bytearray() lst = list() for key in keys: if self.set_key(key): while self._valid: self._cursor_get(get_op) preload(self._val) key = self._to_py(self._key) val = self._to_py(self._val) if dupfixed_bytes: gen = ( (key, val[i:i + dupfixed_bytes]) for i in range(0, len(val), dupfixed_bytes)) if keyfixed: for k, v in gen: a.extend(k + v) else: for k, v in gen: lst.append((k, v)) else: lst.append((key, val)) if dupdata: self._cursor_get(next_op) else: break if keyfixed: return memoryview(a) else: return lst def set_range(self, key): """Seek to the first key greater than or equal to `key`, returning ``True`` on success, or ``False`` to indicate key was past end of database. Behaves like :py:meth:`first` if `key` is the empty bytestring. For databases opened with `dupsort=True`, moves to the first value ("duplicate") for the key. Equivalent to `mdb_cursor_get() `_ with `MDB_SET_RANGE `_ """ if not key: return self.first() return self._cursor_get_kv(_lib.MDB_SET_RANGE, key, EMPTY_BYTES) def set_range_dup(self, key, value): """Seek to the first key/value pair greater than or equal to `key`, returning ``True`` on success, or ``False`` to indicate that `value` was past the last value of `key` or that `(key, value)` was past the end end of database. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_get() `_ with `MDB_GET_BOTH_RANGE `_ """ rc = self._cursor_get_kv(_lib.MDB_GET_BOTH_RANGE, key, value) # issue #126: MDB_GET_BOTH_RANGE does not satisfy its documentation, # and fails to update `key` and `value` on success. Therefore # explicitly call MDB_GET_CURRENT after MDB_GET_BOTH_RANGE. self._cursor_get(_lib.MDB_GET_CURRENT) return rc def delete(self, dupdata=False): """Delete the current element and move to the next, returning ``True`` on success or ``False`` if the database was empty. If `dupdata` is ``True``, delete all values ("duplicates") for the current key, otherwise delete only the currently positioned value. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_del() `_ """ v = self._valid if v: flags = _lib.MDB_NODUPDATA if dupdata else 0 rc = _lib.mdb_cursor_del(self._cur, flags) self.txn._mutations += 1 if rc: raise _error("mdb_cursor_del", rc) self._cursor_get(_lib.MDB_GET_CURRENT) v = rc == 0 return v def count(self): """Return the number of values ("duplicates") for the current key. Only meaningful for databases opened with `dupsort=True`. Equivalent to `mdb_cursor_count() `_ """ countp = _ffi.new('size_t *') rc = _lib.mdb_cursor_count(self._cur, countp) if rc: raise _error("mdb_cursor_count", rc) return countp[0] def put(self, key, val, dupdata=True, overwrite=True, append=False): """Store a record, returning ``True`` if it was written, or ``False`` to indicate the key was already present and `overwrite=False`. On success, the cursor is positioned on the key. Equivalent to `mdb_cursor_put() `_ `key`: Bytestring key to store. `val`: Bytestring value to store. `dupdata`: If ``False`` and database was opened with `dupsort=True`, will return ``False`` if the key already has that value. In other words, this only affects the return value. `overwrite`: If ``False``, do not overwrite the value for the key if it exists, just return ``False``. For databases opened with `dupsort=True`, ``False`` will always be returned if a duplicate key/value pair is inserted, regardless of the setting for `overwrite`. `append`: If ``True``, append the pair to the end of the database without comparing its order first. Appending a key that is not greater than the highest existing key will fail and return ``False``. """ flags = 0 if not dupdata: flags |= _lib.MDB_NODUPDATA if not overwrite: flags |= _lib.MDB_NOOVERWRITE if append: if self.txn._db._flags & _lib.MDB_DUPSORT: flags |= _lib.MDB_APPENDDUP else: flags |= _lib.MDB_APPEND rc = _lib.pymdb_cursor_put(self._cur, key, len(key), val, len(val), flags) self.txn._mutations += 1 if rc: if rc == _lib.MDB_KEYEXIST: return False raise _error("mdb_cursor_put", rc) self._cursor_get(_lib.MDB_GET_CURRENT) return True def putmulti(self, items, dupdata=True, overwrite=True, append=False): """Invoke :py:meth:`put` for each `(key, value)` 2-tuple from the iterable `items`. Elements must be exactly 2-tuples, they may not be of any other type, or tuple subclass. Returns a tuple `(consumed, added)`, where `consumed` is the number of elements read from the iterable, and `added` is the number of new entries added to the database. `added` may be less than `consumed` when `overwrite=False`. `items`: Iterable to read records from. `dupdata`: If ``True`` and database was opened with `dupsort=True`, add pair as a duplicate if the given key already exists. Otherwise overwrite any existing matching key. `overwrite`: If ``False``, do not overwrite the value for the key if it exists, just return ``False``. For databases opened with `dupsort=True`, ``False`` will always be returned if a duplicate key/value pair is inserted, regardless of the setting for `overwrite`. `append`: If ``True``, append records to the end of the database without comparing their order first. Appending a key that is not greater than the highest existing key will cause corruption. """ flags = 0 if not dupdata: flags |= _lib.MDB_NODUPDATA if not overwrite: flags |= _lib.MDB_NOOVERWRITE if append: if self.txn._db._flags & _lib.MDB_DUPSORT: flags |= _lib.MDB_APPENDDUP else: flags |= _lib.MDB_APPEND added = 0 skipped = 0 for key, value in items: rc = _lib.pymdb_cursor_put(self._cur, key, len(key), value, len(value), flags) self.txn._mutations += 1 added += 1 if rc: if rc == _lib.MDB_KEYEXIST: skipped += 1 else: raise _error("mdb_cursor_put", rc) self._cursor_get(_lib.MDB_GET_CURRENT) return added, added - skipped def replace(self, key, val): """Store a record, returning its previous value if one existed. Returns ``None`` if no previous value existed. This uses the best available mechanism to minimize the cost of a `set-and-return-previous` operation. For databases opened with `dupsort=True`, only the first data element ("duplicate") is returned if it existed, all data elements are removed and the new `(key, data)` pair is inserted. `key`: Bytestring key to store. `value`: Bytestring value to store. """ if self.db._flags & _lib.MDB_DUPSORT: if self._cursor_get_kv(_lib.MDB_SET_KEY, key, EMPTY_BYTES): preload(self._val) old = _mvstr(self._val) self.delete(True) else: old = None self.put(key, val) return old flags = _lib.MDB_NOOVERWRITE keylen = len(key) rc = _lib.pymdb_cursor_put(self._cur, key, keylen, val, len(val), flags) self.txn._mutations += 1 if not rc: return if rc != _lib.MDB_KEYEXIST: raise _error("mdb_cursor_put", rc) self._cursor_get(_lib.MDB_GET_CURRENT) preload(self._val) old = _mvstr(self._val) rc = _lib.pymdb_cursor_put(self._cur, key, keylen, val, len(val), 0) self.txn._mutations += 1 if rc: raise _error("mdb_cursor_put", rc) self._cursor_get(_lib.MDB_GET_CURRENT) return old def pop(self, key): """Fetch a record's value then delete it. Returns ``None`` if no previous value existed. This uses the best available mechanism to minimize the cost of a `delete-and-return-previous` operation. For databases opened with `dupsort=True`, the first data element ("duplicate") for the key will be popped. `key`: Bytestring key to delete. """ if self._cursor_get_kv(_lib.MDB_SET_KEY, key, EMPTY_BYTES): preload(self._val) old = _mvstr(self._val) rc = _lib.mdb_cursor_del(self._cur, 0) self.txn._mutations += 1 if rc: raise _error("mdb_cursor_del", rc) self._cursor_get(_lib.MDB_GET_CURRENT) return old def _iter_from(self, k, reverse): """Helper for centidb. Please do not rely on this interface, it may be removed in future. """ if not k and not reverse: found = self.first() else: found = self.set_range(k) if reverse: if not found: self.last() return self.iterprev() else: if not found: return iter(()) return self.iternext() py-lmdb-py-lmdb_1.4.1/lmdb/cpython.c000066400000000000000000003161361441346354400172750ustar00rootroot00000000000000/* * Copyright 2013 The py-lmdb authors, all rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP * Public License. * * A copy of this license is available in the file LICENSE in the * top-level directory of the distribution or, alternatively, at * . * * OpenLDAP is a registered trademark of the OpenLDAP Foundation. * * Individual files and/or contributed packages may be copyright by * other parties and/or subject to additional restrictions. * * This work also contains materials derived from public sources. * * Additional information about OpenLDAP can be obtained at * . */ #define PY_SSIZE_T_CLEAN /* Include order matters! */ #include "Python.h" /* Search lib/win32 first, then fallthrough to as required.*/ #include "stdint.h" #include #include #include #ifdef _WIN32 # define bool int # define true 1 # define false 0 #else # include #endif #include #include "structmember.h" #ifdef HAVE_MEMSINK #define USING_MEMSINK #include "memsink.h" #endif #ifdef _WIN32 #include /* HANDLE */ #endif #include "lmdb.h" #include "preload.h" /* Comment out for copious debug. */ #define NODEBUG #ifdef NODEBUG # define DEBUG(s, ...) #else # define DEBUG(s, ...) fprintf(stderr, \ "lmdb.cpython: %s:%d: " s "\n", __func__, __LINE__, ## __VA_ARGS__); #endif #define MDEBUG(s, ...) DEBUG("%p: " s, self, ## __VA_ARGS__); /* Inlining control for compatible compilers. */ #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define NOINLINE __attribute__((noinline)) #else # define NOINLINE #endif /** * On Win32, Environment.copyfd() needs _get_osfmodule() from the C library, * except that function performs no input validation. So instead we import * msvcrt standard library module, which wraps _get_osfmodule() in a way that * is crash-safe. */ #ifdef _WIN32 static PyObject *msvcrt; #endif /** PyLong representing integer 0. */ static PyObject *py_zero; /** PyLong representing INT_MAX. */ static PyObject *py_int_max; /** PyLong representing SIZE_MAX. */ static PyObject *py_size_max; /** lmdb.Error type. */ static PyObject *Error; /** Typedefs and forward declarations. */ static PyTypeObject PyDatabase_Type; static PyTypeObject PyEnvironment_Type; static PyTypeObject PyTransaction_Type; static PyTypeObject PyCursor_Type; static PyTypeObject PyIterator_Type; typedef struct CursorObject CursorObject; typedef struct DbObject DbObject; typedef struct EnvObject EnvObject; typedef struct IterObject IterObject; typedef struct TransObject TransObject; /* ------------------------ */ /* Python 3.x Compatibility */ /* ------------------------ */ #if PY_MAJOR_VERSION >= 3 # define MOD_RETURN(mod) return mod; # define MODINIT_NAME PyInit_cpython # define MAKE_ID(id) PyCapsule_New((void *) (1 + (id)), NULL, NULL) # define READ_ID(obj) (((int) (long) PyCapsule_GetPointer(obj, NULL)) - 1) #else # define MOD_RETURN(mod) return # define MODINIT_NAME initcpython # define MAKE_ID(id) PyInt_FromLong((long) id) # define READ_ID(obj) PyInt_AS_LONG(obj) # define PyUnicode_InternFromString PyString_InternFromString # define PyBytes_AS_STRING PyString_AS_STRING # define PyBytes_GET_SIZE PyString_GET_SIZE # define PyBytes_CheckExact PyString_CheckExact # define PyBytes_FromStringAndSize PyString_FromStringAndSize # define _PyBytes_Resize _PyString_Resize # define PyMemoryView_FromMemory(x, y, z) PyBuffer_FromMemory(x, y) # ifndef PyBUF_READ # define PyBUF_READ 0 # endif /* Python 2.5 */ # ifndef Py_TYPE # define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) # endif # ifndef PyVarObject_HEAD_INIT # define PyVarObject_HEAD_INIT(x, y) \ PyObject_HEAD_INIT(x) y, # endif #endif struct list_head { struct lmdb_object *prev; struct lmdb_object *next; }; #define LmdbObject_HEAD \ PyObject_HEAD \ struct list_head siblings; \ struct list_head children; \ int valid; struct lmdb_object { LmdbObject_HEAD }; #define OBJECT_INIT(o) \ ((struct lmdb_object *)o)->siblings.prev = NULL; \ ((struct lmdb_object *)o)->siblings.next = NULL; \ ((struct lmdb_object *)o)->children.prev = NULL; \ ((struct lmdb_object *)o)->children.next = NULL; \ ((struct lmdb_object *)o)->valid = 1; /** lmdb._Database */ struct DbObject { LmdbObject_HEAD /** Python Environment reference. Not refcounted; when the last strong ref * to Environment is released, DbObject.tp_clear() will be called, causing * DbObject.env and DbObject.dbi to be cleared. This is to prevent a * cyclical reference from DB->Env keeping the environment alive. */ struct EnvObject *env; /** MDB database handle. */ MDB_dbi dbi; /** Flags at time of creation. */ unsigned int flags; }; /** lmdb.Environment */ struct EnvObject { LmdbObject_HEAD /** Python-managed list of weakrefs to this object. */ PyObject *weaklist; /** MDB environment object. */ MDB_env *env; /** DBI for main database, opened during Environment construction. */ DbObject *main_db; /** 1 if env opened read-only; transactions must always be read-only. */ int readonly; /** Spare read-only transaction . */ struct MDB_txn *spare_txn; }; /** TransObject.flags bitfield values. */ enum trans_flags { /** Buffers should be yielded by get. */ TRANS_BUFFERS = 1, /** Transaction can be can go on freelist instead of deallocation. */ TRANS_RDONLY = 2, /** Transaction is spare, ready for mdb_txn_renew() */ TRANS_SPARE = 4 }; /** lmdb.Transaction */ struct TransObject { LmdbObject_HEAD /** Python-managed list of weakrefs to this object. */ PyObject *weaklist; EnvObject *env; #ifdef HAVE_MEMSINK /** Copy-on-invalid list head. */ PyObject *sink_head; #endif /** MDB transaction object. */ MDB_txn *txn; /** Bitfield of trans_flags values. */ int flags; /** Default database if none specified. */ DbObject *db; /** Number of mutations occurred since start of transaction. Required to * know when cursor key/value must be refreshed. */ int mutations; }; /** lmdb.Cursor */ struct CursorObject { LmdbObject_HEAD /** Transaction cursor belongs to. */ TransObject *trans; /** 1 if mdb_cursor_get() has been called and it last returned 0. */ int positioned; /** MDB-level cursor object. */ MDB_cursor *curs; /** mv_size==0 if positioned==0, otherwise points to current key. */ MDB_val key; /** mv_size==0 if positioned==0, otherwise points to current value. */ MDB_val val; /** If TransObject.mutations!=last_mutation, must MDB_GET_CURRENT to * refresh `key' and `val'. */ int last_mutation; /** DBI flags at time of creation. */ unsigned int dbi_flags; }; typedef PyObject *(*IterValFunc)(CursorObject *); /** lmdb.Iterator * * This is separate from Cursor since we want to define Cursor.next() to mean * MDB_NEXT, and a Python iterator's next() has different semantics. */ struct IterObject { PyObject_HEAD /** Cursor being iterated, or NULL for freelist iterator. */ CursorObject *curs; /** 1 if iteration has started (Cursor should advance on next()). */ int started; /** Operation used to advance cursor. */ MDB_cursor_op op; /** Iterator value function, should be item(), key(), or value(). */ IterValFunc val_func; }; /** * Link `child` into `parent`'s list of dependent objects. Use LINK_CHILD() * maro to avoid casting PyObject to lmdb_object. */ static void link_child(struct lmdb_object *parent, struct lmdb_object *child) { struct lmdb_object *sibling = parent->children.next; if(sibling) { child->siblings.next = sibling; sibling->siblings.prev = child; } parent->children.next = child; } #define LINK_CHILD(parent, child) link_child((void *)parent, (void *)child); /** * Remove `child` from `parent`'s list of dependent objects. Use UNLINK_CHILD * macro to avoid casting PyObject to lmdb_object. */ static void unlink_child(struct lmdb_object *parent, struct lmdb_object *child) { if(parent) { struct lmdb_object *prev = child->siblings.prev; struct lmdb_object *next = child->siblings.next; if(prev) { prev->siblings.next = next; /* If double unlink_child(), this test my legitimately fail: */ } else if(parent->children.next == child) { parent->children.next = next; } if(next) { next->siblings.prev = prev; } child->siblings.prev = NULL; child->siblings.next = NULL; } } #define UNLINK_CHILD(parent, child) unlink_child((void *)parent, (void *)child); /** * Notify dependents of `parent` that `parent` is about to become invalid, * and that they should free any dependent resources. * * To save effort, tp_clear is overloaded to be the invalidation function, * instead of carrying a separate pointer. Objects are added to their parent's * list during construction and removed during deallocation. * * When the environment is closed, it walks its list calling tp_clear on each * child, which in turn walk their own lists. Child transactions are added to * their parent transaction's list. Iterators keep no significant state, so * they are not tracked. * * Use INVALIDATE() macro to avoid casting PyObject to lmdb_object. */ static void invalidate(struct lmdb_object *parent) { struct lmdb_object *child = parent->children.next; while(child) { struct lmdb_object *next = child->siblings.next; DEBUG("invalidating parent=%p child %p", parent, child) Py_TYPE(child)->tp_clear((PyObject *) child); child = next; } } #define INVALIDATE(parent) invalidate((void *)parent); /* ---------- */ /* Exceptions */ /* ---------- */ struct error_map { int code; const char *name; }; /** Array of Error subclasses corresponding to `error_map'. */ static PyObject **error_tbl; /** Mapping from LMDB error code to py-lmdb exception class. */ static const struct error_map error_map[] = { {MDB_KEYEXIST, "KeyExistsError"}, {MDB_NOTFOUND, "NotFoundError"}, {MDB_PAGE_NOTFOUND, "PageNotFoundError"}, {MDB_CORRUPTED, "CorruptedError"}, {MDB_PANIC, "PanicError"}, {MDB_VERSION_MISMATCH, "VersionMismatchError"}, {MDB_INVALID, "InvalidError"}, {MDB_MAP_FULL, "MapFullError"}, {MDB_DBS_FULL, "DbsFullError"}, {MDB_READERS_FULL, "ReadersFullError"}, {MDB_TLS_FULL, "TlsFullError"}, {MDB_TXN_FULL, "TxnFullError"}, {MDB_CURSOR_FULL, "CursorFullError"}, {MDB_PAGE_FULL, "PageFullError"}, {MDB_MAP_RESIZED, "MapResizedError"}, {MDB_INCOMPATIBLE, "IncompatibleError"}, {MDB_BAD_RSLOT, "BadRslotError"}, {MDB_BAD_DBI, "BadDbiError"}, {MDB_BAD_TXN, "BadTxnError"}, {MDB_BAD_VALSIZE, "BadValsizeError"}, {EACCES, "ReadonlyError"}, {EINVAL, "InvalidParameterError"}, {EAGAIN, "LockError"}, {ENOMEM, "MemoryError"}, {ENOSPC, "DiskError"} }; /* ---------- */ /* Exceptions */ /* ---------- */ /** * Raise an exception appropriate for the given `rc` MDB error code. */ static void * NOINLINE err_set(const char *what, int rc) { size_t count = sizeof error_map / sizeof error_map[0]; PyObject *klass = Error; size_t i; if(rc) { for(i = 0; i < count; i++) { if(error_map[i].code == rc) { klass = error_tbl[i]; break; } } } PyErr_Format(klass, "%s: %s", what, mdb_strerror(rc)); return NULL; } /** * Raise an exception from a format string. */ static void * NOINLINE err_format(int rc, const char *fmt, ...) { char buf[128]; va_list ap; va_start(ap, fmt); vsnprintf(buf, sizeof buf, fmt, ap); buf[sizeof buf - 1] = '\0'; va_end(ap); return err_set(buf, rc); } static void * NOINLINE err_invalid(void) { PyErr_Format(Error, "Attempt to operate on closed/deleted/dropped object."); return NULL; } static void * NOINLINE type_error(const char *what) { PyErr_Format(PyExc_TypeError, "%s", what); return NULL; } /** * Convert a PyObject to filesystem bytes. Must call fspath_fini() when done. * Return 0 on success, or set an exception and return -1 on failure. */ static PyObject * get_fspath(PyObject *src) { if(PyBytes_CheckExact(src)) { Py_INCREF(src); return src; } if(! PyUnicode_CheckExact(src)) { type_error("Filesystem path must be Unicode or bytes."); return NULL; } return PyUnicode_AsEncodedString(src, Py_FileSystemDefaultEncoding, "strict"); } /* ------- */ /* Helpers */ /* ------- */ /** * Describes the type of a struct field. */ enum field_type { /** Last field in set, stop converting. */ TYPE_EOF, /** Unsigned 32bit integer. */ TYPE_UINT, /** size_t */ TYPE_SIZE, /** void pointer */ TYPE_ADDR }; /** * Describes a struct field. */ struct dict_field { /** Field type. */ enum field_type type; /** Field name in target dict. */ const char *name; /* Offset into structure where field is found. */ int offset; }; /** * Return a new reference to Py_True if the given argument is true, otherwise * a new reference to Py_False. */ static PyObject * py_bool(int pred) { PyObject *obj = pred ? Py_True : Py_False; Py_INCREF(obj); return obj; } /** * Convert the structure `o` described by `fields` to a dict and return the new * dict. */ static PyObject * dict_from_fields(void *o, const struct dict_field *fields) { PyObject *dict = PyDict_New(); if(! dict) { return NULL; } while(fields->type != TYPE_EOF) { uint8_t *p = ((uint8_t *) o) + fields->offset; unsigned PY_LONG_LONG l = 0; PyObject *lo; if(fields->type == TYPE_UINT) { l = *(unsigned int *)p; } else if(fields->type == TYPE_SIZE) { l = *(size_t *)p; } else if(fields->type == TYPE_ADDR) { l = (intptr_t) *(void **)p; } if(! ((lo = PyLong_FromUnsignedLongLong(l)))) { Py_DECREF(dict); return NULL; } if(PyDict_SetItemString(dict, fields->name, lo)) { Py_DECREF(lo); Py_DECREF(dict); return NULL; } Py_DECREF(lo); fields++; } return dict; } /** * Given an MDB_val `val`, convert it to a Python string or bytes object, * depending on the Python version. Returns a new reference to the object on * sucess, or NULL on failure. */ static PyObject * obj_from_val(MDB_val *val, int as_buffer) { if(as_buffer) { return PyMemoryView_FromMemory(val->mv_data, val->mv_size, PyBUF_READ); } return PyBytes_FromStringAndSize(val->mv_data, val->mv_size); } /** * Given some Python object, try to get at its raw data. For string or bytes * objects, this is the object value. For Unicode objects, this is the UTF-8 * representation of the object value. For all other objects, attempt to invoke * the Python 2.x buffer protocol. */ static int NOINLINE val_from_buffer(MDB_val *val, PyObject *buf) { if(PyBytes_CheckExact(buf)) { val->mv_data = PyBytes_AS_STRING(buf); val->mv_size = PyBytes_GET_SIZE(buf); return 0; } if(PyUnicode_CheckExact(buf)) { type_error("Won't implicitly convert Unicode to bytes; use .encode()"); return -1; } return PyObject_AsReadBuffer(buf, (const void **) &val->mv_data, (Py_ssize_t *) &val->mv_size); } /* ------------------- */ /* Concurrency control */ /* ------------------- */ #define UNLOCKED(out, e) \ Py_BEGIN_ALLOW_THREADS \ out = (e); \ Py_END_ALLOW_THREADS #define PRELOAD_UNLOCKED(_rc, _data, _size) \ Py_BEGIN_ALLOW_THREADS \ preload(_rc, _data, _size); \ Py_END_ALLOW_THREADS /* ---------------- */ /* Argument parsing */ /* ---------------- */ #define OFFSET(k, y) offsetof(struct k, y) #define SPECSIZE() (sizeof(argspec) / sizeof(argspec[0])) enum arg_type { ARG_DB, /** DbObject* */ ARG_TRANS, /** TransObject* */ ARG_ENV, /** EnvObject* */ ARG_OBJ, /** PyObject* */ ARG_BOOL, /** int */ ARG_BUF, /** MDB_val */ ARG_STR, /** char* */ ARG_INT, /** int */ ARG_SIZE /** size_t */ }; struct argspec { const char *string; unsigned short type; unsigned short offset; }; static PyTypeObject *type_tbl[] = { &PyDatabase_Type, &PyTransaction_Type, &PyEnvironment_Type }; static int NOINLINE parse_ulong(PyObject *obj, uint64_t *l, PyObject *max) { int rc = PyObject_RichCompareBool(obj, py_zero, Py_GE); if(rc == -1) { return -1; } else if(! rc) { PyErr_Format(PyExc_OverflowError, "Integer argument must be >= 0"); return -1; } rc = PyObject_RichCompareBool(obj, max, Py_LE); if(rc == -1) { return -1; } else if(! rc) { PyErr_Format(PyExc_OverflowError, "Integer argument exceeds limit."); return -1; } #if PY_MAJOR_VERSION >= 3 *l = PyLong_AsUnsignedLongLongMask(obj); #else *l = PyInt_AsUnsignedLongLongMask(obj); #endif return 0; } /** * Parse a single argument specified by `spec` into `out`, returning 0 on * success or setting an exception and returning -1 on error. */ static int parse_arg(const struct argspec *spec, PyObject *val, void *out) { void *dst = ((uint8_t *)out) + spec->offset; int ret = 0; uint64_t l; if(val != Py_None) { switch((enum arg_type) spec->type) { case ARG_DB: case ARG_TRANS: case ARG_ENV: if(val->ob_type != type_tbl[spec->type]) { type_error("invalid type"); return -1; } /* fallthrough */ case ARG_OBJ: *((PyObject **) dst) = val; break; case ARG_BOOL: *((int *)dst) = PyObject_IsTrue(val); break; case ARG_BUF: ret = val_from_buffer((MDB_val *)dst, val); break; case ARG_STR: { MDB_val mv; if(! (ret = val_from_buffer(&mv, val))) { *((char **) dst) = mv.mv_data; } break; } case ARG_INT: if(! (ret = parse_ulong(val, &l, py_int_max))) { *((int *) dst) = (int)l; } break; case ARG_SIZE: if(! (ret = parse_ulong(val, &l, py_size_max))) { *((size_t *) dst) = (size_t)l; } break; } } return ret; } /** * Walk `argspec`, building a Python dictionary mapping keyword arguments to a * PyInt describing their offset in the array. Used to reduce keyword argument * parsing from O(specsize) to O(number of supplied kwargs). */ static int NOINLINE make_arg_cache(int specsize, const struct argspec *argspec, PyObject **cache) { Py_ssize_t i; if(! ((*cache = PyDict_New()))) { return -1; } for(i = 0; i < specsize; i++) { const struct argspec *spec = argspec + i; PyObject *key = PyUnicode_InternFromString(spec->string); PyObject *val = MAKE_ID(i); if((! (key && val)) || PyDict_SetItem(*cache, key, val)) { return -1; } Py_DECREF(val); } return 0; } /** * Like PyArg_ParseTupleAndKeywords except types are specialized for this * module, keyword strings aren't dup'd every call and the code is >3x smaller. */ static int NOINLINE parse_args(int valid, int specsize, const struct argspec *argspec, PyObject **cache, PyObject *args, PyObject *kwds, void *out) { unsigned set = 0; unsigned i; if(! valid) { err_invalid(); return -1; } if(args) { Py_ssize_t size = PyTuple_GET_SIZE(args); if(size > specsize) { type_error("too many positional arguments."); return -1; } if(specsize < size) { size = specsize; } for(i = 0; i < size; i++) { if(parse_arg(argspec + i, PyTuple_GET_ITEM(args, i), out)) { return -1; } set |= 1 << i; } } if(kwds) { Py_ssize_t ppos = 0; PyObject *pkey; PyObject *pvalue; if((! *cache) && make_arg_cache(specsize, argspec, cache)) { return -1; } while(PyDict_Next(kwds, &ppos, &pkey, &pvalue)) { PyObject *specidx; int i; if(! ((specidx = PyDict_GetItem(*cache, pkey)))) { type_error("unrecognized keyword argument"); return -1; } i = READ_ID(specidx); if(set & (1 << i)) { PyErr_Format(PyExc_TypeError, "duplicate argument: %U", pkey); return -1; } if(parse_arg(argspec + i, pvalue, out)) { return -1; } } } return 0; } /** * Return 1 if `db` is associated with the given `env`, otherwise raise an * exception. Used to prevent DBIs from unrelated envs from being mixed * together (which in future, would cause one env to access another's cursor * pointers). */ static int db_owner_check(DbObject *db, EnvObject *env) { if(db->env != env) { err_set("Database handle belongs to another environment.", 0); return 0; } return 1; } /* -------------------------------------------------------- */ /* Functionality shared between Transaction and Environment */ /* -------------------------------------------------------- */ static PyObject * make_trans(EnvObject *env, DbObject *db, TransObject *parent, int write, int buffers) { MDB_txn *parent_txn; MDB_txn *txn; TransObject *self; int flags; int rc; DEBUG("make_trans(env=%p, parent=%p, write=%d, buffers=%d)", env, parent, write, buffers) if(! env->valid) { return err_invalid(); } if(! db) { db = env->main_db; } else if(! db_owner_check(db, env)) { return NULL; } parent_txn = NULL; if(parent) { if(parent->flags & TRANS_RDONLY) { return err_set("Read-only transactions cannot be nested.", EINVAL); } if(! parent->valid) { return err_invalid(); } parent_txn = parent->txn; } if(write && env->readonly) { const char *msg = "Cannot start write transaction with read-only environment."; return err_set(msg, EACCES); } if((!write) && env->spare_txn) { txn = env->spare_txn; DEBUG("using cached txn", txn) env->spare_txn = NULL; UNLOCKED(rc, mdb_txn_renew(txn)); if(rc) { mdb_txn_abort(txn); return err_set("mdb_txn_renew", rc); } } else { flags = write ? 0 : MDB_RDONLY; UNLOCKED(rc, mdb_txn_begin(env->env, parent_txn, flags, &txn)); if(rc) { return err_set("mdb_txn_begin", rc); } } if(! ((self = PyObject_New(TransObject, &PyTransaction_Type)))) { mdb_txn_abort(txn); return NULL; } self->txn = txn; OBJECT_INIT(self) LINK_CHILD(env, self) self->weaklist = NULL; self->env = env; Py_INCREF(env); self->db = db; Py_INCREF(db); #ifdef HAVE_MEMSINK self->sink_head = NULL; #endif self->mutations = 0; self->flags = 0; if(! write) { self->flags |= TRANS_RDONLY; } if(buffers) { self->flags |= TRANS_BUFFERS; } return (PyObject *)self; } static PyObject * make_cursor(DbObject *db, TransObject *trans) { CursorObject *self; MDB_cursor *curs; int rc; if(! trans->valid) { return err_invalid(); } if(! db) { db = trans->env->main_db; } else if(! db_owner_check(db, trans->env)) { return NULL; } UNLOCKED(rc, mdb_cursor_open(trans->txn, db->dbi, &curs)); if(rc) { return err_set("mdb_cursor_open", rc); } self = PyObject_New(CursorObject, &PyCursor_Type); if (!self) { mdb_cursor_close(curs); return NULL; } DEBUG("sizeof cursor = %d", (int) sizeof *self) OBJECT_INIT(self) LINK_CHILD(trans, self) self->curs = curs; self->positioned = 0; self->key.mv_size = 0; self->key.mv_data = NULL; self->val.mv_size = 0; self->val.mv_data = NULL; self->trans = trans; self->last_mutation = trans->mutations; self->dbi_flags = db->flags; Py_INCREF(self->trans); return (PyObject *) self; } /* -------- */ /* Database */ /* -------- */ static DbObject * db_from_name(EnvObject *env, MDB_txn *txn, const char *name, unsigned int flags) { MDB_dbi dbi; unsigned int f; int rc; DbObject *dbo; UNLOCKED(rc, mdb_dbi_open(txn, name, flags, &dbi)); if(rc) { err_set("mdb_dbi_open", rc); return NULL; } if((rc = mdb_dbi_flags(txn, dbi, &f))) { err_set("mdb_dbi_flags", rc); mdb_dbi_close(env->env, dbi); return NULL; } if(! ((dbo = PyObject_New(DbObject, &PyDatabase_Type)))) { return NULL; } OBJECT_INIT(dbo) LINK_CHILD(env, dbo) dbo->env = env; /* no refcount */ dbo->dbi = dbi; dbo->flags = f; DEBUG("DbObject '%s' opened at %p", name, dbo) return dbo; } /** * Use a temporary transaction to manufacture a new _Database object for * `name`. */ static DbObject * txn_db_from_name(EnvObject *env, const char *name, unsigned int flags) { int rc; MDB_txn *txn; DbObject *dbo; int begin_flags = (name == NULL || env->readonly) ? MDB_RDONLY : 0; UNLOCKED(rc, mdb_txn_begin(env->env, NULL, begin_flags, &txn)); if(rc) { err_set("mdb_txn_begin", rc); return NULL; } if(! ((dbo = db_from_name(env, txn, name, flags)))) { Py_BEGIN_ALLOW_THREADS mdb_txn_abort(txn); Py_END_ALLOW_THREADS return NULL; } UNLOCKED(rc, mdb_txn_commit(txn)); if(rc) { Py_DECREF(dbo); return err_set("mdb_txn_commit", rc); } return dbo; } static int db_clear(DbObject *self) { if(self->env) { UNLINK_CHILD(self->env, self) self->env = NULL; } self->valid = 0; return 0; } /** * _Database.flags() */ static PyObject * db_flags(DbObject *self, PyObject *args, PyObject *kwds) { PyObject *dct; unsigned int f; if (args) { Py_ssize_t size = PyTuple_GET_SIZE(args); if(size > 1) { return type_error("too many positional arguments."); } } dct = PyDict_New(); f = self->flags; PyDict_SetItemString(dct, "reverse_key", py_bool(f & MDB_REVERSEKEY)); PyDict_SetItemString(dct, "dupsort", py_bool(f & MDB_DUPSORT)); PyDict_SetItemString(dct, "integerkey", py_bool(f & MDB_INTEGERKEY)); PyDict_SetItemString(dct, "integerdup", py_bool(f & MDB_INTEGERDUP)); PyDict_SetItemString(dct, "dupfixed", py_bool(f & MDB_DUPFIXED)); return dct; } /** * _Database.__del__() */ static void db_dealloc(DbObject *self) { db_clear(self); PyObject_Del(self); } static struct PyMethodDef db_methods[] = { {"flags", (PyCFunction)db_flags, METH_VARARGS|METH_KEYWORDS}, {0, 0, 0, 0} }; static PyTypeObject PyDatabase_Type = { PyVarObject_HEAD_INIT(NULL, 0) "_Database", /*tp_name*/ sizeof(DbObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)db_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ (inquiry)db_clear, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ db_methods /*tp_methods*/ }; /* ----------- */ /* Environment */ /* ----------- */ static void trans_dealloc(TransObject *self); static void txn_abort(MDB_txn *txn); static int env_clear(EnvObject *self) { MDB_txn * txn; MDEBUG("env_clear") INVALIDATE(self) self->valid = 0; Py_CLEAR(self->main_db); txn = self->spare_txn; if(txn) { MDEBUG("killing spare txn %p", txn); txn_abort(txn); self->spare_txn = NULL; } if(self->env) { DEBUG("Closing env") Py_BEGIN_ALLOW_THREADS mdb_env_close(self->env); Py_END_ALLOW_THREADS self->env = NULL; } return 0; } /** * Environment.__del__() */ static void env_dealloc(EnvObject *self) { if(self->weaklist != NULL) { MDEBUG("Clearing weaklist..") PyObject_ClearWeakRefs((PyObject *) self); } env_clear(self); PyObject_Del(self); } /** * Environment.close() */ static PyObject * env_close(EnvObject *self) { env_clear(self); Py_RETURN_NONE; } /** * Environment() -> new object. */ static PyObject * env_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { struct env_new { PyObject *path; size_t map_size; int subdir; int readonly; int metasync; int sync; int map_async; int mode; int create; int readahead; int writemap; int meminit; int max_readers; int max_dbs; int max_spare_txns; int lock; } arg = {NULL, 10485760, 1, 0, 1, 1, 0, 0755, 1, 1, 0, 1, 126, 0, 1, 1}; static const struct argspec argspec[] = { {"path", ARG_OBJ, OFFSET(env_new, path)}, {"map_size", ARG_SIZE, OFFSET(env_new, map_size)}, {"subdir", ARG_BOOL, OFFSET(env_new, subdir)}, {"readonly", ARG_BOOL, OFFSET(env_new, readonly)}, {"metasync", ARG_BOOL, OFFSET(env_new, metasync)}, {"sync", ARG_BOOL, OFFSET(env_new, sync)}, {"map_async", ARG_BOOL, OFFSET(env_new, map_async)}, {"mode", ARG_INT, OFFSET(env_new, mode)}, {"create", ARG_BOOL, OFFSET(env_new, create)}, {"readahead", ARG_BOOL, OFFSET(env_new, readahead)}, {"writemap", ARG_BOOL, OFFSET(env_new, writemap)}, {"meminit", ARG_INT, OFFSET(env_new, meminit)}, {"max_readers", ARG_INT, OFFSET(env_new, max_readers)}, {"max_dbs", ARG_INT, OFFSET(env_new, max_dbs)}, {"max_spare_txns", ARG_INT, OFFSET(env_new, max_spare_txns)}, {"lock", ARG_BOOL, OFFSET(env_new, lock)} }; PyObject *fspath_obj = NULL; EnvObject *self; const char *fspath; int flags; int rc; int mode; static PyObject *cache = NULL; if(parse_args(1, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! arg.path) { return type_error("'path' argument required"); } if(! ((self = PyObject_New(EnvObject, type)))) { return NULL; } OBJECT_INIT(self) self->weaklist = NULL; self->main_db = NULL; self->env = NULL; self->spare_txn = NULL; if((rc = mdb_env_create(&self->env))) { err_set("mdb_env_create", rc); goto fail; } if((rc = mdb_env_set_mapsize(self->env, arg.map_size))) { err_set("mdb_env_set_mapsize", rc); goto fail; } if((rc = mdb_env_set_maxreaders(self->env, arg.max_readers))) { err_set("mdb_env_set_maxreaders", rc); goto fail; } if((rc = mdb_env_set_maxdbs(self->env, arg.max_dbs))) { err_set("mdb_env_set_maxdbs", rc); goto fail; } if(! ((fspath_obj = get_fspath(arg.path)))) { goto fail; } fspath = PyBytes_AS_STRING(fspath_obj); if(arg.create && arg.subdir && !arg.readonly) { if(mkdir(fspath, arg.mode) && errno != EEXIST) { PyErr_SetFromErrnoWithFilename(PyExc_OSError, fspath); goto fail; } } flags = MDB_NOTLS; if(! arg.subdir) { flags |= MDB_NOSUBDIR; } if(arg.readonly) { flags |= MDB_RDONLY; } self->readonly = arg.readonly; if(! arg.metasync) { flags |= MDB_NOMETASYNC; } if(! arg.sync) { flags |= MDB_NOSYNC; } if(arg.map_async) { flags |= MDB_MAPASYNC; } if(! arg.readahead) { flags |= MDB_NORDAHEAD; } if(arg.writemap) { flags |= MDB_WRITEMAP; } if(! arg.meminit) { flags |= MDB_NOMEMINIT; } if(! arg.lock) { flags |= MDB_NOLOCK; } /* Strip +x. */ mode = arg.mode & ~0111; DEBUG("mdb_env_open(%p, '%s', %d, %o);", self->env, fspath, flags, mode) UNLOCKED(rc, mdb_env_open(self->env, fspath, flags, mode)); if(rc) { err_set(fspath, rc); goto fail; } self->main_db = txn_db_from_name(self, NULL, 0); if(self->main_db) { self->valid = 1; DEBUG("EnvObject '%s' opened at %p", fspath, self) return (PyObject *) self; } fail: DEBUG("initialization failed") Py_CLEAR(fspath_obj); Py_CLEAR(self); return NULL; } /** * Environment.begin() */ static PyObject * env_begin(EnvObject *self, PyObject *args, PyObject *kwds) { struct env_begin { DbObject *db; TransObject *parent; int write; int buffers; } arg = {self->main_db, NULL, 0, 0}; static const struct argspec argspec[] = { {"db", ARG_DB, OFFSET(env_begin, db)}, {"parent", ARG_TRANS, OFFSET(env_begin, parent)}, {"write", ARG_BOOL, OFFSET(env_begin, write)}, {"buffers", ARG_BOOL, OFFSET(env_begin, buffers)}, }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } return make_trans(self, arg.db, arg.parent, arg.write, arg.buffers); } /** * Environment.copy() */ static PyObject * env_copy(EnvObject *self, PyObject *args, PyObject *kwds) { struct env_copy { PyObject *path; int compact; TransObject *txn; } arg = {NULL, 0, NULL}; static const struct argspec argspec[] = { {"path", ARG_OBJ, OFFSET(env_copy, path)}, {"compact", ARG_BOOL, OFFSET(env_copy, compact)}, {"txn", ARG_TRANS, OFFSET(env_copy, txn)} }; PyObject *fspath_obj; const char *fspath_s; int flags; int rc; #ifdef HAVE_PATCHED_LMDB MDB_txn *txn; #endif static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! arg.path) { return type_error("path argument required"); } if(! ((fspath_obj = get_fspath(arg.path)))) { return NULL; } #ifdef HAVE_PATCHED_LMDB if (arg.txn) { txn = arg.txn->txn; if (!arg.compact) { return type_error("txn argument only compatible with compact=True"); } } else { txn = NULL; } #else if (arg.txn) { return type_error("Non-patched LMDB doesn't support transaction with env.copy"); } #endif fspath_s = PyBytes_AS_STRING(fspath_obj); flags = arg.compact ? MDB_CP_COMPACT : 0; #ifdef HAVE_PATCHED_LMDB UNLOCKED(rc, mdb_env_copy3(self->env, fspath_s, flags, txn)); #else UNLOCKED(rc, mdb_env_copy2(self->env, fspath_s, flags)); #endif Py_CLEAR(fspath_obj); if(rc) { #ifdef HAVE_PATCHED_LMDB return err_set("mdb_env_copy3", rc); #else return err_set("mdb_env_copy2", rc); #endif } Py_RETURN_NONE; } /** * Environment.copyfd(fd) */ static PyObject * env_copyfd(EnvObject *self, PyObject *args, PyObject *kwds) { struct env_copyfd { int fd; int compact; TransObject *txn; } arg = {-1, 0}; int rc; #ifdef HAVE_PATCHED_LMDB MDB_txn *txn; #endif #ifdef _WIN32 PyObject *temp; Py_ssize_t handle; #endif static const struct argspec argspec[] = { {"fd", ARG_INT, OFFSET(env_copyfd, fd)}, {"compact", ARG_BOOL, OFFSET(env_copyfd, compact)}, {"txn", ARG_TRANS, OFFSET(env_copyfd, txn)}, }; int flags; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(arg.fd == -1) { return type_error("fd argument required"); } flags = arg.compact ? MDB_CP_COMPACT : 0; #ifdef HAVE_PATCHED_LMDB if (arg.txn) { txn = arg.txn->txn; if (!arg.compact) { return type_error("txn argument only compatible with compact=True"); } } else { txn = NULL; } #else if (arg.txn) { return type_error("Non-patched LMDB doesn't support transaction with env.copyfd"); } #endif #ifdef _WIN32 temp = PyObject_CallMethod(msvcrt, "get_osfhandle", "i", arg.fd); if(! temp) { return NULL; } handle = PyNumber_AsSsize_t(temp, PyExc_OverflowError); Py_DECREF(temp); if(PyErr_Occurred()) { return NULL; } #define HANDLE_ARG (HANDLE)handle #else #define HANDLE_ARG arg.fd #endif #ifdef HAVE_PATCHED_LMDB UNLOCKED(rc, mdb_env_copyfd3(self->env, HANDLE_ARG, flags, txn)); #else UNLOCKED(rc, mdb_env_copyfd2(self->env, HANDLE_ARG, flags)); #endif if(rc) { return err_set("mdb_env_copyfd3", rc); } Py_RETURN_NONE; } /** * Environment.info() -> dict */ static PyObject * env_info(EnvObject *self) { static const struct dict_field fields[] = { {TYPE_ADDR, "map_addr", offsetof(MDB_envinfo, me_mapaddr)}, {TYPE_SIZE, "map_size", offsetof(MDB_envinfo, me_mapsize)}, {TYPE_SIZE, "last_pgno", offsetof(MDB_envinfo, me_last_pgno)}, {TYPE_SIZE, "last_txnid", offsetof(MDB_envinfo, me_last_txnid)}, {TYPE_UINT, "max_readers", offsetof(MDB_envinfo, me_maxreaders)}, {TYPE_UINT, "num_readers", offsetof(MDB_envinfo, me_numreaders)}, {TYPE_EOF, NULL, 0} }; MDB_envinfo info; int rc; if(! self->valid) { return err_invalid(); } UNLOCKED(rc, mdb_env_info(self->env, &info)); if(rc) { err_set("mdb_env_info", rc); return NULL; } return dict_from_fields(&info, fields); } /** * Environment.flags() -> dict */ static PyObject * env_flags(EnvObject *self) { PyObject *dct; unsigned int flags; int rc; if(! self->valid) { return err_invalid(); } if((rc = mdb_env_get_flags(self->env, &flags))) { err_set("mdb_env_get_flags", rc); return NULL; } dct = PyDict_New(); PyDict_SetItemString(dct, "subdir", py_bool(!(flags & MDB_NOSUBDIR))); PyDict_SetItemString(dct, "readonly", py_bool(flags & MDB_RDONLY)); PyDict_SetItemString(dct, "metasync", py_bool(!(flags & MDB_NOMETASYNC))); PyDict_SetItemString(dct, "sync", py_bool(!(flags & MDB_NOSYNC))); PyDict_SetItemString(dct, "map_async", py_bool(flags & MDB_MAPASYNC)); PyDict_SetItemString(dct, "readahead", py_bool(!(flags & MDB_NORDAHEAD))); PyDict_SetItemString(dct, "writemap", py_bool(flags & MDB_WRITEMAP)); PyDict_SetItemString(dct, "meminit", py_bool(!(flags & MDB_NOMEMINIT))); PyDict_SetItemString(dct, "lock", py_bool(!(flags & MDB_NOLOCK))); return dct; } /** * Environment.max_key_size() -> int */ static PyObject * env_max_key_size(EnvObject *self) { int key_size; if(! self->valid) { return err_invalid(); } key_size = mdb_env_get_maxkeysize(self->env); return PyLong_FromLongLong(key_size); } /** * Environment.max_key_size() -> int */ static PyObject * env_max_readers(EnvObject *self) { unsigned int readers; int rc; if(! self->valid) { return err_invalid(); } if((rc = mdb_env_get_maxreaders(self->env, &readers))) { return err_set("mdb_env_get_maxreaders", rc); } return PyLong_FromLongLong(readers); } /** * Environment.open_db() -> handle */ static PyObject * env_open_db(EnvObject *self, PyObject *args, PyObject *kwds) { struct env_open_db { const char *key; TransObject *txn; int reverse_key; int dupsort; int create; int integerkey; int integerdup; int dupfixed; } arg = {NULL, NULL, 0, 0, 1}; static const struct argspec argspec[] = { {"key", ARG_STR, OFFSET(env_open_db, key)}, {"txn", ARG_TRANS, OFFSET(env_open_db, txn)}, {"reverse_key", ARG_BOOL, OFFSET(env_open_db, reverse_key)}, {"dupsort", ARG_BOOL, OFFSET(env_open_db, dupsort)}, {"create", ARG_BOOL, OFFSET(env_open_db, create)}, {"integerkey", ARG_BOOL, OFFSET(env_open_db, integerkey)}, {"integerdup", ARG_BOOL, OFFSET(env_open_db, integerdup)}, {"dupfixed", ARG_BOOL, OFFSET(env_open_db, dupfixed)}, }; int flags; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if (!arg.key && (arg.reverse_key || arg.dupsort || arg.integerkey || arg.integerdup || arg.dupfixed)) { return PyErr_Format(PyExc_ValueError, "May not set flags on the main database"); } flags = 0; if(arg.reverse_key) { flags |= MDB_REVERSEKEY; } if(arg.dupsort) { flags |= MDB_DUPSORT; } if(arg.create) { flags |= MDB_CREATE; } if(arg.integerkey) { flags |= MDB_INTEGERKEY; } if(arg.integerdup) { flags |= MDB_DUPSORT; flags |= MDB_DUPFIXED; flags |= MDB_INTEGERDUP; } if(arg.dupfixed) { flags |= MDB_DUPSORT; flags |= MDB_DUPFIXED; } if(arg.txn) { return (PyObject *) db_from_name(self, arg.txn->txn, arg.key, flags); } else { return (PyObject *) txn_db_from_name(self, arg.key, flags); } } /** * Environment.path() -> Unicode */ static PyObject * env_path(EnvObject *self) { const char *path; int rc; if(! self->valid) { return err_invalid(); } if((rc = mdb_env_get_path(self->env, &path))) { return err_set("mdb_env_get_path", rc); } return PyUnicode_FromString(path); } static const struct dict_field mdb_stat_fields[] = { {TYPE_UINT, "psize", offsetof(MDB_stat, ms_psize)}, {TYPE_UINT, "depth", offsetof(MDB_stat, ms_depth)}, {TYPE_SIZE, "branch_pages", offsetof(MDB_stat, ms_branch_pages)}, {TYPE_SIZE, "leaf_pages", offsetof(MDB_stat, ms_leaf_pages)}, {TYPE_SIZE, "overflow_pages", offsetof(MDB_stat, ms_overflow_pages)}, {TYPE_SIZE, "entries", offsetof(MDB_stat, ms_entries)}, {TYPE_EOF, NULL, 0} }; /** * Environment.stat() -> dict */ static PyObject * env_stat(EnvObject *self) { MDB_stat st; int rc; if(! self->valid) { return err_invalid(); } UNLOCKED(rc, mdb_env_stat(self->env, &st)); if(rc) { err_set("mdb_env_stat", rc); return NULL; } return dict_from_fields(&st, mdb_stat_fields); } /** * Callback to receive string result for env_readers(). Return 0 on success or * -1 on error. */ static int env_readers_callback(const char *msg, void *str_) { PyObject **str = str_; PyObject *s = PyUnicode_FromString(msg); PyObject *new; if(! s) { return -1; } new = PyUnicode_Concat(*str, s); Py_CLEAR(*str); *str = new; if(! new) { return -1; } return 0; } /** * Environment.readers() -> string */ static PyObject * env_readers(EnvObject *self) { PyObject *str; if(! self->valid) { return err_invalid(); } if(! ((str = PyUnicode_FromString("")))) { return NULL; } if(mdb_reader_list(self->env, env_readers_callback, &str)) { Py_CLEAR(str); } return str; } /** * Environment.reader_check() -> int */ static PyObject * env_reader_check(EnvObject *self) { int rc; int dead; if(! self->valid) { return err_invalid(); } if((rc = mdb_reader_check(self->env, &dead))) { return err_set("mdb_reader_check", rc); } return PyLong_FromLongLong(dead); } /** * Environment.set_mapsize(size) -> None */ static PyObject * env_reader_set_mapsize(EnvObject *self, PyObject *args, PyObject *kwargs) { struct env_set_mapsize { size_t map_size; } arg = {0}; static const struct argspec argspec[] = { {"map_size", ARG_SIZE, OFFSET(env_set_mapsize, map_size)} }; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwargs, &arg)) { return NULL; } rc = mdb_env_set_mapsize(self->env, arg.map_size); if(rc) { return err_set("mdb_env_set_mapsize", rc); } Py_RETURN_NONE; } /** * Environment.sync() */ static PyObject * env_sync(EnvObject *self, PyObject *args) { struct env_sync { int force; } arg = {0}; static const struct argspec argspec[] = { {"force", ARG_BOOL, OFFSET(env_sync, force)} }; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, NULL, &arg)) { return NULL; } UNLOCKED(rc, mdb_env_sync(self->env, arg.force)); if(rc) { return err_set("mdb_env_sync", rc); } Py_RETURN_NONE; } /** * Environment.__enter__() */ static PyObject *env_enter(EnvObject *self) { Py_INCREF(self); return (PyObject *)self; } /** * Environment.__exit__() */ static PyObject *env_exit(EnvObject *self, PyObject *args) { env_clear(self); Py_RETURN_NONE; } static struct PyMethodDef env_methods[] = { {"__enter__", (PyCFunction)env_enter, METH_NOARGS}, {"__exit__", (PyCFunction)env_exit, METH_VARARGS}, {"begin", (PyCFunction)env_begin, METH_VARARGS|METH_KEYWORDS}, {"close", (PyCFunction)env_close, METH_NOARGS}, {"copy", (PyCFunction)env_copy, METH_VARARGS|METH_KEYWORDS}, {"copyfd", (PyCFunction)env_copyfd, METH_VARARGS|METH_KEYWORDS}, {"info", (PyCFunction)env_info, METH_NOARGS}, {"flags", (PyCFunction)env_flags, METH_NOARGS}, {"max_key_size", (PyCFunction)env_max_key_size, METH_NOARGS}, {"max_readers", (PyCFunction)env_max_readers, METH_NOARGS}, {"open_db", (PyCFunction)env_open_db, METH_VARARGS|METH_KEYWORDS}, {"path", (PyCFunction)env_path, METH_NOARGS}, {"stat", (PyCFunction)env_stat, METH_NOARGS}, {"readers", (PyCFunction)env_readers, METH_NOARGS}, {"reader_check", (PyCFunction)env_reader_check, METH_NOARGS}, {"set_mapsize", (PyCFunction)env_reader_set_mapsize, METH_VARARGS|METH_KEYWORDS}, {"sync", (PyCFunction)env_sync, METH_VARARGS}, {NULL, NULL} }; static PyTypeObject PyEnvironment_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Environment", /*tp_name*/ sizeof(EnvObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) env_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ (inquiry) env_clear, /*tp_clear*/ 0, /*tp_richcompare*/ offsetof(EnvObject, weaklist), /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ env_methods, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ env_new, /*tp_new*/ }; /* ------- */ /* Cursors */ /* ------- */ static int cursor_clear(CursorObject *self) { if(self->valid) { INVALIDATE(self) UNLINK_CHILD(self->trans, self) Py_BEGIN_ALLOW_THREADS mdb_cursor_close(self->curs); Py_END_ALLOW_THREADS self->valid = 0; } Py_CLEAR(self->trans); return 0; } /** * Cursor.__del__() */ static void cursor_dealloc(CursorObject *self) { DEBUG("destroying cursor") cursor_clear(self); PyObject_Del(self); } /** * Environment.Cursor(db, trans) -> new instance. */ static PyObject * cursor_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { struct cursor_new { DbObject *db; TransObject *trans; } arg = {NULL, NULL}; static const struct argspec argspec[] = { {"db", ARG_DB, OFFSET(cursor_new, db)}, {"txn", ARG_TRANS, OFFSET(cursor_new, trans)} }; static PyObject *cache = NULL; if(parse_args(1, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! (arg.db && arg.trans)) { return type_error("db and transaction parameters required."); } return make_cursor(arg.db, arg.trans); } /** * Cursor.count() -> long */ static PyObject * cursor_count(CursorObject *self) { size_t count; int rc; if(! self->valid) { return err_invalid(); } UNLOCKED(rc, mdb_cursor_count(self->curs, &count)); if(rc) { return err_set("mdb_cursor_count", rc); } return PyLong_FromUnsignedLongLong(count); } /** * Apply `op` to the cursor using the Cursor instance's `key` and `val` * MDB_vals. On completion, check for an error and if one occurred, set the * cursor to the unpositioned state. Finally record the containing * transaction's last mutation count, so we know if `key` and `val` become * invalid before the next attempt to read them. */ static int _cursor_get_c(CursorObject *self, enum MDB_cursor_op op) { int rc; Py_BEGIN_ALLOW_THREADS; rc = mdb_cursor_get(self->curs, &self->key, &self->val, op); Py_END_ALLOW_THREADS; self->positioned = rc == 0; self->last_mutation = self->trans->mutations; if(rc) { self->key.mv_size = 0; self->val.mv_size = 0; if(rc != MDB_NOTFOUND) { if(! (rc == EINVAL && op == MDB_GET_CURRENT)) { err_set("mdb_cursor_get", rc); return -1; } } } return 0; } /** * Wrap _cursor_get_c() to return True or False depending on whether the * Cursor's final state is positioned. */ static PyObject * _cursor_get(CursorObject *self, enum MDB_cursor_op op) { if(! self->valid) { return err_invalid(); } if(_cursor_get_c(self, op)) { return NULL; } return py_bool(self->positioned); } /** * Cursor.delete(dupdata=False) -> bool */ static PyObject * cursor_delete(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_delete { int dupdata; } arg = {0}; static const struct argspec argspec[] = { {"dupdata", ARG_BOOL, OFFSET(cursor_delete, dupdata)} }; int res; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } res = 0; if(self->positioned) { int rc; int flags = arg.dupdata ? MDB_NODUPDATA : 0; DEBUG("deleting key '%.*s'", (int) self->key.mv_size, (char*) self->key.mv_data) UNLOCKED(rc, mdb_cursor_del(self->curs, flags)); self->trans->mutations++; if(rc) { return err_set("mdb_cursor_del", rc); } res = 1; _cursor_get_c(self, MDB_GET_CURRENT); } return py_bool(res); } /** * Cursor.first() -> bool */ static PyObject * cursor_first(CursorObject *self) { return _cursor_get(self, MDB_FIRST); } /** * Cursor.first_dup() -> bool */ static PyObject * cursor_first_dup(CursorObject *self) { return _cursor_get(self, MDB_FIRST_DUP); } static PyObject * cursor_value(CursorObject *self); /** * Cursor.getmulti() -> Iterable of (key, value) */ static PyObject * cursor_get_multi(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_get { PyObject *keys; int dupdata; size_t dupfixed_bytes; int keyfixed; } arg = {Py_None, 0, 0, 0}; int i, as_buffer; PyObject *iter, *item, *tup, *key, *val; PyObject *pylist = NULL; MDB_cursor_op get_op, next_op; bool done, first; static const struct argspec argspec[] = { {"keys", ARG_OBJ, OFFSET(cursor_get, keys)}, {"dupdata", ARG_BOOL, OFFSET(cursor_get, dupdata)}, {"dupfixed_bytes", ARG_SIZE, OFFSET(cursor_get, dupfixed_bytes)}, {"keyfixed", ARG_BOOL, OFFSET(cursor_get, keyfixed)} }; size_t buffer_pos = 0, buffer_size = 8; size_t key_size, val_size, item_size = 0; char *buffer = NULL; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(arg.dupfixed_bytes < 0) { return type_error("dupfixed_bytes must be a positive integer."); }else if ((arg.dupfixed_bytes > 0 || arg.keyfixed) && !arg.dupdata) { return type_error("dupdata is required for dupfixed_bytes/keyfixed."); }else if (arg.keyfixed && !arg.dupfixed_bytes){ return type_error("dupfixed_bytes is required for keyfixed."); } if(! ((iter = PyObject_GetIter(arg.keys)))) { return NULL; } /* Choose ops */ if(arg.dupfixed_bytes) { get_op = MDB_GET_MULTIPLE; next_op = MDB_NEXT_MULTIPLE; } else { get_op = MDB_GET_CURRENT; next_op = MDB_NEXT_DUP; } as_buffer = self->trans->flags & TRANS_BUFFERS; val_size = arg.dupfixed_bytes; if (!arg.keyfixed){ /* Init list */ pylist = PyList_New(0); } first = true; while((item = PyIter_Next(iter))) { MDB_val mkey; if(val_from_buffer(&mkey, item)) { goto failiter; } /* val_from_buffer sets exception */ self->key = mkey; if(_cursor_get_c(self, MDB_SET_KEY)) { goto failiter; } done = false; while (!done) { if(! self->positioned) { done = true; } else if(_cursor_get_c(self, get_op)) { goto failiter; } else { key = obj_from_val(&self->key, as_buffer); PRELOAD_UNLOCKED(0, self->val.mv_data, self->val.mv_size); if(!arg.dupfixed_bytes) { /* Not dupfixed, MDB_GET_CURRENT returns single item */ val = obj_from_val(&self->val, as_buffer); tup = PyTuple_New(2); if (tup && key && val) { PyTuple_SET_ITEM(tup, 0, key); PyTuple_SET_ITEM(tup, 1, val); PyList_Append(pylist, tup); Py_DECREF(tup); } else { Py_DECREF(key); Py_DECREF(val); Py_DECREF(tup); } } else { /* dupfixed, MDB_GET_MULTIPLE returns batch, iterate values */ int items = (int) self->val.mv_size/val_size; if (first) { key_size = (size_t) self->key.mv_size; item_size = key_size + val_size; if (arg.keyfixed) { /* Init structured array buffer */ buffer = malloc(buffer_size * item_size); } first = false; } for(i=0; ival.mv_data + (i * val_size); if (arg.keyfixed) { /* Add to array buffer */ char *k, *v; if (buffer_pos >= buffer_size) { // Grow buffer buffer_size = buffer_size * 2; buffer = realloc(buffer, buffer_size * item_size); } k = buffer + (buffer_pos * item_size); v = k + key_size; memcpy(k, (char *) self->key.mv_data, key_size); memcpy(v, val_data, val_size); buffer_pos++; } else { /* Add to list of tuples */ if(as_buffer) { val = PyMemoryView_FromMemory( val_data, (size_t) arg.dupfixed_bytes, PyBUF_READ); } else { val = PyBytes_FromStringAndSize( val_data, (size_t) arg.dupfixed_bytes); } tup = PyTuple_New(2); if (tup && key && val) { Py_INCREF(key); // Hold key in loop PyTuple_SET_ITEM(tup, 0, key); PyTuple_SET_ITEM(tup, 1, val); PyList_Append(pylist, tup); Py_DECREF(tup); } else { Py_DECREF(val); Py_DECREF(tup); } } } Py_DECREF(key); // Release key } if(arg.dupdata){ if(_cursor_get_c(self, next_op)) { goto failiter; } } else { done = true; } } } Py_DECREF(item); } Py_DECREF(iter); if(PyErr_Occurred()) { goto fail; } if (arg.keyfixed){ int rc; Py_buffer pybuf; size_t newsize = buffer_pos * item_size; buffer = realloc(buffer, newsize); rc = PyBuffer_FillInfo(&pybuf, NULL, buffer, newsize, 0, PyBUF_SIMPLE); // FIXME: check rc return PyMemoryView_FromBuffer(&pybuf); } else { return pylist; } failiter: Py_DECREF(item); Py_DECREF(iter); fail: if (buffer) { free(buffer); } return NULL; } /** * Cursor.get() -> result */ static PyObject * cursor_get(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_get { MDB_val key; PyObject *default_; } arg = {{0, 0}, Py_None}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_get, key)}, {"default", ARG_OBJ, OFFSET(cursor_get, default_)} }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! arg.key.mv_data) { return type_error("key must be given."); } self->key = arg.key; if(_cursor_get_c(self, MDB_SET_KEY)) { return NULL; } if(! self->positioned) { Py_INCREF(arg.default_); return arg.default_; } return cursor_value(self); } /** * Cursor.item() -> (key, value) */ static PyObject * cursor_item(CursorObject *self) { int as_buffer; PyObject *key; PyObject *val; PyObject *tup; int rc = 0; if(! self->valid) { return err_invalid(); } /* Must refresh `key` and `val` following mutation. */ if(self->last_mutation != self->trans->mutations && _cursor_get_c(self, MDB_GET_CURRENT)) { return NULL; } as_buffer = self->trans->flags & TRANS_BUFFERS; key = obj_from_val(&self->key, as_buffer); PRELOAD_UNLOCKED(rc, self->val.mv_data, self->val.mv_size); val = obj_from_val(&self->val, as_buffer); tup = PyTuple_New(2); if(tup && key && val) { PyTuple_SET_ITEM(tup, 0, key); PyTuple_SET_ITEM(tup, 1, val); return tup; } Py_CLEAR(key); Py_CLEAR(val); Py_CLEAR(tup); return NULL; } /** * Cursor.key() -> result */ static PyObject * cursor_key(CursorObject *self) { if(! self->valid) { return err_invalid(); } /* Must refresh `key` and `val` following mutation. */ if(self->last_mutation != self->trans->mutations && _cursor_get_c(self, MDB_GET_CURRENT)) { return NULL; } return obj_from_val(&self->key, self->trans->flags & TRANS_BUFFERS); } /** * Cursor.last() -> bool */ static PyObject * cursor_last(CursorObject *self) { return _cursor_get(self, MDB_LAST); } /** * Cursor.last_dup() -> bool */ static PyObject * cursor_last_dup(CursorObject *self) { return _cursor_get(self, MDB_LAST_DUP); } /** * Cursor.next() -> bool */ static PyObject * cursor_next(CursorObject *self) { return _cursor_get(self, MDB_NEXT); } /** * Cursor.next_dup() -> bool */ static PyObject * cursor_next_dup(CursorObject *self) { return _cursor_get(self, MDB_NEXT_DUP); } /** * Cursor.next_nodup() -> bool */ static PyObject * cursor_next_nodup(CursorObject *self) { return _cursor_get(self, MDB_NEXT_NODUP); } /** * Cursor.prev() -> bool */ static PyObject * cursor_prev(CursorObject *self) { return _cursor_get(self, MDB_PREV); } /** * Cursor.prev_dup() -> bool */ static PyObject * cursor_prev_dup(CursorObject *self) { return _cursor_get(self, MDB_PREV_DUP); } /** * Cursor.prev_nodup() -> bool */ static PyObject * cursor_prev_nodup(CursorObject *self) { return _cursor_get(self, MDB_PREV_NODUP); } /** * Cursor.putmulti(iter|dict) -> (consumed, added) */ static PyObject * cursor_put_multi(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_put { PyObject *items; int dupdata; int overwrite; int append; } arg = {Py_None, 1, 1, 0}; PyObject *iter; PyObject *item; static const struct argspec argspec[] = { {"items", ARG_OBJ, OFFSET(cursor_put, items)}, {"dupdata", ARG_BOOL, OFFSET(cursor_put, dupdata)}, {"overwrite", ARG_BOOL, OFFSET(cursor_put, overwrite)}, {"append", ARG_BOOL, OFFSET(cursor_put, append)} }; int flags; int rc; Py_ssize_t consumed; Py_ssize_t added; PyObject *ret = NULL; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } flags = 0; if(! arg.dupdata) { flags |= MDB_NODUPDATA; } if(! arg.overwrite) { flags |= MDB_NOOVERWRITE; } if(arg.append) { flags |= (self->trans->db->flags & MDB_DUPSORT) ? MDB_APPENDDUP : MDB_APPEND; } if(! ((iter = PyObject_GetIter(arg.items)))) { return NULL; } consumed = 0; added = 0; while((item = PyIter_Next(iter))) { MDB_val mkey, mval; if(! (PyTuple_CheckExact(item) && PyTuple_GET_SIZE(item) == 2)) { PyErr_SetString(PyExc_TypeError, "putmulti() elements must be 2-tuples"); Py_DECREF(item); Py_DECREF(iter); return NULL; } if(val_from_buffer(&mkey, PyTuple_GET_ITEM(item, 0)) || val_from_buffer(&mval, PyTuple_GET_ITEM(item, 1))) { Py_DECREF(item); Py_DECREF(iter); return NULL; /* val_from_buffer sets exception */ } UNLOCKED(rc, mdb_cursor_put(self->curs, &mkey, &mval, flags)); self->trans->mutations++; switch(rc) { case MDB_SUCCESS: added++; break; case MDB_KEYEXIST: break; default: Py_DECREF(item); Py_DECREF(iter); return err_format(rc, "mdb_cursor_put() element #%d", consumed); } Py_DECREF(item); consumed++; } Py_DECREF(iter); if(! PyErr_Occurred()) { ret = Py_BuildValue("(nn)", consumed, added); } return ret; } /** * Cursor.put() -> bool */ static PyObject * cursor_put(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_put { MDB_val key; MDB_val val; int dupdata; int overwrite; int append; } arg = {{0, 0}, {0, 0}, 1, 1, 0}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_put, key)}, {"value", ARG_BUF, OFFSET(cursor_put, val)}, {"dupdata", ARG_BOOL, OFFSET(cursor_put, dupdata)}, {"overwrite", ARG_BOOL, OFFSET(cursor_put, overwrite)}, {"append", ARG_BOOL, OFFSET(cursor_put, append)} }; int flags; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } flags = 0; if(! arg.dupdata) { flags |= MDB_NODUPDATA; } if(! arg.overwrite) { flags |= MDB_NOOVERWRITE; } if(arg.append) { flags |= (self->trans->db->flags & MDB_DUPSORT) ? MDB_APPENDDUP : MDB_APPEND; } UNLOCKED(rc, mdb_cursor_put(self->curs, &arg.key, &arg.val, flags)); self->trans->mutations++; if(rc) { if(rc == MDB_KEYEXIST) { Py_RETURN_FALSE; } return err_set("mdb_put", rc); } Py_RETURN_TRUE; } /** * Shared between Cursor.replace() and Transaction.replace() */ static PyObject * do_cursor_replace(CursorObject *self, MDB_val *key, MDB_val *val) { int rc = 0; PyObject *old; MDB_val newval = *val; if(self->dbi_flags & MDB_DUPSORT) { self->key = *key; if(_cursor_get_c(self, MDB_SET_KEY)) { return NULL; } if(self->positioned) { PRELOAD_UNLOCKED(rc, self->val.mv_data, self->val.mv_size); if(! ((old = obj_from_val(&self->val, 0)))) { return NULL; } UNLOCKED(rc, mdb_cursor_del(self->curs, MDB_NODUPDATA)); self->trans->mutations++; if(rc) { Py_CLEAR(old); return err_set("mdb_cursor_del", rc); } } else { old = Py_None; Py_INCREF(old); } } else { /* val is updated if MDB_KEYEXIST. */ int flags = MDB_NOOVERWRITE; UNLOCKED(rc, mdb_cursor_put(self->curs, key, val, flags)); self->trans->mutations++; if(! rc) { Py_RETURN_NONE; } else if(rc != MDB_KEYEXIST) { return err_set("mdb_put", rc); } if(! ((old = obj_from_val(val, 0)))) { return NULL; } } UNLOCKED(rc, mdb_cursor_put(self->curs, key, &newval, 0)); if(rc) { Py_DECREF(old); return err_set("mdb_put", rc); } return old; } /** * Cursor.replace() -> None|result */ static PyObject * cursor_replace(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_replace { MDB_val key; MDB_val val; } arg = {{0, 0}, {0, 0}}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_replace, key)}, {"value", ARG_BUF, OFFSET(cursor_replace, val)} }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } return do_cursor_replace(self, &arg.key, &arg.val); } /** * Cursor.pop() -> None|result */ static PyObject * cursor_pop(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_pop { MDB_val key; } arg = {{0, 0}}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_pop, key)}, }; PyObject *old; int rc = 0; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } self->key = arg.key; if(_cursor_get_c(self, MDB_SET_KEY)) { return NULL; } if(! self->positioned) { Py_RETURN_NONE; } PRELOAD_UNLOCKED(rc, self->val.mv_data, self->val.mv_size); if(! ((old = obj_from_val(&self->val, 0)))) { return NULL; } UNLOCKED(rc, mdb_cursor_del(self->curs, 0)); self->trans->mutations++; if(rc) { Py_DECREF(old); return err_set("mdb_cursor_del", rc); } return old; } /** * Cursor.set_key(key) -> bool */ static PyObject * cursor_set_key(CursorObject *self, PyObject *arg) { if(! self->valid) { return err_invalid(); } if(val_from_buffer(&self->key, arg)) { return NULL; } return _cursor_get(self, MDB_SET_KEY); } /** * Cursor.set_key_dup(key, value) -> bool */ static PyObject * cursor_set_key_dup(CursorObject *self, PyObject *args, PyObject *kwds) { struct cursor_set_key_dup { MDB_val key; MDB_val value; } arg = {{0, 0}, {0, 0}}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_set_key_dup, key)}, {"value", ARG_BUF, OFFSET(cursor_set_key_dup, value)} }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } self->key = arg.key; self->val = arg.value; return _cursor_get(self, MDB_GET_BOTH); } /** * Cursor.set_range(key) -> bool */ static PyObject * cursor_set_range(CursorObject *self, PyObject *arg) { if(! self->valid) { return err_invalid(); } if(val_from_buffer(&self->key, arg)) { return NULL; } if(self->key.mv_size) { return _cursor_get(self, MDB_SET_RANGE); } return _cursor_get(self, MDB_FIRST); } /** * Cursor.set_range_dup(key, value) -> bool */ static PyObject * cursor_set_range_dup(CursorObject *self, PyObject *args, PyObject *kwds) { PyObject *ret; struct cursor_set_range_dup { MDB_val key; MDB_val value; } arg = {{0, 0}, {0, 0}}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_set_range_dup, key)}, {"value", ARG_BUF, OFFSET(cursor_set_range_dup, value)} }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } self->key = arg.key; self->val = arg.value; ret = _cursor_get(self, MDB_GET_BOTH_RANGE); /* issue #126: MDB_GET_BOTH_RANGE does not satisfy its documentation, and * fails to update `key` and `value` on success. Therefore explicitly call * MDB_GET_CURRENT after MDB_GET_BOTH_RANGE. */ _cursor_get_c(self, MDB_GET_CURRENT); return ret; } /** * Cursor.value() -> result */ static PyObject * cursor_value(CursorObject *self) { if(! self->valid) { return err_invalid(); } /* Must refresh `key` and `val` following mutation. */ if(self->last_mutation != self->trans->mutations && _cursor_get_c(self, MDB_GET_CURRENT)) { return NULL; } PRELOAD_UNLOCKED(0, self->val.mv_data, self->val.mv_size); return obj_from_val(&self->val, self->trans->flags & TRANS_BUFFERS); } static PyObject * new_iterator(CursorObject *cursor, IterValFunc val_func, MDB_cursor_op op) { IterObject *iter = PyObject_New(IterObject, &PyIterator_Type); if (!iter) { return NULL; } iter->val_func = val_func; iter->curs = cursor; Py_INCREF(cursor); iter->started = 0; iter->op = op; DEBUG("new_iterator: %p", (void *)iter) return (PyObject *) iter; } static PyObject * iter_from_args(CursorObject *self, PyObject *args, PyObject *kwds, signed int pos_op, enum MDB_cursor_op op, int keys_default, int values_default) { struct iter_from_args { int keys; int values; } arg = {keys_default, values_default}; static const struct argspec argspec[] = { {"keys", ARG_BOOL, OFFSET(iter_from_args, keys)}, {"values", ARG_BOOL, OFFSET(iter_from_args, values)} }; void *val_func; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(pos_op != -1 && !self->positioned) { if(_cursor_get_c(self, (enum MDB_cursor_op) pos_op)) { return NULL; } } if(! arg.values) { val_func = cursor_key; } else if(! arg.keys) { val_func = cursor_value; } else { val_func = cursor_item; } return new_iterator(self, val_func, op); } static PyObject * cursor_iter(CursorObject *self) { return iter_from_args(self, NULL, NULL, MDB_FIRST, MDB_NEXT, 1, 1); } /** * Cursor.iternext() -> Iterator */ static PyObject * cursor_iternext(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, MDB_FIRST, MDB_NEXT, 1, 1); } /** * Cursor.iternext_dup() -> Iterator */ static PyObject * cursor_iternext_dup(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, -1, MDB_NEXT_DUP, 0, 1); } /** * Cursor.iternext_nodup() -> Iterator */ static PyObject * cursor_iternext_nodup(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, MDB_FIRST, MDB_NEXT_NODUP, 1, 0); } /** * Cursor.iterprev() -> Iterator */ static PyObject * cursor_iterprev(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, MDB_LAST, MDB_PREV, 1, 1); } /** * Cursor.iterprev_dup() -> Iterator */ static PyObject * cursor_iterprev_dup(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, -1, MDB_PREV_DUP, 0, 1); } /** * Cursor.iterprev_nodup() -> Iterator */ static PyObject * cursor_iterprev_nodup(CursorObject *self, PyObject *args, PyObject *kwargs) { return iter_from_args(self, args, kwargs, MDB_LAST, MDB_PREV_NODUP, 1, 0); } /** * Cursor._iter_from() -> Iterator */ static PyObject * cursor_iter_from(CursorObject *self, PyObject *args) { struct cursor_iter_from { MDB_val key; int reverse; } arg = {{0, 0}, 0}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(cursor_iter_from, key)}, {"reverse", ARG_BOOL, OFFSET(cursor_iter_from, reverse)} }; enum MDB_cursor_op op; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, NULL, &arg)) { return NULL; } if((! arg.key.mv_size) && (! arg.reverse)) { rc = _cursor_get_c(self, MDB_FIRST); } else { self->key = arg.key; rc = _cursor_get_c(self, MDB_SET_RANGE); } if(rc) { return NULL; } op = MDB_NEXT; if(arg.reverse) { op = MDB_PREV; if(! self->positioned) { if(_cursor_get_c(self, MDB_LAST)) { return NULL; } } } DEBUG("positioned? %d", self->positioned) return new_iterator(self, (void *)cursor_item, op); } /** * Cursor.__enter__() */ static PyObject *cursor_enter(CursorObject *self) { Py_INCREF(self); return (PyObject *)self; } /** * Cursor.__exit__() */ static PyObject *cursor_exit(CursorObject *self, PyObject *args) { cursor_clear(self); Py_RETURN_NONE; } /** * Cursor.close() */ static PyObject *cursor_close(CursorObject *self) { cursor_clear(self); Py_RETURN_NONE; } static struct PyMethodDef cursor_methods[] = { {"__enter__", (PyCFunction)cursor_enter, METH_NOARGS}, {"__exit__", (PyCFunction)cursor_exit, METH_VARARGS}, {"close", (PyCFunction)cursor_close, METH_NOARGS}, {"count", (PyCFunction)cursor_count, METH_NOARGS}, {"delete", (PyCFunction)cursor_delete, METH_VARARGS|METH_KEYWORDS}, {"first", (PyCFunction)cursor_first, METH_NOARGS}, {"first_dup", (PyCFunction)cursor_first_dup, METH_NOARGS}, {"get", (PyCFunction)cursor_get, METH_VARARGS|METH_KEYWORDS}, {"getmulti", (PyCFunction)cursor_get_multi, METH_VARARGS|METH_KEYWORDS}, {"item", (PyCFunction)cursor_item, METH_NOARGS}, {"iternext", (PyCFunction)cursor_iternext, METH_VARARGS|METH_KEYWORDS}, {"iternext_dup", (PyCFunction)cursor_iternext_dup, METH_VARARGS|METH_KEYWORDS}, {"iternext_nodup", (PyCFunction)cursor_iternext_nodup, METH_VARARGS|METH_KEYWORDS}, {"iterprev", (PyCFunction)cursor_iterprev, METH_VARARGS|METH_KEYWORDS}, {"iterprev_dup", (PyCFunction)cursor_iterprev_dup, METH_VARARGS|METH_KEYWORDS}, {"iterprev_nodup", (PyCFunction)cursor_iterprev_nodup, METH_VARARGS|METH_KEYWORDS}, {"key", (PyCFunction)cursor_key, METH_NOARGS}, {"last", (PyCFunction)cursor_last, METH_NOARGS}, {"last_dup", (PyCFunction)cursor_last_dup, METH_NOARGS}, {"next", (PyCFunction)cursor_next, METH_NOARGS}, {"next_dup", (PyCFunction)cursor_next_dup, METH_NOARGS}, {"next_nodup", (PyCFunction)cursor_next_nodup, METH_NOARGS}, {"prev", (PyCFunction)cursor_prev, METH_NOARGS}, {"prev_dup", (PyCFunction)cursor_prev_dup, METH_NOARGS}, {"prev_nodup", (PyCFunction)cursor_prev_nodup, METH_NOARGS}, {"put", (PyCFunction)cursor_put, METH_VARARGS|METH_KEYWORDS}, {"putmulti", (PyCFunction)cursor_put_multi, METH_VARARGS|METH_KEYWORDS}, {"replace", (PyCFunction)cursor_replace, METH_VARARGS|METH_KEYWORDS}, {"pop", (PyCFunction)cursor_pop, METH_VARARGS|METH_KEYWORDS}, {"set_key", (PyCFunction)cursor_set_key, METH_O}, {"set_key_dup", (PyCFunction)cursor_set_key_dup, METH_VARARGS|METH_KEYWORDS}, {"set_range", (PyCFunction)cursor_set_range, METH_O}, {"set_range_dup", (PyCFunction)cursor_set_range_dup, METH_VARARGS|METH_KEYWORDS}, {"value", (PyCFunction)cursor_value, METH_NOARGS}, {"_iter_from", (PyCFunction)cursor_iter_from, METH_VARARGS}, {NULL, NULL} }; static PyTypeObject PyCursor_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Cursor", /*tp_name*/ sizeof(CursorObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) cursor_dealloc,/*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ (inquiry) cursor_clear, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ (getiterfunc)cursor_iter, /*tp_iter*/ 0, /*tp_iternext*/ cursor_methods, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ cursor_new, /*tp_new*/ 0, /*tp_free*/ }; /* --------- */ /* Iterators */ /* --------- */ /** * Iterator.__del__() */ static void iter_dealloc(IterObject *self) { DEBUG("destroying iterator") Py_CLEAR(self->curs); PyObject_Del(self); } /** * Iterator.__iter__() -> self */ static PyObject * iter_iter(IterObject *self) { Py_INCREF(self); return (PyObject *)self; } /** * Iterator.next() -> result */ static PyObject * iter_next(IterObject *self) { if(! self->curs->valid) { return err_invalid(); } if(! self->curs->positioned) { return NULL; } if(self->started) { if(_cursor_get_c(self->curs, self->op)) { return NULL; } if(! self->curs->positioned) { return NULL; } } self->started = 1; return self->val_func(self->curs); } static PyTypeObject PyIterator_Type = { PyVarObject_HEAD_INIT(NULL, 0) "_Iterator", /*tp_name*/ sizeof(IterObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) iter_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ (getiterfunc)iter_iter, /*tp_iter*/ (iternextfunc)iter_next, /*tp_iternext*/ 0, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ 0, /*tp_new*/ 0, /*tp_free*/ }; /* ------------ */ /* Transactions */ /* ------------ */ static void txn_abort(MDB_txn *self) { Py_BEGIN_ALLOW_THREADS MDEBUG("aborting") mdb_txn_abort(self); Py_END_ALLOW_THREADS } static int trans_clear(TransObject *self) { MDEBUG("clearing trans") INVALIDATE(self) #ifdef HAVE_MEMSINK ms_notify((PyObject *) self, &self->sink_head); #endif if(self->txn) { txn_abort(self->txn); self->txn = NULL; } MDEBUG("db is/was %p", self->db) Py_CLEAR(self->db); self->valid = 0; if(self->env) { UNLINK_CHILD(self->env, self) Py_CLEAR(self->env); } return 0; } /** * Transaction.__del__() */ static void trans_dealloc(TransObject *self) { MDB_txn * txn = self->txn; if(self->weaklist != NULL) { MDEBUG("Clearing weaklist..") PyObject_ClearWeakRefs((PyObject *) self); } if(txn && self->env && !self->env->spare_txn && (self->flags & TRANS_RDONLY)) { MDEBUG("caching trans") mdb_txn_reset(txn); self->env->spare_txn = txn; self->txn = NULL; } MDEBUG("deleting trans") trans_clear(self); PyObject_Del(self); } /** * Transaction(env, db) -> new instance. */ static PyObject * trans_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { struct trans_new { EnvObject *env; DbObject *db; TransObject *parent; int write; int buffers; } arg = {NULL, NULL, NULL, 0, 0}; static const struct argspec argspec[] = { {"env", ARG_ENV, OFFSET(trans_new, env)}, {"db", ARG_DB, OFFSET(trans_new, db)}, {"parent", ARG_TRANS, OFFSET(trans_new, parent)}, {"write", ARG_BOOL, OFFSET(trans_new, write)}, {"buffers", ARG_BOOL, OFFSET(trans_new, buffers)} }; static PyObject *cache = NULL; if(parse_args(1, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! arg.env) { return type_error("'env' argument required"); } return make_trans(arg.env, arg.db, arg.parent, arg.write, arg.buffers); } /** * Transaction.abort() */ static PyObject * trans_abort(TransObject *self) { if(self->valid) { DEBUG("invalidate") INVALIDATE(self) #ifdef HAVE_MEMSINK ms_notify((PyObject *) self, &self->sink_head); #endif if(self->flags & TRANS_RDONLY) { DEBUG("resetting") /* Reset to spare state, ready for _dealloc to freelist it. */ mdb_txn_reset(self->txn); self->flags |= TRANS_SPARE; } else { DEBUG("aborting") Py_BEGIN_ALLOW_THREADS mdb_txn_abort(self->txn); Py_END_ALLOW_THREADS self->txn = NULL; } self->valid = 0; } Py_RETURN_NONE; } /** * Transaction.commit() */ static PyObject * trans_commit(TransObject *self) { int rc; if(! self->valid) { return err_invalid(); } DEBUG("invalidate") INVALIDATE(self) #ifdef HAVE_MEMSINK ms_notify((PyObject *) self, &self->sink_head); #endif if(self->flags & TRANS_RDONLY) { DEBUG("resetting") /* Reset to spare state, ready for _dealloc to freelist it. */ mdb_txn_reset(self->txn); self->flags |= TRANS_SPARE; } else { DEBUG("committing") UNLOCKED(rc, mdb_txn_commit(self->txn)); self->txn = NULL; if(rc) { return err_set("mdb_txn_commit", rc); } } self->valid = 0; Py_RETURN_NONE; } /** * Transaction.cursor() -> Cursor */ static PyObject * trans_cursor(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_cursor { DbObject *db; } arg = {self->db}; static const struct argspec argspec[] = { {"db", ARG_DB, OFFSET(trans_cursor, db)} }; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } return make_cursor(arg.db, self); } /** * Transaction.delete() -> bool */ static PyObject * trans_delete(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_delete { MDB_val key; MDB_val val; DbObject *db; } arg = {{0, 0}, {0, 0}, self->db}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(trans_delete, key)}, {"value", ARG_BUF, OFFSET(trans_delete, val)}, {"db", ARG_DB, OFFSET(trans_delete, db)} }; MDB_val *val_ptr; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } val_ptr = arg.val.mv_size ? &arg.val : NULL; self->mutations++; UNLOCKED(rc, mdb_del(self->txn, arg.db->dbi, &arg.key, val_ptr)); if(rc) { if(rc == MDB_NOTFOUND) { Py_RETURN_FALSE; } return err_set("mdb_del", rc); } Py_RETURN_TRUE; } /** * Transaction.drop(db) */ static PyObject * trans_drop(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_drop { DbObject *db; int delete; } arg = {NULL, 1}; static const struct argspec argspec[] = { {"db", ARG_DB, OFFSET(trans_drop, db)}, {"delete", ARG_BOOL, OFFSET(trans_drop, delete)} }; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! arg.db) { return type_error("'db' argument required."); } else if(! db_owner_check(arg.db, self->env)) { return NULL; } UNLOCKED(rc, mdb_drop(self->txn, arg.db->dbi, arg.delete)); self->mutations++; if(rc) { return err_set("mdb_drop", rc); } Py_RETURN_NONE; } /** * Transaction.get() -> result */ static PyObject * trans_get(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_get { MDB_val key; PyObject *default_; DbObject *db; } arg = {{0, 0}, Py_None, self->db}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(trans_get, key)}, {"default", ARG_OBJ, OFFSET(trans_get, default_)}, {"db", ARG_DB, OFFSET(trans_get, db)} }; MDB_val val; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } if(! arg.key.mv_data) { return type_error("key must be given."); } Py_BEGIN_ALLOW_THREADS rc = mdb_get(self->txn, arg.db->dbi, &arg.key, &val); preload(rc, val.mv_data, val.mv_size); Py_END_ALLOW_THREADS if(rc) { if(rc == MDB_NOTFOUND) { Py_INCREF(arg.default_); return arg.default_; } return err_set("mdb_get", rc); } return obj_from_val(&val, self->flags & TRANS_BUFFERS); } /** * Transaction.put() -> bool */ static PyObject * trans_put(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_put { MDB_val key; MDB_val value; int dupdata; int overwrite; int append; DbObject *db; } arg = {{0, 0}, {0, 0}, 1, 1, 0, self->db}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(trans_put, key)}, {"value", ARG_BUF, OFFSET(trans_put, value)}, {"dupdata", ARG_BOOL, OFFSET(trans_put, dupdata)}, {"overwrite", ARG_BOOL, OFFSET(trans_put, overwrite)}, {"append", ARG_BOOL, OFFSET(trans_put, append)}, {"db", ARG_DB, OFFSET(trans_put, db)} }; int flags; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } flags = 0; if(! arg.dupdata) { flags |= MDB_NODUPDATA; } if(! arg.overwrite) { flags |= MDB_NOOVERWRITE; } if(arg.append) { flags |= MDB_APPEND; } DEBUG("inserting '%.*s' (%d) -> '%.*s' (%d)", (int)arg.key.mv_size, (char *)arg.key.mv_data, (int)arg.key.mv_size, (int)arg.value.mv_size, (char *)arg.value.mv_data, (int)arg.value.mv_size) self->mutations++; UNLOCKED(rc, mdb_put(self->txn, (arg.db)->dbi, &arg.key, &arg.value, flags)); if(rc) { if(rc == MDB_KEYEXIST) { Py_RETURN_FALSE; } return err_set("mdb_put", rc); } Py_RETURN_TRUE; } static PyObject * make_cursor(DbObject *db, TransObject *trans); static PyObject * do_cursor_replace(CursorObject *self, MDB_val *key, MDB_val *val); /** * Transaction.replace() -> None|result */ static PyObject * trans_replace(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_replace { MDB_val key; MDB_val value; DbObject *db; } arg = {{0, 0}, {0, 0}, self->db}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(trans_replace, key)}, {"value", ARG_BUF, OFFSET(trans_replace, value)}, {"db", ARG_DB, OFFSET(trans_replace, db)} }; PyObject *ret; CursorObject *cursor; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } ret = NULL; cursor = (CursorObject *) make_cursor(arg.db, self); if(cursor) { ret = do_cursor_replace(cursor, &arg.key, &arg.value); Py_DECREF(cursor); } return ret; } static int _cursor_get_c(CursorObject *self, enum MDB_cursor_op op); /** * Transaction.pop() -> None|result */ static PyObject * trans_pop(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_pop { MDB_val key; DbObject *db; } arg = {{0, 0}, self->db}; static const struct argspec argspec[] = { {"key", ARG_BUF, OFFSET(trans_pop, key)}, {"db", ARG_DB, OFFSET(trans_pop, db)} }; CursorObject *cursor; PyObject *old; int rc = 0; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } if(! ((cursor = (CursorObject *) make_cursor(arg.db, self)))) { return NULL; } cursor->key = arg.key; if(_cursor_get_c(cursor, MDB_SET_KEY)) { Py_DECREF((PyObject *)cursor); return NULL; } if(! cursor->positioned) { Py_DECREF((PyObject *)cursor); Py_RETURN_NONE; } PRELOAD_UNLOCKED(rc, cursor->val.mv_data, cursor->val.mv_size); if(! ((old = obj_from_val(&cursor->val, 0)))) { Py_DECREF((PyObject *)cursor); return NULL; } UNLOCKED(rc, mdb_cursor_del(cursor->curs, 0)); Py_DECREF((PyObject *)cursor); self->mutations++; if(rc) { Py_DECREF(old); return err_set("mdb_cursor_del", rc); } return old; } /** * Transaction.__enter__() */ static PyObject *trans_enter(TransObject *self) { if(! self->valid) { return err_invalid(); } Py_INCREF(self); return (PyObject *)self; } /** * Transaction.__exit__() */ static PyObject *trans_exit(TransObject *self, PyObject *args) { if(! self->valid) { return err_invalid(); } if(PyTuple_GET_ITEM(args, 0) == Py_None) { return trans_commit(self); } else { return trans_abort(self); } } /** * Transaction.id() -> int */ static PyObject *trans_id(TransObject *self) { size_t id; if(! self->valid) { return err_invalid(); } id = mdb_txn_id(self->txn); return PyLong_FromUnsignedLong(id); } /** * Transaction.stat() -> dict */ static PyObject * trans_stat(TransObject *self, PyObject *args, PyObject *kwds) { struct trans_stat { DbObject *db; } arg = {self->db}; static const struct argspec argspec[] = { {"db", ARG_DB, OFFSET(trans_stat, db)} }; MDB_stat st; int rc; static PyObject *cache = NULL; if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if(! db_owner_check(arg.db, self->env)) { return NULL; } UNLOCKED(rc, mdb_stat(self->txn, arg.db->dbi, &st)); if(rc) { return err_set("mdb_stat", rc); } return dict_from_fields(&st, mdb_stat_fields); } static struct PyMethodDef trans_methods[] = { {"__enter__", (PyCFunction)trans_enter, METH_NOARGS}, {"__exit__", (PyCFunction)trans_exit, METH_VARARGS}, {"abort", (PyCFunction)trans_abort, METH_NOARGS}, {"commit", (PyCFunction)trans_commit, METH_NOARGS}, {"cursor", (PyCFunction)trans_cursor, METH_VARARGS|METH_KEYWORDS}, {"delete", (PyCFunction)trans_delete, METH_VARARGS|METH_KEYWORDS}, {"drop", (PyCFunction)trans_drop, METH_VARARGS|METH_KEYWORDS}, {"get", (PyCFunction)trans_get, METH_VARARGS|METH_KEYWORDS}, {"put", (PyCFunction)trans_put, METH_VARARGS|METH_KEYWORDS}, {"replace", (PyCFunction)trans_replace, METH_VARARGS|METH_KEYWORDS}, {"pop", (PyCFunction)trans_pop, METH_VARARGS|METH_KEYWORDS}, {"id", (PyCFunction)trans_id, METH_NOARGS}, {"stat", (PyCFunction)trans_stat, METH_VARARGS|METH_KEYWORDS}, {NULL, NULL} }; static PyTypeObject PyTransaction_Type = { PyVarObject_HEAD_INIT(NULL, 0) "Transaction", /*tp_name*/ sizeof(TransObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) trans_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ (inquiry) trans_clear, /*tp_clear*/ 0, /*tp_richcompare*/ offsetof(TransObject, weaklist), /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ trans_methods, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ trans_new, /*tp_new*/ 0, /*tp_free*/ }; /** * Construct a PyString and append it to a list, returning 0 on success or -1 * on error. */ static int append_string(PyObject *list, const char *s) { #if PY_MAJOR_VERSION >= 3 PyObject *o = PyUnicode_FromString(s); #else PyObject *o = PyBytes_FromStringAndSize(s, strlen(s)); #endif if(! o) { return -1; } if(PyList_Append(list, o)) { Py_DECREF(o); return -1; } Py_DECREF(o); return 0; } /** * lmdb.enable_drop_gil() */ static PyObject * enable_drop_gil(void) { Py_RETURN_NONE; } /** * lmdb.get_version() -> tuple */ static PyObject * get_version(PyObject *mod, PyObject *args, PyObject *kwds) { struct version_args { int subpatch; } arg = {0}; static const struct argspec argspec[] = { {"subpatch", ARG_BOOL, OFFSET(version_args, subpatch)}, }; static PyObject *cache = NULL; if(parse_args(1, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { return NULL; } if (arg.subpatch) { #ifdef HAVE_PATCHED_LMDB const int subpatch = 1; #else const int subpatch = 0; #endif return Py_BuildValue("iiii", MDB_VERSION_MAJOR, MDB_VERSION_MINOR, MDB_VERSION_PATCH, subpatch); } return Py_BuildValue("iii", MDB_VERSION_MAJOR, MDB_VERSION_MINOR, MDB_VERSION_PATCH); } static struct PyMethodDef module_methods[] = { {"enable_drop_gil", (PyCFunction) enable_drop_gil, METH_NOARGS, ""}, {"version", (PyCFunction) get_version, METH_VARARGS|METH_KEYWORDS, ""}, {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "cpython", NULL, -1, module_methods, NULL, NULL, NULL, NULL }; #endif /** * Initialize and publish the LMDB built-in types. */ static int init_types(PyObject *mod, PyObject *__all__) { static PyTypeObject *types[] = { &PyEnvironment_Type, &PyCursor_Type, &PyTransaction_Type, &PyIterator_Type, &PyDatabase_Type, NULL }; int i; for(i = 0; types[i]; i++) { PyTypeObject *type = types[i]; char const * name = type->tp_name; if(PyType_Ready(type)) { return -1; } if(PyObject_SetAttrString(mod, name, (PyObject *)type)) { return -1; } /* As a special case, export _Database */ if((name[0] != '_' || 0 == strcmp(name, "_Database")) && append_string(__all__, name)) { return -1; } } return 0; } /** * Initialize a bunch of constants used to ease number compares. */ static int init_constants(PyObject *mod) { if(! ((py_zero = PyLong_FromUnsignedLongLong(0)))) { return -1; } if(! ((py_int_max = PyLong_FromUnsignedLongLong(INT_MAX)))) { return -1; } if(! ((py_size_max = PyLong_FromUnsignedLongLong(SIZE_MAX)))) { return -1; } return 0; } /** * Create lmdb.Error exception class, and one subclass for each entry in * `error_map`. */ static int init_errors(PyObject *mod, PyObject *__all__) { size_t count; char qualname[64]; size_t i; Error = PyErr_NewException("lmdb.Error", NULL, NULL); if(! Error) { return -1; } if(PyObject_SetAttrString(mod, "Error", Error)) { return -1; } if(append_string(__all__, "Error")) { return -1; } count = (sizeof error_map / sizeof error_map[0]); error_tbl = malloc(sizeof(PyObject *) * count); if(! error_tbl) { return -1; } for(i = 0; i < count; i++) { const struct error_map *error = &error_map[i]; PyObject *klass; snprintf(qualname, sizeof qualname, "lmdb.%s", error->name); qualname[sizeof qualname - 1] = '\0'; if(! ((klass = PyErr_NewException(qualname, Error, NULL)))) { return -1; } error_tbl[i] = klass; if(PyObject_SetAttrString(mod, error->name, klass)) { return -1; } if(append_string(__all__, error->name)) { return -1; } } return 0; } /** * Do all required to initialize the lmdb.cpython module. */ PyMODINIT_FUNC MODINIT_NAME(void) { PyObject *__all__; #if PY_MAJOR_VERSION >= 3 PyObject *mod = PyModule_Create(&moduledef); #else PyObject *mod = Py_InitModule3("cpython", module_methods, ""); #endif if(! mod) { MOD_RETURN(NULL); } if(! ((__all__ = PyList_New(0)))) { MOD_RETURN(NULL); } if(init_types(mod, __all__)) { MOD_RETURN(NULL); } if(append_string(__all__, "enable_drop_gil")) { MOD_RETURN(NULL); } if(append_string(__all__, "version")) { MOD_RETURN(NULL); } #ifdef HAVE_MEMSINK MemSink_IMPORT; if(ms_init_source(&PyTransaction_Type, offsetof(TransObject, sink_head))) { MOD_RETURN(NULL); } #endif #ifdef _WIN32 if(! ((msvcrt = PyImport_ImportModule("msvcrt")))) { MOD_RETURN(NULL); } #endif if(init_constants(mod)) { MOD_RETURN(NULL); } if(init_errors(mod, __all__)) { MOD_RETURN(NULL); } if(PyObject_SetAttrString(mod, "open", (PyObject *)&PyEnvironment_Type)) { MOD_RETURN(NULL); } if(PyObject_SetAttrString(mod, "__all__", __all__)) { MOD_RETURN(NULL); } Py_DECREF(__all__); MOD_RETURN(mod); } py-lmdb-py-lmdb_1.4.1/lmdb/tool.py000077500000000000000000000463331441346354400167760ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # """ Basic tools for working with LMDB. copy: Consistent high speed backup an environment. %prog copy -e source.lmdb target.lmdb copyfd: Consistent high speed backup an environment to stdout. %prog copyfd -e source.lmdb > target.lmdb/data.mdb drop: Delete one or more sub-databases. %prog drop db1 dump: Dump one or more databases to disk in 'cdbmake' format. Usage: dump [db1=file1.cdbmake db2=file2.cdbmake] If no databases are given, dumps the main database to 'main.cdbmake'. edit: Add/delete/replace values from a database. %prog edit --set key=value --set-file key=/path \\ --add key=value --add-file key=/path/to/file \\ --delete key get: Read one or more values from a database. %prog get [ [ [..]]] readers: Display readers in the lock table %prog readers -e /path/to/db [-c] If -c is specified, clear stale readers. restore: Read one or more database from disk in 'cdbmake' format. %prog restore db1=file1.cdbmake db2=file2.cdbmake The special db name ":main:" may be used to indicate the main DB. rewrite: Re-create an environment using MDB_APPEND %prog rewrite -e src.lmdb -E dst.lmdb [ [ ..]] If no databases are given, rewrites only the main database. shell: Open interactive console with ENV set to the open environment. stat: Print environment statistics. warm: Read environment into page cache sequentially. watch: Show live environment statistics """ from __future__ import absolute_import from __future__ import with_statement import array import collections import csv import functools import optparse import os import pprint import signal import string import struct import sys import time # Python3.x bikeshedded trechery. try: from io import BytesIO as StringIO except ImportError: try: from cStringIO import StringIO # type: ignore except ImportError: from StringIO import StringIO # type: ignore import lmdb BUF_SIZE = 10485760 ENV = None DB = None # How strings get encoded to and decoded from DB ENCODING = 'utf-8' def _to_bytes(s): """Given either a Python 2.x or 3.x str, return either a str (Python 2.x) or a bytes instance (Python 3.x).""" return globals().get('unicode', str)(s).encode(ENCODING) def isprint(c): """Return ``True`` if the character `c` can be printed visibly and without adversely affecting printing position (e.g. newline).""" return c in string.printable and ord(c) > 16 def xxd(s): """Return a vaguely /usr/bin/xxd formatted representation of the bytestring `s`.""" sio = StringIO() pr = _to_bytes('') for idx, ch in enumerate(s): if sys.version_info[0] >= 3: ch = chr(ch) if not (idx % 16): if idx: sio.write(_to_bytes(' ')) sio.write(pr) sio.write(_to_bytes('\n')) sio.write(_to_bytes('%07x:' % idx)) pr = _to_bytes('') if not (idx % 2): sio.write(_to_bytes(' ')) sio.write(_to_bytes('%02x' % (ord(ch),))) pr += _to_bytes(ch) if isprint(ch) else _to_bytes('.') if idx % 16: need = 15 - (idx % 16) # fill remainder of last line. sio.write(_to_bytes(' ') * need) sio.write(_to_bytes(' ') * (need // 2)) sio.write(_to_bytes(' ')) sio.write(pr) sio.write(_to_bytes('\n')) return sio.getvalue().decode(ENCODING) def make_parser(): parser = optparse.OptionParser() parser.prog = 'python -mlmdb' parser.usage = '%prog [options] \n' + __doc__.rstrip() parser.add_option('-e', '--env', help='Environment file to open') parser.add_option('-d', '--db', help='Database to open (default: main)') parser.add_option('-r', '--read', help='Open environment read-only') parser.add_option('-S', '--map_size', type='int', default='10', help='Map size in megabytes (default: 10)') parser.add_option('-s', '--use-single-file', action='store_true', help='The database was created as a single file and not a subdirectory') # FIXME: implement --all # parser.add_option('-a', '--all', action='store_true', # help='Make "dump" dump all databases') parser.add_option('-E', '--target_env', help='Target environment file for "dumpfd"') parser.add_option('-x', '--xxd', action='store_true', help='Print values in xxd format') parser.add_option('-M', '--max-dbs', type='int', default=128, help='Maximum open DBs (default: 128)') parser.add_option('--out-fd', type='int', default=1, help='"copyfd" command target fd') group = parser.add_option_group('Options for "copy" command') group.add_option('--compact', action='store_true', default=False, help='Perform compaction while copying.') group = parser.add_option_group('Options for "edit" command') group.add_option('--set', action='append', help='List of key=value pairs to set.') group.add_option('--set-file', action='append', help='List of key pairs to read from files.') group.add_option('--add', action='append', help='List of key=value pairs to add.') group.add_option('--add-file', action='append', help='List of key pairs to read from files.') group.add_option('--delete', action='append', help='List of key=value pairs to delete.') group = parser.add_option_group('Options for "readers" command') group.add_option('-c', '--clean', action='store_true', help='Clean stale readers? (default: no)') group = parser.add_option_group('Options for "watch" command') group.add_option('--csv', action='store_true', help='Generate CSV instead of terminal output.') group.add_option('--interval', type='int', default=1, help='Interval size (default: 1sec)') group.add_option('--window', type='int', default=10, help='Average window size (default: 10)') return parser def die(fmt, *args): if args: fmt %= args sys.stderr.write('lmdb.tool: %s\n' % (fmt,)) raise SystemExit(1) def dump_cursor_to_fp(cursor, fp): for key, value in cursor: fp.write(_to_bytes('+%d,%d:' % (len(key), len(value)))) fp.write(key) fp.write(_to_bytes('->')) fp.write(value) fp.write(_to_bytes('\n')) fp.write(_to_bytes('\n')) def db_map_from_args(args): db_map = {} for arg in args: dbname, sep, path = arg.partition('=') if not sep: die('DB specification missing "=": %r', arg) if dbname == ':main:': dbname = None if dbname in db_map: die('DB specified twice: %r', arg) db_map[dbname] = (ENV.open_db(_to_bytes(dbname) if dbname else None), path) if not db_map: db_map[':main:'] = (ENV.open_db(None), 'main.cdbmake') return db_map def cmd_copy(opts, args): if len(args) != 1: die('Please specify output directory (see --help)') output_dir = args[0] if os.path.exists(output_dir): die('Output directory %r already exists.', output_dir) os.makedirs(output_dir, int('0755', 8)) print('Running copy to %r....' % (output_dir,)) ENV.copy(output_dir, compact=opts.compact) def cmd_copyfd(opts, args): if args: die('"copyfd" command takes no arguments (see --help)') try: os.fdopen(opts.out_fd, 'w', 0) except OSError: e = sys.exc_info()[1] die('Bad --out-fd %d: %s', opts.out_fd, e) ENV.copyfd(opts.out_fd) def cmd_dump(opts, args): db_map = db_map_from_args(args) with ENV.begin(buffers=True) as txn: for dbname, (db, path) in db_map.items(): with open(path, 'wb', BUF_SIZE) as fp: print('Dumping to %r...' % (path,)) cursor = txn.cursor(db=db) dump_cursor_to_fp(cursor, fp) def restore_cursor_from_fp(txn, fp, db): read = fp.read read1 = functools.partial(read, 1) read_until = lambda sep: b''.join(iter(read1, sep)) # NOQA: E731 rec_nr = 0 while True: rec_nr += 1 plus = read(1) if plus == b'\n': break elif plus != b'+': die('bad or missing plus, line/record #%d', rec_nr) try: klen = int(read_until(b','), 10) dlen = int(read_until(b':'), 10) except ValueError: die('bad or missing length, line/record #%d', rec_nr) key = read(klen) if read(2) != b'->': die('bad or missing separator, line/record #%d', rec_nr) data = read(dlen) if (len(key) + len(data)) != (klen + dlen): die('short key or data, line/record #%d', rec_nr) if read(1) != b'\n': die('bad line ending, line/record #%d', rec_nr) txn.put(key, data, db=db) return rec_nr def cmd_drop(opts, args): if not args: die('Must specify at least one sub-database (see --help)') dbs = map(ENV.open_db, (map(_to_bytes, args))) for idx, db in enumerate(dbs): name = args[idx] if name == ':main:': die('Cannot drop main DB') print('Dropping DB %r...' % (name,)) with ENV.begin(write=True) as txn: txn.drop(db) def cmd_readers(opts, args): if opts.clean: print('Cleaned %d stale entries.' % (ENV.reader_check(),)) print(ENV.readers()) def cmd_restore(opts, args): db_map = db_map_from_args(args) with ENV.begin(buffers=True, write=True) as txn: for dbname, (db, path) in db_map.items(): with open(path, 'rb', BUF_SIZE) as fp: print('Restoring from %r...' % (path,)) count = restore_cursor_from_fp(txn, fp, db) print('Loaded %d keys from %r' % (count, path)) def delta(hst): return [(hst[i] - hst[i - 1]) for i in range(1, len(hst))] SYS_BLOCK = '/sys/block' def _find_diskstat(path): if not os.path.exists(SYS_BLOCK): return st = os.stat(path) devs = '%s:%s' % (st.st_dev >> 8, st.st_dev & 0xff) def maybe(rootpath): dpath = os.path.join(rootpath, 'dev') if os.path.exists(dpath): with open(dpath) as fp: if fp.read().strip() == devs: return os.path.join(rootpath, 'stat') for name in os.listdir(SYS_BLOCK): basepath = os.path.join(SYS_BLOCK, name) statpath = maybe(basepath) if statpath: return statpath for name in os.listdir(basepath): base2path = os.path.join(basepath, name) statpath = maybe(base2path) if statpath: return statpath class DiskStatter(object): FIELDS = ( 'reads', 'reads_merged', 'sectors_read', 'read_ms', 'writes', 'writes_merged', 'sectors_written', 'write_ms', 'io_count', 'io_ms', 'total_ms' ) def __init__(self, path): self.fp = open(path) self.refresh() def refresh(self): self.fp.seek(0) vars(self).update((self.FIELDS[i], int(s)) for i, s in enumerate(self.fp.read().split())) def cmd_watch(opts, args): info = None stat = None def window(func): history = collections.deque() def windowfunc(): history.append(func()) if len(history) > opts.window: history.popleft() if len(history) <= 1: return 0 n = sum(delta(history)) / float(len(history) - 1) return n / opts.interval return windowfunc envmb = lambda: (info['last_pgno'] * stat['psize']) / 1048576. # NOQA cols = [ ('%d', 'Depth', lambda: stat['depth']), ('%d', 'Branch', lambda: stat['branch_pages']), ('%d', 'Leaf', lambda: stat['leaf_pages']), ('%+d', 'Leaf/s', window(lambda: stat['leaf_pages'])), ('%d', 'Oflow', lambda: stat['overflow_pages']), ('%+d', 'Oflow/s', window(lambda: stat['overflow_pages'])), ('%d', 'Recs', lambda: stat['entries']), ('%+d', 'Recs/s', window(lambda: stat['entries'])), ('%d', 'Rdrs', lambda: info['num_readers']), ('%.2f', 'EnvMb', envmb), ('%+.2f', 'EnvMb/s', window(envmb)), ('%d', 'Txs', lambda: info['last_txnid']), ('%+.2f', 'Txs/s', window(lambda: info['last_txnid'])) ] statter = None statpath = _find_diskstat(ENV.path()) if statpath: statter = DiskStatter(statpath) cols += [ ('%+d', 'SctRd/s', window(lambda: statter.sectors_read)), ('%+d', 'SctWr/s', window(lambda: statter.sectors_written)), ] term_width = 0 widths = [len(head) for _, head, _ in cols] if opts.csv: writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) writer.writerow([head for _, head, _ in cols]) cnt = 0 try: while True: stat = ENV.stat() info = ENV.info() if statter: statter.refresh() vals = [] for i, (fmt, head, func) in enumerate(cols): val = fmt % func() vals.append(val) widths[i] = max(widths[i], len(val)) if opts.csv: writer.writerow(vals) else: if term_width != _TERM_WIDTH or not (cnt % (_TERM_HEIGHT - 2)): for i, (fmt, head, func) in enumerate(cols): sys.stdout.write(head.rjust(widths[i] + 1)) sys.stdout.write('\n') term_width = _TERM_WIDTH for i, val in enumerate(vals): sys.stdout.write(val.rjust(widths[i] + 1)) sys.stdout.write('\n') time.sleep(opts.interval) cnt += 1 except KeyboardInterrupt: pass def cmd_warm(opts, args): stat = ENV.stat() info = ENV.info() bufsize = 32768 last_offset = stat['psize'] * info['last_pgno'] buf = array.array('B', _to_bytes('\x00' * bufsize)) t0 = time.time() if opts.use_single_file: fp = open(opts.env, 'rb', bufsize) else: fp = open(opts.env + '/data.mdb', 'rb', bufsize) while fp.tell() < last_offset: fp.readinto(buf) print('Warmed %.2fmb in %dms' % (last_offset / 1048576., 1000 * (time.time() - t0))) def cmd_rewrite(opts, args): if not opts.target_env: die('Must specify target environment path with -E') src_info = ENV.info() target_env = lmdb.open(opts.target_env, map_size=src_info['map_size'] * 2, max_dbs=opts.max_dbs, sync=False, writemap=True, map_async=True, metasync=False) dbs = [] for arg in args: name = None if arg == ':main:' else arg src_db = ENV.open_db(_to_bytes(name)) dst_db = target_env.open_db(_to_bytes(name)) dbs.append((arg, src_db, dst_db)) if not dbs: dbs.append((':main:', ENV.open_db(None), target_env.open_db(None))) for name, src_db, dst_db in dbs: print('Writing %r...' % (name,)) with target_env.begin(db=dst_db, write=True) as wtxn: with ENV.begin(db=src_db, buffers=True) as rtxn: for key, value in rtxn.cursor(): wtxn.put(key, value, append=True) print('Syncing..') target_env.sync(True) def cmd_get(opts, args): print_header = len(args) > 1 with ENV.begin(buffers=True, db=DB) as txn: for arg in args: value = txn.get(_to_bytes(arg)) if value is None: print('%r: missing' % (arg,)) continue if print_header: print('%r:' % (arg,)) if opts.xxd: print(xxd(value)) else: print(bytes(value)) def cmd_edit(opts, args): if args: die('Edit command only takes options, not arguments (see --help)') with ENV.begin(write=True) as txn: cursor = txn.cursor(db=DB) for elem in opts.add or []: key, _, value = _to_bytes(elem).partition(_to_bytes('=')) cursor.put(key, value, overwrite=False) for elem in opts.set or []: key, _, value = _to_bytes(elem).partition(_to_bytes('=')) cursor.put(key, value) for key in opts.delete or []: txn.delete(_to_bytes(key), db=DB) for elem in opts.add_file or []: key, _, path = _to_bytes(elem).partition(_to_bytes('=')) with open(path, 'rb') as fp: cursor.put(key, fp.read(), overwrite=False) for elem in opts.set_file or []: key, _, path = _to_bytes(elem).partition(_to_bytes('=')) with open(path, 'rb') as fp: cursor.put(key, fp.read()) def cmd_shell(opts, args): import code import readline # NOQA code.InteractiveConsole(globals()).interact() def cmd_stat(opts, args): pprint.pprint(ENV.stat()) pprint.pprint(ENV.info()) def _get_term_width(default=(80, 25)): try: import fcntl # No fcntl on win32 import termios # No termios on win32 s = fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ, '1234') height, width = struct.unpack('hh', s) return width, height except Exception: return default def _on_sigwinch(*args): global _TERM_WIDTH, _TERM_HEIGHT _TERM_WIDTH, _TERM_HEIGHT = _get_term_width() def main(argv=None): parser = make_parser() opts, args = parser.parse_args(argv) if not args: die('Please specify a command (see --help)') if not opts.env: die('Please specify environment (--env)') global ENV ENV = lmdb.open(opts.env, map_size=opts.map_size * 1048576, subdir=not opts.use_single_file, max_dbs=opts.max_dbs, create=False, readonly=opts.read == 'READ') if opts.db: global DB DB = ENV.open_db(_to_bytes(opts.db)) if hasattr(signal, 'SIGWINCH'): # Disable on win32. signal.signal(signal.SIGWINCH, _on_sigwinch) _on_sigwinch() func = globals().get('cmd_' + args[0]) if not func: die('No such command: %r' % (args[0],)) func(opts, args[1:]) if __name__ == '__main__': main(sys.argv[1:]) py-lmdb-py-lmdb_1.4.1/misc/000077500000000000000000000000001441346354400154505ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/misc/cursor-del-break.c000066400000000000000000000041031441346354400207530ustar00rootroot00000000000000// http://www.openldap.org/its/index.cgi/Software%20Bugs?id=7722 // gcc -g -I src/py-lmdb/lib -o cursor-del-break cursor-del-break.c #include #include #include #include #include #include "lmdb.h" #include "mdb.c" #include "midl.c" void check(int x) { if(x) { fprintf(stderr, "eek %s\n", mdb_strerror(x)); _exit(1); } } #define RECS 2048 #define DB_PATH "/ram/tdb" MDB_dbi dbi; MDB_txn *txn; MDB_env *env; MDB_cursor *c1; char recpattern[256]; MDB_val keyv; MDB_val valv; void new_txn(void) { if(txn) { fprintf(stderr, "commit\n"); check(mdb_txn_commit(txn)); } check(mdb_txn_begin(env, NULL, 0, &txn)); } int main(void) { check(mdb_env_create(&env)); check(mdb_env_set_mapsize(env, 1048576UL*1024UL*3UL)); check(mdb_env_set_maxreaders(env, 126)); check(mdb_env_set_maxdbs(env, 1)); if(! access(DB_PATH, X_OK)) { system("rm -rf " DB_PATH); } check(mkdir(DB_PATH, 0777)); check(mdb_env_open(env, DB_PATH, MDB_MAPASYNC|MDB_NOSYNC|MDB_NOMETASYNC, 0644)); new_txn(); check(mdb_dbi_open(txn, NULL, 0, &dbi)); // make pattern int i; for(i = 0; i < sizeof recpattern; i++) { recpattern[i] = i % 256; } for(i = 0; i < RECS; i++) { char keybuf[40]; keyv.mv_size = sprintf(keybuf, "%08x", i); keyv.mv_data = keybuf; valv.mv_size = sizeof recpattern; valv.mv_data = recpattern; check(mdb_put(txn, dbi, &keyv, &valv, 0)); } new_txn(); check(mdb_cursor_open(txn, dbi, &c1)); check(mdb_cursor_get(c1, &keyv, &valv, MDB_FIRST)); check(mdb_del(txn, dbi, &keyv, NULL)); for(i = 1; i < RECS; i++) { check(mdb_cursor_get(c1, &keyv, &valv, MDB_NEXT)); char keybuf[40]; int sz = sprintf(keybuf, "%08x", i); check((!(sz==keyv.mv_size)) || memcmp(keyv.mv_data, keybuf, sz)); check(memcmp(valv.mv_data, recpattern, sizeof recpattern)); printf("%d\n", i); check(mdb_del(txn, dbi, &keyv, NULL)); } new_txn(); } py-lmdb-py-lmdb_1.4.1/misc/cursor-iter-bug.c000066400000000000000000000044321441346354400206500ustar00rootroot00000000000000// Demonstrates a bug introduced in upstream 0.9.27. Fixed in 0.9.29 // https://bugs.openldap.org/show_bug.cgi?id=9461 // gcc -g -I ../lib -o cursor-iter-bug cursor-iter-bug.c -lpthread // In a dupsort DB, deleting a value before where a cursor is set causes the // cursor to lose its place. mdb_cursor_get with MDB_NEXT will improperly // return the current value and not MDB_NOT_FOUND as is correct. #include #include #include #include #include #include #include "lmdb.h" #include "mdb.c" #include "midl.c" void check(int x) { if(x) { fprintf(stderr, "eek %s\n", mdb_strerror(x)); _exit(1); } } #define DB_PATH "tmp.lmdb" MDB_txn *txn; MDB_env *env; void new_txn(void) { if(txn) { fprintf(stderr, "commit\n"); check(mdb_txn_commit(txn)); } check(mdb_txn_begin(env, NULL, 0, &txn)); } int main(void) { MDB_dbi dbi; MDB_cursor *c1; MDB_val keyv; MDB_val valv; check(mdb_env_create(&env)); check(mdb_env_set_mapsize(env, 1048576UL*1024UL*3UL)); check(mdb_env_set_maxreaders(env, 126)); check(mdb_env_set_maxdbs(env, 2)); if(! access(DB_PATH, X_OK)) { system("rm -rf " DB_PATH); } check(mkdir(DB_PATH, 0777)); check(mdb_env_open(env, DB_PATH, MDB_MAPASYNC|MDB_NOSYNC|MDB_NOMETASYNC, 0644)); new_txn(); check(mdb_dbi_open(txn, "db", MDB_DUPSORT | MDB_CREATE, &dbi)); new_txn(); check(mdb_cursor_open(txn, dbi, &c1)); keyv.mv_size = 2; keyv.mv_data = "\x00\x01"; valv.mv_size = 4; valv.mv_data = "hehe"; check(mdb_cursor_put(c1, &keyv, &valv, 0)); keyv.mv_size = 2; keyv.mv_data = "\x00\x02"; valv.mv_size = 4; valv.mv_data = "haha"; check(mdb_cursor_put(c1, &keyv, &valv, 0)); check(mdb_cursor_get(c1, &keyv, &valv, MDB_SET_KEY)); check(mdb_cursor_get(c1, &keyv, &valv, MDB_GET_CURRENT)); assert(keyv.mv_size == 2); char * key = keyv.mv_data; assert(key[0] == 0 && key[1] == 2); keyv.mv_size = 2; keyv.mv_data = "\x00\x01"; check(mdb_del(txn, dbi, &keyv, NULL)); int rc = mdb_cursor_get(c1, &keyv, &valv, MDB_NEXT); // Below assertion fails in LMDB 0.9.27 and LMDB 0.9.28 (and passes in 0.9.26) assert(rc == MDB_NOTFOUND); new_txn(); } py-lmdb-py-lmdb_1.4.1/misc/cursor_put_pyparse.diff000066400000000000000000000020041441346354400222460ustar00rootroot00000000000000diff --git a/lmdb/cpython.c b/lmdb/cpython.c index dd1c8b9..ced5ea3 100644 --- a/lmdb/cpython.c +++ b/lmdb/cpython.c @@ -2319,11 +2319,25 @@ cursor_put(CursorObject *self, PyObject *args, PyObject *kwds) {ARG_BOOL, OVERWRITE_S, OFFSET(cursor_put, overwrite)}, {ARG_BOOL, APPEND_S, OFFSET(cursor_put, append)} }; + static char *keywords[] = { + "key", "value", "dupdata", "overwrite", "append", NULL + }; + PyObject *key, *val; int flags; int rc; static PyObject *cache = NULL; - if(parse_args(self->valid, SPECSIZE(), argspec, &cache, args, kwds, &arg)) { + if(! self->valid) { + return err_invalid(); + } + if(! PyArg_ParseTupleAndKeywords(args, kwds, "OO|iii", keywords, + &key, &val, &arg.dupdata, &arg.overwrite, + &arg.append)) { + return NULL; + } + + if(val_from_buffer(&arg.key, key) || + val_from_buffer(&arg.val, val)) { return NULL; } py-lmdb-py-lmdb_1.4.1/misc/gdb.commands000066400000000000000000000005611441346354400177310ustar00rootroot00000000000000# vim:syntax=gdb # # Print a backtrace if a program crashes. Run using: # gdb -x misc/gdb.commands --args argv0 argv1 .. # set confirm off define hook-stop init-if-undefined $_exitcode = 999 if $_exitcode == 999 echo Abnormal stop.\n backtrace quit 2 else echo Normal exit.\n quit $_exitcode end end run py-lmdb-py-lmdb_1.4.1/misc/its7733.c000066400000000000000000000027721441346354400167470ustar00rootroot00000000000000// http://www.openldap.org/its/index.cgi/Software%20Bugs?id=7733 // gcc -g -I ../lib -o its7733 its7733.c #include #include #include #include #include #include "lmdb.h" #include "mdb.c" #include "midl.c" void check(int x) { if(x) { fprintf(stderr, "eek %s\n", mdb_strerror(x)); _exit(1); } } #define DB_PATH "/ram/tdb" MDB_dbi dbi; MDB_txn *txn; MDB_env *env; MDB_cursor *c1; MDB_val keyv; MDB_val valv; void new_txn(void) { if(txn) { fprintf(stderr, "commit\n"); check(mdb_txn_commit(txn)); } check(mdb_txn_begin(env, NULL, 0, &txn)); } void put(const char *k) { keyv.mv_size = strlen(k); keyv.mv_data = k; valv.mv_size = 0; valv.mv_data = ""; check(mdb_put(txn, dbi, &keyv, &valv, 0)); } int main(void) { check(mdb_env_create(&env)); check(mdb_env_set_mapsize(env, 1048576UL*1024UL*3UL)); check(mdb_env_set_maxreaders(env, 126)); check(mdb_env_set_maxdbs(env, 1)); if(! access(DB_PATH, X_OK)) { system("rm -rf " DB_PATH); } check(mkdir(DB_PATH, 0777)); check(mdb_env_open(env, DB_PATH, MDB_MAPASYNC|MDB_NOSYNC|MDB_NOMETASYNC, 0644)); new_txn(); check(mdb_dbi_open(txn, NULL, 0, &dbi)); put("a"); put("b"); put("baa"); put("d"); new_txn(); check(mdb_cursor_open(txn, dbi, &c1)); check(mdb_cursor_get(c1, &keyv, &valv, MDB_LAST)); check(mdb_cursor_del(c1, 0)); check(mdb_cursor_del(c1, 0)); new_txn(); } py-lmdb-py-lmdb_1.4.1/misc/readers_mrb_env.patch000066400000000000000000000032341441346354400216300ustar00rootroot00000000000000Store the address of the MDB_env structure that owns a reader in addition to its PID and TID, to allow multiple MDB_envs to be open on the same thread, since on mdb_env_close(), LMDB unconditionally obliterates any readers with a matching PID. This patch extends the test to (PID, MDB_env*). diff --git a/lib/mdb.c b/lib/mdb.c index fd0a3b5..f2ebdfa 100644 --- a/lib/mdb.c +++ b/lib/mdb.c @@ -536,6 +536,8 @@ typedef struct MDB_rxbody { txnid_t mrb_txnid; /** The process ID of the process owning this reader txn. */ MDB_PID_T mrb_pid; + /** MDB_env within the process owning this reader txn. */ + void * mrb_env; /** The thread ID of the thread owning this txn. */ pthread_t mrb_tid; } MDB_rxbody; @@ -547,6 +549,7 @@ typedef struct MDB_reader { /** shorthand for mrb_txnid */ #define mr_txnid mru.mrx.mrb_txnid #define mr_pid mru.mrx.mrb_pid +#define mr_env mru.mrx.mrb_env #define mr_tid mru.mrx.mrb_tid /** cache line alignment */ char pad[(sizeof(MDB_rxbody)+CACHELINE-1) & ~(CACHELINE-1)]; @@ -2285,6 +2288,7 @@ mdb_txn_renew0(MDB_txn *txn) return MDB_READERS_FULL; } ti->mti_readers[i].mr_pid = pid; + ti->mti_readers[i].mr_env = env; ti->mti_readers[i].mr_tid = tid; if (i == nr) ti->mti_numreaders = ++nr; @@ -4254,7 +4258,8 @@ mdb_env_close0(MDB_env *env, int excl) * me_txkey with its destructor must be disabled first. */ for (i = env->me_numreaders; --i >= 0; ) - if (env->me_txns->mti_readers[i].mr_pid == pid) + if (env->me_txns->mti_readers[i].mr_pid == pid + && env->me_txns->mti_readers[i].mr_env == env) env->me_txns->mti_readers[i].mr_pid = 0; #ifdef _WIN32 if (env->me_rmutex) { py-lmdb-py-lmdb_1.4.1/misc/run_in_vm.py000066400000000000000000000051651441346354400200250ustar00rootroot00000000000000# # Copyright 2014 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import import atexit import json import os import shutil import socket import subprocess import sys import tempfile def run(*args): if os.path.exists('build'): shutil.rmtree('build') try: subprocess.check_call(args) except: print '!!! COMMAND WAS:', args raise def qmp_write(fp, o): buf = json.dumps(o) + '\n' fp.write(buf.replace('{', '{ ')) def qmp_read(fp): s = fp.readline() return json.loads(s) def qmp_say_hello(fp): assert 'QMP' in qmp_read(fp) qmp_write(fp, {'execute': 'qmp_capabilities'}) assert qmp_read(fp)['return'] == {} def qmp_command(fp, name, args): qmp_write(fp, {'execute': name, 'arguments': args}) while True: o = qmp_read(fp) if 'return' not in o: print 'skip', o continue print 'cmd out', o return o['return'] def qmp_monitor(fp, cmd): return qmp_command(fp, 'human-monitor-command', { 'command-line': cmd }) def main(): vm = sys.argv[1] cmdline = sys.argv[2:] rsock, wsock = socket.socketpair() rfp = rsock.makefile('r+b', 1) qemu_path = '/usr/local/bin/qemu-system-x86_64' qemu_args = ['sudo', qemu_path, '-enable-kvm', '-m', '1024', '-qmp', 'stdio', '-nographic', '-S', '-vnc', '127.0.0.1:0', '-net', 'user,hostfwd=tcp:127.0.0.1:9422-:22', '-net', 'nic,model=virtio', '-drive', 'file=%s,if=virtio' % (vm,)] print ' '.join(qemu_args).replace('qmp', 'monitor') exit() proc = subprocess.Popen(qemu_args, stdin=wsock.fileno(), stdout=wsock.fileno() ) qmp_say_hello(rfp) assert '' == qmp_monitor(rfp, 'loadvm 1') assert '' == qmp_monitor(rfp, 'cont') import time time.sleep(100) qmp_monitor(rfp, 'quit') if __name__ == '__main__': main() py-lmdb-py-lmdb_1.4.1/misc/test_monster_acid_trace.diff000066400000000000000000000027451441346354400231760ustar00rootroot00000000000000diff --git a/tests/crash_test.py b/tests/crash_test.py index 1ac3b46..3785bd5 100644 --- a/tests/crash_test.py +++ b/tests/crash_test.py @@ -173,21 +173,43 @@ class MultiCursorDeleteTest(unittest.TestCase): c2.delete() assert next(c1f) == B('eeee') + def _trace(self, op, *args): + bits = [] + for arg in args: + if isinstance(arg, bytes): + bits.append(arg.encode('hex')) + elif isinstance(arg, bool): + bits.append(bytes(int(arg))) + self.fp.write('%s %s %s\n' % (self.idx, op, ' '.join(bits))) + def test_monster(self): # Generate predictable sequence of sizes. rand = random.Random() rand.seed(0) + self.fp = open('trace.out', 'w') + self._counter = 0 + self.idx = 0 + txn = self.env.begin(write=True) keys = [] for i in range(20000): key = B('%06x' % i) val = B('x' * rand.randint(76, 350)) + self._trace('put', key, val) assert txn.put(key, val) keys.append(key) + + iter_id = self._counter + self._counter += 1 + self._trace('iter', iter_id, '0', False) + deleted = 0 for key in txn.cursor().iternext(values=False): + self._trace('fetch', iter_id) + self._trace('yield', iter_id, key, '') + self._trace('delete', key) assert txn.delete(key), key deleted += 1 py-lmdb-py-lmdb_1.4.1/setup.py000066400000000000000000000166761441346354400162470ustar00rootroot00000000000000# # Copyright 2013-2020 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import from __future__ import with_statement import os import sys import shutil import platform from setuptools import Extension from setuptools import setup try: import memsink except ImportError: memsink = None if hasattr(platform, 'python_implementation'): use_cpython = platform.python_implementation() == 'CPython' else: use_cpython = True if os.getenv('LMDB_FORCE_CFFI') is not None: use_cpython = False if sys.version[:3] < '2.7' or (3, 0) < sys.version_info[:2] < (3, 4): sys.stderr.write('Error: py-lmdb requires at least CPython 2.7 or 3.4\n') raise SystemExit(1) # # Figure out which LMDB implementation to use. # if os.getenv('LMDB_INCLUDEDIR'): extra_include_dirs = [os.getenv('LMDB_INCLUDEDIR')] else: extra_include_dirs = [] if os.getenv('LMDB_LIBDIR'): extra_library_dirs = [os.getenv('LMDB_LIBDIR')] else: extra_library_dirs = [] extra_include_dirs += ['lib/py-lmdb'] extra_compile_args = [] patch_lmdb_source = False if os.getenv('LMDB_FORCE_SYSTEM') is not None: print('py-lmdb: Using system version of liblmdb.') extra_sources = [] extra_include_dirs += [] libraries = ['lmdb'] elif os.getenv('LMDB_PURE') is not None: print('py-lmdb: Using bundled unmodified liblmdb; override with LMDB_FORCE_SYSTEM=1.') extra_sources = ['lib/mdb.c', 'lib/midl.c'] extra_include_dirs += ['lib'] libraries = [] else: print('py-lmdb: Using bundled liblmdb with py-lmdb patches; override with LMDB_FORCE_SYSTEM=1 or LMDB_PURE=1.') extra_sources = ['build/lib/mdb.c', 'build/lib/midl.c'] extra_include_dirs += ['build/lib'] extra_compile_args += ['-DHAVE_PATCHED_LMDB=1'] libraries = [] patch_lmdb_source = True if patch_lmdb_source: if sys.platform.startswith('win'): try: import patch_ng as patch except ImportError: raise Exception('Building py-lmdb from source on Windows requires the "patch-ng" python module.') # Clean out any previously patched files dest = 'build' + os.sep + 'lib' try: os.mkdir('build') except Exception: pass try: shutil.rmtree(dest) except Exception: pass shutil.copytree('lib', dest) # Copy away the lmdb source then patch it if sys.platform.startswith('win'): patchfile = 'lib' + os.sep + 'py-lmdb' + os.sep + 'env-copy-txn.patch' patchset = patch.fromfile(patchfile) rv = patchset.apply(3, root=dest) if not rv: raise Exception('Applying patch failed') else: rv = os.system('/usr/bin/patch -N -p3 -d build/lib < lib/py-lmdb/env-copy-txn.patch') if rv: raise Exception('Applying patch failed') # distutils perplexingly forces NDEBUG for package code! extra_compile_args += ['-UNDEBUG'] # Disable some Clang/GCC warnings. if not os.getenv('LMDB_MAINTAINER'): extra_compile_args += ['-w'] # Microsoft Visual Studio 9 ships with neither inttypes.h, stdint.h, or a sane # definition for ssize_t, so here we add lib/win32 to the search path, which # contains emulation header files provided by a third party. We force-include # Python.h everywhere since it has a portable definition of ssize_t, which # inttypes.h and stdint.h lack, and to avoid having to modify the LMDB source # code. Advapi32 is needed for LMDB's use of Windows security APIs. p = sys.version.find('MSC v.') msvc_ver = int(sys.version[p + 6: p + 10]) if p != -1 else None if sys.platform.startswith('win'): # If running on Visual Studio<=2010 we must provide . Newer # versions provide it out of the box. if msvc_ver and not msvc_ver >= 1600: extra_include_dirs += ['lib\\win32-stdint'] extra_include_dirs += ['lib\\win32'] extra_compile_args += [r'/FIPython.h'] libraries += ['Advapi32'] # Capture setup.py configuration for later use by cffi, otherwise the # configuration may differ, forcing a recompile (and therefore likely compile # errors). This happens even when `use_cpython` since user might want to # LMDB_FORCE_CFFI=1 during testing. with open('lmdb/_config.py', 'w') as fp: fp.write('CONFIG = dict(%r)\n\n' % (( ('extra_compile_args', extra_compile_args), ('extra_sources', extra_sources), ('extra_library_dirs', extra_library_dirs), ('extra_include_dirs', extra_include_dirs), ('libraries', libraries), ),)) if use_cpython: print('py-lmdb: Using CPython extension; override with LMDB_FORCE_CFFI=1.') install_requires = [] if memsink: extra_compile_args += ['-DHAVE_MEMSINK', '-I' + os.path.dirname(memsink.__file__)] ext_modules = [Extension( name='cpython', sources=['lmdb/cpython.c'] + extra_sources, extra_compile_args=extra_compile_args, libraries=libraries, include_dirs=extra_include_dirs, library_dirs=extra_library_dirs )] else: print('Using cffi extension.') install_requires = ['cffi>=0.8'] try: import lmdb.cffi ext_modules = [lmdb.cffi._ffi.verifier.get_extension()] except ImportError: sys.stderr.write('Could not import lmdb; ensure cffi is installed!\n') ext_modules = [] def grep_version(): path = os.path.join(os.path.dirname(__file__), 'lmdb/__init__.py') with open(path) as fp: for line in fp: if line.startswith('__version__'): return eval(line.split()[-1]) setup( name='lmdb', version=grep_version(), description="Universal Python binding for the LMDB 'Lightning' Database", long_description="Universal Python binding for the LMDB 'Lightning' Database", long_description_content_type="text/plain", author='David Wilson', maintainer='Nic Watson', license='OLDAP-2.8', url='http://github.com/jnwatson/py-lmdb/', packages=['lmdb'], classifiers=[ "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Topic :: Database", "Topic :: Database :: Database Engines/Servers", ], ext_package='lmdb', ext_modules=ext_modules, install_requires=install_requires, ) py-lmdb-py-lmdb_1.4.1/tests/000077500000000000000000000000001441346354400156575ustar00rootroot00000000000000py-lmdb-py-lmdb_1.4.1/tests/crash_test.py000066400000000000000000000250001441346354400203650ustar00rootroot00000000000000# # Copyright 2013-2021 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # # This is not a test suite! More like a collection of triggers for previously # observed crashes. Want to contribute to py-lmdb? Please write a test suite! # # what happens when empty keys/ values passed to various funcs # incorrect types # try to break cpython arg parsing - too many/few/incorrect args # Various efforts to cause Python-level leaks. # from __future__ import absolute_import from __future__ import with_statement import sys import itertools import random import unittest import multiprocessing import lmdb import testlib from testlib import B from testlib import O class CrashTest(unittest.TestCase): def tearDown(self): testlib.cleanup() # Various efforts to cause segfaults. def setUp(self): self.path, self.env = testlib.temp_env() with self.env.begin(write=True) as txn: txn.put(B('dave'), B('')) txn.put(B('dave2'), B('')) def testOldCrash(self): txn = self.env.begin() dir(iter(txn.cursor())) def testCloseWithTxn(self): txn = self.env.begin(write=True) self.env.close() self.assertRaises(Exception, (lambda: list(txn.cursor()))) def testDoubleClose(self): self.env.close() self.env.close() def testTxnCloseActiveIter(self): with self.env.begin() as txn: it = txn.cursor().iternext() self.assertRaises(Exception, (lambda: list(it))) def testDbCloseActiveIter(self): db = self.env.open_db(key=B('dave3')) with self.env.begin(write=True) as txn: txn.put(B('a'), B('b'), db=db) it = txn.cursor(db=db).iternext() self.assertRaises(Exception, (lambda: list(it))) class IteratorTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() self.txn = self.env.begin(write=True) self.c = self.txn.cursor() def testEmpty(self): self.assertEqual([], list(self.c)) self.assertEqual([], list(self.c.iternext())) self.assertEqual([], list(self.c.iterprev())) def testFilled(self): testlib.putData(self.txn) self.assertEqual(testlib.ITEMS, list(self.c)) self.assertEqual(testlib.ITEMS, list(self.c)) self.assertEqual(testlib.ITEMS, list(self.c.iternext())) self.assertEqual(testlib.ITEMS[::-1], list(self.txn.cursor().iterprev())) self.assertEqual(testlib.ITEMS[::-1], list(self.c.iterprev())) self.assertEqual(testlib.ITEMS, list(self.c)) def testFilledSkipForward(self): testlib.putData(self.txn) self.c.set_range(B('b')) self.assertEqual(testlib.ITEMS[1:], list(self.c)) def testFilledSkipReverse(self): testlib.putData(self.txn) self.c.set_range(B('b')) self.assertEqual(testlib.REV_ITEMS[-2:], list(self.c.iterprev())) def testFilledSkipEof(self): testlib.putData(self.txn) self.assertEqual(False, self.c.set_range(B('z'))) self.assertEqual(testlib.REV_ITEMS, list(self.c.iterprev())) class BigReverseTest(unittest.TestCase): def tearDown(self): testlib.cleanup() # Test for issue with MDB_LAST+MDB_PREV skipping chunks of database. def test_big_reverse(self): path, env = testlib.temp_env() txn = env.begin(write=True) keys = [B('%05d' % i) for i in range(0xffff)] for k in keys: txn.put(k, k, append=True) assert list(txn.cursor().iterprev(values=False)) == list(reversed(keys)) class MultiCursorDeleteTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() def test1(self): """Ensure MDB_NEXT is ignored on `c1' when it was previously positioned on the key that `c2' just deleted.""" txn = self.env.begin(write=True) cur = txn.cursor() while cur.first(): cur.delete() for i in range(1, 10): cur.put(O(ord('a') + i) * i, B('')) c1 = txn.cursor() c1f = c1.iternext(values=False) while next(c1f) != B('ddd'): pass c2 = txn.cursor() assert c2.set_key(B('ddd')) c2.delete() assert next(c1f) == B('eeee') def test_monster(self): # Generate predictable sequence of sizes. rand = random.Random() rand.seed(0) txn = self.env.begin(write=True) keys = [] for i in range(20000): key = B('%06x' % i) val = B('x' * rand.randint(76, 350)) assert txn.put(key, val) keys.append(key) deleted = 0 for key in txn.cursor().iternext(values=False): assert txn.delete(key), key deleted += 1 assert deleted == len(keys), deleted class TxnFullTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_17bf75b12eb94d9903cd62329048b146d5313bad(self): """ me_txn0 previously cached MDB_TXN_ERROR permanently. Fixed by 17bf75b12eb94d9903cd62329048b146d5313bad. """ path, env = testlib.temp_env(map_size=4096 * 9, sync=False, max_spare_txns=0) for i in itertools.count(): try: with env.begin(write=True) as txn: txn.put(B(str(i)), B(str(i))) except lmdb.MapFullError: break # Should not crash with MDB_BAD_TXN: with env.begin(write=True) as txn: txn.delete(B('1')) class EmptyIterTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_python3_iternext_segfault(self): # https://github.com/dw/py-lmdb/issues/105 _, env = testlib.temp_env() txn = env.begin() cur = txn.cursor() ite = cur.iternext() nex = getattr(ite, 'next', getattr(ite, '__next__', None)) assert nex is not None self.assertRaises(StopIteration, nex) class MultiputTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_multiput_segfault(self): # http://github.com/jnwatson/py-lmdb/issues/173 _, env = testlib.temp_env() db = env.open_db(b'foo', dupsort=True) txn = env.begin(db=db, write=True) txn.put(b'a', b'\x00\x00\x00\x00\x00\x00\x00\x00') txn.put(b'a', b'\x05') txn.put(b'a', b'\t') txn.put(b'a', b'\r') txn.put(b'a', b'\x11') txn.put(b'a', b'\x15') txn.put(b'a', b'\x19') txn.put(b'a', b'\x1d') txn.put(b'a', b'!') txn.put(b'a', b'%') txn.put(b'a', b')') txn.put(b'a', b'-') txn.put(b'a', b'1') txn.put(b'a', b'5') txn.commit() class InvalidArgTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_duplicate_arg(self): # https://github.com/jnwatson/py-lmdb/issues/203 _, env = testlib.temp_env() txn = env.begin(write=True) c = txn.cursor() self.assertRaises(TypeError, c.get, b'a', key=True) class BadCursorTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_cursor_open_failure(self): ''' Test the error path for when mdb_cursor_open fails Note: this only would crash if cpython is built with Py_TRACE_REFS ''' # https://github.com/jnwatson/py-lmdb/issues/216 path, env = testlib.temp_env() db = env.open_db(b'db', dupsort=True) env.close() del env env = lmdb.open(path, readonly=True, max_dbs=4) txn1 = env.begin(write=False) db = env.open_db(b'db', dupsort=True, txn=txn1) txn2 = env.begin(write=False) self.assertRaises(lmdb.InvalidParameterError, txn2.cursor, db=db) MINDBSIZE = 64 * 1024 * 2 # certain ppcle Linux distros have a 64K page size if sys.version_info[:2] >= (3, 4): class MapResizeTest(unittest.TestCase): def tearDown(self): testlib.cleanup() @staticmethod def do_resize(path): ''' Increase map size and fill up database, making sure that the root page is no longer accessible in the main process. ''' with lmdb.open(path, max_dbs=10, create=False, map_size=MINDBSIZE) as env: env.open_db(b'foo') env.set_mapsize(MINDBSIZE * 2) count = 0 try: # Figure out how many keyvals we can enter before we run out of space with env.begin(write=True) as txn: while True: datum = count.to_bytes(4, 'little') txn.put(datum, b'0') count += 1 except lmdb.MapFullError: # Now put (and commit) just short of that with env.begin(write=True) as txn: for i in range(count - 100): datum = i.to_bytes(4, 'little') txn.put(datum, b'0') else: assert 0 def test_opendb_resize(self): ''' Test that we correctly handle a MDB_MAP_RESIZED in env.open_db. Would seg fault in cffi implementation ''' mpctx = multiprocessing.get_context('spawn') path, env = testlib.temp_env(max_dbs=10, map_size=MINDBSIZE) env.close() env = lmdb.open(path, max_dbs=10, map_size=MINDBSIZE, readonly=True) proc = mpctx.Process(target=self.do_resize, args=(path,)) proc.start() proc.join(5) assert proc.exitcode is not None self.assertRaises(lmdb.MapResizedError, env.open_db, b'foo') if __name__ == '__main__': unittest.main() py-lmdb-py-lmdb_1.4.1/tests/cursor_test.py000066400000000000000000000257171441346354400206210ustar00rootroot00000000000000# # Copyright 2013-2021 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # # test delete(dupdata) from __future__ import absolute_import from __future__ import with_statement import sys import unittest import lmdb import testlib from testlib import B from testlib import BT class ContextManagerTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_ok(self): path, env = testlib.temp_env() txn = env.begin(write=True) with txn.cursor() as curs: curs.put(B('foo'), B('123')) self.assertRaises(Exception, lambda: curs.get(B('foo'))) def test_crash(self): path, env = testlib.temp_env() txn = env.begin(write=True) try: with txn.cursor() as curs: curs.put(123, 123) except Exception: pass self.assertRaises(Exception, lambda: curs.get(B('foo'))) class CursorTestBase(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() self.txn = self.env.begin(write=True) self.c = self.txn.cursor() class CursorTest(CursorTestBase): def testKeyValueItemEmpty(self): self.assertEqual(B(''), self.c.key()) self.assertEqual(B(''), self.c.value()) self.assertEqual(BT('', ''), self.c.item()) def testFirstLastEmpty(self): self.assertEqual(False, self.c.first()) self.assertEqual(False, self.c.last()) def testFirstFilled(self): testlib.putData(self.txn) self.assertEqual(True, self.c.first()) self.assertEqual(testlib.ITEMS[0], self.c.item()) def testLastFilled(self): testlib.putData(self.txn) self.assertEqual(True, self.c.last()) self.assertEqual(testlib.ITEMS[-1], self.c.item()) def testSetKey(self): self.assertRaises(Exception, (lambda: self.c.set_key(B('')))) self.assertEqual(False, self.c.set_key(B('missing'))) testlib.putData(self.txn) self.assertEqual(True, self.c.set_key(B('b'))) self.assertEqual(False, self.c.set_key(B('ba'))) def testSetRange(self): self.assertEqual(False, self.c.set_range(B('x'))) testlib.putData(self.txn) self.assertEqual(False, self.c.set_range(B('x'))) self.assertEqual(True, self.c.set_range(B('a'))) self.assertEqual(B('a'), self.c.key()) self.assertEqual(True, self.c.set_range(B('ba'))) self.assertEqual(B('baa'), self.c.key()) self.c.set_range(B('')) self.assertEqual(B('a'), self.c.key()) def testDeleteEmpty(self): self.assertEqual(False, self.c.delete()) def testDeleteFirst(self): testlib.putData(self.txn) self.assertEqual(False, self.c.delete()) self.c.first() self.assertEqual(BT('a', ''), self.c.item()) self.assertEqual(True, self.c.delete()) self.assertEqual(BT('b', ''), self.c.item()) self.assertEqual(True, self.c.delete()) self.assertEqual(BT('baa', ''), self.c.item()) self.assertEqual(True, self.c.delete()) self.assertEqual(BT('d', ''), self.c.item()) self.assertEqual(True, self.c.delete()) self.assertEqual(BT('', ''), self.c.item()) self.assertEqual(False, self.c.delete()) self.assertEqual(BT('', ''), self.c.item()) def testDeleteLast(self): testlib.putData(self.txn) self.assertEqual(True, self.c.last()) self.assertEqual(BT('d', ''), self.c.item()) self.assertEqual(True, self.c.delete()) self.assertEqual(BT('', ''), self.c.item()) self.assertEqual(False, self.c.delete()) self.assertEqual(BT('', ''), self.c.item()) def testCount(self): self.assertRaises(Exception, (lambda: self.c.count())) testlib.putData(self.txn) self.c.first() # TODO: complete dup key support. #self.assertEqual(1, self.c.count()) def testPut(self): pass class CursorTest2(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() self.db = self.env.open_db(b'foo', dupsort=True) self.txn = self.env.begin(write=True, db=self.db) self.c = self.txn.cursor() def testIterWithDeletes(self): ''' A problem identified in LMDB 0.9.27 ''' self.c.put(b'\x00\x01', b'hehe', dupdata=True) self.c.put(b'\x00\x02', b'haha', dupdata=True) self.c.set_key(b'\x00\x02') it = self.c.iternext() self.assertEqual((b'\x00\x02', b'haha'), next(it)) self.txn.delete(b'\x00\x01', b'hehe', db=self.db) self.assertRaises(StopIteration, next, it) class PutmultiTest(CursorTestBase): def test_empty_seq(self): consumed, added = self.c.putmulti(()) assert consumed == added == 0 def test_2list(self): l = [BT('a', ''), BT('a', '')] consumed, added = self.c.putmulti(l) assert consumed == added == 2 li = iter(l) consumed, added = self.c.putmulti(li) assert consumed == added == 2 def test_2list_preserve(self): l = [BT('a', ''), BT('a', '')] consumed, added = self.c.putmulti(l, overwrite=False) assert consumed == 2 assert added == 1 assert self.c.set_key(B('a')) assert self.c.delete() li = iter(l) consumed, added = self.c.putmulti(li, overwrite=False) assert consumed == 2 assert added == 1 def test_bad_seq1(self): self.assertRaises(Exception, lambda: self.c.putmulti(range(2))) def test_dupsort(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True) txn = env.begin(write=True, db=db1) with txn.cursor() as c: tups = [BT('a', 'value1'), BT('b', 'value1'), BT('b', 'value2')] assert (3, 3) == c.putmulti(tups) def test_dupsort_putmulti_append(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True) txn = env.begin(write=True, db=db1) with txn.cursor() as c: tups = [BT('a', 'value1'), BT('b', 'value1'), BT('b', 'value2')] assert (3, 3) == c.putmulti(tups, append=True) def test_dupsort_put_append(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True) txn = env.begin(write=True, db=db1) with txn.cursor() as c: assert c.put(B('a'), B('value1'), append=True) assert c.put(B('b'), B('value1'), append=True) assert c.put(B('b'), B('value2'), append=True) class ReplaceTest(CursorTestBase): def test_replace(self): assert None is self.c.replace(B('a'), B('')) assert B('') == self.c.replace(B('a'), B('x')) assert B('x') == self.c.replace(B('a'), B('y')) class ContextManagerTest2(CursorTestBase): def test_enter(self): with self.c as c: assert c is self.c c.put(B('a'), B('a')) assert c.get(B('a')) == B('a') self.assertRaises(Exception, lambda: c.get(B('a'))) def test_exit_success(self): with self.txn.cursor() as c: c.put(B('a'), B('a')) self.assertRaises(Exception, lambda: c.get(B('a'))) def test_exit_failure(self): try: with self.txn.cursor() as c: c.put(B('a'), B('a')) raise ValueError except ValueError: pass self.assertRaises(Exception, lambda: c.get(B('a'))) def test_close(self): self.c.close() self.assertRaises(Exception, lambda: c.get(B('a'))) def test_double_close(self): self.c.close() self.c.close() self.assertRaises(Exception, lambda: self.c.put(B('a'), B('a'))) GiB = 1024 * 1024 * 1024 class PreloadTest(CursorTestBase): def setUp(self, redo=False): env_args = {'writemap': True, 'map_size': GiB} if not redo: self.path, self.env = testlib.temp_env(**env_args) else: self.path, self.env = testlib.temp_env(path=self.path, **env_args) self.txn = self.env.begin(write=True) self.c = self.txn.cursor() @unittest.skipIf(not sys.platform.startswith('linux'), "test only works on Linux") def test_preload(self): """ Test that reading just the key doesn't prefault the value contents, but reading the data does. """ import resource self.c.put(B('a'), B('a') * (256 * 1024 * 1024)) self.txn.commit() self.env.close() # Just reading the data is obviously going to fault the value in. The # point is to fault it in while the GIL is unlocked. We use the buffers # API so that we're not actually copying the data in. This doesn't # actually show that we're prefaulting with the GIL unlocked, but it # does prove we prefault at all, and in 2 correct places. self.path, self.env = testlib.temp_env(path=self.path, writemap=True) self.txn = self.env.begin(write=True, buffers=True) self.c = self.txn.cursor() minflts_before = resource.getrusage(resource.RUSAGE_SELF)[6] self.c.set_key(B('a')) assert bytes(self.c.key()) == B('a') minflts_after_key = resource.getrusage(resource.RUSAGE_SELF)[6] self.c.value() minflts_after_value = resource.getrusage(resource.RUSAGE_SELF)[6] epsilon = 60 # Setting the position doesn't prefault the data assert minflts_after_key - minflts_before < epsilon # Getting the value does prefault the data, even if we only get it by pointer assert minflts_after_value - minflts_after_key > 1000 class CursorReadOnlyTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_cursor_readonly(self): ''' Tests whether you can open a cursor on a sub-db at all in a read-only environment. ''' path, env = testlib.temp_env(max_dbs=10) env.open_db(b'foo') env.close() with lmdb.open(path, max_dbs=10, readonly=True) as env: db2 = env.open_db(b'foo') with env.begin(db=db2) as txn: with txn.cursor(db=db2): pass if __name__ == '__main__': unittest.main() py-lmdb-py-lmdb_1.4.1/tests/env_test.py000066400000000000000000000667201441346354400200730ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import from __future__ import with_statement import os import sys import unittest import weakref import testlib from testlib import B from testlib import OCT from testlib import INT_TYPES from testlib import UnicodeType import lmdb # Whether we have the patch that allows env.copy* to take a txn have_txn_patch = lmdb.version(subpatch=True)[3] NO_READERS = UnicodeType('(no active readers)\n') try: PAGE_SIZE = os.sysconf(os.sysconf_names['SC_PAGE_SIZE']) except (AttributeError, KeyError, OSError): PAGE_SIZE = 4096 class VersionTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_version(self): ver = lmdb.version() assert len(ver) == 3 assert all(isinstance(i, INT_TYPES) for i in ver) assert all(i >= 0 for i in ver) def test_version_subpatch(self): ver = lmdb.version(subpatch=True) assert len(ver) == 4 assert all(isinstance(i, INT_TYPES) for i in ver) assert all(i >= 0 for i in ver) class OpenTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_bad_paths(self): self.assertRaises(Exception, lambda: lmdb.open('/doesnt/exist/at/all')) self.assertRaises(Exception, lambda: lmdb.open(testlib.temp_file())) def test_ok_path(self): path, env = testlib.temp_env() assert os.path.exists(path) assert os.path.exists(os.path.join(path, 'data.mdb')) assert os.path.exists(os.path.join(path, 'lock.mdb')) assert env.path() == path def test_bad_size(self): self.assertRaises(OverflowError, lambda: testlib.temp_env(map_size=-123)) def test_tiny_size(self): _, env = testlib.temp_env(map_size=10) def txn(): with env.begin(write=True) as txn: txn.put(B('a'), B('a')) self.assertRaises(lmdb.MapFullError, txn) def test_subdir_false_junk(self): path = testlib.temp_file() fp = open(path, 'wb') fp.write(B('A' * 8192)) fp.close() self.assertRaises(lmdb.InvalidError, lambda: lmdb.open(path, subdir=False)) def test_subdir_false_ok(self): path = testlib.temp_file(create=False) _, env = testlib.temp_env(path, subdir=False) assert os.path.exists(path) assert os.path.isfile(path) assert os.path.isfile(path + '-lock') assert not env.flags()['subdir'] def test_subdir_true_noexist_nocreate(self): path = testlib.temp_dir(create=False) self.assertRaises(lmdb.Error, lambda: testlib.temp_env(path, subdir=True, create=False)) assert not os.path.exists(path) def test_subdir_true_noexist_create(self): path = testlib.temp_dir(create=False) path_, env = testlib.temp_env(path, subdir=True, create=True) assert path_ == path assert env.path() == path def test_subdir_true_exist_nocreate(self): path, env = testlib.temp_env() assert lmdb.open(path, subdir=True, create=False).path() == path def test_subdir_true_exist_create(self): path, env = testlib.temp_env() assert lmdb.open(path, subdir=True, create=True).path() == path def test_readonly_false(self): path, env = testlib.temp_env(readonly=False) with env.begin(write=True) as txn: txn.put(B('a'), B('')) with env.begin() as txn: assert txn.get(B('a')) == B('') assert not env.flags()['readonly'] def test_readonly_true_noexist(self): path = testlib.temp_dir(create=False) # Open readonly missing store should fail. self.assertRaises(lmdb.Error, lambda: lmdb.open(path, readonly=True, create=True)) # And create=True should not have mkdir'd it. assert not os.path.exists(path) def test_readonly_true_exist(self): path, env = testlib.temp_env() env2 = lmdb.open(path, readonly=True) assert env2.path() == path # Attempting a write txn should fail. self.assertRaises(lmdb.ReadonlyError, lambda: env2.begin(write=True)) # Flag should be set. assert env2.flags()['readonly'] def test_metasync(self): for flag in True, False: path, env = testlib.temp_env(metasync=flag) assert env.flags()['metasync'] == flag def test_lock(self): for flag in True, False: path, env = testlib.temp_env(lock=flag) lock_path = os.path.join(path, 'lock.mdb') assert env.flags()['lock'] == flag assert flag == os.path.exists(lock_path) def test_sync(self): for flag in True, False: path, env = testlib.temp_env(sync=flag) assert env.flags()['sync'] == flag def test_map_async(self): for flag in True, False: path, env = testlib.temp_env(map_async=flag) assert env.flags()['map_async'] == flag def test_mode_subdir_create(self): if sys.platform == 'win32': # Mode argument is ignored on Windows; see lmdb.h return oldmask = os.umask(0) try: for mode in OCT('777'), OCT('755'), OCT('700'): path = testlib.temp_dir(create=False) env = lmdb.open(path, subdir=True, create=True, mode=mode) fmode = mode & ~OCT('111') assert testlib.path_mode(path) == mode assert testlib.path_mode(path+'/data.mdb') == fmode assert testlib.path_mode(path+'/lock.mdb') == fmode finally: os.umask(oldmask) def test_mode_subdir_nocreate(self): if sys.platform == 'win32': # Mode argument is ignored on Windows; see lmdb.h return oldmask = os.umask(0) try: for mode in OCT('777'), OCT('755'), OCT('700'): path = testlib.temp_dir() env = lmdb.open(path, subdir=True, create=False, mode=mode) fmode = mode & ~OCT('111') assert testlib.path_mode(path+'/data.mdb') == fmode assert testlib.path_mode(path+'/lock.mdb') == fmode finally: os.umask(oldmask) def test_readahead(self): for flag in True, False: path, env = testlib.temp_env(readahead=flag) assert env.flags()['readahead'] == flag def test_writemap(self): for flag in True, False: path, env = testlib.temp_env(writemap=flag) assert env.flags()['writemap'] == flag def test_meminit(self): for flag in True, False: path, env = testlib.temp_env(meminit=flag) assert env.flags()['meminit'] == flag def test_max_readers(self): self.assertRaises(lmdb.InvalidParameterError, lambda: testlib.temp_env(max_readers=0)) for val in 123, 234: _, env = testlib.temp_env(max_readers=val) assert env.info()['max_readers'] == val def test_max_dbs(self): self.assertRaises(OverflowError, lambda: testlib.temp_env(max_dbs=-1)) for val in 0, 10, 20: _, env = testlib.temp_env(max_dbs=val) dbs = [env.open_db(B('db%d' % i)) for i in range(val)] self.assertRaises(lmdb.DbsFullError, lambda: env.open_db(B('toomany'))) class SetMapSizeTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_invalid(self): _, env = testlib.temp_env() env.close() self.assertRaises(Exception, lambda: env.set_mapsize(999999)) def test_negative(self): _, env = testlib.temp_env() self.assertRaises(OverflowError, lambda: env.set_mapsize(-2015)) def test_applied(self): _, env = testlib.temp_env(map_size=PAGE_SIZE * 8) assert env.info()['map_size'] == PAGE_SIZE * 8 env.set_mapsize(PAGE_SIZE * 16) assert env.info()['map_size'] == PAGE_SIZE * 16 class CloseTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_close(self): _, env = testlib.temp_env() # Attempting things should be ok. txn = env.begin(write=True) txn.put(B('a'), B('')) cursor = txn.cursor() list(cursor) cursor.first() it = iter(cursor) env.close() # Repeated calls are ignored: env.close() # Attempting to use invalid objects should crash. self.assertRaises(Exception, lambda: txn.cursor()) self.assertRaises(Exception, lambda: txn.commit()) self.assertRaises(Exception, lambda: cursor.first()) self.assertRaises(Exception, lambda: list(it)) # Abort should be OK though. txn.abort() # Attempting to start new txn should crash. self.assertRaises(Exception, lambda: env.begin()) class ContextManagerTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_ok(self): path, env = testlib.temp_env() with env as env_: assert env_ is env with env.begin() as txn: txn.get(B('foo')) self.assertRaises(Exception, lambda: env.begin()) def test_crash(self): path, env = testlib.temp_env() try: with env as env_: assert env_ is env with env.begin() as txn: txn.get(123) except: pass self.assertRaises(Exception, lambda: env.begin()) class InfoMethodsTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_path(self): path, env = testlib.temp_env() assert path == env.path() assert isinstance(env.path(), UnicodeType) env.close() self.assertRaises(Exception, lambda: env.path()) def test_stat(self): _, env = testlib.temp_env() stat = env.stat() for k in 'psize', 'depth', 'branch_pages', 'overflow_pages',\ 'entries': assert isinstance(stat[k], INT_TYPES), k assert stat[k] >= 0 assert stat['entries'] == 0 txn = env.begin(write=True) txn.put(B('a'), B('b')) txn.commit() stat = env.stat() assert stat['entries'] == 1 env.close() self.assertRaises(Exception, lambda: env.stat()) def test_info(self): _, env = testlib.temp_env() info = env.info() for k in 'map_addr', 'map_size', 'last_pgno', 'last_txnid', \ 'max_readers', 'num_readers': assert isinstance(info[k], INT_TYPES), k assert info[k] >= 0 assert info['last_txnid'] == 0 txn = env.begin(write=True) txn.put(B('a'), B('')) txn.commit() info = env.info() assert info['last_txnid'] == 1 env.close() self.assertRaises(Exception, lambda: env.info()) def test_flags(self): _, env = testlib.temp_env() info = env.flags() for k in 'subdir', 'readonly', 'metasync', 'sync', 'map_async',\ 'readahead', 'writemap': assert isinstance(info[k], bool) env.close() self.assertRaises(Exception, lambda: env.flags()) def test_max_key_size(self): _, env = testlib.temp_env() mks = env.max_key_size() assert isinstance(mks, INT_TYPES) assert mks > 0 env.close() self.assertRaises(Exception, lambda: env.max_key_size()) def test_max_readers(self): _, env = testlib.temp_env() mr = env.max_readers() assert isinstance(mr, INT_TYPES) assert mr > 0 and mr == env.info()['max_readers'] env.close() self.assertRaises(Exception, lambda: env.max_readers()) def test_readers(self): _, env = testlib.temp_env(max_spare_txns=0) r = env.readers() assert isinstance(r, UnicodeType) assert r == NO_READERS rtxn = env.begin() r2 = env.readers() assert isinstance(env.readers(), UnicodeType) assert env.readers() != r env.close() self.assertRaises(Exception, lambda: env.readers()) class OtherMethodsTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_copy(self): _, env = testlib.temp_env() txn = env.begin(write=True) txn.put(B('a'), B('b')) txn.commit() dest_dir = testlib.temp_dir() if have_txn_patch: with env.begin() as txn: self.assertRaises(Exception, lambda: env.copy(dest_dir, txn=txn)) env.copy(dest_dir, compact=True) assert os.path.exists(dest_dir + '/data.mdb') cenv = lmdb.open(dest_dir) ctxn = cenv.begin() assert ctxn.get(B('a')) == B('b') env.close() self.assertRaises(Exception, lambda: env.copy(testlib.temp_dir())) def test_copy_compact(self): _, env = testlib.temp_env() txn = env.begin(write=True) txn.put(B('a'), B('b')) txn.commit() dest_dir = testlib.temp_dir() env.copy(dest_dir, compact=True) assert os.path.exists(dest_dir + '/data.mdb') cenv = lmdb.open(dest_dir) ctxn = cenv.begin() assert ctxn.get(B('a')) == B('b') # Test copy with transaction provided dest_dir = testlib.temp_dir() with env.begin(write=True) as txn: copy_txn = env.begin() txn.put(B('b'), B('b')) assert ctxn.get(B('b')) is None if have_txn_patch: env.copy(dest_dir, compact=True, txn=copy_txn) assert os.path.exists(dest_dir + '/data.mdb') cenv = lmdb.open(dest_dir) ctxn = cenv.begin() assert ctxn.get(B('a')) == B('b') # Verify that the write that occurred outside the txn isn't seen in the # copy assert ctxn.get(B('b')) is None else: self.assertRaises(Exception, lambda: env.copy(dest_dir, compact=True, txn=copy_txn)) env.close() self.assertRaises(Exception, lambda: env.copy(testlib.temp_dir())) def test_copyfd_compact(self): path, env = testlib.temp_env() txn = env.begin(write=True) txn.put(B('a'), B('b')) txn.commit() dst_path = testlib.temp_file(create=False) fp = open(dst_path, 'wb') env.copyfd(fp.fileno()) dstenv = lmdb.open(dst_path, subdir=False) dtxn = dstenv.begin() assert dtxn.get(B('a')) == B('b') fp.close() # Test copy with transaction provided dst_path = testlib.temp_file(create=False) fp = open(dst_path, 'wb') with env.begin(write=True) as txn: copy_txn = env.begin() txn.put(B('b'), B('b')) assert dtxn.get(B('b')) is None if have_txn_patch: env.copyfd(fp.fileno(), compact=True, txn=copy_txn) dstenv = lmdb.open(dst_path, subdir=False) dtxn = dstenv.begin() assert dtxn.get(B('a')) == B('b') # Verify that the write that occurred outside the txn isn't seen in the # copy assert dtxn.get(B('b')) is None dstenv.close() else: self.assertRaises(Exception, lambda: env.copyfd(fp.fileno(), compact=True, txn=copy_txn)) env.close() self.assertRaises(Exception, lambda: env.copyfd(fp.fileno())) fp.close() def test_copyfd(self): path, env = testlib.temp_env() txn = env.begin(write=True) txn.put(B('a'), B('b')) txn.commit() dst_path = testlib.temp_file(create=False) fp = open(dst_path, 'wb') if have_txn_patch: with env.begin() as txn: self.assertRaises(Exception, lambda: env.copyfd(fp.fileno(), txn=txn)) env.copyfd(fp.fileno()) dstenv = lmdb.open(dst_path, subdir=False) dtxn = dstenv.begin() assert dtxn.get(B('a')) == B('b') env.close() self.assertRaises(Exception, lambda: env.copyfd(fp.fileno())) fp.close() def test_sync(self): _, env = testlib.temp_env() env.sync(False) env.sync(True) env.close() self.assertRaises(Exception, lambda: env.sync(False)) @staticmethod def _test_reader_check_child(path): """Function to run in child process since we can't use fork() on win32.""" env = lmdb.open(path, max_spare_txns=0) txn = env.begin() os._exit(0) def test_reader_check(self): if sys.platform == 'win32': # Stale writers are cleared automatically on Windows, see lmdb.h return path, env = testlib.temp_env(max_spare_txns=0) rc = env.reader_check() assert rc == 0 # We need to open a separate env since Transaction.abort() always calls # reset for a read-only txn, the actual abort doesn't happen until # __del__, when Transaction discovers there is no room for it on the # freelist. env1 = lmdb.open(path) txn1 = env1.begin() assert env.readers() != NO_READERS assert env.reader_check() == 0 # Start a child, open a txn, then crash the child. rc = os.spawnl(os.P_WAIT, sys.executable, sys.executable, __file__, 'test_reader_check_child', path) assert rc == 0 assert env.reader_check() == 1 assert env.reader_check() == 0 assert env.readers() != NO_READERS txn1.abort() env1.close() assert env.readers() == NO_READERS env.close() self.assertRaises(Exception, lambda: env.reader_check()) class BeginTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_begin_closed(self): _, env = testlib.temp_env() env.close() self.assertRaises(Exception, lambda: env.begin()) def test_begin_readonly(self): _, env = testlib.temp_env() txn = env.begin() # Read txn can't write. self.assertRaises(lmdb.ReadonlyError, lambda: txn.put(B('a'), B(''))) txn.abort() def test_begin_write(self): _, env = testlib.temp_env() txn = env.begin(write=True) # Write txn can write. assert txn.put(B('a'), B('')) txn.commit() def test_bind_db(self): _, env = testlib.temp_env() main = env.open_db(None) self.assertRaises(ValueError, lambda: env.open_db(None, dupsort=True)) sub = env.open_db(B('db1')) txn = env.begin(write=True, db=sub) assert txn.put(B('b'), B('')) # -> sub assert txn.put(B('a'), B(''), db=main) # -> main txn.commit() txn = env.begin() assert txn.get(B('a')) == B('') assert txn.get(B('b')) is None assert txn.get(B('a'), db=sub) is None assert txn.get(B('b'), db=sub) == B('') txn.abort() def test_parent_readonly(self): _, env = testlib.temp_env() parent = env.begin() # Nonsensical. self.assertRaises(lmdb.InvalidParameterError, lambda: env.begin(parent=parent)) def test_parent(self): _, env = testlib.temp_env() parent = env.begin(write=True) parent.put(B('a'), B('a')) child = env.begin(write=True, parent=parent) assert child.get(B('a')) == B('a') assert child.put(B('a'), B('b')) child.abort() # put() should have rolled back assert parent.get(B('a')) == B('a') child = env.begin(write=True, parent=parent) assert child.put(B('a'), B('b')) child.commit() # put() should be visible assert parent.get(B('a')) == B('b') def test_buffers(self): _, env = testlib.temp_env() txn = env.begin(write=True, buffers=True) assert txn.put(B('a'), B('a')) b = txn.get(B('a')) assert b is not None assert len(b) == 1 assert not isinstance(b, type(B(''))) txn.commit() txn = env.begin(buffers=False) b = txn.get(B('a')) assert b is not None assert len(b) == 1 assert isinstance(b, type(B(''))) txn.abort() class OpenDbTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_main(self): _, env = testlib.temp_env() # Start write txn, so we cause deadlock if open_db attempts txn. txn = env.begin(write=True) # Now get main DBI, we should already be open. db = env.open_db(None) # w00t, no deadlock. flags = db.flags(txn) assert not flags['reverse_key'] assert not flags['dupsort'] txn.abort() def test_unicode(self): _, env = testlib.temp_env() assert env.open_db(B('myindex')) is not None self.assertRaises(TypeError, lambda: env.open_db(UnicodeType('myindex'))) def test_sub_notxn(self): _, env = testlib.temp_env() assert env.info()['last_txnid'] == 0 db1 = env.open_db(B('subdb1')) assert env.info()['last_txnid'] == 1 db2 = env.open_db(B('subdb2')) assert env.info()['last_txnid'] == 2 env.close() self.assertRaises(Exception, lambda: env.open_db('subdb3')) def test_sub_rotxn(self): _, env = testlib.temp_env() txn = env.begin(write=False) self.assertRaises(lmdb.ReadonlyError, lambda: env.open_db(B('subdb'), txn=txn)) def test_sub_txn(self): _, env = testlib.temp_env() txn = env.begin(write=True) db1 = env.open_db(B('subdb1'), txn=txn) db2 = env.open_db(B('subdb2'), txn=txn) for db in db1, db2: assert db.flags(txn) == { 'dupfixed': False, 'dupsort': False, 'integerdup': False, 'integerkey': False, 'reverse_key': False, } txn.commit() def test_reopen(self): path, env = testlib.temp_env() db1 = env.open_db(B('subdb1')) env.close() env = lmdb.open(path, max_dbs=10) db1 = env.open_db(B('subdb1')) FLAG_SETS = [ (flag, val) for flag in ( 'reverse_key', 'dupsort', 'integerkey', 'integerdup', 'dupfixed' ) for val in (True, False) ] def test_flags(self): path, env = testlib.temp_env() txn = env.begin(write=True) for flag, val in self.FLAG_SETS: key = B('%s-%s' % (flag, val)) db = env.open_db(key, txn=txn, **{flag: val}) assert db.flags(txn)[flag] == val assert db.flags(None)[flag] == val assert db.flags()[flag] == val self.assertRaises(TypeError, lambda: db.flags(1, 2, 3)) txn.commit() # Test flag persistence. env.close() env = lmdb.open(path, max_dbs=10) txn = env.begin(write=True) for flag, val in self.FLAG_SETS: key = B('%s-%s' % (flag, val)) db = env.open_db(key, txn=txn) assert db.flags(txn)[flag] == val def test_readonly_env_main(self): path, env = testlib.temp_env() env.close() env = lmdb.open(path, readonly=True) db = env.open_db(None) def test_readonly_env_sub_noexist(self): # https://github.com/dw/py-lmdb/issues/109 path, env = testlib.temp_env() env.close() env = lmdb.open(path, max_dbs=10, readonly=True) self.assertRaises(lmdb.NotFoundError, lambda: env.open_db(B('node_schedules'), create=False)) def test_readonly_env_sub_eperm(self): # https://github.com/dw/py-lmdb/issues/109 path, env = testlib.temp_env() env.close() env = lmdb.open(path, max_dbs=10, readonly=True) self.assertRaises(lmdb.ReadonlyError, lambda: env.open_db(B('node_schedules'), create=True)) def test_readonly_env_sub(self): # https://github.com/dw/py-lmdb/issues/109 path, env = testlib.temp_env() assert env.open_db(B('node_schedules')) is not None env.close() env = lmdb.open(path, max_dbs=10, readonly=True) db = env.open_db(B('node_schedules'), create=False) assert db is not None reader_count = lambda env: env.readers().count('\n') - 1 class SpareTxnTest(unittest.TestCase): def tearDown(self): testlib.cleanup() @unittest.skip('Temporarily removed this functionality') def test_none(self): _, env = testlib.temp_env(max_spare_txns=0) assert 0 == reader_count(env) t1 = env.begin() assert 1 == reader_count(env) t2 = env.begin() assert 2 == reader_count(env) t1.abort() del t1 assert 1 == reader_count(env) t2.abort() del t2 assert 0 == reader_count(env) def test_one(self): _, env = testlib.temp_env(max_spare_txns=1) # 1 here, since CFFI uses a temporary reader during init. assert 1 >= reader_count(env) t1 = env.begin() assert 1 == reader_count(env) t2 = env.begin() assert 2 == reader_count(env) t1.abort() del t1 assert 2 == reader_count(env) # 1 live, 1 cached t2.abort() del t2 assert 1 == reader_count(env) # 1 cached t3 = env.begin() assert 1 == reader_count(env) # 1 live t3.abort() del t3 assert 1 == reader_count(env) # 1 cached class LeakTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_open_unref_does_not_leak(self): temp_dir = testlib.temp_dir() env = lmdb.open(temp_dir) ref = weakref.ref(env) env = None testlib.debug_collect() assert ref() is None def test_open_close_does_not_leak(self): temp_dir = testlib.temp_dir() env = lmdb.open(temp_dir) env.close() ref = weakref.ref(env) env = None testlib.debug_collect() assert ref() is None def test_weakref_callback_invoked_once(self): temp_dir = testlib.temp_dir() env = lmdb.open(temp_dir) env.close() count = [0] def callback(ref): count[0] += 1 ref = weakref.ref(env, callback) env = None testlib.debug_collect() assert ref() is None assert count[0] == 1 if __name__ == '__main__': if len(sys.argv) > 1 and sys.argv[1] == 'test_reader_check_child': OtherMethodsTest._test_reader_check_child(sys.argv[2]) else: unittest.main() py-lmdb-py-lmdb_1.4.1/tests/getmulti_test.py000066400000000000000000000054151441346354400211270ustar00rootroot00000000000000from __future__ import absolute_import from __future__ import with_statement import unittest import testlib, struct from testlib import KEYSFIXED, ITEMS_MULTI_FIXEDKEY from testlib import putBigDataMultiFixed class GetMultiTestBase(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self, dupsort=None, dupfixed=None): self.db_key = "testdb".encode('utf-8') self.path, self.env = testlib.temp_env(max_dbs=1) self.txn = self.env.begin(write=True) self.db = self.env.open_db( key=self.db_key, txn=self.txn, dupsort=dupsort, dupfixed=dupfixed ) putBigDataMultiFixed(self.txn, db=self.db) self.c = self.txn.cursor(db=self.db) def matchList(self, ls_a, ls_b): return ((not (ls_a or ls_b)) or (ls_a and ls_b and all(map(lambda x, y: x == y, ls_a, ls_b)))) class GetMultiTestNoDupsortNoDupfixed(GetMultiTestBase): ITEMS2_MULTI_NODUP = ITEMS_MULTI_FIXEDKEY[1::2] def setUp(self, dupsort=False, dupfixed=False): super(GetMultiTestNoDupsortNoDupfixed, self).setUp(dupsort=dupsort, dupfixed=dupfixed) def testGetMulti(self): test_list = self.c.getmulti(KEYSFIXED) self.assertEqual(self.matchList(test_list, self.ITEMS2_MULTI_NODUP), True) class GetMultiTestDupsortNoDupfixed(GetMultiTestBase): def setUp(self, dupsort=True, dupfixed=False): super(GetMultiTestDupsortNoDupfixed, self).setUp(dupsort=dupsort, dupfixed=dupfixed) def testGetMulti(self): test_list = self.c.getmulti(KEYSFIXED, dupdata=True) self.assertEqual(self.matchList(test_list, ITEMS_MULTI_FIXEDKEY), True) class GetMultiTestDupsortDupfixed(GetMultiTestBase): def setUp(self, dupsort=True, dupfixed=True): super(GetMultiTestDupsortDupfixed, self).setUp(dupsort=dupsort, dupfixed=dupfixed) def testGetMulti(self): test_list = self.c.getmulti(KEYSFIXED, dupdata=True, dupfixed_bytes=1) self.assertEqual(self.matchList(test_list, ITEMS_MULTI_FIXEDKEY), True) class GetMultiTestDupsortDupfixedKeyfixed(GetMultiTestBase): def setUp(self, dupsort=True, dupfixed=True): super(GetMultiTestDupsortDupfixedKeyfixed, self).setUp(dupsort=dupsort, dupfixed=dupfixed) def testGetMulti(self): val_bytes = 1 arr = bytearray(self.c.getmulti( KEYSFIXED, dupdata=True, dupfixed_bytes=val_bytes, keyfixed=True )) asserts = [] for i, kv in enumerate(ITEMS_MULTI_FIXEDKEY): key, val = kv asserts.extend(( struct.pack('b', arr[i*2]) == key, struct.pack('b', arr[i*2+1]) == val )) self.assertEqual(all(asserts), True) if __name__ == '__main__': unittest.main()py-lmdb-py-lmdb_1.4.1/tests/iteration_test.py000066400000000000000000000211771441346354400212760ustar00rootroot00000000000000#! /usr/bin/env python # # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # # test delete(dupdata) from __future__ import absolute_import from __future__ import with_statement import unittest import testlib from testlib import B from testlib import BT from testlib import KEYS, ITEMS, KEYS2, ITEMS2 from testlib import putData, putBigData class IterationTestBase(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() # creates 10 databases self.txn = self.env.begin(write=True) putData(self.txn) self.c = self.txn.cursor() self.empty_entry = (B(''), B('')) def matchList(self, ls_a, ls_b): return all(map(lambda x, y: x == y, ls_a, ls_b)) class IterationTestBase2(unittest.TestCase): """ This puts more data than its predecessor""" def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() # creates 10 databases self.txn = self.env.begin(write=True) putBigData(self.txn) # HERE! self.c = self.txn.cursor() self.empty_entry = ('', '') def matchList(self, ls_a, ls_b): return all(map(lambda x, y: x == y, ls_a, ls_b)) class IterationTest(IterationTestBase): def testFromStart(self): # From start self.c.first() self.assertEqual(self.c.key(), KEYS[0]) # start of db test_list = [i for i in iter(self.c)] self.assertEqual(self.matchList(test_list, ITEMS), True) self.assertEqual(self.c.item(), self.empty_entry) # end of db def testFromStartWithIternext(self): # From start with iternext self.c.first() self.assertEqual(self.c.key(), KEYS[0]) # start of db test_list = [i for i in self.c.iternext()] # remaining elements in db self.assertEqual(self.matchList(test_list, ITEMS), True) self.assertEqual(self.c.item(), self.empty_entry) # end of db def testFromStartWithNext(self): # From start with next self.c.first() self.assertEqual(self.c.key(), KEYS[0]) # start of db test_list = [] while 1: test_list.append(self.c.item()) if not self.c.next(): break self.assertEqual(self.matchList(test_list, ITEMS), True) def testFromExistentKeySetKey(self): self.c.first() self.c.set_key(KEYS[1]) self.assertEqual(self.c.key(), KEYS[1]) test_list = [i for i in self.c.iternext()] self.assertEqual(self.matchList(test_list, ITEMS[1:]), True) def testFromExistentKeySetRange(self): self.c.first() self.c.set_range(KEYS[1]) self.assertEqual(self.c.key(), KEYS[1]) test_list = [i for i in self.c.iternext()] self.assertEqual(self.matchList(test_list, ITEMS[1:]), True) def testFromNonExistentKeySetRange(self): self.c.first() self.c.set_range(B('c')) self.assertEqual(self.c.key(), B('d')) test_list = [i for i in self.c.iternext()] test_items = [i for i in ITEMS if i[0] > B('c')] self.assertEqual(self.matchList(test_list, test_items), True) def testFromLastKey(self): self.c.last() self.assertEqual(self.c.key(), KEYS[-1]) test_list = [i for i in self.c.iternext()] self.assertEqual(self.matchList(test_list, ITEMS[-1:]), True) def testFromNonExistentKeyPastEnd(self): self.c.last() self.assertEqual(self.c.key(), KEYS[-1]) # next() fails, leaving iterator in an unpositioned state. self.c.next() self.assertEqual(self.c.item(), self.empty_entry) # iternext() from an unpositioned state proceeds from start of DB. test_list = list(self.c.iternext()) self.assertEqual(test_list, ITEMS) class ReverseIterationTest(IterationTestBase): def testFromStartRev(self): # From start self.c.first() self.assertEqual(self.c.key(), KEYS[0]) # start of db test_list = [i for i in self.c.iterprev()] self.assertEqual(self.matchList(test_list, ITEMS[:1][::-1]), True) self.assertEqual(self.c.item(), self.empty_entry) # very start of db def testFromExistentKeySetKeyRev(self): self.c.first() self.c.set_key(KEYS[2]) self.assertEqual(self.c.key(), KEYS[2]) test_list = [i for i in self.c.iterprev()] self.assertEqual(self.matchList(test_list, ITEMS[:3][::-1]), True) def testFromExistentKeySetRangeRev(self): self.c.first() self.c.set_range(KEYS[2]) self.assertEqual(self.c.key(), KEYS[2]) test_list = [i for i in self.c.iterprev()] self.assertEqual(self.matchList(test_list, ITEMS[:3][::-1]), True) def testFromNonExistentKeySetRangeRev(self): self.c.first() self.c.set_range(B('c')) self.assertEqual(self.c.key(), B('d')) test_list = [i for i in self.c.iterprev()] test_items = [i for i in ITEMS if i[0] <= B('d')] test_items = test_items[::-1] self.assertEqual(self.matchList(test_list, test_items), True) def testFromLastKeyRev(self): self.c.last() self.assertEqual(self.c.key(), KEYS[-1]) test_list = [i for i in self.c.iterprev()] self.assertEqual(self.matchList(test_list, ITEMS[::-1]), True) def testFromLastKeyWithPrevRev(self): self.c.last() self.assertEqual(self.c.key(), KEYS[-1]) # end of db test_list = [] while 1: test_list.append(self.c.item()) if not self.c.prev(): break self.assertEqual(self.matchList(test_list, ITEMS[::-1]), True) def testFromNonExistentKeyPastEndRev(self): self.c.first() self.assertEqual(self.c.key(), KEYS[0]) # prev() fails, leaving iterator in an unpositioned state. self.c.prev() self.assertEqual(self.c.item(), self.empty_entry) # iterprev() from an unpositioned state proceeds from end of DB. test_list = list(self.c.iterprev()) self.assertEqual(test_list, ITEMS[::-1]) class IterationTestWithDupsBase(unittest.TestCase): def tearDown(self): testlib.cleanup() def setUp(self): self.path, self.env = testlib.temp_env() db = self.env.open_db(B('db1'), dupsort=True) self.txn = self.env.begin(db, write=True) for _ in range(2): putData(self.txn) self.c = self.txn.cursor() self.empty_entry = ('', '') def matchList(self, ls_a, ls_b): return all(map(lambda x, y: x == y, ls_a, ls_b)) class IterationTestWithDups(IterationTestWithDupsBase): pass class SeekIterationTest(IterationTestBase2): def testForwardIterationSeek(self): self.c.first() test_list = [] for i in self.c.iternext(): test_list.append(i) # skips d and e if self.c.key() == B('baa'): self.c.set_key(B('e')) test_item = [i for i in ITEMS2 if i[0] not in (B('d'), B('e'))] self.assertEqual(test_list, test_item) def testPutDuringIteration(self): self.c.first() test_list = [] c = self.txn.cursor() for i in c.iternext(): test_list.append(i) # adds 'i' upon seeing 'e' if c.key() == B('e'): self.c.put(B('i'), B('')) test_item = ITEMS2 + [(B('i'), B(''))] self.assertEqual(test_list, test_item) def testDeleteDuringIteration(self): self.c.first() test_list = [] for i in self.c.iternext(): # deletes 'e' upon seeing it if self.c.key() == B('e'): # Causes 'e' to be deleted, and advances cursor to next # element. self.c.delete() i = self.c.item() test_list.append(i) test_item = [i for i in ITEMS2 if i[0] != B('e')] self.assertEqual(test_list, test_item) if __name__ == '__main__': unittest.main() py-lmdb-py-lmdb_1.4.1/tests/package_test.py000066400000000000000000000040121441346354400206600ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import import unittest import lmdb class PackageExportsTest(unittest.TestCase): """ Ensure the list of exported names matches a predefined list. Designed to ensure future interface changes to cffi.py and cpython.c don't break consistency of "from lmdb import *". """ def test_exports(self): assert sorted(lmdb.__all__) == [ 'BadDbiError', 'BadRslotError', 'BadTxnError', 'BadValsizeError', 'CorruptedError', 'Cursor', 'CursorFullError', 'DbsFullError', 'DiskError', 'Environment', 'Error', 'IncompatibleError', 'InvalidError', 'InvalidParameterError', 'KeyExistsError', 'LockError', 'MapFullError', 'MapResizedError', 'MemoryError', 'NotFoundError', 'PageFullError', 'PageNotFoundError', 'PanicError', 'ReadersFullError', 'ReadonlyError', 'TlsFullError', 'Transaction', 'TxnFullError', 'VersionMismatchError', '_Database', 'enable_drop_gil', 'version', ] py-lmdb-py-lmdb_1.4.1/tests/testlib.py000066400000000000000000000101551441346354400177010ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import import atexit import gc import os import shutil import stat import sys import tempfile import traceback import unittest try: import __builtin__ except ImportError: import builtins as __builtin__ import lmdb _cleanups = [] def cleanup(): while _cleanups: func = _cleanups.pop() try: func() except Exception: traceback.print_exc() atexit.register(cleanup) class LmdbTest(unittest.TestCase): def tearDown(self): cleanup() def temp_dir(create=True): path = tempfile.mkdtemp(prefix='lmdb_test') assert path is not None, 'tempfile.mkdtemp failed' if not create: os.rmdir(path) _cleanups.append(lambda: shutil.rmtree(path, ignore_errors=True)) if hasattr(path, 'decode'): path = path.decode(sys.getfilesystemencoding()) return path def temp_file(create=True): fd, path = tempfile.mkstemp(prefix='lmdb_test') assert path is not None, 'tempfile.mkstemp failed' os.close(fd) if not create: os.unlink(path) _cleanups.append(lambda: os.path.exists(path) and os.unlink(path)) pathlock = path + '-lock' _cleanups.append(lambda: os.path.exists(pathlock) and os.unlink(pathlock)) if hasattr(path, 'decode'): path = path.decode(sys.getfilesystemencoding()) return path def temp_env(path=None, max_dbs=10, **kwargs): if not path: path = temp_dir() env = lmdb.open(path, max_dbs=max_dbs, **kwargs) _cleanups.append(env.close) return path, env def path_mode(path): return stat.S_IMODE(os.stat(path).st_mode) def debug_collect(): if hasattr(gc, 'set_debug') and hasattr(gc, 'get_debug'): old = gc.get_debug() gc.set_debug(gc.DEBUG_LEAK) gc.collect() gc.set_debug(old) else: for x in range(10): # PyPy doesn't collect objects with __del__ on first attempt. gc.collect() UnicodeType = getattr(__builtin__, 'unicode', str) BytesType = getattr(__builtin__, 'bytes', str) try: INT_TYPES = (int, long) except NameError: INT_TYPES = (int,) # B(ascii 'string') -> bytes try: bytes('') # Python>=2.6, alias for str(). B = lambda s: s except TypeError: # Python3.x, requires encoding parameter. B = lambda s: bytes(s, 'ascii') # BL('s1', 's2') -> ['bytes1', 'bytes2'] BL = lambda *args: list(map(B, args)) # TS('s1', 's2') -> ('bytes1', 'bytes2') BT = lambda *args: tuple(B(s) for s in args) # O(int) -> length-1 bytes O = lambda arg: B(chr(arg)) # OCT(s) -> parse string as octal OCT = lambda s: int(s, 8) KEYS = BL('a', 'b', 'baa', 'd') ITEMS = [(k, B('')) for k in KEYS] REV_ITEMS = ITEMS[::-1] VALUES = [B('') for k in KEYS] KEYS2 = BL('a', 'b', 'baa', 'd', 'e', 'f', 'g', 'h') ITEMS2 = [(k, B('')) for k in KEYS2] REV_ITEMS2 = ITEMS2[::-1] VALUES2 = [B('') for k in KEYS2] KEYSFIXED = BL('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') VALUES_MULTI = [(B('r'), B('s')) for k in KEYSFIXED] ITEMS_MULTI_FIXEDKEY = [ (kv[0], v) for kv in list(zip(KEYSFIXED, VALUES_MULTI)) for v in kv[1] ] def _put_items(items, t, db=None): for k, v in items: if db: t.put(k, v, db=db) else: t.put(k, v) def putData(t, db=None): _put_items(ITEMS, t, db=db) def putBigData(t, db=None): _put_items(ITEMS2, t, db=db) def putBigDataMultiFixed(t, db=None): _put_items(ITEMS_MULTI_FIXEDKEY, t, db=db)py-lmdb-py-lmdb_1.4.1/tests/tool_test.py000066400000000000000000000031301441346354400202420ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import import sys import shlex import unittest import lmdb import lmdb.tool import testlib def call_tool(cmdline): if sys.platform == 'win32': args = cmdline.split() else: args = shlex.split(cmdline) return lmdb.tool.main(args) class ToolTest(testlib.LmdbTest): def test_cmd_get(self): frompath, env = testlib.temp_env() db = env.open_db(b'subdb') with env.begin(write=True, db=db) as txn: txn.put(b'foo', b'bar', db=db) env.close() call_tool('-d subdb get --env %s' % (frompath,)) def test_cmd_rewrite(self): frompath, env = testlib.temp_env() env.open_db(b'subdb') env.close() topath = testlib.temp_dir() call_tool('rewrite -e %s -E %s subdb' % (frompath, topath)) if __name__ == '__main__': unittest.main() py-lmdb-py-lmdb_1.4.1/tests/txn_test.py000066400000000000000000000407261441346354400201120ustar00rootroot00000000000000# # Copyright 2013 The py-lmdb authors, all rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted only as authorized by the OpenLDAP # Public License. # # A copy of this license is available in the file LICENSE in the # top-level directory of the distribution or, alternatively, at # . # # OpenLDAP is a registered trademark of the OpenLDAP Foundation. # # Individual files and/or contributed packages may be copyright by # other parties and/or subject to additional restrictions. # # This work also contains materials derived from public sources. # # Additional information about OpenLDAP can be obtained at # . # from __future__ import absolute_import from __future__ import with_statement import struct import unittest import weakref import testlib from testlib import B from testlib import INT_TYPES from testlib import BytesType import lmdb UINT_0001 = struct.pack('I', 1) UINT_0002 = struct.pack('I', 2) ULONG_0001 = struct.pack('L', 1) # L != size_t ULONG_0002 = struct.pack('L', 2) # L != size_t class InitTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_closed(self): _, env = testlib.temp_env() env.close() self.assertRaises(Exception, lambda: lmdb.Transaction(env)) def test_readonly(self): _, env = testlib.temp_env() txn = lmdb.Transaction(env) # Read txn can't write. self.assertRaises(lmdb.ReadonlyError, lambda: txn.put(B('a'), B(''))) txn.abort() def test_begin_write(self): _, env = testlib.temp_env() txn = lmdb.Transaction(env, write=True) # Write txn can write. assert txn.put(B('a'), B('')) txn.commit() def test_bind_db(self): _, env = testlib.temp_env() main = env.open_db(None) sub = env.open_db(B('db1')) txn = lmdb.Transaction(env, write=True, db=sub) assert txn.put(B('b'), B('')) # -> sub assert txn.put(B('a'), B(''), db=main) # -> main txn.commit() txn = lmdb.Transaction(env) assert txn.get(B('a')) == B('') assert txn.get(B('b')) is None assert txn.get(B('a'), db=sub) is None assert txn.get(B('b'), db=sub) == B('') txn.abort() def test_bind_db_methods(self): _, env = testlib.temp_env() maindb = env.open_db(None) db1 = env.open_db(B('d1')) txn = lmdb.Transaction(env, write=True, db=db1) assert txn.put(B('a'), B('d1')) assert txn.get(B('a'), db=db1) == B('d1') assert txn.get(B('a'), db=maindb) is None assert txn.replace(B('a'), B('d11')) == B('d1') assert txn.pop(B('a')) == B('d11') assert txn.put(B('a'), B('main'), db=maindb, overwrite=False) assert not txn.delete(B('a')) txn.abort() def test_parent_readonly(self): _, env = testlib.temp_env() parent = lmdb.Transaction(env) # Nonsensical. self.assertRaises(lmdb.InvalidParameterError, lambda: lmdb.Transaction(env, parent=parent)) def test_parent(self): _, env = testlib.temp_env() parent = lmdb.Transaction(env, write=True) parent.put(B('a'), B('a')) child = lmdb.Transaction(env, write=True, parent=parent) assert child.get(B('a')) == B('a') assert child.put(B('a'), B('b')) child.abort() # put() should have rolled back assert parent.get(B('a')) == B('a') child = lmdb.Transaction(env, write=True, parent=parent) assert child.put(B('a'), B('b')) child.commit() # put() should be visible assert parent.get(B('a')) == B('b') def test_buffers(self): _, env = testlib.temp_env() txn = lmdb.Transaction(env, write=True, buffers=True) assert txn.put(B('a'), B('a')) b = txn.get(B('a')) assert b is not None assert len(b) == 1 assert not isinstance(b, type(B(''))) txn.commit() txn = lmdb.Transaction(env, buffers=False) b = txn.get(B('a')) assert b is not None assert len(b) == 1 assert isinstance(b, type(B(''))) txn.abort() class ContextManagerTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_ok(self): path, env = testlib.temp_env() txn = env.begin(write=True) with txn as txn_: assert txn is txn_ txn.put(B('foo'), B('123')) self.assertRaises(Exception, lambda: txn.get(B('foo'))) with env.begin() as txn: assert txn.get(B('foo')) == B('123') def test_crash(self): path, env = testlib.temp_env() txn = env.begin(write=True) try: with txn as txn_: txn.put(B('foo'), B('123')) txn.put(123, 123) except: pass self.assertRaises(Exception, lambda: txn.get(B('foo'))) with env.begin() as txn: assert txn.get(B('foo')) is None class IdTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_readonly_new(self): _, env = testlib.temp_env() with env.begin() as txn: assert txn.id() == 0 def test_write_new(self): _, env = testlib.temp_env() with env.begin(write=True) as txn: assert txn.id() == 1 def test_readonly_after_write(self): _, env = testlib.temp_env() with env.begin(write=True) as txn: txn.put(B('a'), B('a')) with env.begin() as txn: assert txn.id() == 1 def test_invalid_txn(self): _, env = testlib.temp_env() txn = env.begin() txn.abort() self.assertRaises(Exception, lambda: txn.id()) class StatTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_stat(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1')) db2 = env.open_db(B('db2')) txn = lmdb.Transaction(env) for db in db1, db2: stat = txn.stat(db) for k in 'psize', 'depth', 'branch_pages', 'overflow_pages',\ 'entries': assert isinstance(stat[k], INT_TYPES), k assert stat[k] >= 0 assert stat['entries'] == 0 txn = lmdb.Transaction(env, write=True) txn.put(B('a'), B('b'), db=db1) txn.commit() txn = lmdb.Transaction(env) stat = txn.stat(db1) assert stat['entries'] == 1 stat = txn.stat(db2) assert stat['entries'] == 0 txn.abort() self.assertRaises(Exception, lambda: env.stat(db1)) env.close() self.assertRaises(Exception, lambda: env.stat(db1)) class DropTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_empty(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1')) txn = env.begin(write=True) txn.put(B('a'), B('a'), db=db1) assert txn.get(B('a'), db=db1) == B('a') txn.drop(db1, False) assert txn.get(B('a')) is None txn.drop(db1, False) # should succeed. assert txn.get(B('a')) is None def test_delete(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1')) txn = env.begin(write=True) txn.put(B('a'), B('a'), db=db1) txn.drop(db1) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.get(B('a'), db=db1)) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.drop(db1)) def test_double_delete(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1')) txn = env.begin(write=True, db=db1) txn.put(B('a'), B('a'), db=db1) txn.drop(db1) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.get(B('a'), db=db1)) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.drop(db1)) txn.commit() db1 = env.open_db(B('db1')) txn = env.begin(write=True, db=db1) txn.put(B('a'), B('a'), db=db1) txn.drop(db1) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.get(B('a'), db=db1)) self.assertRaises(lmdb.InvalidParameterError, lambda: txn.drop(db1)) txn.commit() class CommitTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_bad_txn(self): _, env = testlib.temp_env() txn = env.begin() txn.abort() self.assertRaises(Exception, lambda: txn.commit()) def test_bad_env(self): _, env = testlib.temp_env() txn = env.begin() env.close() self.assertRaises(Exception, lambda: txn.commit()) def test_commit_ro(self): _, env = testlib.temp_env() txn = env.begin() txn.commit() self.assertRaises(Exception, lambda: txn.commit()) def test_commit_rw(self): _, env = testlib.temp_env() txn = env.begin(write=True) assert txn.put(B('a'), B('a')) txn.commit() self.assertRaises(Exception, lambda: txn.commit()) txn = env.begin() assert txn.get(B('a')) == B('a') txn.abort() class AbortTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_abort_ro(self): _, env = testlib.temp_env() txn = env.begin() assert txn.get(B('a')) is None txn.abort() self.assertRaises(Exception, lambda: txn.get(B('a'))) env.close() self.assertRaises(Exception, lambda: txn.get(B('a'))) def test_abort_rw(self): _, env = testlib.temp_env() txn = env.begin(write=True) assert txn.put(B('a'), B('a')) txn.abort() txn = env.begin() assert txn.get(B('a')) is None class GetTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_bad_txn(self): _, env = testlib.temp_env() txn = env.begin() txn.abort() self.assertRaises(Exception, lambda: txn.get(B('a'))) def test_bad_env(self): _, env = testlib.temp_env() txn = env.begin() env.close() self.assertRaises(Exception, lambda: txn.get(B('a'))) def test_missing(self): _, env = testlib.temp_env() txn = env.begin() assert txn.get(B('a')) is None assert txn.get(B('a'), default='default') is 'default' def test_empty_key(self): _, env = testlib.temp_env() txn = env.begin() self.assertRaises(lmdb.BadValsizeError, lambda: txn.get(B(''))) def test_db(self): _, env = testlib.temp_env() maindb = env.open_db(None) db1 = env.open_db(B('db1')) txn = env.begin() assert txn.get(B('a'), db=db1) is None txn.abort() txn = env.begin(write=True) txn.put(B('a'), B('a'), db=db1) txn.commit() txn = env.begin() assert txn.get(B('a')) is None txn.abort() txn = env.begin(db=db1) assert txn.get(B('a')) == B('a') assert txn.get(B('a'), db=maindb) is None def test_buffers_no(self): _, env = testlib.temp_env() txn = env.begin(write=True) assert txn.put(B('a'), B('a')) assert type(txn.get(B('a'))) is BytesType def test_buffers_yes(self): _, env = testlib.temp_env() txn = env.begin(write=True, buffers=True) assert txn.put(B('a'), B('a')) assert type(txn.get(B('a'))) is not BytesType def test_dupsort(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True) txn = env.begin(write=True, db=db1) assert txn.put(B('a'), B('a')) assert txn.put(B('a'), B('b')) assert txn.get(B('a')) == B('a') def test_integerkey(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), integerkey=True) txn = env.begin(write=True, db=db1) assert txn.put(UINT_0001, B('a')) assert txn.put(UINT_0002, B('b')) assert txn.get(UINT_0001) == B('a') assert txn.get(UINT_0002) == B('b') def test_integerdup(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True, integerdup=True) txn = env.begin(write=True, db=db1) assert txn.put(UINT_0001, UINT_0002) assert txn.put(UINT_0001, UINT_0001) assert txn.get(UINT_0001) == UINT_0001 def test_dupfixed(self): _, env = testlib.temp_env() db1 = env.open_db(B('db1'), dupsort=True, dupfixed=True) txn = env.begin(write=True, db=db1) assert txn.put(B('a'), B('a')) assert txn.put(B('a'), B('b')) assert txn.get(B('a')) == B('a') class PutTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_bad_txn(self): _, env = testlib.temp_env() txn = env.begin(write=True) txn.abort() self.assertRaises(Exception, lambda: txn.put(B('a'), B('a'))) def test_bad_env(self): _, env = testlib.temp_env() txn = env.begin(write=True) env.close() self.assertRaises(Exception, lambda: txn.put(B('a'), B('a'))) def test_ro_txn(self): _, env = testlib.temp_env() txn = env.begin() self.assertRaises(lmdb.ReadonlyError, lambda: txn.put(B('a'), B('a'))) def test_empty_key_value(self): _, env = testlib.temp_env() txn = env.begin(write=True) self.assertRaises(lmdb.BadValsizeError, lambda: txn.put(B(''), B('a'))) def test_dupsort(self): _, env = testlib.temp_env() def test_dupdata_no_dupsort(self): _, env = testlib.temp_env() txn = env.begin(write=True) assert txn.put(B('a'), B('a'), dupdata=True) assert txn.put(B('a'), B('b'), dupdata=True) txn.get(B('a')) class ReplaceTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_bad_txn(self): _, env = testlib.temp_env() txn = env.begin(write=True) txn.abort() self.assertRaises(Exception, lambda: txn.replace(B('a'), B('a'))) def test_bad_env(self): _, env = testlib.temp_env() txn = env.begin(write=True) env.close() self.assertRaises(Exception, lambda: txn.replace(B('a'), B('a'))) def test_ro_txn(self): _, env = testlib.temp_env() txn = env.begin() self.assertRaises(lmdb.ReadonlyError, lambda: txn.replace(B('a'), B('a'))) def test_empty_key_value(self): _, env = testlib.temp_env() txn = env.begin(write=True) self.assertRaises(lmdb.BadValsizeError, lambda: txn.replace(B(''), B('a'))) def test_dupsort_noexist(self): _, env = testlib.temp_env() db = env.open_db(B('db1'), dupsort=True) txn = env.begin(write=True, db=db) assert None is txn.replace(B('a'), B('x')) assert B('x') == txn.replace(B('a'), B('y')) assert B('y') == txn.replace(B('a'), B('z')) cur = txn.cursor() assert cur.set_key(B('a')) assert [B('z')] == list(cur.iternext_dup()) def test_dupsort_del_none(self): _, env = testlib.temp_env() db = env.open_db(B('db1'), dupsort=True) with env.begin(write=True, db=db) as txn: assert txn.put(B('a'), B('a')) assert txn.put(B('a'), B('b')) cur = txn.cursor() assert cur.set_key(B('a')) assert [B('a'), B('b')] == list(cur.iternext_dup()) assert txn.delete(B('a'), None) def test_dupdata_no_dupsort(self): _, env = testlib.temp_env() txn = env.begin(write=True) assert txn.put(B('a'), B('a'), dupdata=True) assert txn.put(B('a'), B('b'), dupdata=True) txn.get(B('a')) class LeakTest(unittest.TestCase): def tearDown(self): testlib.cleanup() def test_open_close(self): temp_dir = testlib.temp_dir() env = lmdb.open(temp_dir) with env.begin() as txn: pass env.close() r1 = weakref.ref(env) r2 = weakref.ref(txn) env = None txn = None testlib.debug_collect() assert r1() is None assert r2() is None if __name__ == '__main__': unittest.main()