pax_global_header00006660000000000000000000000064146346104010014511gustar00rootroot0000000000000052 comment=a32c7aa40641c7bc33cf9b6138def4324833e45a laspy-laspy-a32c7aa/000077500000000000000000000000001463461040100144525ustar00rootroot00000000000000laspy-laspy-a32c7aa/.coveragerc000066400000000000000000000005571463461040100166020ustar00rootroot00000000000000[report] # Regexes for lines to exclude from consideration exclude_lines = # Have to re-enable the standard pragma pragma: no cover # Don't complain about missing debug-only code: def __repr__ if self\.debug # Don't complain about abstract methods, they aren't run: @(abc\.)?abstractmethod [run] source = laspy command_line = -m pytestlaspy-laspy-a32c7aa/.github/000077500000000000000000000000001463461040100160125ustar00rootroot00000000000000laspy-laspy-a32c7aa/.github/workflows/000077500000000000000000000000001463461040100200475ustar00rootroot00000000000000laspy-laspy-a32c7aa/.github/workflows/build.yml000066400000000000000000000042311463461040100216710ustar00rootroot00000000000000name: Build on: push: branches: - '*' pull_request: branches: - '*' jobs: build: name: Python ${{ matrix.python-version }} - ${{ matrix.os }} - laz=${{ matrix.laz-backend }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] laz-backend: [ None, lazrs, laszip ] steps: - uses: actions/checkout@v3 - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Display Python version run: | python -c "import sys; print(sys.version)" - name: Install With LAZ backend if: matrix.laz-backend != 'None' run: pip install .[${{ matrix.laz-backend }},dev,pyproj,cli] - name: Install Without LAZ backend if: matrix.laz-backend == 'None' run: pip install .[dev,pyproj,cli] # Install dependencies which are optional # so that the tests corresponding to them runs. - name: Install Optional depencencies run: pip install requests rangehttpserver # Some crs tests require pdal # and its easier to install it on ubuntu - name: Install pdal if: matrix.laz-backend == 'None' && matrix.os == 'ubuntu-latest' run: sudo apt install -y pdal - name: Run Tests run: | pytest -v linting: runs-on: ubuntu-latest steps: - name: Clone uses: actions/checkout@v3 - name: Install black & isort run: | python3 -m pip install setuptools python3 -m pip install black==22.3.0 isort==5.11.5 - name: Run black check run: python3 -m black --check . - name: Run isort check run: python3 -m isort --check laspy tests coverage: runs-on: ubuntu-latest steps: - name: Clone uses: actions/checkout@v2 - name: Install run: | python3 -m pip install .[dev] - name: Run coverage run: | nox -s coverage coverage combine coverage report laspy-laspy-a32c7aa/.gitignore000066400000000000000000000001241463461040100164370ustar00rootroot00000000000000laspy.egg-info/ *.pyc dist docs/build docs/_build build/ venv .venv .vscode .idea laspy-laspy-a32c7aa/.readthedocs.yaml000066400000000000000000000006021463461040100176770ustar00rootroot00000000000000# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py # Optionally set the version of Python and requirements required to build your docs python: version: 3.8 install: - method: pip path: . extra_requirements: - dev laspy-laspy-a32c7aa/CHANGELOG.md000066400000000000000000000211041463461040100162610ustar00rootroot00000000000000# Changelog ## Version 2.5.4 (19/06/2024) ### Fixed - Fix compatibility with numpy 2.0 - Return None as CRS if WKT string is empty instead of having an exception from pyproj ## Version 2.5.3 (4/01/2024) ### Fixed - Properly install laspy/cli/core.py file - Don't install CLI tests as part of the package (tests/cli/*) - Explicitly added 'rich' as a dependency of CLI feature ## Version 2.5.2 (2/01/2024) ### Fixed - When trying to write more points than what is possible, now a proper error is raised. ### Added - `CopcReader.open` now accepts file-like objects. - Add `filter` command to CLI ## Version 2.5.1 (28/07/2023) ### Fixed - Fixed bug in laz backend handling in the CLI ## Version 2.5.0 (23/07/2023) ### Added - Added optional CLI. It can be installed using the `cli` extra (`pip install laspy[cli]`). It has `info`, `compress`, `decompress`, `convert` and `copc query` commands. - Added a `prefer_wkt` option to `LasHeader.parse_crs` (true by default) to prefer (or not) WKT VLR over Geotiff VLR in case both are present in the file. ### Fixed - laspy.open will now properly close the opened file if an exception is raised. - Wavepackets's `return_point_wave_location` is now properly returned as as float32 and not an uint32. - `parse_crs` properly checks that ProjectedCRSGeoKey/GeodeticCRSGeoKey is in range of EPSG code before using pyproj to parse it. - Missing `super.__init__()` in `CopcHierarchyVlr`. - Copc no longer include the hierarchy page twice - A LasHeader with a custom `creation_date`/`date` will no longer be reset to `date.today` upon writing. --- ## Version 2.4.1 (20/02/2022) ### Fixed - Removed spurious `print` in copc.py and compression.py ## Version 2.4.0 (11/02/2022) ## Added - `read_evlrs` option (default true) to `laspy.open`, `laspy.LasReader.__init__` and `laspy.LasHeader.read_from` Which allows to skip reading the EVLRs when opening a file. This can be useful when opening a LAS file from a non seekable source / where seeking is expensive as reading EVLRs requires seeking to the end of the file. - Selective decompression feature that allows to select in a LAS 1.4 (fmt >= 6 && <= 10) which fields should be decompressed allowing to save time by decompressing only the fields that are needed. Works with LAZ and COPC files. ## Changed - The internal point reader is lazily created when the first point is actually read ## Fixed - LasAppender when input file's last chunk is complete - Handle redundant CSs in GeoKeyDirectoryVlr ## Version 2.3.0 (25/10/2022) ### Changed - EVLRs are now read during the file opening part. - EVLRs are now part of the `LasHeader` class, but are still accesible via `LasReader.evlrs` or `LasData.evlrs. ### Fixed - Fixed CRS parsing on fiels with both `GeoKeyDirectoryVlr` and `WktCoordinateSystemVlr` and the first one is empty - `LasHeader.parse_crs` also looks for the CRS VLRs in the EVLRs of the file. - Fixed `LasHeader.generating_software` and `LasHeader.system_id` being limited to 31 bytes instead of 32. - Fixed `laspy.convert` to ensure the returng `LasData.evlrs` is a `Vlrlist` and no simply a `list` --- ## Version 2.2.0 (29/06/2022) ### Added - Added support for querying COPC LAZ files via a new class `CopcReader`. - Added new optional feature to support adding CRS / SRS to a LAS file from a `pyproj.CRS` as well as reading the CRS / SRS information from a LAS file to a `pyproj.CRS`. ### Fixed - Fixed support for stream / source that are not `seekable`. ### Changed - Support for Python3.6 removed. --- ## Version 2.2.0 beta 1 (14/06/2022) ### Added - Added support for querying COPC LAZ files via a new class `CopcReader`. ### Fixed - Fixed support for stream / source that are not `seekable`. --- ## Version 2.2.0 beta 0 (03/05/2022) ### Added - Added new optional feature to support adding CRS / SRS to a LAS file from a `pyproj.CRS` as well as reading the CRS / SRS information from a LAS file to a `pyproj.CRS`. ### Changed - Support for Python3.6 removed. --- ## Version 2.1.2 (18/02/2022) ### Fixed - Fixed `LasHeader.update` (thus fixing `LasData.update_header`) computation of x,y,z mins and maxs - Fixed regression introduced in 2.1.0 where changing the `header.scales` and/or `header.offsets` on a `LasData` newly created and then setting `x` `y` or `z` would produce incorrect result. --- ## Version 2.1.1 (23/01/2022) ### Fixed - Fixed regression introduced in 2.1.0 where setting the x, y or z value would not properly set the corresponding X, Y or Z value. - Fixed `LasData.change_scaling` setting the header's `offsets` and/or `scales` to `None` if the corresponding optionnal argument was not given to the `change_scaling` method. The header will now correctly keep the corresponding value unchanged. --- ## Version 2.1.0 (09/01/2022) ### Added - Added a better error message when reading empty files - Added a new `xyz` attribute to `LasData` that returns x, y, z as a new numpy array or sets the x, y, z from an array - Added `LasData.remove_extra_dim` and `LasData.remove_extra_dims` to allow the removal of extra dimensions (__only__) ### Changed - Minimum `lazrs` version updated to 0.4.0 to bring support for LAZ with variable size chunks (used in [COPC](https://copc.io) files). the `laszip` backend already supported variable size chunks LAZ. - Improved assigning to multiple dimensions at once (`las[['x', 'y', 'z']] = ...`) - `laspy` will no longer raise encoding errors when reading files for which the header's `generating_software` or `system_identifier` as well as the vlr's `description` is not `ascii` encoded as the spec mandates. However, an encoding error will be raised when writing such files. - `LasData.__getitem__` will now return a `LasData` when indexing with slice or numpy array. `assert isinstance(las[[1, 2, 3, 4]], laspy.LasData)` ### Fixed - Fix `PackedPointRecord.__len__` when array has no dim - Fix scaled extra byte creation when the offsets/scales given to `ExtraBytesParam` where of type `list` or `tuple` - Fix `ScaledArrayView` to allow indexing with `list` or `numpy.array`. --- ## Version 2.0.3 (16/09/2021) ### Fixed - Fix function that parses geotiff VLRs - Fix handling of points with 'unregistered' extra bytes (PR #158) - Fix to handle empty LAS/LAZ more robustly --- ## Version 2.0.2 (23/07/2021) ### Changed - Update minimum lazrs version which allows to: - Fix Appending in LAZ files. - Improve memory usage when reading/writing. (issue #152) ### Fixed - Fix `system_identifier` reading by ignoring non ascii characters instead of erroring ,(issue #148, PR #149). - Fix `LasData.change_scaling` method. --- ## Version 2.0.1 (29/06/2021) ### Fixed - Fix `.min` `.max` methods of array views - Ship the tests as part of the source distribution (But they won't be installed with `pip install`) --- ## Version 2.0.0 (15/06/2021) - Overhaul of the internals by essentially incorporating pylas into laspy, while the API to retrieve and set dimensions stayed the same, other parts changed and will require adaptation. - Better LAZ support - Added support for writing LAZ - Changed decompression mechanism by using either `laszip` python bindings (and not laszip-cli) or `lazrs` - Added ability to read and write LAS/LAS in `stream` / `chunked` mode. - Changed laspy to support the reading and writing of LAS/LAZ data from and to `file-objects` and `bytes` - Dropped support for python2.7, python3.6+ is supported. --- ## Version 1.7.0 (13/03/2020) - Fixed bug in point record format 5, 9 and 10 [#105](https://github.com/laspy/laspy/issues/105) - Return explicit msg if laszip executable was not found [#110](https://github.com/laspy/laspy/issues/110) - Supprt numpy 1.17 [#122](https://github.com/laspy/laspy/issues/122) ## Version 1.6.0 (11/10/2018) - Bug fix [#92](https://github.com/laspy/laspy/issues/92) - Test creation of all valid custom dimension data types - Modify handling of extra bytes to be char data instead of numeric byte data ## Version 1.5.1 (5/12/2017) - Bug fixes [#67](https://github.com/laspy/laspy/pull/67), [#75](https://github.com/laspy/laspy/pull/75), [b02b40900b5](https://github.com/laspy/laspy/commit/b02b40900b5620972930cd0c201b4db1a6a69754) - Allow usage of `laszip-cli` when working with LAZ files [#77](https://github.com/laspy/laspy/pull/77) ## Version 1.5.0 (30/03/2017) - Improved memory handling in base.FileManager [#48](https://github.com/laspy/laspy/pull/48) - Introduced `r-` file mode, that only reads the header of as LAS file [#48](https://github.com/laspy/laspy/pull/48) - LAS v. 1.4 bug fixes [#55](https://github.com/laspy/laspy/pull/55) - Python 3 support [#62](https://github.com/laspy/laspy/pull/62) laspy-laspy-a32c7aa/LICENSE.txt000066400000000000000000000030021463461040100162700ustar00rootroot00000000000000laspy License ============================================================================== Copyright (c) 2012, Grant Brown, grant.brown73 at gmail.com Copyright (c) 2012, Howard Butler, hobu.inc at gmail.com Copyright (c) 2020, Thomas Montaigu, thomas.montaigu@laposte.net All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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. laspy-laspy-a32c7aa/MANIFEST.in000066400000000000000000000001011463461040100162000ustar00rootroot00000000000000include pyproject.toml recursive-include tests *.py *.las *.laz laspy-laspy-a32c7aa/README.md000066400000000000000000000035731463461040100157410ustar00rootroot00000000000000# Laspy Laspy is a python library for reading, modifying and creating LAS LiDAR files. Laspy is compatible with Python 3.8+. ## Features - LAS support. - LAZ support via `lazrs` or `laszip` backend. - LAS/LAZ streamed/chunked reading/writting. - [COPC] support over files. - [COPC] support over https with `requests` package. - CRS support via `pyproj` package. [COPC]: https://github.com/copcio/copcio.github.io ## Examples Directly read and write las ```Python import laspy las = laspy.read('filename.las') las.points = las.points[las.classification == 2] las.write('ground.laz') ``` Open data to inspect header (opening only reads the header and vlrs) ```Python import laspy with laspy.open('filename.las') as f: print(f"Point format: {f.header.point_format}") print(f"Number of points: {f.header.point_count}") print(f"Number of vlrs: {len(f.header.vlrs)}") ``` Use the 'chunked' reading & writing features ```Python import laspy with laspy.open('big.laz') as input_las: with laspy.open('ground.laz', mode="w", header=input_las.header) as ground_las: for points in input_las.chunk_iterator(2_000_000): ground_las.write_points(points[points.classification == 2]) ``` Appending points to existing file ```Python import laspy with laspy.open('big.laz') as input_las: with laspy.open('ground.laz', mode="a") as ground_las: for points in input_las.chunk_iterator(2_000_000): ground_las.append_points(points[points.classification == 2]) ``` API Documentation and tutorials are available at [ReadTheDocs](https://laspy.readthedocs.io/en/latest/). ## Installation Laspy can be installed either with `pip`: ``` pip install laspy # without LAZ support # Or pip install laspy[laszip] # with LAZ support via LASzip # Or pip install laspy[lazrs] # with LAZ support via lazrs ``` ## Changelog See [CHANGELOG.md](CHANGELOG.md) laspy-laspy-a32c7aa/benches/000077500000000000000000000000001463461040100160615ustar00rootroot00000000000000laspy-laspy-a32c7aa/benches/test_benches.py000066400000000000000000000010071463461040100210770ustar00rootroot00000000000000import numpy as np import laspy def test_bench_sub_field_view_comparison(benchmark): las = laspy.create() las.x = np.zeros(10**6, np.float64) benchmark(lambda: las.classification == 4) def test_bench_scaled_array_comparison(benchmark): las = laspy.create() las.x = np.zeros(10**6, np.float64) benchmark(lambda: las.x >= 140.7329047) def test_bench_normal_field_comparison(benchmark): las = laspy.create() las.x = np.zeros(10**6, np.float64) benchmark(lambda: las.X >= 779012) laspy-laspy-a32c7aa/docs/000077500000000000000000000000001463461040100154025ustar00rootroot00000000000000laspy-laspy-a32c7aa/docs/Makefile000066400000000000000000000011321463461040100170370ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SPHINXPROJ = laspy SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)laspy-laspy-a32c7aa/docs/_static/000077500000000000000000000000001463461040100170305ustar00rootroot00000000000000laspy-laspy-a32c7aa/docs/_static/style.css000066400000000000000000000005041463461040100207010ustar00rootroot00000000000000/*.wy-nav-content {*/ /* max-width: 80%;*/ /*}*/ dl.method > dt > em:before { content: " "; clear: right; display: block; } dl.method > dt > em > span.n:before { content: "\00a0 \00a0 \00a0 \00a0 "; } dl.method > dt > span.sig-paren:before { content: " "; clear: right; display: block; } laspy-laspy-a32c7aa/docs/_static/tutorial_histogram.png000066400000000000000000000460611463461040100234650ustar00rootroot00000000000000PNG  IHDR,d(sBIT|d pHYsaa?i IDATx{|W7 r IѺŢ[֥_[E--" ZZMwivQjQՠ6T^hRUE$?L.$9̙ϙ̘~Dzm@I,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXXrssS]]J)//OIIIj֬U&777] Qƍ˩BƖ-[DWRf5|p.5XCOѐõ,nwrssSttu]e/jڴiW&LiӦ),,֭5Qo~#4W70m4놛ƍ={9r1\q˲n PgZ\/R7tG~]Vڴi<*Lgg/UV"nunݺIΝ;Ç>[oS*))Is+{N;\] k Pfͮm; ,SXض]!^^^7+/ݺuӔ)SZJ1110a$9Sj֭u뺺 0*n9ΩS-ZFUƍ_R.-)iҤ$W_uZ^ꫯ:ƺx?*""B^"""?7˖-S۶m:uub\~튌Ҡ4讻ղeKM6M999En`֭[GwqƏ\I;C]Fף>2'OԤIԬY3yyy) @};ԯ`KܮzIAm۶ɶm}T~I<6l(OOO/q?PC QݺuUZ55lPo?>(NJJ㱔nݺFS~;wss7IRƍKpy{{f͚ٳ6mt5Hґ#GSOy^{L~_@.^ OΝ+>{'UV.C=+WJN *+ضH}ܹ~_C}l٢۷m۶޽N:su8pc6m8>tP-_\5҈#dYVZѣGk۶mJMMu^ФIÇOo~ϯ25sLw}1b=U:ꫯԹsg 0@z4rww/2~z 4Hݻwƍ5w\;vL԰aԿ9R|-[L[O8Ν;뫯~3 2DǎէO-X@#G$ 4H7K/$I?~$f͚%ﯩS*%%EдiBBB?^{?~CWVll+IK,QLL~ڳg/^_ھ}4hPj֭[7xC}ȑ#{n[JOOX4uTYF~ƍ_8nݺڵ3ghݺuԢEO\w ?:wwze۶߯uvk+777hԩJMM-RO?K*88X> ҥ\VZx,~X}*UhŊ9rgiٲe0`zꥵk*))Iގos \c,**J5j7Trr=GzKxիWOYYY?YSN|'Nٳg+((H>|||o*..N6l;C*U8W2ɲ,۲,{ڴiԩSnnn\{駶eYA'N8~۲,;::ؾ˖--˲;t`Osڵ-˲-[hol;((>tXQQQeYS{ZZc/ru|ŶO<ٶ,?>uT۲,f͚_~h͵[hamۜקO۲,{ǎ^a#F-˲GW_5j԰Vj۷i[Fƍj]v-rӲ,_~vNNѣv͚5m???;//ϩ*U͛794͛mwww{`]m~Wl˲*UӶX۲,wjl˲< tvwwW\~Iuֶ|Zoa[e?mgΜ)2"5~jժvl_j[e{ o"^|?uꔣoVjרQnҤ}aǶSNٵk׶k׮m;گ1Vp۷wz:w}w?h4hmY駟wffӿ{leYvƍcǎ9~ٖe3fp5eǒ0pJJJ*rRQ)WۯھƱK,t+v,_ht3Fsk֬YW={R6m4bĈblꩧbIرcռysǿV~XmP.]?#;wXgkҥՌ35kLqDKn;&Y󮷆nݺ^z5k>нޫ֭[۩G+VhѢE,IڱcշorYw#,*Qpvm;t萣}YU5l0^Z?_J]vս{-|,*xf͚^zڿN>\Pv6͛7+))I+Wt+Q3g4ȧNR```LJxxxVZ:~SIE>Q-PNKIg߯tjJQQQ]T"۶X gڶbǻR\KV|ӕa833S4{dz,ăoj7mT7j%\|}}}vM:Uk׮Ն $]|ъ+P]vUxxRSS5g8ho{Cc[ڵk:En5h [Ns_WGl߾f͚￿ۖ֡Ct)RcIpY?ڻw/^͛k޼y5jTSVVVN3]vx kO?Y>LRgʢMKI?WpܸRN>/{pB%sTp?Λ75,իŋѣڵk͛M6M>lyLE#Gԙ3gkٳZlׯ~WJKK$uرǾ[۷6oެ'Oj?~vڥ~m[%xV<@eF`nCM6?[Gk֬ql+O۶m .h֭Em۶M/^tZQ{HjI[a_$9nARu*aaaҧ~Z(ootIZVNd۶mV.㕗=;u$IKO>+;%);z߬ٳz''}] Tc_˭~yyy{3g&O\_i۶l֖-[lu!5nC7 ߿" dee)77W6I*q?.Iu駟4i$IүkGСC;b۶bccu2ϧ`jĉeTREÆ ӧoѼyTjU=7|[mTVO>Tk޽E?yJ*خ];uEVr,]g}8z|~ X-ڕϝf_GQFFM&bO|l֪U??,K *KV<ƶmVl-_%x@ӝ^pAe۶X 4رC=:t蠰0q:vx ]pM~ձcGm۶M>Nt/ohjѢ|AY5khկ~(xM4QRR&O{G?jԨM6ĉ{gi Нwީ_|QvR֭uA߿i4k,{Z`խ[7?~\˗/׹s`5jogϞZrz!EFFK!!!6lu׼ys-YD?ZhH*//O{ァ:uÊ7SϞ=#F衇RѣGKt_5oÇh?~׷x+wÇuQFZ>cQFկ~uwI&L /-[jȐ!{nuҥT@"eYZ2XmݺU7nԉ'wS>}~zm6lVZIRSSյkW-YD/,Rxxy"?D'I&MR?AjԨ>}W^ʼ[&M-[SӦM5e?rci?{9ZJ/ձcG=3ٳg_VO<8={խ[7Ǜ્Y|ys=3goz;_R?pj+wޚ3g襗^,_wF;88XwuƎ-[^w m6]VOwܡ>}詧*q WnZ;v츮 m6mݺUeGjѢFaÆ94c^,XYo#..NW_;rssSFW{֬YjӦ,Xoӝwީ3f駟vH8%)vf ӧUNmV|\ӪWj׮]N]q e;vP~ԨQ#y{{+00P;wֲe˜ >\nnnE.wuWΟ?_aaat,ϿSq"O?bn7 .Թst>$SNaÆzGT^=i%}Q߿_qqq^^^\V،34eƪw裏q}vrJM2EzRm۶i޽j׮|IWӧ5o<}ZdׯO`BXv :uÇuIaYjN>}eff~>|?9ڟ{9k׮] رcfΜt=zTҥ3} }TV-WSX )8t׉Nںukiq-[_͛.IUVboƍ; 0ҥK# RH\\bbbtQ]VO=rrr?7n8=zP6m4d-^Xcǎ/Kd`ƍK/2PGc}d/BÆ s#ҠA5h@ҥ =%RA?\өVV"""oxxڶm{QfM?c}d>QP} ʎak߾}%mAgyٹsS#GG`4iӦ%YrթS'G[dd<==7%%Eei7d`Ie111SDDԩǏkŊZ|&L@8p@Æ СCդIٶ[jܹjٲx xWBBԫW/+11Q#FPXX g T :wW^yEN<իuZt*ISPPfϞQ.\PHHƎɓ'9#ɓ뫅 *99YU\\+rp>2 ~0j׮>cxOW~8,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX.{U2դIϨo߾.P|&WQn,Mmذ2!ג~"ʍݮ.ǰ0,E``, cXX"0,E``, cXX"\cO5չsg-[Hߌ So߾bǝ?&M())I7{:@@`ԩSjذ{9_^G}T3fp/խ[7kŊZd٣.]NcΘ1CƍӐ!CokԨQ9sF}TH.]vU׮]}_V\\$iʔ)ҺuTzuIRvd͚5Kӧ+&&FӧO$w}S||ƍk ǥ\ui"I 6TݵzjGۆ h񢣣e۶֬Ysk&T`BlV~~;?ڸq~K.rVZ믿%Ivr_nݺUv}gT|, +dȑz%IJNNȑ#%]Z%I: IDATE ۶u թSGVwU,uS*55թɓ.!=zTk׮SO=M8W2ZonmrFFڵk碊*K! 4P $I׿V``$)++dY%]:%77W999,7""fN8"""oVM6vYg}PUZUǹ{effe˖7x#\CZZմiSyxxhZjΞ=sA顇rEFFS)))N㥤Ȳ, 8VMXvYLL:uZb/_ &8%&&*""BפI)S(((HO?c<+!!Aիӕ#F(,,US* e;w+W_}U'OTպuk-]TCuk޼l٢'jȐ!P=5&O,___-\P VllG(\Çk۶m[mڴT}nj1c@ecXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXr͛cYfQ5p@edd8>|܊\bǝ?&M())IbJ@Lh";vLǏW-t1͙3G;vƍս{wG_///9]˫Ș3fД)S޽{룏>R||{-Z ,-X@AAANm;5sL:\uLM>]111>}$S^^5n8DJ%a+p:tȩݶka*::ک=::Zmk͚57V0p \ũS-Z8ggg+88XjРƌ'N8ٵk$UVNuUZ{[<P $*Fl9Zn6mڨe˖-[_͛.IUVc[y[_(BmQ/0EjjRSSNCG[``rssSVV˵f2"L4Tױm[/^tj%I;wtj?r233Krg}VJHHPBBBrJeggSNHyzz*%%ũoJJ,˫l̙S*22R}۝wQаa4tP5iDmk֭;wZl'x_JHHP@@zt%&&jĈ S*e֭eYڰa6lͲ,]pA~~~ ٳ?… رc5y"g]t})//O7no oX.+V$G:t$)??_֭aE6lݻkՎ 6(77WNcFGG˶mY&<,Wq)eddEoF999mժk?^k.G֭Zji7zcIU=Zيti$ ۶u թSGVwU,uS*55թɓ.! !!A,X6mڸђ~@YDEE)*C匌 kEU., +Fbbf̘3gjԨQ@IRVVVdeeɲ,;*''ؾc(DeҤINۚ6m*///ܹ>3jժ8Υp#G(33S-[I3*}Y%&&*!!A E{xxhZjΞ=h?xC9"##驔1RRRdYxTrٜ9s4uTEFFo߾ھ};J LDDI&);;[SLQPP~iG+!!Aիӕ#F(,,,[NeiÆ ڰa6˲tIR͵eM8QC z"ǥL|܊\bǝ?&M())I7{:@Lrq/Q֭5h -^XeKiiiE 1cLX[}kѢE7e@eA`BHHN8!IŋK:\uLM>]111>}$S^^5n8J%a%mK҆ hhٶ5kP@eG`N 4h1c8)k.IRV֭Zjiݷ^"bIuhݺڴi-[Jl٢_|Q7oVzz|||$]ZVZbmWffUne7 E]JMMuj;y򤋪|,aܸqNѣڴi!Ch;vl9hI)qp3EEE)*C匌 kEU., +' >CG[``rssSVVoe@C`)'mŋNmw}$iΝNGQffcIXʕ+N:9"##驔))),KU ǰ~z;wNgΜ$޽[+W$OGհa4tP5iDmk֭;wZl'x1㕐KJLLԈ#9QF$˲b XBei߾}SPPfϞQ.\PHHƎɓ'9#ɓ뫅 *99YU\\+T(Bw>z3fƌs%-a`, cXX"0,E``, cXX"0,E``, cXn޽:s挫(W uuXٻw5k2n={ZN,P7+K%ra[##@.{"0,E``, cXX"0,E``, cX_|ʝBCC]]$ pJ :n={Z,u9wϥ]YH9B09sՅH"7(\R[WPiq=cXX"0,E``, cXX"0,E`ٳg5a[kז훑={WcWkRTj׮*\XVF"۲dY}sssSl߂RFM6vYdg}PUZUǹ{effe˖7`cIXyxxhZj^xǙ<4=ӎTJJ:thOIIeY8p-ݻWgΜqu/pu 2B֯_s9޽[+W$O^^^JLLTDDI&);;[SLQPPS`W||^z)==]1b\2Gvw^5keD`)dԨQ:pKrb XBei߾}jذ7o-[hĉ2d<<<ԣG%''9.e… `*..n;RIZߒ"%,۷TڶmM61c4f̘) EntX"0,E``,Nk 0_TS6*44e@E`$iذa.سg`s\K?YY|!iΜ9B"(2-˩Ls=Kj"!B^* +Te9oIJpu:X2-aIX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,E``, cXX"0,a˖-rss+G9PϞ=+ >^=PΝm޼Ymڴ$WZd-ZTcLjkkyf3V$[n:t6l%rOPEGG+##C;w;zTu]|)o m۶Unnvua-^XiiiڲeU^^.I2ƨR;vWyOҖֲ`B?ޡjHNNVrrA)33SSzzz#*%=Vv*ݻW}u慷5h9RSMMn$ފ \.4u@@!RϞ=9^ZZx9P8,R6mRJJQFix<}'OTqq \r&L=z(55U:|.]gjʕ}ׯq͚5:tЋ/rvZ{x}TRR<;V!!!zGd5.G`yyykT}~h,[𳲲2KhTQQQw -9)Iqw!B &A`ozJR42I9tӅh!,]TEE``- kXXZ",E``- kXXZ",E``- kXXZ",E``- kXXZ qxʜ.QEEE)>>2܆h|""U,IѥK.MXHtZ.`- kXXZ",E``- k8] ʜ.EEE)>>2B`-IIRNNuǡC-hu~' idert%  @ҿa%"܀XZ|tB GGGh,~x8EDD(%%Ek׮u,ܵsۏُُe{?ݻ[ow*((Pvv\S\ IDATlF`[oQaaƏ/I2dN83gj E.>kُ6lؠ(7g}ҤI:}vPe@`?:p꼊(I_4`cW l eW^8U\oN$I;yTpqs95sGR8 G9'Pϩ]s\TVH|\}r2hz^zi֭>pB+((PNNNS ?Yj&LtWX,3bZJݻwWDDTWW1bӥ<nYQvH.Y{?JJJRYY\^ZZ*Iz( ?̔QQQ+;TxKeddh6m.^={P_} r.Ojܹz?j͚5u>(77WqqqPJJ֮]P-[IInz|ݻWÆ STTbbb4f?~ܡʛ'ǣ_~Yj߾ӽӏԪU+{z7ojkky*RCSOt>/i<۷oĉջwoEFFK.=z!g4G̑s~g9RsZn-ۭf Ç7111f妤L<ٸ\.zjKkq2-2vy<ᄇ2e bmf֯_o|AgΞ=4/Ǐ7m۶5iii޹ϯv1|dfϞmva/^l͔)S괚gĉuufjuҟ5n8f-[fvàLhho!4G̑sJJJԩSMAA)))17o6r{1GA`-[2k֬YOOO7qqqqZ`noܸqCҥK޵'N02[sܹsUVfԩ>߿`d<hn՟'=i\gΜxLN̰aük̐s#>?֭k?xK6lؠ(7g}ҤI:}vPe-gj3fڴi]֭ 64E-N}=~|ѤI|cҤI2?O-f!%:t:uJ3䴆.n[!!^PBB|ۑ(I_(ś>}BCC ܹ{ѣVRRRKLLԑ#Gt,E~8p~N:]v̛UUUs Q׮]ϫgi.\޽{HbltcaeQmmΞ=e˖/K/$9'~JիW:뱱h:m۶Unnvua-^Xiiiڲeӽ=֣Juرon WDDD111̛$''+%%S%%%z}v㏊$DO*͞=[3d{$1G66m/_.I ֒%K4m4Ȋ?X$''+99AD)==>;V}f̘Pe-Ϝ9szjJIIqD}=b7{lM2E6nܨ^xAsfYv4IWTTxY9rۧoOzr\i2[VMMoyk:NW~~|M-X@=wG}=sԴvTeddhٲezg5g;w9#TVV+WJ_rgϞ/--U||e~\{o{3oMS=?۬Y|1CvU9_~ձcǘ#?"X 33SGEEE>+VP\\PeR6mRJJQFix<}'OTqq幝~dddUVZbsXB.KGn["UUUi5o5g͙3qfyգ0G*..VppzQ믿Etz?Pn[.\… n:}u~k„ 駟ty9sF_yoOգGIde˖X:uRii&O`\R[vLm۶i߾}*--ƍվ}{\.}Yf/9OIKK ̐3#Y|yGLMhh1C5u2GeL>5,E``- kXXZ",E``- kXXZ",E``- kXXZ",E``- kXXZ",E``- kXXZ",E``- k?FIENDB`laspy-laspy-a32c7aa/docs/_templates/000077500000000000000000000000001463461040100175375ustar00rootroot00000000000000laspy-laspy-a32c7aa/docs/_templates/layout.html000066400000000000000000000001261463461040100217410ustar00rootroot00000000000000{% extends "!layout.html" %} {% set css_files = css_files + [ "_static/style.css" ] %}laspy-laspy-a32c7aa/docs/api/000077500000000000000000000000001463461040100161535ustar00rootroot00000000000000laspy-laspy-a32c7aa/docs/api/index.rst000066400000000000000000000016561463461040100200240ustar00rootroot00000000000000API Documentation ================= .. module:: laspy Re-exported functions --------------------- laspy.read ___________ .. autofunction:: read laspy.open ___________ .. autofunction:: open laspy.create ____________ .. autofunction:: create laspy.convert _____________ .. autofunction:: convert Re-exported classes ------------------- - :class:`.LasHeader` - :class:`.LasData` - :class:`.PointFormat` - :class:`.VLR` - :class:`.ExtraBytesParams` - :class:`.LasReader` - :class:`.LasWriter` - :class:`.LasAppender` - :class:`.PackedPointRecord` - :class:`.ScaleAwarePointRecord` - :class:`.CopcReader` Submodules ---------- .. toctree:: laspy.lib laspy.header laspy.lasreader laspy.lasdata laspy.copc laspy.vlrs.vlrlist laspy.vlrs.known laspy.vlrs.vlr laspy.point.record laspy.errors laspy.compression laspy.point.format laspy.lasmmap laspy.lasappender laspy.laswriter laspy-laspy-a32c7aa/docs/api/laspy.compression.rst000066400000000000000000000005201463461040100223720ustar00rootroot00000000000000laspy.compression module ======================== LazBackend ---------- .. autoclass:: laspy.compression.LazBackend :members: :undoc-members: :show-inheritance: DecompressionSelection ---------------------- .. autoclass:: laspy.compression.DecompressionSelection :members: :undoc-members: :show-inheritance:laspy-laspy-a32c7aa/docs/api/laspy.copc.rst000066400000000000000000000004621463461040100207620ustar00rootroot00000000000000laspy.copc module ================= CopcReader ---------- .. autoclass:: laspy.copc.CopcReader :members: :undoc-members: :show-inheritance: .. automethod:: __init__ .. autoclass:: laspy.copc.Bounds :members: :undoc-members: :show-inheritance: .. automethod:: __init__ laspy-laspy-a32c7aa/docs/api/laspy.errors.rst000066400000000000000000000001761463461040100213540ustar00rootroot00000000000000laspy.errors module =================== .. automodule:: laspy.errors :members: :undoc-members: :show-inheritance:laspy-laspy-a32c7aa/docs/api/laspy.header.rst000066400000000000000000000003621463461040100212650ustar00rootroot00000000000000laspy.header module ====================== LasHeader --------- .. autoclass:: laspy.header.LasHeader :members: :undoc-members: :show-inheritance: :exclude-members: write_to, read_from, set_compressed, update, partial_reset laspy-laspy-a32c7aa/docs/api/laspy.lasappender.rst000066400000000000000000000001711463461040100223310ustar00rootroot00000000000000laspy.lasappender ================= LasAppender ----------- .. autoclass:: laspy.lasappender.LasAppender :members:laspy-laspy-a32c7aa/docs/api/laspy.lasdata.rst000066400000000000000000000002351463461040100214450ustar00rootroot00000000000000laspy.lasdata module ====================== LasData ------- .. autoclass:: laspy.lasdata.LasData :members: :undoc-members: :show-inheritance: laspy-laspy-a32c7aa/docs/api/laspy.lasmmap.rst000066400000000000000000000002031463461040100214610ustar00rootroot00000000000000laspy.lasmmap module ====================== .. automodule:: laspy.lasmmap :members: :undoc-members: :show-inheritance:laspy-laspy-a32c7aa/docs/api/laspy.lasreader.rst000066400000000000000000000003041463461040100217730ustar00rootroot00000000000000laspy.lasreader module ====================== LasReader --------- .. autoclass:: laspy.lasreader.LasReader :members: :undoc-members: :show-inheritance: .. automethod:: __init__ laspy-laspy-a32c7aa/docs/api/laspy.laswriter.rst000066400000000000000000000003051463461040100220460ustar00rootroot00000000000000laspy.laswriter module ====================== LasWriter --------- .. autoclass:: laspy.laswriter.LasWriter :members: :undoc-members: :show-inheritance: .. automethod:: __init__ laspy-laspy-a32c7aa/docs/api/laspy.lib.rst000066400000000000000000000001671463461040100206060ustar00rootroot00000000000000laspy.lib module ================ .. automodule:: laspy.lib :members: :undoc-members: :show-inheritance: laspy-laspy-a32c7aa/docs/api/laspy.point.format.rst000066400000000000000000000002201463461040100224460ustar00rootroot00000000000000laspy.point.format module ========================= .. automodule:: laspy.point.format :members: :undoc-members: :show-inheritance:laspy-laspy-a32c7aa/docs/api/laspy.point.record.rst000066400000000000000000000002361463461040100224430ustar00rootroot00000000000000laspy.point.record module ========================= .. automodule:: laspy.point.record :members: :undoc-members: :show-inheritance: laspy-laspy-a32c7aa/docs/api/laspy.vlrs.known.rst000066400000000000000000000002131463461040100221510ustar00rootroot00000000000000laspy.vlrs.known module ======================= .. automodule:: laspy.vlrs.known :members: :undoc-members: :show-inheritance: laspy-laspy-a32c7aa/docs/api/laspy.vlrs.vlr.rst000066400000000000000000000002221463461040100216200ustar00rootroot00000000000000laspy.vlrs.vlr -------------- .. autoclass:: laspy.VLR :members: :inherited-members: :undoc-members: :exclude-members: read_from laspy-laspy-a32c7aa/docs/api/laspy.vlrs.vlrlist.rst000066400000000000000000000002361463461040100225210ustar00rootroot00000000000000laspy.vlrs.vlrlist module ========================= .. automodule:: laspy.vlrs.vlrlist :members: :undoc-members: :show-inheritance: laspy-laspy-a32c7aa/docs/basic.rst000066400000000000000000000140611463461040100172170ustar00rootroot00000000000000================== Basic Manipulation ================== Opening & Reading ================= Reading ------- Reading is done using :func:`laspy.read` function. This function will read everything in the file (Header, vlrs, point records, ...) and return an object that you can use to access to the data. .. code-block:: python import laspy las = laspy.read('somefile.las') print(np.unique(las.classification)) Opening ------- laspy can also :func:`laspy.open` files reading just the header and vlrs but not the points, this is useful if you are interested in metadata that are contained in the header and do not need to read the points. .. code-block:: python import s3fs import laspy fs = s3fs.S3FileSystem() with fs.open('my-bucket/some_file.las', 'rb') as f: if f.header.point_count < 100_000_000: las = laspy.read(f) Chunked reading --------------- Sometimes files are big, too big to be read entirely and fit into your RAM. The object returned by the :func:`laspy.open` function, :class:`.LasReader` can also be used to read points chunk by chunk by using :meth:`.LasReader.chunk_iterator`, which will allow you to do some processing on large files (splitting, filtering, etc) .. code-block:: python import laspy with laspy.open("some_big_file.laz") as f: for points in f.chunk_iterator(1_000_000): do_something_with(points) Writing ======= To be able to write a las file you will need a :class:`.LasData`. You obtain this type of object by using one of the function described in the section above use its method :meth:`.LasData.write` to write to a file or a stream. .. code-block:: python import laspy las = laspy.read("some_file.laz") las.points = las.points[las.classification == 2] las.write("ground.laz") Chunked Writing --------------- Similar to :class:`.LasReader` there exists a way to write a file chunk by chunk. .. code-block:: python import laspy with laspy.open("some_big_file.laz") as f: with laspy.open("grounds.laz", mode="w", header=f.header) as writer: for points in f.chunk_iterator(1_234_567): writer.write_points(points[points.classification == 2] Creating ======== Creating a new Las from scratch is hopefully simple: Use :func:`laspy.create`. Or the :class:`.LasData` constructor which requires a :class:`.LasHeader`. You can get a header from a file or creating a new one. .. code-block:: python import laspy import numpy as np las = laspy.read("some_file.laz") new_las = laspy.LasData(las.header) new_las.points[las.classification == 2].copy() new_las.write("ground.laz") new_hdr = laspy.LasHeader(version="1.4", point_format=6) # You can set the scales and offsets to values tha suits your data new_hdr.scales = np.array([1.0, 0.5, 0.1]) new_las = laspy.LasData(new_hdr) Converting ========== laspy also offers the ability to convert a file between the different version and point format available (as long as they are compatible). To convert, use the :func:`laspy.convert` .. _accessing_header: Accessing the file header ========================= You can access the header of a las file you read or opened by retrieving the 'header' attribute: >>> import laspy >>> las = laspy.read('tests/data/simple.las') >>> las.header )> >>> las.header.point_count 1065 >>> with laspy.open('tests/data/simple.las') as f: ... f.header.point_count 1065 you can see the accessible fields in :class:`.LasHeader`. Accessing Points Records ======================== To access point records using the dimension name, you have 2 options: 1) regular attribute access using the `las.dimension_name` syntax 2) dict-like attribute access `las[dimension_name]`. >>> import numpy as np >>> las = laspy.read('tests/data/simple.las') >>> bool(np.all(las.user_data == las['user_data'])) True Point Format ------------ The dimensions available in a file are dictated by the point format. The tables in the introduction section contains the list of dimensions for each of the point format. To get the point format of a file you have to access it through the las object: >>> point_format = las.point_format >>> point_format >>> point_format.id 3 If you don't want to remember the dimensions for each point format, you can access the list of available dimensions in the file you read just like that: >>> list(point_format.dimension_names) ['X', 'Y', 'Z', 'intensity', 'return_number', 'number_of_returns', 'scan_direction_flag', 'edge_of_flight_line', 'classification', 'synthetic', 'key_point', 'withheld', 'scan_angle_rank', 'user_data', 'point_source_id', 'gps_time', 'red', 'green', 'blue'] This gives you all the dimension names, including extra dimensions if any. If you wish to get only the extra dimension names the point format can give them to you: >>> list(point_format.standard_dimension_names) ['X', 'Y', 'Z', 'intensity', 'return_number', 'number_of_returns', 'scan_direction_flag', 'edge_of_flight_line', 'classification', 'synthetic', 'key_point', 'withheld', 'scan_angle_rank', 'user_data', 'point_source_id', 'gps_time', 'red', 'green', 'blue'] >>> list(point_format.extra_dimension_names) [] >>> las = laspy.read('tests/data/extrabytes.las') >>> list(las.point_format.extra_dimension_names) ['Colors', 'Reserved', 'Flags', 'Intensity', 'Time'] You can also have more information: >>> point_format[3].name 'intensity' >>> point_format[3].num_bits 16 >>> point_format[3].kind >>> point_format[3].max 65535 .. _manipulating_vlrs: Manipulating VLRs ================= To access the VLRs stored in a file, simply access the `vlr` member of the las object. >>> las = laspy.read('tests/data/extrabytes.las') >>> las.vlrs [] >>> with laspy.open('tests/data/extrabytes.las') as f: ... f.header.vlrs [] To retrieve a particular vlr from the list there are 2 ways: :meth:`.VLRList.get` and :meth:`.VLRList.get_by_id` laspy-laspy-a32c7aa/docs/changelog.rst000066400000000000000000000000361463461040100200620ustar00rootroot00000000000000.. mdinclude:: ../CHANGELOG.mdlaspy-laspy-a32c7aa/docs/complete_tutorial.rst000066400000000000000000000234401463461040100216720ustar00rootroot00000000000000A Complete Example ================== **Importing laspy** .. code-block:: python import laspy **Reading .LAS Files** The first step for getting started with laspy is to read a file using the :func:`laspy.read` which will give you a :class:`.LasData` object with all the LAS/LAZ content of the source file parsed and loaded. As the file *"simple.las"* is included in the repository, the tutorial will refer to this data set. We will also assume that you're running python from the root laspy directory; if you run from somewhere else you'll need to change the path to simple.las. The following short script does just this: .. code-block:: python import laspy las = laspy.read("./tests/data/data/simple.las") This function reads all the data in the file into memory. **Accessing Data** Now you're ready to read data from the file. This can be header information, point data, or the contents of various VLR records. In general, point dimensions are accessible as properties of the main file object, and header attributes are accessible via the header property of the main file object. Refer to the background section of the tutorial for a reference of laspy dimension and field names. .. code-block:: python # Grab just the X dimension from the file, and scale it. def scaled_x_dimension(las_file): x_dimension = las_file.X scale = las_file.header.scales[0] offset = las_file.header.offsets[0] return (x_dimension * scale) + offset scaled_x = scaled_x_dimension(las) .. note:: Laspy can actually scale the x, y, and z dimensions for you. Upper case dimensions (*las_file.X, las_file.Y, las_file.Z*) give the raw integer dimensions, while lower case dimensions (*las_file.x, las_file.y, las_file.z*) give the scaled value. Both methods support assignment as well, although due to rounding error assignment using the scaled dimensions is not recommended. The :class:`.LasData` object *las* has a reference to the :class:`.LasHeader` object, which handles the getting and setting of information stored in the laspy header record of *simple.las*. Notice also that the *scales* and *offsets* values returned are actually arrays of [*x scale, y scale, z scale*] and [*x offset, y offset, z offset*] respectively. LAS files differ in what data is available, and you may want to check out what the contents of your file are. Laspy includes several methods to document the file specification, based on the :class:`.PointFormat`. .. code-block:: python # Find out what the point format looks like. for dimension in las.point_format.dimensions: print(dimension.name) # It looks like we have color data in this file, so we can grab: blue = las.blue Many tasks require finding a subset of a larger data set. Luckily, numpy makes this very easy. For example, suppose we're interested in finding out whether a file has accurate min and max values for the X, Y, and Z dimensions. .. code-block:: python import laspy import numpy as np las = laspy.read("./tests/data/data/simple.las") # Some notes on the code below: # 1. las.header.maxs returns an array: [max x, max y, max z] # 2. `|` is a numpy method which performs an element-wise "or" # comparison on the arrays given to it. In this case, we're interested # in points where a XYZ value is less than the minimum, or greater than # the maximum. # 3. np.where is another numpy method which returns an array containing # the indexes of the "True" elements of an input array. # Get arrays which indicate invalid X, Y, or Z values. X_invalid = (las.header.mins[0] > las.x) | (las.header.maxs[0] < las.x) Y_invalid = (las.header.mins[1] > las.y) | (las.header.maxs[1] < las.y) Z_invalid = (las.header.mins[2] > las.z) | (las.header.maxs[2] < las.z) bad_indices = np.where(X_invalid | Y_invalid | Z_invalid) print(bad_indices) Now lets do something a bit more complicated. Say we're interested in grabbing only the points from a file which are within a certain distance of the first point. .. code-block:: python # Grab the scaled x, y, and z dimensions and stick them together # in an nx3 numpy array coords = np.vstack((las.x, las.y, las.z)).transpose() # Pull off the first point first_point = coords[0,:] # Calculate the euclidean distance from all points to the first point distances = np.sqrt(np.sum((coords - first_point) ** 2, axis=1)) # Create an array of indicators for whether or not a point is less than # 500000 units away from the first point mask = distances < 500 # Grab an array of all points which meet this threshold points_kept = las.points[mask] print("We kept %i points out of %i total" % (len(points_kept), len(las.points))) As you can see, having the data in numpy arrays is very convenient. Even better, it allows one to dump the data directly into any package with numpy/python bindings. For example, if you're interested in calculating the nearest neighbors of a set of points, you can use scipy's KDTtree (or cKDTree for better performance) .. code-block:: python import laspy from scipy.spatial import cKDTree import numpy as np las = laspy.read("./tests/data/data/simple.las") # Grab a numpy dataset of our clustering dimensions: dataset = np.vstack((las.X, las.Y, las.Z)).transpose() # Build the KD Tree tree = cKDTree(dataset) # This should do the same as the FLANN example above, though it might # be a little slower. neighbors_distance, neighbors_indices = tree.query(dataset[100], k=5) print(neighbors_indices) print(neighbors_distance) For another example, lets say we're interested only in the last return from each pulse in order to do ground detection. We can easily figure out which points are the last return by finding out for which points return_num is equal to num_returns. .. code-block:: python # Grab the return_num and num_returns dimensions ground_points = las.points[las.number_of_returns == las.return_number] print("%i points out of %i were ground points." % (len(ground_points), len(las.points))) Since the data are simply returned as numpy arrays, we can use all sorts of analysis and plotting tools. For example, if you have matplotlib installed, you could quickly make a histogram of the intensity dimension: .. code-block:: python import matplotlib.pyplot as plt plt.hist(las.intensity) plt.title("Histogram of the Intensity Dimension") plt.show() .. image:: ./_static/tutorial_histogram.png :width: 600 **Writing Data** Once you've found your data subsets of interest, you probably want to store them somewhere. How about in new .LAS files? Creating a :class:`.LasData` can be done by using its constructor which expects a :class:`.LasHeader` whether created from scratch or from an input file. Or by using the :func:`laspy.create`. .. code-block:: python # Create a new LasData from the header of the input file sub_las = laspy.LasData(las.header) sub_las.points = points_kept.copy() sub_las.write("close_points.las") ground_las = laspy.LasData(las.header) ground_las.points = ground_points.copy() ground_las.write("ground_points.las") For another example, let's return to the bounding box script above. Let's say we want to keep only points which fit within the given bounding box, and store them to a new file: .. code-block:: python import laspy import numpy as np las = laspy.read("tests/data/data/simple.las") # Get arrays which indicate VALID X, Y, or Z values. X_invalid = (las.header.min[0] <= las.x) & (las.header.max[0] >= las.x) Y_invalid = (las.header.min[1] <= las.y) & (las.header.max[1] >= las.y) Z_invalid = (las.header.min[2] <= las.z) & (las.header.max[2] >= las.z) good_indices = np.where(X_invalid & Y_invalid & Z_invalid) good_points = las.points[good_indices].copy() output_file = laspy.LasData(las.header) output_file.points = good_points output_file.write("good_points.las") **Variable Length Records** Variable length records, or VLRs, are available in laspy via :attr:`.LasData.vlrs`. of a :class:`.LasData` or :class:`LasHeader`. This property will return a list of :class:`laspy.VLR` instances.d. For a summary of what VLRs are, refer to the "Defined Variable Length Records" section of the LAS specification. To create a VLR, you really only need to know user_id, record_id, and the data you want to store in VLR_body (For a fuller discussion of what a VLR is, see the background section). The rest of the attributes are filled with null bytes or calculated according to your input, but if you'd like to specify the reserved or description fields you can do so with additional arguments. .. code-block:: python import laspy las = laspy.read("./tests/data/data/simple.las") # Instantiate a new VLR. new_vlr = laspy.VLR(user_id="The User ID", record_id=1, record_data=b"\x00" * 1000) # Do the same thing, but add a description field. new_vlr = laspy.VLR("The User ID",1, description = "A description goes here.", record_data=b"\x00" * 1000,) # Append our new vlr to the current list. As the above dataset is derived # from simple.las which has no VLRS, this will be an empty list. las.vlrs.append(new_vlr) las.write("close_points.las") laspy-laspy-a32c7aa/docs/conf.py000066400000000000000000000126771463461040100167160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/stable/config # -- Path setup -------------------------------------------------------------- # 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. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = "laspy" copyright = "2018-2022, laspy" author = "Thomas Montaigu" # Parse the version from setup.py. with open("../laspy/__init__.py") as f: for line in f: if line.find("__version__") >= 0: version = line.split("=")[1].strip() version = version.strip(",") version = version.strip('"') version = version.strip("'") continue release = version # -- 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.githubpages", "sphinx.ext.autodoc", "sphinx.ext.autosummary", "sphinx.ext.todo", "sphinx.ext.mathjax", "sphinx.ext.viewcode", "sphinx.ext.napoleon", "sphinx.ext.intersphinx", "sphinx.ext.doctest", "m2r2", # 'sphinx_autodoc_typehints' ] napoleon_use_param = True # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = ".rst" # The master toctree document. master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path . exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. pygments_style = "sphinx" autodoc_member_order = "bysource" # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "sphinx_rtd_theme" language = "en" def setup(app): app.add_css_file("style.css") # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom 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"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = "laspydoc" # -- 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': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, "laspy.tex", "laspy Documentation", "Ryan McCarthy", "manual"), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "laspy", "laspy Documentation", [author], 1)] # -- 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 = [ ( master_doc, "laspy", "laspy Documentation", author, "laspy", "One line description of project.", "Miscellaneous", ), ] # -- Extension configuration ------------------------------------------------- intersphinx_mapping = { "python": ("https://docs.python.org/3", None), } laspy-laspy-a32c7aa/docs/contributing.rst000066400000000000000000000023471463461040100206510ustar00rootroot00000000000000Contributing ============ Setup ----- To work on laspy, as it often recommended in python projects, a virtual env should be used, eg: .. code-block:: console python -m venv .venv source .venv/bin/activate # bash/zsh .venv/Scripts/Activate.ps1 # windows powershell To install ``laspy`` in *development mode*: .. code-block:: console pip install -e .[dev] The ``[dev]`` option will install all the extra tools needed to run tests, format files and get coverage. To install with optional dependencies .. code-block:: console pip install -e .[dev,lazrs,pyproj] Commands -------- Running Tests _____________ .. code-block:: console pytest Formatting __________ .. code-block:: console black . Coverage _________ .. code-block:: console coverage run # get report in the CLI coverage report # get report as a nice navigable html coverage html However, the commands above will only give the coverage for the set of optional dependencies installed. Getting a more complete is possible (but takes more time); .. code-block:: console nox -s coverage coverage combine # get report in the CLI coverage report # get report as a nice navigable html coverage html laspy-laspy-a32c7aa/docs/examples.rst000066400000000000000000000054371463461040100177630ustar00rootroot00000000000000================== Examples ================== Filtering --------- This example shows how you can extract points from a file and write them into a new one. We use the classification field to filter points, but this can work with the other fields. .. code-block:: python import laspy las = laspy.read('tests/data/simple.las') new_file = laspy.create(point_format=las.header.point_format, file_version=las.header.version) new_file.points = las.points[las.classification == 1] new_file.write('extracted_points.las') Creating from scratch --------------------- There are multiple ways to create new las files. Creating a new LasData ______________________ .. code-block:: python import laspy import numpy as np # 0. Creating some dummy data my_data_xx, my_data_yy = np.meshgrid(np.linspace(-20, 20, 15), np.linspace(-20, 20, 15)) my_data_zz = my_data_xx ** 2 + 0.25 * my_data_yy ** 2 my_data = np.hstack((my_data_xx.reshape((-1, 1)), my_data_yy.reshape((-1, 1)), my_data_zz.reshape((-1, 1)))) # 1. Create a new header header = laspy.LasHeader(point_format=3, version="1.2") header.add_extra_dim(laspy.ExtraBytesParams(name="random", type=np.int32)) header.offsets = np.min(my_data, axis=0) header.scales = np.array([0.1, 0.1, 0.1]) # 2. Create a Las las = laspy.LasData(header) las.x = my_data[:, 0] las.y = my_data[:, 1] las.z = my_data[:, 2] las.random = np.random.randint(-1503, 6546, len(las.points), np.int32) las.write("new_file.las") Using LasWriter _______________ .. code-block:: python import laspy import numpy as np # 0. Creating some dummy data my_data_xx, my_data_yy = np.meshgrid(np.linspace(-20, 20, 15), np.linspace(-20, 20, 15)) my_data_zz = my_data_xx ** 2 + 0.25 * my_data_yy ** 2 my_data = np.hstack((my_data_xx.reshape((-1, 1)), my_data_yy.reshape((-1, 1)), my_data_zz.reshape((-1, 1)))) # 1. Create a new header header = laspy.LasHeader(point_format=3, version="1.2") header.offsets = np.min(my_data, axis=0) header.scales = np.array([0.1, 0.1, 0.1]) # 3. Create a LasWriter and a point record, then write it with laspy.open("somepath.las", mode="w", header=header) as writer: point_record = laspy.ScaleAwarePointRecord.zeros(my_data.shape[0], header=header) point_record.x = my_data[:, 0] point_record.y = my_data[:, 1] point_record.z = my_data[:, 2] writer.write_points(point_record) Using chunked reading & writing ------------------------------- This example shows how to use the 'chunked' reading and writing feature to split potentially large LAS/LAZ file into multiple smaller file. .. literalinclude:: ../examples/recursive-split.py :language: Python COPC ---- .. literalinclude:: ../examples/copc.py laspy-laspy-a32c7aa/docs/index.rst000066400000000000000000000035421463461040100172470ustar00rootroot00000000000000.. laspy documentation master file, created by sphinx-quickstart on Wed Mar 28 09:00:58 2018. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. =========================================== laspy: Python library for lidar LAS/LAZ IO. =========================================== `LAS`_ (and its compressed counterpart LAZ), is a popular format for lidar pointcloud and full waveform, laspy reads and writes these formats and provides a Python API via Numpy Arrays. .. _LAS: https://www.asprs.org/committee-general/laser-las-file-format-exchange-activities.html Here is an example of reading in LAZ data and getting some simple summaries of the pointcloud: .. testcode:: import numpy as np import laspy with laspy.open('laspytests/data/simple.laz') as fh: print('Points from Header:', fh.header.point_count) las = fh.read() print(las) print('Points from data:', len(las.points)) ground_pts = las.classification == 2 bins, counts = np.unique(las.return_number[ground_pts], return_counts=True) print('Ground Point Return Number distribution:') for r,c in zip(bins,counts): print(' {}:{}'.format(r,c)) Would output: .. testoutput:: Points from Header: 1065 , 1065 points, 0 vlrs)> Points from data: 1065 Ground Point Return Number distribution: 1:239 2:25 3:11 4:1 User Guide ========== .. toctree:: :maxdepth: 2 installation intro basic examples complete_tutorial lessbasic migration changelog contributing API Documentation ================= .. toctree:: :maxdepth: 2 api/index Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` laspy-laspy-a32c7aa/docs/installation.rst000066400000000000000000000070451463461040100206430ustar00rootroot00000000000000.. _installation: ============ Installation ============ Short Instructions ================== Pip ____ .. code-block:: shell # Install _without_ LAZ support pip install laspy # Install with LAZ support via lazrs pip install laspy[lazrs] # Install with LAZ support via laszip pip install laspy[laszip] # Install with LAZ support via both lazrs & laszip pip install laspy[lazrs,laszip] Conda _____ A conda build of laspy is available and maintained (but not by laspy) .. code-block:: shell conda install -c conda-forge laspy ``lazrs`` is also available on conda .. code-block:: shell conda install -c conda-forge lazrs-python However, ``laszip`` [#f1]_ is not available via conda. Optional dependencies / features ================================= LAZ support ___________ laspy does not support LAZ (.laz) file by itself but can use one of two optional dependencies to support compressed LAZ files. The 2 supported options are: 1) `lazrs`_ `[lazrs PyPi]`_ 2) `laszip-python`_ (bindings to `laszip`_) When encountering LAZ data, laspy will try to use one of the backend in the order described above. (Example: if lazrs is not installed or if it fails during, the process, laspy will try laszip) `lazrs`_ is a Rust port of the laszip compression and decompression. Its main advantage is that it is able to compress/decompress using multiple threads which can greatly speed up things. However it does not supports points with waveforms. `laszip`_ is the official and original LAZ implementation by Martin Isenburg. The advantage of the `laszip` backend is that its the official implementation, it supports points with waveform but does not offer multi-threaded compression/decompression. Both the laszip bindings and lazrs are available on pip. To install laspy with one of its supported backend use one of the commands show in the section above. .. _lazrs: https://github.com/tmontaigu/laz-rs .. _laszip-python: https://github.com/tmontaigu/laszip-python .. _laszip: https://github.com/LASzip/LASzip .. _[lazrs PyPi]: https://pypi.org/project/lazrs/ CRS / SRS _________ LAS files allows to define the CRS / SRS in which the points coordinates are. When `pyproj`_ is installed, you can use the :meth:`.LasHeader.add_crs` to add CRS information to a file, or you can use :meth:`.LasHeader.parse_crs` to get `pyproj.CRS`. .. _pyproj: https://pypi.org/project/pyproj/ Cloud Optimized Point Cloud (COPC) __________________________________ `laspy` supports `COPC`_ files via its :class:`.CopcReader` class. This features **requires** the optional dependency ``lazrs`` to be installed. Optionaly, when python package `requests`_ is installed the :class:`.CopcReader` can handle COPC that are in a HTTP server. .. _COPC: https://github.com/copcio/copcio.github.io .. _requests: https://docs.python-requests.org/en/latest .. rubric:: Footnotes. .. [#f1] A ``laszip`` package exists on conda-forge, but it only includes the C++ library, not the the Python bindings, which means that installing it won't give you a LAZ capable laspy installation. CLI --- laspy has an optional command line interface (CLI) with the following commands: * ``laspy info`` to print informations about a LAS/LAZ file * ``laspy compress`` / ``laspy decompress`` to compress/decompress one or many file * ``laspy convert`` to convert file(s) between version and point format * ``laspy copc query`` to download to a LAS/LAZ file some points from a COPC ressource. As the cli requires etra dependencies, it has to be installed using ``pip install laspy[cli]``. laspy-laspy-a32c7aa/docs/intro.rst000066400000000000000000000346311463461040100172760ustar00rootroot00000000000000==================== What is a LAS file ? ==================== LAS is a public file format meant to exchange 3D point data, mostly used to exchange lidar point clouds. LAZ is a **lossless** compression of the LAS format. The latest LAS specification is the `LAS 1.4`_. laspy supports LAS files from Version 1.2 to 1.4. .. _LAS 1.4: https://www.asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf LAS files are organized in 3 main parts: 1) Header 2) VLRs 3) Point Records Header ------ The header contains information about the data such as its version, the point format (which tells the different dimensions stored for each points). See :ref:`accessing_header` VLRs ---- After the header, LAS files may contain VLRs (Variable Length Record). VLRs are meant to store additional information such as the SRS (Spatial Reference System), description on extra dimensions added to the points. VLRs are divided in two parts: 1) header 2) payload The payload is limited to 65,535 bytes (Because in the header, the length of the payload is stored on a uint16). See :ref:`manipulating_vlrs` Point Records ------------- The last chunk of data (and the biggest one) contains the point records. In a LAS file, points are stored sequentially. The point records holds the point cloud data the LAS Spec specifies 10 point formats. A point format describe the dimensions stored for each point in the record. Each LAS specification added new point formats, the table below describe the compatibility between point formats and LAS file version. +-----------------+-----------------------------------+ |LAS file version + Compatible point formats | +=================+===================================+ |1.2 | 0, 1, 2, 3 | +-----------------+-----------------------------------+ |1.3 | 0, 1, 2, 3, 4, 5 | +-----------------+-----------------------------------+ |1.4 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 | +-----------------+-----------------------------------+ The names written in the tables below are the one you will have to use in your code. .. note:: The dimensions 'X', 'Y', 'Z' are signed integers without the scale and offset applied. To access the coordinates as doubles simply use 'x', 'y' , 'z' Point Format 0 ++++++++++++++ +----------------------+-----------+--------------+ | Dimensions | Type | Size (bit) | +======================+===========+==============+ | X | signed | 32 | +----------------------+-----------+--------------+ | Y | signed | 32 | +----------------------+-----------+--------------+ | Z | signed | 32 | +----------------------+-----------+--------------+ | intensity | unsigned | 16 | +----------------------+-----------+--------------+ | return_number | unsigned | 3 | +----------------------+-----------+--------------+ | number_of_returns | unsigned | 3 | +----------------------+-----------+--------------+ | scan_direction_flag | bool | 1 | +----------------------+-----------+--------------+ | edge_of_flight_line | bool | 1 | +----------------------+-----------+--------------+ | classification | unsigned | 5 | +----------------------+-----------+--------------+ | synthetic | bool | 1 | +----------------------+-----------+--------------+ | key_point | bool | 1 | +----------------------+-----------+--------------+ | withheld | bool | 1 | +----------------------+-----------+--------------+ | scan_angle_rank | signed | 8 | +----------------------+-----------+--------------+ | user_data | unsigned | 8 | +----------------------+-----------+--------------+ | point_source_id | unsigned | 8 | +----------------------+-----------+--------------+ The point formats 1, 2, 3, 4, 5 are based on the point format 0, meaning that they have the same dimensions plus some additional dimensions: Point Format 1 ++++++++++++++ +----------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +======================+===========+==============+ | gps_time | Floating | 64 | +----------------------+-----------+--------------+ Point Format 2 ++++++++++++++ +----------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +======================+===========+==============+ | red | unsigned | 16 | +----------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------+-----------+--------------+ Point Format 3 ++++++++++++++ +----------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +======================+===========+==============+ | gps_time | Floating | 64 | +----------------------+-----------+--------------+ | red | unsigned | 16 | +----------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------+-----------+--------------+ Point Format 4 ++++++++++++++ +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | gps_time | Floating | 64 | +----------------------------+-----------+--------------+ | wavepacket_index | unsigned | 8 | +----------------------------+-----------+--------------+ | wavepacket_offset | unsigned | 64 | +----------------------------+-----------+--------------+ | wavepacket_size | unsigned | 32 | +----------------------------+-----------+--------------+ | return_point_wave_location | floating | 32 | +----------------------------+-----------+--------------+ | x_t | floating | 32 | +----------------------------+-----------+--------------+ | y_t | floating | 32 | +----------------------------+-----------+--------------+ | z_t | floating | 32 | +----------------------------+-----------+--------------+ Point Format 5 ++++++++++++++ +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | gps_time | Floating | 64 | +----------------------------+-----------+--------------+ | red | unsigned | 16 | +----------------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------------+-----------+--------------+ | wavepacket_index | unsigned | 8 | +----------------------------+-----------+--------------+ | wavepacket_offset | unsigned | 64 | +----------------------------+-----------+--------------+ | wavepacket_size | unsigned | 32 | +----------------------------+-----------+--------------+ | return_point_wave_location | unsigned | 32 | +----------------------------+-----------+--------------+ | x_t | floating | 32 | +----------------------------+-----------+--------------+ | y_t | floating | 32 | +----------------------------+-----------+--------------+ | z_t | floating | 32 | +----------------------------+-----------+--------------+ Point Format 6 ++++++++++++++ The Point Format 6, is the new base point format (6, 7, 8, 9, 10) introduced in the LAS specification 1.4. The main modifications from point format 0 and point format 6 are that now the gps_time is baseline and some fields takes more bits, for example the classification is now stored on 8 bits (previously 5). +----------------------+-----------+--------------+ | Dimensions | Type | Size (bit) | +======================+===========+==============+ | X | signed | 32 | +----------------------+-----------+--------------+ | Y | signed | 32 | +----------------------+-----------+--------------+ | Z | signed | 32 | +----------------------+-----------+--------------+ | intensity | unsigned | 16 | +----------------------+-----------+--------------+ | return_number | unsigned | 4 | +----------------------+-----------+--------------+ | number_of_returns | unsigned | 4 | +----------------------+-----------+--------------+ | synthetic | bool | 1 | +----------------------+-----------+--------------+ | key_point | bool | 1 | +----------------------+-----------+--------------+ | withheld | bool | 1 | +----------------------+-----------+--------------+ | overlap | bool | 1 | +----------------------+-----------+--------------+ | scanner_channel | unsigned | 2 | +----------------------+-----------+--------------+ | scan_direction_flag | bool | 1 | +----------------------+-----------+--------------+ | edge_of_flight_line | bool | 1 | +----------------------+-----------+--------------+ | classification | unsigned | 8 | +----------------------+-----------+--------------+ | user_data | unsigned | 8 | +----------------------+-----------+--------------+ | scan_angle | signed | 16 | +----------------------+-----------+--------------+ | point_source_id | unsigned | 8 | +----------------------+-----------+--------------+ | gps_time | Floating | 64 | +----------------------+-----------+--------------+ Point Format 7 ++++++++++++++ Add RGB to point format 6. +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | red | unsigned | 16 | +----------------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------------+-----------+--------------+ Point Format 8 ++++++++++++++ Adds RGB and Nir (Near Infrared) to point format 6. +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | red | unsigned | 16 | +----------------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------------+-----------+--------------+ | nir | unsigned | 16 | +----------------------------+-----------+--------------+ Point Format 9 ++++++++++++++ Add waveform data to points +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | wavepacket_index | unsigned | 8 | +----------------------------+-----------+--------------+ | wavepacket_offset | unsigned | 64 | +----------------------------+-----------+--------------+ | wavepacket_size | unsigned | 32 | +----------------------------+-----------+--------------+ | return_point_wave_location | unsigned | 32 | +----------------------------+-----------+--------------+ | x_t | floating | 32 | +----------------------------+-----------+--------------+ | y_t | floating | 32 | +----------------------------+-----------+--------------+ | z_t | floating | 32 | +----------------------------+-----------+--------------+ Point Format 10 +++++++++++++++ Adds RGB, Nir (near infrared), waveform data to point format 6 +----------------------------+-----------+--------------+ | Added dimensions | Type | Size (bit) | +============================+===========+==============+ | red | unsigned | 16 | +----------------------------+-----------+--------------+ | green | unsigned | 16 | +----------------------------+-----------+--------------+ | blue | unsigned | 16 | +----------------------------+-----------+--------------+ | nir | unsigned | 16 | +----------------------------+-----------+--------------+ | wavepacket_index | unsigned | 8 | +----------------------------+-----------+--------------+ | wavepacket_offset | unsigned | 64 | +----------------------------+-----------+--------------+ | wavepacket_size | unsigned | 32 | +----------------------------+-----------+--------------+ | return_point_wave_location | unsigned | 32 | +----------------------------+-----------+--------------+ | x_t | floating | 32 | +----------------------------+-----------+--------------+ | y_t | floating | 32 | +----------------------------+-----------+--------------+ | z_t | floating | 32 | +----------------------------+-----------+--------------+ EVLRs ----- Version 1.4 of the LAS specification added a last block following the point records: EVLRs (Extended Variable Length Record) which are the same thing as VLRs but they can carry a higher payload (length of the payload is stored on a uint64) laspy-laspy-a32c7aa/docs/lessbasic.rst000066400000000000000000000116151463461040100201100ustar00rootroot00000000000000================= Less Basic Things ================= Extra Dimensions ================ The LAS Specification version 1.4 defines a standard way to add extra dimensions to a LAS file. In laspy you can add extra dimensions using the :meth:`.LasData.add_extra_dim` function The Allowed base types for an extra dimensions are: +-------------------------+-------------+-------------+ | laspy name | size (bits) | type | +=========================+=============+=============+ | u1 or uint8 | 8 | unsigned | +-------------------------+-------------+-------------+ | i1 or int8 | 8 | signed | +-------------------------+-------------+-------------+ | u2 or uint16 | 16 | unsigned | +-------------------------+-------------+-------------+ | i2 or int16 | 16 | signed | +-------------------------+-------------+-------------+ | u4 or uint32 | 32 | unsigned | +-------------------------+-------------+-------------+ | i4 or int32 | 32 | signed | +-------------------------+-------------+-------------+ | u8 or uint64 | 64 | unsigned | +-------------------------+-------------+-------------+ | i8 or int64 | 64 | signed | +-------------------------+-------------+-------------+ | f4 or float32 | 32 | floating | +-------------------------+-------------+-------------+ | f8 or float64 | 64 | floating | +-------------------------+-------------+-------------+ You can prepend the number '2' or '3' to one of the above base type to define an extra dimension that is array of 2 or 3 elements per points. Example: 3u2 -> each points will have an extra dimension that is an array of 3 * 16 bits Here we are adding a new dimension called "codification" where each value is stored on a 64 bit unsigned integer and an array field of 3 doubles for each points. .. code-block:: python import laspy import numpy as np las = laspy.read("somefile.las") las.add_extra_dim(laspy.ExtraBytesParams( name="codification", type=np.uint64, description="More classes available" )) las.add_extra_dim(laspy.ExtraBytesParams(name="mysterious", type="3f8")) .. note:: Although the specification of the ExtraBytesVlr appeared in the 1.4 LAS Spec, laspy allows to add new dimensions to file with version < 1.4 .. note:: If you are adding multiple extra dimensions use :meth:`.LasData.add_extra_dims` as it is more efficient (it allows to allocate all the dimensions at once instead of re-allocating each time a new dimension is added. Custom VLRs =========== Provided you have a valid user_id and record_id (meaning that they are not taken by a VLR described in the LAS specification) You can add you own VLRs to a file Fast & Easy way --------------- The fastest and easiest way to add your custom VLR to a file is to create a :class:`.VLR`, set its record_data (which must be bytes) and add it to the VLR list. >>> import laspy >>> vlr = laspy.vlrs.VLR(user_id='A UserId', record_id=1, description='Example VLR') >>> vlr >>> vlr.record_data = b'somebytes' >>> vlr >>> las = laspy.create() >>> las.vlrs [] >>> las.vlrs.append(vlr) >>> las.vlrs [] Complete & Harder way --------------------- While the way shown above is quick & easy it might not be perfect for complex VLRs. Also when reading a file that has custom VLR, laspy won't be able to automatically parse its data into a better structure, so you will have to find the VLR in the vlrs list and parse it yourself one laspy is done. One way to automate this task is to create your own Custom VLR Class that extends :class:`.BaseKnownVLR` by implementing the missing methods laspy will be able to automatically parse the VLR when reading the file & write it when saving the file. >>> class CustomVLR(laspy.vlrs.BaseKnownVLR): ... def __init__(self): ... super().__init__() ... self.numbers = [] ... ... @staticmethod ... def official_user_id(): ... return "CustomId" ... ... @staticmethod ... def official_record_ids(): ... return 1, ... ... def record_data_bytes(self): ... return bytes(self.numbers) ... ... def parse_record_data(self, record_data): ... self.numbers = [b for b in record_data] ... ... def __repr__(self): ... return "" >>> import numpy as np >>> cvlr = CustomVLR() >>> cvlr.numbers [] >>> cvlr.numbers = [1,2, 3] >>> las = laspy.create() >>> las.vlrs.append(cvlr) >>> las.vlrs [] >>> las.x = np.array([1.0, 2.0]) >>> las = laspy.lib.write_then_read_again(las) >>> las.vlrs [] >>> las.vlrs[0].numbers [1, 2, 3] laspy-laspy-a32c7aa/docs/migration.rst000066400000000000000000000207541463461040100201350ustar00rootroot00000000000000.. _migration_guides: Migration guides ================ From laspy 1.7.x to laspy 2.0.0 ------------------------------- laspy 2.0 is essentially a complete overhaul of the code base so you will probably have a few changes to make to the parts of your code that uses laspy 1.7. However there should not be that many, and should hopefully be worth. The benefits of laspy 2.0 are: - Better LAZ support: reading *and* writing of LAZ 1.1 to 1.4 (See the :ref:`installation` section) - Support for Chunked / Streaming reading and writing of LAS/LAZ files. - Support for reading data coming from other sources than files on disk (bytes or file-objects) The biggest changes between 1.7 and 2.0 are how files are read and written. laspy 1.7 had the concept of `laspy.File` with an open mode. laspy 2.0 does not have the `laspy.File` class anymore but a :class:`.LasData` class instead which provide access to the `header`, `vlrs` and fields/dimensions. The `get_*` and `set_*` (eg `get_classification`) of `laspy.File` are not available in the new :class:`.LasData`. The following sections should hopefully get you started Reading a file ______________ .. code-block:: python import laspy # Opening a file in laspy 1.7 file = laspy.file.File("somepath.las", mode ="r") # Reading a file in laspy 2.0 las = laspy.read("somepath.las") Accessing the point fields / dimensions _______________________________________ .. code-block:: python # accessing a field in laspy 1.7: classification = file.classification # accessing a field in laspy 2.0 (names from 1.7 should be compatible with 2.0): classification = las.classification Writing _______ .. code-block:: python # laspy 1.7: file.pt_src_id[:] = 2 file.close() # laspy 2.0 las.pt_src_id[:] = 2 las.write("somepath.laz") Creating a file _______________ .. code-block:: python import laspy # laspy 1.7 new_file = laspy.file.File("new_path.las", header=file.header, mode="w") new_file.X = ... new_file.Y = ... ... new_file.close() # laspy 2.0 new_las = laspy.LasData(las.header) new_las.X = ... new_las.Y = ... ... new_las.write("new_las.las") # if you do not have an existing header: new_las = laspy.create(file_version="1.2", point_format=3) new_las.X = ... new_las.Y = ... ... new_las.write("new_las.las") # or new_header = laspy.LasHeader(version="1.2", point_format=3) new_las = laspy.LasData(las.header) new_las.X = ... new_las.Y = ... ... new_las.write("new_las.las") Header change _____________ The `Header` (:class:`.LasHeader`) class was modernized from laspy 1.7 to laspy 2.0, a few of the field names in the new header class do not have the same name. This list is non exhaustive, and for the items in this list the backward compatibility could be kept (meaning the 1.7 name is still usable) +--------------------+------------------------------+ | 1.7 name | 2.0 name | +====================+==============================+ | max | maxs | +--------------------+------------------------------+ | min | mins | +--------------------+------------------------------+ | scale | scales | +--------------------+------------------------------+ | offset | offsets | +--------------------+------------------------------+ | filesource_id | file_source_id | +--------------------+------------------------------+ | major_version | version.major | +--------------------+------------------------------+ | minor_version | version.minor | +--------------------+------------------------------+ | system_id | system_identifier | +--------------------+------------------------------+ | date | creation_date | +--------------------+------------------------------+ | point_return_count | number_of_points_by_return | +--------------------+------------------------------+ | software_id | generating_software | +--------------------+------------------------------+ From pylas 0.4.x to laspy 2.0.0 ------------------------------- laspy 2.0 is essentially pylas, so the core of the library is the same. Changes in LAZ backend ______________________ With laspy 2.0.0, the lazperf backend support was dropped, and the laszip backend changed from using the laszip executable to using laszip python bindings. If you used lazperf or relied on the laszip executable you'll have to choose between the available backends. (see Installation section). Changes in bit fields _____________________ Some fields in LAS are 'bit fields'. with laspy 0.4.x, there was a inconsistency between 'normal' fields and 'bit' fields, when getting a bit field, laspy returned a copy of the values in a new numpy array whereas when getting a normal field, the array you got acted as a 'view' on the real array where the values where stored. That meant that modifying the values of the array you got from a bit field would no propagate to the real array. .. code-block:: python import laspy import numpy as np las = laspy.read("tests/data/simple.las") # return number is a bit field print(las.return_number) # array([1, 1, 1, ..., 1, 1, 1], dtype=uint8) ascending_order = np.argsort(las.return_number)[::-1] print(las.return_number[ascending_order]) # array([4, 4, 4, ..., 1, 1, 1], dtype=uint8) las.return_number[:] = las.return_number[ascending_order] print(las.return_number) # array([1, 1, 1, ..., 1, 1, 1], dtype=uint8) # bif oof las.return_number[0] = 7 print(las.return_number) # array([1, 1, 1, ..., 1, 1, 1], dtype=uint8) # again value not updated # To actually update you have to do las.return_number = las.return_number[ascending_order] print(las.return_number) # array([4, 4, 4, ..., 1, 1, 1], dtype=uint8) rn = las.return_number[ascending_order] rn[0] = 7 las.return_number = rn print(las.return_number) # array([7, 4, 4, ..., 1, 1, 1], dtype=uint8) In order to try to solve this inconsistency, laspy >= 0.5.0 introduced the :class:`.SubFieldView` class that is meant to propagate modifications to the real array, and tries to act like a real numpy array. .. code-block:: python import laspy import numpy as np las = laspy.read("tests/data/simple.las") print(las.return_number) # ascending_order = np.argsort(las.return_number)[::-1] las.return_number[:] = las.return_number[ascending_order] print(las.return_number) # las.return_number[0] = 7 print(las.return_number) # It may be possible that some operation on SubFieldView fail, in that case it is easy to copy them to numpy arrays: .. code-block:: python import laspy import numpy as np las = laspy.read("tests/data/simple.las") print(las.return_number) # array = np.array(las.return_number) # array([1, 1, 1, ..., 1, 1, 1], dtype=uint8) The logic is also the same for 'Scaled dimensions' such as x, y, z and scaled extra bytes, where a ScaledArrayView class has been introduced .. code-block:: python import laspy import numpy as np las = laspy.read("tests/data/simple.las") print(las.x) # > # ScaledArray view should behave as much as possible as a numpy array # However if something breaks in your code when upgrading, and / or # you need a true numpy array you can get one by doing array = np.array(las.x) # array([637012.24, 636896.33, 636784.74, ..., 637501.67, 637433.27, # 637342.85]) Changes in extra bytes creation _______________________________ The API to create extra bytes changed slightly, now the parameters needed (and the optional ones) are coupled into :class:`.ExtraBytesParams` Other changes _____________ The `points` attribute of as :class:`.LasData` used to return a numpy array it now returns a :class:`.PackedPointRecord` to get the same array as before, use the `array` property of the point record. .. code-block:: python # laspy <= 0.4.3 las = laspy.read("somefile.las") array = las.points # laspy 1.0.0 las = laspy.read("somefile.las") array = las.points.array laspy-laspy-a32c7aa/examples/000077500000000000000000000000001463461040100162705ustar00rootroot00000000000000laspy-laspy-a32c7aa/examples/copc.py000066400000000000000000000034421463461040100175710ustar00rootroot00000000000000import time import laspy from laspy import Bounds, CopcReader def create_query(header): querys = [] sizes = header.maxs - header.mins # Bottom left query_bounds = Bounds(mins=header.mins, maxs=header.mins + sizes / 2) query_bounds.maxs[2] = header.maxs[2] querys.append(query_bounds) # Top Right # Bounds can also be 2D (then all Z are considered) query_bounds = Bounds(mins=(header.mins + sizes / 2)[:2], maxs=header.maxs[:2]) querys.append(query_bounds) return querys def main(): # path = "http://localhost:8000/autzen-classified.copc(1).laz" # path = "http://localhost:8000/sofi.copc.laz" # path = "https://s3.amazonaws.com/hobu-lidar/autzen-classified.copc.laz" # path = "https://s3.amazonaws.com/hobu-lidar/sofi.copc.laz" # path = "https://s3.amazonaws.com/hobu-lidar/montreal-2015.copc.laz" path = "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" with CopcReader.open(path) as crdr: print("copc_reader_ready") # querys = create_query(crdr.header) # for i, query_bounds in enumerate(querys): # resolution = None # points = crdr.query(query_bounds, resolution=resolution) # print("Spatial Query gave:", points) # print(len(points) / crdr.header.point_count * 100); # new_header = laspy.LasHeader( # version=crdr.header.version, # point_format=crdr.header.point_format # ) # new_header.offsets = crdr.header.offsets # new_header.scales = crdr.header.scales # with laspy.open(f"output_{i}.las", mode="w", header=new_header) as f: # f.write_points(points) if __name__ == "__main__": t0 = time.time() main() t1 = time.time() print("It took:", t1 - t0, " seconds") laspy-laspy-a32c7aa/examples/field-randomizer.py000066400000000000000000000036651463461040100221070ustar00rootroot00000000000000from argparse import ArgumentParser from pathlib import Path import numpy as np import laspy def main(args): files = ( [args.in_path] if args.in_path.is_file() else list(args.in_path.glob("*.la[s-z]")) ) if args.out_path.suffix and len(files) > 1: raise SystemExit("in_path is a directory and out path is a file") for i, path in enumerate(files, start=1): print(f"{i} / {len(files)} -> {path}") las = laspy.read(path) dimensions = ( dim for dim in las.point_format.dimensions if dim.name not in args.exclude ) for dimension in dimensions: print(f"\t{dimension.name}", end="") if np.any(las[dimension.name] != 0) and args.keep_existing: print("...skipped because it is already populated") continue if dimension.kind == laspy.DimensionKind.FloatingPoint: las[dimension.name] = np.random.uniform( low=dimension.min, high=dimension.max, size=len(las.points) ) else: type_str = ( dimension.type_str() if dimension.kind != laspy.DimensionKind.BitField else "u1" ) las[dimension.name] = np.random.randint( dimension.min, dimension.max + 1, len(las.points), type_str ) print() if args.out_path.suffix: las.write(args.out_path) else: las.write(args.out_path / path.name) if __name__ == "__main__": parser = ArgumentParser("Randomize fields of your las file") parser.add_argument("in_path", type=Path) parser.add_argument("out_path", type=Path) parser.add_argument("--keep-existing", action="store_true") parser.add_argument("--exclude", nargs="*", default=["X", "Y", "Z"]) args = parser.parse_args() main(args) laspy-laspy-a32c7aa/examples/recursive-split.py000066400000000000000000000061651463461040100220120ustar00rootroot00000000000000import argparse import sys from pathlib import Path from typing import List, Optional import numpy as np import laspy def recursive_split(x_min, y_min, x_max, y_max, max_x_size, max_y_size): x_size = x_max - x_min y_size = y_max - y_min if x_size > max_x_size: left = recursive_split( x_min, y_min, x_min + (x_size // 2), y_max, max_x_size, max_y_size ) right = recursive_split( x_min + (x_size // 2), y_min, x_max, y_max, max_x_size, max_y_size ) return left + right elif y_size > max_y_size: up = recursive_split( x_min, y_min, x_max, y_min + (y_size // 2), max_x_size, max_y_size ) down = recursive_split( x_min, y_min + (y_size // 2), x_max, y_max, max_x_size, max_y_size ) return up + down else: return [(x_min, y_min, x_max, y_max)] def tuple_size(string): try: return tuple(map(float, string.split("x"))) except: raise ValueError("Size must be in the form of numberxnumber eg: 50.0x65.14") def main(): parser = argparse.ArgumentParser( "LAS recursive splitter", description="Splits a las file bounds recursively" ) parser.add_argument("input_file") parser.add_argument("output_dir") parser.add_argument("size", type=tuple_size, help="eg: 50x64.17") parser.add_argument("--points-per-iter", default=10**6, type=int) args = parser.parse_args() with laspy.open(sys.argv[1]) as file: sub_bounds = recursive_split( file.header.x_min, file.header.y_min, file.header.x_max, file.header.y_max, args.size[0], args.size[1], ) writers: List[Optional[laspy.LasWriter]] = [None] * len(sub_bounds) try: count = 0 for points in file.chunk_iterator(args.points_per_iter): print(f"{count / file.header.point_count * 100}%") # For performance we need to use copy # so that the underlying arrays are contiguous x, y = points.x.copy(), points.y.copy() point_piped = 0 for i, (x_min, y_min, x_max, y_max) in enumerate(sub_bounds): mask = (x >= x_min) & (x <= x_max) & (y >= y_min) & (y <= y_max) if np.any(mask): if writers[i] is None: output_path = Path(sys.argv[2]) / f"output_{i}.laz" writers[i] = laspy.open( output_path, mode="w", header=file.header ) sub_points = points[mask] writers[i].write_points(sub_points) point_piped += np.sum(mask) if point_piped == len(points): break count += len(points) print(f"{count / file.header.point_count * 100}%") finally: for writer in writers: if writer is not None: writer.close() if __name__ == "__main__": main() laspy-laspy-a32c7aa/laspy/000077500000000000000000000000001463461040100156025ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/__init__.py000066400000000000000000000014531463461040100177160ustar00rootroot00000000000000__version__ = "2.5.4" import logging from . import errors, file, vlrs from .copc import Bounds, CopcReader from .errors import LaspyException from .header import LasHeader from .lasdata import LasData from .lasreader import LasReader from .laswriter import LasWriter from .lib import DecompressionSelection, LazBackend, convert from .lib import create_las as create from .lib import mmap_las as mmap from .lib import open_las as open from .lib import read_las as read from .point import DimensionInfo, DimensionKind, ExtraBytesParams, PointFormat from .point.dims import supported_point_formats, supported_versions from .point.format import lost_dimensions from .point.record import PackedPointRecord, ScaleAwarePointRecord from .vlrs import VLR logging.getLogger(__name__).addHandler(logging.NullHandler()) laspy-laspy-a32c7aa/laspy/_compression/000077500000000000000000000000001463461040100203025ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/_compression/__init__.py000066400000000000000000000000001463461040100224010ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/_compression/backend.py000066400000000000000000000045731463461040100222540ustar00rootroot00000000000000import enum from abc import ABCMeta from typing import Any, BinaryIO, Optional, Tuple from .._pointappender import IPointAppender from .._pointreader import IPointReader from .._pointwriter import IPointWriter from .laszipbackend import LaszipBackend from .lazbackend import ILazBackend from .lazrsbackend import LazrsBackend from .selection import DecompressionSelection _DEFAULT_BACKENDS: Tuple[ILazBackend, ...] = ( LazrsBackend(parallel=True), LazrsBackend(parallel=False), LaszipBackend(), ) class ABCEnumMeta(enum.EnumMeta, ABCMeta): pass # TODO: Replace the interactions with this class with interactions with ILazBackend classes class LazBackend(ILazBackend, enum.Enum, metaclass=ABCEnumMeta): """Supported backends for reading and writing LAS/LAZ""" # type_hint = Union[LazBackend, Iterable[LazBackend]] LazrsParallel = 0 """lazrs in multi-thread mode""" Lazrs = 1 """lazrs in single-thread mode""" Laszip = 2 """laszip backend""" def _get(self) -> ILazBackend: return _DEFAULT_BACKENDS[self.value] def is_available(self) -> bool: """Returns true if the backend is available""" for laz_backend in self.__class__: laz_backend: LazBackend if laz_backend == self: return self._get().is_available() return False @property def supports_append(self) -> bool: return self._get().supports_append def create_appender(self, dest: BinaryIO, header: "LasHeader") -> IPointAppender: return self._get().create_appender(dest, header) def create_reader( self, source: Any, header: "LasHeader", decompression_selection: Optional[DecompressionSelection] = None, ) -> IPointReader: return self._get().create_reader( source, header, decompression_selection=decompression_selection ) def create_writer( self, dest: Any, header: "LasHeader", ) -> IPointWriter: return self._get().create_writer(dest, header) @classmethod def detect_available(cls) -> Tuple["LazBackend", ...]: """Returns a tuple containing the available backends in the current python environment """ return tuple( laz_backend for backend, laz_backend in zip(_DEFAULT_BACKENDS, cls) if backend.is_available() ) laspy-laspy-a32c7aa/laspy/_compression/format.py000066400000000000000000000007151463461040100221470ustar00rootroot00000000000000def is_point_format_compressed(point_format_id: int) -> bool: compression_bit_7 = (point_format_id & 0x80) >> 7 compression_bit_6 = (point_format_id & 0x40) >> 6 if not compression_bit_6 and compression_bit_7: return True return False def compressed_id_to_uncompressed(point_format_id: int) -> int: return point_format_id & 0x3F def uncompressed_id_to_compressed(point_format_id: int) -> int: return (2**7) | point_format_id laspy-laspy-a32c7aa/laspy/_compression/laszipbackend.py000066400000000000000000000103451463461040100234710ustar00rootroot00000000000000import io from typing import Any, BinaryIO, Optional import numpy as np from .._pointappender import IPointAppender from .._pointreader import IPointReader from .._pointwriter import IPointWriter from ..errors import LaspyException from ..header import LasHeader from ..point.record import PackedPointRecord from .lazbackend import ILazBackend from .selection import DecompressionSelection try: import laszip except ModuleNotFoundError: laszip = None class LaszipBackend(ILazBackend): def is_available(self) -> bool: return laszip is not None @property def supports_append(self) -> bool: return False def create_appender(self, dest: BinaryIO, header: LasHeader) -> IPointAppender: raise LaspyException("Laszip backend does not support appending") def create_reader( self, source: Any, header: LasHeader, decompression_selection: Optional[DecompressionSelection] = None, ) -> IPointReader: if decompression_selection is None: decompression_selection = DecompressionSelection.all() return LaszipPointReader( source, header, decompression_selection=decompression_selection, ) def create_writer( self, dest: Any, header: "LasHeader", ) -> IPointWriter: return LaszipPointWriter(dest, header) class LaszipPointReader(IPointReader): """Implementation for the laszip backend""" def __init__( self, source: BinaryIO, header: LasHeader, decompression_selection: DecompressionSelection, ) -> None: self._source = source self._source.seek(0) selection = decompression_selection.to_laszip() self.unzipper = laszip.LasUnZipper(source, selection) unzipper_header = self.unzipper.header assert unzipper_header.point_data_format == header.point_format.id assert unzipper_header.point_data_record_length == header.point_format.size self.point_size = header.point_format.size @property def source(self): return self._source def read_n_points(self, n: int) -> bytearray: points_data = bytearray(n * self.point_size) self.unzipper.decompress_into(points_data) return points_data def seek(self, point_index: int) -> None: self.unzipper.seek(point_index) def close(self) -> None: self.source.close() class LaszipPointWriter(IPointWriter): """ Compressed point writer using laszip backend """ def __init__(self, dest: BinaryIO, header: LasHeader) -> None: self.dest = dest header.set_compressed(False) with io.BytesIO() as tmp: header.write_to(tmp) header_bytes = tmp.getvalue() self.zipper = laszip.LasZipper(self.dest, header_bytes) zipper_header = self.zipper.header assert zipper_header.point_data_format == header.point_format.id assert zipper_header.point_data_record_length == header.point_format.size header.set_compressed(True) @property def destination(self) -> BinaryIO: return self.dest def write_points(self, points: PackedPointRecord) -> None: points_bytes = np.frombuffer(points.array, np.uint8) self.zipper.compress(points_bytes) def done(self) -> None: self.zipper.done() def write_initial_header_and_vlrs( self, header: LasHeader, encoding_errors: str ) -> None: # Do nothing as creating the laszip zipper writes the header and vlrs pass def write_updated_header(self, header: LasHeader, encoding_errors: str) -> None: if header.number_of_evlrs != 0: # We wrote some evlrs, we have to update the header self.dest.seek(0, io.SEEK_SET) file_header = LasHeader.read_from(self.dest) end_of_header_pos = self.dest.tell() file_header.number_of_evlrs = header.number_of_evlrs file_header.start_of_first_evlr = header.start_of_first_evlr self.dest.seek(0, io.SEEK_SET) file_header.write_to( self.dest, ensure_same_size=True, encoding_errors=encoding_errors ) assert self.dest.tell() == end_of_header_pos laspy-laspy-a32c7aa/laspy/_compression/lazbackend.py000066400000000000000000000016441463461040100227570ustar00rootroot00000000000000from abc import ABC, abstractmethod from typing import Any, BinaryIO, Optional from .._pointappender import IPointAppender from .._pointreader import IPointReader from .._pointwriter import IPointWriter from ..header import LasHeader from .selection import DecompressionSelection class ILazBackend(ABC): @abstractmethod def is_available(self) -> bool: ... @property @abstractmethod def supports_append(self) -> bool: ... @abstractmethod def create_appender(self, dest: BinaryIO, header: LasHeader) -> IPointAppender: ... @abstractmethod def create_reader( self, source: Any, header: LasHeader, decompression_selection: Optional[DecompressionSelection] = None, ) -> IPointReader: ... @abstractmethod def create_writer( self, dest: Any, header: LasHeader, ) -> IPointWriter: ... laspy-laspy-a32c7aa/laspy/_compression/lazrsbackend.py000066400000000000000000000137371463461040100233320ustar00rootroot00000000000000from typing import Any, BinaryIO, List, Optional, Tuple, Union, cast import numpy as np from .._pointappender import IPointAppender from .._pointreader import IPointReader from .._pointwriter import IPointWriter from ..header import LasHeader from ..point.format import PointFormat from ..point.record import PackedPointRecord from ..vlrs.known import LasZipVlr from .lazbackend import ILazBackend from .selection import DecompressionSelection try: import lazrs except ModuleNotFoundError: lazrs = None class LazrsBackend(ILazBackend): def __init__( self, parallel: bool = True, ): self._parallel = parallel def is_available(self) -> bool: return lazrs is not None @property def supports_append(self) -> bool: return True def create_appender(self, dest: BinaryIO, header: LasHeader) -> IPointAppender: return LazrsAppender(dest, header, parallel=self._parallel) def create_reader( self, source: Any, header: LasHeader, decompression_selection: Optional[DecompressionSelection] = None, ) -> IPointReader: if decompression_selection is None: decompression_selection = DecompressionSelection.all() laszip_vlr: LasZipVlr = header.vlrs[header.vlrs.index("LasZipVlr")] return LazrsPointReader( source, laszip_vlr, parallel=self._parallel, decompression_selection=decompression_selection, ) def create_writer( self, dest: Any, header: "LasHeader", ) -> IPointWriter: return LazrsPointWriter(dest, header.point_format, parallel=self._parallel) class LazrsPointReader(IPointReader): """Implementation for the laz-rs backend, supports single-threaded decompression as well as multi-threaded decompression """ def __init__( self, source, laszip_vlr: LasZipVlr, parallel: bool, decompression_selection: DecompressionSelection, ) -> None: self._source = source self.vlr = lazrs.LazVlr(laszip_vlr.record_data) selection = decompression_selection.to_lazrs() if parallel: self.decompressor = lazrs.ParLasZipDecompressor( source, laszip_vlr.record_data, selection ) else: self.decompressor = lazrs.LasZipDecompressor( source, laszip_vlr.record_data, selection ) @property def source(self): return self._source def read_n_points(self, n: int) -> bytearray: point_bytes = bytearray(n * self.vlr.item_size()) self.decompressor.decompress_many(point_bytes) return point_bytes def seek(self, point_index: int) -> None: self.decompressor.seek(point_index) def close(self) -> None: self.source.close() def read_chunk_table_only(self) -> List[Tuple[int, int]]: """ This function requires the source to be at the start of the chunk table """ assert isinstance(self.decompressor, lazrs.LasZipDecompressor) return self.decompressor.read_chunk_table_only() def read_raw_bytes(self, n: int) -> bytes: """ reads and returns exactly `n` bytes from the source used by this point reader. """ b = bytearray(n) self.decompressor.read_raw_bytes_into(b) return bytes(b) class LazrsPointWriter(IPointWriter): """ Compressed point writer using lazrs backend """ def __init__( self, dest: BinaryIO, point_format: PointFormat, parallel: bool ) -> None: self.dest = dest self.vlr = lazrs.LazVlr.new_for_compression( point_format.id, point_format.num_extra_bytes ) self.parallel = parallel self.compressor: Optional[ Union[lazrs.ParLasZipCompressor, lazrs.LasZipCompressor] ] = None def write_initial_header_and_vlrs( self, header: LasHeader, encoding_errors: str ) -> None: laszip_vlr = LasZipVlr(self.vlr.record_data()) header.vlrs.append(laszip_vlr) super().write_initial_header_and_vlrs(header, encoding_errors) # We have to initialize our compressor here # because on init, it writes the offset to chunk table # so the header and vlrs have to be written if self.parallel: self.compressor = lazrs.ParLasZipCompressor(self.dest, self.vlr) else: self.compressor = lazrs.LasZipCompressor(self.dest, self.vlr) @property def destination(self) -> BinaryIO: return self.dest def write_points(self, points: PackedPointRecord) -> None: assert ( self.compressor is not None ), "Trying to write points without having written header" points_bytes = np.frombuffer(points.array, np.uint8) self.compressor.compress_many(points_bytes) def done(self) -> None: if self.compressor is not None: self.compressor.done() class LazrsAppender(IPointAppender): """Appending in LAZ file works by seeking to start of the last chunk of compressed points, decompress it while keeping the points in memory. Then seek back to the start of the last chunk, and recompress the points we just read, so that we have a compressor in the proper state ready to compress new points. """ def __init__(self, dest: BinaryIO, header: LasHeader, parallel: bool) -> None: self.offset_to_point_data = header.offset_to_point_data laszip_vlr = cast(LasZipVlr, header.vlrs.get("LasZipVlr")[0]) if parallel: self.appender = lazrs.ParLasZipAppender(dest, laszip_vlr.record_data) else: self.appender = lazrs.LasZipAppender(dest, laszip_vlr.record_data) def append_points(self, points: PackedPointRecord) -> None: points_bytes = np.frombuffer(points.array, np.uint8) self.appender.compress_many(points_bytes) def done(self) -> None: self.appender.done() laspy-laspy-a32c7aa/laspy/_compression/selection.py000066400000000000000000000201201463461040100226340ustar00rootroot00000000000000import enum def decompress_and_skip_methods(wrapped_enum): """This decorator is to be applied on an enum.IntFlag class It will add to this enum some methods: - set(self, flag_name) -> Self => to easily set a flag - unset(self, flag_name) -> Self => to easily unset a flag - is_set(self, flag_name) -> bool => to easily check if a flag is set If will also add for each flag member (as long as their name is uppercase) the following methods - decompress_$flag(self) -> Self - skip_$flag(self) -> Self # Example @load_and_skip_methods class Color(IntFlag): RED = 1 GREEN = 2 BLUE = 4 will generate (ellipsis to keep it short) class Color(IntFlag): RED = 1 GREEN = 2 def _set(self, mask): ... def _unset(self, mask): ... def is_set(self, mask): ... def decompress_red(self) -> Color: ... def decompress_red(self) -> Color : ... def is_set_red(self) -> Color : ... def load_green(self) -> Color: ... def skip_green(self) -> Color: ... def is_set_green(self) -> Color : ... """ def set_method(self, mask) -> wrapped_enum: return self | mask def unset_method(self, mask) -> wrapped_enum: return self & (~mask) def is_set_method(self, mask) -> bool: return (self & mask) != 0 setattr(wrapped_enum, "_set", set_method) setattr(wrapped_enum, "_unset", unset_method) setattr(wrapped_enum, "is_set", is_set_method) def define_skip_method(mask_member_name: str): def skip_method(self): return self._unset(getattr(self, mask_member_name)) return skip_method def define_decompress_method(mask_member_name: str): def decompress_method(self): return self._set(getattr(self, mask_member_name)) return decompress_method def define_is_set_method(mask_member_name: str): def is_set_method(self): return self.is_set(getattr(self, mask_member_name)) return is_set_method for member in dir(wrapped_enum): if not member.isupper(): continue load_name = f"decompress_{member.lower()}" skip_name = f"skip_{member.lower()}" is_set_name = f"is_set_{member.lower()}" setattr(wrapped_enum, load_name, define_decompress_method(member)) setattr(wrapped_enum, skip_name, define_skip_method(member)) setattr(wrapped_enum, is_set_name, define_is_set_method(member)) return wrapped_enum @decompress_and_skip_methods class DecompressionSelection(enum.IntFlag): """ Holds which fields to decompress or not. Only used for files with version >= 1.4 && point format id >= 6. Ignored on other cases. Each flag in the enum has a corresponding ``decompress_$name`` and ``skip_$name`` methods to easily create a selection. >>> import laspy >>> # Creating a selection that decompresses the base + z field >>> selection = laspy.DecompressionSelection.base().decompress_z() >>> selection.is_set(laspy.DecompressionSelection.Z) True >>> selection.is_set(laspy.DecompressionSelection.INTENSITY) False >>> # Creating a selection that decompresses all fields but the intensity >>> selection = laspy.DecompressionSelection.all().skip_intensity() >>> selection.is_set(laspy.DecompressionSelection.INTENSITY) False >>> selection.is_set(laspy.DecompressionSelection.Z) True .. versionadded:: 2.4 """ #: Flag to decompress x, y, return number, number of returns and scanner channel XY_RETURNS_CHANNEL = enum.auto() #: Flag to decompress z Z = enum.auto() #: Flag to decompress the classification CLASSIFICATION = enum.auto() #: Flag to decompress the classification flags (withheld, key point, overlap, etc) FLAGS = enum.auto() #: Flag to decompress the intensity INTENSITY = enum.auto() #: Flag to decompress the scan angle SCAN_ANGLE = enum.auto() #: Flag to decompress the user data USER_DATA = enum.auto() #: Flag to decompress the point source id POINT_SOURCE_ID = enum.auto() #: Flag to decompress the gps time GPS_TIME = enum.auto() #: Flag to decompress the red, green, blue RGB = enum.auto() #: Flag to decompress the nir NIR = enum.auto() #: Flag to decompress the wavepacket WAVEPACKET = enum.auto() #: Flag to decompress all the extra bytes ALL_EXTRA_BYTES = enum.auto() @classmethod def all(cls) -> "DecompressionSelection": """Returns a selection where all fields will be decompressed""" selection = cls.base() for flag in cls: selection = selection._set(flag) return selection @classmethod def base(cls) -> "DecompressionSelection": """ Returns a decompression selection where only the base x, y, return number, number of returns and scanner channel will be decompressed """ return cls.xy_returns_channel() @classmethod def xy_returns_channel(cls) -> "DecompressionSelection": """ Returns a decompression selection where only the base x, y, return number, number of returns and scanner channel will be decompressed """ return cls.XY_RETURNS_CHANNEL def to_lazrs(self) -> "lazrs.DecompressionSelection": import lazrs variant_mapping = { DecompressionSelection.XY_RETURNS_CHANNEL: lazrs.SELECTIVE_DECOMPRESS_XY_RETURNS_CHANNEL, DecompressionSelection.Z: lazrs.SELECTIVE_DECOMPRESS_Z, DecompressionSelection.CLASSIFICATION: lazrs.SELECTIVE_DECOMPRESS_CLASSIFICATION, DecompressionSelection.FLAGS: lazrs.SELECTIVE_DECOMPRESS_FLAGS, DecompressionSelection.INTENSITY: lazrs.SELECTIVE_DECOMPRESS_INTENSITY, DecompressionSelection.SCAN_ANGLE: lazrs.SELECTIVE_DECOMPRESS_SCAN_ANGLE, DecompressionSelection.USER_DATA: lazrs.SELECTIVE_DECOMPRESS_USER_DATA, DecompressionSelection.POINT_SOURCE_ID: lazrs.SELECTIVE_DECOMPRESS_POINT_SOURCE_ID, DecompressionSelection.GPS_TIME: lazrs.SELECTIVE_DECOMPRESS_GPS_TIME, DecompressionSelection.RGB: lazrs.SELECTIVE_DECOMPRESS_RGB, DecompressionSelection.NIR: lazrs.SELECTIVE_DECOMPRESS_NIR, DecompressionSelection.WAVEPACKET: lazrs.SELECTIVE_DECOMPRESS_WAVEPACKET, DecompressionSelection.ALL_EXTRA_BYTES: lazrs.SELECTIVE_DECOMPRESS_ALL_EXTRA_BYTES, } lazrs_selection = lazrs.SELECTIVE_DECOMPRESS_XY_RETURNS_CHANNEL for variant in DecompressionSelection: lazrs_selection |= variant_mapping[variant] if self.is_set(variant) else 0 return lazrs.DecompressionSelection(lazrs_selection) def to_laszip(self) -> int: import laszip variant_mapping = { DecompressionSelection.XY_RETURNS_CHANNEL: laszip.DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_XY, DecompressionSelection.Z: laszip.DECOMPRESS_SELECTIVE_Z, DecompressionSelection.CLASSIFICATION: laszip.DECOMPRESS_SELECTIVE_CLASSIFICATION, DecompressionSelection.FLAGS: laszip.DECOMPRESS_SELECTIVE_FLAGS, DecompressionSelection.INTENSITY: laszip.DECOMPRESS_SELECTIVE_INTENSITY, DecompressionSelection.SCAN_ANGLE: laszip.DECOMPRESS_SELECTIVE_SCAN_ANGLE, DecompressionSelection.USER_DATA: laszip.DECOMPRESS_SELECTIVE_USER_DATA, DecompressionSelection.POINT_SOURCE_ID: laszip.DECOMPRESS_SELECTIVE_POINT_SOURCE, DecompressionSelection.GPS_TIME: laszip.DECOMPRESS_SELECTIVE_GPS_TIME, DecompressionSelection.RGB: laszip.DECOMPRESS_SELECTIVE_RGB, DecompressionSelection.NIR: laszip.DECOMPRESS_SELECTIVE_NIR, DecompressionSelection.WAVEPACKET: laszip.DECOMPRESS_SELECTIVE_WAVEPACKET, DecompressionSelection.ALL_EXTRA_BYTES: laszip.DECOMPRESS_SELECTIVE_EXTRA_BYTES, } laszip_selection = laszip.DECOMPRESS_SELECTIVE_CHANNEL_RETURNS_XY for variant in DecompressionSelection: laszip_selection |= variant_mapping[variant] if self.is_set(variant) else 0 return laszip_selection laspy-laspy-a32c7aa/laspy/_pointappender.py000066400000000000000000000003761463461040100211710ustar00rootroot00000000000000import abc from .point.record import PackedPointRecord class IPointAppender(abc.ABC): @abc.abstractmethod def append_points(self, points: PackedPointRecord) -> None: ... @abc.abstractmethod def done(self) -> None: ... laspy-laspy-a32c7aa/laspy/_pointreader.py000066400000000000000000000011451463461040100206300ustar00rootroot00000000000000import abc from typing import Any class IPointReader(abc.ABC): """The interface to be implemented by the class that actually reads points from as LAS/LAZ file so that the LasReader can use it. It is used to manipulate LAS/LAZ (with different LAZ backends) in the reader """ @property @abc.abstractmethod def source(self) -> Any: ... @abc.abstractmethod def read_n_points(self, n: int) -> bytearray: ... @abc.abstractmethod def seek(self, point_index: int) -> None: ... @abc.abstractmethod def close(self) -> None: ... laspy-laspy-a32c7aa/laspy/_pointwriter.py000066400000000000000000000016301463461040100207010ustar00rootroot00000000000000import abc import io from typing import BinaryIO from .header import LasHeader from .point.record import PackedPointRecord class IPointWriter(abc.ABC): """Interface to be implemented by the actual PointWriter backend """ @property @abc.abstractmethod def destination(self) -> BinaryIO: ... @abc.abstractmethod def write_points(self, points: PackedPointRecord) -> None: ... @abc.abstractmethod def done(self) -> None: ... def write_initial_header_and_vlrs( self, header: LasHeader, encoding_errors: str ) -> None: header.write_to(self.destination, encoding_errors=encoding_errors) def write_updated_header(self, header: LasHeader, encoding_errors: str): self.destination.seek(0, io.SEEK_SET) header.write_to( self.destination, ensure_same_size=True, encoding_errors=encoding_errors ) laspy-laspy-a32c7aa/laspy/cli/000077500000000000000000000000001463461040100163515ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/cli/__init__.py000066400000000000000000000000001463461040100204500ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/cli/copc.py000066400000000000000000000131651463461040100176550ustar00rootroot00000000000000from dataclasses import dataclass from pathlib import Path from typing import Optional, Union import numpy as np import typer import laspy from ..copc import Bounds, CopcReader app = typer.Typer(help="COPC related commands") @dataclass class Level: inner: Union[int, range] @classmethod def parse(cls, value_string: str) -> "Level": if ".." in value_string: # range rust-style start_str, end_str = value_string.split("..") start = int(start_str) if end_str.startswith("="): end = int(end_str[1:]) + 1 else: end = int(end_str) inner = range(start, end) elif ":" in value_string: # range python style start, end = map(int, value_string.split(":")) inner = range(start, end) else: inner = int(value_string) return cls(inner) def parse_bounds(value_string: str) -> Bounds: first_closing_bracket = value_string.find("]") second_opening_bracket = value_string[first_closing_bracket:].find("[") mins_str = value_string[1:first_closing_bracket] maxes_str = value_string[first_closing_bracket + second_opening_bracket + 1 : -1] mins = np.array(mins_str.split(","), dtype=np.float64) maxes = np.array(maxes_str.split(","), dtype=np.float64) return Bounds(mins, maxes) @app.command() def query( source: str = typer.Argument( ..., help="The COPC ressource, can be a path or a url" ), dest: Path = typer.Option( ..., file_okay=True, dir_okay=False, resolve_path=True, ), bounds: Optional[Bounds] = typer.Option( None, parser=parse_bounds, help=""" The bounds for which you wish to aquire points. If None, the whole file's bounds will be considered 2D bounds are suported, (No point will be filtered on its Z coordinate) """, ), resolution: Optional[float] = typer.Option( None, help=""" Limits the octree levels to be queried in order to have a point cloud with the requested resolution. - The unit is the one of the data. - If None, the resulting cloud will be at the full resolution offered by the COPC source - Mutually exclusive with level parameter """, ), level: Optional[Level] = typer.Option( None, parser=Level.parse, help=""" Level of detail (LOD) By default all levels are considered. - If it is an int, only points that are of the requested LOD will be returned. - If it is a range, points for which the LOD is within the range will be returned """, ), safe_guard: bool = typer.Option( True, help=""" Enable / Disable the safeguard that prevents downloading the whole COPC file when the option was provided """, ), ): """ Query the COPC file to retrieve the points matching the requested bounds and level/resolution Examples: laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06, -2.0e+01], [3.17e+05, 5.81e+06, 3.0e+02]" --- laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --- laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --resolution 2 --- laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --level 1 --- # Level can be a range (here [0, 2[) laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --level 0:2 --- # Level can be a range (here [0, 2[) laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --level 0..2 laspy COPC "https://s3.amazonaws.com/hobu-lidar/melbourne-2018.copc.laz" output.laz --bounds "[3.1e+05, 5.8+06], [3.17e+05, 5.81e+06]" --level 0..=2 """ level = None if level is None else level.inner with CopcReader.open(source) as crdr: if safe_guard is True and all( map(lambda x: x is None, (level, bounds, resolution)) ): print( "You did not specify any of --bounds, --level or --resolution options" ) print( f"The command is going to download the whole COPC resource ({crdr.header.point_count}) points" ) anwser = input("Do you really want to continue ? [y/N]") if anwser not in ("y", "Y", "yes"): return points = crdr.query(bounds=bounds, resolution=resolution, level=level) pct = len(points) / crdr.header.point_count * 100 print( f"{len(points)} points downloaded\n{pct}% of the total number of points in COPC resource" ) new_header = laspy.LasHeader( version=crdr.header.version, point_format=crdr.header.point_format ) new_header.offsets = crdr.header.offsets new_header.scales = crdr.header.scales with laspy.open(dest, mode="w", header=new_header) as f: f.write_points(points) laspy-laspy-a32c7aa/laspy/cli/core.py000066400000000000000000001236511463461040100176630ustar00rootroot00000000000000import copy import enum import sys import typing from collections import deque from contextlib import ExitStack from dataclasses import dataclass from enum import Enum from pathlib import Path from typing import ( Any, Callable, ClassVar, Dict, Generic, Iterable, List, Optional, Tuple, TypeVar, Union, ) import numpy as np import rich import typer from rich.console import Console, Group from rich.live import Live from rich.progress import MofNCompleteColumn, Progress, TaskID from rich.table import Table import laspy from laspy.header import Version from .. import PackedPointRecord, PointFormat from ..point import dims from ..vlrs.vlrlist import VLRList from . import copc DEFAULT_ITER_CHUNK_SIZE: int = 10_000_000 ITER_CHUNK_SIZE_HELP_STR: str = """Number of points processed at once. To avoid loading the whole file in memory points are processed in batch. -1 means all the points will be processed at once """ ITER_CHUNK_SIZE_OPTION = typer.Option( DEFAULT_ITER_CHUNK_SIZE, help=ITER_CHUNK_SIZE_HELP_STR ) console = Console() err_console = Console(stderr=True) app = typer.Typer(help="CLI tool using laspy") app.add_typer(copc.app, name="copc") def print_header(hdr: laspy.LasHeader): """ Prints the header information in a pretty table """ table = Table(title="Header", show_header=False, box=None) table.add_row("Version", f"[cyan]{hdr.version}") table.add_row("Point Format Id", f"[cyan]{hdr.point_format.id}") table.add_row("Point Format Size", f"[cyan]{hdr.point_format.size}") table.add_row("Extra Bytes", f"[cyan]{hdr.point_format.num_extra_bytes}") table.add_row("Point Count", f"[cyan]{hdr.point_count}") table.add_row("Compressed", f"[cyan]{hdr.are_points_compressed}") table.add_row("System Identifier", f"[cyan]'{hdr.system_identifier}'") table.add_row("Generating Software", f"[cyan]'{hdr.generating_software}'") table.add_row("Number Of VLRs", f"[cyan]{len(hdr.vlrs)}") if hdr.version >= Version(1, 4): table.add_row("Number Of EVLRs", f"[cyan]{hdr.number_of_evlrs}") table.add_row("UUID", f"[cyan]'{hdr.uuid}'") table.add_row("File Source Id", f"[cyan]{hdr.file_source_id}") table.add_row("Creation Date", f"[cyan]{hdr.creation_date}") table.add_row("Scales", f"[blue]{hdr.scales}") table.add_row("Offsets", f"[blue]{hdr.offsets}") table.add_row("Mins", f"[blue]{hdr.mins}") table.add_row("Maxs", f"[blue]{hdr.maxs}") if hdr.version <= Version(1, 2): table.add_row( "Number Of Points By Return", f"[blue]{hdr.number_of_points_by_return[:5]}", ) else: values_str = ", ".join(str(n) for n in hdr.number_of_points_by_return) table.add_row("Number Of Points By Return", f"[blue][{values_str}]") console.print(table) def print_points_stats(reader: laspy.LasReader): """ Computes and prints stats about dimensions in the file """ stats_record = laspy.PackedPointRecord.zeros(2, reader.header.point_format) with Progress(transient=True) as progress: task = progress.add_task( "[cyan]Procession points...", total=reader.header.point_count ) for chunk in reader.chunk_iterator(10_000_000): for dimension_name in reader.header.point_format.dimension_names: stats_record[dimension_name][0] = np.minimum( stats_record[dimension_name][0], np.min(chunk[dimension_name]) ) stats_record[dimension_name][1] = np.maximum( stats_record[dimension_name][1], np.max(chunk[dimension_name]) ) progress.update(task, advance=len(chunk)) table = Table(title="Stats", show_header=True, box=None) table.add_column("Dimension Name") table.add_column("Min") table.add_column("Max") for dimension_name in reader.header.point_format.dimension_names: r = stats_record[dimension_name] table.add_row(dimension_name, str(r[0]), str(r[1])) console.print(table) @app.command() def info( file_path: Path, header: Optional[bool] = typer.Option( None, "--header", help="Whether header information should be printed" ), vlrs: Optional[bool] = typer.Option( None, "--vlrs", help="Whether vlrs information should be printed" ), points: Optional[bool] = typer.Option( None, "--points", help="Whether points information should be printed" ), evlrs: Optional[bool] = typer.Option( None, "--evlrs", help="Whether evlrs information should be printed" ), ): """ Print information about a LAS/LAZ file By default every part of the file are printed (header, vlrs, points, evlrs) If any of the option (e.g: --header) is used, then only that part will be displayed It it possible to combine many options to select what should be printed Examples: # Only prints header laspy info file.las --header --- # Prints header and VLRs laspy info file.laz --header --vlrs """ if all(option is None for option in (header, vlrs, points, evlrs)): header, vlrs, points, evlrs = True, True, True, True else: header = header or False vlrs = vlrs or False points = points or False evlrs = evlrs or False try: with laspy.open(file_path) as reader: if header: print_header(reader.header) if vlrs: if header: rich.print(50 * "-") table = Table(title=f"VLRs", show_header=True, box=None) table.add_column("User ID") table.add_column("Record ID") table.add_column("Description") for vlr in reader.header.vlrs: table.add_row( str(vlr.user_id), str(vlr.record_id), str(vlr.description) ) if table.rows: console.print(table) if points: if vlrs: rich.print(50 * "-") print_points_stats(reader) if evlrs and reader.header.evlrs is not None: table = Table(title=f"EVLRs", show_header=True, box=None) table.add_column("User ID") table.add_column("Record ID") table.add_column("Description") for vlr in reader.header.evlrs: table.add_row( str(vlr.user_id), str(vlr.record_id), str(vlr.description) ) if table.rows: console.print(table) except Exception as e: rich.print("[bold red]Error:") rich.print(e) raise typer.Exit(code=1) def _copy_from_reader_to_writer( reader: laspy.LasReader, writer: laspy.LasWriter, iter_chunk_size: int, progress_and_task: Optional[Tuple[Progress, TaskID]] = None, ): """ Copies points from the reader to the writer """ progress, task = progress_and_task or (None, None) if progress is not None: progress.update(task, total=reader.header.point_count) for chunk in reader.chunk_iterator(iter_chunk_size): writer.write_points(chunk) if progress is not None: progress.update(task, advance=len(chunk)) def _copy( input_path: Path, output_path: Path, laz_backend: laspy.LazBackend, iter_chunk_size: int, progress: Progress, task: TaskID, ): """ Copies points from the file at input_path to a new file at output_path """ with ExitStack() as stack: reader = stack.enter_context(laspy.open(input_path, laz_backend=laz_backend)) writer = stack.enter_context( laspy.open( output_path, mode="w", header=reader.header, laz_backend=laz_backend ) ) _copy_from_reader_to_writer(reader, writer, iter_chunk_size, (progress, task)) def _list_input_and_ouput_files( input_path: Path, output_path: Optional[Path] = None, glob_pattern: str = "*.la[sz]", output_ext: str = ".las", ) -> Tuple[List[Path], List[Path]]: """ List some input LAS/LAZ file paths and their corresponding output LAS/LAZ paths. If input_path points to a file, then output_path can be either None or a file path (with different path) or folder path. If input_path points to a folder, then output_path maybe be None or a path to a folder """ input_files = ( [input_path] if input_path.is_file() else list(input_path.glob(glob_pattern)) ) if output_path is not None: output_path = output_path.expanduser() if output_path.is_dir(): output_files = [output_path / input_path.name for input_path in input_files] else: output_files = [output_path] else: output_files = [ input_path.with_suffix(output_ext) for input_path in input_files ] return input_files, output_files def _copy_files( action: str, input_path: Path, output_path: Optional[Path] = None, laz_backend: laspy.LazBackend = Optional[None], iter_chunk_size: int = DEFAULT_ITER_CHUNK_SIZE, ): if action == "compress": input_ext, output_ext = ".las", ".laz" elif action == "decompress": input_ext, output_ext = ".laz", ".las" else: raise RuntimeError(f"Invalid action {action}") input_files, output_files = _list_input_and_ouput_files( input_path, output_path, glob_pattern=f"*.{input_ext}", output_ext=output_ext ) if len(input_files) > len(output_files): rich.print(f"[bold red]Cannot {action} many files into one") raise typer.Exit(code=1) if len(input_files) == 1: if input_files[0] == output_files[0]: rich.print("[bold red]Cannot have same file as input and output") raise typer.Exit(code=1) if output_files[0].suffix.lower() != output_ext: rich.print(f"[bold red]Extension of output file must {output_ext}") raise typer.Exit(code=1) overall_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) file_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) group = Group(file_progress, overall_progress) num_fails = 0 with Live(group): overall_task = overall_progress.add_task( "Processing files...", total=len(input_files) ) for input, output in zip(input_files, output_files): task = file_progress.add_task(f"[cyan]{input.name}") try: _copy(input, output, laz_backend, iter_chunk_size, file_progress, task) except Exception as e: file_progress.update( task, description=f"[bold red]{input.name}", ) file_progress.console.print( f"[bold red]{input} -> Failed with error: '{e}'" ) num_fails += 1 overall_progress.update(overall_task, advance=1) if num_fails == len(input_files): overall_progress.update(overall_task, description=f"[red] Failed all tasks") raise typer.Abort() elif num_fails == 0: overall_progress.update( overall_task, description=f"[green]Completed {len(input_files)} with success", ) else: overall_progress.update( overall_task, description=f"[dark_orange]Completed {len(input_files) - num_fails} with success, {num_fails} failed", ) backend_to_cli_name: Dict[laspy.LazBackend, str] = { laspy.LazBackend.LazrsParallel: "lazrs-parallel", laspy.LazBackend.Lazrs: "lazrs", laspy.LazBackend.Laszip: "laszip", } # Create and use a different enum for LAZ backend management in the CLI # as typer only supports enum where variants value are str, # Changing the laspy.LazBackend would be technically breaking. # # Having an Enum(str) allows to have --laz-backend=lazrs or laz-backend=laszip # and not --laz-backend=1 --laz-backend=0 as command line arguments CliLazBackend = Enum( "CliLazBackend", { str(variant).split(".")[-1]: backend_to_cli_name[variant] for variant in laspy.LazBackend }, ) cli_name_to_backend: Dict[CliLazBackend, Optional[laspy.LazBackend]] = { CliLazBackend.LazrsParallel: laspy.LazBackend.LazrsParallel, CliLazBackend.Lazrs: laspy.LazBackend.Lazrs, CliLazBackend.Laszip: laspy.LazBackend.Laszip, None: None, } @app.command() def decompress( input_path: Path = typer.Argument( ..., help="Path to file or directory of files to decompress", ), output_path: Optional[Path] = typer.Option( None, help="Directory where decompressed file will be written, or filename of the decompressed file", ), laz_backend: Optional[CliLazBackend] = typer.Option( None, help="The Laz backend to use." ), iter_chunk_size: int = ITER_CHUNK_SIZE_OPTION, ): """Decompress LAZ file(s) - If input_path is a directory, all .laz files will be decompressed. - If input_path is a file it will be decompressed """ if input_path is None: with ExitStack() as stack: try: reader = laspy.open(sys.stdin.buffer, closefd=False) except Exception as e: err_console.print(f"Failed to create reader: {e}") return else: reader = stack.enter_context(reader) try: writer = laspy.open( sys.stdout.buffer, mode="w", header=reader.header, closefd=False ) except Exception as e: err_console.print(f"Failed to create writer: {e}") return else: writer = stack.enter_context(writer) _copy_from_reader_to_writer(reader, writer, iter_chunk_size=iter_chunk_size) else: laz_backend = ( cli_name_to_backend[laz_backend] if laz_backend is not None else None ) _copy_files("decompress", input_path, output_path, laz_backend, iter_chunk_size) @app.command() def compress( input_path: Path = typer.Argument( ..., help="Path to file or directory of files to compress", ), output_path: Optional[Path] = typer.Option( None, help="Directory where decompressed file will be written, or filename of the decompressed file", ), laz_backend: Optional[CliLazBackend] = typer.Option( None, help="The Laz backend to use." ), iter_chunk_size: int = ITER_CHUNK_SIZE_OPTION, ): """Compress LAS file(s) - If input_path is a directory, all .las files will be compressed. - If input_path is a file it will be compressed """ laz_backend = cli_name_to_backend[laz_backend] if laz_backend is not None else None _copy_files("compress", input_path, output_path, laz_backend, iter_chunk_size) def _convert_file_at_path( input_path: Path, output_path: Path, point_format_id: Optional[int], version: Optional[str], laz_backend: Optional[CliLazBackend], iter_chunk_size: int, progress: Progress, task: TaskID, ): with ExitStack() as stack: reader = laspy.open(input_path, laz_backend=cli_name_to_backend[laz_backend]) reader = stack.enter_context(reader) progress.update(task, total=reader.header.point_count) # Prepare PointFormat and Version of new file target_point_format_id = point_format_id if target_point_format_id is None: target_point_format_id = reader.header.point_format.id target_file_version = version if target_file_version is None: target_file_version = max( str(reader.header.version), dims.preferred_file_version_for_point_format(target_point_format_id), ) dims.raise_if_version_not_compatible_with_fmt( target_point_format_id, target_file_version ) target_file_version = Version.from_str(target_file_version) point_format = PointFormat(target_point_format_id) point_format.dimensions.extend(reader.header.point_format.extra_dimensions) # Copy headers, vlrs, evlrs # TODO if target version does not suppot evlr # try to convert some to vlrs, and/or warn header = copy.deepcopy(reader.header) header.set_version_and_point_format(target_file_version, point_format) writer = laspy.open( output_path, mode="w", laz_backend=laz_backend, header=header ) writer = stack.enter_context(writer) # Convert and write points target_point_record = PackedPointRecord.zeros(iter_chunk_size, point_format) for chunk in reader.chunk_iterator(iter_chunk_size): sub_slice = target_point_record[: len(chunk)] sub_slice.copy_fields_from(chunk) writer.write_points(sub_slice) progress.update(task, advance=len(sub_slice)) @app.command() def convert( input_path: Path = typer.Argument( ..., help="Path to file or directory of files to convert", ), output_path: Path = typer.Argument( ..., help="Directory where converted file will be written, or filename of the converted file(s)", ), point_format_id: Optional[int] = typer.Option( None, help="The target point format id", ), version: Optional[str] = typer.Option( None, help="The target version", ), laz_backend: Optional[CliLazBackend] = typer.Option( None, help="The Laz backend to use." ), iter_chunk_size: int = ITER_CHUNK_SIZE_OPTION, ): """Convert LAS/LAZ files Convert file(s) to a desired point format / version - If input_path is a directory, all .laz files will be converted. - If input_path is a file it will be converted """ laz_backend = cli_name_to_backend[laz_backend] if laz_backend is not None else None input_paths, output_paths = _list_input_and_ouput_files(input_path, output_path) if len(input_paths) > len(output_paths): rich.print(f"[bold red]Cannot convert many files into one") raise typer.Exit(code=1) if len(input_paths) == 1 and input_paths[0] == output_paths[0]: rich.print("[bold red]Cannot have same file as input and output") raise typer.Exit(code=1) overall_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) file_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) group = Group(file_progress, overall_progress) num_fails = 0 with Live(group): overall_task = overall_progress.add_task( "Processing files...", total=len(input_paths) ) for input_path, output_path in zip(input_paths, output_paths): task = file_progress.add_task(f"[cyan]{input_path.name}") try: _convert_file_at_path( input_path, output_path, point_format_id, version, laz_backend, iter_chunk_size, file_progress, task, ) except Exception as e: file_progress.update( task, description=f"[bold red]{input_path.name}", ) file_progress.console.print( f"[bold red]{input_path} -> Failed with error: '{e}'" ) num_fails += 1 if num_fails == len(input_paths): overall_progress.update(overall_task, description=f"[red] Failed all tasks") elif num_fails == 0: overall_progress.update( overall_task, description=f"[green]Completed {len(input_paths)} with success", ) else: overall_progress.update( overall_task, description=f"[dark_orange]Completed {len(input_paths) - num_fails} with success, {num_fails} failed", ) def parse_float_or_int(string: str) -> Union[float, int]: """ Parses an string as either an int or float. """ value = None try: value = int(string) except ValueError: pass if value is None: try: value = float(string) except ValueError: pass if value is None: raise ValueError(f"string '{string}' is neither an int nor a float") return value def parse_list_of_numbers(string: str) -> List[Union[float, int]]: """ Parses a string representing a list of number in the form "[1, 2]" or "(1, 2)". """ string = string.strip() first_char = string[0] last_char = string[-1] if (first_char, last_char) not in (("[", "]"), ("(", ")")): raise ValueError( f"'{string}' does not represent a list (missing '[' and/or ']')" ) string = string[1:-1] values = [] for value_str in string.split(","): values.append(parse_float_or_int(value_str)) return values T = TypeVar("T") class PeekIterator(Generic[T]): """ Iterator that allows to 'peek' values, that is, get the next value without advancing the iterator """ def __init__(self, iterable: Iterable[T]): self.iterator = iter(iterable) self.peeked = deque() def __iter__(self): return self def __next__(self) -> T: if self.peeked: return self.peeked.popleft() return next(self.iterator) def peek(self, ahead=0) -> T: while len(self.peeked) <= ahead: self.peeked.append(next(self.iterator)) return self.peeked[ahead] def peek_safe(self, default, ahead=0) -> T: try: return self.peek() except StopIteration: return default @dataclass class Token: """ Token for our mini expression filter language """ class Kind(enum.IntEnum): OpenParen = enum.auto() CloseParen = enum.auto() Bang = enum.auto() # `!` EqEq = enum.auto() NotEq = enum.auto() Less = enum.auto() LessEq = enum.auto() Greater = enum.auto() GreaterEq = enum.auto() In = enum.auto() AmpAmp = enum.auto() # `&&` PipePipe = enum.auto() # `||` And = enum.auto() # `and` keyword Or = enum.auto() # `or` keyword Not = enum.auto() # `not` keyword LiteralStr = enum.auto() kind: Kind value: str def is_comparator(self) -> bool: return { Token.Kind.OpenParen: False, Token.Kind.CloseParen: False, Token.Kind.Bang: False, Token.Kind.EqEq: True, Token.Kind.NotEq: True, Token.Kind.Less: True, Token.Kind.LessEq: True, Token.Kind.Greater: True, Token.Kind.GreaterEq: True, Token.Kind.In: True, Token.Kind.AmpAmp: True, Token.Kind.PipePipe: True, Token.Kind.And: False, Token.Kind.Or: False, Token.Kind.LiteralStr: False, }[self.kind] def is_binary_logical_operator(self) -> bool: return { Token.Kind.OpenParen: False, Token.Kind.CloseParen: False, Token.Kind.Bang: False, Token.Kind.EqEq: False, Token.Kind.NotEq: False, Token.Kind.Less: False, Token.Kind.LessEq: False, Token.Kind.Greater: False, Token.Kind.GreaterEq: False, Token.Kind.In: False, Token.Kind.AmpAmp: True, Token.Kind.PipePipe: True, Token.Kind.And: True, Token.Kind.Or: True, Token.Kind.LiteralStr: False, }[self.kind] class Lexer: """ The lexer that transform a string that is a represent a filter expression into a list of tokens """ _keywords: Dict[str, Token] = { "and": Token(Token.Kind.And, "and"), "or": Token(Token.Kind.Or, "or"), "in": Token(Token.Kind.In, "in"), "not": Token(Token.Kind.Not, "not"), } def __init__(self, char_iter: PeekIterator[str]): self.char_iter: PeekIterator[str] = char_iter self.tokens: List[Token] = [] self.current_literal: str = "" @staticmethod def tokenize_string(string: str) -> List[Token]: lexer = Lexer(PeekIterator(string)) return lexer.tokenize() def tokenize(self) -> List[Token]: new_token: Optional[Token] = None while (char := next(self.char_iter, None)) is not None: if char == " ": self._flush_current_literal() continue if char == "(": new_token = Token(Token.Kind.OpenParen, "(") elif char == ")": new_token = Token(Token.Kind.CloseParen, ")") elif char == "[": # This is a bit of a hack but works for our simplistic # language. It is made to still consider things like "[1,2 ,3]" # as a single literal token. # And not have to have it considered as: # OpenBracket, LiteralInt, Comma, LiteralInt, Comma, LiteralInt, CloseBracket self.current_literal += char while True: nc = next(self.char_iter, None) if nc is None: break self.current_literal += nc if nc == "]": break elif char == "!": nchar = self.char_iter.peek() if nchar == "=": _ = next(self.char_iter) new_token = Token(Token.Kind.NotEq, "!=") else: new_token = Token(Token.Kind.Bang, "!") elif char == "=" and self.char_iter.peek() == "=": _ = next(self.char_iter) new_token = Token(Token.Kind.EqEq, "==") elif char == "&" and self.char_iter.peek() == "&": _ = next(self.char_iter) new_token = Token(Token.Kind.AmpAmp, "&&") elif char == "|" and self.char_iter.peek() == "|": _ = next(self.char_iter) new_token = Token(Token.Kind.PipePipe, "||") elif char == "<": nchar = self.char_iter.peek() if nchar == "=": _ = next(self.char_iter) new_token = Token(Token.Kind.LessEq, "<=") else: new_token = Token(Token.Kind.Less, "<") elif char == ">": nchar = self.char_iter.peek() if nchar == "=": _ = next(self.char_iter) new_token = Token(Token.Kind.GreaterEq, ">=") else: new_token = Token(Token.Kind.Greater, ">") else: self.current_literal += char if new_token is not None: self._flush_current_literal() self.tokens.append(new_token) new_token = None self._flush_current_literal() return self.tokens def _flush_current_literal(self) -> None: if not self.current_literal: return current_literal = self.current_literal.strip() try: token = self._keywords[current_literal] except KeyError: token = Token(Token.Kind.LiteralStr, current_literal) self.current_literal = "" self.tokens.append(token) def tokenize(string: str) -> List[Token]: return Lexer.tokenize_string(string) class Condition(enum.Enum): """ Possible conditions to 'merge' results from two filter action """ And = "and" Or = "or" # enum.StrEnum exists only since 3.11 class Comparator(enum.Enum): """ The different comparators that can be used to filter points depending on field values """ # Note that order of these is important, # >= and <= must be before < and > Equality = "==" Difference = "!=" GreaterOrEqual = ">=" LessOrEqual = "<=" LessThan = "<" GreaterThan = ">" In = "in" @dataclass class FilteringAction: """ An applicable filtering action. It containts the name of the field used in the comparison the comparator to apply and the value(s) to compare with """ field_name: str comparator: Comparator value: str # Parsed to a concrete type when actually used # Translate some pdal names to laspy names _pdal_name_to_laspy: ClassVar[Dict[str, str]] = { "Classification": "classification", "Intensity": "intensity", "PointSourceId": "point_source_id", "ReturnNumber": "return_number", "NumberOfReturns": "number_of_returns", "ScanDirectionFlag": "scan_direction_flag", "EdgeOfFlightLine": "edge_of_flight_line", "ScanAngleRank": "scan_angle_rank", "UserData": "user_data", "Red": "red", "Green": "green", "Blue": "blue", "GpsTime": "gps_time", "Infrared": "nir", "ClassFlags": "classification_flags", } # Translate a comparator token into the corresponding Comparator _comparator_token_to_comparator: ClassVar[Dict[Token.Kind, Comparator]] = { Token.Kind.EqEq: Comparator.Equality, Token.Kind.NotEq: Comparator.Difference, Token.Kind.Less: Comparator.LessThan, Token.Kind.LessEq: Comparator.LessOrEqual, Token.Kind.Greater: Comparator.GreaterThan, Token.Kind.GreaterEq: Comparator.GreaterOrEqual, Token.Kind.In: Comparator.In, } @classmethod def parse_string(cls, string: str) -> "FilteringAction": tokens = tokenize(string) return cls.parse_tokens(PeekIterator(tokens)) @classmethod def parse_tokens(cls, tokens: PeekIterator[Token]) -> "FilteringAction": try: field_name_tok = next(tokens) cmp_tok = next(tokens) value_tok = next(tokens) except StopIteration: raise ValueError(f"'could not be parsed as a filtering action") from None if field_name_tok.kind != Token.Kind.LiteralStr: raise ValueError(f"expected field_name found '{field_name_tok.value}'") if not cmp_tok.is_comparator(): raise ValueError(f"'{cmp_tok.value}' is not a comparator") if value_tok.kind != Token.Kind.LiteralStr: raise ValueError(f"expected value found '{value_tok.value}'") comparator = cls._comparator_token_to_comparator.get(cmp_tok.kind, None) assert ( comparator is not None ), "Internal error: unhandled token to comparator conversion" return cls( field_name=field_name_tok.value, comparator=comparator, value=value_tok.value, ) def apply(self, points: laspy.ScaleAwarePointRecord) -> np.array: """ Computes the filtering. Returns a numpy array of boolean values. """ field_name = self._pdal_name_to_laspy.get(self.field_name, self.field_name) try: field_values = points[field_name] except ValueError: print(f"No field named '{field_name}' in the file") print(f"Available fields are {list(points.point_format.dimension_names)}") raise typer.Abort() comparator_to_processing: Dict[Comparator, Callable[[Any, Any], np.array]] = { Comparator.Equality: np.equal, Comparator.Difference: np.not_equal, Comparator.LessThan: np.less, Comparator.LessOrEqual: np.less_equal, Comparator.GreaterThan: np.greater, Comparator.GreaterOrEqual: np.greater_equal, Comparator.In: np.isin, } comparator_to_parse_func: Dict[Comparator, Callable[[str], Any]] = { Comparator.Equality: parse_float_or_int, Comparator.Difference: parse_float_or_int, Comparator.LessThan: parse_float_or_int, Comparator.LessOrEqual: parse_float_or_int, Comparator.GreaterThan: parse_float_or_int, Comparator.GreaterOrEqual: parse_float_or_int, Comparator.In: parse_list_of_numbers, } try: cmp_func = comparator_to_processing[self.comparator] parse_func = comparator_to_parse_func[self.comparator] except KeyError: raise RuntimeError( f"Internal error: invalid comparator: {self.comparator}" ) from None cmp_value = parse_func(self.value) return cmp_func(field_values, cmp_value) # This could have been a UnaryExpression class # But the only unary operator we have is `not` @dataclass class NegatedFilteringExpression: expr: "FilteringExpression" @dataclass class BinaryFilteringExpression: condition: Condition lhs: "FilteringExpression" rhs: "FilteringExpression" class FilteringExpressionKind(enum.IntEnum): Action = enum.auto() Negated = enum.auto() Binary = enum.auto() @dataclass class FilteringExpression: kind: FilteringExpressionKind data: Union[FilteringAction, NegatedFilteringExpression, BinaryFilteringExpression] @classmethod def parse_string(cls, string: str) -> "FilteringExpression": tokens = tokenize(string) tokens = PeekIterator(tokens) return cls.parse_tokens(tokens) @classmethod def parse_tokens(cls, tokens: PeekIterator[Token]) -> "FilteringExpression": condition_tok_to_condition: Dict[Token.Kind, Condition] = { Token.Kind.AmpAmp: Condition.And, Token.Kind.PipePipe: Condition.Or, Token.Kind.And: Condition.And, Token.Kind.Or: Condition.Or, } tok = tokens.peek() if tok.kind == Token.Kind.OpenParen: _ = next(tokens) expr = cls.parse_tokens(tokens) tok = next(tokens) if tok.kind != Token.Kind.CloseParen: raise ValueError("Unmatched Open Paren") tok = next(tokens, None) if tok is None: return expr if not tok.is_binary_logical_operator(): raise ValueError( f"Failed to parse expresion, expected a logical operator found {tok.value}" ) condition = condition_tok_to_condition.get(tok.kind, None) assert ( condition is not None ), "Internal error: unhandled convertion from token to condition" rhs = cls.parse_tokens(tokens) return cls( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression(condition, expr, rhs), ) if tok.kind == Token.Kind.Not or tok.kind == tok.kind.Bang: _ = next(tokens) # consume the not token expr = cls.parse_tokens(tokens) return cls( kind=FilteringExpressionKind.Negated, data=NegatedFilteringExpression(expr), ) lhs = FilteringAction.parse_tokens(tokens) tok = tokens.peek_safe(default=None) if tok is None: return cls(kind=FilteringExpressionKind.Action, data=lhs) if tok.kind == Token.Kind.CloseParen: # TODO this feels dirty, needs better grammar definition return cls(kind=FilteringExpressionKind.Action, data=lhs) tok = next(tokens) # now we can consumme the token if not tok.is_binary_logical_operator(): raise ValueError( f"Failed to parse expresion, expected a logical operator found {tok.value}" ) condition = condition_tok_to_condition.get(tok.kind, None) assert ( condition is not None ), "Internal error: unhandled convertion from token to condition" rhs = cls.parse_tokens(tokens) expr = cls( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=condition, lhs=FilteringExpression(kind=FilteringExpressionKind.Action, data=lhs), rhs=rhs, ), ) return expr def apply(self, points: laspy.ScaleAwarePointRecord) -> np.array: """Recursively applies the expression and returns an array of bool""" if self.kind == FilteringExpressionKind.Action: action = typing.cast(FilteringAction, self.data) return action.apply(points) elif self.kind == FilteringExpressionKind.Negated: data = typing.cast(NegatedFilteringExpression, self.data) return np.logical_not(data.expr.apply(points)) elif self.kind == FilteringExpressionKind.Binary: data = typing.cast(BinaryFilteringExpression, self.data) lhs_result = data.lhs.apply(points) rhs_result = data.rhs.apply(points) if data.condition == Condition.And: return np.logical_and(lhs_result, rhs_result) elif data.condition == Condition.Or: return np.logical_or(lhs_result, rhs_result) else: raise RuntimeError("Internal error: invalid condition") else: raise RuntimeError(f"Internal error: invalid kind {self.kind}") def _filter_file_at_path( input_path: Path, output_path: Path, filter_expression: FilteringExpression, laz_backend: Optional[CliLazBackend], iter_chunk_size: int, progress: Progress, task: TaskID, ): with ExitStack() as stack: reader = laspy.open(input_path, laz_backend=cli_name_to_backend[laz_backend]) reader = stack.enter_context(reader) progress.update(task, total=reader.header.point_count) header = copy.deepcopy(reader.header) writer = laspy.open( output_path, mode="w", laz_backend=laz_backend, header=header ) writer = stack.enter_context(writer) for chunk in reader.chunk_iterator(iter_chunk_size): mask = filter_expression.apply(chunk) writer.write_points(chunk[mask]) progress.update(task, advance=len(chunk)) @app.command() def filter( input_path: Path = typer.Argument( ..., help="Path to file or directory of files to filter", ), output_path: Path = typer.Argument( ..., help="Directory where converted file will be written, or filename of the filtered file(s)", ), filter_expression: str = typer.Argument( ..., help="The expresion to use as the filter" ), laz_backend: Optional[CliLazBackend] = typer.Option( None, help="The Laz backend to use." ), iter_chunk_size: int = ITER_CHUNK_SIZE_OPTION, ): """ Filters LAS/LAZ file(s) Examples: laspy filter file.las ground.las "classification == 2" --- laspy filter file.las filtered.las "classification in [2, 3] and x > 10.0" ___ laspy filter file.las filtered.las "(intensity >= 128 and intensity <= 256) and classification == 2" """ try: filter_expression = FilteringExpression.parse_string(filter_expression) except Exception as e: print(str(e)) print(f"Failed to parse filter expression") raise typer.Abort() laz_backend = cli_name_to_backend[laz_backend] if laz_backend is not None else None input_paths, output_paths = _list_input_and_ouput_files(input_path, output_path) if len(input_paths) > len(output_paths): rich.print(f"[bold red]Cannot filter many files into one") raise typer.Exit(code=1) if len(input_paths) == 1 and input_paths[0] == output_paths[0]: rich.print("[bold red]Cannot have same file as input and output") raise typer.Exit(code=1) overall_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) file_progress = Progress( *Progress.get_default_columns(), MofNCompleteColumn(), transient=False ) group = Group(file_progress, overall_progress) num_fails = 0 with Live(group): overall_task = overall_progress.add_task( "Processing files...", total=len(input_paths) ) for input_path, output_path in zip(input_paths, output_paths): task = file_progress.add_task(f"[cyan]{input_path.name}") try: _filter_file_at_path( input_path, output_path, filter_expression, laz_backend, iter_chunk_size, file_progress, task, ) except Exception as e: file_progress.update( task, description=f"[bold red]{input_path.name}", ) file_progress.console.print( f"[bold red]{input_path} -> Failed with error: '{e}'" ) num_fails += 1 if num_fails == len(input_paths): overall_progress.update(overall_task, description=f"[red] Failed all tasks") elif num_fails == 0: overall_progress.update( overall_task, description=f"[green]Completed {len(input_paths)} with success", ) else: overall_progress.update( overall_task, description=f"[dark_orange]Completed {len(input_paths) - num_fails} with success, {num_fails} failed", ) def version_callback(value: bool): if value: print(f"{laspy.__version__}") raise typer.Exit() @app.command() def version(): """ Print version information """ version_callback(True) @app.callback() def app_main( version: Optional[bool] = typer.Option( None, "--version", callback=version_callback, is_eager=True, help="Print version and exit", ) ): # Silence warning _ = version laspy-laspy-a32c7aa/laspy/cli/main.py000066400000000000000000000006321463461040100176500ustar00rootroot00000000000000try: import rich import typer HAS_CLI_DEPDS = True except ModuleNotFoundError: HAS_CLI_DEPDS = False def main(): if HAS_CLI_DEPDS: from .core import app app() else: raise SystemExit( """laspy cli needs extra dependencies, install using `pip install laspy[cli]` `pip install laspy[cli,lazrs]` """ ) if __name__ == "__main__": main() laspy-laspy-a32c7aa/laspy/compression.py000066400000000000000000000004641463461040100205210ustar00rootroot00000000000000""" The functions related to the LAZ format (compressed LAS) """ from ._compression.backend import * from ._compression.format import * __all__ = [ "LazBackend", "is_point_format_compressed", "compressed_id_to_uncompressed", "uncompressed_id_to_compressed", "DecompressionSelection", ] laspy-laspy-a32c7aa/laspy/copc.py000066400000000000000000000701741463461040100171110ustar00rootroot00000000000000import io import multiprocessing import os import struct from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass from math import ceil, log2 from operator import attrgetter from queue import Queue, SimpleQueue from threading import Thread from typing import Dict, Iterator, List, Optional, Tuple, Union try: import requests except ModuleNotFoundError: requests = None else: from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry try: import lazrs except ModuleNotFoundError: lazrs = None import numpy as np from .compression import DecompressionSelection from .errors import LaspyException, LazError from .header import LasHeader from .point.record import PackedPointRecord, ScaleAwarePointRecord from .vlrs.known import BaseKnownVLR DEFAULT_HTTP_WORKERS_NUM = multiprocessing.cpu_count() * 5 def requests_retry_session( retries=3, backoff_factor=0.3, status_forcelist=(500, 502, 504), session=None, ): session = session or requests.Session() retry = Retry( total=retries, read=retries, connect=retries, backoff_factor=backoff_factor, status_forcelist=status_forcelist, ) adapter = HTTPAdapter(max_retries=retry) session.mount("http://", adapter) session.mount("https://", adapter) return session # Multi-Range bytes are a thing, and could be used to query # all needed chunks in one request, however it does not seems well supported by servers # (eg AWS S3) so we don't try to use it # # We could try to test if the server support multi range bytes # https://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow class HttpRangeStream: """ class used to mimic file-object interface for HTTP endpoints. This works by using Range-Requests. """ def __init__(self, url: str) -> None: if requests is None: raise LaspyException( "HTTP support requires the 'requests' package to be installed" ) self.url = url self.range_start = 0 self.session = requests_retry_session() def seek(self, pos, whence=io.SEEK_SET): if whence != io.SEEK_SET: raise RuntimeError("Only SEEK_SET is supported") if pos < 0: raise RuntimeError("pos must be >= 0") self.range_start = pos def read(self, n) -> bytes: if n == 0: return b"" range_end = self.range_start + n - 1 headers = {"Range": f"bytes={self.range_start}-{range_end}"} r = self.session.get(self.url, headers=headers) r.raise_for_status() self.range_start += n return r.content def tell(self) -> int: return self.range_start def close(self): self.session.close() def __enter__(self): return self def __exit__(self, *args, **kwargs): self.close() class CopcInfoVlr(BaseKnownVLR): def __init__(self): super().__init__() # Actual (unscaled) coordinate of the center of the octree self.center = np.zeros(3, dtype=np.float64) # Perpendicular distance from the center to any side of the root node. self.halfsize = 0.0 # Space between points at the root node. # This value is halved at each octree level self.spacing = 0.0 # Where to find the first hierarchy page in the file self.hierarchy_root_offset = 0 # The `page_size` of the root page self.hierarchy_root_size = 0 self.gps_min = 0.0 self.gps_max = 0.0 @staticmethod def official_user_id(): return "copc" @staticmethod def official_record_ids(): return (1,) def record_data_bytes(self): raise NotImplementedError("Writing COPC is not supported") def parse_record_data(self, record_data_bytes: bytes): stream = io.BytesIO(record_data_bytes) for i in range(3): self.center[i] = struct.unpack(" bool: return bool(np.all((self.mins <= other.maxs) & (self.maxs >= other.mins))) def ensure_3d(self, mins: np.ndarray, maxs: np.ndarray) -> "Bounds": new_mins = np.zeros(3, dtype=np.float64) new_maxs = np.zeros(3, dtype=np.float64) new_mins[: len(self.mins)] = self.mins[:] new_mins[len(self.mins) :] = mins[len(self.mins) :] new_maxs[: len(self.maxs)] = self.maxs[:] new_maxs[len(self.maxs) :] = maxs[len(self.maxs) :] return Bounds(new_mins, new_maxs) class VoxelKey: """ Represents the `VoxelKey` struct of the COPC Specification """ __slots__ = ["level", "x", "y", "z"] unpacker = struct.Struct(" None: # <0 means invalid self.level = -1 self.x = 0 self.y = 0 self.z = 0 @classmethod def from_bytes(cls, data: bytes): key = cls() key.level, key.x, key.y, key.z = cls.unpacker.unpack(data) return key def child(self, dir: int) -> "VoxelKey": key = VoxelKey() key.level = self.level + 1 key.x = (self.x << 1) | (dir & 0x1) key.y = (self.y << 1) | ((dir >> 1) & 0x1) key.z = (self.z << 1) | ((dir >> 2) & 0x1) return key def childs(self) -> Iterator["VoxelKey"]: return (self.child(i) for i in range(8)) def bounds(self, root_bounds: Bounds) -> Bounds: # In an octree every cell is a cube side_size = (root_bounds.maxs[0] - root_bounds.mins[0]) / 2**self.level mins = root_bounds.mins + (np.array([self.x, self.y, self.z]) * side_size) maxs = root_bounds.mins + ( np.array([self.x + 1, self.y + 1, self.z + 1]) * side_size ) return Bounds(mins, maxs) def __hash__(self): return hash((self.level, self.x, self.y, self.z)) def __eq__(self, other: "VoxelKey") -> bool: return ( self.level == other.level and self.x == other.x and self.y == other.y and self.z == other.z ) def __repr__(self) -> str: return f"VoxelKey(level={self.level}, x={self.x}, y={self.y}, z={self.z})" class Entry: """ Represents the `Entry` struct of the COPC Specification """ __slots__ = ("key", "offset", "byte_size", "point_count") unpacker = struct.Struct(" None: self.key = VoxelKey() # if point count > 0, offset to LAZ chunk # elif point count == -1, offset to a child hierarchy page # elif point count == 0, 0 self.offset = 0 # if point count > 0, size of the LAZ chunk # elif point count == -1, size of the hierarchy page # elif point count == 0, 0 self.byte_size = 0 # if > 0, number of points in the chunk # if == -1, the info for this entry is in another page (see offset) # 0 no point data exists for this key self.point_count = 0 @classmethod def from_bytes(cls, data: bytes) -> "Entry": entry = cls() key_bytes, rest = data[: VoxelKey.unpacker.size], data[VoxelKey.unpacker.size :] entry.key = VoxelKey.from_bytes(key_bytes) entry.offset, entry.byte_size, entry.point_count = cls.unpacker.unpack(rest) return entry def __repr__(self) -> str: return f"Entry(key={self.key}, offset={self.offset}, byte_size={self.byte_size}, point_count={self.point_count})" class HierarchyPage: """ Represents the `HierarchyPage` struct of the COPC Specification """ def __init__(self) -> None: self.entries: Dict[VoxelKey, Entry] = {} @classmethod def from_bytes(cls, data: bytes) -> "HierarchyPage": page = cls() entry_size = Entry.unpacker.size + VoxelKey.unpacker.size num_entries = len(data) // entry_size for i in range(num_entries): entry_bytes = data[i * entry_size : (i + 1) * entry_size] entry = Entry.from_bytes(entry_bytes) page.entries[entry.key] = entry return page class CopcHierarchyVlr(BaseKnownVLR): """ " Hierarchy VLR from COPC Specification """ def __init__(self) -> None: super().__init__() self.data: bytes = b"" self.root_page = HierarchyPage() @staticmethod def official_user_id(): return "copc" @staticmethod def official_record_ids(): return (1000,) def record_data_bytes(self): raise NotImplementedError("Writing COPC is not supported") def parse_record_data(self, record_data_bytes: bytes): # We just save the bytes as to parse them we need some # info from the CopcInfoVlr self.bytes = record_data_bytes class OctreeNode: """Our 'custom' type to build an octree from COPC hierarchy page""" def __init__(self) -> None: self.key = VoxelKey() # The bounds this node represents, in file's coordinate self.bounds = Bounds(np.zeros(3), np.zeros(3)) # Offset to start of corresponding LAZ chunk for this node self.offset = 0 # Number of bytes the corresponding LAZ chunk has self.byte_size = 0 # Number of LAS points contained in this node self.point_count = 0 # Childs of this node, since its an octree, there # are at most 8 childs self.childs: List[OctreeNode] = [] def remove_child(self, child: "OctreeNode") -> None: idx = self.childs.index(child) del self.childs[idx] def __repr__(self) -> str: return f"OctreeNode(key={self.key})" def load_octree_for_query( source, info: CopcInfoVlr, hierarchy_page: HierarchyPage, query_bounds: Optional[Bounds] = None, level_range: Optional[range] = None, ) -> List[OctreeNode]: """ Loads the nodes of the COPC octree from the `source` that satisfies the parameters `query_bounds` and `level_range`. It returns the root node of the loaded 'sub-octree' """ root_bounds = Bounds( mins=info.center - info.halfsize, maxs=info.center + info.halfsize, ) root_node = OctreeNode() root_node.key.level = 0 satisfying_nodes = [] nodes_to_load: List[OctreeNode] = [root_node] while nodes_to_load: current_node = nodes_to_load.pop() current_node.bounds = current_node.key.bounds(root_bounds) is_in_bounds = query_bounds is None or current_node.bounds.overlaps( query_bounds ) if not is_in_bounds: continue if level_range is not None and current_node.key.level >= level_range.stop: continue try: entry = hierarchy_page.entries[current_node.key] except KeyError: continue # get the info of the node if entry.point_count == -1: source.seek(entry.offset) page_bytes = source.read(entry.byte_size) page = HierarchyPage.from_bytes(page_bytes) hierarchy_page.entries.update(page.entries) nodes_to_load.insert(0, current_node) continue elif entry.point_count != 0: current_node.offset = entry.offset current_node.byte_size = entry.byte_size current_node.point_count = entry.point_count for child_key in current_node.key.childs(): child_node = OctreeNode() child_node.key = child_key current_node.childs.append(child_node) nodes_to_load.append(child_node) is_in_level = level_range is None or current_node.key.level in level_range if is_in_level: satisfying_nodes.append(current_node) return satisfying_nodes class ChunkIter: """ Simple iterator that returns slices to chunks of byte. """ def __init__(self, buffer: bytearray): self.buffer = memoryview(buffer) def next(self, size: int): slc = self.buffer[:size] self.buffer = self.buffer[size:] return slc class HttpFetcherThread(Thread): def __init__(self, url: str, query_queue: Queue, result_queue: SimpleQueue) -> None: super().__init__() self.url = url self.query_queue = query_queue self.result_queue = result_queue def run(self) -> None: with HttpRangeStream(self.url) as http_reader: while not self.query_queue.empty(): offset, size = self.query_queue.get() try: http_reader.seek(offset) data = http_reader.read(size) self.result_queue.put((data, offset)) except Exception as e: self.result_queue.put(e) finally: self.query_queue.task_done() def http_queue_strategy( source: HttpRangeStream, byte_queries: List[Tuple[int, int]], out_compressed_bytes: bytearray, num_threads: int, ) -> None: query_queue = Queue() result_queue = SimpleQueue() for query in byte_queries: query_queue.put(query) for _ in range(min(len(byte_queries), num_threads)): HttpFetcherThread(source.url, query_queue, result_queue).start() query_queue.join() results = [] while not result_queue.empty(): result = result_queue.get() if isinstance(result, Exception): raise result results.append(result) results.sort(key=lambda x: x[1]) citer = ChunkIter(out_compressed_bytes) for group_bytes, _ in results: cc = citer.next(len(group_bytes)) cc[:] = group_bytes def http_thread_executor_strategy( source: HttpRangeStream, byte_queries: List[Tuple[int, int]], out_compressed_bytes: bytearray, num_threads: int, ) -> None: # HTTP queries are more of a bottle neck # so we want to fetch multiple chunks at the same time with ThreadPoolExecutor(max_workers=num_threads) as downloader_pool: def fetch_data_job(source, offset, size): source.seek(offset) return source.read(size) jobs = [] for offset, size in byte_queries: jobs.append( downloader_pool.submit( fetch_data_job, HttpRangeStream(source.url), offset, size, ) ) # results = [future.result() for future in concurrent.futures.as_completed(jobs)] # results.sort(key=lambda x: x[1]) # for group_bytes, _ in results: # cc = citer.next(len(group_bytes)) # cc[:] = np.frombuffer(group_bytes, np.uint8) # We don't use concurrent.futures.as_completed # as we need to keep the order citer = ChunkIter(out_compressed_bytes) for future in jobs: group_bytes = future.result() cc = citer.next(len(group_bytes)) cc[:] = group_bytes class CopcReader: """ Class allowing to do queries over a `COPC`_ LAZ In short, COPC files are LAZ 1.4 files organized in a particular way (Octree) making it possible to do spatial queries as well as queries with a level of details. CopcReader **requires** the ``lazrz`` backend to work. Optionaly, if ``requests`` is installed, CopcReader can handle Copc files that are on a remote HTTP server This class *only* reads COPC files, it does not support normal LAS/LAZ files. To create an instance of it you'll likely want to use the :meth:`.CopcReader.open` constructor .. versionadded:: 2.2 .. _COPC: https://github.com/copcio/copcio.github.io """ def __init__( self, stream, close_fd: bool = True, http_num_threads: int = DEFAULT_HTTP_WORKERS_NUM, _http_strategy: str = "queue", decompression_selection: DecompressionSelection = DecompressionSelection.all(), ): """ Creates a CopcReader. Parameters --------- stream: the stream from where data can be read. It must have the following file object methods: read, seek, tell http_num_threads: int, optional, default num cpu * 5 Number of worker threads to do concurent HTTP requests, ignored when reading non-HTTP file close_fd: optional, default bool Whether the stream/file object shall be closed, this only work when using the CopcReader in a with statement. decompression_selection: DecompressionSelection, see :func:`laspy.open` .. versionadded:: 2.4 The ``decompression_selection`` parameter. """ if lazrs is None: raise LazError("COPC support requires the 'lazrs' backend") self.source = stream self.close_fd = close_fd self.http_num_threads = http_num_threads self.http_strategy = _http_strategy self.decompression_selection: lazrs.DecompressionSelection = ( decompression_selection.to_lazrs() ) self.header = LasHeader.read_from(self.source) self.copc_info: CopcInfoVlr = self.header.vlrs[0] if not isinstance(self.copc_info, CopcInfoVlr): copc_info_exists = any( isinstance(vlr, CopcInfoVlr) for vlr in self.header.vlrs ) if copc_info_exists: raise LaspyException( "This file is not a valid COPC, " "it does have a COPC VLR, however it is not the first VLR " "as it should" ) else: raise LaspyException( "This file is not a valid COPC, " "it does not have a COPC VLR" ) if self.copc_info.hierarchy_root_offset < self.header.offset_to_point_data: self.hierarchy = self.header.vlrs.extract("CopcHierarchyVlr")[0] else: # TODO maybe we could read the whole EVLR's byte # so we could load the octree without having any more requests to do # since everything would be in memory self.source.seek(self.copc_info.hierarchy_root_offset) # This only contains the record_data_bytes root_hierarchy_vlr_bytes = self.source.read( self.copc_info.hierarchy_root_size ) hierarchy = CopcHierarchyVlr() hierarchy.parse_record_data(root_hierarchy_vlr_bytes) self.laszip_vlr = self.header.vlrs.pop(self.header.vlrs.index("LasZipVlr")) self.source.seek(self.copc_info.hierarchy_root_offset) root_page_bytes = self.source.read(self.copc_info.hierarchy_root_size) # At first the hierary only contains the root page entries # but it will get updated as the queries may need more pages self.root_page = HierarchyPage.from_bytes(root_page_bytes) @classmethod def open( cls, source: Union[str, os.PathLike, io.IOBase], http_num_threads: int = DEFAULT_HTTP_WORKERS_NUM, _http_strategy: str = "queue", decompression_selection: DecompressionSelection = DecompressionSelection.all(), ) -> "CopcReader": """ Opens the COPC file. Parameters ---------- source: str, io.IOBase, uri or file-like object of the COPC file. Supported sources are: - 'local' files accesible with a path. - HTTP / HTTPS endpoints. The pyhon package ``requests`` is required in order to be able to work with HTTP endpoints. - file-like objects, e.g. fsspec io.IOBase objects. http_num_threads: int, optional, default num cpu * 5 Number of worker threads to do concurent HTTP requests, ignored when reading non-HTTP file decompression_selection: DecompressionSelection, see :func:`laspy.open` Opening a local file .. code-block:: Python from laspy import CopcReader with CopcReader.open("some_file.laz") as reader: ... Opening a file on a remite HTTP server (``requests`` package required) .. code-block:: Python from laspy import CopcReader url = "https://s3.amazonaws.com/hobu-lidar/autzen-classified.copc.laz" with CopcReader.open(url) as reader: ... .. versionadded:: 2.4 The ``decompression_selection`` parameter. """ if isinstance(source, (str, os.PathLike)): source = str(source) if source.startswith("http"): source = HttpRangeStream(source) else: source = open(source, mode="rb") return cls( source, http_num_threads=http_num_threads, decompression_selection=decompression_selection, ) def query( self, bounds: Optional[Bounds] = None, resolution: Optional[Union[float, int]] = None, level: Optional[Union[int, range]] = None, ) -> ScaleAwarePointRecord: """ " Query the COPC file to retrieve the points matching the requested bounds and level. Parameters ---------- bounds: Bounds, optional, default None The bounds for which you wish to aquire points. If None, the whole file's bounds will be considered 2D bounds are suported, (No point will be filtered on its Z coordinate) resolution: float or int, optional, default None Limits the octree levels to be queried in order to have a point cloud with the requested resolution. - The unit is the one of the data. - If None, the resulting cloud will be at the full resolution offered by the COPC source - Mutually exclusive with level parameter level: int or range, optional, default None The level of detail (LOD). - If None, all LOD are going to be considered - If it is an int, only points that are of the requested LOD will be returned. - If it is a range, points for which the LOD is within the range will be returned """ if resolution is not None and level is not None: raise ValueError("Cannot specify both level and resolution") elif resolution is not None and level is None: level_max = max(1, ceil(log2(self.copc_info.spacing / resolution)) + 1) level = range(0, level_max) if isinstance(level, int): level = range(level, level + 1) if bounds is not None: bounds = bounds.ensure_3d(self.header.mins, self.header.maxs) nodes = load_octree_for_query( self.source, self.copc_info, self.root_page, query_bounds=bounds, level_range=level, ) # print("num nodes to query:", len(nodes)); points = self._fetch_and_decrompress_points_of_nodes(nodes) if bounds is not None: MINS = np.round( (bounds.mins - self.header.offsets) / self.header.scales ).astype(np.int32) MAXS = np.round( (bounds.maxs - self.header.offsets) / self.header.scales ).astype(np.int32) x_keep = (MINS[0] <= points.X) & (points.X <= MAXS[0]) y_keep = (MINS[1] <= points.Y) & (points.Y <= MAXS[1]) z_keep = (MINS[2] <= points.Z) & (points.Z <= MAXS[2]) # using scaled coordinates # x, y, z = np.array(points.x), np.array(points.y), np.array(points.z) # x_keep = (bounds.mins[0] <= x) & (x <= bounds.maxs[0]) # y_keep = (bounds.mins[1] <= y) & (y <= bounds.maxs[1]) # z_keep = (bounds.mins[2] <= z) & (z <= bounds.maxs[2]) keep_mask = x_keep & y_keep & z_keep points.array = points.array[keep_mask].copy() return points def spatial_query(self, bounds: Bounds) -> ScaleAwarePointRecord: return self.query(bounds=bounds, level=None) def level_query(self, level: Union[int, range]) -> ScaleAwarePointRecord: return self.query(bounds=None, level=level) def _fetch_and_decrompress_points_of_nodes( self, nodes_to_read: List[OctreeNode] ) -> ScaleAwarePointRecord: if not nodes_to_read: return ScaleAwarePointRecord.empty(header=self.header) # Group together contiguous nodes # so that we minimize the number of # read requests (seek + read) / http requests nodes_to_read = sorted(nodes_to_read, key=attrgetter("offset")) grouped_nodes: List[List[OctreeNode]] = [] current_group: List[OctreeNode] = [] last_node_end = nodes_to_read[0].offset for node in nodes_to_read: if node.offset == last_node_end: current_group.append(node) last_node_end += node.byte_size else: grouped_nodes.append(current_group) current_group = [node] last_node_end = node.offset + node.byte_size if current_group: grouped_nodes.append(current_group) compressed_bytes, num_points, chunk_table = self._fetch_all_chunks( grouped_nodes ) points_array = np.zeros( num_points * self.header.point_format.size, dtype=np.uint8 ) lazrs.decompress_points_with_chunk_table( compressed_bytes, self.laszip_vlr.record_data, points_array, chunk_table, self.decompression_selection, ) r = PackedPointRecord.from_buffer(points_array, self.header.point_format) points = ScaleAwarePointRecord( r.array, r.point_format, self.header.scales, self.header.offsets ) return points def _fetch_all_chunks( self, grouped_nodes: List[List[OctreeNode]] ) -> Tuple[bytearray, int, List[Tuple[int, int]]]: num_points = 0 num_compressed_bytes = 0 chunk_table: List[Tuple[int, int]] = [] byte_queries: List[Tuple[int, int]] = [] for group in grouped_nodes: num_compressed_group_bytes = 0 for node in group: chunk_table.append((node.point_count, node.byte_size)) num_compressed_group_bytes += node.byte_size num_points += node.point_count num_compressed_bytes += num_compressed_group_bytes byte_queries.append((group[0].offset, num_compressed_group_bytes)) compressed_bytes = bytearray(num_compressed_bytes) if isinstance(self.source, HttpRangeStream): if self.http_strategy == "queue": http_queue_strategy( self.source, byte_queries, compressed_bytes, self.http_num_threads ) else: http_thread_executor_strategy( self.source, byte_queries, compressed_bytes, self.http_num_threads ) elif hasattr(self.source, "readinto"): citer = ChunkIter(compressed_bytes) for offset, size in byte_queries: self.source.seek(offset) cc = citer.next(size) self.source.readinto(cc) else: citer = ChunkIter(compressed_bytes) for offset, size in byte_queries: self.source.seek(offset) cc = citer.next(size) cc[:] = self.source.read(size) return compressed_bytes, num_points, chunk_table def __enter__(self) -> "CopcReader": return self def __exit__(self, _exc_type, _exc_val, _exc_tb) -> None: if self.close_fd: self.source.close() laspy-laspy-a32c7aa/laspy/errors.py000066400000000000000000000005371463461040100174750ustar00rootroot00000000000000""" All the custom exceptions types """ class LaspyException(Exception): pass class UnknownExtraType(LaspyException): pass class PointFormatNotSupported(LaspyException): pass class FileVersionNotSupported(LaspyException): pass class LazError(LaspyException): pass class IncompatibleDataFormat(LaspyException): pass laspy-laspy-a32c7aa/laspy/extradims.py000066400000000000000000000026511463461040100201600ustar00rootroot00000000000000import numpy as np from . import errors _extra_dims_base = ( "u1", "i1", "u2", "i2", "u4", "i4", "u8", "i8", "f4", "f8", ) _allowed_extra_dims_types = [] _allowed_extra_dims_types.extend(np.dtype(base) for base in _extra_dims_base) for i in (2, 3): _allowed_extra_dims_types.extend( np.dtype(f"{i}{base}") for base in _extra_dims_base ) _allowed_extra_dims_types = tuple(_allowed_extra_dims_types) def get_dtype_for_extra_dim(type_index: int) -> np.dtype: """Returns the dtype for the given type index Note that 0 is a special case not handled by this Parameters ---------- type_index: int index of the type as defined in the LAS Specification Returns ------- str, a string representing the type, can be understood by numpy """ assert type_index != 0, "Can't get np.dtype for type_index 0" try: return _allowed_extra_dims_types[type_index - 1] except IndexError: raise errors.UnknownExtraType(type_index) from None def get_id_for_extra_dim_type(dtype: np.dtype) -> int: """Returns the index of the type as defined in the LAS Specification Parameters ---------- dtype: str Returns ------- int index of the type """ try: return _allowed_extra_dims_types.index(dtype) + 1 except ValueError: raise errors.UnknownExtraType(dtype) from None laspy-laspy-a32c7aa/laspy/file.py000066400000000000000000000013231463461040100170720ustar00rootroot00000000000000from . import errors class File: def __init__(self, *args, **kwargs) -> None: raise errors.LaspyException( """You are using laspy 2.0, which has several improvements over 1.x but with several breaking changes. To stay on laspy 1.x: `pip install laspy<2.0.0` In short: - To read a file do: las = laspy.read('somefile.laz') - To create a new LAS data do: las = laspy.create(point_format=2, file_version='1.2') - To write a file previously read or created: las.write('somepath.las') See the documentation for more information about the changes https://laspy.readthedocs.io/en/latest/""" ) laspy-laspy-a32c7aa/laspy/header.py000066400000000000000000001005511463461040100174060ustar00rootroot00000000000000import enum import io import logging import struct import typing from datetime import date, timedelta from typing import BinaryIO, Iterable, List, NamedTuple, Optional, Union from uuid import UUID import numpy as np from . import __version__, extradims from ._compression.format import ( compressed_id_to_uncompressed, is_point_format_compressed, uncompressed_id_to_compressed, ) from .errors import LaspyException from .point import dims from .point.format import ExtraBytesParams, PointFormat from .point.record import PackedPointRecord from .utils import read_string, write_string from .vlrs import VLR from .vlrs.geotiff import create_geotiff_projection_vlrs from .vlrs.known import ( ExtraBytesStruct, ExtraBytesVlr, GeoAsciiParamsVlr, GeoKeyDirectoryVlr, WktCoordinateSystemVlr, ) from .vlrs.vlrlist import VLRList logger = logging.getLogger(__name__) GENERATING_SOFTWARE_LEN = 32 SYSTEM_IDENTIFIER_LEN = 32 LAS_FILE_SIGNATURE = b"LASF" DEFAULT_GENERATING_SOFTWARE = f"laspy {__version__}" assert len(DEFAULT_GENERATING_SOFTWARE) < GENERATING_SOFTWARE_LEN class Version(NamedTuple): major: int minor: int @classmethod def from_str(cls, string: str) -> "Version": major, minor = tuple(map(int, string.split("."))) return cls(major, minor) def __eq__(self, other): if isinstance(other, str): return str(self) == other else: return other.major == self.major and other.minor == self.minor def __str__(self): return f"{self.major}.{self.minor}" class GpsTimeType(enum.IntEnum): WEEK_TIME = 0 STANDARD = 1 class GlobalEncoding: GPS_TIME_TYPE_MASK = 0b0000_0000_0000_0001 WAVEFORM_INTERNAL_MASK = 0b0000_0000_0000_0010 # 1.3 WAVEFORM_EXTERNAL_MASK = 0b0000_0000_0000_0100 # 1.3 SYNTHETIC_RETURN_NUMBERS_MASK = 0b0000_0000_0000_1000 # 1.3 WKT_MASK = 0b0000_0000_0001_0000 # 1.4 def __init__(self, value=0): self.value = value def _set_bit(self, mask): self.value |= mask def _unset_bit(self, mask): self.value ^= mask def _set_if_true(self, mask, value): if bool(value) is True: self._set_bit(mask) else: self._unset_bit(mask) @property def gps_time_type(self) -> GpsTimeType: return GpsTimeType(self.value & self.GPS_TIME_TYPE_MASK) @gps_time_type.setter def gps_time_type(self, value: GpsTimeType): self.value ^= self.GPS_TIME_TYPE_MASK self.value |= int(value) & self.GPS_TIME_TYPE_MASK @property def waveform_data_packets_internal(self) -> bool: return bool(self.value & self.WAVEFORM_INTERNAL_MASK) @waveform_data_packets_internal.setter def waveform_data_packets_internal(self, value): self._set_if_true(self.WAVEFORM_INTERNAL_MASK, value) @property def waveform_data_packets_external(self) -> bool: return bool(self.value & self.WAVEFORM_EXTERNAL_MASK) @waveform_data_packets_external.setter def waveform_data_packets_external(self, value): self._set_if_true(self.WAVEFORM_EXTERNAL_MASK, value) @property def synthetic_return_numbers(self) -> bool: return bool(self.value & self.SYNTHETIC_RETURN_NUMBERS_MASK) @synthetic_return_numbers.setter def synthetic_return_numbers(self, value): self._set_if_true(self.SYNTHETIC_RETURN_NUMBERS_MASK, value) @property def wkt(self) -> bool: return bool(self.value & self.WKT_MASK) @wkt.setter def wkt(self, value): self._set_if_true(self.WKT_MASK, value) @classmethod def read_from(cls, stream: BinaryIO) -> "GlobalEncoding": return cls(int.from_bytes(stream.read(2), byteorder="little", signed=False)) def write_to(self, stream: BinaryIO) -> None: stream.write(self.value.to_bytes(2, byteorder="little", signed=False)) class LasHeader: """Contains the information from the header of as LAS file with 'implementation' field left out and 'users' field stored in more ergonomic classes. This header also contains the VLRs Examples -------- Creating a default header: >>> header = LasHeader() >>> header )> Creating a header with the wanted version and point format: >>> header = LasHeader(version=Version(1, 4), point_format=PointFormat(6)) >>> header )> >>> header = LasHeader(version="1.4", point_format=6) >>> header )> """ #: The default version used when None is given to init DEFAULT_VERSION = Version(1, 2) #: The default point format Used when None is given to init DEFAULT_POINT_FORMAT = PointFormat(3) _OLD_LASPY_NAMES = { "max": "maxs", "min": "mins", "scale": "scales", "offset": "offsets", "filesource_id": "file_source_id", "system_id": "system_identifier", "date": "creation_date", "point_return_count": "number_of_points_by_return", "software_id": "generating_software", "point_records_count": "point_count", } def __init__( self, *, version: Optional[Union[Version, str]] = None, point_format: Optional[Union[PointFormat, int]] = None, ) -> None: if isinstance(point_format, int): point_format = PointFormat(point_format) if isinstance(version, str): version = Version.from_str(version) if version is None and point_format is None: version = LasHeader.DEFAULT_VERSION point_format = LasHeader.DEFAULT_POINT_FORMAT elif version is not None and point_format is None: point_format = PointFormat(dims.min_point_format_for_version(str(version))) elif version is None and point_format is not None: version = Version.from_str( dims.preferred_file_version_for_point_format(point_format.id) ) dims.raise_if_version_not_compatible_with_fmt(point_format.id, str(version)) #: File source id self.file_source_id: int = 0 self.global_encoding: GlobalEncoding = GlobalEncoding() #: Project ID #: Initialized to null UUID self.uuid: UUID = UUID(bytes_le=b"\0" * 16) self._version: Version = version #: System identifier #: Initialized to 'OTHER' self.system_identifier: Union[str, bytes] = "OTHER" #: The software which generated the file #: Initialized to 'laspy' self.generating_software: Union[str, bytes] = DEFAULT_GENERATING_SOFTWARE self._point_format: PointFormat = point_format #: Day the file was created, initialized to date.today self.creation_date: Optional[date] = date.today() #: The number of points in the file self.point_count: int = 0 #: The numbers used to scale the x,y,z coordinates self.scales: np.ndarray = np.array([0.01, 0.01, 0.01], dtype=np.float64) #: The numbers used to offset the x,y,z coordinates self.offsets: np.ndarray = np.zeros(3, dtype=np.float64) # The max values for x,y,z self.maxs: np.ndarray = np.zeros(3, dtype=np.float64) # The min values for x,y,z self.mins: np.ndarray = np.zeros(3, dtype=np.float64) #: Number of points by return #: for las <= 1.2 only the first 5 elements matters self.number_of_points_by_return: np.ndarray = np.zeros(15, dtype=np.uint32) #: The VLRS self._vlrs: VLRList = VLRList() #: Extra bytes between end of header and first vlrs self.extra_header_bytes: bytes = b"" #: Extra bytes between end of vlr end first point self.extra_vlr_bytes: bytes = b"" #: Las >= 1.3 self.start_of_waveform_data_packet_record: int = 0 #: Las >= 1.4 #: Offset to the first evlr in the file self.start_of_first_evlr: int = 0 #: The number of evlrs in the file self.number_of_evlrs: int = 0 #: EVLRs, even though they are not stored in the 'header' #: part of the file we keep them in this class #: as they contain same information as vlr. #: None when the file does not support EVLR self.evlrs: Optional[VLRList] = None # Info we keep because it's useful for us but not the user self.offset_to_point_data: int = 0 self.are_points_compressed: bool = False self._sync_extra_bytes_vlr() @property def point_format(self) -> PointFormat: """The point format""" return self._point_format @point_format.setter def point_format(self, new_point_format: PointFormat) -> None: dims.raise_if_version_not_compatible_with_fmt( new_point_format.id, str(self.version) ) self._point_format = new_point_format self._sync_extra_bytes_vlr() @property def version(self) -> Version: """The version""" return self._version @version.setter def version(self, version: Version) -> None: dims.raise_if_version_not_compatible_with_fmt( self.point_format.id, str(version) ) self._version = version # scale properties @property def x_scale(self) -> float: return self.scales[0] @x_scale.setter def x_scale(self, value: float) -> None: self.scales[0] = value @property def y_scale(self) -> float: return self.scales[1] @y_scale.setter def y_scale(self, value: float) -> None: self.scales[1] = value @property def z_scale(self) -> float: return self.scales[2] @z_scale.setter def z_scale(self, value: float) -> None: self.scales[2] = value # offset properties @property def x_offset(self) -> float: return self.offsets[0] @x_offset.setter def x_offset(self, value: float) -> None: self.offsets[0] = value @property def y_offset(self) -> float: return self.offsets[1] @y_offset.setter def y_offset(self, value: float) -> None: self.offsets[1] = value @property def z_offset(self) -> float: return self.offsets[2] @z_offset.setter def z_offset(self, value: float) -> None: self.offsets[2] = value # max properties @property def x_max(self) -> float: return self.maxs[0] @x_max.setter def x_max(self, value: float) -> None: self.maxs[0] = value @property def y_max(self) -> float: return self.maxs[1] @y_max.setter def y_max(self, value: float) -> None: self.maxs[1] = value @property def z_max(self) -> float: return self.maxs[2] @z_max.setter def z_max(self, value: float) -> None: self.maxs[2] = value # min properties @property def x_min(self) -> float: return self.mins[0] @x_min.setter def x_min(self, value: float) -> None: self.mins[0] = value @property def y_min(self) -> float: return self.mins[1] @y_min.setter def y_min(self, value: float) -> None: self.mins[1] = value @property def z_min(self) -> float: return self.mins[2] @z_min.setter def z_min(self, value: float) -> None: self.mins[2] = value @property def vlrs(self) -> VLRList: return self._vlrs @vlrs.setter def vlrs(self, vlrs: typing.Iterable[VLR]) -> None: self._vlrs = VLRList(vlrs) try: self.vlrs.extract("LaszipVlr") except ValueError: pass self._sync_extra_bytes_vlr() def add_extra_dims(self, params: List[ExtraBytesParams]) -> None: for param in params: self.point_format.add_extra_dimension(param) self._sync_extra_bytes_vlr() def add_extra_dim(self, params: ExtraBytesParams): self.add_extra_dims([params]) def add_crs(self, crs: "pyproj.CRS", keep_compatibility: bool = True) -> None: """Add a Coordinate Reference System VLR from a pyproj CRS object. The type of VLR created depends on the las version and point format version. Las version >= 1.4 use WKT string, las version < 1.4 and point format < 6 use GeoTiff tags. .. warning:: This requires `pyproj`. .. warning:: Not all CRS are supported when adding GeoTiff tags. For example, custom CRS. Typically, if the CRS has an EPSG code it will be supported. """ import pyproj # check and remove any existing crs vlrs for crs_vlr_name in ( "WktCoordinateSystemVlr", "GeoKeyDirectoryVlr", "GeoAsciiParamsVlr", "GeoDoubleParamsVlr", ): try: self._vlrs.extract(crs_vlr_name) except IndexError: pass new_ver = self._version >= Version(1, 4) new_pt = self.point_format.id >= 6 if new_pt or (new_ver and not keep_compatibility): self._vlrs.append(WktCoordinateSystemVlr(crs.to_wkt())) self.global_encoding.wkt = True else: self._vlrs.extend(create_geotiff_projection_vlrs(crs)) def remove_extra_dim(self, name: str) -> None: self.remove_extra_dims([name]) def remove_extra_dims(self, names: Iterable[str]) -> None: for name in names: self.point_format.remove_extra_dimension(name) self._sync_extra_bytes_vlr() def set_version_and_point_format( self, version: Version, point_format: PointFormat ) -> None: dims.raise_if_version_not_compatible_with_fmt(point_format.id, str(version)) self._version = version self.point_format = point_format def partial_reset(self) -> None: f64info = np.finfo(np.float64) self.maxs = np.ones(3, dtype=np.float64) * f64info.min self.mins = np.ones(3, dtype=np.float64) * f64info.max self.start_of_first_evlr = 0 self.number_of_evlrs = 0 self.point_count = 0 self.number_of_points_by_return = np.zeros(15, dtype=np.uint32) def update(self, points: PackedPointRecord) -> None: self.partial_reset() if not points: self.maxs = [0.0, 0.0, 0.0] self.mins = [0.0, 0.0, 0.0] else: self.grow(points) def grow(self, points: PackedPointRecord) -> None: self.x_max = max( self.x_max, (points["X"].max() * self.x_scale) + self.x_offset, ) self.y_max = max( self.y_max, (points["Y"].max() * self.y_scale) + self.y_offset, ) self.z_max = max( self.z_max, (points["Z"].max() * self.z_scale) + self.z_offset, ) self.x_min = min( self.x_min, (points["X"].min() * self.x_scale) + self.x_offset, ) self.y_min = min( self.y_min, (points["Y"].min() * self.y_scale) + self.y_offset, ) self.z_min = min( self.z_min, (points["Z"].min() * self.z_scale) + self.z_offset, ) for return_number, count in zip( *np.unique(points.return_number, return_counts=True) ): if return_number == 0: continue if return_number > len(self.number_of_points_by_return): break # np.unique sorts unique values self.number_of_points_by_return[return_number - 1] += count self.point_count += len(points) def set_compressed(self, state: bool) -> None: self.are_points_compressed = state def max_point_count(self) -> int: if self.version <= Version(1, 3): return np.iinfo(np.uint32).max else: return np.iinfo(np.uint64).max @classmethod def read_from( cls, original_stream: BinaryIO, read_evlrs: bool = False ) -> "LasHeader": """ Reads the header from the stream read_evlrs: If true, evlrs will be read Leaves the stream pos right before the point starts (regardless of is read_evlrs was true) """ little_endian = "little" header = cls() stream = io.BytesIO(cls._prefetch_header_data(original_stream)) file_sig = stream.read(4) # This should not be possible as _prefetch already checks this assert file_sig == LAS_FILE_SIGNATURE header.file_source_id = int.from_bytes( stream.read(2), little_endian, signed=False ) header.global_encoding = GlobalEncoding.read_from(stream) header.uuid = UUID(bytes_le=stream.read(16)) header._version = Version( int.from_bytes(stream.read(1), little_endian, signed=False), int.from_bytes(stream.read(1), little_endian, signed=False), ) header.system_identifier = read_string(stream, SYSTEM_IDENTIFIER_LEN) header.generating_software = read_string(stream, GENERATING_SOFTWARE_LEN) creation_day_of_year = int.from_bytes( stream.read(2), little_endian, signed=False ) creation_year = int.from_bytes(stream.read(2), little_endian, signed=False) try: header.creation_date = date(creation_year, 1, 1) + timedelta( creation_day_of_year - 1 ) except ValueError: header.creation_date = None header_size = int.from_bytes(stream.read(2), little_endian, signed=False) header.offset_to_point_data = int.from_bytes( stream.read(4), little_endian, signed=False ) number_of_vlrs = int.from_bytes(stream.read(4), little_endian, signed=False) point_format_id = int.from_bytes(stream.read(1), little_endian, signed=False) point_size = int.from_bytes(stream.read(2), little_endian, signed=False) header.point_count = int.from_bytes(stream.read(4), little_endian, signed=False) for i in range(5): header.number_of_points_by_return[i] = int.from_bytes( stream.read(4), little_endian, signed=False ) for i in range(3): header.scales[i] = struct.unpack("= 3: header.start_of_waveform_data_packet_record = int.from_bytes( stream.read(8), little_endian, signed=False ) if header.version.minor >= 4: header.start_of_first_evlr = int.from_bytes( stream.read(8), little_endian, signed=False ) header.number_of_evlrs = int.from_bytes( stream.read(4), little_endian, signed=False ) header.point_count = int.from_bytes( stream.read(8), little_endian, signed=False ) for i in range(15): header.number_of_points_by_return[i] = int.from_bytes( stream.read(8), little_endian, signed=False ) current_pos = stream.tell() if current_pos < header_size: header.extra_header_bytes = stream.read(header_size - current_pos) elif current_pos > header_size: raise LaspyException("Incoherent header size") header._vlrs = VLRList.read_from(stream, num_to_read=number_of_vlrs) current_pos = stream.tell() if current_pos < header.offset_to_point_data: header.extra_vlr_bytes = stream.read( header.offset_to_point_data - current_pos ) elif current_pos > header.offset_to_point_data: raise LaspyException("Incoherent offset to point data") header.are_points_compressed = is_point_format_compressed(point_format_id) point_format_id = compressed_id_to_uncompressed(point_format_id) point_format = PointFormat(point_format_id) try: extra_bytes_vlr = typing.cast( ExtraBytesVlr, header._vlrs.get("ExtraBytesVlr")[0] ) except IndexError: pass else: if point_size == point_format.size: logger.warning( "There is an ExtraByteVlr but the header.point_size matches the " "point size without extra bytes. The extra bytes vlr info will be ignored" ) header._vlrs.extract("ExtraBytesVlr") else: for extra_dim_info in extra_bytes_vlr.type_of_extra_dims(): point_format.add_extra_dimension(extra_dim_info) header._point_format = point_format if point_size > point_format.size: # We have unregistered extra bytes num_extra_bytes = point_size - point_format.size point_format.dimensions.append( dims.DimensionInfo( name="ExtraBytes", kind=dims.DimensionKind.UnsignedInteger, num_bits=8 * num_extra_bytes, num_elements=num_extra_bytes, is_standard=False, description="Un-registered ExtraBytes", ) ) elif point_size < point_format.size: raise LaspyException( f"Incoherent point size, " f"header says {point_size} point_format created says {point_format.size}" ) if read_evlrs: header.read_evlrs(original_stream) stream.seek(header.offset_to_point_data) return header def write_to( self, stream: BinaryIO, ensure_same_size: bool = False, encoding_errors: str = "strict", ) -> None: """ ensure_same_size: if true this function will raise an internal error if the written header would change the offset to point data it originally had (meaning the file could become broken), Used when rewriting a header to update the file (new point count, mins, maxs, etc) """ if self.point_count > self.max_point_count(): raise LaspyException( f"Version {self.version} cannot save clouds with more than" f" {self.max_point_count()} points (current: {self.point_count})" ) little_endian = "little" with io.BytesIO() as tmp: self._vlrs.write_to(tmp, encoding_errors=encoding_errors) vlr_bytes = tmp.getvalue() header_size = LAS_HEADERS_SIZE[str(self.version)] header_size += len(self.extra_header_bytes) new_offset_to_data = header_size + len(vlr_bytes) + len(self.extra_vlr_bytes) if ensure_same_size and new_offset_to_data != self.offset_to_point_data: raise LaspyException( "Internal error, writing header would change original offset to data" "and break the file" ) self.offset_to_point_data = new_offset_to_data stream.write(LAS_FILE_SIGNATURE) stream.write(self.file_source_id.to_bytes(2, little_endian, signed=False)) self.global_encoding.write_to(stream) stream.write(self.uuid.bytes_le) stream.write(self.version.major.to_bytes(1, little_endian, signed=False)) stream.write(self.version.minor.to_bytes(1, little_endian, signed=False)) was_truncated = write_string( stream, self.system_identifier, SYSTEM_IDENTIFIER_LEN, encoding_errors=encoding_errors, ) if was_truncated: logger.warning( f"system identifier does not fit into the {SYSTEM_IDENTIFIER_LEN} maximum bytes," f" it will be truncated" ) was_truncated = write_string( stream, self.generating_software, GENERATING_SOFTWARE_LEN, encoding_errors=encoding_errors, ) if was_truncated: logger.warning( f"generating software does not fit into the {GENERATING_SOFTWARE_LEN} maximum bytes," f" it will be truncated" ) if self.creation_date is None: self.creation_date = date.today() stream.write( self.creation_date.timetuple().tm_yday.to_bytes( 2, little_endian, signed=False ) ) stream.write(self.creation_date.year.to_bytes(2, little_endian, signed=False)) stream.write(header_size.to_bytes(2, little_endian, signed=False)) stream.write(self.offset_to_point_data.to_bytes(4, little_endian, signed=False)) stream.write(len(self._vlrs).to_bytes(4, little_endian, signed=False)) point_format_id = self.point_format.id if self.are_points_compressed: point_format_id = uncompressed_id_to_compressed(point_format_id) stream.write(point_format_id.to_bytes(1, little_endian, signed=False)) stream.write(self.point_format.size.to_bytes(2, little_endian, signed=False)) # Point Count if self.version.minor >= 4: stream.write(int(0).to_bytes(4, little_endian, signed=False)) for i in range(5): stream.write(int(0).to_bytes(4, little_endian, signed=False)) else: stream.write(self.point_count.to_bytes(4, little_endian, signed=False)) for i in range(5): stream.write( int(self.number_of_points_by_return[i]).to_bytes( 4, little_endian, signed=False ) ) for i in range(3): stream.write(struct.pack("= 3: stream.write( self.start_of_waveform_data_packet_record.to_bytes( 8, little_endian, signed=False ) ) if self.version.minor >= 4: stream.write( self.start_of_first_evlr.to_bytes(8, little_endian, signed=False) ) stream.write(self.number_of_evlrs.to_bytes(4, little_endian, signed=False)) stream.write(self.point_count.to_bytes(8, little_endian, signed=False)) for i in range(15): stream.write( int(self.number_of_points_by_return[i]).to_bytes( 8, little_endian, signed=False ) ) stream.write(self.extra_header_bytes) stream.write(vlr_bytes) stream.write(self.extra_vlr_bytes) def parse_crs(self, prefer_wkt=True) -> Optional["pyproj.CRS"]: """ Method to parse OGC WKT or GeoTiff VLR keys into a pyproj CRS object Returns None if no CRS VLR is present, or if the CRS specified in the VLRS is not understood. Parameters ---------- prefer_wkt: Optional, default True, If True the WKT VLR will be preferred in case both the WKT and Geotiff VLR are present .. warning:: This requires `pyproj`. .. versionadded:: 2.5 The ``prefer_wkt`` parameters. """ geo_vlr = self._vlrs.get_by_id("LASF_Projection") if self.evlrs is not None: geo_vlr.extend(self.evlrs.get_by_id("LASF_Projection")) parsed_crs = {} for rec in geo_vlr: if isinstance(rec, (WktCoordinateSystemVlr, GeoKeyDirectoryVlr)): crs = rec.parse_crs() if crs is not None: parsed_crs[type(rec)] = crs # Could not parse anything / there was nothing to parse if not parsed_crs: return None if prefer_wkt: preferred, other = WktCoordinateSystemVlr, GeoKeyDirectoryVlr else: preferred, other = GeoKeyDirectoryVlr, WktCoordinateSystemVlr try: return parsed_crs[preferred] except KeyError: return parsed_crs[other] def read_evlrs(self, stream): """ Reads EVLRs from the stream and sets them in the data property. The evlrs are accessed from the `evlrs` property Does nothing if either of these is true: - The file does not support EVLRS (version < 1.4) - The file has no EVLRS - The stream does not support seeking Leaves/restores the stream position to where it was before the call """ if self.version.minor >= 4: if self.number_of_evlrs > 0 and stream.seekable(): saved_pos = stream.tell() stream.seek(self.start_of_first_evlr, io.SEEK_SET) self.evlrs = VLRList.read_from( stream, self.number_of_evlrs, extended=True ) stream.seek(saved_pos) elif self.number_of_evlrs > 0 and not stream.seekable(): self.evlrs = None else: self.evlrs = VLRList() else: self.evlrs = None @staticmethod def _prefetch_header_data(source) -> bytes: """ reads (and returns) from the source all the bytes that are between the beginning of the file and the start of point data (which corresponds to Header + VLRS). It is done in two calls to the source's `read` method This is done because `LasHeader.read_from` does a bunch of read to the source, so we prefer to prefetch data in memory in case the original source is not buffered (like a http source could be) """ header_bytes = source.read(LAS_HEADERS_SIZE["1.1"]) file_sig = header_bytes[: len(LAS_FILE_SIGNATURE)] if not file_sig: raise LaspyException(f"Source is empty") if file_sig != LAS_FILE_SIGNATURE: raise LaspyException(f'Invalid file signature "{file_sig}"') if len(header_bytes) < LAS_HEADERS_SIZE["1.1"]: raise LaspyException("File is to small to be a valid LAS") offset_to_data = int.from_bytes( header_bytes[96 : 96 + 4], byteorder="little", signed=False ) rest = source.read(offset_to_data - len(header_bytes)) return header_bytes + rest def _sync_extra_bytes_vlr(self) -> None: try: self._vlrs.extract("ExtraBytesVlr") except IndexError: pass extra_dimensions = list(self.point_format.extra_dimensions) if not extra_dimensions: return eb_vlr = ExtraBytesVlr() for extra_dimension in extra_dimensions: dtype = extra_dimension.dtype assert dtype is not None eb_struct = ExtraBytesStruct( name=extra_dimension.name.encode(), description=extra_dimension.description.encode(), ) if extra_dimension.num_elements > 3 and dtype.base == np.uint8: type_id = 0 eb_struct.options = extra_dimension.num_elements else: type_id = extradims.get_id_for_extra_dim_type(dtype) eb_struct.data_type = type_id eb_struct.scale = extra_dimension.scales eb_struct.offset = extra_dimension.offsets eb_vlr.extra_bytes_structs.append(eb_struct) self._vlrs.append(eb_vlr) # To keep some kind of backward compatibility @property def major_version(self) -> int: return self.version.major @property def minor_version(self) -> int: return self.version.minor def __getattr__(self, item): try: return getattr(self, self._OLD_LASPY_NAMES[item]) except KeyError: raise AttributeError(f"No attribute {item} in LasHeader") from None def __setattr__(self, key, value): try: return setattr(self, self._OLD_LASPY_NAMES[key], value) except KeyError: super().__setattr__(key, value) def __repr__(self) -> str: return f"" LAS_HEADERS_SIZE = { "1.1": 227, "1.2": 227, "1.3": 235, "1.4": 375, } laspy-laspy-a32c7aa/laspy/lasappender.py000066400000000000000000000120351463461040100204530ustar00rootroot00000000000000import io from typing import BinaryIO, Iterable, Optional, Union from ._pointappender import IPointAppender from .compression import LazBackend from .errors import LaspyException from .header import LasHeader from .point.record import PackedPointRecord from .vlrs.vlrlist import VLRList class LasAppender: """Allows to append points to and existing LAS/LAZ file. Appending to LAZ is only supported by the lazrs backend """ def __init__( self, dest: BinaryIO, laz_backend: Optional[Union[LazBackend, Iterable[LazBackend]]] = None, closefd: bool = True, encoding_errors: str = "strict", ) -> None: if not dest.seekable(): raise TypeError("Expected the 'dest' to be a seekable file object") header = LasHeader.read_from(dest) if laz_backend is None: laz_backend = [ bck for bck in LazBackend.detect_available() if bck.supports_append ] self.dest = dest self.header = header if not header.are_points_compressed: self.points_appender = UncompressedPointAppender(self.dest) self.dest.seek( (self.header.point_count * self.header.point_format.size) + self.header.offset_to_point_data, io.SEEK_SET, ) else: self.points_appender = self._create_laz_backend(laz_backend) if header.version.minor >= 4 and header.number_of_evlrs > 0: assert ( self.dest.tell() <= self.header.start_of_first_evlr ), "The position is past the start of evlrs" pos = self.dest.tell() self.dest.seek(self.header.start_of_first_evlr, io.SEEK_SET) self.evlrs: Optional[VLRList] = VLRList.read_from( self.dest, self.header.number_of_evlrs, extended=True ) dest.seek(self.header.start_of_first_evlr, io.SEEK_SET) self.dest.seek(pos, io.SEEK_SET) else: self.evlrs: Optional[VLRList] = None self.closefd = closefd self.encoding_errors = encoding_errors def append_points(self, points: PackedPointRecord) -> None: """Append the points to the file, the points must have the same point format as the points already contained within the file. :param points: The points to append """ if points.point_format != self.header.point_format: raise LaspyException("Point formats do not match") if self.header.max_point_count() - self.header.point_count < len(points): raise LaspyException( "Cannot write {} points as it would exceed the maximum number of points the file" "can store. Current point count: {}, max point count: {}".format( len(points), self.header.point_count, self.header.max_point_count() ) ) self.points_appender.append_points(points) self.header.grow(points) def close(self) -> None: self.points_appender.done() self._write_evlrs() self._write_updated_header() if self.closefd: self.dest.close() def _write_evlrs(self) -> None: if ( self.header.version.minor >= 4 and self.evlrs is not None and len(self.evlrs) > 0 ): self.header.number_of_evlr = len(self.evlrs) self.header.start_of_first_evlr = self.dest.tell() self.evlrs.write_to(self.dest, as_extended=True) def _write_updated_header(self) -> None: pos = self.dest.tell() self.dest.seek(0, io.SEEK_SET) self.header.write_to( self.dest, ensure_same_size=True, encoding_errors=self.encoding_errors ) self.dest.seek(pos, io.SEEK_SET) def _create_laz_backend( self, laz_backend: Union[LazBackend, Iterable[LazBackend]] = ( LazBackend.LazrsParallel, LazBackend.Lazrs, ), ) -> IPointAppender: try: laz_backend = iter(laz_backend) except TypeError: laz_backend = (laz_backend,) last_error: Optional[Exception] = None for backend in laz_backend: try: return backend.create_appender(self.dest, self.header) except Exception as e: last_error = e if last_error is not None: raise LaspyException(f"Could not initialize a laz backend: {last_error}") else: raise LaspyException(f"No valid laz backend selected") def __enter__(self) -> "LasAppender": return self def __exit__(self, exc_type, exc_val, exc_tb) -> None: self.close() class UncompressedPointAppender(IPointAppender): """ Appending points in the simple uncompressed case. """ def __init__(self, dest: BinaryIO) -> None: self.dest = dest def append_points(self, points: PackedPointRecord) -> None: self.dest.write(points.memoryview()) def done(self) -> None: pass laspy-laspy-a32c7aa/laspy/lasdata.py000066400000000000000000000342301463461040100175670ustar00rootroot00000000000000import logging import pathlib import typing from copy import deepcopy from typing import BinaryIO, Iterable, List, Optional, Sequence, Union, overload import numpy as np from . import errors from .compression import LazBackend from .header import LasHeader from .laswriter import LasWriter from .point import ExtraBytesParams, PointFormat, dims, record from .point.dims import OLD_LASPY_NAMES, ScaledArrayView, SubFieldView from .point.record import DimensionNameValidity from .vlrs.vlrlist import VLRList logger = logging.getLogger(__name__) class LasData: """Class synchronizing all the moving parts of LAS files. It connects the point record, header, vlrs together. To access points dimensions using this class you have two possibilities .. code:: python las = laspy.read('some_file.las') las.classification # or las['classification'] """ def __init__( self, header: LasHeader, points: Optional[ Union[record.PackedPointRecord, record.ScaleAwarePointRecord] ] = None, ) -> None: if points is None: points = record.ScaleAwarePointRecord.zeros( header.point_count, header=header ) if points.point_format != header.point_format: raise errors.LaspyException("Incompatible Point Formats") if isinstance(points, record.PackedPointRecord): points = record.ScaleAwarePointRecord( points.array, header.point_format, scales=header.scales, offsets=header.offsets, ) else: assert np.all(header.scales, points.scales) assert np.all(header.offsets, points.offsets) self.__dict__["_points"] = points self.points: record.ScaleAwarePointRecord self.header: LasHeader = header @property def point_format(self) -> PointFormat: """Shortcut to get the point format""" return self.points.point_format @property def xyz(self) -> np.ndarray: """Returns a **new** 2D numpy array with the x,y,z coordinates >>> import laspy >>> las = laspy.read("tests/data/simple.las") >>> xyz = las.xyz >>> xyz.ndim 2 >>> xyz.shape (1065, 3) >>> bool(np.all(xyz[..., 0] == las.x)) True """ return np.vstack((self.x, self.y, self.z)).transpose() @xyz.setter def xyz(self, value) -> None: self.points[("x", "y", "z")] = value @property def points(self) -> record.PackedPointRecord: """Returns the point record""" return self._points @points.setter def points(self, new_points: record.PackedPointRecord) -> None: if new_points.point_format != self.point_format: raise errors.IncompatibleDataFormat( "Cannot set points with a different point format, convert first" ) self._points = new_points self.update_header() # make sure both point format point to the same object self._points.point_format = self.header.point_format @property def vlrs(self) -> VLRList: return self.header.vlrs @vlrs.setter def vlrs(self, vlrs) -> None: self.header.vlrs = vlrs @property def evlrs(self) -> Optional[VLRList]: return self.header.evlrs @evlrs.setter def evlrs(self, evlrs: VLRList) -> None: self.header.evlrs = evlrs def add_extra_dim(self, params: ExtraBytesParams) -> None: """Adds a new extra dimension to the point record .. note:: If you plan on adding multiple extra dimensions, prefer :meth:`.add_extra_dims` as it will save re-allocations and data copy Parameters ---------- params : ExtraBytesParams parameters of the new extra dimension to add """ self.add_extra_dims([params]) def add_extra_dims(self, params: List[ExtraBytesParams]) -> None: """Add multiple extra dimensions at once Parameters ---------- params: list of parameters of the new extra dimensions to add """ self.header.add_extra_dims(params) new_point_record = record.ScaleAwarePointRecord.zeros( len(self.points), header=self.header ) new_point_record.copy_fields_from(self.points) self.points = new_point_record def remove_extra_dims(self, names: Iterable[str]) -> None: """Remove multiple extra dimensions from this object Parameters ---------- names: iterable, names of the extra dimensions to be removed Raises ------ LaspyException: if you try to remove an extra dimension that do not exist. """ extra_dimension_names = list(self.point_format.extra_dimension_names) not_extra_dimension = [ name for name in names if name not in extra_dimension_names ] if not_extra_dimension: raise errors.LaspyException( f"'{not_extra_dimension}' are not extra dimensions and cannot be removed" ) self.header.remove_extra_dims(names) new_point_record = record.ScaleAwarePointRecord.zeros( len(self.points), header=self.header ) new_point_record.copy_fields_from(self.points) self.points = new_point_record def remove_extra_dim(self, name: str) -> None: """Remove an extra dimensions from this object .. note:: If you plan on removing multiple extra dimensions, prefer :meth:`.remove_extra_dims` as it will save re-allocations and data copy Parameters ---------- name: str, name of the extra dimension to be removed Raises ------ LaspyException: if you try to remove an extra dimension that do not exist. """ self.remove_extra_dims([name]) def update_header(self) -> None: """Update the information stored in the header to be in sync with the actual data. This method is called automatically when you save a file using :meth:`laspy.lasdatas.base.LasBase.write` """ self.header.update(self.points) self.header.point_format_id = self.points.point_format.id self.header.point_data_record_length = self.points.point_size if self.header.version.minor >= 4: if self.evlrs is not None: self.header.number_of_evlrs = len(self.evlrs) self.header.start_of_waveform_data_packet_record = 0 # TODO # if len(self.vlrs.get("WktCoordinateSystemVlr")) == 1: # self.header.global_encoding.wkt = 1 else: self.header.number_of_evlrs = 0 @overload def write( self, destination: str, laz_backend: Optional[Union[LazBackend, Sequence[LazBackend]]] = ..., ) -> None: ... @overload def write( self, destination: BinaryIO, do_compress: Optional[bool] = ..., laz_backend: Optional[Union[LazBackend, Sequence[LazBackend]]] = ..., ) -> None: ... def write(self, destination, do_compress=None, laz_backend=None): """Writes to a stream or file .. note:: When destination is a string, it will be interpreted as the path were the file should be written to, and whether the file will be compressed depends on the extension used (case insensitive): - .laz -> compressed - .las -> uncompressed And the do_compress option will be ignored Parameters ---------- destination: str or file object filename or stream to write to do_compress: bool, optional Flags to indicate if you want to compress the data laz_backend: optional, the laz backend to use By default, laspy detect available backends """ if isinstance(destination, (str, pathlib.Path)): do_compress = pathlib.Path(destination).suffix.lower() == ".laz" with open(destination, mode="wb+") as out: self._write_to(out, do_compress=do_compress, laz_backend=laz_backend) else: self._write_to( destination, do_compress=do_compress, laz_backend=laz_backend ) def _write_to( self, out_stream: BinaryIO, do_compress: Optional[bool] = None, laz_backend: Optional[Union[LazBackend, Sequence[LazBackend]]] = None, ) -> None: with LasWriter( out_stream, self.header, do_compress=do_compress, closefd=False, laz_backend=laz_backend, ) as writer: writer.write_points(self.points) if self.header.version.minor >= 4 and self.evlrs is not None: writer.write_evlrs(self.evlrs) def change_scaling(self, scales=None, offsets=None) -> None: """This changes the scales and/or offset used for the x,y,z dimensions. It recomputes the internal, non-scaled X,Y,Z dimensions to match the new scales and offsets. It also updates the header with the new values of scales and offsets. Parameters ---------- scales: optional New scales to be used. If not provided, the scales won't change. offsets: optional New offsets to be used. If not provided, the offsets won't change. Example ------- >>> import laspy >>> header = laspy.LasHeader() >>> header.scales = np.array([0.1, 0.1, 0.1]) >>> header.offsets = np.array([0, 0 ,0]) >>> las = laspy.LasData(header=header) >>> las.x = [10.0] >>> las.y = [20.0] >>> las.z = [30.0] >>> # X = (x - x_offset) / x_scale >>> assert np.all(las.xyz == [[10.0, 20., 30]]) >>> assert np.all(las.X == [100]) >>> assert np.all(las.Y == [200]) >>> assert np.all(las.Z == [300]) We change the scales (only changing x_scale here) but not the offsets. The xyz coordinates (double) are the same (minus possible rounding with actual coordinates) However the integer coordinates changed >>> las.change_scaling(scales=[0.01, 0.1, 0.1]) >>> assert np.all(las.xyz == [[10.0, 20., 30]]) >>> assert np.all(las.X == [1000]) >>> assert np.all(las.Y == [200]) >>> assert np.all(las.Z == [300]) Same idea if we change the offsets, the xyz do not change but XYZ does >>> las.change_scaling(offsets=[0, 10, 15]) >>> assert np.all(las.xyz == [[10.0, 20., 30]]) >>> assert np.all(las.X == [1000]) >>> assert np.all(las.Y == [100]) >>> assert np.all(las.Z == [150]) """ self.points.change_scaling(scales, offsets) if scales is not None: self.header.scales = scales if offsets is not None: self.header.offsets = offsets def __getattr__(self, item): """Automatically called by Python when the attribute named 'item' is no found. We use this function to forward the call the point record. This is the mechanism used to allow the users to access the points dimensions directly through a LasData. Parameters ---------- item: str name of the attribute, should be a dimension name Returns ------- The requested dimension if it exists """ try: return self.points[item] except ValueError: raise AttributeError( f"{self.__class__.__name__} object has no attribute '{item}'" ) from None def __setattr__(self, key, value): """This is called on every access to an attribute of the instance. Again we use this to forward the call the the points record But this time checking if the key is actually a dimension name so that an error is raised if the user tries to set a valid LAS dimension even if it is not present in the field. eg: user tries to set the red field of a file with point format 0: an error is raised """ if key in ("x", "y", "z"): # It is possible that user created a `LasData` object # via `laspy.create`, and changed the headers offsets and scales # values afterwards. So we need to sync the points's record. self.points.offsets = self.header.offsets self.points.scales = self.header.scales self.points[key] = value return name_validity = self.points.validate_dimension_name(key) if name_validity == DimensionNameValidity.Valid: self[key] = value elif name_validity == DimensionNameValidity.Unsupported: raise ValueError( f"Point format {self.point_format} does not support {key} dimension" ) else: super().__setattr__(key, value) @typing.overload def __getitem__( self, item: Union[str, List[str]] ) -> Union[np.ndarray, ScaledArrayView, SubFieldView]: ... @typing.overload def __getitem__(self, item: Union[int, typing.Iterable[int], slice]) -> "LasData": ... def __getitem__(self, item): try: item_is_list_of_str = all(isinstance(el, str) for el in iter(item)) except TypeError: item_is_list_of_str = False if isinstance(item, str) or item_is_list_of_str: return self.points[item] else: las = LasData(deepcopy(self.header), points=self.points[item]) las.update_header() return las def __setitem__(self, key, value): self.points[key] = value def __len__(self): return len(self.points) def __repr__(self) -> str: return "".format( self.header.version.major, self.header.version.minor, self.points.point_format, len(self.points), len(self.vlrs), ) laspy-laspy-a32c7aa/laspy/lasmmap.py000066400000000000000000000032331463461040100176070ustar00rootroot00000000000000import io import mmap from . import lasdata from .header import LasHeader from .point import record from .typehints import PathLike WHOLE_FILE = 0 class LasMMAP(lasdata.LasData): """Memory map a LAS file. It works like a regular LasData however the data is not actually read in memory, Access to dimensions are made directly from the file itself, changes made to the points are directly reflected in the mmap file. Vlrs cannot be modified. This can be useful if you want to be able to process a big LAS file .. note:: A LAZ (compressed LAS) cannot be mmapped """ def __init__(self, filename: PathLike) -> None: fileref = open(filename, mode="r+b") m = mmap.mmap(fileref.fileno(), length=WHOLE_FILE, access=mmap.ACCESS_WRITE) header = LasHeader.read_from(m) if header.are_points_compressed: raise ValueError("Cannot mmap a compressed LAZ file") points_data = record.PackedPointRecord.from_buffer( m, header.point_format, count=header.point_count, offset=header.offset_to_point_data, ) super().__init__(header=header, points=points_data) self.fileref, self.mmap = fileref, m self.mmap.seek(0, io.SEEK_SET) def close(self) -> None: # These need to be set to None, so that # mmap.close() does not give an error because # there are still exported pointers self._points = None self.mmap.close() self.fileref.close() def __enter__(self) -> "LasMMAP": return self def __exit__(self, exc_type, exc_val, exc_tb) -> None: self.close() laspy-laspy-a32c7aa/laspy/lasreader.py000066400000000000000000000323051463461040100201210ustar00rootroot00000000000000import io import logging from typing import BinaryIO, Iterable, Optional, Union from . import errors from ._compression.backend import LazBackend from ._compression.lazrsbackend import LazrsPointReader from ._pointreader import IPointReader from .compression import DecompressionSelection from .header import LasHeader from .lasdata import LasData from .point import record from .vlrs.vlrlist import VLRList logger = logging.getLogger(__name__) class LasReader: """The reader class handles LAS and LAZ via one of the supported backend""" def __init__( self, source: BinaryIO, closefd: bool = True, laz_backend: Optional[Union[LazBackend, Iterable[LazBackend]]] = None, read_evlrs: bool = True, decompression_selection: DecompressionSelection = DecompressionSelection.all(), ): """ Initialize the LasReader Parameters ---------- source: file_object closefd: bool, default True laz_backend: LazBackend or list of LazBackend, optional read_evlrs: bool, default True only applies to __init__ phase, and for files that support evlrs decompression_selection: optional, DecompressionSelection Selection of fields to decompress, only works form point format >= 6 <= 10 Ignored on other point formats .. versionadded:: 2.4 The ``read_evlrs`` and ``decompression_selection`` parameters. """ self.closefd = closefd if laz_backend is None: laz_backend = LazBackend.detect_available() self.laz_backend = laz_backend self.header = LasHeader.read_from(source, read_evlrs=read_evlrs) self.decompression_selection = decompression_selection # The point source is lazily instanciated. # Because some reader implementation may # read informations that require to seek towards the end of # the file (eg: chunk table), and we prefer to limit opening # to reading the header self._point_source: Optional["IPointReader"] = None self._source = source self.points_read = 0 @property def evlrs(self) -> Optional[VLRList]: return self.header.evlrs @evlrs.setter def evlrs(self, evlrs: VLRList) -> None: self.header.evlrs = evlrs @property def point_source(self) -> "IPointReader": if self._point_source is None: self._point_source = self._create_point_source(self._source) return self._point_source def read_points(self, n: int) -> record.ScaleAwarePointRecord: """Read n points from the file Will only read as many points as the header advertise. That is, if you ask to read 50 points and there are only 45 points left this function will only read 45 points. If there are no points left to read, returns an empty point record. Parameters ---------- n: The number of points to read if n is less than 0, this function will read the remaining points """ points_left = self.header.point_count - self.points_read if points_left <= 0: return record.ScaleAwarePointRecord.empty( self.header.point_format, self.header.scales, self.header.offsets, ) if n < 0: n = points_left else: n = min(n, points_left) r = record.PackedPointRecord.from_buffer( self.point_source.read_n_points(n), self.header.point_format ) if len(r) < n: logger.error(f"Could only read {len(r)} of the requested {n} points") points = record.ScaleAwarePointRecord( r.array, r.point_format, self.header.scales, self.header.offsets ) self.points_read += n return points def read(self) -> LasData: """ Reads all the points that are not read and returns a LasData object This will also read EVLRS """ points = self.read_points(-1) las_data = LasData(header=self.header, points=points) shall_read_evlr = ( self.header.version.minor >= 4 and self.header.number_of_evlrs > 0 and self.evlrs is None ) if shall_read_evlr: # If we have to read evlrs by now, it either means: # - the user asked for them not to be read during the opening phase. # - and/or the stream is not seekable, thus they could not be read during opening phase # if self.point_source.source.seekable(): self.read_evlrs() else: # In that case we are still going to # try to read the evlrs by relying on the fact that they should generally be # right after the last point, which is where we are now. if self.header.are_points_compressed: if not isinstance(self.point_source, LazrsPointReader): raise errors.LaspyException( "Reading EVLRs from a LAZ in a non-seekable stream " "can only be done with lazrs backend" ) # Few things: If the stream is non seekable, only a LazrsPointReader # could have been created (parallel requires ability to seek) # # Also, to work, the next lines of code assumes that: # 1) We actually are just after the last point # 2) The chunk table _starts_ just after the last point # 3) The first EVLR starts just after the chunk table # These assumptions should be fine for most of the cases # and non seekable sources are probably not that common _ = self.point_source.read_chunk_table_only() # Since the LazrsDecompressor uses a buffered reader # the python file object's position is not at the position we # think it is. # So we have to read data from the decompressor's # buffered stream. class LocalReader: def __init__(self, source: LazrsPointReader) -> None: self.source = source def read(self, n: int) -> bytes: return self.source.read_raw_bytes(n) self.evlrs = VLRList.read_from( LocalReader(self.point_source), self.header.number_of_evlrs, extended=True, ) else: # For this to work, we assume that the first evlr # start just after the last point self.header.evlrs = VLRList.read_from( self.point_source.source, self.header.number_of_evlrs, extended=True, ) return las_data def seek(self, pos: int, whence: int = io.SEEK_SET) -> int: """Seeks to the start of the point at the given pos Parameters ---------- pos: index of the point to seek to whence: optional, controls how the pos parameter is interpreted: io.SEEK_SET: (default) pos is the index of the point from the beginning io.SEEK_CUR: pos is the point_index relative to the point_index of the last point read io.SEEK_END: pos is the point_index relative to last point Returns ------- The index of the point the reader seeked to, relative to the first point """ if whence == io.SEEK_SET: allowed_range = range(0, self.header.point_count) point_index = pos elif whence == io.SEEK_CUR: allowed_range = range( -self.points_read, self.header.point_count - self.points_read ) point_index = self.points_read + pos elif whence == io.SEEK_END: allowed_range = range(-self.header.point_count, 0) point_index = self.header.point_count + pos else: raise ValueError(f"Invalid value for whence: {whence}") if pos not in allowed_range: whence_str = ["start", "current point", "end"] raise IndexError( f"When seeking from the {whence_str[whence]}, pos must be in {allowed_range}" ) self.point_source.seek(point_index) self.points_read = point_index return point_index def chunk_iterator(self, points_per_iteration: int) -> "PointChunkIterator": """Returns an iterator, that will read points by chunks of the requested size :param points_per_iteration: number of points to be read with each iteration :return: """ return PointChunkIterator(self, points_per_iteration) def read_evlrs(self): self.header.read_evlrs(self._source) def close(self) -> None: """closes the file object used by the reader""" if self.closefd: # We check the actual source, # to avoid creating it, just to close it if self._point_source is not None: self._point_source.close() else: self._source.close() def _create_laz_backend(self, source) -> IPointReader: """Creates the laz backend to use according to `self.laz_backend`. If `self.laz_backend` contains mutilple backends, this functions will try to create them in order until one of them is successfully constructed. If none could be constructed, the error of the last backend tried wil be raised """ if not self.laz_backend: raise errors.LaspyException( "No LazBackend selected, cannot decompress data" ) try: backends = iter(self.laz_backend) except TypeError: backends = (self.laz_backend,) last_error: Optional[Exception] = None for backend in backends: try: if not backend.is_available(): raise errors.LaspyException(f"The '{backend}' is not available") reader: IPointReader = backend.create_reader( source, self.header, decompression_selection=self.decompression_selection, ) except Exception as e: last_error = e logger.error(e) else: self.header.vlrs.pop(self.header.vlrs.index("LasZipVlr")) return reader raise last_error def _create_point_source(self, source) -> IPointReader: if self.header.point_count > 0: if self.header.are_points_compressed: point_source = self._create_laz_backend(source) if point_source is None: raise errors.LaspyException( "Data is compressed, but no LazBacked could be initialized" ) return point_source else: return UncompressedPointReader(source, self.header) else: return EmptyPointReader() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() class PointChunkIterator: def __init__(self, reader: LasReader, points_per_iteration: int) -> None: self.reader = reader self.points_per_iteration = points_per_iteration def __next__(self) -> record.ScaleAwarePointRecord: points = self.reader.read_points(self.points_per_iteration) if not points: raise StopIteration return points def __iter__(self) -> "PointChunkIterator": return self class UncompressedPointReader(IPointReader): """Implementation of IPointReader for the simple uncompressed case""" def __init__(self, source, header: LasHeader) -> None: self._source = source self.header = header @property def source(self): return self._source def read_n_points(self, n: int) -> bytearray: try: readinto = self.source.readinto except AttributeError: data = bytearray(self.source.read(n * self.header.point_format.size)) else: data = bytearray(n * self.header.point_format.size) num_read = readinto(data) if num_read < len(data): data = data[:num_read] return data def seek(self, point_index: int) -> None: self.source.seek( self.header.offset_to_point_data + (point_index * self.header.point_format.size) ) def close(self): self.source.close() class EmptyPointReader(IPointReader): """Does nothing but returning empty bytes. Used to make sure we handle empty LAS files in a robust way. """ @property def source(self): pass def read_n_points(self, n: int) -> bytearray: return bytearray() def close(self) -> None: pass def seek(self, point_index: int) -> None: pass laspy-laspy-a32c7aa/laspy/laswriter.py000066400000000000000000000161761463461040100202030ustar00rootroot00000000000000import logging from copy import deepcopy from typing import BinaryIO, Iterable, Optional, Union from ._pointwriter import IPointWriter from .compression import LazBackend from .errors import LaspyException from .header import LasHeader from .point import dims from .point.record import PackedPointRecord from .vlrs.vlrlist import VLRList logger = logging.getLogger(__name__) class LasWriter: """ Allows to write a complete LAS/LAZ file to the destination. """ def __init__( self, dest: BinaryIO, header: LasHeader, do_compress: Optional[bool] = None, laz_backend: Optional[Union[LazBackend, Iterable[LazBackend]]] = None, closefd: bool = True, encoding_errors: str = "strict", ) -> None: """ Parameters ---------- dest: file_object file object where the LAS/LAZ will be written header: LasHeader The header of the file to be written do_compress: bool, optional Whether the file data should be written as LAS (uncompressed) or LAZ (compressed). If None, the file won't be compressed, unless a laz_backend is provided laz_backend: LazBackend or list of LazBackend, optional The LazBackend to use (or if it is a sequence the LazBackend to try) for the compression closefd: bool, default True should the `dest` be closed when the writer is closed encoding_errors: str, default 'strict' How encoding errors should be treated. Possible values and their explanation can be seen here: https://docs.python.org/3/library/codecs.html#error-handlers. """ self.closefd = closefd self.encoding_errors = encoding_errors self.header = deepcopy(header) # The point writer will take take of creating and writing # the correct laszip vlr, however we have to make sure # no prior laszip vlr exists try: self.header.vlrs.pop(header.vlrs.index("LasZipVlr")) except ValueError: pass self.header.partial_reset() self.dest = dest self.done = False dims.raise_if_version_not_compatible_with_fmt( header.point_format.id, str(self.header.version) ) if laz_backend is not None: if do_compress is None: do_compress = True self.laz_backend = laz_backend else: if do_compress is None: do_compress = False self.laz_backend = LazBackend.detect_available() self.header.are_points_compressed = do_compress if do_compress: self.point_writer: IPointWriter = self._create_laz_backend(self.laz_backend) else: self.point_writer: IPointWriter = UncompressedPointWriter(self.dest) self.point_writer.write_initial_header_and_vlrs( self.header, self.encoding_errors ) def write_points(self, points: PackedPointRecord) -> None: """ .. note :: If you are writing points coming from multiple different input files into one output file, you have to make sure the point record you write all use the same scales and offset of the writer. You can use :meth:`.LasData.change_scaling` or :meth:`.ScaleAwarePointRecord.change_scaling` to do that. Parameters ---------- points: PackedPointRecord or ScaleAwarePointRecord The points to be written Raises ------ LaspyException If the point format of the points does not match the point format of the writer. """ if not points: return if self.done: raise LaspyException("Cannot write points anymore") if points.point_format != self.header.point_format: raise LaspyException("Incompatible point formats") if self.header.max_point_count() - self.header.point_count < len(points): raise LaspyException( "Cannot write {} points as it would exceed the maximum number of points the file" "can store. Current point count: {}, max point count: {}".format( len(points), self.header.point_count, self.header.max_point_count() ) ) self.header.grow(points) self.point_writer.write_points(points) def write_evlrs(self, evlrs: VLRList) -> None: """Writes the EVLRs to the file Parameters ---------- evlrs: VLRList The EVLRs to be written Raises ------ LaspyException If the file's version is not >= 1.4 """ if self.header.version.minor < 4: raise LaspyException( "EVLRs are not supported on files with version less than 1.4" ) if len(evlrs) > 0: self.point_writer.done() self.done = True self.header.number_of_evlrs = len(evlrs) self.header.start_of_first_evlr = self.dest.tell() evlrs.write_to(self.dest, as_extended=True) def close(self) -> None: """Closes the writer. flushes the points, updates the header, making it impossible to write points afterwards. """ if self.point_writer is not None: if not self.done: self.point_writer.done() if self.header.point_count == 0: self.header.maxs = [0.0, 0.0, 0.0] self.header.mins = [0.0, 0.0, 0.0] self.point_writer.write_updated_header(self.header, self.encoding_errors) if self.closefd: self.dest.close() self.done = True def _create_laz_backend( self, laz_backends: Union[LazBackend, Iterable[LazBackend]] ) -> "IPointWriter": try: laz_backends = iter(laz_backends) except TypeError: laz_backends = (laz_backends,) last_error: Optional[Exception] = None for backend in laz_backends: try: if not backend.is_available(): raise LaspyException(f"The '{backend}' is not available") return backend.create_writer(self.dest, self.header) except Exception as e: logger.error(e) last_error = e if last_error is not None: raise LaspyException(f"No LazBackend could be initialized: {last_error}") else: raise LaspyException("No LazBackend selected, cannot compress") def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() class UncompressedPointWriter(IPointWriter): """ Writing points in the simple uncompressed case. """ def __init__(self, dest: BinaryIO) -> None: self.dest = dest @property def destination(self) -> BinaryIO: return self.dest def write_points(self, points: PackedPointRecord) -> None: self.dest.write(points.memoryview()) def done(self) -> None: pass laspy-laspy-a32c7aa/laspy/lib.py000066400000000000000000000312711463461040100167260ustar00rootroot00000000000000""" 'Entry point' of the library, Contains the various functions meant to be used directly by a user """ import copy import io import logging import os from pathlib import Path from typing import Optional, Union from .compression import DecompressionSelection, LazBackend from .errors import LaspyException from .header import LasHeader, Version from .lasappender import LasAppender from .lasdata import LasData from .lasmmap import LasMMAP from .lasreader import LasReader from .laswriter import LasWriter from .point import PointFormat, dims, record from .vlrs.vlrlist import VLRList logger = logging.getLogger(__name__) def open_las( source, mode="r", closefd=True, laz_backend=None, header=None, do_compress=None, encoding_errors: str = "strict", read_evlrs: bool = True, decompression_selection: DecompressionSelection = DecompressionSelection.all(), ) -> Union[LasReader, LasWriter, LasAppender]: """The laspy.open opens a LAS/LAZ file in one of the 3 supported mode: - "r" => Reading => a :class:`laspy.LasReader` will be returned - "w" => Writing => a :class:`laspy.LasWriter` will be returned - "a" => Appending => a :class:`laspy.LasAppender` will be returned When opening a file in 'w' mode, a header (:class:`laspy.LasHeader`) is required >>> with open_las('tests/data/simple.las') as f: ... print(f.header.point_format.id) 3 >>> f = open('tests/data/simple.las', mode='rb') >>> with open_las(f,closefd=False) as flas: ... print(flas.header) )> >>> f.closed False >>> f.close() >>> f.closed True >>> f = open('tests/data/simple.las', mode='rb') >>> with open_las(f) as flas: ... las = flas.read() >>> f.closed True Parameters ---------- source: str or bytes or io.BytesIO if source is a str it must be a filename mode: Optional, the mode to open the file: - "r" for reading (default) - "w" for writing - "a" for appending laz_backend: Optional, laspy.LazBackend, the LAZ backend to use to handle decompression/compression By default available backends are detected, see LazBackend to see the preference order when multiple backends are available header: The header to use when opening in write mode. do_compress: optional, bool, only meaningful in writing mode: - None (default) guess if compression is needed using the file extension or if a laz_backend was explicitely provided - True compresses the file - False do not compress the file closefd: optional, bool, True by default Whether the stream/file object shall be closed, this only work when using open_las in a with statement. An exception is raised if closefd is specified and the source is a filename encoding_errors: str, default 'strict' Only used in writing and appending mode. How encoding errors should be treated. Possible values and their explanation can be seen here: https://docs.python.org/3/library/codecs.html#error-handlers. read_evlrs: bool, default True Only applies to 'r' mode. If True the evlrs will be read during the __init__ / file opening along with the LasHeader. It is fine for most of the cases, but can be problematic when opening file from a data stream like AWS S3 as EVLRs are located at the end of the files, thus will require to pull the whole file. Does nothing if the input file does not support EVLRs decompression_selection: DecompressionSelection, default All Only applies to 'r' mode and for files which suport selective decompression (version >= 1.4 and point format id >= 6), ignored otherwise. Allows to select which fields should be decompressed or not, allowing to save time by not decompressing unused fields. By default all fields are decompressed .. versionadded:: 2.4 The ``read_evlrs`` and ``decompression_selection`` parameters. """ if mode == "r": if header is not None: raise LaspyException( "header argument is not used when opening in read mode, " "did you meant to open in write mode ?" ) if do_compress is not None: raise LaspyException( "do_compress argument is not used when opening in read mode, " "did you meant to open in write mode ?" ) if isinstance(source, (str, Path)): stream = open(source, mode="rb", closefd=closefd) elif isinstance(source, bytes): stream = io.BytesIO(source) else: stream = source try: return LasReader( stream, closefd=closefd, laz_backend=laz_backend, read_evlrs=read_evlrs, decompression_selection=decompression_selection, ) except: if closefd: stream.close() raise elif mode == "w": if header is None: raise ValueError("A header is needed when opening a file for writing") if isinstance(source, (str, Path)): if do_compress is None: do_compress = os.path.splitext(source)[1].lower() == ".laz" stream = open(source, mode="wb+", closefd=closefd) elif isinstance(source, bytes): stream = io.BytesIO(source) else: assert source.seekable() stream = source try: return LasWriter( stream, header=header, do_compress=do_compress, laz_backend=laz_backend, closefd=closefd, encoding_errors=encoding_errors, ) except: if closefd: stream.close() raise elif mode == "a": if isinstance(source, (str, Path)): stream = open(source, mode="rb+", closefd=closefd) elif isinstance(source, bytes): stream = io.BytesIO(source) else: stream = source try: return LasAppender( stream, closefd=closefd, laz_backend=laz_backend, encoding_errors=encoding_errors, ) except: if closefd: stream.close() raise else: raise ValueError(f"Unknown mode '{mode}'") def read_las( source, closefd=True, laz_backend=LazBackend.detect_available(), decompression_selection: DecompressionSelection = DecompressionSelection.all(), ): """Entry point for reading las data in laspy Reads the whole file into memory. >>> las = read_las("tests/data/simple.las") >>> las.classification Parameters ---------- source : str or io.BytesIO The source to read data from laz_backend: Optional, the backend to use when the file is as LAZ file. By default laspy will find the backend to use by itself. Use if you want a specific backend to be used closefd: bool if True and the source is a stream, the function will close it after it is done reading decompression_selection: DecompressionSelection, see :func:`laspy.open` Returns ------- laspy.LasData The object you can interact with to get access to the LAS points & VLRs .. versionadded:: 2.4 The ``decompression_selection`` parameter. """ with open_las( source, closefd=closefd, laz_backend=laz_backend, decompression_selection=decompression_selection, ) as reader: return reader.read() def mmap_las(filename): """MMap a file, much like laspy did""" return LasMMAP(filename) def create_las( *, point_format: Optional[Union[int, PointFormat]] = None, file_version: Optional[Union[str, Version]] = None, ): """Function to create a new empty las data object .. note:: If you provide both point_format and file_version an exception will be raised if they are not compatible >>> las = create_las(point_format=6,file_version="1.2") Traceback (most recent call last): ... laspy.errors.LaspyException: Point format 6 is not compatible with file version 1.2 If you provide only the point_format the file_version will automatically selected for you. >>> las = create_las(point_format=0) >>> las.header.version == '1.2' True >>> las = create_las(point_format=PointFormat(6)) >>> las.header.version == '1.4' True Parameters ---------- point_format: The point format you want the created file to have file_version: The las version you want the created las to have Returns ------- laspy.lasdatas.base.LasBase A new las data object """ header = LasHeader(point_format=point_format, version=file_version) return LasData(header=header) def convert(source_las, *, point_format_id=None, file_version=None): """Converts a Las from one point format to another Automatically upgrades the file version if source file version is not compatible with the new point_format_id convert to point format 0 >>> las = read_las('tests/data/simple.las') >>> las.header.version Version(major=1, minor=2) >>> las = convert(las, point_format_id=0) >>> las.header.point_format.id 0 >>> str(las.header.version) '1.2' convert to point format 6, which need version >= 1.4 then convert back to point format 0, version is not downgraded >>> las = read_las('tests/data/simple.las') >>> str(las.header.version) '1.2' >>> las = convert(las, point_format_id=6) >>> las.header.point_format.id 6 >>> str(las.header.version) '1.4' >>> las = convert(las, point_format_id=0) >>> str(las.header.version) '1.4' an exception is raised if the requested point format is not compatible with the file version >>> las = read_las('tests/data/simple.las') >>> convert(las, point_format_id=6, file_version='1.2') Traceback (most recent call last): ... laspy.errors.LaspyException: Point format 6 is not compatible with file version 1.2 Parameters ---------- source_las : laspy.lasdatas.base.LasBase The source data to be converted point_format_id : int, optional The new point format id (the default is None, which won't change the source format id) file_version : str, optional, The new file version. None by default which means that the file_version may be upgraded for compatibility with the new point_format. The file version will not be downgraded. Returns ------- laspy.lasdatas.base.LasBase """ if point_format_id is None: point_format_id = source_las.point_format.id if file_version is None: file_version = max( str(source_las.header.version), dims.preferred_file_version_for_point_format(point_format_id), ) else: file_version = str(file_version) dims.raise_if_version_not_compatible_with_fmt(point_format_id, file_version) version = Version.from_str(file_version) point_format = PointFormat(point_format_id) point_format.dimensions.extend(source_las.point_format.extra_dimensions) header = copy.deepcopy(source_las.header) header.set_version_and_point_format(version, point_format) if source_las.evlrs is not None: evlrs = VLRList(source_las.evlrs.copy()) else: evlrs = None points = record.PackedPointRecord.from_point_record( source_las.points, header.point_format ) las = LasData(header=header, points=points) if file_version < "1.4" and evlrs is not None and evlrs: logger.warning( "The source contained {} EVLRs," " they will be lost as version {} doest not support them".format( len(evlrs), file_version ) ) else: las.evlrs = evlrs return las def write_then_read_again( las, do_compress=False, laz_backend=LazBackend.detect_available() ): """writes the given las into memory using BytesIO and reads it again, returning the newly read file. Mostly used for testing purposes, without having to write to disk """ out = io.BytesIO() las.write(out, do_compress=do_compress, laz_backend=laz_backend) out.seek(0) return read_las(out) laspy-laspy-a32c7aa/laspy/lib.pyi000066400000000000000000000045641463461040100171040ustar00rootroot00000000000000from typing import BinaryIO, Iterable, Literal, Optional, Union, overload from . import LasWriter, PointFormat from .compression import DecompressionSelection, LazBackend from .header import LasHeader from .lasappender import LasAppender from .lasdata import LasData from .lasmmap import LasMMAP from .lasreader import LasReader from .typehints import PathLike LazBackend = LazBackend DecompressionSelection = DecompressionSelection @overload def open_las( source: PathLike, mode: Literal["r"] = ..., laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasReader: ... @overload def open_las( source: BinaryIO, mode: Literal["r"] = ..., closefd: bool = ..., laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasReader: ... @overload def open_las( source: PathLike, mode: Literal["w"], header: LasHeader, do_compress: Optional[bool] = ..., laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasWriter: ... @overload def open_las( source: BinaryIO, mode: Literal["w"], header: LasHeader, do_compress: Optional[bool] = ..., closefd: bool = ..., laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasWriter: ... @overload def open_las( source: PathLike, mode: Literal["a"], laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasAppender: ... @overload def open_las( source: BinaryIO, mode: Literal["a"], closefd: bool = ..., laz_backend: Union[LazBackend, Iterable[LazBackend]] = ..., ) -> LasAppender: ... def read_las( source: Union[BinaryIO, PathLike], closefd: bool = True, laz_backend: Union[ LazBackend, Iterable[LazBackend] ] = LazBackend.detect_available(), decompression_selection: DecompressionSelection = DecompressionSelection.all(), ) -> LasData: ... def mmap_las(filename: PathLike) -> LasMMAP: ... def merge_las(las_files: Union[Iterable[LasData], LasData]) -> LasData: ... def create_las( *, point_format: Union[int, PointFormat] = 0, file_version: Optional[str] = 0 ) -> LasData: ... def convert( source_las: LasData, *, point_format_id: Optional[int] = ..., file_version: Optional[str] = ... ) -> LasData: ... def create_from_header(header: LasHeader) -> LasData: ... def write_then_read_again( las: LasData, do_compress: bool = ..., laz_backend: LazBackend = ... ) -> LasData: ... laspy-laspy-a32c7aa/laspy/point/000077500000000000000000000000001463461040100167335ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/point/__init__.py000066400000000000000000000001411463461040100210400ustar00rootroot00000000000000from .dims import DimensionInfo, DimensionKind from .format import ExtraBytesParams, PointFormat laspy-laspy-a32c7aa/laspy/point/dims.py000066400000000000000000000572101463461040100202460ustar00rootroot00000000000000""" This module contains things like the definitions of the point formats dimensions, the mapping between dimension names and their type, mapping between point format and compatible file version """ import abc import collections import operator from collections import UserDict from enum import Enum from typing import ( Any, Dict, Generic, Iterable, List, Mapping, NamedTuple, Optional, Set, Tuple, Type, TypeVar, Union, ) import numpy as np from .. import errors from . import packing ValueType = TypeVar("ValueType") class PointFormatDict(UserDict, Generic[ValueType]): """Simple wrapper around a dict that changes the exception raised when accessing a key that is not-present """ def __init__(self, wrapped_dict: Dict[int, ValueType]): super().__init__(wrapped_dict) def __getitem__(self, key: int) -> ValueType: try: return self.data[key] except KeyError: raise errors.PointFormatNotSupported(key) from None class SubField(NamedTuple): name: str mask: int def _point_format_to_dtype( point_format: Iterable[str], dimensions_to_type: Mapping[str, np.dtype] ) -> np.dtype: """build the numpy.dtype for a point format Parameters: ---------- point_format : iterable of str The dimensions names of the point format dimensions : dict The dictionary of dimensions Returns ------- numpy.dtype The dtype for the input point format """ return np.dtype( [(dim_name, dimensions_to_type[dim_name]) for dim_name in point_format] ) def _build_point_formats_dtypes( point_format_dimensions: Mapping[int, Tuple[str]], dimensions_dict: Mapping[str, np.dtype], ) -> Dict[int, np.dtype]: """Builds the dict mapping point format id to numpy.dtype In the dtypes, bit fields are still packed, and need to be unpacked each time you want to access them """ return { fmt_id: _point_format_to_dtype(point_fmt, dimensions_dict) for fmt_id, point_fmt in point_format_dimensions.items() } OLD_LASPY_NAMES = { "flag_byte": "bit_fields", "return_num": "return_number", "num_returns": "number_of_returns", "scan_dir_flag": "scan_direction_flag", "edge_flight_line": "edge_of_flight_line", "pt_src_id": "point_source_id", "wave_packet_desc_index": "wavepacket_index", "byte_offset_to_waveform_data": "wavepacket_offset", "waveform_packet_size": "wavepacket_size", "return_point_waveform_loc": "return_point_wave_location", } # Definition of the points dimensions and formats # LAS version [1.0, 1.1, 1.2, 1.3, 1.4] DIMENSIONS_TO_TYPE: Dict[str, np.dtype] = { "X": np.dtype("i4"), "Y": np.dtype("i4"), "Z": np.dtype("i4"), "intensity": np.dtype("u2"), "bit_fields": np.dtype("u1"), "raw_classification": np.dtype("u1"), "scan_angle_rank": np.dtype("i1"), "user_data": np.dtype("u1"), "point_source_id": np.dtype("u2"), "gps_time": np.dtype("f8"), "red": np.dtype("u2"), "green": np.dtype("u2"), "blue": np.dtype("u2"), # Waveform related dimensions "wavepacket_index": np.dtype("u1"), "wavepacket_offset": np.dtype("u8"), "wavepacket_size": np.dtype("u4"), "return_point_wave_location": np.dtype("f4"), "x_t": np.dtype("f4"), "y_t": np.dtype("f4"), "z_t": np.dtype("f4"), # Las 1.4 "classification_flags": np.dtype("u1"), "scan_angle": np.dtype("i2"), "classification": np.dtype("u1"), "nir": np.dtype("u2"), } POINT_FORMAT_0: Tuple[str, ...] = ( "X", "Y", "Z", "intensity", "bit_fields", "raw_classification", "scan_angle_rank", "user_data", "point_source_id", ) POINT_FORMAT_6: Tuple[str, ...] = ( "X", "Y", "Z", "intensity", "bit_fields", "classification_flags", "classification", "user_data", "scan_angle", "point_source_id", "gps_time", ) WAVEFORM_FIELDS_NAMES: Tuple[str, ...] = ( "wavepacket_index", "wavepacket_offset", "wavepacket_size", "return_point_wave_location", "x_t", "y_t", "z_t", ) COLOR_FIELDS_NAMES: Tuple[str, ...] = ("red", "green", "blue") POINT_FORMAT_DIMENSIONS = PointFormatDict( { 0: POINT_FORMAT_0, 1: POINT_FORMAT_0 + ("gps_time",), 2: POINT_FORMAT_0 + COLOR_FIELDS_NAMES, 3: POINT_FORMAT_0 + ("gps_time",) + COLOR_FIELDS_NAMES, 4: POINT_FORMAT_0 + ("gps_time",) + WAVEFORM_FIELDS_NAMES, 5: POINT_FORMAT_0 + ("gps_time",) + COLOR_FIELDS_NAMES + WAVEFORM_FIELDS_NAMES, 6: POINT_FORMAT_6, 7: POINT_FORMAT_6 + COLOR_FIELDS_NAMES, 8: POINT_FORMAT_6 + COLOR_FIELDS_NAMES + ("nir",), 9: POINT_FORMAT_6 + WAVEFORM_FIELDS_NAMES, 10: POINT_FORMAT_6 + COLOR_FIELDS_NAMES + ("nir",) + WAVEFORM_FIELDS_NAMES, } ) # sub fields of the 'bit_fields' dimension RETURN_NUMBER_MASK_0 = 0b00000111 NUMBER_OF_RETURNS_MASK_0 = 0b00111000 SCAN_DIRECTION_FLAG_MASK_0 = 0b01000000 EDGE_OF_FLIGHT_LINE_MASK_0 = 0b10000000 # sub fields of the 'raw_classification' dimension CLASSIFICATION_MASK_0 = 0b00011111 SYNTHETIC_MASK_0 = 0b00100000 KEY_POINT_MASK_0 = 0b01000000 WITHHELD_MASK_0 = 0b10000000 # sub fields of the bit_fields RETURN_NUMBER_MASK_6 = 0b00001111 NUMBER_OF_RETURNS_MASK_6 = 0b11110000 # sub fields of classification flags CLASSIFICATION_FLAGS_MASK_6 = 0b00001111 SYNTHETIC_MASK_6 = 0b00000001 KEY_POINT_MASK_6 = 0b00000010 WITHHELD_MASK_6 = 0b00000100 OVERLAP_MASK_6 = 0b00001000 SCANNER_CHANNEL_MASK_6 = 0b00110000 SCAN_DIRECTION_FLAG_MASK_6 = 0b01000000 EDGE_OF_FLIGHT_LINE_MASK_6 = 0b10000000 COMPOSED_FIELDS_0: Dict[str, List[SubField]] = { "bit_fields": [ SubField("return_number", RETURN_NUMBER_MASK_0), SubField("number_of_returns", NUMBER_OF_RETURNS_MASK_0), SubField("scan_direction_flag", SCAN_DIRECTION_FLAG_MASK_0), SubField("edge_of_flight_line", EDGE_OF_FLIGHT_LINE_MASK_0), ], "raw_classification": [ SubField("classification", CLASSIFICATION_MASK_0), SubField("synthetic", SYNTHETIC_MASK_0), SubField("key_point", KEY_POINT_MASK_0), SubField("withheld", WITHHELD_MASK_0), ], } COMPOSED_FIELDS_6: Dict[str, List[SubField]] = { "bit_fields": [ SubField("return_number", RETURN_NUMBER_MASK_6), SubField("number_of_returns", NUMBER_OF_RETURNS_MASK_6), ], "classification_flags": [ SubField("synthetic", SYNTHETIC_MASK_6), SubField("key_point", KEY_POINT_MASK_6), SubField("withheld", WITHHELD_MASK_6), SubField("overlap", OVERLAP_MASK_6), SubField("scanner_channel", SCANNER_CHANNEL_MASK_6), SubField("scan_direction_flag", SCAN_DIRECTION_FLAG_MASK_6), SubField("edge_of_flight_line", EDGE_OF_FLIGHT_LINE_MASK_6), ], } # Dict giving the composed fields for each point_format_id COMPOSED_FIELDS = PointFormatDict( { 0: COMPOSED_FIELDS_0, 1: COMPOSED_FIELDS_0, 2: COMPOSED_FIELDS_0, 3: COMPOSED_FIELDS_0, 4: COMPOSED_FIELDS_0, 5: COMPOSED_FIELDS_0, 6: COMPOSED_FIELDS_6, 7: COMPOSED_FIELDS_6, 8: COMPOSED_FIELDS_6, 9: COMPOSED_FIELDS_6, 10: COMPOSED_FIELDS_6, } ) VERSION_TO_POINT_FMT: Dict[str, Tuple[int, ...]] = { "1.1": (0, 1), "1.2": (0, 1, 2, 3), "1.3": (0, 1, 2, 3, 4, 5), "1.4": (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10), } POINT_FORMATS_DTYPE = PointFormatDict( _build_point_formats_dtypes(POINT_FORMAT_DIMENSIONS, DIMENSIONS_TO_TYPE) ) # This Dict maps point_format_ids to their dimensions names ALL_POINT_FORMATS_DIMENSIONS = PointFormatDict({**POINT_FORMAT_DIMENSIONS}) # This Dict maps point_format_ids to their numpy.dtype # the dtype corresponds to the de packed data ALL_POINT_FORMATS_DTYPE = PointFormatDict({**POINT_FORMATS_DTYPE}) def get_sub_fields_dict(point_format_id: int) -> Dict[str, Tuple[str, SubField]]: sub_fields_dict = {} for composed_dim_name, sub_fields in COMPOSED_FIELDS[point_format_id].items(): for sub_field in sub_fields: sub_fields_dict[sub_field.name] = (composed_dim_name, sub_field) return sub_fields_dict class DimensionKind(Enum): SignedInteger = 0 UnsignedInteger = 1 FloatingPoint = 2 BitField = 3 @classmethod def from_letter(cls, letter: str) -> "DimensionKind": if letter == "u": return cls.UnsignedInteger elif letter == "i": return cls.SignedInteger elif letter == "f": return cls.FloatingPoint else: raise ValueError(f"Unknown type letter '{letter}'") def letter(self) -> Optional[str]: if self == DimensionKind.UnsignedInteger: return "u" elif self == DimensionKind.SignedInteger: return "i" elif self == DimensionKind.FloatingPoint: return "f" else: return None def num_bit_set(n: int) -> int: """Count the number of bits that are set (1) in the number n Brian Kernighan's algorithm """ count = 0 while n != 0: count += 1 n = n & (n - 1) return count class DimensionInfo(NamedTuple): """Tuple that contains information of a dimension""" name: str kind: DimensionKind num_bits: int num_elements: int = 1 is_standard: bool = True description: str = "" offsets: Optional[np.ndarray] = None scales: Optional[np.ndarray] = None @classmethod def from_extra_bytes_param(cls, params): me = cls( params.name, DimensionKind.from_letter(params.type.base.kind), params.type.itemsize * 8, params.type.shape[0] if params.type.ndim == 1 else 1, False, params.description, params.offsets, params.scales, ) me._validate() return me @classmethod def from_dtype( cls, name: str, dtype: np.dtype, is_standard: bool = True, description: str = "", offsets: Optional[np.ndarray] = None, scales: Optional[np.ndarray] = None, ) -> "DimensionInfo": if dtype.ndim != 0: num_elements = dtype.shape[0] else: num_elements = 1 kind = DimensionKind.from_letter(dtype.base.kind) num_bits = dtype.itemsize * 8 self = cls( name, kind, num_bits, num_elements, is_standard, description=description, offsets=offsets, scales=scales, ) self._validate() return self @classmethod def from_bitmask( cls, name: str, bit_mask: int, is_standard: bool = False ) -> "DimensionInfo": kind = DimensionKind.BitField bit_size = num_bit_set(bit_mask) return cls(name, kind, bit_size, is_standard=is_standard) @property def num_bytes(self) -> int: return int(self.num_bits // 8) @property def num_bytes_singular_element(self) -> int: return int(self.num_bits // (8 * self.num_elements)) @property def is_scaled(self) -> bool: return self.scales is not None or self.offsets is not None @property def max(self): if self.kind == DimensionKind.BitField: return (2**self.num_bits) - 1 elif self.kind == DimensionKind.FloatingPoint: return np.finfo(self.type_str()).max else: return np.iinfo(self.type_str()).max @property def min(self): if ( self.kind == DimensionKind.BitField or self.kind == DimensionKind.UnsignedInteger ): return 0 elif self.kind == DimensionKind.FloatingPoint: return np.finfo(self.type_str()).min else: return np.iinfo(self.type_str()).min def type_str(self) -> Optional[str]: if self.kind == DimensionKind.BitField: return None if self.num_elements == 1: return f"{self.kind.letter()}{self.num_bytes_singular_element}" return ( f"{self.num_elements}{self.kind.letter()}{self.num_bytes_singular_element}" ) @property def dtype(self) -> Optional[np.dtype]: type_str = self.type_str() if type_str is not None: return np.dtype(type_str) return None def __eq__(self, other: "DimensionInfo") -> bool: # Named Tuple implements that for us, but # when scales and offset are not None (thus are array) # The default '==' won't work # (ValueError, value of an array with more than one element is ambiguous) return ( self.name == other.name and self.kind == other.kind and self.num_bits == other.num_bits and self.is_standard == other.is_standard and self.description == other.description and np.all(self.offsets == other.offsets) and np.all(self.scales == other.scales) ) def __ne__(self, other: "DimensionInfo") -> bool: return not self == other def _validate(self): if (self.offsets is not None and self.scales is None) or ( self.offsets is None and self.scales is not None ): raise ValueError("Cannot provide scales without offsets and vice-versa") if self.offsets is not None and len(self.offsets) != self.num_elements: raise ValueError( f"len(offsets) ({len(self.offsets)}) is not the same as the number of elements ({self.num_elements})" ) if self.scales is not None and len(self.scales) != self.num_elements: raise ValueError( f"len(scales) ({len(self.scales)}) is not the same as the number of elements ({self.num_elements})" ) def size_of_point_format_id(point_format_id: int) -> int: return ALL_POINT_FORMATS_DTYPE[point_format_id].itemsize def preferred_file_version_for_point_format(point_format_id: int) -> str: def inclusive_range(start: int, stop: int): return range(start, stop + 1) if point_format_id in inclusive_range(0, 3): return "1.2" elif point_format_id in inclusive_range(4, 5): return "1.3" elif point_format_id in inclusive_range(6, 10): return "1.4" else: raise errors.PointFormatNotSupported(point_format_id) def min_point_format_for_version(version: str) -> int: return VERSION_TO_POINT_FMT[version][0] def supported_versions() -> Set[str]: """Returns the set of supported file versions""" return set(VERSION_TO_POINT_FMT.keys()) def supported_point_formats() -> Set[int]: """Returns a set of all the point formats supported in laspy""" return set(POINT_FORMAT_DIMENSIONS.keys()) def is_point_fmt_compatible_with_version( point_format_id: int, file_version: str ) -> bool: """Returns true if the file version support the point_format_id""" try: return point_format_id in VERSION_TO_POINT_FMT[str(file_version)] except KeyError: raise errors.FileVersionNotSupported(file_version) def raise_if_version_not_compatible_with_fmt(point_format_id: int, file_version: str): if not is_point_fmt_compatible_with_version(point_format_id, file_version): raise errors.LaspyException( "Point format {} is not compatible with file version {}".format( point_format_id, file_version ) ) def _convert_array_views_to_array( view_class: Type, some_args: Union[List[Any], Tuple[Any, ...]] ) -> List[Any]: converted_args = [] for arg in some_args: if isinstance(arg, (list, tuple)): converted_args.append(_convert_array_views_to_array(view_class, arg)) elif isinstance(arg, view_class): converted_args.append(np.array(arg)) else: converted_args.append(arg) return converted_args class ArrayView(abc.ABC): def __init__(self, array) -> None: self.array = array @abc.abstractmethod def __array__(self, *args, **kwargs) -> np.ndarray: ... @abc.abstractmethod def __getitem__(self, item): ... @abc.abstractmethod def __setitem__(self, key, value): ... def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): inpts = _convert_array_views_to_array(self.__class__, inputs) return getattr(ufunc, method)(*inpts, **kwargs) def __array_function__(self, func, types, args, kwargs): argslist = _convert_array_views_to_array(self.__class__, args) return func(*argslist, **kwargs) def copy(self) -> np.ndarray: return np.array(self) @property def dtype(self): return self.array.dtype @property def shape(self): return self.array.shape @property def ndim(self): return self.array.ndim def max(self, *args, **kwargs): return np.array(self).max(*args, **kwargs) def min(self, *args, **kwargs): return np.array(self).min(*args, **kwargs) def __len__(self): return len(self.array) def __lt__(self, other): return np.array(self) < other def __le__(self, other): return np.array(self) <= other def __ge__(self, other): return np.array(self) >= other def __gt__(self, other): return np.array(self) > other def __eq__(self, other): return np.array(self) == other def __ne__(self, other): return np.array(self) != other def __add__(self, other): return np.array(self) + other def __sub__(self, other): return np.array(self) - other def __mul__(self, other): return np.array(self) * other def __truediv__(self, other): return np.array(self) / other def __floordiv__(self, other): return np.array(self) // other def __repr__(self): return f"<{self.__class__.__name__}({np.array(self)})>" class SubFieldView(ArrayView): """Offers a view onto a LAS field that is a bit field. This class allows to read and modify, the array that stores the bit field directly. """ def __init__(self, array: np.ndarray, bit_mask): super().__init__(array) self.bit_mask = self.array.dtype.type(bit_mask) self.lsb = packing.least_significant_bit_set(bit_mask) self.max_value_allowed = int(self.bit_mask >> self.lsb) def masked_array(self): return (self.array & self.bit_mask) >> self.lsb def _do_comparison(self, value, comp): if isinstance(value, (int, type(self.array.dtype))): if value > self.max_value_allowed: return np.zeros_like(self.array, bool) return comp(self.array & self.bit_mask, value << self.lsb) def __array__(self, *args, **kwargs): ret = self.masked_array() if not isinstance(ret, np.ndarray): ret = np.array(ret) return ret def __lt__(self, other): return self._do_comparison(other, operator.lt) def __le__(self, other): return self._do_comparison(other, operator.le) def __ge__(self, other): return self._do_comparison(other, operator.ge) def __gt__(self, other): return self._do_comparison(other, operator.gt) def __setitem__(self, key, value): # bail out on empty sequences if isinstance(value, collections.abc.Sized) and len(value) == 0: return if np.max(value) > self.max_value_allowed: raise OverflowError( f"value {np.max(value)} is greater than allowed (max: {self.max_value_allowed})" ) value = np.asarray(value) self.array[key] &= ~self.bit_mask # This is not allowed without a casting="unsafe" argument # in Numpy 2.0 # self.array[key] |= shifted shifted = value << self.lsb self.array[key] = np.bitwise_or(self.array[key], shifted, casting="unsafe") def __getitem__(self, item): sliced = SubFieldView(self.array[item], int(self.bit_mask)) if isinstance(item, int): return sliced.masked_array() return sliced class ScaledArrayView(ArrayView): def __init__( self, array: np.ndarray, scale: Union[float, np.ndarray], offset: Union[float, np.ndarray], ) -> None: super().__init__(array) self.scale = scale self.offset = offset def scaled_array(self): return self._apply_scale(self.array) def __array__(self, *args, **kwargs) -> np.ndarray: return self.scaled_array() def _apply_scale(self, value): return (value * self.scale) + self.offset def _remove_scale(self, value): return np.round((value - self.offset) / self.scale) def max(self, *args, **kwargs): return self._apply_scale(self.array.max(*args, **kwargs)) def min(self, *args, **kwargs): return self._apply_scale(self.array.min(*args, **kwargs)) @property def dtype(self): return np.dtype(np.float64) def _do_comparison(self, other, op): # The implementation of comparison by the base class # does a conversion to np.array of self, which is not free # we try to avoid that here if isinstance(other, (int, float, np.number)): other = self._remove_scale(other) return getattr(self.array, op)(other) return getattr(super(), op)(other) def __ge__(self, other): return self._do_comparison(other, "__ge__") def __gt__(self, other): return self._do_comparison(other, "__gt__") def __le__(self, other): return self._do_comparison(other, "__le__") def __lt__(self, other): return self._do_comparison(other, "__lt__") def __eq__(self, other): return self._do_comparison(other, "__eq__") def __ne__(self, other): return self._do_comparison(other, "__ne__") def __getitem__(self, item): if isinstance(item, int): return self._apply_scale(self.array[item]) elif isinstance(item, slice): return self.__class__(self.array[item], self.scale, self.offset) else: sliced_array = self.array[item] if len(item) == 2: if item[1] is Ellipsis: # item is (index, ...), it queries for all the dimensions # of a point or set of point, so we don't slice the scales/offsets return self.__class__(sliced_array, self.scale, self.offset) elif item[0] is Ellipsis: # item is something like (..., index) # it queries for one dimension or set of dimension # for all the points, so we need to slice the scales/offsets return self.__class__( sliced_array, self.scale[item[1]], self.offset[item[1]] ) return self.__class__(sliced_array, self.scale, self.offset) def __setitem__(self, key, value): # bail out on empty sequences if isinstance(value, collections.abc.Sized) and len(value) == 0: return try: info = np.iinfo(self.array.dtype) except ValueError: info = np.finfo(self.array.dtype) new_max = np.max(value) new_min = np.min(value) max_allowed = self._apply_scale(info.max) min_allowed = self._apply_scale(info.min) if np.any(new_max > max_allowed) or np.any(new_min < min_allowed): raise OverflowError( "Values given do not fit after applying offset and scale" ) if isinstance(value, ScaledArrayView): value = np.array(value) self.array[key] = self._remove_scale(value) def __repr__(self): return f"" laspy-laspy-a32c7aa/laspy/point/format.py000066400000000000000000000214771463461040100206100ustar00rootroot00000000000000from itertools import takewhile, zip_longest from typing import Iterable, List, Optional, Type, Union import numpy as np from ..errors import LaspyException from . import dims Number = Union[np.number, float, int] class ExtraBytesParams: """All parameters needed to create extra bytes""" def __init__( self, name: str, type: Union[str, np.dtype, Type[np.uint8]], description: str = "", offsets: Optional[Iterable[Number]] = None, scales: Optional[Iterable[Number]] = None, ) -> None: self.name = name """ The name of the extra dimension """ if isinstance(type, str): # Work around numpy deprecating support # for '1type' strings n = "".join(takewhile(lambda c: c.isdigit(), type)) if n == "1": type = type[1:] self.type = np.dtype(type) """ The type of the extra dimension """ self.description = description """ A description of the extra dimension """ self.offsets = np.array(offsets) if offsets is not None else offsets """ The offsets to use if its a 'scaled dimension', can be none """ self.scales = np.array(scales) if scales is not None else scales """ The scales to use if its a 'scaled dimension', can be none """ class PointFormat: """Class that contains the informations about the dimensions that forms a PointFormat. A PointFormat has 'standard' dimensions (dimensions defined in the LAS standard, each point format has its set of dimensions), but it can also have extra (non-standard) dimensions defined by the user) >>> fmt = PointFormat(3) >>> all(dim.is_standard for dim in fmt.dimensions) True >>> dim = fmt.dimension_by_name("classification") # or fmt["classification"] >>> dim.max 31 >>> dim.min 0 >>> dim.num_bits 5 """ def __init__( self, point_format_id: int, ): """ Parameters ---------- point_format_id: int point format id """ self.id: int = point_format_id self.dimensions: List[dims.DimensionInfo] = [] composed_dims = dims.COMPOSED_FIELDS[self.id] for dim_name in dims.ALL_POINT_FORMATS_DIMENSIONS[self.id]: try: sub_fields = composed_dims[dim_name] except KeyError: dimension = dims.DimensionInfo.from_dtype( dim_name, dims.DIMENSIONS_TO_TYPE[dim_name], is_standard=True ) self.dimensions.append(dimension) else: for sub_field in sub_fields: dimension = dims.DimensionInfo.from_bitmask( sub_field.name, sub_field.mask, is_standard=True ) self.dimensions.append(dimension) @property def standard_dimensions(self) -> Iterable[dims.DimensionInfo]: """Returns an iterable of the standard dimensions >>> fmt = PointFormat(0) >>> standard_dims = list(fmt.standard_dimensions) >>> len(standard_dims) 15 >>> standard_dims[4].name 'return_number' """ return (dim for dim in self.dimensions if dim.is_standard) @property def extra_dimensions(self) -> Iterable[dims.DimensionInfo]: return (dim for dim in self.dimensions if dim.is_standard is False) @property def dimension_names(self) -> Iterable[str]: """Returns the names of the dimensions contained in the point format""" return (dim.name for dim in self.dimensions) @property def standard_dimension_names(self) -> Iterable[str]: """Returns the names of the extra dimensions in this point format""" return (dim.name for dim in self.standard_dimensions) @property def extra_dimension_names(self) -> Iterable[str]: """Returns the names of the extra dimensions in this point format""" return (dim.name for dim in self.extra_dimensions) @property def size(self) -> int: """Returns the number of bytes (standard + extra) a point takes >>> PointFormat(3).size 34 >>> fmt = PointFormat(3) >>> fmt.add_extra_dimension(ExtraBytesParams("codification", "uint64")) >>> fmt.size 42 """ return int(sum(dim.num_bits for dim in self.dimensions) // 8) @property def num_standard_bytes(self) -> int: """Returns the number of bytes used by standard dims >>> fmt = PointFormat(3) >>> fmt.add_extra_dimension(ExtraBytesParams("codification", "uint64")) >>> fmt.num_standard_bytes 34 """ return int(sum(dim.num_bits for dim in self.standard_dimensions) // 8) @property def num_extra_bytes(self) -> int: """Returns the number of extra bytes >>> fmt = PointFormat(3) >>> fmt.add_extra_dimension(ExtraBytesParams("codification", "uint64")) >>> fmt.num_extra_bytes 8 """ return int(sum(dim.num_bits for dim in self.extra_dimensions) // 8) @property def has_waveform_packet(self): """Returns True if the point format has waveform packet dimensions""" dimensions = set(self.dimension_names) return all(name in dimensions for name in dims.WAVEFORM_FIELDS_NAMES) def dimension_by_name(self, name: str) -> dims.DimensionInfo: """Returns the dimension info for the dimension by name ValueError is raised if the dimension does not exist un the point format >>> info = PointFormat(2).dimension_by_name('number_of_returns') >>> info.name == 'number_of_returns' True >>> info.num_bits == 3 True >>> info = PointFormat(2).dimension_by_name('gps_time') Traceback (most recent call last): ... ValueError: Dimension 'gps_time' does not exist """ for dim in self.dimensions: if dim.name == name: return dim raise ValueError(f"Dimension '{name}' does not exist") def add_extra_dimension(self, param: ExtraBytesParams) -> None: """Add an extra, user-defined dimension""" dim_info = dims.DimensionInfo.from_extra_bytes_param(param) # todo: this should be checked in extra bytes param ctor if ( dim_info.num_elements > 3 and dim_info.kind != dims.DimensionKind.UnsignedInteger ): raise LaspyException("Extra Dimensions do not support more than 3 elements") self.dimensions.append(dim_info) def remove_extra_dimension(self, name: str) -> None: dimensions = [ dim for dim in self.dimensions if dim.name == name and not dim.is_standard ] try: dimension = dimensions[0] except IndexError: if name in self.standard_dimension_names: raise LaspyException( f"The dimension named '{name}' is not an extra dimension, " "so it cannot be removed" ) else: raise LaspyException( f"'No extra dimension named '{name}' exist" ) from None self.dimensions = [dim for dim in self.dimensions if dim is not dimension] def dtype(self): """Returns the numpy.dtype used to store the point records in a numpy array .. note:: The dtype corresponds to the dtype with sub_fields *packed* into their composed fields """ dtype = dims.ALL_POINT_FORMATS_DTYPE[self.id] descr = dtype.descr for extra_dim in self.extra_dimensions: descr.append((extra_dim.name, extra_dim.type_str())) return np.dtype(descr) def __getitem__(self, item): if isinstance(item, str): return self.dimension_by_name(item) return self.dimensions[item] def __eq__(self, other): if self.id != other.id: return False for my_eb, ot_eb in zip_longest(self.extra_dimensions, other.extra_dimensions): if my_eb is None or ot_eb is None: return False if my_eb != ot_eb: return False return True def __repr__(self): return "".format( self.id, self.num_extra_bytes ) def lost_dimensions(point_fmt_in, point_fmt_out): """Returns a list of the names of the dimensions that will be lost when converting from point_fmt_in to point_fmt_out """ dimensions_in = set(PointFormat(point_fmt_in).dimension_names) dimensions_out = set(PointFormat(point_fmt_out).dimension_names) completely_lost = [] for dim_name in dimensions_in: if dim_name not in dimensions_out: completely_lost.append(dim_name) return completely_lost laspy-laspy-a32c7aa/laspy/point/packing.py000066400000000000000000000007171463461040100207260ustar00rootroot00000000000000""" This module contains functions to pack and unpack point dimensions """ import numpy as np def least_significant_bit_set(mask: int) -> int: """Return the least significant bit set The index is 0-indexed. Returns -1 is no bit is set >>> least_significant_bit_set(0b0000_0001) 0 >>> least_significant_bit_set(0b0001_0000) 4 >>> least_significant_bit_set(0b0000_0000) -1 """ return (mask & -mask).bit_length() - 1 laspy-laspy-a32c7aa/laspy/point/record.py000066400000000000000000000322431463461040100205670ustar00rootroot00000000000000""" Contains the classes that manages Las PointRecords Las PointRecords are represented using Numpy's structured arrays, The PointRecord classes provide a few extra things to manage these arrays in the context of Las point data """ import logging from copy import deepcopy from enum import Enum, auto from typing import Optional import numpy as np from ..point import PointFormat from . import dims from .dims import OLD_LASPY_NAMES, ScaledArrayView logger = logging.getLogger(__name__) def scale_dimension(array_dim, scale, offset): return (array_dim * scale) + offset def unscale_dimension(array_dim, scale, offset): return np.round((np.array(array_dim) - offset) / scale) class DimensionNameValidity(Enum): """Helper class to make the return value of PackedPointRecord.validate_dimentsion_name more expressive. """ # Means the name is valid and supported by the point format Valid = auto() # Means the name is valid but _not_ supported by the point format Unsupported = auto() # The name does not exist in LAS spec Invalid = auto() class PackedPointRecord: """ In the PackedPointRecord, fields that are a combinations of many sub-fields (fields stored on less than a byte) are still packed together and are only de-packed and re-packed when accessed. This uses of less memory than if the sub-fields were unpacked >>> #return number is a sub-field >>> from laspy import PointFormat, PackedPointRecord >>> packed_point_record = PackedPointRecord.zeros(10,PointFormat(0)) >>> return_number = packed_point_record['return_number'] >>> return_number >>> return_number[:] = 1 >>> bool(np.all(packed_point_record['return_number'] == 1)) True """ def __init__(self, data: np.ndarray, point_format: PointFormat): self.__dict__["array"] = data self.__dict__["point_format"] = point_format self.__dict__["sub_fields_dict"] = dims.get_sub_fields_dict(point_format.id) @property def point_size(self): """Returns the point size in bytes taken by each points of the record Returns ------- int The point size in byte """ return self.array.dtype.itemsize @staticmethod def zeros(point_count, point_format): """Creates a new point record with all dimensions initialized to zero Parameters ---------- point_format: PointFormat The point format id the point record should have point_count : int The number of point the point record should have Returns ------- PackedPointRecord """ data = np.zeros(point_count, point_format.dtype()) return PackedPointRecord(data, point_format) @staticmethod def empty(point_format): """Creates an empty point record. Parameters ---------- point_format: laspy.PointFormat The point format id the point record should have Returns ------- PackedPointRecord """ return PackedPointRecord.zeros(point_count=0, point_format=point_format) @classmethod def from_point_record( cls, other_point_record: "PackedPointRecord", new_point_format: PointFormat ) -> "PackedPointRecord": """Construct a new PackedPointRecord from an existing one with the ability to change to point format while doing so """ array = np.zeros_like(other_point_record.array, dtype=new_point_format.dtype()) new_record = cls(array, new_point_format) new_record.copy_fields_from(other_point_record) return new_record @classmethod def from_buffer(cls, buffer, point_format, count=-1, offset=0): points_dtype = point_format.dtype() data = np.frombuffer(buffer, dtype=points_dtype, offset=offset, count=count) return cls(data, point_format) def copy_fields_from(self, other_record: "PackedPointRecord") -> None: """Tries to copy the values of the current dimensions from other_record""" for dim_name in self.point_format.dimension_names: try: self[dim_name] = np.array(other_record[dim_name]) except ValueError: pass def copy(self) -> "PackedPointRecord": return PackedPointRecord(self.array.copy(), deepcopy(self.point_format)) def memoryview(self) -> memoryview: return memoryview(self.array) def resize(self, new_size: int) -> None: size_diff = new_size - len(self.array) if size_diff > 0: self.array = np.append( self.array, np.zeros(size_diff, dtype=self.array.dtype) ) elif size_diff < 0: self.array = self.array[:new_size].copy() def _append_zeros_if_too_small(self, value): """Appends zeros to the points stored if the value we are trying to fit is bigger """ if len(value) > len(self.array): self.resize(len(value)) def __eq__(self, other): return self.point_format == other.point_format and np.all( self.array == other.array ) def __len__(self): if self.array.ndim == 0: return 1 return self.array.shape[0] def __getitem__(self, item): """Gives access to the underlying numpy array Unpack the dimension if item is the name a sub-field """ if isinstance(item, (int, slice, np.ndarray, list, tuple)): return PackedPointRecord(self.array[item], self.point_format) try: item = OLD_LASPY_NAMES[item] except KeyError: pass # 1) Is it a sub field ? try: composed_dim, sub_field = self.sub_fields_dict[item] return dims.SubFieldView(self.array[composed_dim], sub_field.mask) except KeyError: pass # 2) Is it a Scaled Extra Byte Dimension ? try: dim_info = self.point_format.dimension_by_name(item) if dim_info.is_standard is False and dim_info.is_scaled: assert dim_info.scales is not None and dim_info.offsets is not None return ScaledArrayView( self.array[item], dim_info.scales, dim_info.offsets ) except ValueError: pass return self.array[item] def __setitem__(self, key, value): """Sets elements in the array""" if isinstance(key, (tuple, list)): if not isinstance(value, np.ndarray): value = np.asarray(value) if value.dtype.isbuiltin == 0: # value is most likely a structured array (dtype = [('name1', 'type1'), ...]) # https://numpy.org/devdocs/reference/generated/numpy.dtype.isbuiltin.html for name, v_name in zip(key, value.dtype.names): self[name] = value[v_name] else: if len(key) == 1 and value.ndim == 1: value = value[..., np.newaxis] for i, name in enumerate(key): self[name] = value[..., i] return self._append_zeros_if_too_small(value) if isinstance(key, str): self[key][:] = value else: self.array[key] = value def __getattr__(self, item): try: return self[item] except ValueError: raise AttributeError("{} is not a valid dimension".format(item)) from None def validate_dimension_name(self, key: str) -> DimensionNameValidity: """Given a name of a dimension this validates it.""" try: key = OLD_LASPY_NAMES[key] except KeyError: pass if key in self.point_format.dimension_names or key in self.array.dtype.names: return DimensionNameValidity.Valid elif key in dims.DIMENSIONS_TO_TYPE: return DimensionNameValidity.Unsupported else: return DimensionNameValidity.Invalid def __setattr__(self, key, value): name_validity = self.validate_dimension_name(key) if name_validity == DimensionNameValidity.Valid: self[key] = value elif name_validity == DimensionNameValidity.Unsupported: raise ValueError( f"Point format {self.point_format} does not support {key} dimension" ) else: super().__setattr__(key, value) def __repr__(self): return "<{}(fmt: {}, len: {}, point size: {})>".format( self.__class__.__name__, self.point_format, len(self), self.point_format.size, ) def apply_new_scaling(record, scales: np.ndarray, offsets: np.ndarray) -> None: record["X"] = unscale_dimension(np.asarray(record.x), scales[0], offsets[0]) record["Y"] = unscale_dimension(np.asarray(record.y), scales[1], offsets[1]) record["Z"] = unscale_dimension(np.asarray(record.z), scales[2], offsets[2]) class ScaleAwarePointRecord(PackedPointRecord): """A ScaleAwarePointRecord is a point record that knows the scales and offets to use, and is thus able to get and set the scaled x, y, z coordinates To create one, use :meth:`.ScaleAwarePointRecord.zeros` or :meth:`.ScaleAwarePointRecord.empty` """ def __init__(self, array, point_format, scales, offsets): super().__init__(array, point_format) self.scales = np.array(scales) self.offsets = np.array(offsets) if self.scales.shape != (3,): raise ValueError("scales must be an array of 3 elements") if self.offsets.shape != (3,): raise ValueError("offsets must be an array of 3 elements") @staticmethod def zeros( point_count, *, point_format=None, scales=None, offsets=None, header=None ): """Creates a new point record with all dimensions initialized to zero Examples -------- >>> record = ScaleAwarePointRecord.zeros( ... 5, point_format=PointFormat(3), scales=[1.0, 1.0, 1.0], offsets=[0.1, 0.5, 17.5]) >>> len(record) 5 >>> import laspy >>> hdr = laspy.LasHeader() >>> record = ScaleAwarePointRecord.zeros(5, header=hdr) >>> len(record) 5 >>> hdr = laspy.LasHeader() >>> record = ScaleAwarePointRecord.zeros(5, header=hdr, scales=[1.0, 1.0, 1.0]) Traceback (most recent call last): ValueError: header argument is mutually exclusive with point_format, scales and offets >>> record = ScaleAwarePointRecord.zeros(5, point_format=PointFormat(3)) Traceback (most recent call last): ValueError: You have to provide all 3: point_format, scale and offsets """ first_set = (point_format, scales, offsets) if header is not None: if any(arg is not None for arg in first_set): raise ValueError( "header argument is mutually exclusive with point_format, scales and offets" ) point_format = header.point_format scales = header.scales offsets = header.offsets else: if any(arg is None for arg in first_set): raise ValueError( "You have to provide all 3: " "point_format, scale and offsets" ) data = np.zeros(point_count, point_format.dtype()) return ScaleAwarePointRecord(data, point_format, scales, offsets) @staticmethod def empty(point_format=None, scales=None, offsets=None, header=None): """Creates an empty point record.""" return ScaleAwarePointRecord.zeros( point_count=0, point_format=point_format, scales=scales, offsets=offsets, header=header, ) def change_scaling(self, scales=None, offsets=None) -> None: """See :meth:`.LasData.change_scaling`""" if scales is None: scales = self.scales if offsets is None: offsets = self.offsets apply_new_scaling(self, scales, offsets) self.scales = scales self.offsets = offsets def __getitem__(self, item): if isinstance(item, (int, slice, np.ndarray, list, tuple)): if isinstance(item, (list, tuple)): # x, y ,z do not really exists in the array, but they are computed from X, Y, Z item = [ item if item not in ("x", "y", "z") else item.upper() for item in item ] return ScaleAwarePointRecord( self.array[item], self.point_format, self.scales, self.offsets ) if item == "x": return ScaledArrayView(self.array["X"], self.scales[0], self.offsets[0]) elif item == "y": return ScaledArrayView(self.array["Y"], self.scales[1], self.offsets[1]) elif item == "z": return ScaledArrayView(self.array["Z"], self.scales[2], self.offsets[2]) else: return super().__getitem__(item) def __setattr__(self, key, value): if key in ("x", "y", "z"): self[key][:] = value else: return super().__setattr__(key, value) laspy-laspy-a32c7aa/laspy/typehints.py000066400000000000000000000001151463461040100202000ustar00rootroot00000000000000import pathlib from typing import Union PathLike = Union[str, pathlib.Path] laspy-laspy-a32c7aa/laspy/utils.py000066400000000000000000000104621463461040100173170ustar00rootroot00000000000000from typing import BinaryIO, Union def encode_to_null_terminated(string: str, codec: str = "utf-8") -> bytes: """ >>> encode_to_null_terminated("las files are cool") b'las files are cool\\x00' >>> encode_to_null_terminated("") b'\\x00' """ b = string.encode(codec) if not b or b[-1] != 0: b += b"\0" return b def read_string( stream: BinaryIO, length: int, encoding: str = "ascii " ) -> Union[str, bytes]: """ Reads `length` bytes from the stream, and tries to decode it. If the decoding succeeds, returns the `str`. Otherwise the raw bytes are returned. """ raw_string = stream.read(length) first_null_byte_pos = raw_string.find(b"\0") if first_null_byte_pos >= 0: raw_string = raw_string[:first_null_byte_pos] try: return raw_string.decode(encoding) except UnicodeDecodeError: return raw_string def write_as_c_string( stream: BinaryIO, string: Union[str, bytes], max_length: int, encoding: str = "ascii", encoding_errors: str = "strict", ) -> bool: """ Writes the string or bytes as a 'C' string to the stream. A 'C' string is null terminated, so this function writes the null terminator. It will always write `max_length` bytes to the stream, so the input data may be null padded or truncated. """ raw_bytes = get_bytes_from_string(string, encoding, encoding_errors) raw_bytes, was_truncated = null_pad_bytes( raw_bytes, max_length, null_terminate=True ) stream.write(raw_bytes) return was_truncated def write_string( stream: BinaryIO, string: Union[str, bytes], max_length: int, encoding: str = "ascii", encoding_errors: str = "strict", ) -> bool: """ Writes the string or bytes as a 'C' string to the stream. Written data is not null terminated. It will always write `max_length` bytes to the stream, so the input data may be null padded or truncated. """ raw_bytes = get_bytes_from_string(string, encoding, encoding_errors) raw_bytes, was_truncated = null_pad_bytes( raw_bytes, max_length, null_terminate=False ) stream.write(raw_bytes) return was_truncated def get_bytes_from_string( string: Union[str, bytes], encoding: str, encoding_errors: str ) -> bytes: if isinstance(string, str): raw_bytes = string.encode(encoding, errors=encoding_errors) else: # check that the bytes are valid for the given encoding _ = string.decode(encoding, errors=encoding_errors) raw_bytes = string return raw_bytes def null_pad_bytes( raw_bytes: bytes, max_length: int, null_terminate: bool = True ) -> (bytes, bool): """ Returns a byte string of `max_length` bytes. If the input bytes is shorter then the output will be null padded. If the input bytes is longer it will be truncated. If null_terminate is True, then the last byte is guaranteed to be a null byte (and the out string sill has `max_length` bytes). >>> null_pad_bytes(b'abcd', 5) (b'abcd\\x00', False) # input has 4 bytes, and must be 4 bytes long # but since null_terminate is True its guaranteed to be null terminated, # the last byte will be truncated >>> null_pad_bytes(b'abcd', 4) (b'abc\\x00', True) # Same setup, but don't null terminate >>> null_pad_bytes(b'abcd', 4, null_terminate=False) (b'abcd', False) >>> null_pad_bytes(b'abcdef', 4) (b'abc\\x00', True) >>> null_pad_bytes(b'abcdef', 4, null_terminate=False) (b'abcd', True) >>> null_pad_bytes(b'abcd', 10) (b'abcd\\x00\\x00\\x00\\x00\\x00\\x00', False) >>> null_pad_bytes(b'abcdabcd', 5) (b'abcd\\x00', True) >>> null_pad_bytes(b'abcde\\x00', 8) (b'abcde\\x00\\x00\\x00', False) >>> null_pad_bytes(b'abcde\\x00z', 8) (b'abcde\\x00\\x00\\x00', True) """ was_truncated = False null_pos = raw_bytes.find(b"\0") if null_pos != -1: was_truncated = null_pos != len(raw_bytes) - 1 raw_bytes = raw_bytes[:null_pos] if len(raw_bytes) >= max_length + (not null_terminate): raw_bytes = raw_bytes[: max_length - 1 + (not null_terminate)] was_truncated = True # This will effectively null pad raw_bytes = raw_bytes.ljust(max_length, b"\0") return raw_bytes, was_truncated laspy-laspy-a32c7aa/laspy/vlrs/000077500000000000000000000000001463461040100165705ustar00rootroot00000000000000laspy-laspy-a32c7aa/laspy/vlrs/__init__.py000066400000000000000000000001131463461040100206740ustar00rootroot00000000000000from . import geotiff from .known import BaseKnownVLR from .vlr import VLR laspy-laspy-a32c7aa/laspy/vlrs/geotiff.py000066400000000000000000000163531463461040100205750ustar00rootroot00000000000000import logging import warnings from collections import namedtuple from copy import copy from typing import List, Optional, Tuple from . import vlrlist from .known import ( GeoAsciiParamsVlr, GeoDoubleParamsVlr, GeoKeyDirectoryVlr, GeoKeyEntryStruct, ) try: import pyproj except ModuleNotFoundError: pass logger = logging.getLogger(__name__) # GeoTIFF Configuration GeoKeys """ GeoTIFF defined CS Model Type Codes: ModelTypeProjected = 1 /* Projection Coordinate System */ ModelTypeGeographic = 2 /* Geographic latitude-longitude System */ ModelTypeGeocentric = 3 /* Geocentric (X,Y,Z) Coordinate System */ Notes: 1. ModelTypeGeographic and ModelTypeProjected correspond to the FGDC metadata Geographic and Planar-Projected coordinate system types. http://geotiff.maptools.org/spec/geotiff6.html#6.3.1.1 """ ModelTypeProjected = 1 ModelTypeGeographic = 2 GTModelTypeGeoKey = GeoKeyEntryStruct( id=1024, tiff_tag_location=0, count=1, ) """ Values: 0 => Undefined 1 => RasterPixelIsArea 2 => RasterPixelIsPoint http://geotiff.maptools.org/spec/geotiff6.html#6.3.1.2 """ GTRasterTypeGeoKey = GeoKeyEntryStruct( id=1025, tiff_tag_location=0, count=1, ) """ 'ASCII reference to published documentation on the overall configuration of this GeoTIFF file.' """ GTCitationGeoKey = GeoKeyEntryStruct( id=1026, tiff_tag_location=GeoAsciiParamsVlr.official_record_ids()[0], ) # Geographic CS Parameter GeoKeys GeographicTypeGeoKey = GeoKeyEntryStruct( id=2048, tiff_tag_location=0, count=1, ) """ General citation and reference for all Geographic CS parameters. """ GeogCitationGeoKey = GeoKeyEntryStruct( id=2049, tiff_tag_location=GeoAsciiParamsVlr.official_record_ids()[0], ) # Projected CS Parameter GeoKeys ProjectedCSTypeGeoKey = GeoKeyEntryStruct( id=3072, tiff_tag_location=0, count=1, ) """ 'ASCII reference to published documentation on the Projected Coordinate System particularly if this is a "user-defined" PCS' """ PCSCitationGeoKey = GeoKeyEntryStruct( id=3073, tiff_tag_location=GeoAsciiParamsVlr.official_record_ids()[0], ) # Geographic CS Parameter GeoKeys def create_geotiff_projection_vlrs( crs: "pyproj.CRS", ) -> Tuple[GeoKeyDirectoryVlr, GeoAsciiParamsVlr]: # 'Cookbook' from the geotiff spec # http://geotiff.maptools.org/spec/geotiff2.7.html#2.7 if crs.is_projected: model_key = copy(GTModelTypeGeoKey) model_key.value_offset = ModelTypeProjected epsg_code = crs.to_epsg() if epsg_code is None: raise RuntimeError("Projected CRS without epsg is not supported") projected_crs_key = copy(ProjectedCSTypeGeoKey) projected_crs_key.value_offset = epsg_code # Citation Keys for which data is stored in the Ascii Param pcs_citation = crs.name.encode("ascii") ascii_params = b"|".join([pcs_citation]) pcs_citation_key = copy(PCSCitationGeoKey) pcs_citation_key.value_offset = 0 pcs_citation_key.count = len(pcs_citation) keys = [model_key, projected_crs_key, pcs_citation_key] geo_key_vlr = GeoKeyDirectoryVlr() geo_key_vlr.geo_keys_header.number_of_keys = len(keys) geo_key_vlr.geo_keys = keys ascii_vlr = GeoAsciiParamsVlr() ascii_vlr.strings = [ascii_params.decode("ascii")] return geo_key_vlr, ascii_vlr if crs.is_geographic or crs.is_geocentric: model_key = copy(GTModelTypeGeoKey) model_key.value_offset = ModelTypeGeographic epsg_code = crs.to_epsg() if epsg_code is None: raise RuntimeError("Geographic CRS without epsg is not supported") geographic_crs_key = copy(GeographicTypeGeoKey) geographic_crs_key.value_offset = epsg_code geodetic_citation = crs.geodetic_crs.name.encode("ascii") ascii_params = b"|".join([geodetic_citation]) geodetic_citation_key = copy(GeogCitationGeoKey) geodetic_citation_key.value_offset = 0 geodetic_citation_key.count = len(geodetic_citation) keys = [model_key, geographic_crs_key, geodetic_citation_key] geo_key_vlr = GeoKeyDirectoryVlr() geo_key_vlr.geo_keys_header.number_of_keys = len(keys) geo_key_vlr.geo_keys = keys ascii_vlr = GeoAsciiParamsVlr() ascii_vlr.strings = [ascii_params.decode("ascii")] return geo_key_vlr, ascii_vlr else: raise RuntimeError(f"CRS of type {crs.type_name} is not supported") GeoTiffKey = namedtuple("GeoTiffKey", ("id", "value")) def parse_geo_tiff_keys_from_vlrs(vlr_list: vlrlist.VLRList) -> List[GeoTiffKey]: """Gets the 3 GeoTiff vlrs from the vlr_list and parse them into a nicer structure Parameters ---------- vlr_list: laspy.vrls.vlrslist.VLRList list of vlrs from a las file Raises ------ IndexError if any of the needed GeoTiffVLR is not found in the list Returns ------- List of GeoTiff keys parsed from the VLRs """ warnings.warn( f"parse_geo_tiff_keys_from_vlrs is deprecated, if you want the CRS/SRS from " "GeoTiff's VLR install pyproj and use `LasHead.parse_crs()`", DeprecationWarning, ) geo_key_dir = vlr_list.get_by_id( GeoKeyDirectoryVlr.official_user_id(), GeoKeyDirectoryVlr.official_record_ids() )[0] try: geo_doubles = vlr_list.get_by_id( GeoDoubleParamsVlr.official_user_id(), GeoDoubleParamsVlr.official_record_ids(), )[0] except IndexError: geo_doubles = None try: geo_ascii = vlr_list.get_by_id( GeoAsciiParamsVlr.official_user_id(), GeoAsciiParamsVlr.official_record_ids(), )[0] except IndexError: geo_ascii = None return parse_geo_tiff(geo_key_dir, geo_doubles, geo_ascii) def parse_geo_tiff( key_dir_vlr: GeoKeyDirectoryVlr, double_vlr: Optional[GeoDoubleParamsVlr], ascii_vlr: Optional[GeoAsciiParamsVlr], ) -> List[GeoTiffKey]: warnings.warn( f"parse_geo_tiff_keys_from_vlrs is deprecated, if you want the CRS/SRS from " "GeoTiff's VLR install pyproj and use `LasHead.parse_crs()`", DeprecationWarning, ) """Parses the GeoTiff VLRs information into nicer structs""" geotiff_keys = [] for k in key_dir_vlr.geo_keys: if k.tiff_tag_location == 0: value = k.value_offset elif k.tiff_tag_location == 34736: if double_vlr is None: raise RuntimeError( "Geotiff tag location points to GeoDoubleParams, " "but it does not exists" ) value = double_vlr.doubles[k.value_offset] elif k.tiff_tag_location == 34737: if ascii_vlr is None: raise RuntimeError( "Geotiff tag location points to GeoAsciiParams, " "but it does not exists" ) value = ascii_vlr.string(k.value_offset, k.count) else: logger.warning( "GeoTiffKey with unknown tiff tag location ({})".format( k.tiff_tag_location ) ) continue geotiff_keys.append(GeoTiffKey(k.id, value)) return geotiff_keys laspy-laspy-a32c7aa/laspy/vlrs/known.py000066400000000000000000000527401463461040100203060ustar00rootroot00000000000000"""The definition of the VLR Header, VLR, the KnownVLRs are in this module. A KnownVLR is a VLR for which we know how to parse its record_data """ import abc import ctypes import logging import struct from copy import copy from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar import numpy as np from ..extradims import get_dtype_for_extra_dim from ..point.format import ExtraBytesParams from ..utils import encode_to_null_terminated from .vlr import VLR, BaseVLR abstractmethod = abc.abstractmethod logger = logging.getLogger(__name__) NULL_BYTE = b"\0" GeoKeyDirectoryType = TypeVar("GeoKeyDirectoryType", bound="GeoKeyDirectoryVlr") GeoAsciiParamsType = TypeVar("GeoAsciiParamsType", bound="GeoAsciiParamsVlr") class IKnownVLR(abc.ABC): """Interface that any KnownVLR must implement. A KnownVLR is a VLR for which we know how to parse its record_data Implementing this interfaces allows to automatically call the right parser for the right VLR when reading them. """ @staticmethod @abstractmethod def official_user_id() -> str: """Shall return the official user_id as described in the documentation""" pass @staticmethod @abstractmethod def official_record_ids() -> Tuple[int, ...]: """Shall return the official record_id for the VLR .. note:: Even if the VLR has one record_id, the return type must be a tuple Returns ------- tuple of int The record_ids this VLR type can have """ pass @abstractmethod def record_data_bytes(self) -> bytes: """Shall return the bytes corresponding to the record_data part of the VLR as they should be written in the file. Returns ------- bytes The bytes of the vlr's record_data """ pass @abstractmethod def parse_record_data(self, record_data: bytes) -> None: """Shall parse the given record_data into a user-friendlier structure Parameters ---------- record_data: bytes The record_data bytes read from the file """ pass class BaseKnownVLR(BaseVLR, IKnownVLR, abc.ABC): """Base Class to factorize common code between the different type of Known VLRs""" def __init__(self, record_id=None, description=""): super().__init__( self.official_user_id(), self.official_record_ids()[0] if record_id is None else record_id, description, ) @classmethod def from_raw(cls, raw: VLR): know_vlr = cls() know_vlr._description = raw.description know_vlr.parse_record_data(raw.record_data) return know_vlr class ClassificationLookupVlr(BaseKnownVLR): """This vlr maps class numbers to short descriptions / names >>> lookup = ClassificationLookupVlr() >>> lookup[0] = "never_classified" >>> lookup[2] = "ground" >>> lookup[0] 'never_classified' """ _lookup_struct = struct.Struct(" None: for class_id, desc in struct.iter_unpack(" bytes: def lookup_converter(lookup_dict): for class_id, description in lookup_dict.items(): description_bytes = description.encode("ascii") if len(description_bytes) > 15: raise ValueError( "decription ({}) is to long ({} bytes), it must not exceed 15 bytes when encoded".format( description, len(description_bytes) ) ) yield class_id, description_bytes return b"".join( self._lookup_struct.pack(class_id, desc) for class_id, desc in lookup_converter(self.lookups) ) def __getitem__(self, class_id: int) -> str: return self.lookups[class_id] def __setitem__(self, class_id: int, description: str): if class_id not in range(256): raise ValueError("Class id {} is not in range [0, 255]".format(class_id)) self.lookups[class_id] = description @staticmethod def official_user_id() -> str: return "LASF_Spec" @staticmethod def official_record_ids() -> Tuple[int, ...]: return (0,) class LasZipVlr(BaseKnownVLR): """Contains the information needed by laszip (or any other laz backend) to compress the point records. """ def __init__(self, data: bytes) -> None: super().__init__(description="http://laszip.org") self.record_data = data def parse_record_data(self, record_data: bytes) -> None: # Only laz backends know how to parse this pass def record_data_bytes(self) -> bytes: return self.record_data @staticmethod def official_user_id() -> str: return "laszip encoded" @staticmethod def official_record_ids() -> Tuple[int, ...]: return (22204,) @classmethod def from_raw(cls, raw_vlr): return cls(raw_vlr.record_data) class ExtraBytesStruct(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ ("reserved", ctypes.c_uint8 * 2), ("data_type", ctypes.c_uint8), ("options", ctypes.c_uint8), ("name", ctypes.c_char * 32), ("unused", ctypes.c_uint8 * 4), ("_no_data", (ctypes.c_byte * 8) * 3), ("_min", (ctypes.c_byte * 8) * 3), ("_max", (ctypes.c_byte * 8) * 3), ("_scale", ctypes.c_double * 3), ("_offset", ctypes.c_double * 3), ("description", ctypes.c_char * 32), ] _uint64t_struct = struct.Struct(" np.ndarray: return np.frombuffer(getattr(self, name), dtype=self.dtype()) @property def no_data(self): return self._parse_special_property("_no_data") @property def min(self): return self._parse_special_property("_min") @property def max(self): return self._parse_special_property("_max") @property def offset(self) -> Optional[Any]: if self.options & self.OFFSET_BIT_MASK != 0: return self._offset return None @offset.setter def offset(self, value): if value is None: self.options &= ~self.OFFSET_BIT_MASK else: num_elements = self.num_elements() self._offset[:num_elements] = value[:num_elements] self.options |= self.OFFSET_BIT_MASK @property def scale(self): if self.options & self.SCALE_BIT_MASK != 0: return self._scale return None @scale.setter def scale(self, value): if value is None: self.options &= ~self.SCALE_BIT_MASK else: num_elements = self.num_elements() self._scale[:num_elements] = value[:num_elements] self.options |= self.SCALE_BIT_MASK def format_name(self): return self.name.rstrip(NULL_BYTE).decode() def dtype(self) -> np.dtype: if self.data_type == 0: if self.options == 1: # numpy says doing '1u1' is deprecated return np.dtype("u1") return np.dtype(f"{self.options}u1") return get_dtype_for_extra_dim(self.data_type) def num_elements(self) -> int: if self.data_type == 0: return self.options elif self.data_type <= 10: return 1 elif self.data_type <= 20: return 2 else: return 3 @staticmethod def size(): return ctypes.sizeof(ExtraBytesStruct) def __repr__(self): return "".format( self.format_name(), self.data_type, self.description ) class ExtraBytesVlr(BaseKnownVLR): def __init__(self): super().__init__(description="Extra Bytes Record") self.extra_bytes_structs: List[ExtraBytesStruct] = [] def parse_record_data(self, data): if (len(data) % ExtraBytesStruct.size()) != 0: raise ValueError( "Data length of ExtraBytes vlr must be a multiple of {}".format( ExtraBytesStruct.size() ) ) num_extra_bytes_structs = len(data) // ExtraBytesStruct.size() self.extra_bytes_structs = [None] * num_extra_bytes_structs for i in range(num_extra_bytes_structs): self.extra_bytes_structs[i] = ExtraBytesStruct.from_buffer_copy( data[ExtraBytesStruct.size() * i : ExtraBytesStruct.size() * (i + 1)] ) def record_data_bytes(self): return b"".join( bytes(extra_struct) for extra_struct in self.extra_bytes_structs ) def type_of_extra_dims(self) -> List[ExtraBytesParams]: dim_info_list: List[ExtraBytesParams] = [] for eb_struct in self.extra_bytes_structs: num_elements = eb_struct.num_elements() scales = eb_struct.scale offsets = eb_struct.offset if scales is not None or offsets is not None: # If one of scales or offsets is defined, # we expect the other to be as well # so set default scales or offsets if offsets is None: offsets = np.zeros(num_elements, np.float64) else: offsets = np.array(offsets[:num_elements]) if scales is None: scales = np.ones(num_elements, np.float64) else: scales = np.array(scales[:num_elements]) dim_info_list.append( ExtraBytesParams( eb_struct.format_name(), eb_struct.dtype(), description=eb_struct.description.rstrip(NULL_BYTE).decode(), scales=scales, offsets=offsets, ) ) return dim_info_list def __repr__(self): return "".format( len(self.extra_bytes_structs) ) @staticmethod def official_user_id(): return "LASF_Spec" @staticmethod def official_record_ids(): return (4,) class WaveformPacketStruct(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ ("bits_per_sample", ctypes.c_ubyte), ("waveform_compression_type", ctypes.c_ubyte), ("number_of_samples", ctypes.c_uint32), ("temporal_sample_spacing", ctypes.c_uint32), ("digitizer_gain", ctypes.c_double), ("digitizer_offset", ctypes.c_double), ] @staticmethod def size(): return ctypes.sizeof(WaveformPacketStruct) class WaveformPacketVlr(BaseKnownVLR): def __init__(self, record_id, description=""): super().__init__(record_id=record_id, description=description) self.parsed_record = None def parse_record_data(self, record_data): self.parsed_record = WaveformPacketStruct.from_buffer_copy(record_data) def record_data_bytes(self): return bytes(self.parsed_record) @staticmethod def official_record_ids(): return range(100, 356) @staticmethod def official_user_id(): return "LASF_Spec" @classmethod def from_raw(cls, raw_vlr): vlr = cls(raw_vlr.record_id, description=raw_vlr.description) vlr._description = raw_vlr.description vlr.parse_record_data(raw_vlr.record_data) return vlr class GeoKeyEntryStruct(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ # Id of the key # # Ids are broken down in sub domains: # [ 0, 1023] Reserved # [ 1024, 2047] GeoTIFF Configuration Keys # [ 2048, 3071] Geographic/Geocentric CS Parameter Keys # [ 3072, 4095] Projected CS Parameter Keys # [ 4096, 5119] Vertical CS Parameter Keys # [ 5120, 32767] Reserved # [32768, 65535] Private use ("id", ctypes.c_uint16), # Where to find the data for the key: # 0 => The _actual_ value is stored directly in the "value_offset" member # Otherwise, the tiff tag location is the record_id of the VLR in which the value is stored. # In the case of LAS files the 2 possible values are `34736`, `34737`. ("tiff_tag_location", ctypes.c_uint16), # Number of values in the key. # Implied to be `1` if `tiff_tag_location` is 0 ("count", ctypes.c_uint16), # Depending on `tiff_tag_location`, this contains either # the value itself _or_ the offset in the record_data of the containing VLR ("value_offset", ctypes.c_uint16), ] @staticmethod def size(): return ctypes.sizeof(GeoKeysHeaderStructs) def __repr__(self): return "".format( self.id, self.tiff_tag_location, self.count, self.value_offset ) class GeoKeysHeaderStructs(ctypes.LittleEndianStructure): _pack_ = 1 _fields_ = [ ("key_directory_version", ctypes.c_uint16), ("key_revision", ctypes.c_uint16), ("minor_revision", ctypes.c_uint16), ("number_of_keys", ctypes.c_uint16), ] def __init__(self): super().__init__( key_directory_version=1, key_revision=1, minor_revision=0, number_of_keys=0 ) @staticmethod def size(): return ctypes.sizeof(GeoKeysHeaderStructs) def __repr__(self): return "".format( self.key_directory_version, self.key_revision, self.minor_revision, self.number_of_keys, ) class GeoKeyDirectoryVlr(BaseKnownVLR): def __init__(self): super().__init__(description="GeoTIFF GeoKeyDirectoryTag") self.geo_keys_header = GeoKeysHeaderStructs() self.geo_keys = [GeoKeyEntryStruct()] def parse_record_data(self, record_data): record_data = bytearray(record_data) header_data = record_data[: ctypes.sizeof(GeoKeysHeaderStructs)] self.geo_keys_header = GeoKeysHeaderStructs.from_buffer(header_data) self.geo_keys = [] keys_data = record_data[GeoKeysHeaderStructs.size() :] num_keys = ( len(record_data[GeoKeysHeaderStructs.size() :]) // GeoKeyEntryStruct.size() ) if num_keys != self.geo_keys_header.number_of_keys: self.geo_keys_header.number_of_keys = num_keys for i in range(self.geo_keys_header.number_of_keys): data = keys_data[ (i * GeoKeyEntryStruct.size()) : (i + 1) * GeoKeyEntryStruct.size() ] self.geo_keys.append(GeoKeyEntryStruct.from_buffer(data)) def record_data_bytes(self): b = bytes(self.geo_keys_header) b += b"".join(map(bytes, self.geo_keys)) return b def parse_crs(self): import pyproj # TODO import is done here to avoid cyclic import, # this should probably be fixed from .geotiff import GeographicTypeGeoKey, ProjectedCSTypeGeoKey geographic_cs = None projected_cs = None for key in self.geo_keys: if key.id == ProjectedCSTypeGeoKey.id: if 1024 <= key.value_offset <= 32766: # http://docs.opengeospatial.org/is/19-008r4/19-008r4.html#_requirements_class_projectedcrsgeokey # "ProjectedCRSGeoKey values in the range 1024-32766 SHALL be EPSG Projected CRS Codes" projected_cs = pyproj.CRS.from_epsg(key.value_offset) elif key.id == GeographicTypeGeoKey.id: # http://docs.opengeospatial.org/is/19-008r4/19-008r4.html#_requirements_class_geodeticcrsgeokey # GeodeticCRSGeoKey values in the range 1024-32766 SHALL be EPSG geographic 2D or geocentric CRS codes if 1024 <= key.value_offset <= 32766: geographic_cs = pyproj.CRS.from_epsg(key.value_offset) # Projected Coordinate Systems take precedence since, # if they are present, the Geographic CS is probably # redundant and the positioning information in the LAS # file is projected. return projected_cs or geographic_cs def __repr__(self): return "<{}({} geo_keys)>".format(self.__class__.__name__, len(self.geo_keys)) @staticmethod def official_user_id(): return "LASF_Projection" @staticmethod def official_record_ids(): return (34735,) class GeoDoubleParamsVlr(BaseKnownVLR): """ Stores all of the `double` valued GeoKeys. """ def __init__(self): super().__init__(description="GeoTIFF GeoDoubleParamsTag") self.doubles = [] def parse_record_data(self, record_data): sizeof_double = ctypes.sizeof(ctypes.c_double) if len(record_data) % sizeof_double != 0: raise ValueError( "GeoDoubleParams record data length () is not a multiple of sizeof(double) ()".format( len(record_data), sizeof_double ) ) record_data = bytearray(record_data) num_doubles = len(record_data) // sizeof_double for i in range(num_doubles): b = record_data[i * sizeof_double : (i + 1) * sizeof_double] self.doubles.append(ctypes.c_double.from_buffer(b)) def record_data_bytes(self): return b"".join(map(bytes, self.doubles)) def __repr__(self): return "".format(self.doubles) @staticmethod def official_user_id(): return "LASF_Projection" @staticmethod def official_record_ids(): return (34736,) class GeoAsciiParamsVlr(BaseKnownVLR): """ Stores all of the `ASCII` valued GeoKeys. From GeoTIFF's spec: To avoid problems with naive tiff dump programs the separator between geokeys is not the null-terminator `\0` but `|`. """ def __init__(self): super().__init__(description="GeoTIFF GeoAsciiParamsTag") self.strings = [] def parse_record_data(self, record_data): self.strings = [s.decode("ascii") for s in record_data.split(NULL_BYTE)] self.rd = record_data def record_data_bytes(self): return NULL_BYTE.join(s.encode("ascii") for s in self.strings) def __repr__(self): return "".format(self.strings) @staticmethod def official_user_id(): return "LASF_Projection" @staticmethod def official_record_ids(): return (34737,) class WktMathTransformVlr(BaseKnownVLR): """ From the Spec: Note that the math transform WKT record is added for completeness, and a coordinate system WKT may or may not require a math transform WKT record """ def __init__(self): super().__init__(description="") self.string = "" def _encode_string(self): return encode_to_null_terminated(self.string, codec="utf-8") def parse_record_data(self, record_data): self.string = record_data.decode("utf-8").rstrip("\0") def record_data_bytes(self): return self._encode_string() @staticmethod def official_user_id(): return "LASF_Projection" @staticmethod def official_record_ids(): return (2111,) class WktCoordinateSystemVlr(BaseKnownVLR): """Replaces Coordinates Reference System for new las files (point fmt >= 5) "LAS is not using the “ESRI WKT” """ def __init__(self, wkt_string=""): super().__init__(description="OGC Transformation Record") self.string = wkt_string def _encode_string(self): return encode_to_null_terminated(self.string, codec="utf-8") def parse_record_data(self, record_data): self.string = record_data.decode("utf-8").rstrip("\0") def record_data_bytes(self): return self._encode_string() def parse_crs(self): import pyproj if not self.string: return None return pyproj.CRS.from_wkt(self.string) @staticmethod def official_user_id(): return "LASF_Projection" @staticmethod def official_record_ids(): return (2112,) def vlr_factory(vlr: VLR): """Given a vlr tries to find its corresponding KnownVLR class that can parse its data. If no KnownVLR implementation is found, returns the input vlr unchanged """ user_id = vlr.user_id known_vlrs = BaseKnownVLR.__subclasses__() for known_vlr in known_vlrs: if ( known_vlr.official_user_id() == user_id and vlr.record_id in known_vlr.official_record_ids() ): try: return known_vlr.from_raw(vlr) except Exception as err: logger.warning(f"Failed to parse {known_vlr}: {err}") return vlr return vlr laspy-laspy-a32c7aa/laspy/vlrs/vlr.py000066400000000000000000000042101463461040100177420ustar00rootroot00000000000000from abc import ABC, abstractmethod from typing import Union class IVLR(ABC): @property @abstractmethod def user_id(self) -> str: ... @property @abstractmethod def record_id(self) -> int: ... @property @abstractmethod def description(self) -> Union[str, bytes]: ... @abstractmethod def record_data_bytes(self) -> bytes: ... class BaseVLR(IVLR, ABC): def __init__(self, user_id, record_id, description=""): self._user_id: str = user_id self._record_id: int = record_id self._description: Union[str, bytes] = description @property def user_id(self) -> str: """ The user id """ return self._user_id @property def record_id(self) -> int: """ The record id """ return self._record_id @property def description(self) -> Union[str, bytes]: """ The description, cannot exceed 32 bytes """ return self._description class VLR(BaseVLR): """ >>> import laspy >>> my_vlr = laspy.VLR( ... user_id="MyUserId", ... record_id=0, ... description="An Example VLR", ... record_data=int(42).to_bytes(8, byteorder='little'), ... ) >>> my_vlr.user_id 'MyUserId' >>> int.from_bytes(my_vlr.record_data, byteorder='little') 42 """ def __init__(self, user_id, record_id, description="", record_data=b""): super().__init__(user_id, record_id, description=description) #: The record_data as bytes, length cannot exceed 65_535 self.record_data: bytes = record_data def record_data_bytes(self) -> bytes: return self.record_data def __eq__(self, other): return ( self.record_id == other.record_id and self.user_id == other.user_id and self.description == other.description and self.record_data == other.record_data ) def __repr__(self): return "<{}(user_id: '{}', record_id: '{}', data len: {})>".format( self.__class__.__name__, self.user_id, self.record_id, len(self.record_data) ) laspy-laspy-a32c7aa/laspy/vlrs/vlrlist.py000066400000000000000000000156451463461040100206540ustar00rootroot00000000000000import logging from typing import BinaryIO, List import numpy as np from ..utils import read_string, write_as_c_string from .known import IKnownVLR, vlr_factory from .vlr import VLR logger = logging.getLogger(__name__) RESERVED_LEN = 2 USER_ID_LEN = 16 DESCRIPTION_LEN = 32 class VLRList(list): """Class responsible for managing the vlrs""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def index(self, value, start: int = 0, stop: int = None) -> int: if stop is None: stop = len(self) if isinstance(value, str): for i, vlr in enumerate(self[start:stop]): if vlr.__class__.__name__ == value: return i + start raise ValueError(f"VLR '{value}' could not be found in the list") else: return super().index(value, start, stop) def get_by_id(self, user_id="", record_ids=(None,)): """Function to get vlrs by user_id and/or record_ids. Always returns a list even if only one vlr matches the user_id and record_id >>> import laspy >>> from laspy.vlrs.known import ExtraBytesVlr, WktCoordinateSystemVlr >>> las = laspy.read("tests/data/extrabytes.las") >>> las.vlrs [] >>> las.vlrs.get(WktCoordinateSystemVlr.official_user_id()) [] >>> las.vlrs.get(WktCoordinateSystemVlr.official_user_id())[0] Traceback (most recent call last): IndexError: list index out of range >>> las.vlrs.get_by_id(ExtraBytesVlr.official_user_id()) [] >>> las.vlrs.get_by_id(ExtraBytesVlr.official_user_id())[0] Parameters ---------- user_id: str, optional the user id record_ids: iterable of int, optional THe record ids of the vlr(s) you wish to get Returns ------- :py:class:`list` a list of vlrs matching the user_id and records_ids """ return [ vlr for vlr in self if (user_id == "" or vlr.user_id == user_id) and (record_ids == (None,) or vlr.record_id in record_ids) ] def get(self, vlr_type: str) -> List[IKnownVLR]: """Returns the list of vlrs of the requested type Always returns a list even if there is only one VLR of type vlr_type. >>> import laspy >>> las = laspy.read("tests/data/extrabytes.las") >>> las.vlrs [] >>> las.vlrs.get("WktCoordinateSystemVlr") [] >>> las.vlrs.get("WktCoordinateSystemVlr")[0] Traceback (most recent call last): IndexError: list index out of range >>> las.vlrs.get('ExtraBytesVlr') [] >>> las.vlrs.get('ExtraBytesVlr')[0] Parameters ---------- vlr_type: str the class name of the vlr Returns ------- :py:class:`list` a List of vlrs matching the user_id and records_ids """ return [v for v in self if v.__class__.__name__ == vlr_type] def extract(self, vlr_type: str) -> List[IKnownVLR]: """Returns the list of vlrs of the requested type The difference with get is that the returned vlrs will be removed from the list Parameters ---------- vlr_type: str the class name of the vlr Returns ------- list a List of vlrs matching the user_id and records_ids """ kept_vlrs, extracted_vlrs = [], [] for vlr in self: if vlr.__class__.__name__ == vlr_type: extracted_vlrs.append(vlr) else: kept_vlrs.append(vlr) self.clear() self.extend(kept_vlrs) return extracted_vlrs def __repr__(self): return "[{}]".format(", ".join(repr(vlr) for vlr in self)) @classmethod def read_from( cls, data_stream: BinaryIO, num_to_read: int, extended: bool = False ) -> "VLRList": """Reads vlrs and parse them if possible from the stream Parameters ---------- data_stream : io.BytesIO stream to read from num_to_read : int number of vlrs to be read extended : bool whether the vlrs are regular vlr or extended vlr Returns ------- laspy.vlrs.vlrlist.VLRList List of vlrs """ vlrlist = cls() for _ in range(num_to_read): data_stream.read(RESERVED_LEN) user_id = data_stream.read(USER_ID_LEN).split(b"\0")[0].decode() record_id = int.from_bytes( data_stream.read(2), byteorder="little", signed=False ) if extended: record_data_len = int.from_bytes( data_stream.read(8), byteorder="little", signed=False ) else: record_data_len = int.from_bytes( data_stream.read(2), byteorder="little", signed=False ) description = read_string(data_stream, DESCRIPTION_LEN) record_data_bytes = data_stream.read(record_data_len) vlr = VLR(user_id, record_id, description, record_data_bytes) vlrlist.append(vlr_factory(vlr)) return vlrlist def write_to( self, stream: BinaryIO, as_extended: bool = False, encoding_errors: str = "strict", ) -> int: bytes_written = 0 for vlr in self: record_data = vlr.record_data_bytes() stream.write(b"\0\0") write_as_c_string(stream, vlr.user_id, USER_ID_LEN) stream.write(vlr.record_id.to_bytes(2, byteorder="little", signed=False)) if as_extended: stream.write( len(record_data).to_bytes(8, byteorder="little", signed=False) ) else: max_length = np.iinfo("uint16").max if len(record_data) > max_length: raise ValueError( f"VLR record_date length ({len(record_data)}) exceeds the maximum length ({max_length})" ) stream.write( len(record_data).to_bytes(2, byteorder="little", signed=False) ) write_as_c_string( stream, vlr.description, DESCRIPTION_LEN, encoding_errors=encoding_errors, ) stream.write(record_data) bytes_written += 54 if not as_extended else 60 bytes_written += len(record_data) return bytes_written laspy-laspy-a32c7aa/noxfile.py000066400000000000000000000015651463461040100164770ustar00rootroot00000000000000import nox @nox.session(python=["3.8", "3.9", "3.10", "3.11"]) @nox.parametrize("laz_backend", [None, "lazrs", "laszip"]) def tests(session, laz_backend): session.install("pytest") if laz_backend is None: session.install(".") else: session.install(f".[{laz_backend}]") session.run("pytest") @nox.session @nox.parametrize( "optional_dependencies", [None, "laszip", "lazrs", "pyproj", "requests,lazrs", "cli,lazrs"], ) def coverage(session, optional_dependencies): if optional_dependencies is None: session.install(".[dev]") else: session.install(f".[dev,{optional_dependencies}]") optional_dependencies = str(optional_dependencies) session.run( "coverage", "run", f"--context={optional_dependencies}", f"--data-file=.coverage.{optional_dependencies.replace(',', '.')}", ) laspy-laspy-a32c7aa/pyproject.toml000066400000000000000000000001741463461040100173700ustar00rootroot00000000000000[build-system] requires = [ "wheel", "setuptools" ] build-backend = "setuptools.build_meta" [tool.isort] profile = "black" laspy-laspy-a32c7aa/pytest.ini000066400000000000000000000002161463461040100165020ustar00rootroot00000000000000[pytest] addopts = --ignore docs/conf.py --ignore laspy/cli --doctest-modules --doctest-glob='*.rst' testpaths = tests laspy docs laspy-laspy-a32c7aa/setup.py000066400000000000000000000035711463461040100161720ustar00rootroot00000000000000from setuptools import find_packages, setup with open("README.md") as f: readme = f.read() __version__ = None # Get __version without importing with open("laspy/__init__.py", "r") as fp: # get and exec just the line which looks like "__version__ = '0.9.4'" exec(next(line for line in fp if "__version__" in line)) setup( name="laspy", version=__version__, description="Native Python ASPRS LAS read/write library", license="BSD", keywords="gis lidar las", author="Grant Brown, Thomas Montaigu", author_email="grant.brown73@gmail.com, thomas.montaigu@laposte.net", url="https://github.com/laspy/laspy", long_description=readme, long_description_content_type="text/markdown", packages=find_packages(exclude=("tests", "tests.cli")), python_requires=">=3.8", install_requires=["numpy"], extras_require={ "dev": [ "pytest", "coverage", "sphinx", "sphinx-rtd-theme", "nox", "black==22.3.0", "pytest-benchmark", "m2r2", "rangehttpserver", "isort==5.11.5", ], "lazrs": ["lazrs>=0.6.0, < 0.7.0"], "laszip": ["laszip >= 0.2.1, < 0.3.0"], "pyproj": ["pyproj"], "requests": ["requests"], "cli": [ "typer[all] >= 0.8.0 ", "rich >= 10.11.0", ], }, entry_points={ "console_scripts": ["laspy=laspy.cli.main:main"], }, include_package_data=True, zip_safe=False, classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Scientific/Engineering :: GIS", ], ) laspy-laspy-a32c7aa/tests/000077500000000000000000000000001463461040100156145ustar00rootroot00000000000000laspy-laspy-a32c7aa/tests/__init__.py000066400000000000000000000000001463461040100177130ustar00rootroot00000000000000laspy-laspy-a32c7aa/tests/cli/000077500000000000000000000000001463461040100163635ustar00rootroot00000000000000laspy-laspy-a32c7aa/tests/cli/__init__.py000066400000000000000000000003411463461040100204720ustar00rootroot00000000000000import pytest def skip_if_cli_deps_are_not_installed(): try: from laspy.cli.core import app except ModuleNotFoundError: pytest.skip("skipping cli test (deps not installed)", allow_module_level=True) laspy-laspy-a32c7aa/tests/cli/test_compress_decompress.py000066400000000000000000000063101463461040100240530ustar00rootroot00000000000000import numpy as np import pytest import laspy from ..test_common import skip_if_no_laz_backend from . import skip_if_cli_deps_are_not_installed skip_if_cli_deps_are_not_installed() pytestmark = skip_if_no_laz_backend from typer.testing import CliRunner runner = CliRunner() from laspy.cli.core import app def test_cli_compress(tmp_path): input_path = "tests/data/simple.las" output_path = tmp_path / "simple.laz" result = runner.invoke( app, [ "compress", input_path, "--output-path", str(output_path), ], ) assert result.exit_code == 0, "{}".format(result.stdout) with laspy.open(output_path) as f: assert f.header.are_points_compressed is True original_las = laspy.read(input_path) compressed_las = laspy.read(output_path) assert original_las.point_format == compressed_las.point_format assert original_las.vlrs == compressed_las.vlrs assert np.all(original_las.points == compressed_las.points) def test_cli_compress_cannot_overwrite(tmp_path): input_path = "tests/data/simple.las" output_path = tmp_path / "simple.laz" result = runner.invoke( app, [ "compress", input_path, "--output-path", input_path, ], ) assert result.exit_code != 0, "{}".format(result.stdout) def test_cli_compress_non_existing_file(tmp_path): input_path = "tests/data/i-do-not-exist.las" output_path = tmp_path / "i-do-not-exist.laz" result = runner.invoke( app, [ "compress", input_path, "--output-path", str(output_path), ], ) assert result.exit_code != 0, "{}".format(result.stdout) def test_cli_decompress(tmp_path): input_path = "tests/data/simple.laz" output_path = tmp_path / "simple.las" result = runner.invoke( app, [ "decompress", input_path, "--output-path", str(output_path), ], ) assert result.exit_code == 0, "{}".format(result.stdout) with laspy.open(output_path) as f: assert f.header.are_points_compressed is False original_las = laspy.read(input_path) compressed_las = laspy.read(output_path) assert original_las.point_format == compressed_las.point_format assert original_las.vlrs == compressed_las.vlrs assert np.all(original_las.points == compressed_las.points) def test_cli_decompress_cannot_overwrite(tmp_path): input_path = "tests/data/simple.laz" output_path = tmp_path / "simple.las" result = runner.invoke( app, [ "decompress", input_path, "--output-path", input_path, ], ) assert result.exit_code != 0, "{}".format(result.stdout) def test_cli_decompress_non_existing_file(tmp_path): input_path = "tests/data/i-do-not-exist.laz" output_path = tmp_path / "i-do-not-exist.las" result = runner.invoke( app, [ "decompress", input_path, "--output-path", str(output_path), ], ) assert result.exit_code != 0, "{}".format(result.stdout) laspy-laspy-a32c7aa/tests/cli/test_filter.py000066400000000000000000000314561463461040100212720ustar00rootroot00000000000000import numpy as np import pytest import laspy from . import skip_if_cli_deps_are_not_installed skip_if_cli_deps_are_not_installed() from typer.testing import CliRunner from laspy.cli.core import ( BinaryFilteringExpression, Comparator, Condition, FilteringAction, FilteringExpression, FilteringExpressionKind, NegatedFilteringExpression, Token, app, parse_float_or_int, parse_list_of_numbers, tokenize, ) runner = CliRunner() def test_parse_float_or_number(): value = parse_float_or_int("10") assert type(value) == int assert value == 10 value = parse_float_or_int(" 17 ") assert type(value) == int assert value == 17 value = parse_float_or_int("0.3") assert type(value) == float assert value == 0.3 value = parse_float_or_int(" 0.889 ") assert type(value) == float assert value == 0.889 with pytest.raises(ValueError): _ = parse_float_or_int("238a") def test_parse_list_of_numbers(): value = parse_list_of_numbers("[1, 2, 3]") assert value == [1, 2, 3] value = parse_list_of_numbers("(4, 5, 6)") assert value == [4, 5, 6] with pytest.raises(ValueError): _ = parse_list_of_numbers("238") with pytest.raises(ValueError): _ = parse_list_of_numbers("[238, 1") with pytest.raises(ValueError): _ = parse_list_of_numbers("38, 1]") def test_tokenize(): tokens = tokenize("not classification == 2") Kind = Token.Kind expected = [ Token(Kind.Not, "not"), Token(Kind.LiteralStr, "classification"), Token(Kind.EqEq, "=="), Token(Kind.LiteralStr, "2"), ] assert tokens == expected def test_parse_valid_filter_action(): action = FilteringAction.parse_string("intensity >= 128") expected = FilteringAction("intensity", Comparator.GreaterOrEqual, "128") assert action == expected def test_parse_valid_filter_action_in(): action = FilteringAction.parse_string("intensity in [128, 129, 130]") expected = FilteringAction("intensity", Comparator.In, "[128, 129, 130]") assert action == expected def test_parse_invalid_filter_action_invalid_operator(): with pytest.raises(ValueError): _ = FilteringAction.parse_string("point_source_id <> 128") def test_parse_invalid_filter_action_no_operator(): """This one show that our simplistic parsing catches some error late""" with pytest.raises(ValueError): _ = FilteringAction.parse_string("point_source_id 128") def test_parse_filtering_expression(): parsed_expr = FilteringExpression.parse_string( "classification == 2 or classification == 3 and x > 10.0" ) """ ┌────┐ │ or │ └▲─▲─┘ │ │ │ │ │ │ ┌─────────────────────┤ │ │ classification == 2 │ │ └─────────────────────┘ └───────┬─────┐ │ and │ └─▲──▲┘ │ │ ┌─────────────────────┬┘ └─┬──────────┐ │ classification == 3 │ │ x > 10.0 │ └─────────────────────┘ └──────────┘ """ expected_expr = FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.Or, lhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="2", ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.And, lhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="3", ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="x", comparator=Comparator.GreaterThan, value="10.0", ), ), ), ), ), ) assert parsed_expr == expected_expr def test_parse_filtering_expression_not(): parsed_expr = FilteringExpression.parse_string("not classification == 2") expected_expr = FilteringExpression( kind=FilteringExpressionKind.Negated, data=NegatedFilteringExpression( expr=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="2", ), ), ), ) assert parsed_expr == expected_expr def test_parse_filtering_expression_2(): parsed_expr = FilteringExpression.parse_string( "(classification == 2 or classification == 3) and x > 10.0" ) """ ┌─────┐ │ And │ └─▲─▲─┘ │ │ │ │ ┌────┬───────┘ │ ┌─────►│ or │ └────────────────┬──────────┐ │ └───▲┘ │ x > 10.0 │ │ │ └──────────┘ ┌──────────────┴───────┐ ┌┴────────────────────┐ │ classification == 2 │ │ classification == 3 │ └──────────────────────┘ └─────────────────────┘ """ expected_expr = FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.And, lhs=FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.Or, lhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="2", ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="3", ), ), ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="x", comparator=Comparator.GreaterThan, value="10.0", ), ), ), ) assert parsed_expr == expected_expr def test_parse_filtering_expression_2_pdal_style(): parsed_expr = FilteringExpression.parse_string( "(classification == 2 || classification == 3) && x > 10.0" ) expected_expr = FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.And, lhs=FilteringExpression( kind=FilteringExpressionKind.Binary, data=BinaryFilteringExpression( condition=Condition.Or, lhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="2", ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="classification", comparator=Comparator.Equality, value="3", ), ), ), ), rhs=FilteringExpression( kind=FilteringExpressionKind.Action, data=FilteringAction( field_name="x", comparator=Comparator.GreaterThan, value="10.0", ), ), ), ) assert parsed_expr == expected_expr def test_apply_filter_expression(): parsed_expr = FilteringExpression.parse_string( "classification == 2 or classification == 3 and x > 10.0" ) points = laspy.ScaleAwarePointRecord.zeros( 3, point_format=laspy.PointFormat(3), scales=np.array([1.0, 1.0, 1.0]), offsets=np.array([1.0, 1.0, 1.0]), ) points["classification"] = [1, 2, 3] points["x"] = [1.0, 5.0, 11.0] result = parsed_expr.apply(points) expected = np.array([False, True, True]) assert np.all(result == expected) def test_apply_filter_expression_2(): parsed_expr = FilteringExpression.parse_string( "(classification == 2 or classification == 3) and x > 10.0" ) points = laspy.ScaleAwarePointRecord.zeros( 3, point_format=laspy.PointFormat(3), scales=np.array([1.0, 1.0, 1.0]), offsets=np.array([1.0, 1.0, 1.0]), ) points["classification"] = [1, 2, 3] points["x"] = [1.0, 5.0, 11.0] result = parsed_expr.apply(points) expected = np.array([False, False, True]) assert np.all(result == expected) def test_cli_filtering_classification_eq_2(tmp_path): path = tmp_path / "simple_cls_2.las" result = runner.invoke( app, ["filter", "tests/data/simple.las", str(path), "classification == 2"] ) assert result.exit_code == 0 las = laspy.read(path) assert np.all(las.classification == 2) def test_cli_filtering_classification_ne_2(tmp_path): path = tmp_path / "simple_cls_2.las" result = runner.invoke( app, ["filter", "tests/data/simple.las", str(path), "classification != 2"] ) assert result.exit_code == 0 las = laspy.read(path) assert np.all(las.classification != 2) def test_cli_filtering_classification_in(tmp_path): path = tmp_path / "simple_cls_2.las" result = runner.invoke( app, [ "filter", "tests/data/simple.las", str(path), "classification in [2, 3, 4]", ], ) assert result.exit_code == 0 las = laspy.read(path) assert np.all(np.isin(las.classification, [2, 3, 4])) def test_cli_filtering_classification_intensity(tmp_path): path = tmp_path / "simple_cls_2.las" result = runner.invoke( app, [ "filter", "tests/data/simple.las", str(path), "(intensity >= 128 and intensity <= 256) and classification == 2", ], ) assert result.exit_code == 0 las = laspy.read(path) assert np.all(las.classification == 2) assert np.all(las.intensity >= 128) assert np.all(las.intensity <= 256) def test_cli_filtering(tmp_path): path = tmp_path / "simple_cls_2.las" result = runner.invoke( app, [ "filter", "tests/data/simple.las", str(path), "intensity <= 42 and not classification == 2", ], ) assert result.exit_code == 0 las = laspy.read(path) assert np.all(las.intensity <= 42) assert np.all(las.classification != 2) laspy-laspy-a32c7aa/tests/cli/test_info.py000066400000000000000000000117421463461040100207340ustar00rootroot00000000000000import pytest from . import skip_if_cli_deps_are_not_installed skip_if_cli_deps_are_not_installed() from typer.testing import CliRunner from laspy.cli.core import app runner = CliRunner() EXPECTED_HEADER_INFO_SIMPLE_LAS = ( " Header \n" " Version 1.2 \n" " Point Format Id 3 \n" " Point Format Size 34 \n" " Extra Bytes 0 \n" " Point Count 1065 \n" " Compressed False \n" " System Identifier '' \n" " Generating Software 'TerraScan' \n" " Number Of VLRs 0 \n" " UUID '00000000-0000-0000-0000-000000000000' \n" " File Source Id 0 \n" " Creation Date None \n" " Scales [0.01 0.01 0.01] \n" " Offsets [-0. -0. -0.] \n" " Mins [6.3561985e+05 8.4889970e+05 4.0659000e+02] \n" " Maxs [6.3898255e+05 8.5353543e+05 5.8638000e+02] \n" " Number Of Points By Return [925 114 21 5 0] \n" ) EXPECTED_VLR_INFO_SIMPLE_LAS = "" EXPECTED_POINTS_INFO_SIMPLE_LAS = ( "\n" " Stats \n" " Dimension Name Min Max \n" " X 0 63898255 \n" " Y 0 85353543 \n" " Z 0 58638 \n" " intensity 0 254 \n" " return_number 0 4 \n" " number_of_returns 0 4 \n" " scan_direction_flag 0 1 \n" " edge_of_flight_line 0 0 \n" " classification 0 2 \n" " synthetic 0 0 \n" " key_point 0 0 \n" " withheld 0 0 \n" " scan_angle_rank -19 18 \n" " user_data 0 149 \n" " point_source_id 0 7334 \n" " gps_time 0.0 249783.16215837188 \n" " red 0 249 \n" " green 0 239 \n" " blue 0 249 \n" ) EXPECTED_INFO_SIMPLE_LAS = ( f"{EXPECTED_HEADER_INFO_SIMPLE_LAS}" "--------------------------------------------------\n" f"{EXPECTED_VLR_INFO_SIMPLE_LAS}" "--------------------------------------------------\n" f"{EXPECTED_POINTS_INFO_SIMPLE_LAS}" ) EXPECTED_VLR_INFO_AUTZEN_LAS = ( " VLRs \n" " User ID Record ID Description \n" " liblas 2112 OGR variant of OpenGIS WKT SRS \n" " LASF_Projection 34735 GeoTIFF GeoKeyDirectoryTag \n" " LASF_Projection 34737 GeoTIFF GeoAsciiParamsTag \n" " liblas 2112 OGR variant of OpenGIS WKT SRS \n" ) def test_header_info(): result = runner.invoke(app, ["info", "--header", "tests/data/simple.las"]) assert result.exit_code == 0 output = result.stdout assert output == EXPECTED_HEADER_INFO_SIMPLE_LAS def test_vlr_info(): result = runner.invoke(app, ["info", "--vlrs", "tests/data/simple.las"]) assert result.exit_code == 0 assert result.stdout == EXPECTED_VLR_INFO_SIMPLE_LAS result = runner.invoke(app, ["info", "--vlrs", "tests/data/autzen.las"]) assert result.exit_code == 0 assert result.stdout == EXPECTED_VLR_INFO_AUTZEN_LAS def test_point_info(): result = runner.invoke(app, ["info", "--points", "tests/data/simple.las"]) assert result.exit_code == 0 assert result.stdout == EXPECTED_POINTS_INFO_SIMPLE_LAS def test_complete_info(): result = runner.invoke(app, ["info", "tests/data/simple.las"]) assert result.exit_code == 0 assert result.stdout == EXPECTED_INFO_SIMPLE_LAS def test_info_non_existant_file(): result = runner.invoke( app, ["info", "--header", "tests/data/this_does_not_exist.las"] ) assert result.exit_code != 0 assert ( result.output == """Error: [Errno 2] No such file or directory: 'tests/data/this_does_not_exist.las' """ or result.output # Windows paths... == """Error: [Errno 2] No such file or directory: 'tests\\\\data\\\\this_does_not_exist.las' """ ) laspy-laspy-a32c7aa/tests/conftest.py000066400000000000000000000073361463461040100200240ustar00rootroot00000000000000from pathlib import Path import pytest import laspy SIMPLE_LAS_FILE_PATH = Path(__file__).parent / "data" / "simple.las" VEGETATION1_3_LAS_FILE_PATH = Path(__file__).parent / "data" / "vegetation_1_3.las" TEST1_4_LAS_FILE_PATH = Path(__file__).parent / "data" / "test1_4.las" EXTRA_BYTES_LAS_FILE_PATH = Path(__file__).parent / "data" / "extrabytes.las" LAS_1_4_WITH_EVLRS_FILE_PATH = Path(__file__).parent / "data" / "1_4_w_evlr.las" SIMPLE_LAZ_FILE_PATH = Path(__file__).parent / "data" / "simple.laz" EXTRA_BYTES_LAZ_FILE_PATH = Path(__file__).parent / "data" / "extra.laz" PLANE_LAZ_FILE_PATH = Path(__file__).parent / "data" / "plane.laz" AUTZEN_FILE_PATH = Path(__file__).parent / "data" / "autzen.las" AUTZEN_GEO_PROJ_FILE_PATH = Path(__file__).parent / "data" / "autzen_geo_proj.las" LAZ_1_4_WITH_EVLRS_FILE_PATH = Path(__file__).parent / "data" / "1_4_w_evlr.laz" UNREGISTERED_EXTRA_BYTES_LAS = ( Path(__file__).parent / "data" / "unregistered_extra_bytes.las" ) ALL_LAS_FILE_PATH = [ SIMPLE_LAS_FILE_PATH, VEGETATION1_3_LAS_FILE_PATH, TEST1_4_LAS_FILE_PATH, EXTRA_BYTES_LAS_FILE_PATH, ] ALL_LAZ_FILE_PATH = [ SIMPLE_LAZ_FILE_PATH, EXTRA_BYTES_LAZ_FILE_PATH, PLANE_LAZ_FILE_PATH, ] ALL_LAZ_BACKEND = laspy.LazBackend.detect_available() SUPPORTED_SINGULAR_EXTRA_BYTES_TYPE = [ "u1", "u2", "u4", "u8", "i1", "i2", "i4", "i8", "f4", "f8", "uint8", "uint16", "uint32", "uint64", "int8", "int16", "int32", "int64", "float32", "float64", ] SUPPORTED_ARRAY_2_EXTRA_BYTES_TYPE = [ f"2{base_type}" for base_type in SUPPORTED_SINGULAR_EXTRA_BYTES_TYPE ] SUPPORTED_ARRAY_3_EXTRA_BYTES_TYPE = [ f"3{base_type}" for base_type in SUPPORTED_SINGULAR_EXTRA_BYTES_TYPE ] SUPPORTED_EXTRA_BYTES_TYPE = ( SUPPORTED_SINGULAR_EXTRA_BYTES_TYPE + SUPPORTED_ARRAY_2_EXTRA_BYTES_TYPE + SUPPORTED_ARRAY_3_EXTRA_BYTES_TYPE ) class NonSeekableStream: """ Fake non stream / file object which simulates a file object on which we cannot seek """ def __init__(self, inner): self.inner = inner def read(self, n): return self.inner.read(n) def seekable(self): return False def close(self): pass @pytest.fixture() def simple_las_path(): return SIMPLE_LAS_FILE_PATH @pytest.fixture(params=SUPPORTED_EXTRA_BYTES_TYPE) def extra_bytes_params(request): return laspy.ExtraBytesParams( name="just_a_name", type=request.param, description="laspy test ExtraBytes" ) @pytest.fixture(params=[EXTRA_BYTES_LAS_FILE_PATH, EXTRA_BYTES_LAZ_FILE_PATH], ids=repr) def las_file_path_with_extra_bytes(request): if request.param.suffix == ".laz" and len(laspy.LazBackend.detect_available()) == 0: return pytest.skip("No Laz Backend") else: return request.param @pytest.fixture(params=ALL_LAS_FILE_PATH, ids=repr) def las_file_path(request): return request.param @pytest.fixture(params=ALL_LAZ_FILE_PATH, ids=repr) def laz_file_path(request): if len(laspy.LazBackend.detect_available()) == 0: return pytest.skip("No Laz Backend") return request.param @pytest.fixture(params=ALL_LAS_FILE_PATH + ALL_LAZ_FILE_PATH, ids=repr) def file_path(request): if request.param.suffix == ".laz" and len(laspy.LazBackend.detect_available()) == 0: return pytest.skip("No Laz Backend") return request.param @pytest.fixture( params=( ALL_LAZ_BACKEND if ALL_LAZ_BACKEND else [pytest.mark.skip("No Laz Backend installed")] ) ) def laz_backend(request): return request.param @pytest.fixture() def mmapped_file_path(tmp_path): import shutil copied_file = shutil.copy(SIMPLE_LAS_FILE_PATH, tmp_path) yield copied_file laspy-laspy-a32c7aa/tests/data/000077500000000000000000000000001463461040100165255ustar00rootroot00000000000000laspy-laspy-a32c7aa/tests/data/1_4_w_evlr.las000066400000000000000000000771751463461040100212100ustar00rootroot00000000000000LASFpylas Mapperw ->YM>Ҕw԰>ZT9At;Am1@PK9AKrV9A+V;ASδ;AWߵ@GYص@1~LASF_Projection@OGC Tranformation RecordPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]liblas@OGR variant of OpenGIS WKT SRSPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]*fvy)H 8"2ԓAfTy'H "2ԓAfo.H v"2ԓA4r ga)H "2ԓA?gYκ,H "2ԓA4-&gB[f,H T"2ԓA&3giO+H "2ԓA?g,H̼'/H "2ԓAv Lg&̰*H 1"2ԓA\Xg<)He "2ԓA'dg¹0(He o"2ԓAxogt̘-He "2ԓADzg~̘*He "2ԓAg_]$$'He L"2ԓAg;̅'He "2ԓA 0gȞ+He "2ԓA{%g \.He *"2ԓAg1׸ \+He "2ԓAgo+He h#2ԓAg`-He #2ԓA1grTU*He #2ԓAHgQQ|+He E #2ԓAHgx/Q|-He #2ԓAZgx/B?-He #2ԓAdg E,He "#2ԓAgcB?(He #2ԓAgʷ3,He a#2ԓAhhL&(He #2ԓA hL)w(He #2ԓA֎h‡&)He >#2ԓA=h6f,P(He #2ԓA*fhD,P)He |##2ԓA*%hD,P(He ԓA*h#&*He (#2ԓAE 0h0))He Y+#2ԓA~&5h,P&He -#2ԓA9h,P(He 0#2ԓA6>h ,P,He 73#2ԓA+ Ch~0)-He 5#2ԓA Gh~0).He u8#2ԓAFJh,P/He ;#2ԓAl-Nh̔.He =#2ԓAQh̔0He R@#2ԓAVThg{:/He B#2ԓAVhg{̂.He E#2ԓAēYhg{̈_)He /H#2ԓAahR8̍-e (]#2ԓA`hR8̍.e fb#2ԓAm_hR8 .e e#2ԓAD^hR8 *e Cj#2ԓAZhR8:)e o#2ԓAeXhR8,e !r#2ԓAUhY+e t#2ԓAVAhg{0)+e z#2ԓAgř+e #2ԓAi^߶)y֗#Ho '92ԓA ^M{֗$Ho 4*92ԓAM^֗%Ho ,92ԓA^ӵ֗'Ho r/92ԓAZ^n<՗(Ho 292ԓA^Q 5՗!Ho 492ԓAW_<Ǵ/+֗%Ho O792ԓA~+4_b5՗%Ho 992ԓAP_̻S֗$Ho <92ԓA1+m_W)y֗'Ho ,?92ԓA\݉_AV<՗#Ho A92ԓApL_AA՗&Ho kD92ԓA_i՗#Ho G92ԓA*_Iԗ$Ho I92ԓA 5_GAA՗$Ho HL92ԓA`TWԗ(Ho N92ԓA3`ӗ'Ho Q92ԓAwO`ذ ӗ%Ho %T92ԓAk`Ktnӗ)Ho V92ԓA`җ(Ho cY92ԓA^g`̯җ-H \92ԓA`gҗ)H ^92ԓA,`$җ'"H Aa92ԓAuL`:җ1H c92ԓA)a$}ӗ0H f92ԓA'*aGӗ.H i92ԓADajխnӗ/H k92ԓA_ap ӗ/H \n92ԓA6za( җ&H p92ԓAДaɬҗ%H s92ԓAGapdҗ%H 9v92ԓA9aZ!ӗ/H x92ԓAn+aӗ5H w{92ԓA+ayӗ.H ~92ԓAb6ӗ0H 92ԓAb70bѪ1ԗ0H U92ԓAIbӎԗ/H 92ԓA0cb2*ӗ(H 92ԓA{bi՗*H 292ԓAb5՗)H э92ԓAb`)y֗(H p92ԓAbM̻S֗&H 92ԓAEb7̶֗&H 92ԓAb vח)H M92ԓAlcؗ%H 92ԓA'chΧfٗ#H 92ԓA>cRٗ$H +92ԓAVc;HSٗ*H ʢ92ԓAync&;0ۗ'H i92ԓAkc¦¦ۗ+H 92ԓAEcm]+ۗ+H 92ԓA cV&Aܗ+H F92ԓAcAץݗ,H 92ԓAPhc*Rݗ*H 92ԓAscQ̄)ݗ-H #92ԓAj8d qޗ,H ·92ԓA$dʤ~wݗ*H b92ԓAU:dчޗ)H 92ԓA4dPdD;ޗ*H 92ԓAqed_ޗ*H ?92ԓA9{dfޗ)H 92ԓA՘dw{_ޗ)H }92ԓA揥d`8%ߗ&H 92ԓACdJYKߗ(H 92ԓAd5%ߗ*H Z92ԓAhdo%ߗ*H 92ԓAtd,I)H 92ԓAȢ eD\'H 892ԓAkeڥ:)H 92ԓA53eb=)H v92ԓAFe5&H 92ԓAYe"%)H 92ԓA*Ame 5)H S92ԓAoew" (H 92ԓAwe40*H 92ԓAϤe~+H 092ԓA(e=П)H 92ԓA(=e' -H n92ԓAeJh+H 92ԓAp9e(-H 92ԓA-Bepg),H L92ԓAfÞ[,H 92ԓA{f΀'H 92ԓA P/f=;.H ):2ԓAPfٝ+H g:2ԓA`_f:r*H  :2ԓAofut:r/H :2ԓA~fR11H D:2ԓA.f.*H :2ԓAfH$+H :2ԓAf1$-H ":2ԓAwf̀*H :2ԓA;fhy-H `:2ԓAf%y,H :2ԓA"fyn|*H :2ԓAfV+H =#:2ԓABf؞,H %:2ԓA gL}@-H {(:2ԓA?g[[f-H +:2ԓA %g7:O(H -:2ԓA1gH Y0:2ԓA=g՚H 2:2ԓAIg IP%H 5:2ԓAInTg~̰+He 68:2ԓAo_gp<+He ::2ԓAqjghOB)He t=:2ԓAtg-̘-He @:2ԓAhgR ̘*He B:2ԓA5g$$*He QE:2ԓAg;ə̌/He G:2ԓA`jǧ+He J:2ԓAg$ \-He /M:2ԓAgdy-He O:2ԓAgdy)He mR:2ԓAxQg!/He U:2ԓA4qg!gk1He W:2ԓAg`.He JZ:2ԓAmgmޘ],He \:2ԓAg⼘[-He _:2ԓArg⼘K.He 'b:2ԓAgVN-He d:2ԓAhgyH'He eg:2ԓA]gyK(He j:2ԓACh?XH(He l:2ԓAh6E.He Co:2ԓAχ h6B?*He q:2ԓAh*;-He t:2ԓA@h*;,He w:2ԓAbhB?,He y:2ԓAh8-He ^|:2ԓA#hҗ3.He ~:2ԓA'hҗ0),He :2ԓAP+h60He ;:2ԓAv/h,P-He چ:2ԓAD2h3-He z:2ԓAh4h,P(He :2ԓA2?7h,P,He :2ԓAW9h0)*He W:2ԓAO;hrm,P+He :2ԓA;2ԓAń\f:r( @;2ԓALf%;/ C;2ԓA-=fF;+ 8F;2ԓA-fhU/ H;2ԓARf. vK;2ԓAٖ f̜Q/ N;2ԓAeF* P;2ԓA en. SS;2ԓA'ke+ 1[;2ԓA$e=W+ c;2ԓAk{oè%, e;2ԓA'\eV+* Lh;2ԓAJen.m* j;2ԓAp#7e7, m;2ԓA$eJ=( )p;2ԓAe%=* r;2ԓA8dD\. hu;2ԓAڲd;ПPߗ- x;2ԓAdRSߗ& z;2ԓAdhVYKߗ, E};2ԓAd%ߗ( ;2ԓAęd _ޗ) ;2ԓA Td ޗ' ";2ԓA&pd7A;ޗ. ;2ԓADr\db ݗ, `;2ԓA3{Gdإxݗ+ ;2ԓAb2d ݗ+ ;2ԓAd,ݗ* >;2ԓAKdMRݗ. ݔ;2ԓAOcRݗ+ |;2ԓAcӢݗ1 ;2ԓAc#hܗ( ;2ԓAp˰cY&Aܗ+ Y;2ԓAct{¦ۗ( ;2ԓAn>c5~ۗ, ;2ԓAmcGڗ. 6;2ԓAVnWcDSٗ) թ;2ԓA2@cχٗ* t;2ԓA)cʤ6ٗ, ;2ԓA)cprrؗ+ ;2ԓA;b/ח* R;2ԓAL br̩=ח+ ;2ԓAb#֗& ;2ԓAdb)y֗* /;2ԓAb;֗) ξ;2ԓA{b~i՗- m;2ԓAJob ¦ԗ- ;2ԓAWb#ԗ* ;2ԓA ?b8HTWԗ/ J;2ԓAaN'bO1ԗ- ;2ԓAbeΧTWԗ+ ;2ԓAjna|1ԗ/ (;2ԓAaTҗ3 ;2ԓAlaҗ1 f;2ԓAeaJnӗ+ ;2ԓA"a ӗ% ;2ԓA*HaNԗ2 ;2ԓA!/aK1ԗ4 ;2ԓAMaЎ ԗ5 ;2ԓA`Ѫ ԗ1 _;2ԓAC`6ӗ"" ;2ԓA`yӗ& ;2ԓAj`ӗ) <;2ԓA8`ӗ/o ;2ԓA{$|`Bӗ'o z;2ԓA2b`ӗ'o ;2ԓAsH`ӗ'o ;2ԓA, .`-ԗ!o W<2ԓAX`pHԗ'o <2ԓAl__gխ/+֗'o <2ԓA$L_}Hԗ)o 4<2ԓA_[5՗%o <2ԓAO\_i՗#o s <2ԓA_L̻S֗)o <2ԓAu_bF#֗'o <2ԓAZ_y5՗$o P<2ԓAԑ?_)y֗$o <2ԓAH$_11̻S֗#o <2ԓA _Gt̶֗"o -<2ԓA^ذ֗o <2ԓA^V^̻S֗%o k"<2ԓA6^_֗&o %<2ԓA^ñ֗$o '<2ԓAՁ^ȷ՗(o I*<2ԓAf^I5՗!o ,<2ԓA2K^<՗*o /<2ԓA30^Nԗ$o &2<2ԓA0^4՗*o 4<2ԓA]wAA՗&o d7<2ԓA ]jܳ5՗$o :<2ԓAe])y֗%o <<2ԓA$]bi՗&o A?<2ԓA~]8Ǵȷ՗"o A<2ԓAo]M #֗%o D<2ԓAS]n ח"o G<2ԓA7]ӵ6ٗ% I<2ԓA]`\ٗ# ]L<2ԓA\YAڗ% N<2ԓAm\`5~ۗ( Q<2ԓA\#¦ۗ' :T<2ԓA\f¦ۗ" V<2ԓA\./ۗ& xY<2ԓA{s\D/ۗ& \<2ԓApW\P¦ۗ' ^<2ԓA3f;\5~ۗ" Va<2ԓA[\Լڗ$ c<2ԓAOQ\;Sٗ' f<2ԓAih[~rrؗ$ 3i<2ԓA[cח% k<2ԓA1[& ח) qn<2ԓA[ịח$ q<2ԓAv[:κ ח' s<2ԓAjZ[P ח+ Nv<2ԓAJ=[ulؗ' x<2ԓAw!QMTdɗHUO2ԓAQ74ʗ,H>XO2ԓA1Q̳˗$HZO2ԓAQG˗H|]O2ԓARR ̗!H`O2ԓAz 3R;͗&HbO2ԓADQR;ΗHYeO2ԓAʗH! &O2ԓA6Y(f@&ʗH! O2ԓAHVY,ȗH! dO2ԓAVuY䜣̜ǗH! P2ԓABYC8̕kǗH! P2ԓAYӢ×H! BP2ԓA0Y̳˗ H! P2ԓAYonڗ%H! P2ԓA= Z+ܗ'H  P2ԓA)ZIǡ ݗ&H P2ԓA{ HZ2sߗ)H ]P2ԓApgZޗ+H P2ԓAZﺠxݗ.H P2ԓAZMV ݗ&H :P2ԓAZܗ(H P2ԓApZ 5~ۗ*H xP2ԓA~[h(Aڗ'H "P2ԓA![Þfٗ+H $P2ԓA@[%_cח(H V'P2ԓAe_[x$ؗ)H )P2ԓAR~[n̩=ח(H ,P2ԓAٜ[R#֗+H 3/P2ԓA[+̻S֗)H 1P2ԓA\[̯֗$H q4P2ԓA [sF ח"H 7P2ԓA/\Zٗ"H 9P2ԓAG14\Լڗ H NP2ԓA p\w՚)ܗ$H AP2ԓAd\aGڗH ,DP2ԓA\-Gڗ&H FP2ԓAd\əGڗH jIP2ԓA\}dnڗ$H LP2ԓA3]g!MFڗ$H NP2ԓAdx&]żؗ%H GQP2ԓAD]#XMؗ#H SP2ԓA>b]̯֗ Ho VP2ԓAe]k֗#Ho $YP2ԓAu]Kȷ՗&Ho [P2ԓAü])՗Ho c^P2ԓA`]՗"Ho aP2ԓA]p?Nԗ%Ho cP2ԓAt^ڕAA՗#Ho @fP2ԓAn73^-vHԗ"Ho hP2ԓAݲP^35՗"Ho ~kP2ԓAxn^uΔTWԗ"Ho nP2ԓA?h^&Nԗ%Ho [sP2ԓA^“ԗ)Ho uP2ԓAc^z]ԗ!Ho xP2ԓA0_ei՗"Ho 9{P2ԓA_µ՗!Ho }P2ԓA>:_!Q՗$Ho wP2ԓAjW_ i՗%Ho P2ԓAt_iȷ՗$Ho P2ԓAI_Sfԗ"Ho TP2ԓA_<՗&Ho P2ԓADj_i՗"Ho P2ԓAt_Y/+֗#Ho 1P2ԓAA`5՗&Ho ВP2ԓA`B֗*Ho oP2ԓA9`+oNԗ%Ho P2ԓAU` ԗ(Ho P2ԓAq`rǎHԗ%Ho MP2ԓAN`bԗ,Ho P2ԓA`0Nԗ,H P2ԓAx`1ԗ(H *P2ԓA`xVӗ(H ɧP2ԓA`aTWԗ.H hP2ԓAzaӗ3H P2ԓA1akӗ7H P2ԓALLa(ӗ%H EP2ԓAcgaËnӗ.H P2ԓAeaۀӗ1H P2ԓAfTa:Gӗ.H #P2ԓA:a#يTWԗ6H ¼P2ԓAa ԗ6H aP2ԓAal1Hԗ(H P2ԓAXbUҗ&H P2ԓA b7җ,H >P2ԓA2 :bFnӗ*H P2ԓAMSbnӗ)H |P2ԓARlbpnӗ5H P2ԓA?bZ}ӗ)H P2ԓAE3bnӗ)H ZP2ԓA[bՇ ӗ)H P2ԓAbbq ^җ+H P2ԓAnb-Gӗ&H 7P2ԓA0dc1ԗ+H P2ԓAOcȷ՗(H uP2ԓAm2cd5՗*H P2ԓAvuJc!̶֗&H P2ԓAac{ޅח%H RP2ԓAycdؗ&H P2ԓAcMXfٗ*H P2ԓAhc8MFڗ%H /P2ԓAaxc"҄Aڗ$H P2ԓAfc ;0ۗ%H nP2ԓA4cK/ۗ(H P2ԓAydܗ*H P2ԓAKdŃ~wݗ0H KP2ԓA0d~wݗ*H Q2ԓA8 Fd?qޗ(H Q2ԓA-/\dqޗ'H (Q2ԓA rdnݗ)H Q2ԓAldXvޗ,H f Q2ԓAdA3fޗ*H Q2ԓA d+ޗ*H Q2ԓAd%ߗ'H DQ2ԓAdiSߗ-H Q2ԓAdsHI-H Q2ԓAfe^A(H !Q2ԓAeG€G5,H Q2ԓAs,e0D\#H _ Q2ԓAq@e<5)H "Q2ԓATe2F'H %Q2ԓAPgey5'H <(Q2ԓA7zeb%(H *Q2ԓAeKQ%)H {-Q2ԓAye/.m*H 0Q2ԓAe~W)H 2Q2ԓANe~W'H X5Q2ԓAce~+H 7Q2ԓAe~ A(H 5=Q2ԓAٖ fP}t,H ?Q2ԓA ~f9}.H sBQ2ԓAC.f{}Q'H EQ2ԓA>f8}bw+H GQ2ԓAE'Of};*H QJQ2ԓAթ_f|(H LQ2ԓAofk|I.H OQ2ԓA_f|C*H .RQ2ԓAfM|=K*H TQ2ԓAKf?,|3,H lWQ2ԓA;f){+5(H ZQ2ԓAf{$.H \Q2ԓAef{+5+H I_Q2ԓA)fb{̌0H aQ2ԓAfqA{ .H dQ2ԓAf{V-H &gQ2ԓAJgZz -H iQ2ԓA)gDz+H elQ2ԓAgz@.H oQ2ԓA)g-xzg,H qQ2ԓA#K6gVz@*H BtQ2ԓAIBg5z@*H vQ2ԓA͈Ngz%H yQ2ԓARuZgyIP+He |Q2ԓA3egy̤_'He ~Q2ԓAqg_y̪*He ]Q2ԓAV|gky̪)He Q2ԓAfgJJy$$/He Q2ԓA|g(y̌,He ;Q2ԓA^g(y̌,He ڋQ2ԓAtgx̅-He yQ2ԓAHgx3,He Q2ԓA鷹gxo%He Q2ԓA'gx-He VQ2ԓAgxjD/He Q2ԓAg{_xgk.He Q2ԓAg=xo-He 3Q2ԓAzg=xX.*He ҠQ2ԓAgex],He rQ2ԓAkgwX.)He Q2ԓAgNwN/He Q2ԓAhNwN.He OQ2ԓA h·wQ|/He Q2ԓATh7wK+He Q2ԓA)}h7wN)He ,Q2ԓAAhtwH,He ˵Q2ԓA "h!SwK'He jQ2ԓA'h!SwH*He Q2ԓA,h1wB?'He Q2ԓA̜1h1w;(He HQ2ԓAL6h1w8.He Q2ԓAR>hv;+He %Q2ԓAAhv6/He Q2ԓA"Ehv8.He cQ2ԓAc&Hhv,P-He Q2ԓA]Khv0))He Q2ԓA>Mhv,P/He @Q2ԓA$Phiv6/He Q2ԓA@Uhiv,P/He Q2ԓA?Vhމv,P0He \Q2ԓAeXhމv,P+He Q2ԓAhXhމv,P.e Q2ԓA$Whމv3+e Q2ԓAUhމv,P*e TQ2ԓAThމv0)+e Q2ԓAIShމv6+e Q2ԓANhމv,P,e R2ԓAQrFhމv6+e R2ԓA+Chމv6,e M R2ԓA{?hމv8)e R2ԓA';hivB?,e R2ԓAI7hivB?)e *R2ԓAT/3hiv;*e R2ԓA1V.hv;(e iR2ԓA[)hv;+e R2ԓA`$hvK.e R2ԓAqhvK+e F!R2ԓA hvQ|,e #R2ԓAhvN*e &R2ԓAY h wN.e #)R2ԓAh wX./e +R2ԓAg1wTU+e a.R2ԓAag1w[,e 1R2ԓA[g SwX.,e 3R2ԓAg Swgk-e >6R2ԓAgtws.e 8R2ԓAɂgtw \)e };R2ԓARg7wm+e >R2ԓAgwo-e @R2ԓA gwy2e ZCR2ԓARgMw*e ER2ԓAogMwr*e HR2ԓAXgw,e 7KR2ԓAngdx*-e MR2ԓAmg=x**e uPR2ԓAЂg=x6:.e SR2ԓAKxgz_x̪)e UR2ԓAmgx̪+e SXR2ԓAagx̰/e ZR2ԓA]"VgxIP+e ]R2ԓAdWJgx. 0`R2ԓAj>gx@* bR2ԓA-1g2y@, neR2ԓA{%g(yg- hR2ԓA(gHJy/ jR2ԓAI gkys., KmR2ԓATyf^yy, oR2ԓA2fyy) rR2ԓAfty 1 )uR2ԓA2fym- wR2ԓA-fz) gzR2ԓANf5z* }R2ԓA{f,xz3( R2ԓA&fz& DR2ԓAbXfBz7% R2ԓAMfb{I) `R2ԓAyeM|~* R2ԓAweߐ|t) R2ԓAei|( XR2ԓAge|0* R2ԓAt=e8}%+ 5R2ԓA}e{}0+ ծR2ԓAu(ke7}(, tR2ԓAkXeN}(- R2ԓAKEe~5* R2ԓAk2eD~7( QR2ԓA(e{f~D\/ R2ԓAS e~D\& R2ԓAd~A( .R2ԓA1d3D\( R2ԓAhd/YKߗ, lR2ԓAfֻdrPߗ) R2ԓAed`%ߗ, R2ԓAӒdv%ߗ- JR2ԓA~dfޗ- R2ԓAIid_4ӗ%o 9YS2ԓAI@_w1ԗ$o [S2ԓA0Bd_i՗&o x^S2ԓA/I_,՗'o aS2ԓA.._bNԗ+o cS2ԓA_䥎ԗ$o UfS2ԓAt^AA՗)o hS2ԓA^, ԗ&o kS2ԓAD^'oTWԗ%o 2nS2ԓA^ӏ՗!o pS2ԓAr^ԗ$o psS2ԓAYSq^YTWԗ!o vS2ԓAU^ ՗&o xS2ԓA:^!<՗%o M{S2ԓAL^DNԗ$o }S2ԓAr^هNԗ&o S2ԓA]ʑHԗ(o +S2ԓA9]<՗!o ʅS2ԓAװ]r՗!o iS2ԓA11]i՗!o S2ԓAJHy]̻S֗&o S2ԓAd_]]v]̯֗$o FS2ԓAf3A]x$ؗ$ S2ԓA(%]-`\ٗ  S2ԓAk]DHAڗ% #S2ԓA5\[ٗ" ÚS2ԓA \Լڗ' bS2ԓABB\3Gڗ% S2ԓAz\)v ڗ* S2ԓA }\ڕ¦ۗ' ?S2ԓA`\)ܗ) ާS2ԓAbD\`Xۗ" }S2ԓAz(\Zٗ* S2ԓA \$ؗ" S2ԓA![;*ח& ZS2ԓA;[Qm̯֗$ S2ԓAS'[ї֗$ S2ԓAٜ[ /+֗( 8S2ԓAA[X/+֗- ׼S2ԓAc[#֗& vS2ԓAG[ח0 S2ԓA*[Bx$ؗ+ S2ԓAOk[ٗ, SS2ԓAZnڗ( S2ԓAZGO)ܗ( S2ԓATZ\Rݗ+ 0S2ԓAZݗ- S2ԓAy~Z:qޗ0 nS2ԓA8aZYKߗ1 S2ԓA$EZfޗ* S2ԓA)Z$xݗ' LS2ԓA Zg#hܗ, S2ԓA>Ynڗ%! S2ԓA?ջY%×! S2ԓAYYR̴ŗ! gS2ԓACYݕ̕kǗ! S2ԓAMdY~,ȗ! S2ԓAGY=,ȗ! DS2ԓA*Y}ȗ! S2ԓA+ YNR<ɗ! S2ԓAXc(ʗ! "S2ԓALX̺8˗ ! S2ԓA~WXП̡p̗ ! `S2ԓAǃX4 ̗! T2ԓA}Xw ̗! T2ԓA`X麠 ͗! =T2ԓADX͗ ! T2ԓA4'Xb͗$! { T2ԓAXCǡӗ)! T2ԓACSW+#֗+! T2ԓAHWn7җ&! YT2ԓA1W=З'! T2ԓAW̝ח,! T2ԓAȟwWYHԗ)! 6T2ԓA&\WT{˗! T2ԓAZi?WߣH̗ ! t T2ԓA"W #̧"̗! #T2ԓAW"f̳˗! %T2ԓA Vʤ ͗! Q(T2ԓAV !˗ {*T2ԓAVP̧"̗ {-T2ԓA/V:tʗ{/0T2ԓAtV̳˗{2T2ԓA#XV;4ʗ{m5T2ԓAP;V~ȗ{ 8T2ԓAZVv@&ʗ{:T2ԓA"V&ʗ{J=T2ԓAIU.Ɯʗ{?T2ԓAUDΧزɗ{BT2ԓAR!U[̃Uȗ{'ET2ԓA UuǗ{GT2ԓAypU(ŗ${eJT2ԓA35RU!˗({MT2ԓA?5U`˗*{OT2ԓA%)UlũY͗({CRT2ԓAYT2͗&{TT2ԓATK2͗${WT2ԓA3T:͗#"{ ZT2ԓAAbSs[0З"yT2ԓA^KES!Mї"4|T2ԓA4(S+ї"~T2ԓAJR⪯ї2"T2ԓARї<"T2ԓARRїBPT2ԓA–Rї#T2ԓAQyRذzϗ#T2ԓA\RΗ!-T2ԓAB?R͗-̓T2ԓA"Rñ̗%kT2ԓALŖ"̗% T2ԓA FQI-˗T2ԓAT/Qd4ʗ$HT2ԓAqծQzʗ@T2ԓAQ4R<ɗT2ԓAKtQ2zȗ&T2ԓAoWQHܳǗ!ŨT2ԓA'7:Q_Ǘ#dT2ԓAAQtb CǗ"T2ԓAPǴ,ȗ#T2ԓAMP, YƗAT2ԓAPBM(ŗT2ԓAP䱵(ŗ%T2ԓA4PІėT2ԓAnPYėT2ԓARP×-\T2ԓA4P߶×&-T2ԓAʷP"—%-T2ԓA/O̢Ɨ?-:T2ԓAO#NʗD-T2ԓAOP͗2-xT2ԓAEnOg)y֗(-T2ԓAcO|Sϗ--T2ԓA"hOė0-UT2ԓALO;D-T2ԓAP0O]̼-T2ԓAzO3̇0#-2T2ԓAfN:%-T2ԓASN`&̾ѣ"-qT2ԓA]NGZ"-T2ԓAܹNuC"H-=]f2ԓA+CNICH-_f2ԓADNgY"H-{bf2ԓA$OÞ› H-ef2ԓA~1O\ H-gf2ԓArRNO_H-Xjf2ԓA*O-˗&H-of2ԓAOdӗ,H-6rf2ԓAw'O8tSϗ;H-tf2ԓAO@&ʗ@H-twf2ԓAPǗ.H-zf2ԓAPSF×#H-|f2ԓAۀ>P×H-Qf2ԓA/*]P×H-f2ԓA{P94!ŗ"Hf2ԓAM[PX՚×"H.f2ԓAPAͭė"H͉f2ԓAP,O4!ŗHmf2ԓA3P̨Ɨ!H f2ԓAQ腙ƗHf2ԓA#3QB̜Ǘ+HJf2ԓAQQ1ޘ CǗ%Hf2ԓAV3pQǗHf2ԓA6Qy6̐ǗH'f2ԓAtdQїR<ɗHƞf2ԓA QR<ɗ!Hef2ԓA3Q *R<ɗ#Hf2ԓA R}ŖNʗHf2ԓAL(RgNʗHBf2ԓA1FR:tʗ#Hf2ԓAeRڕ˗Hf2ԓAHRvH̗ H f2ԓAR2͗"Hf2ԓARVΔϗ-H^f2ԓAR@BΗ1Hf2ԓAR& ͗3Hf2ԓAuS͗7H;f2ԓA@g2ԓAn*YTƜʗH! NAg2ԓAJY زɗH! Cg2ԓApHiYkɗH! Fg2ԓAwYTHǗH! +Ig2ԓA]dY̨ƗH! Kg2ԓAޓYė!H! iNg2ԓAzPY;/ۗ)H! Sg2ԓACZ[̄)ݗ)H FVg2ԓA`YM>Ҕw԰>ZT9At;Am1@PK9AKrV9A+V;ASδ;AWߵ@GYص@"LASF_Projection@OGC Tranformation RecordPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]liblas@OGR variant of OpenGIS WKT SRSPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]laszip encodedV(http://laszip.orgP "*fvy)H 8"2ԓA y5,+!CTX1gDHzJ>-oҺgz?ݳ֕NדG ,^3\rBAn8ER^;5 "Ph׹}u6ړPz|dw|)嘀ݘ@;MKߛ~jF%9z!C#qO D}x#M/2h&G ;?U;dEhU,)ܨ{|]cio3yśD"Pz[OCOϣBJwQgA:%39Om]&Xz''j:򿖌~cۦ?3Hvٟ@/' +A<;f#qыZ%Z+B([MmTS?mYc>]CM=32 V$QEkL&NQ϶ p2D .Hs=T|!AKN+X'(1 %4߁^Ua`܏E@ҳL無ҬG&]p}3M9(;y|@*baA aV 1n8$弍[(ڷ#l$t :w\g&-ixRp(uOWOtS,)! k{){ {Ǧu娹kRsyh ?Ļ;RHKdYtTȯ3qܓ$?ϊVp%sq\f +%kb:Z*$X4^>SC \s=Z*Z꼁~Uu, Dx*\IK?'=Oqܠ7]1OAq˝iD!"x 5fa$p[AF_QK}b1u@'+e'=l`Ҿ*2(&xLޕvJIX`z%׿o$2/3"ёEFNYZZymU8^ONw05J*HpϛIN6 Bk=xEC UCYWg{f10ُKqjrgi&(WY#J3Trx/n=9t~^i^ pa/|O'8#T-/ XHC)Z&84)gAzV] JM#ʾ;E=T6v5^;]e}'L>{u ttW{=,!̳Jrz‡ ?< '/%}b:3]9.|؆3u4tY4Gk\U9ɅgwʖU|_2x6 yl; Mj2l1x9l GD0{J\4*QT"}EB'?TEWVFD$4Cu>`wtK>J㎧rRŘ^9ͮA>Ί+\wxml1tX65,p9H Gg5U$# "σA7< ˃7mQv%y$A\bd^FmnvͩuO [ ɛP>d^hI"qzr^Q~߇+K\iGMu5*3q6N(n!wr,4dshUHa#_<A?,u@?pYf)a)郚f|B4W'3 s_a]ֱn<0`{f"<  Rܜ uby{=YGZ:="]fz-rS]^"K4V4be$+ၹ! ޣv8c=RaT 2Zn\P ;öGcMNn9UļHd+&* zQkQq@^BXdb|"3dqFz-֔:xm%ԇ#cp^K=SnG QMmb-3& &b=Bu7ϨmLϞJD5w=H.PjRt$14b cRHx*qѦ^Cʹ$DF"`$$;?]_8i(C+p]P/FOrY^_&~rlPYtg#9!5FC̖ցH/7xeu4ݧ2V.:@UQr2Ap&%,V@q 9`1t׀QL23Vy@W K277z&U+)*/_Rѕiף4SdNUkpAev8\9ka oz1~sFߙpiApiIuCu;hd?'&0D8g\74y[Q#:%I=_P\ENaŒbf8y9;465n]>pԊe=FzF:vN:A :/LYQ w2A[ E# zh>kM?ܲxts!9Ȥmyl7R!QNK>DzhDMIs7Uc#9:D$k^,9v ٔȒn"ʼnK~bA#aiv}eJG˂x(@r\5uMqcuX'G(593/#\!kEA&K|a;.'ߗleJDEhOqa q>é\ c^v˧3vW fk U6nB <1@{XSF ̟H_d|B ;;ܳGN#nDǫUsKon7fx֖WI0' |S|Q 3tk$VʘА*&sGtcE$OWSo" }cY3x)G*0m8XR"ctNb\C;R8~eh\0o )wwr,Iu+uQwI׹޸7zGx.9:2tU+(y3P3zJZ>,nRzq#O/?\Geчk=WE1J`-/V}VoYŭW.>eQvLOe0bmWuh9̓ co xVB׶;oZo3:)Ȼ~I $̷Vzv5$mADeJMҾ͆._zÐ B Љ>Z.gOOVպ.4LBǜ3!Лb V 2 -?vRO[qSES B1W_E?Q9X5.{ ScuM}VR=<'AwReb`;eGo! K@?S%HI<08j6‚+CI-Zdpm_4سfFayyyyyyyy~/Ǟ}}}}}}}}ߙal RtYJ?0EaYϩ[G{t{jcxQVo"\#d Pャצ-yUk[؞"`'GmфƇH EA; !$oôYUޓar5ߡ{Dy7־}=*ALJ̸g$GԂݴ2E$g<ډռ/z+)exBO@T\MgC@r_ L_F z;Yc䓬tbX 4K/[A4[qo0w^fpm'wE d#hw5D&m,CpȌV8@e 䐑;6 |.K9)W[md j<ؕJF\NqѺ;p8< ͺ,7Ƕuu4p!8vzvf^Fzt-Dx`fn^hEQ)&D>eJۯ`.({IPn)꾦5j|||UX5D./YbϱOXWby!r^bv(eBP!v)i741p6QܯOGkXc]B@y^Kˁ"taNi\gǞ۲{Q:L|;kj NBX;Mo*D5h6#*~lEƱݫ O}ȑ=  \K:⯵+@$'qxpdeQN6d A;@L۟Jp g C= LVd=n~}sxqK;Aϱon$Otc lDd~̹Z{?/~U.0IxJli;[S#Q 8?˱ަ)4Sod"2ySFdǴxbiWNiWA&2iYED#ed6|cPN=/PxYUAݕM!En6HD6g*B5]0(k7IIs7aut؆:[竃jo8j]'ή.>ulTRxpʴD6|AVY䈎s4i)0bjpylastest*just a test evlrTest 1 2 ... 1 2laspy-laspy-a32c7aa/tests/data/autzen.las000066400000000000000000000115421463461040100205370ustar00rootroot00000000000000LASFTerraScanjZ {Gz?{Gz?{Gz?3333!#AQe#Aףp *AHz)AQƀ@uy@liblas@OGR variant of OpenGIS WKT SRSPROJCS["NAD83(HARN) / Oregon Lambert (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2994"],AXIS["X",EAST],AXIS["Y",NORTH]]LASF_Projection@GeoTIFF GeoKeyDirectoryTag" "#   *#LASF_Projection/GeoTIFF GeoAsciiParamsTagNAD83(HARN) / Oregon Lambert (ft)|NAD83(HARN)|liblas@OGR variant of OpenGIS WKT SRSPROJCS["NAD83(HARN) / Oregon Lambert (ft)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Regional_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],UNIT["foot",0.3048,AUTHORITY["EPSG","9002"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["false_easting",1312335.958],PARAMETER["false_northing",0],AUTHORITY["EPSG","2994"],AXIS["X",EAST],AXIS["Y",NORTH]] YAI~nL AN[ }{Z?b AU͡!~զlq A̕( dZ~ A'I |Ѵ A~TtIzrW AuKfBl%Ѡ A! ~r Ayʻ6M2A"0, i[e@AU޽,a}OAiVI|Ѭ_A w.( |ĂB,Af ~!],AߪJI}'pu,A344xu,AI|@ A} Rul A    |ܖ AjI~A߽ AvIγ Aqb`P Aohe{ AJ  uYO A:4 ZU Ap;wkI| ҎAV X<I ~/zAaIu$A I6~wA`h |HAkR~% Ak R;,Ae'I~\`,A*Q~Kb,A)#I~#d(Af ~yZAsk( ~:W@,As:I| )O,AI~2^,Aˋ.J |Co,ANB$ |8L,AB[I |~w8AǹI㤂8AuT.) Y|he8Ag9:  ~z8AME |+'8AY | $F8AU8q#I~emNAK  z1;NAu;vI~ NA  |4NAn;LI~NA7 |&NAd*v |NA`U9I|/S:[As tIzaJ[Ar(I~ Y[A|AR'g[A/of |%u[A7 J|V+ [A$]b z(xlqACYQ|}WqAa=!!A~/A/o)NIX!,A#Q~›,ABpI|J,A"I~ǽ,AɣT%,Ao2Y]L%8A$/~(~rd^/8A$t" a98A1w; ֺE8A:oFI|(3&Q8A C! ~> [8A ~k,gf8ALI |OAv ~OA"`̥,I JOADUM̥I %OAz %21OA $  [8A ~k,gf8ALI |OAv ~OA"`̥,I JOADUM̥I %OAz %21OA $ ~9GLzZH>u;%emR Z8ap>~O9jR[J+W(J]]MQOA J3H{(G.>fN υF^?/ 1+,8 @@C<,3# ﻣG^{3^=.MT-&ȃ2ll.!GY%XU{*]l=[,>qkڽΌ/Lri,.̺hƑOÀ*S.Ai=tt$x.5CMC?DɾFRtJ"yObo򇇗. b9q}~̮a4%O-7j}s5AW"/Ѻ*10?w;Z,7Hz*l[/ؘ-=0 9>!Lŏ狇~$fV:Xd W|:庩 ]^mTo㐃Tt(Px|2*$dAZMz=5T1nkWIÍs++bC;P緊 mZxA cRQ[GܹT3vD#-Ȑح< ]|z HaH50" |Pco}$Z&,?~ LxBS( *$N@p}l|-7{Ԓ^_QƼ.ː7s4x,<2HcgY&Y>O!֩N)u'Fʊ\Vu/A@# E`t)JJBT3oGs*Kl&$To?s&͋H)r㡶{?rLJ3#ԟ*78Q '%j@C&7WF4ך?E6  ?9{VE )1h@^eƿql~$gObTSU|@ɞ'pkFNXKq y0P4MTap+c-O%VwX9z~e=bJŠ3!_>}hb><ɖxзſ䲜acI^nCcvrXgz\!Jku$iMiN3N֘M/c7#€6m(P)w5qLN^?Oxܞ/ $ZI@+TG$ S# -Q[gP mxZe"ް-f{ %?`]Q*jY.a KUP< l "͎h8G 11D]g>"Abѩw,: JBl]~`Dلeq7+[(?^hZE jЖ?!%֌6|8q<$3XސUHJ{;B^LxYCy霳FeovR5Z--%!(0`?z;"0;U9^dOxKX.8V%yJįn=N`\V-!cuxw, lO)8*YWq"#JN39L4 NjJ Qѝnx):4dF}=.&2:ٲ ̜xsdj(]Ng(9)\+!.c( 6v#_s'Tk7nQj?H (}bGkL䦸8*_Kf?y9os5'YѡpT%'{Bpq_ZC>#6 j:Auf0*I/HP nDp&D7޶a(à@]Xh9T%쪆؞+f.3I:q j <=!)Jiv0֓_iE6w`"0KCƺbJՍkZ,f"ۘ\?%^<ݥܣ4PbIlo_oZ jmBDhZ8dSja:XZn})d$%GUq[b~'Z:JL1/C L#!J i Uxxfk+ҡL~ kxe9J-ĺj_Z~0:W#!sO#)MȽ߅c?aar ԻpK0ˊ 6cyzƒ6 x %J3eQu.eCsf N~mBdfFj D@㎙^lS#G=yWz g+7vB!^<dK.USqjw(0}A#!'RZ͞R{. {6+z2>CͶw `Ds+ñ(i!SA`X>u ?ͽSj6Ƿyu8P? ;5+>*ȹV?8k V`E\FkQy,_pp+pT.Zrc*+1{Q%f=qD$Q>R ):1Ll#" P(J,wϾ+E[/]1 _Sm zSTɇ:ɔrC-{P}kOv$E"!fyd0.h++nVLPMu.Dݲy¡uˡ4 4,ejy k/]{vUpW&ܸ<{x VY$mOgV:Ōڥu/>dǸs($,Lj:x\~n;T 2)&w:dB[gF4SV l̏H[R)DKy/8[iAfln g3+0_kӴn (î'ta1P~^xZfQ,p5 ӱ/ &Oݑ3۷,Nljs_E)i /MgדjD$5`"o{tY7|NI[ sKKv-XL-=,oڟR^7_(]tQARn+9=UʳEudv.w;Smu*rjCl<%8[4l/o;SHՕuВa lOCkh (OvE:?&=I;)cido@Z9wn?66ž!#C0D`bDf7PCHGB@CɌg]znP5!xL*ejJn1y<2ib+ϧXeYvUƝM{l[A͸1`@H%aBr l[ߔ#s _?XliuѐJPZEj16mG!>OK 0D8WAҮ6 Ï[ijˎE߃)n%BbJ~f,X' fru0E+јnJ g cG+&`|迵(.[ BqMH0O]:EAr4 oPF $jG-rmazAugaBt9E-q.Ӧ\ݎ#t^Lsﰺ/"nq\M0>hGNh]b8ŇPEνv%+̀4y9&ByMcm@ [>879#z<ꙋ7'jxUQų@[H{krB`^LspGdľS?`i:cOd/9t)ΟV Z~ z'.Y+v=(`b"3@55x< )G'+f>ӇLX%]e9XblO7#|$=5H5*Yg/3G &q%[? n)KFxs;^ d"D64Fҟ5&:FӑG'w Nv޹LI' B.|A7I { 9dz7J6`G6IlRfǎw]M[ ^ˋ$B߫Wc_ $\` 2<\6[!%qKP:gzc#PuBܝ? >WUޚE&mW,s׊#,-e-u"Q>PI򣁪FG.c-'T 궆 T3}pk{?1n<9+(ށvǍ2(򤥂ciK$!$5t"[V޻ .^ % b:qߋCRCC6F,p}śݾ1~(n!+zM_$dُm[?VjZN2/t}?T5 >D`sE.NѾRʲzVg~ `@ӻ#eoDR ڲ9Ub8LcV\6%>TڜVmheLȷ raꋤk]<+GN-ʗ͕0k>PwbG~AX;(bmQV{*J=XNIz,V+0ҷfX  ąB^E_wV80=je.Gify؆QE2 6~#J4o{{S+u>EƑ2e(e(^>}^YQ vٗ귢_t%\ }=jK46Ր#yn ;qǕ|*s5O)AsQٔe\xj^>Ejs. b3__z~mVCI/ ,oye?Wll;{ O22CkAZu+ i^C-T2o-0kԳt]/ĭ?r*T>KE\9U4F! @'{@[ZB+ 4AO}_(^{Ë6MA?u\g{ Qksiv ෑTNZqD娦ҭк(o+o NљHkOܽoϼ;!CRC_'g#\Uj'\3mg 9E%H>9(3OPrsELIf 迀08 ץQI_2Uhw,$Ωmd{SeW@C`ml!=}S⹧^wܒbD8sM6VsQ .yMJF5`` IbJ}XD`;iFM *@R}'-C,ŒԽt/zݜ,#,k- lbd*هKKf!%F bwlkȗDkKc\]m _MOU qn[FLɊ$9͵]gH)DE쒶+ב*D4^ -Bb u8Nk{Wzc_*h`veu|&l68 S 4̏:L o +b.9# D%"VmX8!;xCw@G]OGꦵu|j2 G,;:szՈU,:+UyP?wSM| (m:I?qtV4ISӝu,Z_x^Gͣ10~Dhd.xQ95Nƈ"7B")ĩuq+8)(Ӡꉜ~'In! SY]z-Nqa#7^ {ZM 2~%YH*ۡaO1J,P3]Mrs8ߊI*e-*¿8V BZvܛr8mxj^;!*Z6TD&L!fI|&߷ c& 5l8 ~iű=ݷ NxS7CD|%hpK`y#%־Dgw {]CHwr\Uv5_DzwP夵HYX՞v o2o!hatΚ0Vk0+ j8bl:\vؾ.nlRzZ&s^1 SS=4+쎸U^m #~*Bo+H; ?z8LNb("Ah7PNә05LuUh5m6ߪɲ5];+Ȍ-}SQYPJ[1r ?*q]kR@p-!)JlԯsE8vA!u@a*iܴ.L݆uذES/ gƳMh L?o/ŏ!BR|啎"#-aAjQkyľI@E9XaORɔDЦҡ  hҰc^ _D'>NFJePC{*2J7՜' ڥ,&G{0achi?Ŵ(\OXLzٰscMTyۗLU=)-9OqT}؍|XՋO9???Fn~tm\3{|^fRiW*UmukĈQ"fIȀBhS rАRpn6>J#i+I\'eՌPlv]ӗ@~yOtw!~Q8}aPTB:N%!;|8DwNTu } ur3{deE7ȥ\T2g+>pDO J"86^Ԍ.J(Nj~tmMYcT<6g|VbxUzʂh,jg%6a|/Gq߁ e^(ߌQ>{![9vҭo hRɟU]G/;[d#mռ|n2<7K4Ϩbا0_SHŵ^^G\ yC! ,:m`g;y{@`$lh!-rǛDPi!"8RpWwDs2n+yB5E`7SD2K׶=wlMuD$zc,iHrԆѡ+P8o1dڀt{ 3fY(a|'R;baI<קLW/E^"7os21ӽwUwwdyșwhzf4P@ v^p-3-/,oHWZEЌPn׽O18/כ|q\tsKxH_`>!D3JV=<$Wi~& 1BGQ|be΋YH")*CKrԭs>/.ZkG(,Պxٳ M̙EjjT_Tq:PB%)c9RPgb*|H8/Th]ٌ8M/'drQ_Y+6 d; Ǐ=,| ;djȻ u ~1*#koFo~獰$u1ZGeX88ޢ,PւFKPIכ4?ZMRO? Ro兇6es3{Ǭ^>arvP?=kWZ0[$DF|wU-}u fV 4-ػ \I 7}!!f)$Auv!RT%cmC{ʤ4px6^e=cIMD(lg9Z͇Rhw1xu3#\0]75+-΂ga΄.i}\zdԪo>ו93aWkw}|EBa?h~~a=@m֖je`szаsQG>r=qV R!\3tx15$-kgxTU$pGZǤ60x/v P$7]U\n-6;TzqJŁx<▹2 :\ s]7ǀ7RĤ P&k@Km)8YiWF~cٕ]m!15肪y[30."&RϠqvqAVU5)__:"Ls̗Hv!MFwyP 9"%iN.8Rg2%mqJlӱGDȓo"=UiM@=d*xD{=0ɕ:k% GV|-ߜ\hVOLYQ&) BE,.ё2V*aX2=;*Ƽ5;:s sUo rg߆=19A{ "_Pˆ4QKoQ g$u5vtb! 0#:[5lO-oN[P̥%Wߜrb;1"4$emFoźÚ]SD Ţz^gsHPg#RTd;ܾ3:ۦ퍰V7sP&^ V}ºu6Ž[J8߲Zæ?<QqzXebe /D30?.~ 9gZX|$w"eF~3U1KK` tmr?#@g4m\JԞT2= h&IҀӨ&Ѧ@TEjzrz>/{ U\^ r»gχXa˚ u#zx\gè[-p6H#2@ >9I lVgAn@q+5t ׬ (UŸ1m+7&&NjZ?n^+TQܮ3Pܹ0w +IͅP@8E{q1QI(ޗbp#ݶ łqՍ*@ c}|Oi { lTq,twJ P=!pc̎ɷǏw39(-N| 50ϼ"[X. m)QweP`o3M}mM`WcF -NY׉Waн ߠBvYL[qҩG)rX ڔU/-lZelo ?!B/4|.᥵)w{(ȧ/=g/"۝Ѷ ".T 0c/$kyVt#fNPӬz/w)rJ¬B5ɵ:"Hq`_Vg.YJ"vIlѼY֐$Q&:%J*]Vs/0q۴ݛibG$x m&tځ7%iv 2Ht[Ji !HC-5(NDY>ώ7KEcBlB0(enliM LMު\?̵ 3L0_[4LCewq',̴[+Φ+=D+&I \xrf :0-DX&h[+ ڢ0}2x0F X+7(x"zHrr7M2Ecy̍.n*a}5 Dh*@vW +Doc|X9A|2``/ȼu]|P0[#r8i0~s}@’߽?<2+Z{V4Dl]&BM xU>3m9{V p<yڊv;N'I @n.ƹ w=)*M/. 䄺jhG{oA`].+;Pp ^ʝC4-_5!β#}_JԠRYI8z,*ONN13nv.+hek_8Y|?gl88ߞ{N+XtZj${F_ ˨eNaV @{y_i!(#e_?`mΪكjƇ|4Hs!)/: ldr;Udl~⣣ko~)Iٚ 6N)CSdjN}]}F>|RMn{8vBV%?[Uqg'{1ib_f1GiG?в2L +'#;sW+bX:h ܽ;gat4jŌ\rDfg ²΁/h:Ts+UШ !W߷YT23@P؅ϳeA&E uGUFA$#G)G.hr D Ƽ0 r_{pjC PXd{s5 RGpvHgnĽl!NӓeRhU/&~)M;$.+jPW=0KlD "}G,H!F5~Ici5m&Q|TsRD^ zu{R{4i= yW;㌨'}w%Y"j6U@*Lՙm ;LqJ"| =s־>tA 6T{~]g`A5Y~Nj~X.Y)Y. uNمPH]x+;pڧTg닇ﲈ@vӲ)LzLb6HJ 弴dY,u]bD⣸Ϯ<%asJn"?߄l :Z5H>mBxa#ylX aIVI ɘPQYӣDכ[D&^]w=&1Rƈi,l+pwۮiHQǹQI}fjOWqJq=Xx&qhċ;m;FCH~$Az>ճ(SǪx[HCJA^*˒cC ׭$W'CM{S:;XR]hWYw62^t(.G^Ƃo~;yBz͎?=pg& ~"{<Pu0" W~cf}䣋|,kbk.J'NyIZdx3VC;R"[im-tP4i(F׵ 4Z%OR-xĄ]=;0jh#K1I,w$h98L{ʕVz3w;s{(ᛝ=֯Sߥ4*(NE 0!Nwt/(VV" X}g/9 ptGR~עauw:YS? v~W 8UBgt 9U9_h?NGl}湙e1y X;F0&Sdr+d1/KJHAT0xtʿ!]kXTC屺uʳ ,\Az(2O+%U^Q=|-hˀ [ځ]yHʕ sj_-smbd;zsdO_Uv9"k+y*7JT%-f@7W#3Z!Än.nUȅt7Ua &!;ip)Gp&2 `\ηHp57 @t)lC~RqUzK.++{Vm9]iKwb2Q 2W.PlMK9RgqM3Hvgj%Bg4(#of;($Ca`Lj7 %hޅ59]_A2;0khsvEzV;9+6ɤSUZF!p7P北ɷf%S :wsC_N5E..c^ܨu!#mW\S 6 F*iwkIZLc=0DGe$`[AlC|V4(f$Nb!hQ?,lqM0S $Yܜ_/urD_N#8jTAN4!>tVCaCQ^Ƙv[]?k\$" dD>  p5iۀ&3R( `MgC"R{C4u`lv[Dy^+  m S1O&%yJRe3ݙ&lؤczM!rH>L)dzq1hg=0ftyqI)Q"mnL]-đLNF&<jW^1 vH> pݮcЖ(51ko 4uKPJԇIH3Fm="FH)P-Ӵ͖_TWrV^/ %n)K +hQv<.|{{R𦹓? 8%u0Md!7 '`vɰ:dG-l'{խx}F`H<׺rX-)^'+<+J0f@:f|q8͘hTtuIΪWBYղ+1 S^'J;,m1#\һ"q7 Y{Ah\%-g?<@^'_J6. bEM~"~x<[k!d $CMC!ho}K%u:-*'Wiq< oq1 ւG>-t%,ۼk+e:Rȋ+oV~ ˫rmgH$2` :Q"o\Ӛ/].LŚr..M\C@/'P;:{ 0:>q b1RŇkݸCoUh˿3ԧRg >k)jԢlv9xn%UHBH+OG76 BƓβHE La?io+ Z2?($ "qc*LS r?DC( 4;j=Vj:''U@>ƌOY 9YQ°E_6ؾ8vesȚ7Qm=<4M h{yR"TN?#_l,ӱm2/\5dAK3K9@$|ZC_Ke2ؑ'B=ԩ#$V3EPz "z)*b> ܩz06GGtkutO* ▙#>H+<ϺL0iSa:D,V,wv%dG@V׏Dp05ea`UWE >'+ AU_0{LEYxfC"TLUS<,YGz%eEC05! S2ȴz?~P0/ljGDPi(D L'r5p\(AmB{x̽7^/'v03k_^#YlTjRS#r*]ƑWڗXG;}h/5%bIgA݇!9,W{Պy!w2iD8ۺ J\ (&owj:!_8';qDܖ;<G8oYX")-]:Ύ9 Lh.tcr."nUs'ILHj+5{m%Nׁ !1!co0-6De xnj WVW曱g%%d=[6 ^8oX>(^ jozZm42 d0Ům7e\%i\,2o^f:V;.)Ҩ|`4j0`)L VY7s~"8֫iҟ[;Yc(F3ӪB M]}ѧG9q!vz%EmGiKxݜ#@h@sM \S'PG5~:[}5KΕ_РA^#yqά󴟎#iq7cr!0@tGv 5Wa3agR .$6`V&.AT{ ۏLD;hnS7S1" ?s(L'XDy `x7wHts|+!;z~#[6̅ca(XI3Z4J~y6Ltooc([le=a!721i,"@اsN2!?2b5@zb˼gX1K-1ʀwݦP2jy9K|b_ zt$Fsտa8vL ލh7IFGzoѿL-#?ܪ#Y&e2c"}zM.@D{ʀ )DQ0V5XϵdFgϗNZ _[fQAaS@rdUJ* f&G)^IUt_AVJb+X\Uogz-Z#ni,)/{nd^Lbے?ˊbjl1&B!ja5wFz ~Eciiȷ_LMCv!i@7OB`GHCC^![x#}y*rLb1/D6GtNutL[V6HX=2H\4v5z.+cĜ'3Z $,LJT PuP$BmPmF[tGN2ҬWgef).h{Em] cxw RV1S[m"DG#!ldؠ< 2}"z3[+Brvx~ Cz %G{nc)Xa/}9WNzέf|feY#_";騏*_@G_^X4Ἐ` F3LICEU504J1)bW4+VpJ]ph~N{(:m> qʰ^`5C0̘3q^mVq 2V̶UaF?LAE\$RB'[ _ 5XR6o^%P.;W W.gM=1JKu=ҏ}Du^ DIҋaYHya $E }M+}Tއऄ qJ*Hn!ݷSa/qJ({vӍfiv9 }A`Lݖ_yR4%ٳZe[z䲰7{<*ɛ9Fǔ!mr$n| }bFVgp,QpV8lH!N%=8*#6y>6~z$.l9)y3 ̕c+ÊH%ّi gd [h^_ ׫& ځy~B&29`(!Fs?'=W fD{\@3; 5@lfRkk}ĸh.ϰD>>֖v!U#P@ϕLgDy ZmQZxZ,;/*J ~N#_B JWG-b-$$yg]zuFDޕK/L8#4kү-*}+.ۥJZ#,ՅAI`XzL[AV*%@ڼMelя= |F~{#b[ٟR%f頢tS )p |bH>u Nj<2|)uN/'"EVV-{Fc ` `p* v_v4 &;n{ JAMhttI*j9AP';jů.HL2n&U>>e:,v0 Hxk h7a~=u!5*[{9:W➪Ӊnr?յk€|GC(ͧT1KNq 3dJ 趡]㛏Z!F;s:%n+GJ/RD3Jrj[q%y`Y3˺/- NC뤈iʥTe\KvFx}g(MߣAHsZ&3 ooLhUT(U4Z(9e%zL _PdzLۿ>WpIfv9k*@$EfQG (貔5X "5^*p:B-^|kz?EɉF293Z".t}P=A&\(|&h?Km^i#q:-nFI81@H[_D `~7g8Uj3;G)dtNM֠|qH7Ep[3 K3S+smaVt9bUr5@܀`&Ɂ[$-{6{U ̲YOK]ᗻidD~7X!U9T. HȞ/tᩴvˠ)B* 9K'o9$)>x:,u~ZjHYGH!E|4YzOCHI\dԆoS=ϼTu]{minhI,Q(5O95n #_un`qcL|f:/|¼jni ;~ .NIݍ^@8shrw\~$z,+!JP1GShN6d_,c&>B3wԪ)t?~h_m$凔m;NK#w s?*{\-|BsCI*͝7+ ISO̹g\f4/{t6fb9v okqΠ]ײ5eJguk0 `߄}4c SWcomJi;FC#aSDr_2 @3뫒o0;LyutȀ!f0D6ymY6n Ivh]-mCl2uW^J#ZtR}I(+J4xfeL;Dr(zWuψ Ӂ ~ch5.ܟ&2(IN/"},qA]h?F9ekKZW iNQs\s\~$bq 䀅hxvyMo9fil'<쮭e3# g\KyF-@K@gi="*A}>K Hų;K xOŘWݺۯa;4V ڐ*fHv蚤yځS}\!?d`itic@⊴;k:Jl Բ1W7y.1+…K/R86lgTM&6`vp]:Ti'%u9n'Ps'Up5>H{d48PJ7dBd%\Q Pㅬyr p M^˘nɁݚ"a. Y8jPGfYNC1 ~#TGcݜ&@z>g{ʋ"ǥ!{kSSaL Zz@S 9Tofz­˲rMz6DFFEޓ {ܔ+!#EwV$uB sԼO'# XjH&&^ZV8R_L/XL-Rp}@YpUbqYH ZKv->ߜB ƱtV"a#,'uWWX4 ^t3D{!3wޞXU1?&Փ\]skmO JQ!yMBA=GE(1ҪD%bMۊa~V}e1v:B{.9nInD1λ+:VUoB-H`;N~iY_$(E VbQ-? x. q%uӮO^{o*j &5B -fDn DÅ8RʭlZ7|%7m[XVU%wF^.QB6~mlN'kee]!ke IK>(+8q{1_{PkfNV2`ۄ׷BB&̖(bc{a㈎{9< $3OZW]qxnjpΛT+,[ejFk<ö*}۲qX溱0ܟERN[roo\\{5Qɏщ/SLJRynuj]<3]3 ;ېu 5nt6Mhf5^&Xd!TD Cj39E:й[ɥEi/2pECS_PƻK(H>JT~/䳟<k,kv1USÔu&4i!qm fh6<)$ze@z`'&-+a`7AjlFm'{# fZ;g&`}iul҅< AyOC $~ \@"$YG+eͦ(F?5_ZwZ_ ēYmV㬖b9qzCIPdjXZHH6QJE@hIʃJQԞL1`xH+2Vu5h4ޣc,_<-o?i96$,_ۉ_~_vVS&>=sιg11B"ȳsܕuwV\G=}60(3n|C:47Jϭ PMڔdT(5e+*^P/p:|dN`[eRY%5t%!JI]zjf+IM&f]׶ؠF^L1w15:[ZCU@a.OET/s9;RcFmg1X[no+ΆJ9q/Q/)Î9K.Y^'B*6sktvs։ݬ'hBuL]s 1SCжs(1!{=y#5|+ТM$16KlR:C{uf9M0,`mfܦ$:BK$Ks{BPj±$=x P2t/8]JVo |UN&Oe"ilk8mTJDö-Bcsk;~XJA FwXj>u* utkPXfq`.˚mH"gvz4kmTGB An֌"z|JŬm5 5u){Lp-pQ!dQ;xY<D2 A Y6 o;E3h,#l#_͈wTyˌr}n3"+=S>i.P\"Q-sHШ7L`L*G. C=V|r_IPNC(Ww^_@7ɦD@7kkfvڎ)Dr4U)@']sBv:UuR;  xtZT0D$ժw{ĚLJSba~'.c>» ^1"=_ZJy Gc/*JA@#h0* z92XX>y'H}<|H]v x (ug2lUbR T`uBc2v&% W"3Ņ HBqx8̗YOmTZqqRNi"ǩKMTE}{_/+*^2F_lpHp2Ѧ "zY]J+V~{=T;7-DX62ۆȵ `%vsy𦽄C@XpeMFAD&jCvgC1 ^p,?FÎ}ueDm:̟^Ă XX:W?>6$(`Z547oi A^[.P 5p`>C_Β(!cI@lOX7X# M8^Py)(# @iLzم!p DWzRFD D)z~W5Lr‰ κW~M;]6yv1iEnq~D LXhS`IƓdc1[KUL.I/4G#3_19A~ EH6&O\-OmpQ" kCd|vĀp IխB9XRd6;$PC ![IH*hkB}96SvsR2]w@sh>w_gQtUu@gX1q*\tfx(6͘e. iWzTĊ٧#s;\d汘TiS?/"LJ% cnuQ+xi6[kY~4N~Zd8xb7hn7٧đt|G4&bd;XyM֞ O!@ GJg`@hT ~ǓKr*# LU,>mX $#'XffnPƑՂ2 D,:4 ~{~]E>[pMƊ #AJJBjC(vӶM/NkŦ j !>LJ8;bQ ;{÷6J(W 1LoMb1-'|8  Bx 10X[:7":JLb|[m4 3[q$^Ѐ$.ST(m! [IߧbjQ3o5 I-LՖF3<0L1b5GtCTpag_"P/v³^FCdJ%`ӓ@bm3RkBcvU@ bH)ߵiJ=g1e <ϒEDU;!ȴբN!#]&/G2g6JG.^U)c y=IyiDieXd<oŋj/T(JPJTbm+Od#0D2FV4j8"RWiGWs<+4'l~W FUC4~[f;h'%6Ff5&U5XRW5'yD#\dL/YٖCƠ}b: :>%wo**ufhmU[I*htMUf׊](4~)M/d )ҿg+vQlHq-wݿn 0o:gP"&=#/4X{$T3z5 8o3#,O{53E(4Bo _ ,`Ζg@%z&BB;k 1FVM։ZƔ׻?wk\b|. t#$h9Ȳvso hέ$~N/@wF ߕQBܽt4yvF"P*?'DU"nI'|= kM 3䏓>/U8E%ͼ="yO '4_xE*;?5E?#ztľ|{x8´m̘^%u`>wux5n&ƣ-~;~̾zfon *r_$la Dw& \üE5Fc (Bz, /+)tWRO`ep \$QfU2su]H[FP%kڮ׺YeaLZ/r?1$,nMӧ3he? s*xf`%QL5$}#uMxW{d-NXC&w[Y+餸"(v0h~5Z[lOGF8D&!""t#TU(5 yBp\.bSOˎ XFJ OSnԡb[2 >Z z56s"޿'J¨IXx(s1x\D* `MIZ P34dH34])fKp(n7sT; D F:@W'w;Nn@q5_߲&DF)|];2EN-fІ-bSb3H~ ;ٳ`/wm?e)It{͸/&f;pUSqUd Im١y㷓9rπDE8>7m,):q?,8Ŭ =D 8iFƣƒXʶƪ \S]3xBbVka<"d(gFZKgw@YpU76 $m7؂RH5OZ7NB[q ;xH) S}@ҫ{ ƩDrw(0vt,nz14-B qf`vlQeBFWPQAG)G|¥fl$/DiWE|(*YR |buCD|{+Ol_(ٳnYlkV^nI2jB5 oǢ)% vw 3VM@wOx*?y"^uu.i8ǚ6C5*>r'-_oxc45ry|ը|cVZ< aXbZ&|qqS8S`41! O\(2J!7DG\8 f:ŶC^k+l58ˇE$5C1:1~j,}{MW ̳)ʩoLI ֥Gk)r']FgcW*k$7}ik%no%=# @zDc .`3za(6""'s/C% qY403a$TgEC>ZGƭ] m^ظVK!+RAX;9?,E)"W䖘ȌEKգПձ>hXY Xs(f\Ь"WS7>Zo|rMQЇ]iG*B3t ԨbŞEk3ao)OۺM綶gp&Xb\KwxNS{uQ>aY-xcmF&MhBedƗ3G2[R Lɘ9S,T]>V D9vv.U`^s&YF. .ҽA1|:D&'ڿC"p(} \H\Yf@_Eh"ժqMvf/)QQu8AX fsD&ciܲ:FaDNͣVKlB 6?䓊h|Lliq׮vgeI a}G|SlXKlFVľ) q P 1/8Ц:TJ4>|I$4ޕU۷DG3s7- @[=TlvJ937EHz"6vDP) # 7uhWvv0.2_ LXe6?J^(_7 ʹ(D` {@S›,4'υs+8\t"ppi)P4Lb&[fn9LQƋX@%)7켇E/E~"A,<:md,$F;DV1%Xf:~\?`N! ֭H #8"?(Qv 9.{q ST( /؎h9I>ꟛ?sMGD7ɐ,c-Wv p\RƷ)MڒZ>-,ezEj&])0͕c"<&Oz9NUPz)!B:.߳q1k} V"R94"rcʼn좚~qv83TOv532|,RI)rofk+Ȏ} Y){N/a~2ƥ~E 9 hrk {q1#-) +"w?w.W5]dFImhO^nAͲRFi%qZC[CkZAx;ML&|, F: 4'ܘ88ggY=?J44W^ @x%MeOA?rE#iPCRQSq5R7[iufzY)㜀&VovdܱR=g}\g `0ć,CtJ C1*G6a6"ؐ=!C% l4@77&槃Em Rmt1а ia5 }y29Qཌ?)'IseW6DA",- rg|36JoZVN,Zžx% R~™F*宰TRʺ;D1'pSqi'ccnĤ #Q˕ 料|Z tT戀ehF_<,Jg1}Ʀ3xe­P G^=>q| _XqrM.t[ nO!,Z9=#1Hn/rw.?01ұAQpjzYU 04o^dߌ1$.(S+1u``Y猲u'U;Ng ]Cڇ!j{Q2:}K3H=]h-/F9(hhbYIU kj؀j>_[!a-gK#yf}wwx6ꭇ1|9$i 듽BL5uTD "fYΣǷ)/ݢW||z+,/!7(B\ Nw{Mx JT9uXX@-"YBmq!O޷Y#+=IJo\ YVQr&2F{9m~}'!SGA׃:nLxy26 t0hSIQat$w7,:~[( ܵqJ?{^ T9,z., <^&W 2 ]vral/xrOR0O n@YTcB%T[p졄 ToA07xѷ@9μn͆4}x#lLՄD~ ?6#ae^azv.ʍ.n t &(cYc[6{N~s˳ri_eљ Q_ب24_.";7Fޅh"`Ǜv)M9_- ԋfݠp%NW/uYVdĨvbg YI yLŻcyE8$4x/&U8n`ﺺڬڗB{ZX]iwT`m oiEXZ!#cSP,HKدCYթC>.iFt"sF/t~sf%T+[fF˱)!cSv+:xk~Cx&Kv`=YAVϲN^ PbݬsJ7nj`v#ol(8fB>+4^R$ *ZsÔMňR@dʍj{T#ېޯycm_h$Pq NGo*<;Y;IF9]]Lq\s*1+.֧ j⌁8 GN5CF0Шa/"t{fq޷7G.-45)fZQda"ypE ^0^ZֹKޗvYE[JK#ɑuH|' AF:4F+9w3 5/l@{yYB>rE1>s\1 - Í3*Ⱦ\j!'LE7Z!C*>Q,GX~>ǑuϪNi{nc@-R(4B%[ȋ!mY >   ; eV7 >,pdʖeػ $vpV<_ o81'4A|z)΅? DOYVb@ݾIQɤ}FK*9{^RlkSGיY]/Htͨwm-PctFє_` k"\g@L ƤCuw62k?ٰ_j9?` YUoR8{(n! \9Ͽz/4&(Jpt>W)5 _xHS@i=~jMFAaLP j@F?y}ϐ򝌧mJr=DCX>%F0:uCbMď&T;;"mBZU˜ -`l?)Zla;kl UG]u$ҢUcTXJB`\&Iʂn]*`{lQE\!&guŸXF̘sYQFCqE &(Pz;զa,+ĹA ;( ,v&zq SB5wG-BtYD[))+kʂOe @²Cm=Nco4U@8jggfz4CΎh!ysGmr2ltݜ-G>CKlړ0;j*gzz,KF qB=K⤍JQQ2A5Z>ਓzSINOG:ؘÍdBs.h 58 ]P^ۂչ$dҩE3gWJۭ0+lw. gi@my2 *ٹ} ?*c΀6Cp )7}Oכ752ChdazPԪ@|c) G ]1k1Ba.EFa`8腀YuQ`X.̅z-ȡP pnyqOR&PiC85X i#D@͙Jzp&Dɸ^ChOon,NpA%ΏtMLVC>x?L -Ҷ0;1Rbq'x hrB\'ur)i"T5WǔIz{*+ qI]&^ fs [Qϣg-U34|Bof⫀HD"|j0g՘-o'%8.#-QkEl.Mn1T3pG-0xbXvry\TŜ9GC5rcmtTʩH3i4hd,^L(&'8e)t{XVsW<8;안YQ̶'uXbqJ^ bi)~R+jy8瘄B|6kq Ix֩K'^n"l+z`4?H Ks4 ={P%_d-l(OԔ)5G] _Bm\7.s V`zGV[DfL 7@?}}dIQXEv'2QmaVڐu*}CY=LpĖ r0YzAٵhE4gG9]|"P|| CDXB*fFu]s?am-,ɖȪ Fەn~0Nn(mҬEBν\w_L0{=#8 ;!J=?Y!#ujsIx~-v7Ur~'D؅}G 7۰Nſ2<"!9lnTD"1f&3jܹ_Dkf8%ν ˬd.S@nba(ҕeп:ߪH }Ҿ >M̓ox3\((a/0OD_Iɱ&n!S e@+gP?+iE2.<ͅ8@Vr8q{t ?_$4i<!Rv|1J,Qf^npYzkPig=t_{"ct ]GԉÿC7*(ǸA3BѸW}օ__!hBLCҫUd{;,Hf(uU3p%b?1wr]x4S?2CsX:Zj`pLY}EGByN+EBb:$C_w舚@|$EުE6Q8>+7'O D8]W4_^x6ߞqȔ> 'Ld.Ms]E`;}u 5$Pp DHmBܵ;S@?ȿb."C#yҗ%XM/ubo%˞O$>cbQ@byOCdא$\;~'He;& /@y'[4ԀSu a [B{8&`JKh?iWgGHIwPتeed}qz1)MŒivi|(9.+fm]vCOha5M2>nA :SަkjVګQ['rq;aWoڜl"y׺Z.cVUZPf)..!~tspuStٜȽ%_DXY.ԎԔ Gp]H g,ߦ3Ɋߪ$/X-i˛oWM/[U]_' hMZ( jͅF7n36cZH`ckV,\L`[fÇ q1%_| Z`tv}oc^;$%D)ߎ޸? #S}b=a&?4t]?[Kۜv8Z˕ǭc1S_a'yYwFk0DہD.^-,Q $7cd2Fhc/Al4= PNji.[)F&̐^0G„09>KNTˆHj46-CV!ݶi+ [J]Le}=Y[a<|İyF_!m{#@`(%˯e鯕?/Twt0wz [;\B6D@PEڡ41q|yQt;YgsC} u]HE>NL =4 뭩_:on m1⽎09g Ę!.|37Ey2q"{yve&d.ƒ>ٽ,Ek\ߥ[V?_D GE,a_xvuPman08\Y<fU C )AV3ƗuAuXs2'+ѐpc = Q=xPK~/3c7bCJm

ݚc#:"6E9uxq8i\"~}Z3OMy}ͱ>o[\[i53RB})XUF vUL'pޟ6/D>% &㑟+> }bi3O']roy.E  .PDe4}V 1S;H3INm-q* bD4C%Z= &5KuHIC+6FvW=aFe2`DrѪde>f\ׄK6&d08?`CFx' g2̩0od"D&KZ <]z.ڞʋVqBWXfJ8hI?݆5ߛ=g;z87Xof& VKZa5a4qTr/!b9C5KZzۓx1iRZ ߫˝G޳Թ1hИߛ FXi~S IXӄ SV7$57oV.%pMN+ :.xؙ>Eγe7^} _In'ʵ4DF!=Dա8рkm>;Ա`\e!3iv_C D2阺 ޠr=DxR̈LUPcyɿi$vbۖ+R}W^V>o%.R_|+n {D=з5gQRǯ{vk2zgU]2YQf=5ʿ@%\9\ǘ!*J")34-*$4cvP3!8Z{E/L#3sUK'Ÿ.2SDJBA1ig4(R=E y4(IC.'lߜӀ]_lɅ?Ea6ec )i8lm. :ejV59|ܪEA'&ցAņJ_|xpZn?Ѹ&JQ \ҫ=GC;[EgȂ>\i'Oqӥ/O;^$Y0N#ԯp˶`K7u_f9ԢK+:́K:7 p0X0V$xV>W_GRB"SuZU4 Q `0\,wp(ߖ7\J)#J d,{ֽ*⭽XF/d:EJ>o&8zA;Nmo*Œ1(+|ibZiXje{+G-OvG͗su㸇b t"IG#/,iSx|/7+l|9kF#ČgP*R&>Y'!˦K/?8U:=KDB9Ԡ/QmY+*Nڰ;bQGԁ~d%k{AX6ϘPO>.Y;N&v|{+Ŝ2Hh{MSssTY0&f $osHfq}_M|Pa<ߠ.ƾ] }5%/h5]-1yy۳yݥ9xlIA9ެ" ,#ft[ɕ;ƹS;DשH}AmqNA0?+<*dSJ{|W3-Cێ=:HV>j:qI/rzw?Qp]HMv3ۺlz%JTBl4h).Q'F# uP^r!1_"D=r ?Ue bgʵnSoGqRz{E9.IsdɎ .iKYe'<c5O&B K5i6'ƪ=r1T}DvED3t/r"tHG++IC7ܒׯ %L}ȦxՏ||tF4DS'cEG\k76'4lbСPO[CPlb<_HГ *RB[-ۍ6f')-pvQI$QrɗW,fj[:}C?i ؚg0EX _㮓IKJ e~?y)sv=#q-a!kBU,f6GY-.I s$5X9"YC\nǗx:'wp9);qVHZjZƫMޕp̴Or=Eޑ7eM*As# T:7-20> 67")K4/yٟ9p 3vNv#?';Ƿ6xLpݩ.N`(zb Q]LcPPJ9 +1+IS'sw;;,%;*SB.qtH#l0=&9U:SGaMqQaoBS>~IΗoidvXjd 6O?MA6"D_MLKգ;"X=4oK w?g/+xQ,wyJ\}߇`J_i3^HǂDm+s =",ub:xFhc3 GBO%19JL7Lpd(7RCR zrl1af }dq-5mFѧRF>PuWon yZ8\!]J[H N۵}ZȞ>(08ƋЏA.}w*kͰIų?$:h l&Vp4[ MF&FWCOgMӪd5: *02KI?K#,:e@qQ[m=3kхjcXsP߳iN*1|XNDfL)KY/ qrX 99vژ}3@L$T;MSq!,~GmuD 8lW1_ C| F"Қ>>ZxuQp@Lt홈#,$TA _=aPQ^0+"ޱWUU-v, ^hG*b˱P8׋Lc^FN=U@k 2QS'xC-U% >$Og WPG]-O3t;y ;$kTf--NgHxʠ'9YYGsc%Ð Sߒ/XVi6P+,lܼYf;Q~kU@<L"%[[.> -vmz3`טt(,F:1*PiPѦ,pi,$T9[Eg}uUcw|6-- Mc%Ϯb EK|j')XJjY>ŸE)jv5/`4ʿe ٢.2SpOѣIܨJOcga:[=+ٹV3KaHQ̜AOmfR5Խ.,y[geX{'.:Ҳ#I}f߈Kc>| γw kF 2obNy.=u8՝ʷX;n9g>fݩi':9rUYoYFn'͂ 5rZI8Bwq\P4m;)lyJZ0ti_A#6Eqp8̄c S;s d9qRd?lDi1jf "ۧk|Maz!{2PR `7Ԁ-/F,s&j{ѾE ;tzyVR,m0ϡ?KrV*H/$`ҥjoQFu5S!EV1/WFDpB2RӼvM)Nʔ3\6]j*ɤtOO4[. hyF(Ż*_@2x  zqZutr6= S&DL|571b,NJ]Dx9YBK0_x|&EzY $1 4$ĊݿQryZt1Dliς)H 6K=H lk4rVzwR7S+ B) :'Ƨs鯏&E1Ey4¡_+W @ nxN,`7{f#Cƴm$1(x]Ng5;&B͟wB$sQ&ӣ:I/jz6̮T2eJ+ndcH 1bǐ~qw1̾ɝޘxݴs3!~0@X% D9~E(^b$[,(, [!TQ#fV.k˛|^•(DzloYL&;{eƺ ǾNpfD=;CJ$Ye&;C3t?Wno;.]R 8VKԝp7w8KdZaDZZp6({- 4@h^an.]8[SJ iK}pnZfކ#:H 1 E :(.S,{!K%IU/%|c~Gl#әkG-ϭzJ,sMnV& 4?lv츷Ŵd!x[(ҙ"/0|m3bjݴ tEgd 946Ve.+\^9 :ME`K+Ihΰ~?2MJ-ԘيWiPv6I@=nJChᨇ.+b#lucӖ(Ӧxpަ %9QSO%R-vk5okF[[/i\]&*I}OªZ{-`nKIifFCˏgKl[$Ja?m(H'SF\o[+qWcJWoLVh~ruG< *GU KJDKbT#F=|@ VW2B&?q&1]>ȧ#-QٿX#" sБ`ZoЌ>)hJ>uVNPyO7 hm 3wj:fPڢ;sº92){U3Ib-!iԹ[nuӕQ rm!KU*fq tb*wD$Y 4|)b8"P WĻq^lL)T}nI¿njmENM\"a0`Sm.[b;eGCh+WR<c»l@ T=SZB-706)mH|/_L)"sX?z')XG/G}P4Ǒ)2߷(4VIߥ52_c9pSΓK*tTjp6,E#$H`w r)+-Fpjx1{,l^\yTzh.0WٽaPRsU>ea#yWf 3A)/IRuk xlB:s-2SQYni^mdp\ȭp<^uM0SNd=V4ޫ! (oO9E6+t It[jݿy DAyqf% q:2h)ZK`xC$ۊ~&Y'1u2q\u.z{iH'NYp w9T4V(HD˨wu6*doyb1kK]a[=5[5<୸Rzš옫yn%Y.99Τ6"VrQnbt=JCA6Bv _b}A}+aA\`h].ޝ6|2Pr/jQԾ(θ1W;0QK*AxVh@AcpU2]lgzkӃhG?,jmG͚ЫQoQ)= -eE:)f*^t)_>1 +p^o{eMFe8gh?IS7(γ@m$^zНZxx:@2t^=pqxQW#"NՀtYdJ]B ԾS޵sV^_V X1+ay*$e+xR$%5T]{; ~XPz~9w!;>f~4Vk$`I)<;]Ԕs,rD6gcTdRi/l}\pAŠ.#0H&=<{3MѸh2g|1,eU?Msƚ0͸^bGNvkx!A Wi,M5'm[qk缱 r_=aj.6.E7>)8#]>pUE2_7uA(}ZX,/u=t)FW-=nV\n0;; #9Qjkel  >j?뇊 qє} |P^爳,>O/kC$ -',=~;̖{<;vOQu5hNh;츯o08eR ~ƦoKqpVFl 7ކ$G|g|1繴B͡3 C5;ӱ%n%cѩUMӽO}'L϶{G#ڐ?,Se hB^nxeg+f[L!o[u({IdJ0@\=˘Mm4ATJ%m.1kRgE5kdZ~ֲ3vՙTw5}(c׎q$=U,G:ؗ=EYnn3j BeuWF? ?S!|}ef KSy{mŮ$6]Ja^΅bf{6AģBID>03n %~:n.Y*xh[t^Aq\^  9FznZ+1B 9> F} 誺UѨa `8«,F%ĭ/c>L)fWI)UOU/i=,UCFgP!+Skx0ph(TۛtxLVU8B'Ȕ%^NOi Dg)vT]oW LM*w_bxˢE"2AD2UDAEL֢>"c 8ZH>i5'=nSkXߺ˔K\xNcx7--I4B j {[7 SnZd+IcplXUiGrAuPڏmQ+h2ڝRvXB>7ϩzӹBvAr%RM|4WQM)wX]=na- PRb‘6g$_ik U;|uT[z$+>Q?ʊ#]&GN' Umc9EA=J\]@_jO`鵣]0% ]ȺDy #2ap3q}\9RuɨDFEp.Z4"{p'W4\埙GhihkBhW5X{H|~0IjŀM&~7>gUﷵ\ >ޛZdSF2?2XV9R#!7Drke|05Bμ@~u+ē6-eqyL|c-;{[ uA},/f5YU|Y~:p< ި%a4Y2P;C[QQ7aI;5EJ|U۰= 'ﳪv]KJ鍚kxz}3}Yl>iKOKnV3W>PˉL:v5 ' ux2@yVUmnJnu: lkk5RcA^oQ<}juoK ZVh r|d[*V htou56|,5;q[$!4vr=F-©X*RIU)Hd/y<3ˡl%9{۫Ak)HĕCxr0dПeY=90jM#4j841*Oj˫D5 |^ՀzJ^/G$Sul鈁ׯ /I0/:c紃"?V/A}<ϵg2ub2!jd̅|ً8XaofHDvlW >n#|{yڄ]4.%=,i<_/@Od< Rt=|m S+0m՟Ɇ۴R݈]O}Jتl*Pr PI&$M1=^А"R0#:u؁y0\zvBaw՚[|H爳K7u<x(8S?rŅ* 'Ʉd)hDgFs෮flS3 <ef8o',pejVS_"}$¯sct{bR%?XDrZ"ї@t֋5} $%iN:AW"Oat5xs^Zw~ z/. ;K%+UXw qdžTdc]Qxk1&^w*cK'W"~m5pEփz>̮9a>" TWaWWv+:eH[J&{S\Ķ%*eQq7Æܾ}fLLpm Q!zob0XFqa*KA* 8ȉ 7N%ա2Ǫ%ZiUN2o8EBȝer뙮aDYXE=|2cE#"S|:fy~(qFljH!*.涅V~vG3 #l|{3a&yENOSvUGmד" %wbb}XcXnM><"3MtI\&s2l4E"tg6M~x|Cv}DߛY==:ƹ_ٷ0p6Q̒W|hFZqr5]w052뒲>V`@C!mMDg+4K%f+`Hz= R;i KAOϕ7mނS$]$`_Q Z'a݋D}߁9&p4N8޾6{Ek$J29ACX8g2 /[s|(Lm޷>>n8 7r.CmI~0=uH,(:{8Jsݛ|'k"J,1fIPz/7v|:=!Fw[0 J&S\?YI4O=nX!Sg?>Md++RQe6,ud U)m[}#:MOtvMĢX]Cu8l0Pئdݦ͔2zCaMK浥)X,CNj[O''ܻ/O$>.T\鲇;!rUu2>xJRjTQ9Rؒ'@!ڻRNI%b`=r8OlU5!B&>Lal^!aX_cY)q]F*u"E/s}n{Oo$PM%'b Eds%A QU6+r'peua*Si鹅/!8p$k{,ؔ`5@WS/P@۪ bM12U QtN٭JKQD2@\U3@ hűv9.jo4ŅX`)YG g|'' $9t[^.n(}Ѹǥ ㋣C^mHI,D?O@-43vNzp$D{Jf+}-oAy kUU)mm뗃Ϫb(F_KmUΡ''3Da "қAv5-$F EadT v1I=e,bxe lKBk~{=T"W@s$'j#ƓД7LcPWu%ei<=]3 ƥoO-JFI f 'LyhtKVnBVo'"/n HEA b7nO-ellQ6T_W)Y6*cRVrI]<#Ĩ& _y@#YͶi> }#[h 3 mOՒcS"'ü@RAO>WyAmKSO/(Aыv-ʉlN֜[06G]E(j b(ح҃WLNݙcCYۯYj(➔;.eT ;UM;Yu0,z*.q:9 Л-,דݕuQ  ]pA 4dLTZinЗzz RIAWjjssU'+$_8pvmP؏9mkzjJ`/p* ݚ{5aZF}IJuw\/^ oX=UXLD09COߞ)g'"ޞS_7+0F!\ h0U`~?sZ~4d\~کCUė#'+eA*W@#ɔy#hugz&)fEi JPrBbʅP{,׊X"Ͽ^gUVt nt<ʤY(}>ӗ Zk\lj4m? Y͒yc*#MR9 o**RDC85Cʂ+!7IQhnu1i>;R t c^LT[?4Iu2?6,.1e3X/͕.z8gjkO!I5zӓ0WUM8I&D$ ªf0f7xU[Kn:1jv 帙͎ڨkpf<߳<&RKԴJD‰]'7|(.z!, 1": ׁh)FF9׌`p SfH \_}ـיwΕљs;;V'mQrwz~ sĴ(#d3GlѽUb V$@{g,53b6)[z"l,mvtv߽nusG2g^u ސ(N1Mh>Ӈ̇MV\rz*h WEǎ+cBK?z_Ѻ kүmp;UP .bGso_駷xZm{.낡Ƽ,U*\])4S7Jx7?~s<}%p.adn$2uXSB}^8n{M8Wr:/cCN X;1d4LSռ?#,b{FO[cıA pJlc=[I[O纤,4N鰻>y,hGӻARFA A=` }.9Ysxtcw_y7ny?ǜذː*v(,N8B}F:54/=0M۸I~?̓xܝ ƒ$KX3bs> 1Z^!f>_u )-84.I+jŝB?3Rw,ܡGJB +Jl`b@`+02ڛ(uŴP[m)Vx.! ]w'$֪kt 7`Eyp= eiPR#9RG- cg]Xd|<Ž3=`${39F[n-  *ĨΡQ-VPؾw^AǸ5UMb%6E++e:|5: Oӈj4;!_ORz<. )>[Hq!TK˒K}*+INKy[p^Nn'6B3] Uyq9Q4|lU]/dFI@0x9)%S[ʚt]1l͂xD$IpU a;@N21 콬,k3ԐGVzKFcߍHIZ{#*g6r0ֿ$9m;:4?ÃABe4ʘH,Q3nYn% "sTXy=*괒jM|>2.6^ qϒ\ȔJBR#|Np݇]%( iH wWV &xyonlzC k̡KH´J%@2#}}B ]9DZp= 4Ϭ\EVt$ӿ+zyF´y_eRcrW#$G?V)Qx4̃l)R+" ~˝oDmZ hZQֈ/Z/^ C$lB.L}e^],hcL ƻ~O @0D-y{FIh@*RWkd $=]`XفJB J>9@0X,>;MDW"ZS,QW$ͦ$$zZЏdy b(Qܱ^|HFWS~9k`]!s_qwRܺTO$M(}dۥ_if:J ?[D_J%bӗ^ o^o}9!Co_OgYRkFKKDBpu`g|&Jlz{Md$,! !99֋^ ϬmZ<[|ul* lSqN-pE'vsWW ː{|Mf_/ E^ɣ{6xYL ,{na­r|;t<z LuԜ^/HtM6̩xK8sYQrR5 )/Zs@8͖NKkU-#ۭUdM{{aMPVR^QGK)?v/v%^]^`ZtT'"SBThLRU荊\3e ҘRlMxy^;|Ew"S4$ Gf (NMa&q scCj< p]rAܵ^C&+2dڦ}GcVDa"^wm!-0g㪞O3:a lU ;@R2 ˎAcdPUhjtH:uO1jѦWوdLNl[[Jgot<󡉧V7Ckeq3O㴐"q8.k=c YH_o¼39#( Rlؑ!CuO`ΒpU2~n+U\{,9}SzP1 ۉoʱ^ lp=>k|VN `6EL9s=*b&a5I8X h):P$`}\ˌ^x)ǵ2~0LS,a4%X+@6hebɲi`sPkbuPr7h1vkk.;[3hNDƬL!&/k4gM6zjYS]$"CmqhE'م0faռUc)yr–M?դ '"@"OkGM-u)Y[ FhpqzG&c΂d6Lb 1a@̒zBtj|5)kjnf7>&j_F7$CsfD7}Q*0ZdOy$q؁4c @}㑉l-[ Dzc h"J5:2we kqhUx]kR=< wrҝ^ąǖk.4TBK;-i=,$\0PиzJ3Qtc%U_bCчL\nb`.5`KI!ݱ,aN{EԜଙx햜gbmޞ&VB/̴p}gJK)>)q1Ib-6L#YM0  .elƔ"K-0ԥjOVqz .?kx|Xp9ktR`bsz'ـ┸_WMyna um>}Qo(kuA,Vi 9PsOh|#K+G&brFN92iV1_t VS`UMDvND3RUIU_ƛ/1?C%x-P;P,*EIG1x{N\ZDtbØA4l'Ami @sݳx>;Sy5!*bg77S=x -QR!qH&HcKZR(I i,t@#͐d!4sm<[?A  3 3*_)>鬄ve@{ZbĊNhD<;Bw ],ukI.b: rRkJWgc_ E^h A;r_:}jgNb+' A,s8  V}wDmyKOC]rAmy"A["~Ba.h? x6KёDϓq!L-R8J1BH-uEL+wO"S#7W 7.jpRtC]Rz wv3 )+ZF'4;WZsKuy^N^̋&ύg .C0[*am+FT759H!׫@ ų9[>8A#Z+q"%V, 1H~JMrWN"@IϠ8N#N2י5&@pd={퓺beѶpr|4mQL (D<DץS 8U0Zm RRFYz'g eHuJç0Cr/Dpn@?oIW_Vp{~2a%FƄ@E]KJ+5 D@c#XNqk>MI:޿՛6t=uUw bj,H |YJ8?IџOwl }ç',/ApO o#N_{Q>ݮ +ȡ}wȯ:mIZ]|W:9lj*v-mB5taW\e@>24R@P4jr|6B٤K}-;*Ns,J&P%^^knг-nF k)L<)3LA7bQΔOH:eJE*KoB>'&_Qs~Ad 5|~n.8[G#;:CzB3 ߽bD>>N{7uR9++Pȑ涍{֧VbbBr5*j^ۍR.3aO 1p**~!f7@ j= }t`^RdÏDVm:jx Dub@>$46h{#n, K_f^4$#ELΛDT5`Q}K, 0WwJ|1rP*z׳&%EFPԡ+]iL֏s)sjtu@TOEfH[r,f_*W#ߔA7#7E01V-y'8R l4݆*Ox(!m+FGkOj͚$Pm<Hc&ݤ.q|ta6 Ez2hIJGǔ`;FdH \ֽ\$ftbn"hܥ K\~ϝTZ"}NV7t5otP'0b,ᶦ=ɋӖ ߶?7$|UAƲڕ E!Ǫs許p qhDP*mr6뱤v٘"t CXvAҼCB`RE|v_"%&p/+oi] P# }J\r2soGd*&Jg7xh-Ǜd`)Xi JjKr=rs&AUt:pFcEse1h(S~|29eĠ0sGt4[Y cκ:y"4 U{6jKѼM#p3k+(&O"/ӥdA+‚\n8Ge4Su~!A +x̃TC!\ŭVCz?\ɣ +IV_ص[ ÷*Xc@yu~άK‹)_MRfwC;)gC%E7z|gebqT5{u#YErB@eaSMi%U{y+k1!F yf\g TS^C2*,_}4ܩSDʛ,ھ[>8.Z 4(ǚ _w[&8 ~^E{QPx-V;-Sw/4XBEB'/-4Eg&}bl YZT@H9r\$#+=h1iV"=h͚(c)DT3QԆX@F{m:zPXH oSӏ'}%ukˢ$/T0DpX g"j L) Дnڭfđ)s;Qo2}B:6O +{O`iOB$Xf5?ϟƌԠ{/o2m ]7@8'WOt,~A#?#|rlRѕ9,t-Cؾ􅗂nߤ6z^„ELs3L%4f09&.'Ѽ*Ű3߉I"sF\Sދ!<W$S%CZ`BԟsNGJ?pS0XѐSY, 1\*0\B fͪhoWSQj,#3j YM~ 6d 8W9ncN\&AJn+aq2[)Mwm0U=5woNFp?e  &712ezv3ڙ_Ƶ#׸6ouq=̳hS'͒,}$_CjX}uK!%KGo@SOȾg 9y4㦬lx;Y8.fKZ];ZC^$1CP!1vUO ҞX^`9v&qĘ)?Χ%L(`/A*{5*ꋁ5E%x #9F\xqȔ vL,u,Gx BbZzQ; bKD6wV6=*B'z4Ar U#U@ d6J͍|M~I`ph bQr;xƶvP?!O(UR5z([diLf3Ԏ8aH [>[ 8}}تLei)vxQ*>{8*$*7r=pߦ-3s*YZw1,B~-!T" Р&6NoZ>l\<҂u_EN kQq?qyp>Z<1@miG*m?m(`+Fi@g+bgSO1Kk/-F̈zwRO7`&TRH 9,ULepMW[1[:mfP0<l3T0ȅt0ڏ#uKrZC*I&!pD%"NNq*<6*:gȈIʠii">iy#KfH:n@ٰB?VmtZ.DNTc.E:/ c@-[.7:] NF_uO䃫cbFln})ڧ!l{ż̚(+$IN{雙 .YP$ #+SY4:Y:alඅv5IٴT#j&:*x)&h[n8dtLY KoS '`F۽Uo@RF,5=s"C>pbuxZpKe|ħ CZ*o mrEscw%l$-wanu6`h?5,=+iT8q[is $-9-؋3(aOZvB^en?G0>ـ/d=Hxق0ډjEܘ1?P QAcT0Esc >cg, \2AtOXh#I˞YD19n۸W\:',JX#a8e,o(AR VJ4_cXM&}$2lW$em/w;.,DةTUh~N٨PmW+7h[1X}lFPk\k!8^s=uV f9gq0A-oMy_.wm҉5C`iM$X5*~@ |R2k<%ez}12XXvC=m)x(q t [V(3AD%eeK%tY N, `<@65YӀөv~QۨhrfǒTd=4OJ3{"PւizN|DxG>+{2OYNPML0J+7`cZ&` \[Ş=Ȳ QR%#seZA)-Ȃ̊嵥`xEx U@K5^㶗 n3rx݌DwߣLrBmjĚ5rRy֕#}D%W+T  KXSA _3\;ĺD9N5 xg6N%5rUX Ljz3_qrVdq65ٟnyuMl9?S8<&6F=Ul^^uVKxKNP"ӛF_HihB 1H릤fNk0&곗 P{ *pSFz1V%eO}C_f-q!,F2ɋ KPNoZSHow;Jd}$~x@QrH3d״NnN654UJkB-E&*Nj^n<0wZ)h  mS"% F.0L;F<' /7B3pM/HcI/ YV5BlfO*I& Z;OӐ߻\[]TS%3kn8g-Wث!^ ( H#[|!la̮ } ,|!EOY7HC2Z*H>)_5`E5aN1OhSO9+?Nx7w ߣUSZVb;ovH J:Rυc&d^(*f/@=KGCrnsUYL/U jK#IG&1;At?ş7K\%Lܖu^4%O9k<[KfsZ5n n-msdDDntHO.ܜtx?k&x8κ⽪i&@*-?Eʔ"{(cNuEA?R+f,"lь+*J>jUb+10Rq<Cxw4>%x{W䘲W+(xҨaM&5]4e/nZJ 5mWwZ``&gLۃưl'D$d+u] B "ķ>T FkN",>}CeOá,{j!;Ojz'cFDIXa7|.vN?ʡt=\wq-=M`B-GwD>e;9s&Ha\IB<U&^b7ܔD z%y;$8*BW @Q56j*C/^85@`$t4a`>SrbeG=FY#P7lr^9/[pcG C%7Z]HdшN 8+~\ 0`Ak `A29䝕 X1TK:LBPY!+yA Ե(`6?2`];3qgy4 Ƃ{$Zs^l<,sP6'KDM/UDDV{X\ypme?:$P^jA $ (ܣy^LMGTl fli -b6ه%Kz]/&tN>pںum=2ҭ֠Aoy&8ݵLN?-J!٦y\G J})L(um(b_oT&n(. 3xhwaYr~K2@hSW #J ]DbڡsGYw!NɈ` %tWele_ij㝨n\1b:Gr^2HaRՏ~B.ij-wE?u-а< E.۸ >y Y3MMfth= ¯ gv3H{wҼC'g#kc-W]ގ{7be<Ė٣8h)bХ^AkS$XWs8F3ֳxDOauQ}PPX) q]ΔKn@C.2,JGu _x2Hÿ T89altnl ~xI~ c$>_hsI! ],35 `AF\a^l5 XGb@8nq'\="w&;Z;}t)e+L8`N=8LKeθW$|\Q@fX¢pENg2`?'z#z3:K^-ڪUE-/3Rؾ5سupdGs&x|J,nD||eUB ^ʱGK89U@ɴhl :9ʕbUB<4]jmfc~OȂ/7Sj8iE%Kwl [3z h+uMe2YYpQzst F|[ V?SLF 8w}))nEцӶ-/ K]aq(_Pa!hPqA2}MU{ >23Ū Uzz89'I(mBZp;T{.e넦ЍJ, O1-7h,L?HbWn;^/G;\+v<_O?nͲ1vfRcLfOl!Ӊ6RT:݇![yz׆!*]2w }VR6hԋb)CU7 "=_!`3E 9CK|߶-H&0APUX kzQwm!Sm5rWܻIt ({{r?8\+v=JFx ,_U{?`B&_uژViwBwgd[CIÏ )|o`Gӊ$NZEK+6 0vˮ kHB-ϻ)/ʲN[ޭ׭MW MNvJiDRC \IZTF$9oz= 6XpM+>\D]N%L6Jh9j92n"',,ŸK\ܗ1b ϸi׿/m}rdV@buUV M4t6i}=ԕ B5*"j@ݗ1 Kߜ%q*6gjܗ0Ud/Q|kg< >) X[?{/\Q$pٲ}]1Jj~.!Iz )[n #-#Z4vr``uѰ1, t+j8dHLMZ%I{(Ӎu3vZbDHY*4MД"|?u#őGoii-|H%ߵ,ed \.(#; qFzT)>?CUS%WiX6g'Іcu  #KOl"]W2O!!D[4t'7.>4 N9r&IISOr axf4$h rܝ<+yQWb^t\M8_ us8*]¥AnG0^5~jQ6+ƌlEвhe"nǃgN-.yW.l)R[tjULrX vYw`Ik^[pz5yoLN7*l!fr c8m;R"iXbQ3U>y:I6W?b Pv=%utzD^2# p/`u\1hu :*jI^_2 +U|7[p}-合p}Ob.&HܦazM1|<7h&V=ag̩2m&}D'(݇Vz8yjc{zߧ9wxz݌3X-#V5/U 'Z8f3\]SxS < r]gK) ť.Ĥ.r7A]]Ȏ,mY)uGA0cƱ1&r-K6(̃ZZ*N6֦TÜהV~&-hgd[a&U5iDm)H+o'< ݔa1* 6DE>uAzЃN,T9,(NY,ﰻ/QCͲQ Xj:N1%S#u`|gk⛛ _|KEH!%EN/^lNZ&ɕuH7.H8W7./ RU|dkr4/ʁrEbڕpQvXTMPua3r ѹhT JeTIjTP?2-PVAfZێui|j~{ah*sp4_ @--[̘*77uʂzy v"/Eu ffqҫ% JwX>˞pB)4)LhD*N)Wd\D-->XK^{Z; W^ =@t9#Pa||c>f_wo&-bYLyw^/կg`ۜӝI/xP\(hc(w9PyixJ4ܼe2x#8x2̈́  MCfz.$D@GRz'pC]xDne'&QZ bkцYmo"螁"T^̩)mq`=PxI4rY6-֚:ҲYTl`smyvXFk(#Dp)6:M8u G\>Sjx6?xٛ| 1^gi5|:̵0(jWeg1s|qf|}mH7i;R`ըh\(61_H4É0Eȕ2,fH>4ҫDQ7`2%z;8 v>wس.ޖ_-Dܵ':j*ݚ"VY20 ÎLj2z\ jWθM_b65dv]0( zhWL;z: *V1=y$swŚ}{[c 9!F) _@7Z4cDh?A{^tD~6x YNx Ow6eC!.x*mȵI 20f;7TDsnEڸLav17e哅$YPWK3[sKl(,!-^fQ8lᄫ 1M P'd%^B%[[FT2h1 _ Gq Une\823es>.W3V@uL>C6#tjU<4*!2٤[wƅ<9^l{R7/Oh!zSdhl֜hҝ="CΈ_i'tP0]^Iۼ{DXZ6^>-j"==P%wX`rS;L^"bԘ\]WJLKm--UO@~iu(OqLT]=i}6hb8O`P,bB[j#T yݎ? EQQb~dai _3Imk؛Z>7*H}ʐTɞ.9.]"_ ^=!$1lxAK\D6${kAv_2 27jۚM-B#yvU<)9޿m0l^_Ɵl]"S Y.Ź о8Uʌes_ DX*We wFi: YVǕs"Xn?H潄r4$D~:ՠB>-„a~IcE.yP#tnsJ EsiX?d1T0'Z;)?8軖u3F)󭚍L2g /q0PM|g|`_R(*b(1IVtex.~JF'N8P`eַ> LqmQ&xUsti,A2f[qW>3#" m3SNkXmo盔A!E.uV!=#䕦N/}7E9$5EaED c7ݗnV#Oq3rh l:#YOٵrM;{ M5WGlV /,kZP*zp/O7&KTj hD^T{D}_ ]xfqv%T6: `@O,LוWOlWWYcI5d ȺSIzkhe&O*9=0mGP1:vtNguvAoD>fU2xKdRU>=;[VjcCU<#@Rd3=_\4*)+>JSPZ~U1#\ҝ(G׬+n5TR[нG6}5,~;gJo1d\IlVgڴt!TC3UfF0`ïzc #8۬Mq~Usz3h,r;]HM;_7Yq/1IKC' *{5@.xσ?OJBm:51>q;XEII#VQGzy.M#A'¦ C.aĠl"`:SBT)R5Tw y/2X|#sϮ\}j?&PQiד*J$/ghI3}EcѐSH44^Ta]:d_#?T]/:ʀGD,QQCm4{:#-bMX<-lh20m"OL宏%kK++jd/"-x 1 io[ 6}L`*橁b6;Bkm'RM!IK__M&1WiCX>k ?ǩCی_Y3RňV1)}ֺ%o ,t :BwK:r:cqb|wD 6AqD=ũ/V($o|qnn͒t}+pz,kO'ݭwhCLIDLD3<{`U.Fq}q3!q}*\$*(4nϐ #,PhƉ!h2gwJ+?akPKY 5xnuJ37)1Kޝd<[)6mñ-xmJ JJrr3X|ײ-қjq3*@C ~p1CRkaO8xP]DIA6'S[1j37zϗpH R;lJa-Б;F/>xBψܺ.l#QSX #YabD43;K>y#h6daEkFru(-=pNQu?\Jvfl DB2K*^uh X _K(E;œ.d+0y랞*RKњos;ڃOjܿU+r*{4vߋeyHO#cRRj"AʬĦ]!fJײ\bx}}¹g#tM<- O͡Z ioՄS8v?,,%vIɺpGŽ3M@ߑ1MS焳3p,9#ޏ~|{+c,čFcoRgKP}@4\7?WxޟƞZz`\7|"ArK#ȐٍПET="VΉ,T|Joѧ&9Kuh^Wk.6yZqZ^W(RJ1O1b3dȅ7-¾e { 2Ы{##J"2)EjƌX¹bH \$yB]JR%&0@Tvc|wۓ_w'5V2h:GlJnPa9Km7BIa9ssL[fFr"Ut[]꿝sPF_CΉ?5QH El ѽ1k͘ѕ'x%5, atSt2592{ÖMBo疫*QqD8K?adݍbf,#Dnä_`f`KYKwo/rىDpTTb>Za+\/a.kLgUYJT׀zI%ToKhai݆v?(עr{XH@"2GZZ rOӤD*uFMTdr3w==hXOHXTWoފ[ jjzJ0x;W}0fG۵=T CP*- :;oߜ`ɀɼaCGΚgl<#M(N٧kik QIRD,bs5[#*S^y]>1~).#kϋ,FwVB~'X-Bw)5݈\p8xiqZxW{P/{v|nȕ}ժ zlN7]DB0<枿IQ5?ۆu1E $9(E2 0C 5Uo!nAueD GErǭC[t,e72 ?s؜@3ٌt Up:JOL=XGڧi>6_B.-27+6ѥC ;&fPUb H5mŮasY' *U+< ^%zoݿ|#oD1 mg ^`WT}|Hď_su^XQ>e9փ)mVEəF5G[ӹ}[n^ϗtGх2jDy[T^TQü#T:,{di&d4n 6ayL ԅ>G@|)M#ل.o3ȸ%{ 24&%aHus"zT{3/a|mg ]ҨѪ q˾B78q$|gNb ;NgW\-mf!Z ҥ7da 煏May=XyM`'-ꑷaEUDY6`vP =gr~^LY؅63)X :XѾYNh80 C3Uz;ʓL%VZ]fK%U;%Y(}=#(e.K@ j5:iZW_-vg)ʖ)6EY@Ժ ѣahNP =;g}\$}|Mqm&FȈN)M<>{XiJe_S4$5SbC! r, "Jg+",x~ B%SvWﭪxbNSttLpK:Ȩ|\P` ˆ+>FUvfKLcF)yFD<8sO1TҭS_: AR>!z,N?RA>'n ~L_#G⿘ԆcG{cUs6_W2o) tsS\/qBrPuWpBM( eן~ienpr^ x Ӻ:wXxAj2Vˀ@&"cfg 1_ #{ᙡe ^wTmsAIίH!G#L./\-F.x<;Oj-i Z.E+G@i?{WN oI[15wҙ=)n7B"#r{bwcP=s hVFׄ@jKo08P/GI;Ż2vAa"e^>38@1iz|xy&SL~}{SNhSd$=t@{Y[qMڇI?^-i׀Eaօa~"X|2?j wB+(T|zD>Z9,jf]9j o:[&ISN?NmjaҖh3+?|ʥD調rGiVu2kŞ9J>["m:\sKn@SHu 麗vs@-o=폦!BKBN9]eZdj̝Jn2 7z=`7 M谵7sFD1f0Էa6nC ^?DQ՜RLo;svPoݏpo ek?YA1"b`jO*ƦE&Iw0Ws݃6{{zşn1]*g\ n CBI8jAͶ^FL=54eWΛCs{C 9W+^^7P2baϐlAKlϯb\ݬH2ۊ4@,;[ G0| t5ļl{|ǘK0yl] =7}VNIV "3JI h/=9I.>^Z>Sl=Dbk*}8lk ] 5Q܉1 қ!ϹKM૷|Y<*wOC#c IqO.ִZV Aj^jؾ2 *Ys4{,N+E$EN4iJ=k{y㮫cpR&˞^9ILpI_@E^jUz'dա=̴٢+bMs7USn9`ɖ^fos[U%N]KH|_%(pSްk۔mk2VL ޓLy&8CNDHݦipRؖ**g%sϳLSh2 H#GSkDM[A#uP$uTAFk{kMi8Az 4 Tspri5N=VZ0(60⟮mSp"zo0dqȉ(U*+7۔Z`%m6;YQmb9ĺqbPsFЋeʪK6Kn CO~T{BsвKnu(Qb-W-vTdݿ-;̨%.6Mvh΅ĔA`38_]'5I*rXHӳn(f3IlneCԖR0V@od,skClk eBB6u^8`RЏ0~ 2(+anMCT/fcnYb5.}ں>6)}Ei J/9o[؍Z9W8y`7s UJ8P P[xR9I^NKB%0CcԶ|c(e,V(e98Կ#@ވ|yPL{o>Vg#a6\Tm&hYXJ-T8$XXMgLy\ ŧ^ρ0ׂ%gK;SC<vC9F0FPSʖez<:3<=7HJ\ J1ɷ'nj〮d<s\]ڊɿ-|@My6_b:khHe;+Oit*,f ۑmү3^ hma8($Ǝ+@fH@^~Fnfl]CpATze#ٱɑLG kBiNWlGbSdu62]V<fS{I* خFf綜5j. nݬJ16 ;hlk\9-8&mz6 fpL4kC0ВJ$7A.C&/Am6횴sF3yΙRS Q⿥ϧkdeL>}sa]l̞*5kώAC0Wv2rDUb8,@{='S QD䉌H&pShWc+gJ8GYF#M!E[SR?;|+ECwwEy A$1qK[W*1SpЄ td#1s42W@U]Ƒ<,1V8 ̨8pp 6/ݫ9N~4h&%$00ڠEsq#bG=С+UfPgz\gܠl y迖`nqp'SK=rWQаkGhQ Rg;}cߘ 1)wZȾ$ LQ˨'k!@ ] !9qȎ12MKw%eAlAi wѢrCVuƦUɩT@Ebc ŰTDbpg D'=ExǞOOjz@tӨa ;rki!H2gDm}NȾ NuRAY E]w_o0@HzM|ȱU6jQ{%^eS>2OaĘivucĔy-X`bM[2vAL}M 'n{h;jS;i|q*CJ{E~H J(y73_n3 T% X4G*Tീ ݮ&IϊGM*+ HZF nUpr~~@6=4CR'OeJep IvE#!qH_xٮBbfR2^Td~p΄fAy'BW4J@ كcR41Uj,_e+2?mnJ4!Çi-xhTP4q|1DilIDTy_+$%*첡 nX`+6\2b!c] abxPVlOp*2c}Q)@WݗdѶ#Ƹ,*AvLHlmxUkNJ1AstK/ߒ.eʢ-oƢ@ٓn2FK57i#CԸJz,(ZF&\p^x T_zo蘇9nH.U{^=z%!@O~g>ѯ&3\n5SX?P3oO)$lT]́'wLOZT"79qtT֏?46ϊ\ @ult8TNϔ}.agrZ-R&^; te?jAgD ."K]ӹ*4vRd@Gx4&̤}e@Ǔ=unUO>aeC VYE:☑{+iS?穁mhYu1pa h.fhS^O0]4uGd)N~F/õUViskjP j4YP" ~]]W7O[]NFc 9\ӎapVy;C`ŧgל0~LWxfcIy7P=3MS5!&JgC!nF. ?ݡ Y<%&(C:CIw\ av3ptGĝ^O{:w^P'O%KŸx}z=NxsÈZ<ڼ H˥Tk yxE~{5@?>l.u;F4uoU~>\7[-sГ1:wgX;Ze B΢%m?znR$m;3Rua"t hZ+oxglKnD_Vo uwOǃf VfdeKtD؅'US=sۼw}<:vuXRqb}8۶ߎf}?(G@/D(ɃC=[#x:EaY#|D;71owрT-L~N {&_0^/j/(Hz U۽Z'_/S WB[Z7&A^Lrw6/Z"e^fk'hm:S_xX`ANcMG,~8BݹP&TЏ4pUhԽbLi_d.k*[ΟtTjb*yʐ@)߾'οz%_GU9x߰jp!<\Ȁ nI\ٜysK[n*Xows@ .PwO oqmv8aݏAb_ĜEA?-LUDcx n}V<7~YM:5Pm5xMPrz_z`=QfB*忘sSOL1p1q*RrǘJ9鄦֒Rg/<z^H87,b&^[K;L]<'즢-&/i}U "֏@@$AM]<# #f7oZܤ4,pb4f7))6Efe~ZNO"A.F =/#X1#j8؛ ?p&Dr"Ta肺!<~m`90QRSTZ&by6Ssv;ҐziUu)oD}v q2W S?ᆽo[t]MN|@N2yMSiʍ3ۘkHEnkqBaR2RpϺ1tBzŁ-! :cwLCdۗhNqS؈^b;U8`]3q;ðj6bNZ(~զ<3f4SrҔaE76_ k ,7mն 74# k&^/zr9ki "JMk܊>{9HkpoTDHḏ~`wYwfk ~zpe7+],wAPC-ܭPTUNL7ՠJ\UF^WaLhn7~S:W8VGZ O콉:Xu8 Q:1 z}>Wy#ǃyDd^]8&@P0.2bxl?vtO$zZM]×KI;vHXm&' YmLA-@by6"?ʀϫS( ·)OK5 6UP+ b+-,-_ \GSs]o$uU"Xhe~G]Q0VJ7 RIz$Iz[Pq@ c@՗뾣7`0y5Vb8jT׸dJc($a:^*b&A^0$GL351wX9d )L|O$E۲9q+hLVE  UqAhqpҹ$2sҪ+Pէ|Etzw5"miB 4 g&Ĝʮ*9J.S!\1zR_P$uB:  ȶ "U-x0guHKڭ7S g˩m9.ha^VBjlLHz7)q*`jVkWKgF9M1mjéLVݬ,H@9PK*q+}(|2)R7ԦFW F3ɗ4AK\^VJ3HyiLaJ GJ(궼إ"td ӡ[4lߛ*LAU=%듧Edձ%SԼVl$#b>r{ŒW%l7saî?'y+)O+p &* y8JKjr-`S/0eGoPϑ"e:NvՊ1qw[!S*1 \+>:x7ǟSt`fkw`Eܔ`@GwPfK͎-<ό޻(}<'aoE5q_Ίg59a®{cV-/O~rq}hmDU3U②(EwxV҂L.&@.@tp/ZB/EiǸeWt r{c/f?P-Hљ(uuF[a|\jVe,X"';?ս%iwnFX(J2<5 [_m-"%h.Y ןd9BnTne`3;)[;"B%_ hst_)y^]m[ V>ruZuĭ3F-;Đ˪YW >Ж#P #ĕծ H:{iBkWuQ^KRWty_O՗FlNYQ$Q{R[ <8^$@f7~%WԶU9*o*Mh! {Q @CB\<嚧7|'l/3+u'x4?v5T4d0hye*>n?$ԕJ]DFD1Nfٙ% x3hx 5Uy+UB{O_w)gP`'lw_T6)޴4}jڿ㟰„~{`v㟢 ҡq;?'i*Mr)CɣANΉ]#Y/u[pf;hP }lF'&Td:1iUPKmmPB_o*@*VYvr&!2*~S 7w/ OZ/y*:XRljQtb?_#ݬ}#T''J> IFѻ?:=l?I6\iiȮI1z!\7[SJV{zM&P7" ƭ/onQd&0)n8X/3$j ":Od՗(i80Pɖ J6x'Tt ,O;)B3@,wM.[_U#ok9gB@u|W87(4o.IESk û`cC:Z=3t>H c0=I+J 0 J+8;d0\m֋hY+[=: HH<ѥ s`U@!Mpք8д5{'̭ ӠX1~HQL)8*i].D3<7+o:dF2{l&#(*czGkrt":mA〞 F=8 x:C. T84`dMJ>KI=k#S;_=$3)XȻ`Z t'ŎN{P'ɿc,l2s@]-[gD: X]Y6ZtG{^|U8!@q9uE[fr浠uEt{2JmUGlSR^dxulZCfļ [OD قًm2?̮<0D5O8FA0TP8eO7 -'sCMԅ .c\6tɦPgrp;>*[ًlp:Z _5"Hڕ/Vw|zAJ疕^R3͂C&yfq^*<͚߯hԧs]F{cd<}rTi uU.M8FhƊ/9LoW';@,RyHbĦ$]P W`ߏIc \L*"mQʽ &cv5k5Ъvs(ܧC|1Nktm32}}`T}1Hq99G-< 6m(=-dDhN3ICH8k]OItex!6M9pMJčfY~`ѠKO*|l &fWoK-_~ÂL6;kjV'xMWG.W`b;}%Y? !;&@&ST\v+mF}NM\bG QnVq`"$LpGt5'wO* *~M;L^7H)0愛p gGNAz cUcP'+}=rMOރX-GՌfU^J@rmd`rS£nf뀱Y?yk# dz!LJmrvfH&h'wZ a:烯ejI6u:YY5mp\eQ„Aڗ/UTՀ\="Pn GN[JepKdYƭO9:;` t~W։pU;4l&=kRɑo97%ޙna9tvu7t՗h!C)>޳(eF8-#Ah=%EP).^.;YG-|<\/ʳ6pĺdg5MclJ쀾Ev>ܩvlnoȂ E"BHOpwO|1`?qOn<#-(*F*\3( KF`ۑ:;PnJe~]}(7(%`׸VF}dT_]Wop(q _^ J]LP95p[=O|Gk21e(FN QOMb!3Z6wrfh_K3 ylf/_K29V׋Ϧ"榶p1n/@ d ZLl<x#kZpx#zɡr~9:ن*EA:n`CA5l*y+̡/UFrt,~l S˘(q 7GҢҒ&1)=ztSf+l.ѹ$ ukc_Blv݌8<ɖlɓ 4>n$W1x*T'&rt}&2UQ?u,Zy"\ B%Jx&F|>FRu!1^cx2L[1X"Qw?mcN\ SAPF}Z '7Sb!3_Pϝ_OjݘCEX<;f\۵4&GE1A>$'W Z4(^C?2q%-[c.ӓeIҵ#",5 1CS5]B(ݮ=hAm/+e=n}mDqD S!~Vj|I~0J:H,@N0tS(J!IYօsM+7gA`7p76ueY )d {XVpld.6.{cE* bո|ŻO %X &Znx[zM!S/˱XٻClXo=&`+<=1Ka6 I"^h1tdˆHje;2/*)h~mnC6e|+fȏ *v ߌ5C#m 7X,bzoK `4V XVbؾG]q"Ͱ&"JKP!+H:0ӯGݪUrk <+tA{ҼA Z? v ]x4wG"*͖]$Gy@j1aY¯=b =d(l"U,ԕT7{cw{\Pd♯.h?~$f]U*5Fo0YrCXB ç["9gLG_LhgJ9t)@*NL`' ,ΜCh\f:9n@A&81%Py^hԮ:yo~Y\+O ֭陁.F&Y럅#/V1_(.oji.r{>Vm[( ̢h]+OcZ-' )Tdgq9b?[5&T(Hc|~v2TLBsf]|!1w~Hs7#qTh觘dp T<Xz:jc]uҡ|L9M8BKIi XٍRw_cߔLҽ*FQ%g[afj@>r/+6DawFl('њ1Zϡ7NaJEHMpK5d<",LN:r9ijtz)yYsDq-8W`(cma { 0B}TI\zяA)č$϶mQ:O+.Vcj{UFdYPlJ,P;¤̢|V͟OȔ)d `4bg2ktͶAۤz~pcǔ}/Jk$Ng4 ,4K-}3*y2 w+D"޹x"7<^E5YͲYѷ[dNՅ4f͸Q2hJ/#+VQج6. _ECQuC2ŏ~IUܮפ ?8I& mcgIdF@Kr%<' X -|s8o .*,O0(feq _Hߴ⸔U#\Nfu\ȸ^탲 a 9XlV=4Oo[?C%F, &K">a8@}dA fq5{@"A"t ֹ Eث6:.j u1ܧ\/_v4vB>FkwpNUti=P0&P[Wы4[XX^ (\2!^!*:X2Q加q::;; w?}jLNE)Xbaj7޸7Ee(&BVՍ1|iwW&;iQXs"p^=pڹܴq .v<-B("Ec/{8*/FU؝Hi 46A:iG/U*hTrX^(6r.?"[P[L:f0dc7*1"EE~"@P2[M(N60E<ʾ[O|8P/,Hvf8?Lemxtt*Ci..? Y2ywxjDڎ [3b-A\/{ \u.~}גCP ~Z GUV[<=ɽ?ݴN1%\wQ]Y*)mC]& =nDwI_).6:uӶ]%Ljn^^Dߗ i\K ~O@?^;e { ޏ/A@mIČ IsY:Vς\2KYDʦ6Sr邻=P~7{b£=\1d $^'y6%xNy}? A =`:{Χܭ_6|7O8ۜkF41i*J8?Ry6;λ ^7#q[m\~@/BJuC1g&RB0o3#R2owO :FͿfpWGVv#2`k3@OH%,*m߹_զQfw&%)g"ZM~P ꚴ\o?]!6Gq1ʔpE%^+nf}'O;:{[S-a PhdlO CE |#*\hi8B@$BO˴r+0v S ~tpwK4}k!G?TY\Cd=SrÈ\ u םCp-7R 1Ddhk=v0e߃Γh0*+Qϥd[WDa'p<3Kmy#Ψ}9 lo UH83ix W7--IF*&)tH:G7 -TV 7Xٵrp~e5T (H{-e y9׏~wWSZ?e@c\, rNƊ`%N7\Bi-p;GuKwwS8m; [sܯF'=" ZP@8a5 X+EzG_0S8dXul'vҬ훉 * *Zt&fEk=4Q.Ʈ}N@?W޺;M1!x qm됝\X2,0;Pyp|j%۳-82}y1 Dq^{30i.G5YK?٪6*U/t̔Me{y6aR~ Dg%wh(j^0Lqӡ6p_ZF\|ꮜ!4eG±3>TH+CYyѬIn!ʝ"7rD؀$sǶ66k>ї2O ւCQh&Pn!G| ,gڌ,=Yk =; ZqʫZWfZAO>= x[.nahԩ/\)r|Fq+=8k|[i-Uiú|fBs0tVJ 5.^zR 7sVVq9ㆬ7Z5 CH/=prJB)c,|$L(Q̻K)t94#S$M۱rW"N~\P3tLGY4y]F*i6-6irs}hccYK ߗvkflh<'0OPbD o)Xe sôc@$ʸ$j,=W0j$BNJ[fIiZf X;mGL̕\kéwUߝ6o/z.Vd]E.l|'tޘMUaYv&5jKmN$QK}3 q W <~ɦ7Ӡr%>AD"eƆ5GHrk$1E gwvJ> ;aVb,cKJ86tY:Wo@,:]Y#-7ӖGuV^sr&rqԩAr@hψjJm;YNz//zM85[$?c_[Tgb,AT]UC'67Ǔ0xtT9u~ C}x?[W?#{6GxMbQ.kuYya2/YIlhZ=#.-Y;Bﺎ.vP=pH5Cs*n{õp eZ& ҇Y&8/w,wP.C5o]dcd֏6g3{2ϵ۽gX-e'49Č׳,`X>Ml 1L]hEn}7C'Kwqb˺e7ԏװK':b-Kj1ngdP>?d'ZHP5C~^NfTj *zظXp1wG(QiVVq,Q{gQv* O)D[fLC&|}ۧ?L^|^q7arBqv(Ay FX}{RdVa4Zd[| u)˙%jmᛆ6X0#sUurRSd5I -`|B PG!15.czK )aP"sEuOP M]qM?VD"ok=ju.* 34 ɐK%1%\l 7`m tI({'h,n7r_Pq ɓH5/!@MXbkϰcY0`Y]tl!W\:)\A9cזN?'.s$aȿMЙ8#xu@S}.A Rde;abs%:>n |6&,F b<,C-62Imsz&oS_+vWg*j^KD k;/D&idEo4YJvX<ْ}eXGH^eb:?G, 'GR)xT̗k{5V:ǒdg;?;!шl?j XrCABOV_~(Z|/[rLaɞXdQl >辏2:X>w߄vڅB 3`CBBVr xxV%t}CXݾj[7WWmNER\z\ !PXMP Y yTPlXuK0Jź2-f)ʏ8NquznHҡPU!GMW!ws wH5G{Ҹ@~Pr>*諸ϕ Jl֭*AW'm6uaqMh\h,5uMN6+9U`r+-mPIOËPp2 U}bKCKh6Qh)q!$}i SKxcE^iKY{ 6Kc5HcP *=@$IElA[4z? +}X).r,;` g\no;l/&d27 g ) s7 u++b|J_D:u0x{3VMx5MbGql@8OP2@@bJ} |Դy-I|%fOsWմrU32~A|kw' rJ#?E"1^_EjTO^ruKvxۓĘ?J8(7B ̌SB +2fJ-mUpͧCJ]}07 $iE09f]oPG9W)=ޖﴸlA:-.?QAK퟽r >73Gx*EQ"@qM04 ǂv- sZ>DAzE4G30Eg+|旜xF]>K5 7YاKV!޹V>kKzwbsmGj+?ۉaǷ4eϮnIY)pl{J3[ٺʎO_}R#Kٿ1ҘpX\sC9C]pŊD1]S"!&=ng{\C|kQ궡v rd`o:kG3حy՝[='. 4.<K=^N%cKܑ7܁ -[X.lwo1~A=MGr]LCMATʞ)kͦҎw4BjT986q<[ -0f#Z̨D;DjypЁsbS^f6<5t21ڗ!DIDQ;ǀJzGs3j.'bq@ e$l@{&E?vύC]P̟MbMŔS[-%ҒBVYG$Z?nr ,6 ȼ /56˩{wEԹ{^ia3SN-Mr@J|#{N^1a]2;8frr>.DyIoYb(Xo ը~^PڂZvR齯E^d gx 9Ds)'̋#nSI{f$HLc6ɑ'@/M*C[-cѲ28:i&:7s܇Pnz|at(OĞۑ^W(7ƌG-!?Ԕ@PZ"4g@i@ k;HQ-#g )MA]Wث T|`ku)YxyFK]vPo!&"]Fhހ)؃|Ö C1G_-y7X /Z9Poc2*-L)G_MKܠg"LU% of,u5Dy|ܷ]DM$6iGRœ;P"ߓCۥ&813E س!:&ze蘗-K na,5$วYl~s VI{^$ ^" RZQ1K*T:̛)8X늰dE(kÙRnIm7@ܳ7cpq؉p"W+g2H+ۻ1V~R96fG z|?v}ַ[BL]?l |[`9C qF9Tⓓ@ۨ`k~5+Gڷ`1&=VdƂf. 3%>8 $phfʰNABnwTbNp R2 .<݊wM[qF]#AXzk?<FI]?YPk6Ծw@. THio1бxq'R%a_>O[NΚS:_5@dSKpYhhOPR98n˖& sh&oD@otp/Rf'?)^>UL p?rIYlQ2"lb%CF1biNwk;Hg)}6/o H J ]p"CBg2W|0vU1lRI(Vl%&_h^r˛|%pVIҸnM9aLq>g'guM8ͳ6~,PwU^~j Gx3/UMvF'ҒAP[li Х8OUt¨!Ue0@Kwbm)Pf${-E!<-Ak{Mbb5!0{3Skn 5"h[B`O/1J i<ŽłKP{~4"SW~'aܹ-şvRSz{8/uQsI#3R.gڼհ*(B/!˵wlJmxΦR*$/ fۆO \.MV(K<_ӯ/ݣ3ݓf߯2hyDT\'{o̡ fpU1T9Gߎw"E oJ<0H'A 4ٮ?@N+C2tELJ3`{j>ߓA{82=maW￴,nt^{~RF!~@յМ[{|WtiGʰ6你;:UyY.'[ ?k͖iJtv0JΊ60CS5`gYx)w{6n7.uuO 7 %M94gí8餐uY"~9piY@ )l ZvAl} =bƝ$f<(8nX_$s?8hv)Z *ڱr Iujb-gmV,Wm-X*"Փ\[EP+s׈)ߴv^_e>F~hE&4JGOY^:s%~T1&O#lmPԂDz,c*]VPP4 ~~mpVn E.t%̛XW ~x O dWfnFS4`g}8o@py[ht kD!7&0ԏ W c<ɵ1$5pn .҅TEc*۸8'{zZ7H͑J _(D!8rTKs$:Tڇ&i!t@L(}{gK#,EqP}A<9>C;`b؄H\g ՐY:ʽ~Yǧ8xHhk bkghGG;F 2ӺJ%x Ӊhiguˢ.}$dchƧ|R:: ̐X8!;d$c.=7c %̡PZkU%w0N 뒚:}F/UZ`Eq?Nt}iP#/uA0 ”xX=M['%V[i\x' V<[b= ^Fp/Êl#:Iv CFHfxQF2Y/&ApT ?WOsS*`?[8PVH"Eh(( 90ybWOQ*壡e2 `Yʉ? L<'By:ʸ=6.VhBhuqE"_b 'Z' U\>8b*Y67T7;kܳpFƸ@kۿ/86P011fJ[Y} K累ȭVB9A >iay# @м˶s h: T}Z-Jkb 9gOð-J~4rA)!6Q=l0w2," wk4dCySAy60X5q 4Š,3dFE3pA|AS/FwH>R҃C@j'4i7(O_F(&Δϥ:?|w]<~86E)p V aJ3;^ITu^HnhΨ: Fq?NSM0/4<=O>2{N^MXG]5w?v0 E;11bs:S !oK^Ǯl,$p2}h<87{9}r"nz jiNg`ǖ4釮!t+Yy w^mMMP$8Dwf#潱t|f 9z;-1n-`]!SYr78Uz%na{"lp &i'FAiJ1WX$V:]BŨy=ިî *%rt JV+s-G<: ~yLby_Tm> ՏJt|AY3PP!-o;jB!!Zm|iR2 ak:oFaj5Rh,Wt7 M,6AGM݆ z} |mHhC?-{h3` +)>'OsFP@%!A2)յke6ŁD_z%ϠA>>dܢ&F.Q x}z aU#G(? ^ >nؐ PӪURsBgMG> ~[㸂?ڜXUwAYڭY.*W{6M;PHլ HR'Pm@QM,*,{<>$,Σ8b3:wk W;#bZMRAdلjIJr nBW5MMf+]jm$dPCj7R&[_I Vj&*0OklmլM̏`c;܇cp7#xVISmbϔOX ͚+Pg]!djX> 0b[ޔŮXq!~8WnwAs"\]bh~`aIe*C|ֳ8y`vbӏLcL@m0gb֕D fn!V/\8CBtzA]f.<ܖ(S6R"_FÕCjmU‘p'FR 2 9a 0FZ1YKi\IfQTLܨf8W/:.{eJux:}c/Æa:)@q o@H=MɋA;(\.fXA#/#ռyФ7PNϷNsD䜲Le'ճ{5R' v+_F+Grp;|{.{<#FJkETOsԋbOm(hO>Q*{:8̩ F^#`j^l&a2p>?NLydV._H:5=+?ovIS8zറn\i'q cBv>-@`p" ẢNi9n]3< *e4y(^no}eG@}=L{[3 EI+̤x|&hN#?DsJ>+(k lEWrGF(f[»C^5;,xN+3:V Aq[󼘋aZ}kT ={RhoJq;U‹F} Y{BDq'NڝdngWM󞎱 ' 2]BC{\XDinF@%oXیkF}&ycwC9.lf6d(I׷ G%[d]ƫ {9=@4]g7iD{_4ѡo}L|Fi}_%۱ŵU.aaq7&BX@]k԰gKi.gTy(\֠CYHѬ5=FFmpQ/ tP`RC.;VA! sZW'G':5t.ce+T`aj r*%g҆&Jb1ʮx((9Q-7_K3ټw֙AXhL֦=@%XSLU߆rOEd/}zMUa&Bv՟ߕټ@ MNbϵځNj3xJR]V]rp&8ոrt iCG>1#[d0Ĵ?6*sƹhKɣT2Y//wt'|AJ=$64k{2M +ueGQ)s_7 ' eF.X VyswRgFqii)gJ.pzD󶧺^z'dm1 !&3=}mL`D.ACžE&vo1(7shA}$, lllQ okN9}~iBwͼЪeQ,D',3)2e23 :vYJ nһZTAc)9}M=iIc3B_[cbLgYqep raY6+ɾ&Iod"%&fΖ#gL%PlhA*qho)z{7x07N)[t@phqu6 )ރRY8CZL>ُ =԰C%sC HEs+.-:~2rq&qjj-^BjHYśFR!IqfX/5 bdoi'K5@9څFKO>~ktb!hĨ"$)nKh{lg/dHgkBSvuVܯQp;37$2gC>\, /P}dɕ5FQ diɕx(n5]3E K sB.k1ɾq;hhy>^ f;6gE8lAT]s8~.N_:%O~ő'VХꂖlMe't[IeJ!TO܀{ u0F=Uߕ!o;C*Th`ԧYe |yLkL\K@')фׇZn`Yumtsp"<ЕٻG_ʮ oYVYi =FQ?85N _gY6iϝu˕4"O9Bwi"* áV#81 ]O44{skƩ^sYz(e_G l/YoOcΈZ*uxޕm<7)Kby@X}V?'ưp}2Ղ2HvQy1iݯ/JV1^̓=;=34ᷕ)bS(ÄQٛT31]9-KzձyBfY>6HT9>WȻ"exX kL ,㺍n/ ڞ@[DB,hU*VFso}<5VqMx]E>VyAPFMhB/*HHJ]N|eŸ.y+,l';`n@U^.${fg,|xvb_Of]W2>y%Eƞۖ^JxxRa{ߣ f޵3짂RyWV@frhƆ6>10j3C!dk{[E#CSǑh`FHms#Qsʖ]~^AtJ|Ry2~ &BB3C,` RIo $BomJ Bc^2dffDX7)@ڈO#[, 7e6Lx9H1;Iv@ʖ ld*Z%'ij9,hrm-xg9•@ 2^ 6KA{Kd6'/!XdǿmiBc At F8 Wd7C,xA5w?*c#Mpao&t0Ѫc*+u,@z07!ڂz֊P?1yXUX17 +2d+:7 O,"vRq*Z0r.{t!θvEĦDWF44măsH'\ Zkñ~]7rv{(4ϦgK#.AޙCuK]v<)ƞӸ[tmMs3`ܜ)+l8"h|.4u,rU7y!xw"[HM%Q6\_RS tQ 7_|eUh=^ U9#; zb_ n_bbiXץR}@-`LȰwW#ADЏVWC 5ؾr7?=Q`4?sNQT438/ %ej 62ՃyE+ZL+&.zEx\!!WVޛ 3ӱS< l5AZ@0M|%zi@/x$>ݽ@Qh -Via2N$iF0j|0j1d9lKdU/=XhKXdt/#Uݔt_lYpҔa6¼`jzP?mս.8>X`n143t?) J}ͦ7$)HgBv9ILW$ԼUG~RxBgo:+ɖ\|㟯~s50#&=pNR ՂZ>哤E^FbB㼋r: Qʳ>5z[3tVZw/ܝ$w z)ܱ_L0`VOq!94z`ar|[_VXTfbȍJ ǔ Cɷz(sA!LJwCjeI)xKn\0yYf%j1IͷNᖴ;|uzf0גAuSY +|Xʷc8T/;m=CQ~-*5 s~r۫02š|k[Sn U3.P8 6pFY՝3']FLEБIA<PF'/%[jJ}tㆱE.||Cқ3p4NB G9%.pe-3ٴ9W!~_}i khፀ1YwU+p_e#0hYBn.61!PpW kn jJ"3-/Oʍi0^9i̖|+%шXtX IYVLg`WiWh8()Ew ŝ|?Yš9a^mpࡣYxH)UCVYRs;׌=Mn2CWkx[잏!~凮sUˤPн 1R ~,lAcn%I8$\?o6O$C'~H{z`۟i;+nlM&LpFI G\0tg˕lKEo$\?pP8)OZ_mp$#DWNxh-3|geXk[f9ϑhtBJ%gb3qv[ѨT)Ձvn⃣w;^`m%/hJi~ѐL݆;ھu)8s"eVtnUJ½'XrGv}Q0gܙ$ ʧm[E^< ̲DyR(TD^o{v^u_e~r>-k+1i['Ng~̜y~qN)_A"qdMnKtO (pkجd%)Ԡ΄q\z^`Wv2Ἤ_(3S].KF(֎Rgj6zSSݟ7 x6:>l"\9v!(&6g]y%>vTMy,%3<8^G'B[(%,g-o;Q.AIk>= L } )XܷXЛl!FHrptw ֙*bAN:u͘Jy6 ϩ11 Y %A:7.2x(;n6 DM$Fd0bXUxZDKRw}A!ݡEH\4Ql^aJ&wsЅ3P8up4D7vo)iRN>'D?~f|%25._ .ZǶLjè;;A.w6nt%3B+k.Ї No  7?)WND$" vzFY:3&e"::0P}KLEQ1 F Qs-'+bp΍=oUzEiYÈ|KM2d rڻ~5E#-8654`0k6 K&Dxh2.ݯYUτ65Vx@C>\j$V?8|M@ZqaMYB_d?gNu, aX LA˓Bz DPAb0>`sd^;Q2ŏuX A,7R1?v!{~qj^ã:FLb00ex:uݳMs:#Mbj9)j".s6(F6VGH>,j{C6EYTjaS3ľM2"- ;' l "D*Zp2G}cL+/._z*1;_ D3k>'6]$sbXA] x!7i,0r| bzᅨ Qps3b#[*A\ v( A[NBb(6w nGh,^dn13X;xZr9iLNQtQ+2GX1?4bj l~1#,UZUck[Ճ,^&ց<J-*{edª">ujxRO̰Uh邷!+.%*#HVwNH*N~WERϮӀΞ;4C焖a^@ 撣_7 <&f$hehi:{N5zD’-.ǘ-QMVu^:MЕ{j/sM >x6?񟂥J8b ʞO8Bu{su_4u]f l}(Ln̸iCO0# LqMd~KmyQ B9?Mke.NB<2>3T؟wه責žhi fd/[B/߰킒~oj I8պ M?dO^2IO¾>1V?q ڻF4"*< $82֨N]BȾm]WԎIilJ֜[1'K\%3dO|1=<"R]8$Sdc.ew,xO[ppR U{msԫeV漇cO`eVjX85EVJXA_ԇ^foQ er&)ln?^8|\C@nX*\Dn]p-;D8")>"2cÛ/*X0h"1VR&AX?6U_k]ԵM;%bb^'m8yb$܁)+p~QyɘK\ $ϷβavR~E+5IhapPXrx3ʵ6NR6DkZ_G*s-!("VCDØ;T7-5 5:J TPw@9.\\C-!;16,=7{nGD,b62.(bێ(v;Y Pіd2mKZ&KH:쮹?L.-5vgj]ɾ1$㾬Uz%kIeilck$͎>;֪wtݯLaXDP";&f E$}]ΪRBZpvs:9&,e DFFFI@UE*HVaUSPN7_l);Rʣ1bnrs7ӕLCPxcYInq܎"f_@pU<J, !;ٯ(ѳs>HR+m: Ngci/ ZAW8%y4 jTbwLhXL;Ԫ6!E'"d੻2 KA},Odr=l åַo-r03A{w۹mGG#Q$un?iG5P!nsF7he7B6ᒊ[߿, A *ưA cNGoeΎ'4DJ#$*@6exOtvyh0iO1MN^^5}YψBO]D_9fQ̋$h0 c=`*"͋WFV*5{䔟l<z1aGSG$lEW g!gT8FG@ϛ[Rz1T"g(:ԺxPPa b-\9+]1b1A1Dĉ͐#-K\9CzcHp/_JUrW>)B vAQ._:W@bė&!d(qhn?7*d_ < Z ݃A~+]a2qbM'+g|6}8$퀂0 XeR2~l*=. m_?! (0 y%NXbI'g:F3 5Vl?Y!>fUE7;[|WDf\ 1MAYD7VɄ IΑnd`5h9 %TΑ* !U۴hhDFAȋзPUq2a x6TԶ~c{NVDQF4 U'~=ͬ9 o,uwp`1[ ILW7Թ|Q-דEMy ']ubh4⶗G/T J ELL:Zm#%AEuNl1bQ CtuL88IG3sIO&HǼ0}v(4/vRjܷUx31- (9wjQ?](g_qeI˒ݛ^W  y?V f$5ն(rCjܨ.]p@uօL'7Aaԛ0h=p,6i!ޒQI@(ktzP=:/'FNdD#qmIDr{>g (Q^+O"G!FQrUXۆ/OV ~o eسiݶoILycw:?W艒Y zzE2jdd4S 5Կ#C ']a!tl&, @NMw3Oؼޚg\lm`,  '27UxVˌݯGTԠZ`oEc6 ܒ)[]((&@(S(YT)w0]-2u)vXGF8_yZ3rK%Q8Rzf`3T:r?T~*!`F" g#aT!$lis Lv{Қ 1M]>q&nXiD,#35 6d)ϋ12094xפFH_g-SJYNbDȝmh dAGn0! A~dUz:rN7IHexYlF0zE6 ny>8VF Qw:qI=_ rd)\wip-!<Ǣ#O B`a]6AL̄t!4m^8ÓIL~6tE.Ȇ' U4>0 I1+οXUҵ7z GsݍS!/Ҍ;X#Axsl_Տ~AptGiqw#TH3m[|HvR"|Ȯ2p;".2 rC>vCa YF!W:Af{X2U3 hlY^p%g]+= 6_"z5'YfhB$6f[(^efe,m_>ວ@|EDfHUǞ;*$_ܓu1!Nō{?ĦSzx6y=B,Ep&{Tᥧ31!J C =~Eo4Z N!hqk2a6S! VRr+ֆɝL0͘VWJ5x˞4o1)>ۆȰ֭!ia"FZ*xya~Ym!i@j5=)+ׄjeB\c lHXgfKgm&$BԖUNQ~3,GP? ;='$__=yYU ٌ`rno5) _Jhc8u6gɪZܯF1)(2Y1’M^̹Nd29}G{ݫmDA;$pWlU׼<-03c|QOd¶~Q-<j|X.x+ \>bQz3 Cq`k/I"XaX5go #̤ˤmHIXy&ϸ=;GC\TlqOmm u_[Xba,/7KK9uRe&W']?#2Z &}ɎB V45:O lr7'38b )"/<6ӗ<؟ޝߋykBt>AyUu_j<<)7!ӦP22$^ok;:-vuZUbM(HplwgN s/H@xT#뱳@V걈%~' tcqZ٨k090uyLQ BNI/oJ`4BHBv sud߅ʫlž o˽ WrH+|ˬ7D) VN¡]%᧓.8"0B-?MNJBcڛUn/}bo_*zLΗc\lc89T4eb9PE=MluLP^Y=,<̯~<=@T+7C" zjKI{ȼrw˵n!:>|D։ qF'$7p!#~1 ,$WPp }7=}ޏČvɨRI\2y9zQ6Dywu3 lfs^H֡א*ƅod 8NMdjU 7K @@aw;gDTQ[U0ʰ?(bvAWǁh>__*9g)i*h ?*y yXqJ > =_Wy(b:*Lq›(I冡%N^ ;C:YؚI 9DEz4IJz'-応DSzwnNαwKr:X=pS?׫onZP,xaWs~R0s6&j}0h)}(9veG췎j"pWۣ_>>0)>LptiO 0wP[F.#ımٮܿa8$ \/]̑H 9I[8]_Cd:4|BRzx0oHz5؆! ga7!ނfqʠ|ޑ`po9q\1B0YR++ìh"O?"@TmÛFal?" w1Wϫ.ߥ¹t?-~U^oi9|iLyvr@r8$P!!/ڐGÍe;$Sfjg'Gl04V0f<˫fxj*N~K$E Tk]Q^{a/7Ha]o^&Ttۡn#/wY>66XqJdFLuh14`f4:RA//oT-`AwCؽ.(!zk/ G{i㊢ěE8 ?> .dNM.VC;hK0z@NO9zD#s3b5kXXtBrEFi[ؒq3!CVR__H V"! `|c$A?bN?'e=ݧ“\Sz:ƻR|SOZݳLf"465{̬ncIH!PentʹFŽM_D\0'/;2؋l^d3mS/v"x#;ݿQ%}h+5y|l pʙrR$ eTF:XܝUT^2*=( ?5嬔-j0p"O.7SI1 Yc2 sHsɎiLJq<ѩ=[I_2\کQlawr1v_PFT5~b{m5W^v+GJ8琻r)QYfv6G g X:$91«X:R,3nװ#\ajTrXiG>QA΀"*Gaa%j=S@Aԥ~?DvopK`8E2xI IM:'S9ӆpi# RZn ?{e:8V |{c:AO&ֺ{9d?; f_;2 zՌ"Yз^lI~(Tf?"N\qm=P'(f;%T{0߮++<(¯dVWl|H*Q‰c!,8a3Kb'V =(X͓&0v9*zwK|^<6V^Lkrߪ &!]`!쫔T >$ܱ&Y#V̔:1Hf[ |=;iVw>Gh9,wg1 }bz7:RHk}sٙ~.g3>YF xs%h];3jua'xyX&w+XY6p.[HTA29- [/͊Z_.S 9M;N H*cum#%Z:%UT&X2hx [KVCYOx]y`m-_k#q~B42W[ hBVlp:|)uGZtO0 ݉`j0啑XL[f&:B- WNWLBT!LҜ`^lC&;ƜOT,UDJI8 S=vA (2S-+"]sЊңQs {lcߜCꀮ͐ it.l[_s6f?70 zcF wXUռy:/"M~7!ƘޒB0Ui|6l3X4J(c~g42ޙYjr^4?6V"*3z_Y2Qy%%-NoWt[d$EهF]1d^wilc#$+ozl/5Ίj#G E*@(->_0ir$jf )o͏[yXY=F% iy#T7:o%p4adx[e[^ hXG5!)9=xzŚ$*%;DӨqKVLu۳QWt =Xf.A[?ЮfA_6mK"!d>A]wRn"6-A:PLñɡsdzLAi$jwʕǘce(FH+sp,=ni =`Yqަ:+K?j%KPD+4lX2LJҗ(IJgtEx+i2-,@3xjuRӍ/d]LcCW">s+NO= Q"/ =|1h'4C և]%츿<آun"k/Jӣ=-z;klLcuxե[SxPTZotVxBj s`!AԦ9@HuMo zf 3מfr'$(8"tH{g buD4񴁰mͅОIpG *~Յ)9"3^G^nNT ݌r2PP:VDNǾwyi9lj8)>p];AįPˆHL֚} G (}]D> WaxKt{}vI 'dIC'.W??DŷeyQCP+eo(' gMeo]8HrRl?Qm,[F%|o~2%'{ſ9d_v&?j'dh/Th9[qzJ` }Mҧ/7ًxGx WJXlƫ}@Iq,awt_ct?e`E<|5X/n1 Fdb#_%_៘Z̥ZAf}M- '2wJs!9ZAAzFș^TN1rmv b8+CV45}r ֛AoGAkBeiL|L>pL-vhbhc)+gڸ;! NJBEw#׼Ⱦ~60awUt)4lUJtLT7|''SIiZ !9v.mz7&^qv'loՐIܞ$Ji.=A_[+/jPfТugW3'% _L>4s}cQ6ڄj'[nr|BmXsK+iG@egʨA|N\7iܘb%_GX pkv~%Fy6: nBDMo.fd (#MrH2cu)GBҔ@'Wr'6lg6qm%H?d&8 K҈ݑ$n?y5R !fyZbb\'zX2kRtÁ ZsQԉz~,MˌwN6_udQ'#Wh#Ke 4m ΐF㞠"a'> }JE?+*9Zt/1I'&/?-SM$&w;|k펃Vu[ Rm5)<$Mv ̸_BSڗU"LiMۋBfg07)蛂^+h H9iA Qwp1ў{Q⨀ٟ]С5S7nqy4\s$,mE DetyiZJPF` yb3}ENrX("lݗjс' 2r>ĉ naIϟ]g1E j6M,cTYl⴬\7GsLСF&\z;ZX[^TbhL$+e+Aw`+SGEY%jw* w@?-+t,z dDJ,3ғӂQ%\ ~a]~0u޾~wJmZpX#PkANC!9~kXv,2v=~ _9Gt=_>|Ql̥K/aͿK\gi3pIul=Ʋ;b2"{U?Ͳ^.g]tw:Zd|elN>.$4{,vo]VM,xy9"X֚S G7!rZ :,+N!6T oO6r1_}`,6J'B_Z߁+ c 17iڸdƽzr-#KGgJ+s0W'9ᶍ]n=kZ2m 9; @n!EDDB}/m.#,_Wg*_A}m(gŭv ̪e+zdu?w$x<֢Ov{6=G{^؋ 6hu!dWXH nC=rGdgaiwÖa3qU?Ȗx )! g^E/TP|Rb8x7`6]:ȃeҤX%rg"5,0KFfSr7n]Bʃ3/ nYa׍=Kq.T2L"`7iHxAeA.rRbے?vUk kn*F{s[R%9\m?v\.Fg!q@.ʞޝ4@lwى]wOr}Xl0n3[A; tt/eiꎣ$r"j\+՜OhZŢpkHl2(0v~.XM)5UJeO.WVI?"ku)삽ټnuΎJ<"eb N*q#mhyJ./.* '1.ɹa;emƸNiҴ4seYeٖ+K! DlZFC`RWE<|uOdr7>YLA63Ff D/2q=jfUs?7e[J݄[N\{L1 30DS/}]dʴdz%ʇ(ђioڕ,F ߬u7뀴*%UVD b"3lQg al9k!B>V[5?H1hͲ~tcCcI ^( 7oQ2Xrӥ`}ĭ(A?0IΆMB!,~c,I۾"QrmF)f ?@8W2B2T+~ IL>!9B+)ASQw} ˋƢQ5+^08-!)tt=wir3dŗT@,+D=y&OD+WtnCpv$4~2>8ߙxCDV-ؾPd1-f]IXgpJkaFb,U.X/ێ;D_.4Q Xb7VP]BuٿxiTӭ`Rc1(d@.Cbe|d_ua6UnXC7H;PvnK\֕l"Zs1v<`W%IsPӏɼ6:4B(bba|t+EǾ?Ҏ.DyYVΗr{>gVsVU[vlȘ0c!h"!~+56ִ/JhC* $ ^&%y$Pq鴖)טʹ }i&]keC.sWT{LFԐZ_zgA @fX|TF2$5PGqs,IЅd2ۛ lӱ obܹ9mWQ$3>C, ܛ_Bk 勞tt_vS. CKwt $OcP"g|,^D940dvxK]~oeas6Q6bnZ`a]L': e9|  3KCOiw;rvR[ѡ!<040x6T6%2ichM|#qX熨;TlR*COef 10DQ3׳Pϔ,7!Ž^{j_{h$x1+}#YC+GswEvqnwܓӗ0{O)OßQNoPP,FK)еaC6.ԛz5&EHzVH8,@ǒ+Uʛ24tW&u{LSHݴQ/q#lEoo36?y ڹÛMQO x@(ڒ=sZS2bK' lء%tXPDՉ6:TCP*ii-|Me=W{ a+ќ;tt]NFwuOh.2% ?_ثհsrT|@)! N$Ն ͉0Qz&`ec*/،/x\6SxeCͩKga`N^$(3tGn P5AuN׀Կi/h[d񞟑.LjaNB"ީI:"k>T8y:]5jcüO*i yܝن*tLcJA_cT6c{OWT_ P^L xbI`wD.OcEp6,(-%!Kc*ƀ^w:߶T6VhlSÜu?^كwI%csGݩMRʨa R-%ZQSxQF|fxwM^I$jPiһZKX$l~:s"*w{ [m׳w|r!%v7)}/H)جz #3]mg|b tBkœ̌za&Tˣ&sFQaYaOO]46lԞ:dwWmNNO 5ƣ+tACJJO<_5+>fV7Rg8QkR7G%I\}^'hdHuysJqu? ZuI܍ޟ}J} uC ev,Q:T@e"5 `ocoh79C 6vCњ,,m#}OWO"/cNva8KGI8+q)fJA_9c0zE% #^b4#"ѿhH7k/+> aa8k2܎֦{N+fk@F(ˬ5IϴcGBבrqԙ-jd0&9_;]Wm?x'vVJ&-mܒ1.*{9:!Jב+1(ˢV,}m{z~zfN\Zy6k#B) G\8Klb J۲G{|7;4Սfsju4iwGe CrjoIzZPŭӧ Pj· e< gdFs$歮rJn) nYj )Z8hk ׍N)o{b㿋%ӏuX'DTZ"u1"VךR3*Nzb*-%= F 9F1wܣj/zuMۍ冡-fǫˍwJ)j(85W4vױIR)%F3 ?} > ]J%Z~C3Eq 6E i\jD}W(vL Y;+YDV\N@62د'sE)!,4Kq-r?DaݔJ;(;'Y*gcC5K%Z,YWTpQ^xA?%%~8v2Rp3jj|؍ՌΨ w~|ˉ +_5ھ_G}XwVQGfE34AaYZjҨj]+̲\+oȘ̨&r.L}n63J'(`DcatvnY.`ާ&^gŸ`ɕ$(A#_k qFp3~/5}jIsQ yAgZUZ| s&p/@l^WNA 2y錥R/eFƿM ٙV4ղh&ຆ>ixrDLݘNԧ[gjE9 zaztTGY(ʫ 2\X'edIڄ:VyH^HQ0g*b:C)Fhtj%Y(.E2z.vHD@imf7RM9NW*UOA뱙ZQ~gt"|Zw[ cJrųE#c'%Gv2R]s NuG5ژ@顗SΩ=/-nlsԍڦcվHHٵ':7 +tUQpS#FƖQVGLlM:ŃMzy'}KD%fD_2)V]YuSѨY(A5((WM~0M=QA^m[J=BdBѕF-ٺ3nQS^Tω~Lm-sD5xDVE0Di4Nl-%_SloULI|zhCm1uǣQ2v9Z8':YPKn 1J\ b$An++ĝWF!-:ew9H8&!Z_qW!~HvMmnTd;ydXgG5n"Eܧ6R+Ժ$~kޛ=HGF>})C-}"PbgTVmi@6ӂ' Wt#/S_ neIyls-_IF[)5}Z6Ok| ,Bmϋ:bvlk0'\k/ȳb-+uzU*W qu=\R5:DGƺɸһWg%0PHW"8ER4wjˌWU 71KgK: fw$ѩVc芸eP[0n˷.]L0>G[gdW!VLYE=#1F]eZ# ^ujB ,m`lgҾwD\8z]?9f40<('v2‚<. [ ͼ(}PEبKO[\U1g#YLP&^770U: jۊn )ZSC֍DKmSyci7ɈJ;tsV݈C iҪA妩L7|k|(в +.Hjp,0\N{u#뜢@( a -,ZJ2!$3`QYtV_ tٓ&ґo8ڈڛB!Ա;*TX($i~ ۃjvAS/n yh֮|)[݊8Z 䝯Ȥq.w}RBn|!.&3,a$00fBAB;<6r8?6>̩şDZtl&|r ^gf 9} Lms$z6~'"mxK*"ȑ+UVfe}[tt91gAD%$bxOlo ZuOWbLB70U-Q>q Zj@C9ܫQ*}hWաRuI |(u7e7`,"yY$ ^@UH 6FRiΜzOqE˘x `ؖ U#~. 41}ʼn:gm) l{&W#;Q"7\j*1$oc[{Sd3I;Y>mjJޝڸ0=3 [:NQMG~¾-kJz /k%P4cZ?̽piу3~usEoXD볚*F+65ߦ+k/<Dv,g*l@٥EJwV:̫ÌKg5]sL)A7iÎ=OGJF]Gea:AyF+S ݢs: aRn$=!sW29 ~Y4w#ʠ--- %VWČlE?"{hNyͮhƫyq*d \bXft2^@.,Bh" ~G {}~ؿMTjIc ýdW:]`2r)rNvIo"љ*"ɀe0N5&@!D7/,SvWc"j@v3,.)j>m%yU2y"\ B=E7SdMܚ2㄁P g7q qp/%°NcZ~?/*,u%6ڒb5@ 3M.,&XsbN7Ӏ\0F \.NZ/h؏:v9yjFƲ8:]Z/Bɳs^Q:(HRR\lOŭI*x4pIA+ӌ{_F:ceo{XOh*-,k9@l'e76Ụ3 /#bDD<69Jmd;ME5ֻTa ndˎu*dT4=LSLJ[dJsXF"0D}a- T.(gX7!cc}Nm \j^(t$#px v%3mwZGGzgh@ש]7LdW/V j#HV+̓5|39^{j6aW;Twb JqLVbϨ#X\OIS9.uwm}hLWw:* \̞ZcM$^甦*8ŎHĞ`85Szo`fa`k)]8Vɽ~"O8L. :4=#L !Vf$_پLJ"Dp(3{]&').54D?v}>1L`\{w]vZZ@RpC땎O C|$" f_.-KG$ Z`?Œӣ]Um֨QJ9(R>|*-$]Q_uHs3 Zl%6ߥr5oSFZ-<)|uõZ)/{̘ÖKW%jxZ%^f>qg b Ami#~`>j(uzj{ %G)C67i<{vę(,ڭ ?*|bVU'&#'IpR!<W1=ԭ5(n;*\9);uЇ()0h?˲z7"B&o1;yVm{ '3\:[}eT'$ɚš tϐui cL6f( ϐ)8l^+ "Ht$PD|HIO~HsPӛ_qE#k~%3DijЍRZ o׮-G>Jw줔ېZh(s6֭-;s ː۩E9U@@BӦF=ҷ?h`ڎc=6䧞b#UD4:Y>?'Hе˿P#s+!o~(NEl~d) ueJ`s l⹤nŞ\yUJXuN4fiK@mX\ gԥ,EW>H̞CZ]w4=V(9mD tzQo}9Z4`&B߆ZH7fPwL9rJTHsM\?eDRa* mFX-özsDoqvq/z)}K'ƢWˆ]KI(%q0r!(%"Ub+l<\|.8abȓb$U`9|d *pLZ(w٧c&FJ ,b/٭OqЊ:t&OiU)Oa, toTNƻFFLj9\} ;<20B傓h4{9̦Xy/?Pqj}A W3G 0YʽSw $/iT(jݑKuR+눝+%yU֙Xn\ Ϯu3H 50z\m'Y8! aO̓Ū7S؉^8a4v'Dw%5is2WDTP{Z;u<*pexԕB٘HhYy1C``A5qmΜkXr W6r"^Hnh1D%q+Y ίe3(ySH#Є:݉ͨxjTGL8_!fռ`m @d<Ϧz@ W=N\J TWeB0"(PR|v#9q.+u|f =A⵴f#4uĔ,\-: dR_WGI#,f];2BZ ضKte0q 9Yxsd~/Gn+FnшB ;PQ`K [*Wϯ™ʲym,*_3\*źOukGR?Nܢ؊}|o8 &-$Lbg % P$RIL#:cxdkA1K㟧y2Y g ]P&ܐXO-7[P|6sRz ɭR.KxIz "$>*3Ė`l>ez63"a|F!'&622j2=FƐ.hRco<iL(;l!{b;M)@!{t+ vU<=74o1!(p7xr朂\7eXWzF6FGc3Z|%/?98rAuj,m}RE˝TӜjىEc2-f%ѿUi8RX&!eZ-ި-v#&[;N̜A,(EnULZ03ce|H6V!Ua^O mJ9cbiPлs w_0+OXk4AzL$knj1M3"@!jdt&y8j/ԻЌ>ݢTW%AQpRN2nv;cwbn\=Ϣ]ʹ[`TbNa|_ʯx̌bkęܨu̯2]ZQO`lK=^ͺ?g-c'MU>R#55"OϚMnE^el@&ЀNW [PikS/l 0a+&*`yDa=)dSV}1ݓcP5v'V--Ll Z/.߰^ ġڨ 5Sc.n fKs!zT4r!ոط^R7ҿpiLIӇvv%.$kKdmk!:=V۫ЈcI+ sƌɐd˨Y4~_s͝(a4>ר2}yvZA*`Xp'Pdk w90^oY5TE%Za>υ蛂"csWrZ^ȟ5C̈́J nUbUIR&Ni< 3 0F Ο_Umi 9rOj}iSxZ>:la1/ i0C\\j Ltͷ4#J# WFCߺAޑ6HgclO+yP T|Y΂"kbM8+jzӃ*9*O"DF%xB_Bٸc8@T6.ru=m5hQ!:+!138J5Ws֨3" -=JwqJp4s]*axxFD֩D&uɹn 2?d~3[VMlsFM!y ؽGcy}U*_qrZ 9L;XC&?驂!hRPn]6웫5,iqGrHWf'G|qLiQ,iARqu]u]RUrޔz?ZkªqQ6( ՜|g-o,Q1(#Ōb}QNyeRSPI~5eC.Քf/A3]f~2čy&HUAM\+aZz$6UV݀+"yh$g Q%\f”Kpۙd;2p (X Ƃ׫;lCaGx[lW6*͕6we{kjr0{RBm V-It' \UZJދMxf&Ye0ㅬy k2#Ka ; P 7)Dhxȫ7VCkM8t)  %:)88n:/ E0Z9NnǾq ƒ;Ыt"ќ9qYxQ{ >WV9|: "0qo.:zhS&3*Cb"ɨJ=nŔ@ pr-96/ri@6>P=Ͻ;$]ED&UI XR,A1 r]ij[ML#x/m@Mao ` Zyr䶒IQ.RtEC:',)EpRm`6W?~!xdŃFhr[0}#rZ&BTkDw4}44ɳ7~=a>sNS4I(ZK=mגP ~l@1罛-y荙0+&a_`)? l bD:U_$W:^ BP}זy$'gl[cl{ld>l)xwQ4G1, ʡφ`UZS ye4bku*Ij+ŮKUN se-]09%K_ä[>V|ɝ4 ^BhgС@s92@Jgx\UPLܾl{+>B!r x,U鍦YW̚px ,P?*Y2) Js.vr9Q>w/l$q)1/ *sϢ`UԉRgՀPMU6}ŶM?~Ilg@kO>:+zv=.z*eI*Wo9CQSixI$ sBxXA|Bl4Ț X㏱G#yQ9ZdA(5/+ugr_Ѣp8%ц}^Dو>|zHr w}{؞ʍc=< =3"7(v]|lE94Ic#Ju0PlpHkI)m?( F/ 0EAc IIiȨLͻ0LfgYqi[7<>uOm^_ 0N8 n|)%frf؛ɚ;LÒ>q FTd9#~W3zM_F40PF+:(VXŌFKϲ-7Dԋ:)ߟ_bݵCw 7{Oٻ[*îԎAΉ`] r%oW|D/xźd1k2O-VPVCSԿy[Sd^~*A>I!7+tTeGu~7w'Ϡ5ʃ}4y= ȿ@яϳO2yqL3NFrЄU<{p/biޛAD*D/ÂR]2x% vduzwRo>d-ӖLG&Kt]3*Uoeq*i ǜ5V&DAd-FPEWLX|X</WC¤}Ayc@F? _eȨf[in]Si Tn6,%<AabMvDy;PNpo_ )uhۮPc .}elbL'qq%3w竎 g53g Gk5f#y:پN8ϚE z:+Z0,X*^9Nl&F fNJJGy+I(k63AIX{3r={Ҿeb[:,'@fL=!8(E'gՃ"k\z2 3^3S_Y$=W^RjLҿ[C.4 YL *0펳/֘٫J W o/cˋ?FFFvol9[[߾A,M•Е,SS#3uw>!: NU,\MlmJPc`f 8%h vm6*!P7GW L:)+LAֶ,G76,'B cdt}@>"ݬ{3Wl@UZY0)f'toqeT̲un5g4d"P,848â׼7vlBh #}yT1gќ-}vE:m6j?!—\eI&x/(-\y.?V_Ao帢ckȓ0[Ww>\kXD<κǀf5.?DAD6Nv)ͅžFI5[<eG~bym~5!*iT.w$|4cG#I;y{:<56^mWL\)5ɓ; gK],^TnV;ؗ_+6YPVz\ 2t7P:tMdX3f/\N6)cKȚn?K'9e( yҐraW۟oҮB[5c !CL1l x"3ΪZVvo0MƓU  Zp<*LPtFnx>I q K jrX0 .4䟬xNiŋbq=DŜL;`S 4prS wGVh d7]8Iy`_a(RpxrS@3&EEv0f&<R/k) $H`ݵ쪾ї)Ok0Qz%vFCU?3ym Wk"Wbhz]E2dkh\\:-'d`7j i窥36Tnoj)4 }K}-*XOWYt}CjBPڹoZ EvxzbɄw>2ezaVm)D,y2J*"Čn'-fMH3FGBy930' -أsZWv白RT큽nxOEaf%_0'Q9$TH}V<,U81l*c\ ,.W̐[AA6{"_5dtCXk  /HJ-+ϣa;A?UxĔI>| ;{h'5߄y=rbI-fL<L,#Oj;{|g"~G`HS3|V+eOXTxZ Pº|La-r4lP+ =t 4Isڵ,J#v <55Ʃe/1\ WZVV𛒛!_?+촾#%ѳXGFgy &˙(-aU7NS'.pq+1R-ǬYI(_uY4"Q1Ng$׼r­n'v)8=U6ftdTMgvPB{;ܙ~,9yuWrka~g-McR#R\ KhFs"q̴ٴBJlg+T}(֯F[GE@ɂmTDǼ` T{.dďgD@sEtrw]+%(w(GUu+p|sۚE,DˎQϻ?h hzCtm%<+\⍄JF*0{)Boጤ"W%|B2EH:mpS0ShΩr//ɪі ڟO;)֏K⠩ddK8I,w1BOƻ/rT]m8o IТ;wNN*e頪Jb{a&|bJfw]fOSn%b㬑0 /9ꦓꊩ.qr;1i,M69啙[8B ɐ"08/Ź0qF>|Wpߨo2 YTZ1nETfMf6gjb@8/(5zqEA:#Қy[aL2Ƌ:#ࡇf- 9)vUK咦g{&s!y#_=zĠRW)͜HԸvE~.}H3}z9_?BDAc>s3Yoaͅ tKi6vk9 o$"lZf.e $L@f#y]iB>tlB@A748Z T#&MU%"`p93zKTswRivmW)Sxo%A [4qToܫWTHBs\x=7r8*dFg7 Ɛ@*se;Nec )v ZUgӆ5Z.o_alZ-8 b,l̞af]GbڀK?q ]?4^ˏ-ie@Q =͵ƸD;vt?J ieIؼ՟%PI˒{;Krę T?1ō%ćJ ѩ3ª,"3:e_f0S=˃%r^W%Co[=Ȑ õͪފp3||S[GƟ 9{k#&8jWP-la:W@ȵǏS37>yKTQa_ 0]ݧnusg }1c܃ 3t\^;,{p܉F~_l`uP+"*8ŁiFbDǒ-R;}e&C`Զܖ .ҿb悋?hE.ӑp$J{kcyhB#^Lڧ(LSӡ Xs#6EIE. i4}'K/x!Iag DH\ߏTbcW`:Z9d|İ(5SyO .Rs!㨽S&qV4[z&I!Tykߩ(bI"!Ga2jSi='5}{؃ -H) d|g,}]H`3 [BRQ>k^JńmDdY gOV6Ց٧4Î`{jqJNƒ(z8Y3 lmw˦&QÚNZN1'Y&e73e3*8CRO&beB*"xQ!;qiNT_';j/^oM2qxu?5 o8(i=\̦z'!ɢ\Hk>xr*\ODxg7j@`1E[.93 kQ {vc8TX ,=bKf5 2sm*V.{ { /571tMB|eơWzL9")*ꎔ8iƷa`ܪBPw Üer_bZ9*-8&UpXwȯyȽQEl)C>-Q 2{I :Ow" 0غa C=0(oDiJ4ո~QˡBO~nA9!l;,zk vsY͞Cbw]>+ʣ#yF$w:X$ǚjzG~oqLrOwg]9EP[VZK)ݖ'+b#ytT5;2x}"b8 ,pVz⬿.s]fw0c=KFlpa>sjF,6_"tG{A4kOs'xDV\*_;{QxP3aw<*C̝3$ٙD\H|-H&G0Sev!9w7s2`jɌXXNƽ@PNԎLQ#TM h?:pߖ>,[3HWr1Fѣc7B2AHR^Pf)$v6;T ZBzTY~8]q4kGV9RQE-VP $|\Hta݅I G!fyp ߎ!0hEٝ-T-fhǛ!11n }F))R1`\]M^>,[ {W`A8Tܝ'aQZY& t## #N!TYY0Oxȍ`kߟXY OE1qDsi)>745$nX2Ej% +ˍ"~Dޭ1wZ/ X,AvD(u_)eZX*ouО+Tek] DXXDdh?tpgnMFKvp³P 0'zu/}wx}6IC|xm38G{>f0|&9izh=)fK(K܎N"ioи,Xv|L=1ݭA\ib8G࿏}m!w/OA#yQ_lW3@MP]GL6qUƴTֱR(;X#'ox*S7(0,hv ̒x&:@rE* #d`3C0tfh %UVSL^5{ T"L& na'_L*S""7TNHW]>(rup UVU=`1][s< lҞKQ{?԰xlp1cab&#JCDLvZyc{[d0^/Y|{~-bK< \‹(+m~VKr@Q%7)j BeulJg4/[ $p\<*B?KErv<#l`^#(܏o J#KY-YLm >cɘ ;|ӹv= 4]?륃#Pw"*wſ-NNOV909U"l16GR.32x8%]L=W%3@@jw/#tFB(B)kWqG&WI}C/e0X3au o;H6~%e3=Q*0i*{mF]UruM{wfh+pS̃ {yAT=ZnU;b+"{PÉf<^l0uAYӔ5 >8=A V,\LR^>7KN咟DPr,ygRWdOW 5n<-DZͰŠP }H9\a!^u݅Au}/3i[Qs|ɎJČOSŠAB*ObHJS=VP |269Sx9[?mm&1M /ujR.ۑ(bL 6KE}'5$Q?.xB1:#[Ou^nQmuU@xVxl9p, m'g^"todGXlV97_cKTbVǿydJ~Fm=J!x+,!$ uQ5@: B+z?.}]0  2`iL .IHO%[e=Bؑ,%?+Uy4)8]'G̏ji~Pk[rJ 1.\#Tu(GSc7ggMߜ'n;'o6~9҃<$ee2J_zIѬX+>eHaIHhߝA퀞mNɋsi?Kȇ@Nڻy,󙁛_EM>%#bO¡ 4s!j&_gd-Sn;jG;5kTk @AyM4%ʼn$:W=PK[ȉ<u>XcԒį |T^޶o틛mh_o-9:HAYү~xsbTD0X$yʢFvXmuq} q]\_ё#,*3(?JzozW(mBwڸ^&tpc  kEBsy:c!o: hr7'//~Ap%T] c}=怂ѩWFaFb>>sVGՅ ZuZp,0%2ޤ: P_q.!ؽ M5%>' ԍ|<NWo;@az[ٳBbq(:3i0Y`ja #yko2- 1#[5N~(^];ZXÔ Ϭm'+Z5Xo.;j;.UJU~S6#,$yB+5>(h#y3w.Ww,]#Wu$J7;B%%E'&8}bDX=خ ҏrstB8zF]UNˣrbm(GgbEogpql[eu:b{\m:ӵ_ȳz$U<0A]3RK*8c6AyPH]#wC;s˼,yET.~(Ap4ЛX,;ņ ~}Gzn[,&Afipb^nڽjF:L2nċQz󕇪{tf \RNSk7hHI Gy O{` bus&-RUU Tc-y|vkr? [ru=3:K8gF]LCrתw|ګzl ĊN$3f$QĢ]4ycBe1=!Lȯ_ n Ԡo]JpOώh. Lp~pXp%F)i+pM 7~4<>Q`0px%9WyЫ0PǢ=<o ׁ  0ςB!MD0Ea٥Ǻ38DLܚe'xPB 7#yYߢsX[)f|u=ֳ>] +SmMTF 0& 6sfp(Dh%(xŠtJ mglf)H{{AfeֹLiOk'wIJimG])􊠆O0jOê]! KYGE;NYfJL)ȒSyDӄy 8iZJ5e^ /zj {2 >v= 8j[9uT$jJMnF+[ݵDxg_eAc32;I07@h=Xu?HhFpG9Gs (v0igF}qbyuYJ pf/܂cq3d8N\A±ڋ {[ bv I/VH쵰^k=?s!݅N`ll'y~^<R=~e Qyt* Pq^H 0#Vbl8&u0 @b=,G4k2?Յ<u$s]Q꤬p 9g(GwZ4yH(9Al tӏ r-=Iv )OUDAZ KpI\A\X"VzQ|Z/#]mPNWCuN ̥[9 N5_sB,0V.UU"W[ .'(/CS?qN>[`UONmJA8k~00 V,J3V>c.n`͝Qca|CԳy7sNQ4B6isv_6 Xẓu$CfrИr+B|4 τs!hs6ڞlfIЀs"j(0d6S˒Gv!ln&V~xT1GWQ'޳ЌU \'h|XlРƛWf >‘x%c&pk9|讘4cX}'x)B*tqN`,V =~yQn j6XDoLQSSfð|xJU^B:6!2w 4É9;gu4o{zkCk:w^a ;W$'|+bX()pPGר!r]Dn$#zoAF:II.~#+O(dcDRAXmǎc-pb]2 &@o)8Ks'~]/ь yKe㚐yUbA> DDJ8 dQ'vw.s7.Fb_1Tj 1]q?nT4E n1H8hXl0>9V= `L]EASɦ_>&|- 8 G K_ܵ*l;~O gE@N ?8z'Ŗ?†N q Lk$d zFáGm³r _<06lI%! Px(}އg~Wźb4[tE5fA͑$:GT`/]\zNm^u/2d?[ٖf}dz7Fۚ3StǍi&LLk,4{eB*#dxYTGf.R8SH16 `O7QQ?k*w{wvRdHG^zJH/>B+*y嵭 цfM` z33""!Vs{K<|o_Xߋ[/(Xj>{%o!86&;uUn/S8ҹ}%apXy\Pբ뽪a-]&FIO)2s ' /eW DLN~ ;牟MԒ2s~ul2f'FU.$nl\-hQ,"g9o r/$jTu[ Y!_; ~#K؟fUJjѡ(F; PFN9PXѼ ϔЁ-Gnrۅ1EKs.]OLqi/R.SBb6xP@_KwV.XU ?.UF<(^qwۘ^Oɣ@pT \}Ue:=(i-=mx:U{$Z ?jc$w1W䁰<9ΡݾsA$!AwơRqSEqqH ]>`%$̖%9\:+F 5d܄1kmFUnbt) ʇ٥bSU^m2 FPUwROO%:30/*zl/1Nόz/^ uş'H Ej܆+4  rG>jxHfPI "~*[J_/ ,ٓpsI%w#LNJ1,'0B|ܼF I_Fi ܄r/D(aIFFyB7`%}'%A*$~SqDchrw)&z[WXR<`yα=NWT*_Op\j 83,8DŽl$˱x]D碩{3j{Qy|'+ȃ2J%=(e9{h ͞:=2L9ҡ1o"ۯҫ| ʑ7Ј.`f шav 6q~NP9 5118C5B}w5 <6OjySHg2b_(z.%Trw?K85𛉮xx߾Dz=e?: |UES$Sm>4FWf}(|b3!I!_M"5a߿ƍj([r|xH~r(Fo^㢧A70婉 |K`2<1rga#.IM m9*;z0%o;]֙ iθj8hP\:53h?tc86 2GꑁL _/-ooGI Y㮄{/>$j[X5\5,籨(1s$%ώ)]4akN ΙAON_(j8yh'qWx9sEe6b 8ir$}Nf/MpR(o:/lW*I043-/JJ p[Rǡ^GkR/YψxETN5ɱ{. Lm.д _r&AOA_im]: %m4俟M6.?THKD ~4i u7ejĻh&i>dbz=/h?*h EgM :ќf 9uf#u+wUv1'ҧYs2_E]1!_<w"M$JXLTcja@qR4U+AsJ*)dDgP]#9 Mk=ŘWP+Ə/r}ZL aդ yvTv K)9/HRWD} !8^PY@ 8f|Mcab^TWl4jwϯX.gl''2><Sv%8`ƅY*9VMlQ@7 K fK2Zu;RM4sB/.|p'h<~83&hE J+HɖÔ6ѫ ),&OO/G'XtSĝQOAjZ˨yA2(`4bxE =W\f(WƮ_ EU0m /OF*2þDU\[G]:C+A7R~ 1^&;}wupNFI n1-m\uOAeu(w$8'S;LiaPgyo00cmb.а: nFGЎbA'D0Ÿ.!ɍWi0_xRav3Ǘb@hpG)}^c|(it:MU[ X6A2LAO O{/ɎA~ #ڭ|T%@7-:/CX4MYܪ >NG<1:žQ5y}\n˲$!!ޚ/E^/e :zbx0N5'x鞃ȉLG*$ܦ$Pmjhb2;pMk}s 2,jH,BA{r+LWs?F0qD vÐ |Sï$Em89k\|<>kv,_~YS99r,pr5-jvC]R8_WAPOj7KX[m01xJeIBj_'=t[1)L~:@NJl Ӹ:BcPN玩t8 @Vմ k'JSM' p(b*6FwD268TʅJ " L7L؈yVPtd ZR-ؙ\wnjIݥT]#3h.ɷ"@6zR݉B_xbu?dY')78, O?h q@`s?Jqܧ7. >+[7*t.fyVd(Hn[UQP&9;K0J]ZxCUۧ'uȺXD@tz^ϮB fE1#`lx|!^^3&`f5cavdtQ4݄t/B x"E3_Sqx]ngK29Je`R%uxKn<:30ڊM؆wtݟYe{Y4-of8 Ad ֲT*[3״LtyY@K0r՞봔eb9QWGz=;97]ww& k |nFMl"/sƏ? MrWZ^Wchq1= ~|>%_u u<'Kf%eApM t tb`=mzK_t9\ %yk"ZJZ[Y+ūsVzo u6܍/xi34?7yLₛ0 F̅\|ljE2RGEp*F#^Cw̰ld7F9 Vp%DCqzMކA|I brqa`3|_Teߎc4iI~Յ Uد#vDK/ҢHF7moBaQ_sS&/C}5!*/K}&|GyʩJ^'z|U#ns*C4#zԿ w:M%kɦ?s J65~+,iƒ t][;&/=(n- /-ݶNw㙑 Zwy BA5K7WKmX@ޔl #^;чB`OؗJP&.Vzƽ`1E+b5k4.i'v$S{AA%gGf+ 952}oGh<$Js! +Jϡ[J2=Ec,48OaXt*RѳE<pAABN{sX$ZB Z[`E0s昝6UL:pnyȂ߾N k/H09yN|. _9l( /IĥQXp2{*)TD0 38]aNY%=:%2s ۽ |Lga24ܭJD#,_{2 ȫj(`cv2O{?JTGf})J'Y 9.7>A.{<4=^4IYqr6DSkKWE*b<Ԉ(ĝ!T!c>7*?88 }̌Tf{3YOŌ7c3T(nEZGU}82,3yM~O,oK1Q4 \&!'. oڻJcvVBB┶ Kpʪz̳LADuI} {^.ʄ|7 ,}S3`p )Qt2 BT饐ʭT(]m -Qձ5C|%HU<@A&`S %Yp9+?LjsALhyK/Y XS$j}@Mx1LXJbTdAl`TW #yV;'Hd/z ؇YjMx]Lh-ut@QgkG~R\$o~:F#뭠 1I6~y"Qy7_?Oˌ/?xs-p$ !oӪL&5:?cQ_/B;^'6 :oNtaBYS^pB%$: ,f90G=kNacRĜnB/]S"a-ڼ!-黝u.wĐg6>@x0Icba̯xmkqC؅vSrnOu$qF {:y0A+@=(uH,ξZ%#wOd,+G OYӔvթ(pFhmFaqL~6b_ݤqn%20sJװ}x}8B t^Q~MVx`ծ3J! ?=Fv'Ib)ŊPk\ݡAqhgv)ksheb>zaUdg;XD?$E4t'份"0y_ w $Vٟs_?K]Pu6ۈ*N~@#8u7r*"mSLXEı 7Hl J; pi}&7c- lc W'чPX_ݼtVO;b%eBNEjyGq>M!k3(?KaHn`Sc<Ζ)>g5@]V$tpP8v3CZ-f9|m}J_`|\RV8?OVzaσV2Eݰ^y38:/_o1u\Σu=爯&QA˵-j6H2_,n~龢}KWH/:˒p"6J!\PNLF܍[v~x/ ^EF _&52[zfy@F"GMH f(3- =mZ181М>.v'5=kwHȆ3c5z#V[M+w-u|7mQ5]I27LFt߳C4b K1~ad~:2+biri!}PjQ%Vd`3NXXSDX.YL?p >UݭLoG"ozՂkYG`ӢOK6(bIMa}ps@>"A,]fC\njOIeWjav t}ոr6e+Uz C= /(H<C^*P\ο=JmC q"O-eٸpSLH"J9,׾i(ޖKɏ gthFm82c#;SWoZŻCtbUca7}HHKZ%haE&Kr$@AF)T.h  ̑&6M= [n]Zy糞F!07:2 L %N"Q ӱts0R]*}b>㛝, +3PiE56\dM}Z6X^FƵK-J啄Tc߱lgg:Mdtqջ u5~lu8侪Zj-X]딜i :f6OWQwm|F!P_VQtRMW.z ΃XzES<[j"Sp9s (;bT磞?=2jQQΑRU>ݳ=}0A*:Hj+2^ ]5T`Vu6ܙWCUU+skeƙ!ara]!Y Da!I <&)?^\UH8Тk Uc=K Yj@}&R6s\"a8pkBPRE&WyTTaMrtf,ZA9$vTRvYқa$ 4Zq[5`˞KJi{]sWJYv{$<.>e[K9(oLá^^Yyˎf-0'*ft(E2<$iW&j7}$ZiGDY񧭹oL\Ul|np[;vy &-D&oOO"1$ӴrL{=۷TӮdpP nbw^8)(R"AdBYyK:eA[Ws6/ vٮoǾӲo߾Y*s]F ruCe[m Oȝq­8WN+)F0b|`\/:kѝ'߰m1A{i`HSӃB&6v-lk:_2AihzhhT: 8(qzcPnVG˳uw>>N0Ĕ[8yWƕȳzn tXG/G8I z'5D®Bh倄0G]-8P𓚮N$(^lfU!gƒ,/]aJt'^eg6 ]7/j?rEANU'p=Fꁽȶ¶K6,`ފ)#xHܻg5tbZk@bb_]^T-wCo]MTM^"i;I%[w'XKW1||/Kx;B.)dyJ$Mx}4X 9O+7vӳFH*%z/kꑚ\">*-qEYhx:~nIX3tDZ?1p 4 B7U-^\xUHϜD8w2tp(DS(̈́B^ZXCjj뷶{ |tenkz,Tg*'kVn|d]J0| ;$EL%~vN] /fBVyGȺ"*ܡof\[1_j;[?j90#Ћt3&72bmQ> `垦tk1 |i`]rª~:iBUK>v.f ́WԤ6a>m&<">r]k( S-  IhyXLXҫcp[y ٱ\xI:P2lZxV s$r#Kx`2$8lOF\neIxN/N$ʹQ.Ϝt*9켟V  n c"*~nHd\VH9V#j J։VևgQ#Y#=Q|Y畀'(mT@" jjv;-"Y0oI(Dj Ʌ' yyi>E{!!*1 @Ԩ.Ղ'aR>cNGœHhhI ltTC!:&p㦁 O^1+qr<%8߼Bmp 5dˆN3U 3*&-ĭ-{M4)TQF?ܣDX-^`'21Ɯ MYgo-Q:? >*!c'Y#FT=1y CwT_2r(Xi=Bc]QpO96⮖C PhUyk( J>tPue+1Ntb|wZ:# =7,vLbI-Q 83xS.Halaw=(}{;{.q wMM[}I* 12bo^t$De'DiUf2Yem5XZoϪ7T=5c=WqrNЖưVP\`Fs(YE4qń8PlM.?}V!d%';6N %Sd_?*&h sG9 Vf/ 9>(vH/\x9_3 )=曬-foTW*}1A󇥏{@dIaS,a@;k6դ㠾8Bs:/94??4* h{n҄[;^ F.AW͋ތ=zhW< EF$cbWx')~ѽO)`A)d. M737vxcp0ux̵h/҈_ЉujɈzBmn6GRY],)<-el,qv=_J02XQqqC 9Y$4rοBRgOH hdh?}{A P(-'*Y~ @F;6W8JC|I|⥰E z6 .c;XwatcFZ'!Ws6nЬdrT>ߓ4W_ O 8ՠ6tͼZy1]:$Nj0-#uh=z.pxUiX[CUdڞ>T:MH!xɚʢ22p'3$ɓqU}}XE#D`pxS@;ck-ZexE}afuvS\#i |^UB\=Q:U ₀]R0&0~&Y&Ӆ再:G J9"mQ[I [!"*kq̀7L)xvQ/ ڱ}5:MFv4?;>˲w ؙ!+ܗ34F-er+E  Z*FxIAvAVdf.`I"va GEY99rVa];.#)lQP'WVUܼ//%K2W슲l;Ӹ*[} `6EF3ׅa4 l+F,=(kdp"ad) EocK"Oڡ,,)᭚1bF?sؑ8Tdze]njh;:rFsRI%=&Z o2qgڲ_%zon]aЅ+m 52|: Mxho첳m DO iXM !F>/%k4*-D( K} oMD>Λd־I֫cBmuK>~ۀ|֟;“ʹJ~z@,TlԤ2g(4?9@0B49j<┰FӯeFę7ЕC 1.w Q7OahmG]ұmPrg(z&S/%ZB<Ϩyv b[x'NhLh|{OA;ŀ[/>̯H<ϿP3+Uѝzj݆? 9=imFw#_&}G0h]c~'&u#.,SJ^6*xӑ/ ÉIiC!4Jh9rb5V<}Jb(m&d}JNDžQJ#2z&7Lo8/hdq' 5nOOzhC#z] Y޴2:W~6_ ջGвIZJKVՈ}@LjOe=aU+!T y妦ŵm~`Ӓ [@QE(_ќݘ` AI<2壔wXI }|DY\aXΒL&voѝxRP 4H6(E_G'NRڏ jN8~R~;h2-= }"~V&cLl:R^3~ g6 E;Jw#Pz7zx~d)ZҺV.hoeNl(gF4iK: tEƄYlw([LDw%pO^*7J]:eꥉ>u8c| bu NW&!UC/‰{< LY9. ADmnO |S ĮD=llyf=㝨pX`'Utw _B4ke6r낓D`{,<ùgLK %냋ݍHֺD'R#3\칽 R͡sL8!ǹMէ{t1,1⌎Dm>vPK+*xsRk[\`?~.JS?K2Y.7TpH~hm` 2-;5%U6G*2֏DbM:[ I8Zy*wR\`m'WQ(OLAJIf.R \\ާrtN&FT4Tug<_(q)wExtL!ۍ|־7M^Iykm%6goxHA˾PNԽ6!$L{hX cpL}*e?39>|JѤ{TAF*p 7־w,)Dnp-d{@u`@9NG@ Hmq;lJv#·9@.;-??e6BZ=|@J- PZBaaT%XR׾V|Po,sYOK)rθ:*j# >3,$a!WH| 9m@Yǚ(wpU 2* -'px[mzI ~:] -'PTx eX6ᵯgqX+S!v*."Xz+a-eK ={c:?~胰zSp=x^f[cr14*,SvOSz.’pZQp[I%$C8 ]P 7{'YƮRk d~--Cm;%|p!^Ư N-5mwKt8DRЕP 3 ^ljr*UiRUV\#`f_G_| ʘTvXOeS>"P/(GfS:WTi6D/#Å0 7+R;Q(|'ʗ"@F aI%X`n墎.~D޸KOq55G viG*䴦lY\!1qvo{RbXNЀ,1k:f_T Z@tb}?h 4Xa|$Jlp}%`CZn=b.QlGS&pTJdfewI+n߬Z:/0i•0O|Xbyӆp-;cfdKMC廭/5ȵK C7R+E*7cgHN{]'S4l+BK"B).QD\F'ԳCb"z7{]cRsϙJ;S_.mxw3S祆z\~^i^d_TC-ԳRq5HYhq6NL2OEIaX}d,_7;悮ŸZ\ lCiS&uoT ~vF;=9;) }T/PCKݑH)֬~n{ !x뢩ls˗Ltاd|4F>=!b*"!-~RH!%6fGBZL>OHByj59# (Η6A`5PJ7K'I{o$Uڱ ) x=̎ThbÁ*6Mf7+Zj;Ogp- g2SO5wݥP0ы16@ɬ hp#ƾ wTΗzR8Moth^Tt.<21BdYE)'6e\p$DVQ0@`,5KgTQ6oeEOeۦܕ17 ƛN;!W(3m CrQ'\ ɭ&Kf\QxfnD[*?5g0`He. mX߈ 2i0V25ʃ{RI[FHGO%v s3HcWbʌ0x \0]czɾZ>[0n'_oryۓ N)71tzH.'JįaFZaiT$Y0U HX +r) ާ&uԕUKcgZ|}1qLd~=2-1zbfƂs(gm[`X[+TM~@y͛@0qʬoXJĦ;t֏贈XNC̙>7;AS 9>Yn}K),j' ϝp{* M͔6~DT)mEFhWF:3r_t-ژ1-~K;;Q)VK҆-N@]S!Dߩ[Ș^sq.D^Gܾ,Sctb,B^9;@Ԫ?ˎKރ.a{,d+?"LכՈrvFMY+ $(z0HK0>5 fJ;am=02aF'AV'UQk+N ΖF].Lk3MLp RD '60IQ}.7w3v|[7vi'v!{߼;wl3؝T 1 xGtn)!O:-9N \)z, }ȵ+^X>Q]وԾLLUs?  <鋬_dZ?Mi1댜W;j~S{g{oM 쥟!DĢwL Jf{^] [ $ Cy‡]#G_,R \^-,BP_tx%2PT ʔ{Dt5)S+֖0faZ.=P$O5vP\%Z5} {#eRvA!V%TjZeU.֘>ZЍ xK.Mb{fo(`E!yH\Y;6Q&>%oXoY8$U^`c+2o-n|Ͽ1kрzAXnLtrs x|d[_ ki -9} clMǿwFáZI/"=`Ou0OvtjEح;> ξt^`h ( w5UoAXĂ[ؚ]EEk!]\ƞ-Jȟ zיĹg[VuN.]ت={t0~N|V&$vFŽ?8>{ϊ/XE͟=ʥY9n4{ C6i:HH^5/ ?8еLhTTޟZ*wtO I"$vѥ<{9f*N.Sv>%P;9+2wg6R3fof.I!e @ųB_XNrݤ?.7xpeq։aFC(u%1f]xy|n^'D)N܄́ øm %4Y,' l([̘km+Ra# T[zż;ֺ3it5kE4a+VFڀTB .DFG"c<~ePMQi6CU|-v&+K(wv7>$Fb k*YwpCEq ρ0Vaߤ3%a\78E9J$=!.c]o^u6C~9:mYJl2v!8AFDI:cVv)~ ?. `^&}^U"򾪟yTԞ'ka2M:KgS{C+nD$V#9ubfaa\5e$-(|  @SR띑Z[-mrvj9kׁG5Ʋ_y65APs=tgvqh39/@Op\pI*CGj\f.d+& I {xJ;Ue?YYO*)|X^88>?5VoTp}ܨx%BgZ~w_;fPo*nەlJe{H9EՠmP LliK}}.j0S]uVŜv)Ya SEwV{ >,mby,xsO|^0 TS;i cЁTrZsLc{Vb5Չs7_+ w2MZ :~~D`8%[W+ȹbHTcYۑ)6]eD., aٸK]_; :"k Ÿ  uV`\:_mxWkש Q*K;O&ɑڳ7Q ;]PE& *^皾_Qq_p"\ v`꺅C ڗ"*;@%~vއF9 75VQG(/N]pUE9XB3j^m[Jj7uhGQy 7UbQBD^XjY #m:.,nkTl>ZMI%b3䩬`SB>ki~uҷ`t1-@880b ܃4ra9/LAČ'ѻ|=n?6|@csx/&|?:+aG8hSn3v-`e\{q΃"grHYht}AtqZb =*93KxEE)fg {,jpýMK_58.EwƲ~PjI~Q҈?k(lEvUx<i l}op^ɳ:W}_LO\b}$IL }~QӒKc !q:׈Šn zIjTu^XG*sF$A} ti%\~\G^kwrZ,aH4߭*[MOTN5 fP?]:=1z"?q=$ֆjyȣ^T!!fj[C6@)G A(74F)菚&9~:zR{ܢrw-B_dc'A^<,jIp^B%[gZ Ó,=ao9o4.)~t1>;(ߋHQ[d\wjLۡ-u$ʴ#TX٥D](|"ٍIJJ+0N[ty:Gy;q+uz3FN@v Tq9+# ` [ԙe%h/RkWpC~.$i\h0[ 4.@@ t8vHZ(nvG$ALs|C6@VvI>d 2N%pL`+{;dFүENj@ Ռz;.p!ְ; W_$S$4C٨,Lx=0PƎ"42WMWl1Kl1”M2; h4qo*e5ЭT\{f0\gErs簇F%Z:Ǩo"S `*yYptg mh"ɥ߮$b#&}IM\H9ty09I}8> ;pKRϺ"V$F<Vo5N: g]唗0f#Q& 3P h\Qil"5N*-#S{`ՈE (.yޛnhdM.;:^kk@ޕlF8D%t>} (|錓!Wvv% F-@.9Uún@ogg;Y2&l'R/l@mG}b~jۿ+ڼax oҳ{s=BԊPeoYLA  J&]@[*/ >ztᤤ+MlwZ:ĥᢥYb3y6dE)F9@q;aKbtV~qV+nV #ަ%VqZ]غ}"YrQ&%[UI;r AӝqoGCQZR 6Q aߛqxp])Jq/_[tr%lL)7Q[M/NxӸ,43*ZVFQ"yQ\jB㰯n81 YA+n}  ۢ&/-y;X9&+'g1߃s},Uh$&Q <Z%k3uavR]^}xLlo@(=>]~'\Crq3YlQpA 5WE"O[FbJ88a _=P#kXਾy#p+Ĵq7RA xdJGUs( d֏z5=g__Nj6VFJwT: !_TXt J SeFѿIOуW]I{˼zv 4a5(EBs]:β?6P)eHaR4ǯ٭OkQ :,H :w8[4U8b+^ *A0wRk>#Q8[}3۳8E&a41RpO Ne"uD;+6&T, - XVq;S2 8Sߕ U6Ч',|uM{T_G9df",|lPt i1ٙ B_O4F@9,\ CЖiRtA"~~03'< Ź̚4P9WNtS>?D#ݶA˽i]^ܭTpQ㲜\TSY(`ll '>'"ؾu1pTK8V pwm(.sV)#)P 3Z.;Kƒ vdx,i[#B/uuq֯:Q #RLH84f^ӛNw | \|KqN-˼Ӣ DN\k}֠nDɒ}G _W5D + f"KaNHY֕%@Ծ*dFokAS6Űƌ{Se{n0\-`}͇k ͔筿l4RCmޒH)2Z1~|$>d fϻO".S0=S%\twjfM" =եٵR֘X{olj*(GC(G o@8DU8wieBxa:WBͳL&V] 8:폤\vmg)a,b]PIƟ}AuȨjv9>:˲,ЛGQ2W g{!%l'vg&05Amګˆ(ת 1 %8}i[0g͙;~RkZy-`tmB#~Afx8íU{ _7;pMk+uʅ P<V dl*&"MiCIp zT5QIh #GPhJ ]nH+2.s%= IHgUhx #;[긟 \^Rf_IN}XJv}bL9d"oCx_SʃD#@t>7^S "-m*eC/~9< jTCnn xeJb -KqM\8Za}'r4&Qn?HTCt0,~g%K-[8;JZ~Q$¤/UؾĀw7 RE),Cd(.\D`T1$QQnQxa*5VurLl=WZ/GvǾ9 5[WQ[rȱPB{{-w4{*P # *篏!6 ݋+I=~;<0c;ʃ۽9P$9UX> Q9dHx_˓Ӭ1g:GߙE 'P#sJLw#<۾ߢ<(@-xԻ2fҪuG0$lL8Ya$eȲTDΚ3$|ܐGfa1 Pm t'%OUÀ~}X/3is_Ep|0A|w1=>:ID?E#xna@}oa{!eft \ p W>H4[,ǘc.z;w8Hz"TӜE8RNCt1ɺ]:T4y`Cf>ٙ 2;Ϧ?p:r:n3_ <!}*={9~ B(YkSo-r_[_3mp2!%G?D} 2<3\4"T?dJE4D0dKC_r.. l7抬6?;iz mj݂u8^H!bk̛$hzIE:SlrgiemaM4fiƌNm\ͭg_ MIN,Xp}uɇ'Љcl  4.zbl;AvHb8F@Y%ƁQh[X(1Lر9X'})a'FRc9b?=X-JСr\glZ<3n65)@y>18'8[OٿO0W%☝Z:`r1nAyKweDEHf5oX- o"vsez9E="<0Hc;J({ *)rTu+p0MDr Pd$پKZΑ̢!6|!:=C5eX~qpyBKm&k p ln)Y-2]}_*3aRYAQSң;_IZpq<,LJ!|[zx&-F*+5QbM>ߙѾd`j%P&{zKNRD)қ O]^ T)=u}c*!^=dv.81lqåBIL?! kɺ豰|U1(󔅿熗r!2--MJ 09 ̽9IGg[J>EȝtI,"MzJbO8U>}3`$褘H`+0g6x$Y<:9}=[LW|i3a8ZYfi kΞBObxз/#C~N,+,d.M:Ti$OA*ᗙ^Me,tE6YKƎ<͆4qf{eϩ™А]ZrӤF>>LYބI6fpC{_sˠ!{:<ߩLt|ڬ::u_/E5{E7&o_USqL}VBx{M 9\'}DK"Tgfu2Pn֑. 26V m'4St gS#iXE \7QgN.6@Z VaME n@"78Zs HedcKfyq; _'tOW'`Z54$lA@4za")U1Nw?InOɧ,#6Y5 Ɛw:sf5~%@^?*?̔봨-V}ŐĵRv(oWڤvC&u{Jѷ5qKhaבN%q+`rЪ<@ư#g#FPF+Y ї[=G)ݧ둠oNeߌڊBɑb3Lp [chm)Vo7ٗ+u)0GES%h|g$ }Q%j?LL\(\%;M2+^]z0қ5]/cU$N*mI5̖*L62JRdlTj u?y)LSm6)7CP2$f䢦›eeRkiF$FjV$T9U;4M~N׈KjahȤdȆPKds.: (lAgzGFI ϛ\J:D<M}MmAC d}CIdmjC_ .]*mjW! Y ٟf/xϞ%Ps~۔nX´\klupo;m`ӓ|S.1E ܂g:gS7Lɽ8" z/%̌݁kҤz-I:r}@.3@B+=8Pb$IBǫ[(@T)\x,"3~uM0tQFܹ@|L"(|bJCϏ3v)%ΐ~$bQPoS )f)懹'Ґ*A=5\b!3M|7V . `WY4J^SjBfu3\`a @Ƃ"w7_ ^ȶJNJ<Dc~L[BZIf]PNsϜ/QBSM,O l ?Av MGB9t'Y7:{U42M; on_~655 bҍo>Rʣl@`g / RoOj%W4ְEMjͨXhq@Sz( ae< 0حAmQNu^zcǣ)ٷW w*. !JA+܃ @0ȳYnrآkz9bN%~jaŏ%((O5YRZҏn_%AKC¶5r,St5v$'7LuƎFRnlsڜu*A1BΘQvڤ:T[[=#f>Ty73ĠL67ȑu.2[K=_H+Jz N 1qvۿͥ_e i| j齃g 1l\=FQMVzbaZH.LK*\h dZZkg) #5W8  wh.d1[a҈JJ4Wdt[! 1(>Yafѧ=p}OCuD_ MWanE۔ԫCVt\& .TPlZ<B6 %[[3[x|[CpY=9| 1M ynӬv$EuZŸiS Y$^^,Y%**Eg.̝h:H:yԽsרX80Oq9>6[5 lN=I,{rBҥu%vg}(uqDl%Q97 'nq9ۅw!%2H\D˓;-[U:HM'y~YImX!̽PI 9?)N/㙄5e1#y3 :SOql ;Y05!({xK%!Ϫ68gJ ۆjRWy``_k:^BJMxi&7-% ˣ8z^}{7aM euN0ֲb)cڦ+E06~tIeo),c %}m23T$K 8H?6_b8_ѭWM@nqg-:׉(-W.&?9 (݊! 3"IE֖nwF WtXwޗCu`X| E z']1]u'uUz]A1^g8 'AmdnAbK<(MinŽ Z/m$e_,BKlӁ _a].VmnYL#8D(v]}t1wfޙFX^Ot/e 4a%s"뉉7EI\eI؝j{6 "`S;9dDtjyY` 1=%5\ߏ|Z R\'7 QáA{>cgɫ)]t]}x!v=HDDd2CV{'Sa[ӈ('s A\:B]%R--Qi/`Kkg&Vq'& Lݯio&t,J{Buw>LCNyA䙉^FLKbop lŀ4np[S.O %}C@whk!҇ X7iR*B #;:^:p vx3nHRg$+MfGE[Cb:eYg1,D:B"'ȎWWd~U`XlӸx ͎baC`ddwe'a,-q+j'],J\ʰz1zM,֗oas@Q +'1>,d y)UMTrqTFy:!XD|pOǞeӃ;P9k6 *]-hDPSuRp)Qnղ|:~\]cBם,(Z9M+;|<,9H'+‚mE@#= (!9A:KƯ{cYG=uS+-:R! s BGBTt!@lfAeGG˙I~q'NȽs_ q\&ѠӛK 󗽆r&FA I$BU>DXýzTny/r 5Os5jLCQ!=jIaYZ| #𹵚&jmv1Q|zzS*K1a7q:*R-oᇵ:|~^ ^,-Tykdd@vD @;(^'<`[V;XЏYjMh0ZU|S/ǒOB4$1t/u`AXrグu]3ڋk޹"4h kG=Ud`.YܟnicB$ 0z4uק1AFʫxeXTnCA5-Ւ 9ȏ2acrHJ3SܼR3|8 6޷e>KI Y2#xx>C^O}/دGN#L<7HY:k_X -U%T'с@]P>c"6]Dw,ZH1-KruS,4~!\Sy9klȣ,ϭ[p.{3t4qik{ـRPn8`)svtQ*)T]OIցx_5 iF.m?ߟ*$4}m?VtfF٦WAU pEyT#:+Vڨg4? YPTQ'p9-B= Z)ay"QCMlݛ" $vd2)vO >'Ӄ7wl6RM`{X7uꃪ ^rcQk/FQw:J2&*x/fv~!8f4-\'%>LҐ[Cmg *WplϵYq`Nx#ze{rEp3A۪L\xns/+BM3"$"κ5Ep[-tQĴ3Gkщ0\HDt#yNL@N4KK5cCL/_bk\J["ww靍DYt[܌Ik[PYX(Ǽ^ =/Qkcaqqy?X+unQz!JRC@yU6ZO1:<) 7[w |'r4]jQD,/Qa6{K0Dq}4HX B +bf>z̦Ib9HiǢvo XzfMC!G tP} X$%ؠ?N?HS4Qʭ:G)]I=?Q ~&GCP)X$kɠ-Z [E_8aIj;Hk6i+Ro5*%0β\J2f?oMErrgznY",Q074-IZ^_0&^=ƀ_7kݤ0虝7c2'[Ԡ. plq[fbY(ZʅӏKWhݔ-m5uMr{,I̿h񲴙q /dQr7VITZyř Br)~nH.m؀V'ƒ߂FbymKMVW_YQ'Qy5@[H˜0D}x{ybNҋIG<6qn~xYͅ+ɵ$\ni[Tj|XpSajҽBiyBvq'7HeCxJ3L3ztAgj v N=)kD{L'K S=q'GZW!FXm Sa@',ҜS/aIm~!]J |DЮ#s(L84 M_CR4 UA; HA4H,Hu1PcxLqO$fC4) ޯt߯ ۘOAx-MEĪyk 6Fb1~^^ֹE)1d熇L*곊:^Dh+Q ܌qm#?e{&8RAk(Mb|q/m]' ܪ0S=K @tcP~:HjnT0K2B[`T-SB;vX@3DyDW$CZ"֐5eavg&\ZA'6-rk^pw1$ tzl'yA #plJC{!2?vn=Ec"V1 ȏ NpPi"ʺU63RgG܀h#K`/[iD¶@ ahf/L;",7JPeW8=>R\sY%Ĝ Khc 6~]bdfNTCt0w!*p`H 6T6vUI3yg-Fr4 ӘZL>R:m=szsWY =ZY'"%@o\]6+#PԅE?.H4{7˯!q*PQUn8'#l8m>=H_qzwxU_(D  7٦j P6,/p% %r6tk6ۚMTApJ7Ź>o"!h2'N8T[vV[]eJۏR]xVwM.9"?O{آ+6 y} *J~WEVx˚x&v-uQsmط'^b`.HX;B⎈vD':Ә pޒZLu%g-owuOJ)J;SlUI6``;NΓ䖿l)unh?ܲVĨLP:֝Dž^V"# 9qUmp=vLM9Ae@<aTcS;ـoȇC(JM#gި"?t,-[?]?OR* aEkc=g#@ M-By4wЉ}*rj?T wR&hAA]SPP} WĢ/T}~6Y>vj_caR#,SɗaEdEEnm.Vf(xG!:Q3`$%'LjX;SKtLy:#[/510u OZy׫oe-#G9':磠/ry&0cg;x[;8riڋRf6s>ϐnN mAʺZ \HJ򼽺TfO͏!1ԘpaCpH|Bh`{sj%/R+G3F;KqʴrV-{εom2hr=^)qYUŠSkVhE!l' ًx ?34BIt`rT(f Qăpg!nW2 B`fڷѼ1{4f|ipN x7s硻4ZI>._h ҡ۪$ҕ' }a䤇!`( :r9AC1xC)cv7jht4 ;2-屐6v oG^}r(]ԫ \hmqEEeL,j&,2t8^$=$Ɛe5}\=_"UK<;u2S] )=c \oΔx^"@ӻ2Dg$XsXۡuQ0rvo// RAFLZ,_@#[GJ5~b ~ZC0ɱ_~&3>2m"EGۇT(ױmW~sr w$Uc'^e>jp3FGolJ_l Cճ w#ș5'U_~oQ*z Bq0';a,6cA)-ёLDUC8NX#dI27Gt/6Lޥڗ6Ycg.)ơ'Bc댗?8x%Y|5ѷiĸ/2y:L [¡s{aB"B'U8{ >.*[W.P :4IJ-㘠Rؐc= SpߞUDtDN@"d!ۃjo?vTpg7\ߺcz~ m\iHhk-Ϲѹ?-P,zz 2Ak%堊5).|@H~E ދ!jq?.M{:w'#Ee 1W~$ZCCOsPtvw[#x`]\ؿ^a[e1^nȳ'P/ƅɿCBi`q(7č orwS}|*.0yBUzp '~\BP#O8E`X1AɽLr\Vr1lHf_\0?o>8_{[t5G-<`ElG>N]3Ѝ‡_63$g0_:5 h}p*Xs"POf ^vua7u_EOjVU3T,Sqv}H~OAe  qw\8]R$pB!VP絼lăg:)U, \IݰM(tV?8NS$|_ݒi$םRo0WEhlڃ\$A+E~@=X̵dHXL|s=Ii:rBB8X~7xw~׺<"/2GAٸB٫E3j>2\T(>K`z0ίF^S|9Vp9Zqj-4ajtz-?[㎈b@Aen'ps}}`e#7̄{ŹO ?K7k=wMQ1vgeiVaȓУ:r4//h /蠍 QEn7f!]3TG$UPcKͶ1qJOYFs9 ;èPFӿ>V=v[0bJU17hI!Ъ`{MysJ/rZ$!#GR0۰/APؕ{G1u+`{|>ή*r\Kk@M$E>n"g'_y6cg'\װɠv$RQqe~oPH[6%6|RNuT#SrTL]fLC0d?Bv`ԯzAҖlkm E0V_/\ka5 [dqiSyC5eWT^v¹._£1U’)QۂUhF NtuO޽ cAUܙ+,"C5ɤ! bQVe4sI -(eQ{T%<՜|~V!\O,QKnhPZHr3 =Go6J!g\?*i2x}* SOm@a//%ga#,]],zj6լ; ajb^S,?:cM6R5]7Og,pƊˉW]eY pmDPb$sXAs-#%UmFm._ XLhl^F[8ɍ䒊Bhp^4Mј օhLШ3'-<qFpWO'dy[&;G.dBGQT͠/drc\FhB .E5 ҞyVxA rpB ALP{ *+o#LH?}Qmݼ )djm7ӏ4ѣx׵M YX@OA@s{ ܠ v^On qy f0>bJKgØɊ`aQ#4ev)q$2 M P>Bn&&hh׽ABDPcy>'E_L6q2GP:]aZ!áCZa+׊%QbPXX@9:X|K=R0\'_Wzo ڸ!Eګ=@-w \Ͽ&fy&n˙R ן=2 {x] ewׅ(VdW|^Qi5CJV0뜺Y{XL/g&iEw!B^bF[9" %(ȟ Y}ݥ5|x DWX1yd4HDH$^ nn{&|M|6<+Q`pB}92u4LR{񓸦kǁ>dHC52 4AFGo ;a1ۼ:없)P~b8yI@MތNfZ-)LDZzɉ~H&FI?$ C $}yz?Msyc= flZIJplu Ny(J6䓂hf+.S>Xٮ2[Ōe?'e ٸthHw5`!h6z<Z8}2 ׈=p"B 3&'ӻNS\I^lnpG=⍔tŖv)8Pu,@mPMƊӲ%Y4mӑw \bH7mZ{ܯt$(86W.&E .~)|´u!c?D SkXsڇ!;` \J'9X;M`T .jL j.$v+tVx^B'[ɥ)8u>Ȏ3;J=蕞y!FV)v }$т6wmOQL樑31zA>D 4yEVNt#e5yqL.QYH {42X#%ìOz%HJ}xE}"FsÙSƽgQc`Z ظ,a^+csQ.j}kz^ XS+T'ZZ};eFY,f(UF4?uVƛQ!E1?"$za߆39x8I:2೒,gO[TRZA҃9/] rwS{sX|ZTMU.@Jt];}4Bۛrtoy1,2M)W *QVJM cO"ȐGrޘk3)l.vp+QƂ W~$@f)wa;͛=cUIN8!tD"?U7&v(-oPIXr oμS8x%i^M[5"Bզւ>Y'B.դT_yEGg҄ JxiEW /h;pq韅ָܬ?&;#_R  NXnVx[4 e>|nmdLteM\6%gFٍS䞞Md h!oܵ?胭50|:w0=CMXotqQ-I}Gʞr_@C# @%Dùj'p7բÓW2盤MiE-` f[ g*0$Pqc ~2Oij PږGr,J:6SA~[h@_} $X:zr ®E:f3oG7 HJٖxK<o^2Ѭᔞj8UBӘSa rOMF%g=3|JxlŽ!2C^5}o}Hz5Eln) lM',ɛjE|r$Y%y"#VZ{\}n ^~ZmBNKq-|$Ub,Ǟ3]D/JPrH(yTT!-# UJV׬@]d0ǟB`~Ѵh QHg//ѿQbfDVJ)i@rY&*xj`1#wN|4nn8/Cie&r~mdpd'q7B~>v Cgώ o ,g!b#3s#wPҗp^X'Kz|k7tTrXrk9ΛQUU2؅-:z[Tl^kv& y:+ʙgo ci޾Zo}Bk( Hw]RuYm :Z8]@Z+,ϗg_AI 1W}硲94([2v%{=)*0>P!Z1 k%vYCk8LQcթOH>ze 6 5D?Ώ>gBH@h9 7'.{^^\q>1< 1nH|]tL,o)7ܧHa,x.K+U9 L=MF y #uG%fQZ77s2H)NSWǏXƷFO++B>7YPpx%G *)>11ipS>gp $3j 3]}|-Tq$m](xtt1pOmɘSQF( <wx}*S"!pcpⵣV+)vKkK@KS(XIҲ/{516ۣ.z@eph!!/[Hfmx >a-.׀<ѵ^i%esBQ\Q>[{vȱ.W>0w>J GVs>yu:M[;(7*XAmeI6s+wݥϷ5lQ&l5ĹZf'5y(PG ^U@aqg@j w7t 3a4}}Rw?)|鳅Z&5=҃hJf3Z{J{vzDE[#$jyտsHJF!>z9ใRi,% I7+OH#FqZ*CgKrRJ^!lطc5wfXq^2L8IN={8a^_l U9zB+3+*'-/HUVcuhBF]e0R&mxh"@WG!?8lYnl"LH,rdž$9fE;W@= &did> \ͮJQTob*t}qmԿ{麇 =X/$_T"AY1 lF wRO.w:6;J&1w8ɿBy^Pᆕ?A5*3 `eYS,21~yCxPGH|帪7:W62k3N_C9TryGUT0Qqu֎MQ"`s'a /A̕mLVfdIp#=t5,#?ZIAk,}8 vDK  -_{p rqc*-t઀|6O<%BKIQ_fUzO?һT^4? .eQ)ު$o7#t^`: uk]s ;^dS%!US,?y7چ"-i6L[IN8Rc4NTI8џF$R:_+g >_ܞbFsـU?x R\X19Ο)4ZuuRIҰF`6TxkNs"ao\纞L\}ÛꪒaȮ*W|?(Jb 1<&ˣ%qRG@!Wi[I4ݸK~D~H*KY]Aʓf(g¿, 95~)A]&x8{̻Ǡ2Wd\؇D]hHZ[iЂUs0mj]As |o&f =|貔sk@haB{ Dkx!F)U MxP-mOs?c>َ2.kId4:=Td0<7ƥtўl^WLplu~4 Ths' y·РB<~zprAe聓AF7 *UF^l 0RbӄÊi&@f ١qLZ6IDb4+ٹrF.}˧=^x^ >,=݉l]3^p`LC 9(z䙞<1zFب!a5xqߊ%Lk4G$iOqe#w,[ ›*NQf%?I]cwc6D% H~>f۱u?VF9nzFde+W a/kR6lWM$XT4?m#⫺ Yy vb^s0: #+#v1Vhmf xDߖuB YPMeq.&O(Zlv1(L7fuNʡҊ4T-7֮.4y)(;۪i*=¡[aDY*]'X=w>}="WsϮyWy otoBS>i2qA j NKE>1bֆ%w/yh1F.m9_Ҷ 0vsT`[HeV8{BQ@]2R"Lqtw靑sݪe.Xn+%K?SW zpɜ+SY=D1[d9]8sOqNݱ2 3L'G: wK w5u+Jy&KN7gJsU0֗cEjBe<40^/O>و  TRE '*=bS"u^_ccy4a :8o^q .-sk Ud$*~Jw$D4b*F uD/up$P@U*>%ɀ2Oubvv r= "{Ը$!@$p# 6x$$~fMϼhs!κ ``|[h(%\D=S+c*Hڼ]Ɓ!׺P OfL(S^k%}1 - }:@f:I'iQ(ܭ+oE5Ν٪:E1نR:N~$gmk}j>~-DGj;cQOa 57xI',*%k|"&?XNtZGd&-~"'/\q`KGM0>>=$t|b-TA]#8 /\t>|Ġx5g)̮w=%;A+ys {w08Ng\ō&E6KqILhlfY}}Y3|)1cDkLc74VҔjQ> ٬ Ӈ_slyZ9{Et,{ڠl,f[e'>KZ0y$6,5!@7±Ng%I9qIO$5TcCw-cV>oa{7Pu_ha-I%q˞]ͫ‹5)1KeoXJ4*Qy4@T'¦Ֆl юў{P 8Pd@Inh%u7M9a Ve|Bn.}<#:L l809QF>ѐe[ =DX6Lg{xhuk«1}UK {kٮ7ay uxr'rQ[RS*^ u"lΦ;<ȒaU„\hv&q_ _N\.ش^C xÇCKsI]vLG=!6! 暲ة4A[7(Lk4Df{y+@9ٗh>гʂoyKӮ3(h <9& >,`:B A + _IBU:rL|2Q7ˌѬ/&F/+`JO$sYGv5^,.ᛩZ]D?=^0 y&pT8>iլ$9;u+e\g `^Nȧ$k+i oTͭ_oP)çUKN^k◤x Oaa Tw>' :^Ypq)~wGOU4i w=R-UYH f_ ҍFasViNd fKcJj=}j s D}R<3qUs1 ieE>9dy͇ KI!).Gt{t6Vر"S lr|*Ma0"z&I,_\#ޮLbvEoSC9x5P^ gu (bbwlжpΌ +eCUf4mbW^slDYHOW`K;`$;\gmII)=a uHk9=6LwYvsJ0 GMn_ٶr*l}-NY7ӓ2򾳉=eGD2(>bVmZx+AjޡoeuuJ3U]g4PB~':/&W#.RJw#5cKցڹBZvM2&Y.?r)VKiR7|>4u̼geUίߊ:ETS}~lt87Fcfȓ@Hkw/VrAν09kXV}ʎ.ㄪ:Ȁ:"ko"섑Q҄XG)|&W[T9COp$-sIR &xmzlo*HNYPZoZqS&IXa!:RQ'DB_ŧlO3vjڮ0\u)SM[ .|k%7qQ ǣ.g M}MxMg,1, HwUF̐q~ \ߒR&_r!,׏8>isRk5WrX=XY])R^+7OwޔW!Ssh, g `8Aٕ:o@Js[hJqhw0gB4ِ 5:0ͪ;WX3[oؽ]&8"Xc[qSPf.j*o?(AX -]MMWo}Bť* G ]txZʑC7 NCSCW"-?%g\5DSb[p-<r fN3phJt |d7@ ĂMY%Bt$LQӳAD1$GjB4yel^4q:|1ԙu )`G%0MWx)cK&!Sj-+vv7Wh-TK>udIys;-a򷍺ϝqy,K(aMR~eU+(llb8lY DFԐvhlY(;}Rlg'`h.zJ&ƧIAw5n/@GC)zq9luHUi)7ޖ*R)}yҾ`Rz3oRIS2fR_S61pFI51]j%?mC |MׇT*< @ĸ|p5 5QYv;A pPWV,;C+D, M8)`BcU, Ԙs( NmPbFӑPcjbbTYL2mo%-' eK:oIK)H)C$;vɫ= Dz߻@¨5j`DF[plUs`䚄:b5q-lMY7+"]ͥ$O|y#S)q~J]7gوEz7NOt'ѿ7BbM՜p}=gJ|;g¶. RtՌ>lϊrÒYCdCaZ9rr~|(͈pJ 3F2F\K2eAJ:5 2t؝K;t{hOImC8-:&26DRuKfS vb-&& u:y.pQH'oS vR ' \YOv~YY%֓!̢f-sT0LjXL[\sgnա7f:;^_[b`x [DEU @FI$jǘUX]\*xߪ@ @ lR#-66,Ul(3$2MLx^k06  ȿ E4NF7 I÷)Jf`2iG ͺbjȿ5Ϫ%w\(tb6=^9#`iR>(ESjn{?>FQy **D j:\`)i:N?7M w7 P$z !㒏O,gjc:>KI-R/U/tFN.p!?ӧvLbLQ 1B?j`FRZRzill+Sj KmGlHErQV_lr䆻?H^M{szAִēI ,䘅jo`NcK5vQb Ά`. ĥwv oFc5zRdnlfrI$~GA᤺Ph7y܉5]_)*a\lThmFNbT8fܱxxx=:T_uzl;5g/1sa;EaJ}@Ɂ&7ƉE_}Xk+@rOC_Rp0tiT:pGM*eXԺeً°=9SIm6|$?wXl"9ћja鿁~A@,<_- !2&tzu^4H2Q")7=HU| @ܕ~a~5j:@,wqﹼm2Qn>1'(6k{`]X7>؝|_٠j#LM%jYA`< %)V1Zs#Ls2N/3u`w1X'WJ wI5U 2-F܀c6#N2tԾ~ VN!W#A6 G掘b{~J(\,Xh*d*Lvlw^ )3^N!Z΢_fď /arCrFݰ2Q%*Rk˛BEIG=;ZY0}ߞBs@.!1P-a۾7(iM^q2"Sb%(ɆlwE(Mn`3pL]٧Lq2|&sN3#fH"H4Vһ18mBl9 b`7 [Fiv9[)^&v$ơ/sD-_v*(e6>u:>+mqQIJ 9!*Iz$8 %2'F *oKqka2򃈐K!X"?K ,{d4PQ[NaLOr[j'Z_H:SG0L?m y%5HYnbPаⅩ]<6H|\c7Dx%άa^! '8kX&'kD .D!P}M]ESOqsa@ S/3lDX"|,97Jrt*Qu(QHmzya6(d3Ы;̍wM}{ L&lG] jW@5<=Wh`+p].*wuN MIDh"X|E9?~?)" 4@RC؞3hI0A,s^xQEKje٤c} Ԉȸr Ri(842txoC3\Ka 5K,e>0E܂)cap"g+" 1ĭ?:tlLˡ`/jjLx~ys|8_ P%<\)'4iҁknؤBcrC]}Z-ij6P։E͖՛88(d)(/ sͱ&)a= 3mpC=NsS1.9'SAF`3uS;w̫=ᷙnݽaPÜ(ks0"/! 4nfjv8KN36כߌ?tE;-TłL.F CZ\iVs&ڐ"epyݤkkb2zgԍR.\b]DpӉ˳'avgg1ipe}S޸8|ޕZ79g(7G`uMۼk"-~qnS Jh8a Q. #%+ r3i.qgѤ^z[KQ kZ{>[vwx( k;W$嘟 ,qcs]' H[LdXކY9SٗMjq,iZ&ADGV1e`6f r d$*V*b*TL8w߸Q*۰I\] W˿Pي.LrpQ\yP I9t!(7>VNοv³LMHIXEJ1.Kg1Ԉ2O0Ox#ѕR"|qvywfegZ>Ï*|(z;jCV+{zrdN` r,i]p9XF"Tv#Ia.p?Н!R*$!ꕡ![ނ;:_*Ve@4Ft'-a P.tYn*zQ.e ϐLGTԡ1x`#}4`bzgbPtH++4u8[MCCs#yo\00ŵ[}utCHؕtSi Ic&-n"?$vv3&WY@Q#)[^;Y<-~zᴊ eD{O`yLs8TOL";a~"N?Wu⑚exNٕN*4(n&R)DP߅]3K'P|Dkq&0i"B2hZS!rK ^m*,B`m@=H]rgl&O=͹b&!p\>N߀WHP2|;]^:T=O]CCێ::ֲ3`/~^9%O|5p!#|$̳/ a)T!By' +_ n<ĕ: \LLe,+Rw5`~]uRF-UG<@e@+Ε+ڥHn) r3٬]{l}i5a' g37GtvB tYLM}#=so)l*H,5_a#Rhig%At8LAU)ڋ#q/C޼GKA-KMQR2RR3Pa3 Åp*07_-E/TgUrm)  *EVI'-:^pZѭ>_auF##IO8=Wmھ|6gjP}UvofA)Q϶OG.@Gm_Q ZZ l AoDڻ8\ CA%;mi>4td ԫ,۵KM%vp: bqI݀1ac'iw<㎔Qx@d?+4D=k"\羖dI$j e*H ৞8CKl5bXP6벨f_"c'C\ϼ%]%iTl7ͧq4g>RʎqП&|s&hVzE7xи6!]\Y糛3k︽=5Jeϻ`=66`'e8Mcs 5s"v*J;Z{W =HNO՗3bq M6c+n)w/1MeO)Eyz٢@|;⴦Ks-+ Z^?lW݈.{4>Í@ک!qj3w\T=ſ-I껠b9Zh+L=h,.BUf (すQ~ >Z4 <2ǝ㔢x6]%5 ϝ8%KG28<`[FFԏWR4J"m: ݖJoڡG?w0^Hlau&~qc-T܀8@iIo;Dc͑ďuEx"@PUq{A1fyh=T x!x -_ZdF<N~k˔yѱDb:{ dבs4UjXX3 dlP f1_@}K._}C/UsdNSQJ:ؐRRHp5}'hhtޭ`jSc>^0|Lcp ,] oN4% gEJ U!Y JMMBKq'|(rOn_hP|#KsU? Rp~2@yx[)`ySvb"n!?b u\b A4_9 -1Ȃq%|c4S{@۶Cּ  Ӟ'-SuK;&sOVnƇUYmCg $af!{r lY܁}ɛg'Bd_Qbx40n1=E]L$O&j. mUcy#q# pfni^sa)ͮ=IcLgd &Xce{sYFCrmηN?yya`ʏ SE;rTYA0 7lIqm4?"ơ )sY-!IvgJoa`upTKȔ!Uڒ _(,eq } IYfnk=히'AԼ\AT9`p_D'{Ԧ %.gA]ؘX|"Kb{.&,4f%Nho=CÉhb}6%>0uelSeD!?_o&%yċ\#lX"hZV ON蕷cUvor$f7>H{:]$hN}ΣA~4[`?6*}TY{לw@XSXgo1ޗP̫d !`_}^J,Jג:ϢhW K)۾c SĴ*Y{w"Btm kfc!1^EN 7i_.\p E{M3./:eM 䵖x݇!YT(nIrCZ;|}9 6Xܝl9. DAұۥ@/n?Y+Z05 2w$[w &o 9 {k$$?H)[H[`UFic 4K{N,W3t昐4U!|Ąm֧ӑZۗv{]0᧨^-$ɽ?q0G-Sf,Q(;.NCM\5+A> ,NL1DOu :LeJ| Ք IcpP[=6Y'o0&B,VŀHbs%5XScM֋0mķl+sQMCJqt<=wdyPc (~xq'ZtLY-t^{ł+k_34tEX޸8OFߍd5>"-L 9 ,~3}5+PHD4k! tˋhUj_Xcs:lpUɼļ1YW|v$'q-ex+/](m0q Hǩ)YQYmK{*Cg@љ^CvZikF:yΧ>胓0}>Y?D1 w@90g-3 j6Ri} Qc+GzqYլbv-i!3m!1䓃y*`o~''9}gѿ%6 }OmȚ;,hݳ` ț3aE\zS|V~:m`;e>9^` :2;&,ae cA i4cniA?\DԄg/!K~tB /G\tJ=AX }|fr;ELٴu5,&eő[m1\\.3Q&M臥||'K6B- X#ŌP>LzP?|3aw 򫓸)~'agS=cS#83N͟hH^+xkAΆ)6/ͷ$&{QuL?9T8}]C :õTl w3e<\Mo6[F;+2gyd4K+I>_vԕ5E"@=vttA+}ZjїB!TE r7w LH4qN\dDYKk[G鶜M5mbu!<Kz=UM.+`[s 1V7iyPl,ȏ9"zF~J+=ކq fS0(l˽mk|=\p 1D` ϕ=k`֮ن_YMBR԰n '"tD,^OK[hme6 {_N~Ic*ᇀ)+8TN(Na! u rEՠ􀼝Q!l)b_\i63/mMDž?jAj$=햄88mdWL} WdP>wje!`تǁqо=I473X̆;Cƭ{btLAkirsiv.pᙉ3Tk`_|>CGl(v['pD3,l =%BWD->)Ukiu"ȅxU(rϒ]5 o#D/\ゾ$;t ӸnS7uEEfH pcg JסFqqn^?юipX>ϱD.JvnapcA<RξLy6sLZZWJmDa`8#4%2cch I:+Xw @. ,0DA;ڟ~c\ZhUI5C5AA9$. #fkƴKIjf+$ú'V^6ἥmY~YulD?)/R(;r}ˀ|E a2d>2VGr2G,6!3y=Uh hLU1kq3#Zj+d D4Þ%x(J.>ߣ޲A %:`!JJHd$23'sZL*,M" oo{ xy>1-/yK. xBg F3Cljĝ&#r9inD*Im8Qr oWN]ۀJ;=kDbE=]su@΍M05$){7uNg3@dрF&$T@Lx34V|fg[l'Xͽ'pm1HI8 '%m0v$N̷WJ ;Sl2X Sô#2v(y1Ä$\r( -F' 4'oڎIx`ȷV'1xHN7a6݃7e::sm}$p-Nj E?s#NeGeCS Ix]dd @>b#?V[$Ѵ=!܄ `uFl[cʕoya1Hc7Ǩ9onz0+Ccp%UU dDg QڸBYmWJůWF-QWr(*V2KjlAJҮq3Ggmj `@x g7M_ %o0:5B-aNCnu){NIO 3 /$xQC2Sԙm~I4z2 1A<ɀ6ݎ\ġr$ o0k]ZK4#ZK4UmQunm2<큽)/do ~jZ\a%UDP*M<J4@.MΡ0RYa1moC4 wz1BBk38 :#}N{WR⫆AC@DVJζsu`I8|ucc๫(gT:_j@>t=q#lX|q0N|WajFP]y`]Vyc2*ښqwYVqNA4v]ܥuzK$@㋔JGPh-Svb0p/U̠>{hhosl Kp,-HBN%-{Ig_y??=4V9RB{Wp}Q)^1 sltFqQ71%1ba< |\L9mOnZ4}[j0l%R~ˡ%W.7Wjlja [J!\~@1lj [0pĖfj|/ qN o0tZ0Cўi(:;ZWeg>*fATUw`I] =ts Bm5},E,nC5[SŒ71AcQGaʧI͠F۸P +<7Zm"2߰*ؤ~`|U/R ~"7G$"@ %J{>x+fcp$ C+%q)@iŤiD'#И< j\0YRWY+Ǭ?P^y]63( 益e^rm` #}Mx ]wܶUif~0D5Wi2I)@y3e12ZI Qq󶣒M,wWwcHdW'wâd|槹RْSV9`U&8X \ [-gjƞ.M>-0\,e.D!3ǿ(m:{5Eۑ\Q'`u/K*NmEFћEozq2yM֩l)h<]B?|9(B=Bqjxk]*mb[aÈDw[))w hq 1NR[X^ ߰(LF(pxhG"rzBiXiѲd#W|b|s?P N?%KцV19lI\8&V KNoGO$\&&Bi&(GUmluce˹zu>#$guWD'E(J&nȮ tl9Dy8{7bӚ֠@/5K_ 2Q)m=xEƜ;M2y'ݜv)KaRx :Wv lE`R#Uƿ׆w yM>-YPe ғWk'}y {QT0!c qߝM9Ӱ8>E!4ȵl jS^8J'dW{PU֘"Gu*Q8-fg"]A[3{BZ7鑴.*ΪJBW ԀQA7R A4?&Aa-_=#Nm/;dw,N!`|tLD ~ת6th:>]r3e)-+K"0~֧Jy<;Ņ@Ap _ Z-Cؠ7^eLSNwAu^Io5ݿ>bzIMٸ !=~ . rcwH7A-P*yeUN5J ?'FTf=[Mc'3῱R{/Rש~ ^'[b"!wR2yӢCLKAϹ)(yӠ?[' tC^@%XwOd/WOD';qqAlL6;*2I! [ *q9LaCxUc'2>,"uDOOD$7 G&NwamB=.k:<-XB 4˥vM$1odaN] nKSE}hp,y!W䋊)NY[.WDUnfG<|*UYֻЫ^c)^QWJ MaXԕȈ"tŠl*_?nXlmaaܝ:7j )ܚ593`f/0)^:vNMHȊ~*z`\ D72E&>둙PP8l{4,<@ubiwP4rj˛HVm \Lُ0t 3|W+5QGS,bGa~W˧}bW?yEe^[od߂~b /[H)nF?P`沋ccb]{}j%*> h"9UT_ W)?i99m*V@u.7Ҽ&[+R ZH.>Ϸ^n >Q\ZdvZq32.nDO桴(ٜ.V/'m{l[\-T:F \m໮+WҿD]qHMzasHAF;/p[el5#sCĬ ޹!"SWMr/m`lˌשGfV=13aV-MQE驜$Z8b r! />y4AtW@ߛ[4 [{2g)Qۡ2NHӘ871}MI`(k[4Gܚ8EЎWwO]NX/ʳw䷌=0p\BGn}k0"L *I Ѯsg^a1/P.VC}QfHj7=J̴:Ŵ@}Iz>;I(ض7UA<鰳Pzxvwv*|kj()d_EBe FjKj͒aJE/IOpT8cs;7C!aM1f9u6c'anyj$EpzLM-,CW\xW}Slr4ק|^zԦK)n+1SxOs#ogDg+s]ZcAwaTj0T D ./$FWYhf4!{^ft8~E"[: 201gȋ/ )&(/JߖHBWTq>|$jIтI%w{X~9ӂfh 4(x<:#yFVPJ˴| 0dvYssYTSӱ=GY*tUXK02WJmi[zP ”v/뽔?)uw 钒3E}Uic'#!s<5"yoJo'd_? =R7}8\{^ @2+Bu$`!xUghB(J z w9Aޟ |x8Bs1U:hT:!㴵? hJW.Q& T77jIHľ/wX}t<-hj Dxod^$z9 "|IfӇܢ?#ŴL_M-Hf:XgMh@n06p>j9LRԬ./rɓ&<@gϯ6i8svzϜUæ=R{RB]F>" Pʔ]1S%+Z:_s粮 nƊ3IZw@w˨W!~ .c:2Nd˶ZPG}ux}m&xUa+L* 8XZ7f`Z"2^^8Oc8R#5qsvK2_Y7 %_xY kxFlPb-%`mDϒ(8q٫BFS0nJ/x#f5_2v$ hcEY/UnhIlb,kAKރwLc_=2=v`6~T ʟ@Fe[RӁM"|m:ޱbNnWJUO<m C*=u~fs+pQp7ٶ< 2`z|(OjtI|޲av2 >RZ38 |BAg{.pYm;&dAu'n[4P}HOZqI|_IX))uKCg~CQ>}.6KBs[ ^C ?/BhTKl C Mͻx 'Qu*QSAHEC_`* S-{A9G.0ÔL"P#s̏X0б֭WP Y)[9 of olc~?WKvm;j]_= -)bA|&&m]Ht cԟSZ$[g1qg:zMۥR!A V2d^6l>Wޣ)"G ;OmR )6B0F:-}!'b97ȣ)+쏁'鍢5}D*"!ޛzpۚF gR)K|hÊ_ZM@p+sɶp"\V_}3b_qGfH`]&ز/)zs,RP",MD+<"y/#3p?MW#x8+7C_Z[@aļI"CE[qeX5s*6;m|v<;yQt3G QcR; &z]影g}wyu'-\z5.:&S–צ[n*DY&ƹ9qj(UHcـ輸Hu!`(۱?mJ?G9T<3[JEDY "mxNdDŽ>3],rwE2# a9TTd/YƃU҃ "ݭNWBD[. { 0Bs]P;ෟP{3b4o<{ѮzС{LIS$e0!@DG)Q"2"3x"%,r uyHWAP ~c쒖bKLJZyأg3v=w=/53<1U,!gn_ZS-7,ވF'KF _@O$&um\Yֻ{=/.smVyXOڬ߰ nɅpoMr5k.p!3c1Q"k^~@*R CpNZwFѶ׋f:, !jA-!"yg Ջ6~|,7^ζ_/p43/|ClխG+wY<՛ QI3^7e̮roDaQMuRR1+Ϲtom&_wGfاy'ad_+}3F6p-}006X>(uJ(]]}\qokƐe0ۍ4]'}=twCjptE 9>azD99BťhOBr_3~Y9#VzB{t>*tc 6K+El=!޹[ 1 =D&onZr + >_*}grb+{K9ewfwǶHrL oýlWge% lp- Oō{T0ce V޻q/\[, 0J[+ďibZHQ3dHG@KAvu{l7=|3Iz` }1m#WӱX:7LM@>'>DPQ gJHV]<]y;f#Gv)wHAM_ɌRJ:ݜ~hZdPpmim''(@MW$b@%o'Hw+ 2ձ^.)BHu}Ŕ8I7^.<&+zerDZ3Uhe!ħv|;A3pM8`\vy#NKIa[$F6(IiD_ ׌I;pثO F݅,~ H%5}iGK&j/5^M<|9=OO·ao{:/6tjM/WiIx/"$2yLˏ*7.G|s=ѓM~YV3ꏻ\r[azXEd Xw;9+~0a`bYy Vy0ʇҧS>ۈ)/pΓCOMw?sHR*E+ELG:XLׅ@XЁ|={dg5l8N]w^ϬuAAFta #P܉3\/.]6e-k dԑrk fx<3dbx >+rY(YGl+J-SlEi,wE5Fti+f:iCgy[@5T*YB>ȣs9"Hk ̎nQx>n{NUUMc9FW%Wo(F124MNrGO-IhG F.%EJPdmo8c4 HsDxY#E!13j4)Dx$GۑDf}8AJmZڐz*Z2!@XAo4m&}~V7,{ɣF'#q7^p67<= 4X6|U&9+pU OlM!}+2h]TߋtSݯbV6ȏҍ1lUv2a?v;E?cмMAn; .rTc׆ Y搰HU!ɉ-0Hm㐤@]pg4tA _mIW1Q,e]o0K\J3fCa]]):db*?iqsB@DnǴsΔ#k[h=;ɲ1(2Y/ŘM]XpRV: vj-MD1E4U@#*`N+\EHeK:ZE\q0b1m WLESikUPe`< Z{gSdf2~Gtr@)N9;xlP5ٖ">97;q|z5}o,:3ګ-E鳚NJ΁sF Y2&|ACK-\._y 18_\25]˭0Hi[v1}&eMZ'EU,iCJ0 ~1 _?̨b>jYsoLz<0L>}, R$y8(tQ p0TUn|Rnpy(XwewwʒF"(Zx+V$0C&:!Ǘeep;Z4r5Z^9d_(9c*ILkWp<љC > 0V҇M:Ɍ]0iqYꙍ=JP=i^(@{raMMcrD )`d_&FoX1"DiOqi/ ̈΃0Pdț!̢eַwZސNiV>*Z >2pLf"'4|;ˢR` hehL%[e(hp0 f,@&OlQw#>_ ɨU`*q(H k*5 N}zZF=PQcdajZVnPh5[ K G#*π<<%woʿJԻ7Z3o($exTk~խȨ<A2(B [2jEt9({TVA "So4<#&UKS3aςCO`84˼C_E՘݉+z nfhwglNwG`0J&'x ^+c8aFل ϐT9)S}RW-a ?/8l'ggsX' & wEƍjqWujJʹ pJ2vvy߷~*v)(+&&=&E*jlRS(}23: )-@>H*uCuHYZ!vy%_XKnq^3Q)`%=͹Fg@ ?Hfz<Sk~ϙ]aZui/L)ѢGJaÇ)OE@ӆ GYϡME<$(pR1WYA,>D,)$w(A/gJ7)~[; M4 V|/b(`uf ?Fx*͓ᙘ}H=T B>}ʫhmsGnUf<2f^h5~ي!:jB)Yx̒%pŸ+z85p LYk44W'a%<ݹ` DfZi ᗚ/?]vq/_mg5Pܘ-JҖ1oslP;%(s"3[$1})x}Fڑ Y;<[;ɏ CG6bi&'i#3 Y.&(%͌m w,tezd;/dձL$i28%}5[pH5||Ʃ@bK0 _ƌ(4pPRda23-E*/Eqq49Δd#XOGQ eJŃ}4 Qլ P G=VI2bPj}~/7OCHJV kRlnKXXGԸyPGs8f”OoR,UA~xd_K2<e:/TMrEc~z־N2H!bvg1@[b<UO\::++"tN1+@r L8;4]F7Nډ>}x6u*[-E4&[WC>W"X` L ay8ǡǃdb $0|n>u/eIgN+;1#s!". ml `K7P|dMٶד |l*ێbJ)a%|6}U3xv*_wHpcQFa!kɾeLFY#~{q8.7"&b\E*2|U#俽GOZ.ojw<98wHAґ_!(s=h9{L) Z+RK-vr*bOPǴyי7K:b 硨C}WE/I, BTk8M>1g-';Y<}8dr#2D8w eɡXSJ C]$rwdXt+[dS]Tfso0B`iĴ _B:p|gd6-*v8Ħ JaZy "@nVQטUX{S>|d#rSl|P֮6}Tzm r^ f^9_ &;{5OͯQ=43~r('s&퀺 qn+̀dLɛC4d"u8D 'ju:eS^ sNc2zE)$^jL͡m5sV- c$~ kD۶p2P-(Qdf, ⯓DfMHГez׹°.xEq #Ɗ'W6dG( 0<`N>*ƔW/fI>N =Ŗ7Y"%iY3lPkޟSS+6+0QpkVR53î M}#.BPskk{KՅFb,&me' 6'HԲX3AE!Ussyo)_%FGH}jd-U^ Qo CGO9SĐbf.?"(k ~3{|#&hvEG̍z_=LӸL}qK,8[ǹ(,2s<?֩w1͞M-}ӯ2j\gOxC;nt|Q9WV.Ѽ {>*15v0SiiÂŽ y ^("/eL\_y?\e! אBof^:)!{$UưYw.0b%,\Tm` GDI~mɕx'tԻ_ Z0T|ߌ NJh}?җ\G'SINk^Dl' . MHjbX{|V[Z;ráxӹs9Dsw._NiUK5.d;?ٟk,0Zbz(Lސ"-T$9P}nhOtBvogԷDۑ ~5L :~Rq VIY~gIЮCoM,Wm?+G}5UrU]O3^IEB] ;0n|.tW Ǫ \D*:)>HcLC*PW,+ㄓq_Pq+V;Z-_ ;ڈv|_fM~iGETǙ9=p ma3ݭ;-m0_rڦnV\1y_y O.$BnQkS37◳4f%{!#I\1پM8bG#Gd\mG .XP3R[r$ۊaRRtw5k)q(~ t/?ƎTܒ7)MIV1,iW^3>Dm F. b)4!dqڥt¦5{JjӔNz9S,<ZX85XYo^b9f F';@-oӄFnJeS"/>9o|`[*wc!ylRy띮Qt{ =v|֭ Y#`' !71Kf9dmPbdEuneP5`Y!ۻ*k!.z</ҹ >1&7HP ZK: U&du)b84[pxN43 Mr9{/-22ޥ9=+/JHb/s-7rGgP-FrVXק=#dsoEYb`=#)oK7|YnXY N:3 |myU''\c0xԘVS2K86uX%lD@"YHmXTd|dgtVeVg2 W(G& KtZ2pmg e3ajݓ9vlׇSsFr|nw&c~Y^'RYIųϐ:= <5~mX>f *ёy85,dL"j2;`< 6]05U;O8b@ՓMYewLQyѱd)E Q'ڪV!xi,AY_@'`=Gͮ"]<0W'|6o4g/gX `/X\ M'`jEtP5q;Ĕ#d4'} B!]3ݥ7H.ȇ~A!fPw :Qvk|/ORmyxQj`.Qj p#^ _,2F0_Z׾Oak*Pq0tsj[CSXΖYvnh3zTL,f( ~΃\@UiSk AeZ\a{<_#š'=^ PֽŤv]R=pw$j­4ڈt6 u `kH.HdϽ!aG:KE&DE[<ꎣ)ooQD| Z>iWА*{ 6\u9KC@]k:.;nֆyQdغ<4 ,S_Cۊ 0&?wTnZCTFnU>!9 <ǔj8بS z"tyivQ.! 52@#?p=#x/n9-}Ǵȵl?^JQ;\(&%plq\ XiĆJle;_'fq('ʣߞHwEŭYq@]Ǿ[ kTb+h[rTXon{Z6$xBQ2Mi‘i }q@ArLT;mG1b\VTbf>o9yX@gZUa:3H DP#䬥W.kN9_B G\%q: ] WXD d&`mGsg] $@"r_Amg?rl0]_GyYg 39{>=vӞv YEHo2,h.@j*t@zw9?9d0mZo ۅ?T~q{vDi2eFZ OlkS>?Y66 S7 O=gZ3#O,F[Yp`97.@%^eHliW(٨X^_Q H%׌s4`+Gaei[6~S/.EsxMƅ.sm=)UX$88?V"% pH6,ۧ[Pq?,~77p>c2Mf.ޫ̄ґ>bg/ѐY>A?qY]n&LF~ YZYBWFo2)yр$cDeXPl7wߗr(fB|ULv&P%&-GO_Ʃ44SUP8WK WVܙFټmOY46gʈr")A.͜J[:+v |C/oSvS?oވhz&E6sT1E㯖^S-  U-фȲL(YFm>4dJ@:JK&{86DaZͲr*vFbc=g딾}V~Y +Bl&M,g.XƈM~[/Zgvf@SjnZaT@ ?ڔ>[TO-|i^w`݋޸DֵHZ΄ !T?{Yt'rS}AL2tHATc^a\WbCWi\ٳȔL<.,6 [}Z%{Ċ( G" V1D^%,{1=v+5԰諴4?Ȧʦq$U/T ZEm9 dGC9I-pG}HP&wZ- 9[, '7!/ ~⢡EdmDZ\T/}qm")˱+!&3`g>-@~=L&>> ܝmUuhg-7 pdS9Jچ*c(HeFB%WͲi/M 1zF+y~ti,`-l4Shr]? sO3iQd9hMKd\ia wq9ouA3-!5T#"YAD󂃼aW݋t 7˗p wl j,w%amb^j^ \:[NOWkVE:Z1 T;tN/х mM_H(쮃(rgzn90,wR2~'Л($wi/'N={;eMd)爅 f8uedn#VyZP i~~D*ҧ-z@{m_%h;QvܬB]HԠZC&T``qjw{#*B?6oŕYSRtl:"(_c]_ܵ cLQ{ Gs5._ni\<>'J[$_cBS^i.Ń(0.jS}R{^au,q~*E=屖 6_[yX&LtĎC9SC";GL! tA4/ŗ QZR%q}LUZ[Qf͟ 1) ": }e&nM-ŇV)&Dn٢1JɮܚHA.Ϧyh!B؆,V~%/ Wug\~{2xiS\1hjXJQ'͹N)M}ԘUҝ21䰐Aû\@s{$1fmU}0hT0L![ZNwjafޱ߶á"O;w mYcNR* ?|J.T)"sv* z,"Z5759M`$]m49F٥^)==b]>֝vMq[w%ԟ﬐JF-N?RnFv$HvIzz&`cDy./,D :C9Tg9⮭B/DD n/6%ꆾ?ԉs[l~YeʪFcoqoDt ^?%o?bEVH'Rh(3a2I'nzU^"H`hFmG2_?4SGH2;$E7N4e6i-Q8wq| .FR+!@fSZqAc7C %!=S\f AMUED2ߚ=-~q0o>/{ls3h!'Hja]r=aTs?HQ{[lOjG ]5sz]nOCik]2a:6K\ŀlĆhC`/zbI3B0R1(+3b3iX%u]x{ aǰ(8\MüP , YoD˦őtHauհxp[ ]brqs_˰B4Eأ]p_胶{%8?ӕhQFgd II4.5%(3>A=Kvpyt= v-5j*hA8uEéW@πVܝ#Qa h&= ȥ2?‰  \ЬP=xhV7+#"Pd:ȉOY d6a:fy5cq&1i+ȵfp [yt8[& 9k_:2/%LyrZZfSM(w_etϬSA2,ѢpMcznZ,:ԑZMGB)w`\8_8W6R/n%1V4잞a]t,VOn|"OG_FÖသYP@A 0ۛd72RW7s-&ýq^Ԑ=>8r6:%E!jNe^1*u 8JOy6Sg|a1c]֠u$taԤt"䩰8x4)PFCřf_g3 CFBRrUix&ILG] [̺"F3$8*"[:~ʔɓWC0o\(@+4ZWWn${Njx{# |4f^U= ᭎"Sꯊ}BhQrj!t400vsɒlCah&SCg@Uka׻λFcʂ#>t"mMy*龤M7=5~tjqq/|{o<,(Vs@lCʝ'akIjyn"dE}M c`)lůaI=nmI?;'*ήI9Ixz\0 H,,} +aGIeTG,noT6_ߧA}wu EM Xw=m0JyS}wb;_] &g_ҥ]F xG&Eߵ hx'Hhp2hŷi@sx'wE_7oFjFH~s1F  fZZ R`'@"Vn$*V@/AFNƞey{LX We8|&(&-dlQֿX8N@kV`0ϘhDߘ(͢?mP/b?W4TՔ$Y$"$'٪d<;G ) !m&v=kC%|g~@rfx6'm@؏i04 Sǩ%j3bҽ}1p52b-_5.Ā3/pOǼ\yG$a W~M7 1% 1r/^X%Nȓ<o|iS-ă-J iL40ĽލF]h(TWۧlV@?I $\lb.P$vo%pTI9m]#f{3w8&I~N<1%7ȩh"Al91qyrR7}KY`F3ȡιL!"HK[KiՌ:jth |n~]? AK3%ZϕyDqPM;~MG^Q V|"wYaהGyƛe5[WK+]v4p8ST2 Auۛ4AIF(LSņ^}Ϩ Ԛj ߮#<$#'Lji;D\=ճ^&A oVqޘÝy*L_K5dvM‘sRo(ahս}\ޙdO/&B-ݱ'Z\ ꦑć놅vg+jdܭPK/s0u#{ܩ-B.g65FRSLġi=~զr$r,x:xbr|"L1{)MW{ݫc HOV'i$#0VQÄ ts~曩(/̑E|WS5!rKFkgcsRi}0f%pl}kD:`$ꉟ9CQ.84J8,( hP}mbc^|oDr©sO` Tj 2&rR_ED/P&h$` <>(PFؙZl=)9Z7['T+Xl,k3{FRV 1@^\F 6Ð<*EHOirY_*(*c%|,]pra;{7=qͻy>w" (:Jz-{lJF:{rhF䒪jyC\ı0-NcTA,hcBp\ϴ)zjf}nڸ]D$>&$1ZvEfUmNZۜ# XI ĊDNfՂm<ՇHz g,}ěH#~RBՆ ]P9|ҡY'v%)+^ nntUu􇨄 ZwX)IJ|`0k6*%=MSPAlCڣ-n? S)~[YWšV xo^_83f-ZP]sRbTUNV})`GW:Wm`X/?WhSŨ"9|ٕIt#QU)\ ^;WK@\$Pѩ՞ZDfWGk5,ZX:c9Y͢P˯{~\rPSL&TA&o_CDN9"_0>lZo m(wkftm`<3M[0]{+7U,e/ldJyZpf>DRQq'UGĀ3B(ꆅ.y*Z&@颤yΔkD!g" }JSNu\_i{Rjâq[A|oK]"d }V$Xksh's Ldf|'og0 ~& =[z!`h4BT{8c7:qlYǖ`UFR'  ka:H'R|h=?68/&EQ:W>-)ipeȠit]ߙI qk#u<dw;tSQ#m;q1M|% %|H,U,HGU*mP~[JMɍ]q| 1*Jݒkwq3/!Կ>͐6cDBWB9;`+d-s粔okYfNؔ&fsƱ$+w+x-L2r@=IsƖ!L7"yCUpUBiB3c GdEt)8]Y!#GxDcw1.mz%E=g'ήҬsRc5$ڀ@ʹ$'Vt.:(8 *01zbY tV׽CI#GҾ7Գُԃl(ix7gL$;|Mp @P>B~ސJ&ZJΝ >xgבj)F x }dwĀqᎶ#5Pr /iI ;nP:'7÷Sg%6EܓXTy9. 7:9rOaM16GRSnݬp a9dcr{q5yQ 1tu9"F=tji+iˏJ;IW'WLܛ O '͟yXr("biIkd\+soMYeIgw F[gtɁ#gy?8Vu7_r/wP1|ZA)Nss) <8RVڋ!T+>Ӥiں"Tzt&`;~n.6鯩{Giړby|[O΋T ii>+ SI@f_TD^8_UnBҝJ0,nZ #,i4$pKlٙ97USc:1]}ŕ CАiKB .o~; gク26"(ITwUQXt4-O7M?B@4U8A˴Xʠ6!nanQ7YR :UY[ik㫢ԪF: RM^&CgU5'Hb6}=Œ°Zƺ'q'k\P1XrǖNp(]6:8[p5)OqW`/Q(u !`&V.~#F|B3E]kB+A?sYʢ [@h.-zc<'6G+ҧ"4Y^Y.uX3~q;^,Z&]7Fxpwz^sϲTd,zlZX9h#We=ǝ`r~QhmY ? w֬vj_7E.=Lj2T}_ qt"Pylv߄AeGوk͘j%am7Z |͵/Tn(kXjj M"'7TIQR!Ւ3D;mq0<7O=f[*^OueP=N EAzm-0;$y#tekhXj-_Fcm>Z&dShe1B+_u.Ѹ\aS1CjH0=%=?.kN"~}n$Yݴ K!6j`vvӀHu`Kgn6^~={_bYp7KRVI>3ƈ.8#ϛ$i[d,m? ,^]>."$wFߡ 2j{qv*쁸Ёwgde;G`0"K#Aڛ,l)y+VR/F̧o{`,J/xн韶ɭ\(-Vcu'@N3ַCwp ~ٱw]!ژ >!ưB3W_~Ҙ햾}^"A?hCiڱf};=+GzgJon ,ET#u추c`G=BcW#~ked+~0g@ޢ}^f㔉گ${?83yqH* MvI~7v3i.wN^4&֩~FyZ77=5/XXNYRxσLuMF=!V͂[āF6i+XNȰa1`-wIλH*kT} >"Zjx,Ҽ>>x `F;=D~6švKSk6k^/<<^gH|+zX@1MM i5>k{:= Ҿr6( ԑEw N*Z'H%sC}1qkT!0sK `ѫ'K ЗOᏹwFW$Z<1Qj Hl`.gZ JrU揪hS5!n5~'GXSѬH%]ýڙۯҾH#cfϛ(,!4܅E9x 61Bb)$<)]Gg1 0ڃdZ7@)-P-{LЃV2 U=jUsD<5+{%JtfAZ6\u`!NoVKښ6ޑ7 Ix皯fqcHx8Lgί1Bv %`hI.SSQ֛ 8I7s |-!sUKqr5Qa:Vy^Y~7 FS"HMleUARǓV΀p&oPMP<.qVl-u!雺Y&ɬ sAȐ ̹<@#,1 ͑KO 1v׳*XFY˔fÙKPXL+ F4?NIN^SELLyaVrI{ROKL1YLM,0S>o4f E{S0]e4N'+ 9c gi[e$ vR 4vȋvo%XuW:ab2 ߏxG$0Hc> AUzӹ(Q'ð)gfpH<ؽn0*0vz1]Qu ]xdP\beQp~QTm MrL>,jgEćsQ x#LA7m_P/:PťuCc=ƿ!4ym;gJ)sL#t۟;p;Ըa+SֳVa[p*/bhAAW!/i}Kq|vԶ8Ri*BptGV&rξ",.?"3 'VG11Dr~ٴ7># p{W$-96E ́nTWV1e}VtCf08CxZuu1`(e{@b̐ 2sb~iLB,e/mhM^CׯԥНPT(n^;yi;ƺe;s5ViÅW`N{_dD~=D6|ɪx"&7rN`>d`3B ,pI$eqp/Gfѿr;6+htG߅rC[ )d N5̦vv1`n=(He:*HW&kMB=ձ=g T}ȤkENZT${ zlHCtigMp8!`0xD>RI0Ǚ\oX5L3Gf@zF仹w Mt*m 4y-?PT=nyin<ňJO6O JgsD3e1%'D&@6zQ-d˯6$Wa򀵭uBTZVS¢6~ijhBi|vu/yj'-V>?Sُ MEwЋ=ξNb-Au =(jkH1}S^_RLruP$ZV%vR½7+ebt_c}*DMx[g>wVh+A4᭾UňwetZU=*ZocRyE~a G$$} "laPE c^Iv~QIduc]_J%%Wh28ξ,a X^t/6B~ C>jJf7H\Z8b<1?2R C8քt2&E19G4@$p)CJCH왙5w0ijOٽ℉pßB])"QV*ag}sdϮL»ϗŶ]݁NF]&2ERFNwB$U@hLys6ݩ|+LWByC,!2~xsikxb_oGK_J֮hU,8o97bc`o{^EP | }Z|RMk8Pjk"&c\_дA dN.wH"2R®@!kh3j  ?*YpP[|$Ri3Lxrحj:=96 z>}_[G(ePl4o~/̥A.֛4Wl͕ՇtTC ~q6%g1zAN" Yl)*O QƁVNZP!Jα!؈m`d@n f :;s'ckssKUQ9@X+`FD7Gɂ6gIo.vYq*#Z8m2XBM6{AחhdĖsލ έWʂ#NH%YZ 7 ڭ#EZnMۇW9f D5$99cj5'?+jߠ=4 MŘ2hgyHS}Ņv<ix&uP*drp$WP&P~PT\j+YRV>nHܒK29 QYRq@-?$sVG.ȧWaIׂ͝A8N/'"(7ۺ, u?kHz5JeuN蜥-)C6pͻrai캙wpc&*PsbDw! dDc߳aY _q~7/Q?e0˦;_] :>λ߬_#a"OTŧ]4<#D&6r}4ԡ3E.W0Y>(OpuӀK$Em_졠I+\ mQN0Y1ZϱHiZ,j[2 ( us`K.)8z'1Wmܗ)rپPɎZBCM"6/mogjb[+.G޷Nn98%#38U9n]Oʘ z&;ʹ=#,׋``iWc'yٽZ%Xv f7\9SI`o%.ST$z1Ɍ|ۥDH[G`it߃9;Jqf6.Vnf0^T"fU0D8uyK5;:fa.zQmՖ kSH%.$Dxҿ8H YX"8DE&D愵wJ:t"azH<}V I_m헉\W$4T}$ F7M +%N7d!X 10!!$XW_ltU674[Ȍ'^7!}椋jy=39>>̥˄F)JHG T^TѺEW!Kz/(z)RksA/, )MˁܰL>$}c²C*}8զQ O#s˻m-Ӎt,$g`WjW&j{dwR7xT۷W 60aexvSE<ۃ:ŏJͮ0zSђlۄmqRG#A<5G*bP7TV랐U1||rFi><# j2:*ih]'-jg"~7 톸[ HbNHʍBu oEpQ`PsPG&|I3E~SԡuDP$RAUqq&Z.w)X7'9 eФ`uci ub|Ǖ7\QvRw$/ݤCFfoH<(d;E"O v3uPSE <˾BАr!*W~ab.?٨'H Ub9{W`%Z kͷ3HVM~0 PTLRecV]Qg'h/7یh2$C:{u1AIѭJ ,p ^*0B#Vf<3 (h溌eCBGg)n٨Χ/46%{œk W΍$!/(*ljfbS)gRy=D_Q³y N d)J5J\[cŧVǏLqg 4ڄdЋDC>ex򵻿t1Mr=۱ /@'e\! Yi^N77{>rsfZXmnd +qjXɥsƑ.$ݯn@Vr_%*G$_[ZAy-2$'S}V#0懇B(t# RX6ř2:`7prG߾#{x%^ݻVSo+!\ok~Z^B0=Z'akf> 3C+DфG|B@*zRm1w^VZ_xȂ-S09 .-(;)u W4 |i1fCrf`4ޗu&_'7pgu~HV/gPDO-.LhpAGzkC uN%h҄ЅZ"Svu=x=€0a|y!.V, mTQ6QG >noZCWGp$ŀo{`7z^9"fdg*8Cʢ6Y GP s|P-|w! V*'D:%<;^ᬢJ*r1v"fQ=~P-$iBݔLR TOY(3;AE? [BO "M/\MY [x"o 0T]+7e4~L=©hLgHE>ac 0F 3I@߂1ad$B; |fxEƵ7R5f8ߙUѲ >{j1ktjN X* iy j\Le4<8M!@?tRQ89q{4z0֚0n ԇbo|Z-pCs ~\ ŅQ潱3z]KFRw`_ͷZyfOJE$Vb"<<2akiuSbsjpԦ^+0skAkfR3|=̚DžYq~R0ū0l_uUZu!EFp]Bӊ/?v7 sM8:vuT, +>R<\T^ E@7{{ 6 G엚jδ=sUtfϭ+O}Y.7=L|\($0U9~?k#]i#!ʕYH{zơv&4k[gwT.^zbÈ-lS-~k\+,Z,A/*I&w7 R."gPwT\ל*]Y U8rcEE|0Ø`PxsIxm0XE˔_+V{WU.o [ظ4ܶѬT'Th#ȹ(R7t :*x*40]YL:b g7iw0ED}S4չK 5;raLQ; u+HyAI3Mȋ1};Z Ϡ.fgH(F߅uURڀ&o>P[fe!^l?VW Jbn>'JjbKG N瓵"G |A;_9DgثH|x!4# G d`U}ˮM jHS?| l5ԉB{x5ByMeD0?50>"BezÚ*#IG o1JM[A]E6EcEK y{2r%Az:?e=g6a[e-񢟊{*Qbo~5'D~Q ,~yI_{.`<ǂ{*"]ju'۲o,Xݓ9i=<n:z Oh{N.lM跺4PXݝ!wR|J r`yL )fa9QЛ.bqjfz"'Vbz(σ;)<r܍h__iHYo0'Ҟ񛯃Ȋ{H͔J{Zz_uݐgUB_䚯<ҊbPgX܋W!qHl 8t7t.8 rdE&d#_40`@9`!W+Ti%&jE4N->_]#P9 H@1XC[>{uL15=󢪔BW0EP7ZRա1( gL"ouzIQ W.L?KĶM+>-N1#F/bjrh F5CL =OwvkĪ;C0hwe9aEC@ނDs8[jhd5 $c^:[$cl'&Y^ !=:V' TF:-ɶ &[ϓBh~RG)[%0Vh߳DT_ܳ4{kY ;4qAJR,A.1 ʢS.v&k>xzYQ[lJN/D"VvǷUwT)!(QAJȨ紤>W!|@K#/+д1>8϶Ij"7'+,K.x1إimi`#GŭJv1L&" ,2=zʶQeҳ 0mU~6a)6KE-?'D1cLWhXRHۗ?x:,X{ PP ?=d/U"; {MWI57aJ1l0%-]h4tӦ3>.==!Yr ą$mՓ]?I..ˆYPP\ڭF0/" 65m+zǥv'@bB⬼~>_ɻq'j>^vz6P @X/3n9}E߱l 7j M 5>ȉRp*Z4fGjlQ,ړ L۹rYt/מDu(z(nkJJ>z].$y[o5%Pǁ W{ލK l/\hsWw .[[|C!a}Zb9Am3iܚ`UF,ScIɓvmAnj˛3<1@S:xbS˶E.,c۩ck?;xclfad(T/W̸dЁ]Y [mAfC0:bBvճ0Muho_oQJЈːMHC":RӢ NL DEl>cJP9MF3#NPX t;?;M:bΘB]\wDiRf{u[2cJ==Y_"21ya ӽojUd-^`r5N яͲnO~6R my-HNPrVu>=]0e|U^?d@LF\ 1P QAjqQ-XQF(ӉB/?VdwYHL~iL943cmo=nɗK[pgAR \V&gxwҢ5KUZu1$~j( Q䕃vwE(:Ѱ"{VUI33O)mqL ht_(dj#XpD 3xw9EqT~~D|hSH!ԳМD$S -Z?w>0MPif;15NJ.r,!ixN-/OiMK ϫ)dk>%yIqSڌL|:`HjV'H`du2h@4BuoHf0ȨDVBVv \㲎{5T x4:}] sc E_rrY58=Zf]qx2X6dۄЅ{]G!{a~ޛ:N]~j_[)3W)PU,ӄ i/j3rwZEW.,e v(8W|_G,[15rqwzWoGb:Z2N}O>f,m\;yݽڃX&BMoG/WVvs3,p 莑 /c@!Ȗٸe_B8ć ns2וWrayB3:cnզCp 9Wl"̞v-nUwA|$!_zT참푰[XoA <\dNAx,l qj^LҮ5yůwFFH8CC µj DP?oIZt*Q䷹J a]@s#W|wKԏ"GhB\;x6‹ 6" U(y?Ph3lf% =ௌ> Odg" 94n~yeh dXOz3#u*H;e ?)%҄ᨦǶ?u*$BTnSB!㱕[Sp5 /ckP)U0z]'^ Y"h4uN&$ƐM΃ U 6G *S!!ww \M@Q9 R(VP{v{6H2T ,ĬX(ĮC0cϭeovgm$tnaEmԖh jCEqek01V>X@\o-k)t}A00 zjzIwnTqbd^pZaS{Q tes6I*Wn!J(&vsFPyuKNʕ 9KYo5B?f^S8Iz[E_,nBLwQǩLňT2Nw /Nf|d22y WTuVdG?11sĆ2%M3AprA(}Q瑔]->Q)T"*gYҵ[UQJG=_Q"*{s'Gum4a]+A%,a0xNTJm(~IVɊ?c #w{t7g\g=QBFxI[%V4e QOOp|P|} s V9FWy'+g7ڬipڪn+B{,%xɰcH)(J&ں=|%܄ܟъ1ʱM*M`73I(Tؠ:gC,׷wՍ(>)-Ɩme_# m$dwI&18V`{ŔN؇5$(-L;G ~R(h+ 1xmZ`"UM% A噳%_ZoܶM)N䗒kG!.j+Kd2=Z|t)PrBsK|v8!^SlW?Pjְ W:EK+_`!hrC+c^bfѰ͑ ;+č4]EGR+t4_I h8yzw @1F [>[jOG)p7631oj_^E?{3Ioxsw+kKF}+Iz :dyiI+=#mBc劄` I^Kԍ) v#}lz(HJB82"[qdJoV\0zHYv+ d{J+O),Dnr w;v\l6Ӕ];,/#: J*"== |pk%X/Ohe a_TP`|I~ݱ; AhaϥY[g-Q)gjMdA<,Pq)&B]=ژx93n:n_xmY%kG|v CŻ +Xx倇6rG; ۨ0IAH(XuLy;&d&L `tGz)~@8: hKN+09ІZA<ɗ?v>#7ęc@4nLšB+oe]Y>H4dI_tb Όx1[8oʣF@µ™9.3j w e-E^TcM7`0[wh8)ɭ1"L/v*WiG!J_+K/Yޙ[[| CyY :c7󘚦vۨQS%!N3y<ܽ| 3hd,u.ϲjf#k|,*q.>) Y+c4<ӌ i~Ԙ>ޣ Vdiw@g$5mdQw; Aa旫/7bgMljqRvͥ)93]cDž3{.RA hoN$W0s Og[=JŏP'M&_lI6y݋?+=tэdۂE=M#_уB\X<%\"@,C5?*ak[Ќ!FdOx^9#㬊 \3h.Gqg)Uu@{MZT zk8J)܂ʱ΃6Yd^w*y=B1R.v5!s.RYWl+Q$Ldm X > +*b;\hqḐ"[7U{W+*)i- [}JN#(p 391``4T,c%fu ,T4sTa2'\Lʓ(Lr~ 7BsZ&P3bt CktWI{]vVVU|6j~Tҕ<;\Hho,D _%8Sxђ̝ov^ɝ i7;|u!pÖyҐZ9] JvӿWI ,e'$eǽ6"F)/TH{/) 1^r2E%E[c5yE^i m1LȺ|nK ;V|~Yp\Wb@bEW)[>^1P`@g=+:S-k[B^v$d^=X- m=<_I=kr*]:?]+9uA~e xҠt"泴g -[uM7~a'bӱje0m.oV!ؗB(|~+&Du>XGUR,5b,ݥD9r G٫(v@$c*c> i1ˠ5LT}`D$"IaQER6㐔-|'#5r4Ui?`D5e"[nOsU;_&N{H"L?/# Ťtx[K@BA=ȳ;6%#HSSLR09UgĒwf;aJY?MEvؚ#e*EEhfY5i)\ oT}/6wMXqj&T3m\hB~)7np(A.Q@l,Z{tUjT`fA\^kq3tt+?d,}HDuo'oz佚d'ST<-fjc$)8̗> h r>R=(ZW䎾x2`dclDOzG`Z\DIՀw)0!/1bzplf|^AQ<:v $Ϣ P%!S6VO,u0c<ˍ)taErE%,3|]'t^2XY}I6ĪЄm۱4J؋Gz_+V-BeWXEwJ`ʚ]LdYdHM0eLz\2^rY.]WTg%EkW,Nq`8?mmDu: Nυpe!*mtCFy˒HeaO1u:*6Ҩ-m4&6V))"~դྟȚ4;qq|z?P`ng뻮J 7QI/^g"T +[ĖX$4{y4oڈ ·jlouʄWDC^U>+>SLեIrDD@`Tńx(.Uqi~.G\8XgR,#>ĆYz#r/MQP)RsUA'X\ŇB lu.  cR,/ౝ}1Xw*ژ#f)YW⑰ch6E5B İ9 pMF[0T[ꭋWѫb"hޔ#uڝ'wH0.²4V%L_`-PZ9+`[^]ݓݴBS\?:`WCpAK݅j 7̹@>ci57T&y&>YGpRƘR9Q2ޛ6,->V— lS7?(ԾV 0%Ltww2g~~MuUMZ'iDsQHaڊ]Fhe6VY{ָn=›SD@64J:fZ4S V6 3?Ϋ`<{O]:khg+Λ胅nSi\Ǔ)&wga1tCl%MLUxpOI*c?<GXtƬ V&Q%=a5Wsq, @TJ 'KZke)7َև^GŐ|+Swvp>Gd0C#:^c]ʸB {jөƽ|8hS-0msfltwop3d^n8AM 1pϒsǚjK_B͒e"l-QR^a崭eD:_z]I~7=_ő00 󪑠E"wd_jբB*_I#a W=•t>} DNF)"Ӵ$|[ SZ!0C_rZ3(iA[VFH yY57.Y%\jXVGI,@>{3oF`Dפ(_L9Cҭey<A ?2ACV6]L0x2/s1 +ɿp)nmௐrFjreI 2adNPA>0kY \#'r8M W"W?+ d? 뼏:`.k}:(WPgk([Ffðu>t.DokOБX i2f8K Nm(2!-:3@'8uR?&݅!?=\ 2J!kM:`GV coJ% Ez"܁QMiCfZuaxfb1'$ΫehF׸<=J>0\e΂Ymd5%]xR My,-`z$#43%ۂUfj V. WM{jW\rҗ' rκ0j 02uM`6;dݒ;>L?m}:1kʓ?gR-]d/4uU _jz68'Jd\5֝Zne4^o* C efߠ_SH)뿮(eocC&FfMxj),0BTf۰݅B)M ևi*pkgՌmjO/Ka><2ƑV*M b аO!rp(![ D;  ?'W4/<4BBwXn; ,k#چ)-hG '1Fw3)Eʋ; @FzGxk;c=U׈+n27W$Z3(ԣ n(2] vE.J{)^s;qb2g3 RlF?50|GJÇFwVļ)t[{r II[rxU )Cxr;[B`J܃b02T;k]+Y6|P竿aYm7Gwa:}^ .Ox"6"#(LRߖtU0 +̭B˃UZ~>zFzA<B:AkP xvs\ƏƮQe`6mZ1a{5{a8*>z'3^ }";;,~ J^=<ծsMuׄbbwl ;ܤ$R8M62PWvs.SWQh2 #+e[5~u=q/YEk8ijNo{cD )'lgO A',U\ []*/Ff)!W;|NpĔ4@+&9|U cc?upe/`W7;)߱وݸ6 y 'hrgfjfRWٰv]d_1F4Jh1xuN'+?NE7Zðp˰>#(ȍh wkȥʻ~2F!V(Ɔ@έ~bR;} _/FIQNx "if1}Ժ{H`NrWNC<tmu8 [#*Pj.a%ӨEwoVAo I9*o%JcD@$!͎Rk39`69L] PejM/gxW#a95KLCӒyyNcAc 5`0gG@3=_G^)og5 L*{sjǬ/Ff|oEx 3  )qϨnQf3S=/a0"c Jq7+-Iɔw=߳{Vlŕ?؁[*j<`„μS]>ޏ O نMW\Q&mz\fO}+D#R'%:@}|hw *wÒF MOw.x[āe_vGI]W^"(\; QS .^򟒋hj33Zºq*[_v9OT4*_qOkmF(I/cRړAl1jjk 6SGJ$`ߗ>MSJ6hid`"Y -!s{ޚ,rc7R:A*{e{Oz&#vZW-qn&݄8WE/n$^W 'b3uFfWlp.oR3Ԑi' cg#v0=*Y0$ ?5PCN O\y0Q"ߟ<ك r! 2q?3&[97nw,돉[9~-m5^Cr!ĔPiw#V;1,' fߘ!rcYi#TYU}lASlڳ"ocƊ0Ajֳy$XI,.2F43?x\ذYs*^p0$95rC0a_߰cBNuR+XU<.)_o\kckL$τ>?40 QȾ}۰jr Mk@k->g 9sF4Covk?J4v3 ִ3a(+0Oβi&QgNn@\1V>xlծuZ V`D.^b(O#vb$1 +`ui+Î&yej0 c;MxpÇ(E'R7Kuwx[TlX)7k%TAv_ysH׹\zN9^# D6:^(JJߔEwX_[A'N 9R;|Q;  OkE{5n xb z,~SEUF< qcK0^:7J[|df+O(J!Ez@I0MW3L $wp44pe"髠2ДkXr'c1FH܎~C!L_QB.9&6JLɏJYy9Ǒ|߈s2 ;' nLjI6v`U 1xz:4ӣ^L]T(1Y@nDiRm6lIozl|*FK$ ^|e`3:GN4pU 1 KF bgE†G+׆ M޴ֈ{g9K|Cp , (1V{ 2#6q7<ɡ9''Z>R X3UM+TVNgw&t@ܪ\"P78PBu$aTG`E>zz%*irvo5rAWC#|v&x@-]Ne3\]"_ 7Qѳy Dd;C{Y5f;a'p#fȋ[o#m!-4`s(QʙU-MHƒ!?Q薨 FQX2/ #=@9=$Ρ5J'G.Wj=MPzLE`B,Ytf Wxq߭fϿkL+;$E:n~Z^ OYIXd}RW0R]pIkW3Wjd8 vY݌@OWSzqNj'}۴U2o C[sI{uٍ*C4Zx䉥6mE3wBC`" 4t]_(8ڢC9OȊt:gn@?׭F3nƘG N 6qj$I u) (Ue4&n fu@2'Q' İiiJ5#j#8UCFq DEש0L6mAAb2DXy%iV >0UPgc)Jc \]H \VBw zEtSeO73K>=a$g3(N>t|Zim|Rmӄ^M,6r~>rIʿ AdJ}C+1I`VuEP4_`ICտO;aSml_79"`ވmZ8Klۢ0abov\SXAF(*I7@CΩxN0Z!dQ1$|2U_˼ QWc+2-:"% N״ {<)ʀg#ȝM  wskxFչ&y "lQ<8k'g[/&Wd['yi( _$Q8TuI0DP8d0Xe}ͤ_'q|Xa'j7,gO`T-ȴg #D -}#:~7(2Zr,̳ǖPmEaZ'ڹэԀ|J[cB@4W:5#dH91o? *(Bξ.wA^tt#˩LYxw S8V kXc2<@eH-q%lBb.nX(1Xâ!I}FepC*p@`!ۨyB|ٖt̑4Yw_hڂ%oQdeܙ͏ךqqG셆'E2|ZY5)Lb௞d77MzY:þdHJA!f9_Yl>1,;u] Cq^vG"+qw*G6x \2cT:P'5g; {V[vK_bw)ԒMlUTc$d= neŽ:Ӏl)XpTN۝^39ޏ3@i;V&U}UGïCedUNtʬJ`7:.QQU+4{ AcMo. ZP۰IrGS{V D G<,/p68莬Z!TT& :=[޼7Cy̲=Nw3WQHq׈or4iǞm.vxT1}˯H{Ze QlL@K MKon E=:Lk :*][t _}pF9Z9713%w?ף^mI9zaxeOEtqHWO^V%[]օa1D[!a ~grOJ $k&J")v@:7ο{S"?-G8, F ZZMMؗO ~Tuґ$}sGP,[SF"Q>i AmCC-Qʈgf׸'BqoK*؅tol~x]]wq%b*^'pi Vve:?(\[cS e:|CM`H(FzE蛳'`5_:/"_l};`:_̟뙦 5hQvkX M7MV)^~ ^JYD.:SE"pquP N`4 =J`^SEA%^?(jUzN<_(2 aYs\ccly;̻I1l>Qb$eqت{Hg/hb/BaTI(I#Q\>ǹ0#. A%Cáp,p; bX&e$h.2!_)H'>Tw:Ɔ˰j7P^u>tXy|Gha}g>h\tPJc$ ^&㞠FZap;&I6HC/QT.9^[6]EXOJurlK`Vp,B>5ٳ 2퇛_ -g ~%o[rcBh;Ld7trnJ;[COA K i:%)P<%GCk#d_y7U:CT__</a5듕jz E<>#_)PFaĘou{ظ ӮV&Ym%(iدQ剌^ysXՒ"|hn_B"ew ݽJV~*DŽbK)B`~^(6WwdK-G)ʙA@S=nx>R0Ay+I)h4KE>> _T8!.y +dfKk(9fr`$PjHs]mf2L3\E3pXlMչѣ`D!0r?q/V^PޗJ27+'\!ˢОZulzKVndWĘ$EL;ڍןKV$9y5Ϙ_HQ^%{*yʓ% Ex.4&|J iN"v03} 9z5M/$XYf^ |$*>6}=`\GvPy"9HV?yefb0! $W` I#}ǍA(hX͆)7CZ1s ebn*z>4UGIN1UːQ~|X5l(-='kV'tT9%@,+P0Vp5Y _vdx/ 7op92ڐ H0mcOt`5VsU"3E7-*ZAbpE98sTz6G a[-me2dV^s?W8hmJpf oQ}@'ݮHl{!xf(CG@:CFmlW`iЂLMW&sn)D_  QA޼;։h BY S PEkDj2h BOi_!0tmL_͍Dz|Jt 7%#΋*b~N➨u Q+-][t;X"1#H2P3Ft^6֤ 9Rb鰯| Umj2zo]\I64P$91i(UP^Y*VAC4fH>SÅpʵӀw:\ tLNnlмT1lO)`­&$Qz{}*_Knͣ_FW x/R91Xvm"%=ȕ`lAC7B;9y]Չ$J*D}2ʼn&v3бriT/ooo^"~1vugIsH#d A~ib:[rn$F1x. MovFlD9iA_ ]7]vY>~_R:HC)BTC|h,j-U RiYta~"2D_k;)ιʧ+&T(2*HyZ+xN}M3%*4s}^rNdh 5+Skdꆉ)־\bgH`Fwr6=\.ٹ3 ;QR&xØ܋0}H;aBo!<2]+2ꇟ;ve2,::]1N"G͞YeB: (k`$ӊsDpHD̟gюNzc1NezRۙhȎ:(~fI1's]5 vttZ󻩋d3*XA mA@ϴzeے7C:UR򡊟 MK&Fr&\G*ߔeNhZh}j+x:VԨƚy':,,Y #VF ɦ}t->^Û{= $!K"szJh I7*C]\&n, =\DN86X,-.N]pa˝SpF(}k'}]YUsy߮dnJ4jͥt`6)-=\[.e T'ؾ+O͉DcjBDg,F t6~^KcMRwL]5 *r;INnfsxbNb,~.].^Wjm=`z2$ugZgG4PY jb N:U?׋,^X:akἡz8)D_\Po?fAXEf*X_7Qxmm%85ҖeU'7UYacCd 'l :t-ʚau`V-pU`wiN Lgx$(3B$%5k:),/G,,a#]XVY- zIψ=E~@&ڕc2D{Ʌ&j^R/w̦6˖we -~"0\?4:AVN} t<'+w ҈#nr5zԩy8'hIgc%,KuS~7d4Kx^6Q_ke 닟a$Pjrw0ɅװEyE LTȫa/#Z @` Y}RV$՗:KxlfO2YD4 (;pW0ZH,aI<)r$t9t+4&háSXt"ޛ,O N|K >v7hjSk)A븤M﯈Urm'BVQI zm~vY.+Ol5rPȉ1yni_*I=nL :$kbZs>=ipν_\\j3=#w}t_] k!BP`NgkN-U=iZҹU[ܰ7aReE61Zzc u8XՐ+DXoʅM6`~'Ѭt&9m+qxw%J۸k Oc.sfO=Yn\bF.V3x%g bךL*`QB"5h^K^r)֛AJ<3UtRs%2XSjhOq{Ku~]G]@6tk0׭ӯI#*׳#<$YqM?T ` QFb[]V-Ǚ?"lW{23e-%;8檛aS]cs H'o$?RQ3D9Fy@TK:Qvbʥ>F@B^=V*Z/ fzN[%B~:%_%1n^~+X@ik:~&#2b1v6yI)nh1G@'wU;,UHP'z%]n*yD[2tg8&l.G3t -Q }) 6^>8")u+.B$:QZ#FFˍ^!00% (CzÃt5Y5zL =O{3Q7 5ӹ~YGn,1YBS2(L4i@8TM» V6w%2oLaMc0Uh2mP4ـ?W&3[Z7x+bT 4Mvbf規3} (r٣͙;I!elhLq85K4 G롂~CxX ggJziM+OٳqAgY"IzSڄӭn2D6t%3vH7a(n0{I >Q' pnbSE9\\# KFV#^۪\Rqp}EaI7/]t(hp҂ *:vF{ypwdWޤh91ZabOLd>dpb 8?FGЖD.N[wvXdt sfY5O`?h>.0Ѽ? ^0z_,:6;1b,Yvh(,2:u@fݍ2i-]+l|dcێ{ Q]K5uZ[P(RLNuNxh^f1=E1!7Y%şĶ_ॗC\;Yp}lNE5F3lBiwq~nt"aADy>\Q:,4Z˃@ڲK \RVwhB$乜mES\P'+ET:q!,WTu)"jBFȨn%@֑Ff[ 8֝d_%߰Ɗ~/7M/tZEv@BoS0<6sSs@ʒ9Jꀃa!8{;vA;e1<"Ml*cJ%oODCF<`ӽ? dg lR)Dž_v HNM33nU@\V>d@ס]q!RrYwhd`+)=<A5hzw9MR2F_Q bRe 6I:et+'mJ凟)q{cM@U] 3*+`EŷE3ΫT/*C,XA0 W_/nAca+8Yz B& CO&!> P q2[ML=A2["H+QOh1)sRQc*H+ͪJ*'E =zQ3 m5/})rAWh>%8]3Zu PH@LJQm|Vz1 ԦFΔL^=4`qOGac(rN%˂-;\=|$Mp#^yhW.?߳'›}tI&p;2'ˮ 8̊z8hkfr ٔL"Ά'QJ oRV@isP >.ԁw\(],n:w#>"Q

:ģgw0J|<߹G?I^; {9*K=[@#Vt(GXt 5 0r򿚳k;}g^Tt- '}=iCEDC<ܛѩ s>% 1^lW^h !IPjl|y bdv?@!Dʝ>mxۿh57o5םR0:lvH&zߖ6HO96{Y33Y1Yg~WYOZP!ĿQ!ܱGXv0h>!~F“khp`*vgnQ6_EA3qWI4xnXB<ܟN|ewXkN{ w~/L@J.Bp?Jd%bra*g#`3ЕvA-f5լ. 'Tp pnSs)$;eg b$IW <Am OLٚɁ夁o;DsV:$)WƱ 4|1[:Ib;-VmB.q+yB>n'SחIUVm#%:m;EH!" ᧛Z}7s%uV+^Hfǫi^k,u9" y۠l}!HI {M m-jޔ%L $CES&ȳŌ+̾U-x{3q'nkV~n]`4&"NPVa3zԙEfpa3sī$k@9qD`_*OK梩KU]FL0`Ayiq ŠS2+mjݰS0fU4/G?Qug#w{薀oRky˵}̱kn$o|Ϊ_8iF;>r3A8asIhq%0{^px>p\cPhv (rOqU{D~C=F/D _AӴi2qC+w M$x2l}WH$?U^TIB>:3q 4~ Ӽ牑6pMw]F] S𰔶elc2l,A7sn͎!,iml8VpHBǃmdzB.0zu}mF5Z@{"( -z8<_Q^+y̹v~蒗$Dse$aZ*H^}KɹR핖Az;_lҼsO|]ḱ0NzC% Ga`@z,N7tQ!"I_ Dߣ9ԕy?a|!SaTN˵ӌ0Ex*_PD"fQgݍM*w;D۹A8&xm&Yũ1˨e%4o re ͘|  $IXNcDlAIqxMZL^,J'Wi>#YV,'k:EB˚.4ǿva(K/`fG.Qk%zS]=72YLuƣ|>ڙb越>?R!$eLNBs j|;+pl] D9a#n㥷> t=j P;3)4߉v0inXiQCj\MC@9U${HaK(MKе !51L^֔aU()~toOeK3J~HO !t6Ҿd툋 _pab]vȮt&FLڂ셖.s8%=[r֧lx ܂)(¼h!JlNsBЄq f.)>_:Ҡߒěg]mB||&]ȚYD{Z:~a+te<| ʪ3MA(i <;bk0 ]10CGی$HVD 0Upf !%z*Db "=0g'PX.ѭc]Ln)M3fZ}}qOfmWQ4^A>y/'x] @<#]E/RD֞,gI30s!Tps 9pm&j\EFvdxjtz?/ ̺@+Rl(oQ*UvòLގ~TCΙ\Sh0uͬM7.韶/jz%YoL7ʋ蠳.iEt9S6> %H<@ _HR^RmF YSXʜG)d@.]eakR!'#+%d,dVbn.XLؤ```>!j|zV$ˎb VSC/~6k+s22KyrI{=]E [k)(Eb)[PtB D T\( CBh^( JC&cQo+u2(N`SD)9 ]:`1J`\w11 1K}U,PH*:-X"w"Iʿk~!{Kd{FpLTz.(= )! oj_6dz"ґ/A kV~NMfD.u4a2pQ0T\Y)e,͸e"oe1rg0mL8'mo}z&\y`'zr qp>B9.C8)ع͟s"//dqϢ?pxSgEEK] H䤼\L_=Z$IA^J!?jӾy]!aʻa٦֝ u=;}s~oI#2.:f( OgtG;Ԓ_؉gVm3x"fף&t_jF8/7=vK #,u;MkdYq=/2KL@'2fej楇wLP88t1zXÇi\)֐ 5LxW"3mjV☧VH-8JR4%k5 QlFdK+lovm,ҳ&[OJx0@|K7"4QƟUܵE0?u|/\diAK&q=ٚ_~ɲf؍_A͞44 f+$ϙZ~ ƨPZ09ʚRS>Y3f^k;.{ <2rҎ0];ߟbS; ql fݫeM*ܓ>>'B `VcWb+jP{XpsHw&b;EdFڮi5&G`9(mtH~iC L4 轨*CWuMjφ d}3މOWsXNЍQVx}BEM;8ӕ7K[gԇ&9HW'(2g ` _353<-1*xH:&ڡ\l ^ˬ׏L3@jHJs\-׼8L2pJ@u{UhzaL9H5K> ICk۝,qǩ[88BQt;,N[3 !  :+^a`aH mMȡTʲknT Zh&gԲ 33C͌A9L]3 \0CL~}0TaO&>4Tmm0J y-Fsj弾}9K!Dj:^v$N) l: 1Yb B}QI *%&]+!#54|p:.Ŷ\I, 8R:Pn-opܬĔU@!jT 9@k* }@>ަ㳻;9VrKbKN/x3_KTt&(Oy-7+I2mbl45] ab 9ȒGzNoYQ9I_OpܧgkE/ґ ӧ?c 5A"n,uY¦U|5`\L$*=a!ߚ~THd=^=IWLe~8J^>4R78*ɴfy:^mḭ'*r].x <At[EHl'~YM3N#B[No~wuTQ#z&f:|R}ɖY؝ZH5+&SaciKkeJ@(E}L^%vqPh+"Y2@tOc啻ݪw*: B\ k-&ZR !ׄtdm0_.*_7g'F׺ứ\BI:vNBR|92Qjm?(P\IZDxu: 2f }|;/ShZt+!NkXI#&Arz'sǩXN9Ts,fRzq_#j󓕸nFZ)܄*3jbG5b;O,1QD]D.R@+l-EZ˽G7߂/H#5|ϱN-29߱z# "ȰInFnC%leւUaIG.r؇OZK )L5ChSTeڲBebnOp'5h"k3:I}Ѻ\(W3 /fZ> 1]B،\fx& inN~IG3Dz `;T Ǭז6^3ل'LBI*/?~4 )>ȯG;odwB+q@-8s,.aaX5by1iVWnj107`wVb$TRzScڥln%ZiEr ̥7KV᠏{q|~lI?M;/T=(';N>7?vS^?V[1 |ێ@5"[:%GiⲄ33>y)vyma,> 0be֑^ލ#v}X8H[)%ChBv6-"URcNSUy n o3MsxABu} U߁5yJGxmcd3@awaZ_*YC$tVl_^UmF_aaExlC6=_n"Oia0R4#TȞ" wzD卉%8EZ[J^[ 0|oGci^v͐8 \ }u bcA+k4xQ谫SҨ1K@`þ.."5Y7qeܬ5-Qq;ꄲ ws.'~A@SeSj xCLO H|$n^AF Y P9 u'Y4AmNqmCwۇFı1Pk9c~$<& Zfta˦grE5N-ޤқLo1ܧ}$eYc˭՚wK/+ԠF'ҠnػODjgYn4YKW#s d4<hSd(|N,Lއ_@Μ[Z%w|.{;>TN^mG! W*t5~eqMg>v>(@yGE1Ֆ'b+/%&΀S=7=#[*喲 6MBǵvdC_aGGq% \N9}lY. |PEy|;;yxB >S ɒxmg +Qm ֈ6U[E!U.ڒGI`q3^ 7i k.Ćqۏ.#;wUO8զk1aJp;(\5cO>]Xa^]q/y'?+h%M[BG[cwR bNcq3}B!՞}Zb`"߀>3K*oe@PlKW]~U1ʱ+ =e"Ц='Ʌ-n9TisV!aCׅJ0wE~x@NcNУ*g8$:,y.~xjҬ1lЧ+sTn e6UkqCq[ ]+h0= TBMr"|;F$&TJ 7ťHWRu7)k[{$[ ~8=齾DWW||{'TGT5wޙ zS 6 1r'$x|OK3kJ)ZE{L6ǟ]61:L{) _X~*l-1);TAT+ F3z2z?A:ÁHJe&_\l S)+Ĺhsh^Z[`"&Y ek#gΎhhnAȺFͭg6b*fţE=%jmQ8m&PLII)6o-ZHWEiS1 &/O\PJ[RΪBM-*O3N KtbF01PL#` Y訄DKj{$|6d b`[:"5=}ܤ@6b vK:&2K.׆i{`[R)W8EvaO}tbc}:}ꊸR1i_xmEM=

]Jo(pM#\|ktDײLc{tJY 6>eC|t÷9љZW Cǫ 7sbO,= 9m^p{CMlM&.<t#Q/`NyߞX}xW29QuܳZK9fX{A!&1ـH&1 S V92 >!;yU))f7CnM3%;dE;s<^~!fa79S+p Ȱj([  򂕼HPfd>ksf{O:4Úwr$e|rWǟ8Oo&-π8'"T 9KɛغPS)Bygys5ta̠=<"$-zny =ى T [? XpYŘ ҷ|!koL` /&je84 ղT 9Ѷ>vvGJw.f32s@P%EZܟ8]aџ IPd?Pж0"ܒ Q].Wx壸8NMa5o*^ޣ 6 4jF53a=y4IKv%!;g %"B덹c,L|=9Ә{t(rVwqHauwآkJOn&1-yӍyWG㏜ѳKUQE~غ5*\V-u(c@JoJE{?ksUIxWk9p6@*hxq4<:.Ia"G4oh]Š;ԻO٘U gdMps{sLG󌷍qR{ap ~k_k" gp K 9g"`Nf>zբV'XKA4ѽNQ yt>"u< ۷qG wvpZVQ.u0i&AhA#=U(֝/XI Z9X/K)Z2T,1c񴷠V#4;ȟ/-JB0,!;y8-m)PD& hȂܓ_9#:DEyj$LBJPsjD طB :`XVTTQdfB u*r?!,=f8\# VT8vyHap5O(r6k桉aJ\8h\sɾled$Y&M9Ku]Ks|Gůĺ6=qIRRZ$ WZحbVIMEO3P1+F<Ϩ#8x.Zn%;i;#`Vbk܉.L*s_qva~XZS5:}GW0X[tAjzA!(eO,oSYh(^!z719 nQ/L-~?_7aNYFцл`~lѯz"2|W32w@'z|e3/?JLF8y\~Òϼۤ\#],@phJ^5}-E .Uks\>ZlLŀ݉h+?R[5қSo^w |/JNf*HsC|6!_væ78S3;ocp.eqTL. 7&?\TW#??r>EZ"IJJ"#\Eb>P  ҂wv &i{3ѼSīǙy8<d=͌1x pւDL [ 8p %LuJDcR4yF0'{y{ȿ*02Dns=ӊ`6]UNoBrHP":%{;dxXb:&,q"-xo\6Cv; ޻w]P}0L=| Hpq?+S}@׻H/cg\3Y3;X@J1k?LqfȊ?T{DllS喂$9x [~wg=R_MͅkTuXXGޤ~@Dg,VfgDvk5lA䭛lhA#2v'#^ pVt>L FZ:/y9偌&z'OEϸT u<]&2]k굘ɒDʵNxjD̺*lRamTNG%wOy>ܓW]߲ST>wTBQƨSEc3kEFWd,eQqFC׃ӿgpN/$ a$l O1-l PI(sWzwZvk\MnCdS_CA9S gҸMxqL,&4Pi{&G׼MG;=/f<4 V6Y"DHu=mN KQǒn6)?d̟Sθ3Hr$!^$I܆R-݁%|إKMTBNAcns.idݱu->e:]pƟ 6( wvniHw>"\~ҊWp o鵯  5*_-&F WVm^CklJP}&У &)<W$I>(*g_ҫ(JhƢ۷j"u6SYv< nl;m`Ɍ2,׻9Dszng}6,ز n ܸ7@Gƌ a` qw e/;PhG7cB߹)o iڰO#C|caONn{}WS$xseL aaՓ i,~&twIW8\Δ,>J 6Qv]MVmIȜK%2Z^Wt*jp“k~&} ߁Aj1$b}u,؂%WK! rhA\ɴiQ<-,7B˿@ X;Tml9xx; 0>ӭ6q3+ .\<׀.8;09KZ]_#x\'2hc^3: nvRG03l;+]-bP L_/m\.gVHq) 7=1ǹ(%}Ԗ]#DMW ihȡgpaԉ!ҜnHb:o~RË[\cD<\|ѷ0.ט9fVMAo (?q^`ܝSKK/ψ>ǻ3 ;KV?jyӶ;yXVJ_3'ү;d (ultgI߀):-4lSXӅUrPj}B*"̝wMN2 4 ?^mA'{:SH/*Mpa.N*-dnCltzB<)Op4J;_i(sSg* jLX+g\!T9`C"-?`o< |[`tz%:sx-Mclij^RoFW*S`ʗO #T6Jqs(נ1=;HIx(a45t7 ڱqy3tdWGiMM`csW*]R%WK_N#2 F}5E1?+Zq;`C<. e4)rOjh H1SD]KqNvʤ_: h\Fy|׿An]ܐ?yd ]Z 6I18s>0VR\ +qiR7.e-w>Go"4ީg^6Fc˱r;Y]HU?!%@Y>ӅAT3D≮!tQ|~,~遚ڻTA#\عï;%f Z36j݀ؑ^ i>Za%ܣ'1_ . {: mE)wS>} Nv ʂXt@[޶K]5Ȅ"]bcC ]J$12ځk*~aUW]xKoVRn}?/"kVe좦 ' $ÿaEJd'I'iٺ0Z <`01^~ؼێ@A~=a}_>hŦX B &8rtU׹ 4mp,>t%rFw'^_6s5씭ۿ3{/&UکiP/qHv{fobyY ނV t(!S1Q2L]ъ/#()| Vl |J11{6'PPm!$9ӴJk{Cȴ#[l~rw*@)D8BLzp *d.Fz`r j,9  lH c?~}֑@׿q /|r}fbCKcX1 @ Ƥc ldRZxQ2NB;ĭYWiW-;**Z޿?1s*>R&YN] À^!1ѷ ,G's!aN)>4_v|B;!.NL ^13^Պ"%e|VJj[ 4^+?AcEkkpYB.oٰYDZإa[mÇGF񛏙 D-i'A_U p0Gqk}8iۈ7Qxv1}?/t;e w=#pɊ 3c WNڊ^KuX#o~&N?^4 Jx@$|h2 IX+}yy 3/8}*=ϝudha]䞵B΍+dIsZ_MdAƪN븂tn(ͅ\Z@r^bIﺔiZ<{HI};Pʽe.:(I8) pNCϹΏHchy:XWɐ<>*zJ=ްdP9y8>lw u+gT'AcɃxenѵ9h kbcUuܒTF6OE'QBE\P!!j 6oku,Xkux:_My9suC n".i>yMzŇ" -57;㸾 $zvLDF[}vYRׯ}tP]F['Tx!.@@X9f%-SWGcMPZډ 9!yXS`%NA؆79 OׂQP׽.'^ކ [(%+CCYHg2$PrGjXkʥ2+I/>ޘFː6,|zFאj$ ?z )Cn8(be4~fD|<}d'lotӪ #ZG {֍h/"mj"95nMm=B}@I3 H̐N!E820,8qtNˑg=J*A[816=Y]^&mO/_x)Ъ8X5 m﹞Ƿx>Ru.~tL‘R ku"Zd7_XGF)c-Y\dO߱` ۃd0W?ѓ3 Iѓa~RA? q]ä[ᅧQ C>kyςST6Cb\o5\zSXo?YR]H+P]~6ΚrcicG$y v>q=m/?1wgu"y_zP̹֋J@lW90+%?ZOJjq&C3eaY;JD (dVoiDMl| ZW@w ΐ[D#p㻬m*@/[3w 3D7ԄHhijAD[)ȶu:@|}S>cje~MSj+^A1WF&QstT+pXI/0S+3 vH>/=ko  ﰗ!|5zwߝ3O|mrGsX C݂ ciȴމ{-,E= ̳&%Cțœ}=Kl 1e#J 7Вw^kyIa|# L&.~ZTh||{S,y9k YpGU{~HxPUCzQ^jq^Y. wsRxWO3p i0S)<>ֵܾrwާdp.[.BBJqL 5 ʼnO<\v߳/8kltR*onѽ`l-S;,/_ѻA " {V"% =#fH]8![ y\PV"B^:9qw`l#nY3o  2y7 B-rl<,p\po\ɻԔ '*.oȧ} W8d/e87*ʃ9+'puplV/_/.d5! v^nNoܝvɁ2**&S}g w|I\&D/`fCΙFbeM؋<:(з^ +_M2 '28uOEtױz O }8$ w)/wl@Kiwz"m^e_~Oe:ۗwu}rHܯW$r,\j@ !+ C cMLHz5] 91 )]b~VE#x5`i'rx=.0NG(kq5k+[-W?FfJlK> 45(_Sܶ=xoD50\8dBSJ# XC|scp$@q`lw{]ڃým c_h~p=|kh= k|#0r%Uc7qSQgG<3_B?c 7U{FpeRz墐gf ٩3y}Dc:wkh`0u%@vk:xEN[Z+ߔڢǏ~K;ãT[,rSNwFڢZ}<#+dGפ4  v^a/92O}:x "y_ɣ,O'Y؂v 4 t´LQJP0? 6ny#G,v\RR)OYײoz>=op* ~6 MQH>֥.!}C“PPŸ!j{Jf C/JDl]0di>ϟrC$5Bf\mw%ZO޷t;ojw-`c%vVx@p-Xm+DKDbBk4];Q;31u&A_҉ಿF#c wL#] `9VhVKU.ݫ(paTY"Z9>(ogz"*o[v%8Qo _LIW~(3<5%ߜ|O v %6lOl.qqw֘lEUу 5o^JC" >v}6p9,AV{n5ls#῭fV`_%N]{A\e(>':]~XS$˕+kd,_[Pb~A2g"U$kFk%+(HD`r (~'` z+ quBTA ͑!; ^rEc>&>OqjIW[5o(4 N2庀7F5WV"W)*ZR/yj4G#?9}CNҗi5I% lr4d*pDH~QmWἘdOhp ۫4msr@i"SewCMM*lYy/̱X-q]g𙤳Ij1":i{O t?eS$ںelO mI}}B ,/]ڣL:AfRD{BSO^ypw6] (nZ ˞{ܕ94p@\rm9R3bE9)J\~/ud/:_W~jZˬ4闡-2&E=",WcZa]^ƀ^j{?=FIHO=ާSeWqsϤ_|-^:'69d@])d^GQOoGS B>[пJawjNwma]ϼȢr2C:$^\>ar,WxkpB t赥z0ND,lL8Ѵs)4jn-]/*lco{7¢z[oO3M̸WF@8 ax ;}Sˁܾ x~b"S0tDQ =EG;i1;׊^GwvU` .[ 3uHg-E1o! 8Hd 78?M5|lǥ٘J"zVͮ&Fx J生 x @ pT ۳ 쵧Kz0ғZ%6E(.lucm ct J'ffQM)|G/(D-~sFʛrmbuw)&/w`/BG0] j-⪈^N@ԍ:UOk1۷I7?1!Ie%/qUfTsg\i[F;gnڐ<3-wSCm/Mo0Mӭכ~S `vU oןW?BOtÑ߸or1u_}2_f@iWfǰ.~um]K鳓Tl JN|)%TިC6,BeN*I9:4n[ͬO!0t7-wH@C_"Qr ՜kʟd?eP/Ɇ}'@wia:D~eTpfsbV9`؋()+@ B{C=P1 Kw=._ې@'`qgL,<~ꕞMc&0VHG'Q%gl/'B$a>!3mDsK8zdFN{Gg64z =r¹Es_Xj%{=TSJnuV ihvږ 7Ϙ? ҪE!0>[o=֪/ava~ګص{c  &FO 4af+Z2,yA $Z9K5;a&#GF^mh{CxEpوKVw? gyFٜ]:k+1{R=St0qj[R2zYD_%+tXl-f7y)0"mc,W0l㜬; f6 #|3Ӝo&3Rj/1 w mz/ JU zƉ#>0~9๺!J{G\PB?ϰ9q 8!b!m~YGV+BU· NlG}j Sx0 K^[b q$RM&0p̂)Jҷg@:/~=(j|cOیzp Uez5lMȤp!)]Vt?,)>u.(qIduq7kwt@N|2U .1@*i4(X:l9N#Dh#KrI$UQZϏ ;T\uCU>7/[rFJ2mO~.Ս;p vv4r&u1BjGӚ@_Zy˓^c$. c!~bp?{gBHxR_eNAUcCLS٨Bekl5rRdț`1v-Ⓝ)cFCqtᒴ9';Z(b ee!Ix48`N@Lv i $e8k/Y-RJ #pݶ:l!96Aųu9;%)URlO B:bB6e9LdvfVR!hmriG hjK~9^3W|ڟcJX.&?ȣyLyd*dϠvRNg ) B;wqftՕml!BDd'Q|Kg~Hx3uJs&tU4!R+'1 3plwuOT/1"JZxzwE[*q]cb7!4H -.FhQ o똞'F 7X_ڄ(T [ih.ICvMᵩsw/Օp;16T"YaΝ9Q_{>߬&N rU||jluS!8Ԑ*=}cgFNO2VopIӋhPpU?¯~ܹ7pl1J8M;H]u0?SP6S_Lbu yUq'jF{ꍾ7o: 4] H7l}4rK@U)퐊.b|+5Wt̆Ĝsۧ0QZ$ɸ#2@}HsL@$< %ؾ:(Qmkׇhj0ܘ}>4 *F"'|HnPIIP5|De?$3 8ߊFiөd,8 !/M?OY)d}>/4NBhi'TЎo~Z_8tf45JÍb\B IσoIIRP8Ɲ#mApsv9q#ʲM1[YFF_(HONJ|~iXEȶn6OXVA״R(nEY 'JhDLILM5H-nS Vb [{+ҙCMv@osO5c9WS]`}-ugV{X&R6h-Ґ9"\f=ƭ7+\YzlN$70:ZKVY;g(7wʈgu\Q?cݭ19^0ɥY]Z'Nnޥ:gyo ԥhQMFJu$6ˌ:AZ("yI?y{E`I z1;y JD7Lw slris}ԙ˧&#A\xf{:̖QiL] ~LRgUGlRbnBM3Y;eRg..W\\*o6.YƽZ˹>+EY=e.QDeH@r NUfH/mg 0 *T٨`L/gVV3iC.}K!+Rb5QˇvnGB2.dyln [ #@Sl%Lg\O-.g.үlh%qD4GBib /C_5MY)bBD!ӤaI .k~g →ilӆ|e+Dnp]-Iיݡ)Mrc?*V,瓚'l|bѽ/AL|.|qZ&{\6rL}[$bYЍ7v;2W<,iǏ0֥jDq]'y5l; Vsqzyq@Yĵ+,"Q7ČJtv[5-bu& -{U'ZrtQkM^_14TxΤ!T{h+M%SF(Eܬ vTaoơ"8&_Wt[uMBs,M;$7 Y|]٧FV)E T7JjP sHL3;̣3d)DcаH2[~'_ҺłVIz д0-E_dvg@L~^iB@?1;^jm] <pv"%_+s1(jCbj4pa;J^uP!oek$[rw,kyH }69Y&‡]a'k}c5X߾ܹ~%&w!9 T<2cNsEܳw6  E2d'dr~dPTXf25`y.\FGYZ^U՜ueѱrAQ[«/LkXL@AXI䘑H0k&bV&%[4.(…߶sa͵AZJHoʏU) ĔִtXVw@2f?gD :Kd9n~wPgs,>unB>k'D`~GBNSI2Ic.AH\ݲ9bYBA1[D |jurW]5~a8NaکNu2̋@@6(LYg`\}פ׿d30iL)hDP]:]XA2aoo8ʀ&.g=7lK:\.=\G#7'xIT'h&5nqNH/4^CH5(a+S(oqp-(~eM0uIiGaT"iA>'8޽TE?9 fVG;d,, h;q$:}G!xH#KџMN͆RoDrZD.WP&ATP3Ci(n9?72 YB) ?kPo n6’g7%:ȶ%2 opjR4k3^Aj̽'{GK'آ'8>5ZT.h_1K$JXUJ>6F &sujqFhStF.KRRR=d"0r`ZuBJZLMxn҉q[z^]5ZA>X@m })bQ6,4y\(׭{x汰I#Z änz*PN=?{ƶm-\E'oD55Ia4 aH@B547ۜ WrzCɴX,J4%vZ.dZJg\<'9),f6C*I"DF# P.\y.8bq{+SiY*Vc/䁍BjƤӡ5N8,/&1:'*fKNFVN}% 1.y&8;͏p&}Su JW8H)/fbSQ;FPg0zfWQh|@]!z Vm2y-W-Ѻ"cRfLi5^*QT"jJ@jcV ۀ$b2X=DB.3F_9N̢C)}N1ʕ,P 169&*8Tw(+¹cNXb"hJ!$A Pkh}ۗ>_mP! &9ﺚ{6\Ԇ\> %1"P[T s|k$i|# >'{y4 璇//m"ϠZ%3i8H",Z^o7ܺ{u{?SH ޷SO&^NsY`5W4\g'e)@YV 1zJzüKrk]Ĩ}:4NNʻ`݆y5d ;-cTʼReMN.!XKXa!~:y/{ydDs!.\ߏ!fQy/l1ø?\lG.Z/o8O+9g]wE[u銰$ضs 8Czn)lI}+ZYGvrPZdj$]n5̌3ǧ:p]/Hfv>MzMNV@HCl<|tw$O%z/+&R6kC&&t=8RN["6tqXc\b|Er^K+z 7 r )~j.y[_L$jµfЋMIjFx=EFpd m}S-5~uuBǟrY2LL/kA[-E3,p7~0F섳@Nu"> . yooKζٚlw?rj]"7@ a?<'6T#[o@ m\St\58} Dc2 [ oF>qWQ[̼Eܸځo/`'6w칇un0:g'C:^*] :3—S[FGo* Łj~ #s5}78 Pht*JqwBuҷI7bGJoĻC&FYBSW!-q_k1w{韇`d&#U *kf*߽l~*fiakս} gc!yKr mcԼZ4J`%)]vL(*[t J{)ByV2\" |d[ۖ+NH[ s p) |ܶk\roq4X^,\T17g_^u[.c:|n?Q8S;w%x0;cӏ}A)>#[eMkjvt/狛Z~ {Xqд#q7=i0 0bOZ]ҨhoH.HsMOkK:I1l;d AKR(ڬ35ۖtvO_܇<Gbc&?p93bh7K]?!1JHJDdWIXjޖEBsɺ;0&֑`7g9w>JЂfqr;H=1m+ulAn[GI%@Яa^sqF3NkJZ,K%IGc|V JZ7qK)ZZ3GPh&ݥqA2?9i)-yqhCKap<[-^"bAݰ%U!_mаXM6['Q5^vhf xiEҵGJa_;#BCy%oSFFM:c' eF$KnP9c-?+a߅;N.EΥla#Δ?ah X|aϯ$7mӕ]^|+p+لlIZ~S\?%rr/ZaD\l(h'B|/$};WNY,fbhy]-x}w [FpdA9^I[SEUOu_j/ٓ+vB}^v3[^OD=`es.ZYx n{J'PY0^h_* ^l4~V>EH~[`-)}5Q6JLV\"xpp,b!΢Z5פSWlu$5\ >r懩E iPZؓÙjBtvo^R]X8v;{ޛNe{س"KҀVLG-'uSR+( .oN<+O'ӬoL=Z"0PG9pHl2Jw 05zI Yբ;/¨ĂW_/c1m]6[\J  {^}g~hA']ZڥyaS|,PCpyMn7~N޿h%׈XI4K83gV(MX]o-L!W8[ʔX0ԍlp[CH\X1/N!is@vWţ\ *">YLn'eX[Vɇc?Vԫu#>#{KNஏHԈ%Ϡy{\}cqcCh@!~ a <`6x^R a.iצT $ҶJhG*̚aצ4 &=p"Hf*q9\꿯3$E)e@KC3 tsJluf<*DLVЪ>69b"w=f7 UtA«E"0D!jj&@ \ǹـ*k+Rc )j2UX3l|iD*솵^oۼ5Ɉ3igɘp36EbNɍ,FGlbڔ/DK"ˋCӨ5))XTA51@&OGгAf'61W֋&>V/?civvxך_k.~_2']A8$_3x}ĢY$4E4*ڂklkw]a$s~nzѧ$H $mvH>}iqL Ԡ#yS疾 tX6^(~Rb52N8Wqj{zZzkDE1B4Q)5Vc2))r?oi7'\%k+ʶ^{Hk[>e1V8xϑk%:=S%8-H 5=T*Eg؁=(%t=MNàvLJz1{oՀ:(Pu"ћ.&h0}D {Ͱ餔-gUO--fBH&ru_ GgS<€]00/fqޠQC;'4JjS:XInH {N?v{߳hFa@Y}Fr??5ŗzR"Ԋ5C> dL6 n{ zfW Hs؅oUӀ<."ÂF:m goZ ڻKGMy\ ƳQ>`¬^Y Kb&c\XQ Kfw݂&w9+ҕЌ1<]9SmHQ6Opx0yoX~ ʫsmbi\@\A5WӅh+O} 6Eqh58ѬVLa1$l U9p`jӑ1i&57|Ew?p ?yv{7̨Y!+ПU ŶPN|EjĨ^}O<'(1Xtwik#^2n뻼"\^{@MhctZEN7ųi?rd T'"r{}n' R$iaf&9.?ӄ˨C+Zz݁2 Xk xrd[/&]ϹC)@[+WDmtrꬻxz %t* Qp68W-qp6Vb %瑡`/j{]7(GBʛᔜD19p]P<qKU4+R8ƀ*|~SsA^rI'(7 .{" Oh?&?3qԨsxIPόV-aO<$kU6 WsZV̶( ;-]my+#<d>i`9e㑬'BUAj3rV<+tLRwr?пMg gpw#x[.@]y5*T+)YQID` Œ dosY6NŜyAeyst|5&-U-tǷTe-kSV5g QSqP:$Pu{9d֦ZΦrIBL<#( |VfHeYtO'yœa4/^ot4/4Vh8C, VՅ$z]%Zz3 hÆU޵:gڭ,lD[VWaMڊe+I 5x Wcp[Qc\D pkYי$_1R5f Щc-EoO\6P^^>n#P&R~ jjeQݠ~Nk~^~\Q:W}Qtq&mACnlSR|d/BW GucV?8z Ǚ~U4SBuiAaM*a^xxO9Dckh~STzżil 0fB2f37Kcz<{+jjhޞ*v|4gVJ 39W{L~ҦJ [OPxX@:l>WN7p0] vmہ]b :DLWN$K% "!=te}\E=s>0ꁽ^-%_azX4QP#dyrTcv*O7解-t"{[:OL{:B@{* \VCYؘ?q¸mХoo=DQ41{ξ;z<@cSPR~<ˋ$BRyqԸ!㣧v)[(se+y?;pox9f^<1Ҳ9JG?{ ,S斻 eXJ(>B!p1`wRt}9j&TW} E%ܿ#*0.iݿ#o1 NJ.(9 I?&S9D[Š)PW )9?YY^]?"s =ux } (;)HxAyFӗ瞟Y5Lz-2B4R ^:Gcmv0_7G&2 W(Y, tLmMie}qmysrvlcYm-vecjd"nTyJ܎hx]>٦AA0ֿ%جFuDo{ҟ_zX_`5xZ%YdE#G^fmfx`S4Q62C1Kκ^c4&")@6u"8|-N2L'[AW&JDSY}C˜S*{0,lqͩoCxt[S Q*7R;%BR?+5s`fc8woǮ2^(f &bu]ĂL^a;6dT: ҳK _)ެRb$SmxgHѽ`~;D߀<`8Dn4VsFͅPWsԪ 5 *k %N|gOM`&K0B=*%Q!F&YH1f\,eFE$ǐ芒3K9Q*컅jeC)9e-98Ǜ/5R?Nܱk'ߎl_2FjbX])e|\|Qlk@˜|(dQ٨)~VZŶ=xLxKSት_<i1{4oeY_:珤}pvyBչXwhCW%C;ԏhz bRu1 ~a7$F+0Hxc\lO /:5^v~cSqÀ&5"do vX@mAEEŒ$4 TkRf=fKtc!M0oj;7<߅W`1[1Qs+HΩi{8^*D&Yٚ>vc} ຬSj;Vcwxȳ'7,S}ڕj3 *b@-MP@!An_ ASIbd #p HzNdA0jJ@bOI&'0m B\}4lz:+1ZDS6 ~\qBbɹ~O: i#OD 9D) GIв;JCRz|ƒX+%f~-KWMa従2$|Ϡ~1NU,1o{#:d>,UP YSK1,:V"wٹѐOu@ rx}{ROsF+U4jgLS?]+QftW9h{BTC=?ŧAOy&|ȉfuT0(t'śY&ܛ?]hh͋[yl@YO-FRLq!h&JeU=]wZjW5!F7k#_p<w߈ketO!4޽ۂ*?f5)"ٻd.pek2 FrKp?lSQe_ZdsܭpՊ2= (Bwu_@ɮۧxar#ݓd% M:l~7ڸdoe#.ہ3lÞ0,0<d}bA }Rؓ")E0[9$B<G0+37GQdJMҍa* VtoBɫKVOn^Lȑͯ;7؝oHK (½KQ|fa;peS,A5z cxʄOR>R+y#v1@G?}n+ޮݘԙ:_9Rbg/+dw= Fug4@TTw/WtKh44LOp SoVMua)վfd& >bx]sR.P48G=gW*lд,UE_UdUxG%`)Hfs2d eqXߛawM5g>Jl iq.GHe*M||Ƶz }㴏jZStNFe 29߹IT\>.3"A&:fnZw讯+deSZ9iw -l1<0}UWFk@Ք$D9׽oӏ-Qa򭰂W&x܇UhKDO$,aπXzOHH$333;/ 6R#H @"L}b.~՚ivJ7OR\$̋r*] ($RiF$xRC[e<ިYB]_Г\O>i0Yu" r YwP`~SWCI'R|S0ƌ}c8cl.1#ӳlm^;1}tCN7 'V+0㺦Xy'L;=f Yo:p0e%|QP.N)~܆$!F udE0Cc_\Xivh[| r/1},ؚa5VYNЅNqZMF;zQ]S'"*ڍqys:V%MV@י4y~fnqylBrf TtD7< ?{CIU&H5tw3k~4؟vw%yĴ iE8ZB߈.2eȴH#P.\Ut+ ek42d37%Do!Ƣ?7M /u17a 2/U䶿 ^& 'd ThzH{q'P$y}%t%q=?"Ze/8Bq)}'aܚ򬳑p?q^̢g:\\ib)&NWKej t['+@{T;5ha|ۆgNI߸'1 )Hm[vQ4\m4b߄w)Pmc/G-$rN Bf4Y0gr@C^{gtϢfrQN cځonV84 a]m:.:YT*+tShb!#f!Z7,?YtؑB`uj=]/rdB[4Պ&:Q!<+F X&{nq%Zh[EFO+P_ ̈/!VE =geu}51ʟ-cQ;'*};o2uw*TtX'nh2Vj(82s/aE\yG" Si`!SBOQB;Z˓,{ci;v[ygrEzL$rrH3戳] U ECtT6.He&=fީ&R$ WjoQd?öz{ۓoz1'd[9m,`=f|, aI6=—<4*JΜ}9 m~XLvaR+V^0v ޥZ^eI~n{K(2=NЃO IegHO-(ςVM`18U9q~jusg~|3p_|=.G{ 7P%5: -ZZAkZY/EDńu q*E})V#(g+ I.%<օ>kGʍ _1N1a ie/TaG]X\5njZ`3}Gyʁ`W'&Sf}j~o]1%ԍV^ܚ%ta8fNhi}W}BB&i4d_F#^C9:pyf]_c,E'ǟD֥=S]=rR?6K2hr]4SsvOJW)EWa@2 5_ +KZ"N2gK(2Rfy|(ɿCz:9<2.GvY?l5Fʠ4WHH(ى%!^y]T sS&E.ّS$˺}Y{FBCWͮ-M 7)M=2oՆ5>>!)힬@R?fnugQ*y'7 :5PD_?A|׎NDrnzݺR]Z8.4Z7f"5σlOF0SgYjK1+5;wq<@bexʥ&q-e@o`ɼhsg Pæc)k#)30Y;U8Z? gZydŭLkֶ {0BMnNdn5^҇a|gh'qb!+}4`L}E)=lh_4ty?x)֏%^J>`^Lؽ\aEMf-OE} -7)J{ښFwHtAI;ZE,lbK fn*Kg9z?)s^?~ka[J3=iPa)_$u. ̃pxB'/w<(CgU_[ v<6]w*$[{ϭ=ka05UBZ6R 3&=ddqQF#(h HPqDslBDRTYM` 쌒2\,LaZ@kؖ@1u!+֩[96 Pk`(M^(Q qabE_~YЩp?mӈY#25f+~ ril>#O;6bGW_*⛃zkǴ}f x+U`AO`5 or4NE\i\7 *ad-E٧}1]ɔ=G5?ZSz2vva4ߌt%;ʟa8xs ~L*r½)ۏO΋y|!ߊxYn%t.WvrH).4}1ge|/WeB הDC7itHS iw҇ogڀ}q-8lL1XN yǝݩ kewR&,:0T_4tJhVc+I5G]XTA'G_X;H6ۚ&ִ{~d$ 7 -j/I()0xYc(x6eJOQ;5’u͗+A ]2Xc0+M;XuDEZ$ j$pRw؇'SJ9YVfѓRXM$XmoG?#Ugã/a/Wh* kmդޏ(%5f@*A9րfC>B593.OKiSzʷRC!T0;Un6Id5J]jܬ*D~g9DX>󬫶fx.9itTS@N5w7:Z7+sn$,{_NޜL@r+m+%I+ĈF0_5.uQyz Q+×%0jY ~0 ĭ Q{ 3-.bQw@`cb_'q&Ȭ2"Ɍك-c5KWv0lc^&zҵ54?61Pν9'_ }+!|h<9!V 8n?>ĿÕ,{n)a9: uAݷMi- %x L0_ʽaUP!)m1^"&`5e>gC=Q$ݻC,P32UK`+`%A=1i"+}|7VSe^4wެvXeϺ 9 ̂ 7F.,EjA@99PS36֢4HwڞBp>q \E_Z6|T݌ԇڵc/ۄ2璡e(g6<Kr8% I*.k/ٜyw">Ta֊P4f9/.C"O̵s AHZ(=284iHQ0bt3]L$Nbe^QP޻KTB7 qKm/q:˰әH]vIvd(* 68?v" P**6}g¶OwQV񵲀`$0̼MxCQIQD.#䯆y ,MfvgXQ Y2X1uJµ7ORL,jqH? S<7U%,+lcMӫP &QˆHѐLuu7r*jFgNQ(g9,l}2(A8rQ$K3 zhG:3y`kt L aUeL!,Vrѥs}kSAT '4x0c:#)OG*E($w2n[Y\>`8]^і(t+,CcK=gZ -+Z25VmۉZTq*2j[Dڻ»A)7HVgwɪÄWꊌɁb.,Ճcȶ!Y4 M ezXa<#Z=qGIr=5X ɹF[x 8q?[" 0ЪQ/(z|IX 3`ZȦ42߈T}OjE> Oz8hXZFʼn PTk`qxz`A[aRF!l#m' y-LF;$.(N* #-dy[7T{E9*z,YJ`.\b0VZK[}"e@&@ȿRt.ZLJS7d mU"ۼ-vȑ<>3&V&^L S's35ݢR71ZhUU%rQ%a%jh.WЯo3o와:xۄOU.%$͛ (WSA>Tc">0on`$˄B?8PκW&e\,ul&$w$&2~1(}>hl97K&F`kS*Kfk/9\>)mb5D`ۇ.M0⎿\r}P=>`{NB$}+UG m/&WWSZ-@PPS&d&K{[j%/\[b *dsVb4zb HJX%I.#?DY$"rx2gs)ɤݐ*4'++(:Oᵄw.xwIUK;R,ր[Å:eO䠴VM˹QnM"|M gGkA tVq~EeyK@WU:q  4N69؛DErM-F\O9 V=A?}[& dT6ܟ1 P +q"''=!WY0gr,(~g ( ؅E6*_FLWL̖Ju(,L0f?#Qi4VZp18.ɘ`7]E5GVU:7S;)G˓]۬e$:|BsK^_kOTAoSd]'Ͼ.z[%6 +o8fZ"\6a;MIFe/%Jʹ6I^~޽I ꃓT:Vd Q x,O|'>oAC\ D~owWa)w- yHp^5q">oJ7n09(q%)²͞5{58C9ӒIM :V{6vKD+O[L.&a̕L50/YdM]L(B݀{n3JʢQ`GyV&S)Tq1~-5_:{g3f{-*n G$=I ǫZĦ_UQyc2]YvVVY65^1{,PЈz, /\I;@K|Ho%pc2E{bKM~h!)ݸ.QǴ"tgW<'!#Eˍ Oq.*]JO|n bHBP!&ni_c:+` qtQ03&k9ho"WNj$N fܝ0x< SDn$ ki+JAMjl":[n0pJm_/m0i&Z#5wjl hi RKr7=w/MPeA֔‰TFiiM<8W]VU]|2d={ٵ$T I !wq%n ^ :۔n2W*?'/;Ĥ[4&@Z}Ljm=&"<ݔW?ҘzC$*()<0{e |a1 EnM1=f&ؘU,+9dtYLsTN V#gS ਆnOҨ95ɩObZXkbY;|Qz<vsb̀isML *A^3Gr:E ܩ$MP(p]1T= kЌe#HM/!p(սgIf.O㒙p $W4"=R;p\fkG}PuGs /%tWiWU}imp%4cLUyrǥB>v( tI'[Xj16oާC;"CoL`{DUmY1B"vi%M?Ds+VG#iO~LP28[#.nSiX7U~>ԜH)w|%@|fWKx…;䀞pH%a7kY,(Y*"& D:+mm,ċF< ,bqy`Ju ?KBtC4^F%׬FD: C}lh_9 e"@w=xZ[n%Zw/xx=V&WVv1Tu'%؆^~]ń3SI=̰PRZۨxsx25BD,a? Ƽ$3Q%BV?{TL'y^&v\" `jQPl}djP%IQ8wLB9΍vk8~q`&\sRCgjG Z9D8[*ݟ:.dSN/›vAu<{'`ٍ7A|) AB-Nf9p`z01ZYE)/^u2]pMpS=Rq?XEׄ`w27qSi Md8s(*:脍Æ >HRSP~ҬVEQɮ \Ẃ+0#GJ-Lɉވ$^cL陭9p9go1Jr'P$Xa& Bжu# \uU?ol߼mC gY,t-1zɸ~{xLI4!5I{B;!}T Yz Cϼ){*Me^^ B6 }%ᒺ%,+ƣ' ;e&TVDTW|ønEG6{Ź^P.+ǀLVbߞ 79pv4i[CGVz@&;GJ83J4,ˁq$f"mOs%R*F.PjUSAMRS.? Y#$^YNܠ_méo%& qL$7(3gŦϲT4Q-6( h|i}ۚw} '|Y$efY^,NÞvd tAfK+OϷHdBe^c'RNܣoal|r*`v(!jb_^e"@Pվ}5W@#k4Xt) 6{>Xr%H|̣0[úZI'+ DEeBΣ1l'ש wkPCJR3~6U袬"OK۶%@p-F55TmaIE9~09\v-Vbq{]46VmJT3aWm5鸅v9Il vvM="HuEmip8ˑp%X6ψ!o~#=&Qxt\AtJ2L72µLpR8|&fJ\N]Cƌ pkEg⮡Š"S$hܹFIL@*/FoUL4!zh {,G 4b~"}v#|C'-Cs"&Gb9 l`F-bl.e²%&op)(}cIy#S:Iʋ8NTX9ʔ ܝt>.P ap瑛h/~P @oqudϟԌ_I18ԝGbsVz)j"Im~ZzʎcN^$xì9 MC&]-XFPBPUU/U1-Ǥ`Ǔm||@ oڥm\o;˰V@?U7J>9{e!Fy$w'5ق t~yMeKkѳ2em~tv{徱vgKOM{ Su_nl`_B~?D[_:f}  X!i;[WVOMve1r얜NZkGu=m2SЄ.U%o˕pTJKObdAs5Z{w*Gҋ)!C >)& Xfٰ, ԘE92WTdPA&I(~2;YFtX+aLV9lľkVC=BB)w سY% ,No;"`}&qo}h$alvD7SqZ&͖lÊI0ra>[h?g"Xx&;VͧjxnT6jDpi8ZG8uL`益H&6K/wu Ǯy-6LR|Ǜ#83v!UȎQbdSKd@2~n:ayۓLWnHhDl:Tl1ء\כR9D>b1m )]Jdu6uFG/Qjb`rk7 'kUȍkBa2KչLMBt@ tno7v?Eɥ&_s:  b!59lYI>Rv{8`*mzYm] V(P4 ®fI\҄cr%*n=&&P׷EzG%?$fZA{꠮ukϧCAFCILnCs Èoy,u-aA"܂bH-=ӸmK͝C`}i+93PN*tAzXen}(>d}E=Pw~od4vdr8NR%MϡqɅB]CIU_8ZzX1dm}(q^جs[KɤFFV-K),1ZBa":ZJ U 'v(L<+ X d@ V$lBv@+ =t1m\[NZO8s)HfboaOU(xiJ2ίIѥ"?nkY>g&+|ɡYsaz+7 DN1IbML`^=E:Iv1pD$ZmC<>mNʆ(Jjfy0%2me!g%dا'=Y r b)ײ ruV~Y}CQJi-2D`~0+'~FԝLbJ=>ŤV au0zJ"Ⱥ_sY9̽T"OhZ\" s#`|Z'mX,2ye͡4S&mjt.[r=uBT{KM~D Omi%_n0Z{myzi|-pCɶ< 3 sԍ|d6p}FE$y=;,4otxɼƤ;A1򇯌`iޙ$5]\JX!(66gteӤDz=uB}W X^2h(V[g{&6\Xόd61YM* :g3mCJ)$bL3p +*hgv(e(e%U|$J Egw0J 3Sҟ)Wgf)H1x[K?>M}6(tQo=zġdϻ䒬J$K鳩B3_~Wī_P\zZJ a& D$~B'u-rW6Vy,hQ(COeD[lX@aMXϾk唵NaXbWu5J@^s c^wsfbiqxw0L3ԍrCq9-fo+( `6P׽"|E7?hTd Tm$MMU&b5zcO:RY2U@\B8SڙBD2vע$cIFY(ߕN<{i.^~ĵI+&۰H3'@ 3ij~nerz'\sz!5IuMej습>/3nh\ł9`{\e'T%cAMmRY]OM3Uf;{!: h PۑvAZ #aQU^Ţ ).?֚lal5}2^Vǐx5}yŞ{p} BK%0jW${­oNSݐjv_Ɯ덍|9Y.q2MQȺd7>;IgN8a֡2nG8{Nζ;1YQ`plxTQ}e4ɯv#Y'aNcz$xxŞʯgQr̤>zw};Ott z:`zNF[Õy` =?yvQxvm5: $ܠ葪uG|S5;sp4FaGkh-j#u-u\<)`Lás/=-#tpv]I0h1!1HnlvGM穽>ԵGӬˢ8FpbD%a<պ}>Lt,:#ڂ:es;3ŊB;`!,kT{p;mf\2{*fTwȝN EvFgt)p-|cyjCwlYW˼ bs5EG Voe835v91WpTtG0j yS ٷ(-I8oU''9j'R&$|YHT [/1[TP|J+1,yOs?Hƿ>vVJ4oBORVeQQ$[MjyTQV^ynRO[繣 }b o O&$_JckR 0fB4 c@9£j$|i@41)F ϭ!EWE!|g z)X5^_YfCE*szX}] 'ZdkcLDH6T?ؙs.u&-Xud k+WݰvGu[::&YxAb2/7Rӻҡ ?dEV /|L:[aJS1uؐOԌre;4[zB:NJ^荚]{gpMfBҝ5P {Dmk :S]0 2"E3LnQQ%~*֮dUz#fo0(? ج4H0hAh*oOvֹ' \0YWCd rrre׮۪QB.F$0tHLcڗCH뿒ըNX_d3^j#%adcm ?f9ڲV">5Ru'M^)f~cHB8RlJV~@)~Yy4egw:~ K [_OQu,E^ax !ZvHW@C :{Wq IXc~Z>/>wfIye*JFi>@԰@ 4Mv^-Td p+v29EL8v @Q@/X gIc1djR'Nk nIǚhRvӗ /JaiD/6qVջJBY*\%LMd%AY&b}Ê=&uܪqvRG3Jn\xXW{JdST}uXycXwoO\4'ʮw^~{@󞡶 x;㧃 -[ڎNw*<#մ 2hp'C7HZYHfY>g6 {/J5NSLi Db8ˆ8HyYأ+e_9<|~yR=kh>ʠ AM DrO$V&s=\ {)OdD>a/Z=F(XvOⓩQe3F1J/ߩ`N5 CG p= $OQoLv'XOq 5 ՕT3F/;o|KqzŜ?K|~HZ& ?_0vFT&MGcPggZMut[n uɍW҈ٽ0*rnmdR$ 6i!b?׶bN7em9ZC /O+yHiǗT"Mw-g#824;ZT%5wK^$쮳Lb8Ki[\UC %Ȋ{T֤N޾]KmXF[hi_veq-ZW0D΃SN}ﶹz8_S뤢 .n HK])f.`uhTҹjo5CDI6p"Y܌߸T-._{U_gH+^(Mُ `p@9. X;٫)xz@EũHq͒S{m|k.~ 2Ph#XU I&K~w567Hu>(]mS>*PF"I$#](c*?\.>fe֜^i@n3%ķt"Q4 o{=J<ٚA[#i+K~N2\`ʼnv\\23⌗B_D0}@QLͶ]3wqmΒ1NH~(m]P+ǏLA"vdD^/G?܌90^UC/SД` +kwQBl-wW$sC- /ع-ٽJFWi񑑳i ;(`ʋ&IFߧm@od,}vM TҰVf,utJ(=8W׬)sg%%h3n*!ZWƓ/ EYQA^i҈D1wKC9DJoL'x5&DuХķ#ʣzDekmBO}ԱaUwϡyx}'FuOw$PZr@Cz~)U:UDmpH㜗|W(Ġϯ 弿ؕw$#]#NXqOfgGaœTʡ-ވFMH'EL#݂D&S!yQ 2Lқ]$"? T`3#vfTx4=#D#Qjz7#_kFyj0.nռ26g]– ~;ru6fVL6hA54u+ ןDI)q~A32.T> =,Ĵ SYH=4-g2yx %p  l=bĵLJ#\aV*+{*Ą GyT\JOՠ)]J^k@ca};y ,y5|22wB(82lZMǭ]X6/QQTp=n3ʃ`8).crc[~WҝT*Xb`c旭bbWcdF߱ԙ v'-ި HVZ)-xaVd*⥥˂BfAkz\T_;wl,y&މmDT֬AixFp%CVܧ A,:7|>uϭ usmjqsș—WSmZV|p;R79.j%gX/Qq{6V DąY Y=Lyi0hIf@h" U 5Z0ln$umg+;2 :I =(Y~^gb %/$URJc,Q!8oB>0:lt+ef!2|a.O<'Śb(om4 #+k!z˒g?4 # bXz pW6(K'.TEڸ`Uv^L't{9V,5zeTtCt>Mmr*#J3 dZ\Kaƈ>)jceJ72UJݶ;#b-j7ri۷NT]Jgp/&ZA:#cRdh|lAsو p6G1ڸhvN69cAd$w;ǿ@[\u'U'_ {VMm MsAlm$3-P;w܁+%^Ȇjr(8a-\gT!At,U#3 Fk{f-^I=1Ѥ2ǚ~DLsM̜=2YGD-Pd$aVQD*ކ?LʣFno \ذ2=aM jX1z>*̗C*(j6߽7 ;J;T}w*dNi\z]0ol2 y*4>ʄlZNt^5Ob9idgG\W/;Kw݄G8YKq翓 37{^8q .BDb>iu|Ɲv ?bx= 8b%4*MA@;'Oi^&>zբ4#RP,B1~iMGji+HISB*ۜ_N"Dv Q8 x ͒}: <2 4yQD|10jڐ[dqAX>(QD/*ٗfnkJ6wk9.>|<* 36*Ibj"qNƢkg<%ᗣcNfdB3 =JJ=⹕|a^Dq !8{8;T-Fq0B\h?X}30ķt>,p'~_v=؉Yx:_F* 7JԔH^&WЊ%-v@I6 ?bSOJt5WZ,F*bo Q{h-iO(!g=xl)C;.gLf>%ьJty|GO=IMT-]ppq-mb"B46Hsؽ#VdyVWY7{1;"&;oUM1=u98r"-HhWH|3o< N2gC\#Su`fW}Q1Jjt}c'tlba1-0Wxf } ɫS $4Cw TʲuR%0(2(#s1+Brmw#CQ ؅K=I[Yz gdW4tjC7^#?,&aYj6zq:1ڊaAS)fصKU-W@ g#Od -ʃ뷕vdHz,NZ2azk"=7W5p|pM]>81Т0SDn3Aҕk:7Wa9Y% LOQ@e^ajнٲu޵G\dG#.&+3%.mPl03Ú|LûDɁ𘾸:]Dij5E6PBvVo>fWuqvY1Y **yC}In*h;ۯYjkb< ։a _-_ӒYbGP$(B!LMVuNs hRITje\ƨskрqx,kZ~71Kr]F4,7-ձȟ'Joa/I{M923|Yl~>F\Qd9UN{Mhc7ʭܭ[FfEsdgsmۤJ֝PI❡حA߇6s1vٞ|u䩩nS^s34}n%d#jUٴm7*x{ įU\ל)uڶ r> 9N>'\SͲ,SrTrEAV@HG5bIp <JWd=O;:}=pЈt}zVY7Gf9UVf|FmZ_JT(]I֫Χ'S Ih+N1*9R0NIuv9A/cWi Uȼd|oP oq5t;4dZn\ _,p(8WRupw rIJBþÃ>N[3'4{Sd~vm; o! ]E&;P^i3j\R+GR$8 NYa^iC*xm$h[bEA 7E۝ s^da!OGDga]~ w5FI//DG#4FB~1je VkhxI seN%0'm$PʳzR s>wctG"|R=<+b' 6uNt/>3PLŷD{(֍H-bf)+0N\ϛFz~ģ;Εʷ),WMJʞ=nصk4,:Z< Lx^f Nх\TK˰~C2]v`/?9,q#*9;hNޠ-MUs#?0l&>.T:9B` mVkU߽5* (C!s'p-h-Pqt2S1NAIwd1pbsG_3Wt_5!l\̻HkX7%v\*~qmhC.WIVuR6Ei']Khn'\F8zVܰq_u,#ER׮} *֩w:ZloגV}{ylݛNJHQchJ#AXHs3r~sو]ě Dil-\=d*)5©c_Zo3FF7,L05*FUmT"Dw-Bk?gʂa~iL!?h YD?L£ t*AKRH8 ?TѠV0 m>4lEȫbwՏ$f!I˔"cxk٧ ٶC{3Ӓ3T8MPA 玻KBYpZG(bY Ex %+&מS$Gs0.Y}1PPk#wjf H,yCC ڐq“= Pу8t5SczqpTȞi\,጗VK10om`KfJ a<4U>,_ 1ΆS 2I=}c>H DRoɮ.B:a'GaŨq܌~ 0YnI=ZoggX‰mRUz +9TNeIXv9@}^`d5č{Ԧ(TpwV_t*҇HotrY+[q`ٳUlѸ{=sÖM#9ȩwe#B\TE~y{@9\2^ 9JōtK[(puKNpw[mh{]{I;g?ja4hdW6]Х.% #HTI  #9B(ly,ɷ _-sz˻Wp&Y;)P7bΟ5X%^ 6n.4uF;~@,W9R`TF`6o1ڴ^02]@:O;2nP) ܮf4=xˀgr <6ZT>x',ܸ bb[j Ʒ6bbb%1zݯw^)2H;F1m>o^%S fm+p^D'喚. WT=c2!3 lSϷX+ŏ.Dtosľ"V "#(,a*e X/*Q7"RB6ܻށǜHYMJ]kCN>lf/RBLm8э{@&eW(Q $ sgUC /a~v6ȟArɸ3)|E5LHgG܎7K/Ґ EsIGG\|]cx/9+]PS5ʕeu:_umYb΁n[0;yF6[bpl!a^S*/&Ra@N{D$92l.q%m* -:[6pރpI궫sx+R 86q4]3Dʑ*KT0;$Ĥa;.~ElF1ϟ(?a^"H%xc|֛ D,M ~+QYGJ_geJf(k;FԯO vaIG}!NJa\E#D3:g@G#a[, O7JBԥ4Fw >|'ډTu-!3ߩ IԦq˼ާa_ d ^X+1c8%(fD=e 5jjvmBسjP䍊- avV\$v$\ 5T@^s2x5 \ym{űOCGL-<SB0:Q ؉vEx4*6x_y1<8OգUꑜf!oWMX \ip3z!٠I e0v_oo6-Y1|eMwׅP,6_kQZ o܇&ܶ1e'qey&g]/j3xw$gx =X!E`mZ!O ю""|0*5 aH'TߛHqLTV<Y -2g߶e53-٬>H(͆rwL(B"pDyE-~G~ Hʓ8&'.(k^eNc(r :+tGHgC}sήkcbsI:2Q֣5bOٞ v9s\InIf?aը f )^9 F uaHw'CesIDƨO\Z%!`Znzmc9(dm^Ry&6tJJ_.%xf f)PB'%q˥+ VS #(۰2.X ~AO6ܣ1+Xa4^jDF8q=ASI&V]ꭑ:AǖlGKT6U̝ץYkD>/;j wkL bGIy[Z%,p%0vx_ j:1y e1{VmIȝLjSbe3}<'#$fh\xhӦMǩAX]>v8Q|QVo(?ݘɔm( gB-),GKqg՜}@.5EX]%cƛmhb K Zķ/ F6 8<ݗ6!b<ӑa YZ 1knSy2_uHLz(M zn,6fc62 (Ixz^٤.~ۭ&Ar#VTl[B( +Ç3K 7؍yhCOTLZrWiI0I_">pnWOCc.a!µ:㰶{ChZ7`A( }  _onpӡI> VS\Q "Ta6(y;3|z7qQ/3#>>'"aOfTrOk$vUoe"{r[8H[ro_[yZV3j-V]YDew; a⻴8/0D31K7Ձ{扼{`qv<c9!/p>k\AsƑ UjaI';;yI`r y WsiCv)~1%]6YKt2'0Rj׬_Q(6O*Q#z[Ù/;ģ !wȈyp4>_zϙ] 6E6^ `2>l3鰦{itbۆEb0)1BMz} q1Egqoql@3m{GyS@Nd.Q7ZOq˼Wft,5k'J[{PH6ʬj.e-L{m5߀@>VmUrlӷ?srqnmhb\Ľ|,F9/F>n$ע9}`ݥT|Xِ;%g2=Ȑ;a' sK59e6[j1A VsriLǗLP'N>=x vz}4pH*L(Hq(yi_x`س/XQ7_/Ueh*=8TX a^H ge.)4g,ٹ5 e,J4h(G#Nu ˢՃړH(֩QW r9JOg4"-΄U Qzq\OF@d њ::J릴} bfu]mzĞvy鉙vҽWֿ/B< h%)sOԭd XPnd9[TF&8̏؆e ^JufC`He5 1_b£@ۙGu:C |\rQd$C.xbZ}PNپ_` Hf!M=*\! $"y5^9vu{yT[X0m8vgd Fg #}m„"$dP i 33Ơ=D{"PfI`A\sifId{ NZf3ndBNZ9N9XgHG'XBkgGuavϑB) qD_7PU›7*D} qIj-۬"A6vw5RXn&WfB,uː! ΑK`Xu9џ饌_n ? ]Ny-1|0\K>J*,qF - g:d!+Cw.l|֧`0wrb:۝oAw.jd3Z U!\v5ڦm>GV7]&e'hyQbּe'bC26wB'1_}recEKHR0ntiQK282.E0dg )9;e-Jr4IJzn_#~fdHpD>cP;99L Nk7 aI䄇EsR~ C'%'mck^ :9%쮄z7t$JաDJD>60r9k`S J{a!#If֪;J|'YKos-H8c3v}>xfC^QED:1ڦ3 ui20"J4,\Q}Cѿ.8ϏINl!Ƞ=+ȉό>b0cl- s♊~3Au|GM-@[0 "EAZ;i"Vv`yvRtӈxԁc/mrçxh&Q َ#Hzο^tμP8d k"Ĺ=azk]9R[ȸzLj=LBz1-J^CR)[Bc%L &{6dxvA?Xƹ+>c`~̋95Ō&9 VadϬݐ 'MфHftjw6jvB9w Ikؚ=ȵ“ebLޣ`SRJcHڣ W/ou0P%Vd2Bq 6+GnuYGz?d3,G>cn9Qrd zjZkeҖ[٘qE\%NQaSQ}T䬽0MC[V2(㸦ZQxOMB`[vo \\KȊRaXۑbNdyZ^Qg$_c]Ot1/v3К4%Ja3`ҞhRH'bL5;RTjPRZB*ձ~<^PTQ2j+IOE+}GjAc$n#KPvU_C%_{ Bpo3epWf/Л5Kn5O-26|kH>d/V<"shu)ZS77bFzwT#,PVŲxE̛'Vrc;T.|u4Ћ*%chCoG#mݲoO~S/o5l`q ֎1_hAkKn0Zֿ (o頻։t=ЈnjGVJ5ֵ| SȜց;r2Q'T3EٛCQ#š#C{a*ti=E%j9SYq>.2ng0 5K2I كpw:Ƚ6q[=7[ @ R #5V M|ߐ)irIzdl(eU1xiSLOqqb^g^ }bPFwlf93~UU蕥IKh@1*#'VxI`_~Ga"h*Wotmfɹ%{ehw㡆\2CeWRQD1T3;X@HFN$S-ObVFr P-W,QU NKa@Fn#ϰxQH>ү1b<5c׎ iӱ4t?C@q2wi6>=sn[w8i"hxaL IJd-kY.!<}bAK?hrNm/@HG7 |:*f!HxEuZ&ry NeOf.;%qp oNo@'Ot*+NӌЅvTL\2'hs[ D.,d^j~o^E34T. }B1i!tϔc7mB9lń1貐 @Yo/Lb`ŒFl֯f_3S삜P!@Lэ"V&A - NTdn(]a/+ 8g:$NsPL`v`ntyTذV>Q)4aىm~d,'ѪVgpg8:_/KϺ$C.4s?rp|+c.}8t(0rCVsjRQopыGQ뎶2⤟I,lDvu) 2G_M(o 9kC7noI^N9O LX" 4gON'P@VdW7L=iυ7\ec6 4=jS`+O1.Cf$ \(Q^ 7oGC"ZqF=9~'I_^9kUYBΞ`ch&3/ޜDm^RYcxл*f,Zs8%Q[8 ^cW*Ϲ=)-éڽ(ɘWBnJP~B}CK8fhӼ`z}x=s NMHa:f$b1{v@CCZstA\,r/5hx _ZƲԉPC)`7Wz`r0LiNMqBϭo0E1 X*IJa>r{ф! doG_GrOswܜJ5&yS{3o*0A]X!G:ـZξ!֌j8drJ=*1ZUQ]:zL޴*g FTC ZLZg zQklAש$V` i?z t4ږj*]c Լ[mN sh, _x^ys? M[`CvLnD4j %aC[ި d Ŭʠv1ng/}b Aܮ5 \w_}#hl4-Ce3uFA-,c4_cuOM0#3b!ڲLbV/mph]euBfxyu%`2Gg E|+5Z.qa>%Yȏ܎(ys$?^KS6~SScx/z3K|vőֱV\8^ _7N}V> >.H ƫ!fG<1[x}DN%孛U?g MEZ\'Ia΍ڠ5/K(ePx!QZ{"F`AмWBź$B/&@;y[=]EtCcsH):;V|~ B(5CyS͢"ǀ&Z܌նr} ;(lgjU2F8>qMNӧh F,.q>f#@ {4P(=|^y{z 6~p]"nk|G4ņT=sNF>+!d ,&J P݀NNkW(j mnzEO"*}Gӊ9JRo{iU ^lG`tn^XŴА$f얠+TjOаxcU,4:ZB˽E oںr0xMBLUu;Z)Wנ2Y" Ū8va^(5T*'!^^D&ߥKݞ6;0imlX27V|d3I\c> ֭UĢh,W?] xܟEކոB]~zRr RPly_񶌢}/^V}no5[KHLr=ȏ}pq_捔&ݪӶt*,e4 j 6JWm)vڎߐgbuyZ|IbxIA),m \ݷ忠ZzEY19p*?7quU/d[M?^z˃ r}[C9|vJTV/0u3 =7M 3n% 1>Cmvů@B4_mJYlw}:<\jejwHY-0V &qa.!1yiJv|e*qYZ,z8lm'zM qNޗNBGuT\ot餞MvaH P~`7,ږ2ⴭ NpaNOz0Th= }K:? J= V]/$~Lp8 Ӗ=l^(CG2WmHt/ w7}xYX )cWPZ;Y觴W8*w0 W:l5sCZ`J٨%<)9Xoʙo_Kz0r[!)hRB=Ninhi[eo)ӎJ)Wc0ﴭS6[.yl8O|wՍ 9%oԲg5u'_D15ztPYU>?[p(x#Fikn(e.ͼ-㟷WjXn&?X6e5ES׏ٜųaM7.× 8aW};?\Yw#]dujMG/^";EBeޝY@e 73xPiZ9Bn+^)vѣ]麺H.>,7Nhn/ͻ[U7 ϓqtb!l؝NG"t湏OwB3Kh? p#8tE tЗ̝Zr}X}V>><ݎیX.N ,9O7FlBbzsn-WV$ қ2mu[.X]_ݓ{kZ IA]8XjӓV Q_78IbNSZ?ڹhax(H$ھ(UO!v7]t1*77CTXB]'7M3-fi?wT+D4@aE<&qOHADgde#W!*,("wދWWO?Zf\:yݳB`V`_q 8ބ.t30|Sk\O%rgG*XEu+ʻ}4ڿuh}ZظVcKAO[ uL+' g*ڄh>h6(N+7eD 6+*S-zlSLn27!~92)%Z5(YHPv(T I<Зl3r٪Og y',o{m1 ͫ[ g ]O q RPq!$;Fc]4x$c!G3uA)WhG-|VuGo<#:t> iI^($ Z4$Ζ(iuU>o1@TixNPG:] 'K:Qzm%`&$DLqygY?o+QB{ty׊^6sQN#m/>zۦ4F@Csy `A_St]i᳣Fjdp¼BzlqkVrE ˼+]'N]yi4?3{phwg6x+}}Zg^+k¼ ifu:@I RKL/VDUh[^`,TR`Z^(VVx,_}朕!JfRiV Zа[@3IAR"=B[ZGqyp&֍Ya9vmSe #y@Q7+1Ł&D{8d%Qjc ܆ vª֣b!qr˸DEvVO>`%?7H& Qe 4̂bWP6HLqRTA~BaWy>{9X:Ӯ? 3f.c3^7'P O_Wh$4*VYxHkI6G%+^10rLj"w \mLøG:sYWo܇i05k38D!{GZ?K~DO&+ ꦯgL4?S)|Bƺ߸YO=pq,A|<ߢr˒lCvE23FMBE,-s *iZ s;WW"t8-U Ʊ̦2XN6ljqt& 7q)=&jaᾅVH=ż,FтOTdcggaٍ]#ӷ>g器μ ] E[ }JM)Iڼށ_~j54ex **[.?Q&zFΐ8}<`|"ryҬ;35+zr;CUS :@*c sN*`jdAɤfzFݧ!1qז+|J+r4ƿ6{MJ?㪝K%T ׍ܴn.ѐQ!ː\@IyDXaVXLfH:qvD,G9kn}',M5Ԥtjuc2-$R;M.'r ^K8S`g8]RJ.IXl7Nw%!:ĵ̡\*ˊȨ41hD$ܛ!phr'ՊgRNcJMBa"f1z'`* nREAo-i`pnBv\lߞ [+vi³K̀ '$4Uqp 7*Ծ-xFGBꬑcMPiq+[ʇ/˔,.~2T].\Q,]OF$EڢJ`Vs$Z6luƼ׺C= QeW3doպi7uUIظ}sdMۅN\ k^C 5tV $s8ݯ*c~K C'> mr>,ґrqch}+W#fm;|=aqž Whte: (=W`و gƄrWdʞ?}J2 R8SF*sCVm I7o);~4NY-U:V7%2q b cg =Q#BO8KG(0mQT(Nk=t U#hPҦ f䠕yX@4J!^g'o4*Д[Y{%<a H{w?_N~bvZ9a(m8=h ўk1ao-Vl[D2#BC0`!T"FW?}yeC<>rR>@_?|.\ƅ-+<]W#%VhZIqu&m7`ԕ%m\ETAh~7mQ6S ~%_dpHJE[i)fEL_Lō&nӕ> 30Ҟ2ҽ{0j=AY[/yjZR\8m#nqM䲂?e~<׳oަ=_?4 *]+dULVГA Y/8S(I,M{Ӕ֤_"D=K(6Wڛ ,%~U>H5=p\|7>צ5Ae(Yt'M}T (cr ԼdύU.:R AJ4@]d/  PΧ:u!%a9JMw.[S77Ίt2E|jO!13; S<8z&*=zM Qu]UyI^5_E$LX/zr}X9S}%@3l-b|cN-X7B*_e>}-=PARln i`KQ-TKm]/8CNm%iA 8XTrh@[7,J٪RTC q 6GV 0 JzeA/x~ pAl.Imּ}.&֒{'>Ų! D} ҏVyG,fB&L6 oۿ_R-!OI v0 CU$ʝh\IZ,zyDppCq^; |gշjfɀ+vாM U d:RlKAwwϖtյ; ` y `FMLńG`>' Phl s$SR<\~{&vv"FnI岏[@ЗM+= eqThjcʥ {RJj/q7sG_@衸V_"zCwTf f^п#+_a&˝0b n,&N-Bǯ%12IsIjKt|AȟH׵J% J5mw?3BT {Bb՚^K>'7RdtFSpʐ%13}_תڟE%X$# OϢ,|uE+%tx])|s #/&Uգ9Y 2uɭƇHEﳓdI'xubCհ6{'cw]ыul_pckXe cDU /ϘOoa1ƌe z;;TTմk-c_v<)kd78I2&ofO.X\)A% v(jD"~NT -8sΪ$(aGNX-YTՙVa „>P{8/O׮س8[ܙFΞ25o{Oiy*F&Bk(UWZۜ_N7EO{;(ƲZl-h(pbhQRjX[ ț]} O5pF|~]t{q=uSWاT; Z9Ŧ>Fg؛AARەU 2GB{Jv"% dߤH3n>e07v.m焜a4cy ʣۣ+ZbGDKMh{x8(^TVQK |閝rR}RJh3@Dx/uGokǏ\c8h(WV%f>RfSs$e'e8&]JEb[*!5g78A1jl1tscBŌ*~M46Ddž%tɘ E#+51D ڏ_Vrz)2Tc2 Vi`Eipt5A8ZNnrC/ J5kPk= ^Jҭ:CBp,cm38>C FE+1w.g gPHÃ, I"KvZz2 rtجZck,V<^e)I}=ay˸O#KUg+wu4[Pw o-)ыeeG`#ʶf[`mw - <% (EV"8 fEX[ęh|c<F}mup6ڼ*|AVpI=ת. D (b]*%2 d\ť5 @UH79O2,^$tS^v6j:΄ڭ['7Hpu-q;5dDk2-67mW#u{qgJ n [s%z:sK| T6} ظ(eQL:YM,)ⲩ̮g V䚛:xmf{P^<;L;>GSGxʑ9ЎѓOP:Mck? W]_\ %jqC>o B*X@8|vq^l6~?Yy_:C5wN]AF{>i{ m+H^V=@~ȢIMx*B~P? aٕ^>SVҩ> C΍gҘчSP B28K۽W*m8L0͢h7%@ !aT(v,k-rj>{L+[JwҮ)ǦMmi)]o0et&Bs)`^K9'@GbK*$hZ7fɒ_y\G9X`$Bm6N7p7j-I$pMR~k1'ON&x9p]d[z60[A l#w8G )0KMEٿ yz@XͧE2cpI޷w9@Q'w;6bGWd9EHRMgw/nc;s={yfjA/fE677 < ID~ԅҍ5cvx6,@Z\+Q y~|>{D_걥.xF/0*]B:|] j-=-up\\lݔsbB}i.~i]2NʄcRV ;(Xͩ/ix3x5Gj՞E+G%]+֢t3|)R`kgev׃FQ]˫KTO5^ѩڰ,g͂#u$!9yc?cwY``z 6(rMhJy ^۵exU!VG"UgPw8`@׃mf}n@[V?7{y$Tt+> *HIkf5t;'Rk\?w)EJH+>,,S #n&/5E|Ӎ95o1hG!%n߱׎gEAX~r׬g{1iQHMT P6G=>qZE'o`vvVGPլ#= El7^Z{~WnvVֆCe{D{r13^Nc6Ur Yc1e\~A:q*UX_ X< &WNݪR%Nj)!5Xʶw T<5E?`L qd?=^e6XAvͽpr<2$_ ^ꍯNtR:?J#kTA s2 Tepy?/CT@q݂D*4# ]~ܽ_U ]sl" s/`# @ T UnsmI Abs-rhI ͝Vgq鍴ٯA7!]h7lumB| bS';PzdU9{ϋV# fWK*@_A'xPPF@/yׄ㞻7;@]m["_S7>DR^<+y<~cɋFml.¤0D%I_1ba\UGmN3M[`gDG$=E!y∭AI?k1"dF3ȹ/FV)(Tt8d[O%\ vӟny R%ڞFkLTCa뼎!@#O\r7tc)Q5hQ켶g {ԡsԑxˤmTz-Z0N,*baи(7[!1z>*mE#_`6s\'3Z:&S@9ߏ<6!%NGw} &Ie?6jY-sϹ}m7k4e ǁ&74Y96`dl2J@%<䙰 M&t5[,Z SgއdBP MxW Ĺ!o}lUm22&g4`GO#?X0)p[h2,bKz2biCpL@{F>[k-nԷt{0逈D>ځ!Jzef=6#(RdX1yOAA.q0l`QOA`c)S&H+jdIf{4j#g͔pg)n&tKeE(. 2/juEI%JQ4PK;Z"L/cɅMW(K!=B6ѥA*vnpqHN5HNg-e$c&lJhrY&! ^j9[^rP϶gBth]CC„Z | J`{_SE`E d/5'c-CaO&ZT2 lfaK?'wMD0sw ,:[Bֳ.cn9K~@6 . *s0&oLCf~?>B@RbֳXeyhl,k co5ޓW'NlS9R:ŢI=PKA*^rK;[ca=zEQBbs s/х9{JՀԍF̰{?%m[dϢT]Oo/*aR p莞7ie[8p;C~4o*Ű_\,tDP:}2,`wyȉN? l=ہI47:L9e\m߉ =@blKl;gK*OKc7 X3] mM1 ÷-L>7b{9@X9N14Z]iI|0bĻ@'/86- =_YcЂT$H^uI?TSXҜV^zK@o w(.*>V8mâeHUy4MjQT0wha+`!L B*evXLaC, GC,.!ckP6%l/.EոyԢӉk4Ѿ_+QVi}rf%V"}u)9ku&r`^T\7A%]>͉ |3;xQn$ŒILf[뼷|;ھ ;wυ(y8R⮣v !J.?BM2.Ḥk6m1V0ƶeFʺ9cSphAJ򂝈/܏{~貘Qw~T@[)̼R|07ĵ$u;'<bpSřF zwNEFal7LaxR`0b3X6 6Iq{ajՑF<+e&T.7+e/PĜ]Z<4lN< dikpnf<\6~(oG< =e Q5uh [<HvM&c&It!JFTtGZn7&u'Re:6cϴotD}f`R4C\7}(KAw@6t;Ln=ydKT4%+ fŤk2TltGc#yp6yt  ח f4/ThƑk6R'YI?fK9dҝO\a`4$(Uk?nt =|*u^&1XBhq-]/o`֦1F< Te ( .nt@ 1לp_JzJ,&VMh L5hZHeD5eqBhY/cVN@EkC/={wd%sgXxC J o2a<+ u%?t8&t 7#;;ा4  <ȣ@I1 C.^* HkwO1d2X} O;0r(+\ֲ319ûv1O4m2i,uǜpPwm^|ucrc$ҤнOIg=VnnRbO@@ɗ}\}zR2/lRʺ:ZoH` yp<p/blq+(5["_E6<٠C-rgNOnt>drhE쇮,+ W44|cUXkGA7_֭B@iFӽɼ-|-CNp81ԡHEGkMX|; 1+r!uKayS?rv~n:6+}&]%Ht^=}r~xB54;kX'Dp!*.H86Z Pd#0d u[;;/f`!:-s/q%%Q\=t9]=k3f`nybqyyUKߗ13-Aڈzb: V\$8k 6_mDl)A;)= Rh u^0 9-2bMX2쫔˫#ZfO% 63: ܾlX mbU=36InVZdo8BɘCڳP^v3&1^ h0:Kᯝï{$֮6-1EJ۴&91BBQ6~BRlI\w]Zl,.`7:ʠT K[l:/ ec.KtfDXk鲋; 7Q:9o?5 nO=X.RzE;̓>8(X^퓇)KyÍrV6JzFz\1!SҒ{o=uCa<4kL^ #gEw.4`DPhgc'xocPq;M5:_HTMmy=֒u0?k{ @@•-|7ȕ꬝Ҝߨ0 (ۦc§$rrLz #4G)r4=}dȵw3w@_}, ?ml3Vm1S-sNbe0@ jwv4_ & :`ADP\+cS}+rJ%+a_Y}X6){;YXxeLW>'h++uр`fWƱ9gO`vv,~Cqc}uy>MnցTvã& DhK;8@ m=m59a')WbjA^א l,;+'(D'F$Lx1Ғ.$1ila@Ɓ׈-\鍫Ҿr/qrSb4[&1ff~KTȵRWV(TX gJqYtL@ydǺhus_@ـ*cG sot/\FUWЗ]U%"e*aB"5/ʷ;m5:iۻp'\<=`^˥aYXqjEM# itq,lJF&/I̥b$M#;jAӎ;ЙNfz66Gg|fpgsRc+c9cr̗# H^ҷ0j_?)yuf>fzs "6 T&U6QR&}\ v5+76U3[.譁iHDZZN L D%c0]&9c]EM[1R6*qr{m9ds4nh ¶$#?QDJ{OM xܽY_t0 B"'*LatYH1[_]Ey 2cL@vּͨY_B6ÐjV^ {59EP-P3!xe8P$!,4 Zry)?C'Q!Vj=FC/Nt;΋~zP]|2rG}6~ Z<YZ6U(@n;擻Q;/-l'ϱqg}Z<_gijxPN,_ %\`z8c䍿mUK(X_czf2=xGˆ weTH8iF)ƠV^NƎV^Dߌ 8 ¦Ù\8KRmŸSOPOPNes[{}lbWA,*{C%@l/2±!N6Z"47N!b5[Z@\>Y`[P^'"E%>8mlhsvuPm@DVwĪ]RSD{^bvwl ̏k-[}vٶ խ$ٞPh҅ۤ'tՏX&_f 7/}RNa68OE9:ࣗt) 6H^ *1?">jsq`5 %ğ{ELśe8C;pg|tin,̥C#sr:E}SY}A—lp^%liUX.cr̔/hpP/-8#3H8ւ#/']OIx xu@*f;09>ޡ0O{e Vy44eN͒ 3.pK!gjEKd@x% ={"jՐ-)W2 R\5w5}T踔 ; 3.F$A%sGI{X%kKµ' d|s)u#ݔ؋~M2R=9;=2}rR941X0Q a(vƮ͹Pi{jM$D_ρ j#`g!9aw0QgGUVOL ޡW 0*Ds]iW8.Qj7O ^YA+X S-L9> PydXi{sE{Gơ(+oqH=Nv}::\'O8*;\^*Hj aKaZyc{9*~ٟ|хzR,!J̊R-:%%JkWRr#A*mד[^{&K;hG .5uuq'.a^iK\}%l)#`eזo~}BB493fEb~%= 'єWҞaRr i|k0- =o|5W0oVtU%x(̣֜ H@Blߚʏ!}Li5sunT=@fA]ci.U`=[A7=\=8lWbC)b(`V@7p(=pwH>ɱt iþ&$q:Μg]GtAda/fЪ*peB}GF蚨*ޛ_DlQI\|މuԟx: wAgޥx%=3rb@ 䬚: E{GtmPH+>HB%fLWHYJmPf.Rlj J w|(WnXKwGbł).}JcΡ0Ҙ&8O}JK}!¹CXlP4n#(uOיVWNw2L;=+Akmݙl Y.]^TYHAA\S2bb7Dvٶo҅-3v FG2LN^/u# oŜeuL.:Mk|NDi20r(o 9^t /fMa +E< L "~9}M"^=9,b0ȡE.ذj12 ^Scݍ+h—kjkOH  ~s I){ĪgDK?}ApP4'6++ 4SxhEg;`(W2̞bei=4CDjܦ9MLd,.~;DS'`,&M:Na1p%<@=TON߾X@?m(Cx-qXGkÙcq{ͶyY#di4 ښYT(~Gϲ ܈2+C7G"]b,6C{>1 K8iA~.":|b8u'^:tEJe,AYƦ D~IicL%_t!@[}#EϠ/Mʶva9bdOw.UqyHXNVz;D(=d(9nRu5zHa2/p'sz$Ӝ*Xl"+rengpj޳dZ̈u:@muOCdGm}y@t#wO]79 Eʲ.UC+v(6ucU|FŎ:81l^tYT$7@EV$%.3I+oMp/DqRw72 T󗐐 ~XlT`\9m|ѧ <}:.BWJr^qG#Bk Z1ڴ1J-D ~݋[J{t}M7AC!.~4t-zI8;٭L\NC r=(O^IY`6x&Nzx -foV\@kMmŋ78sL+@~pNU8^Ij됼]p:sD-b9

OLHpȔ]S'ZxNB;"{ɦB"ĆX@2J)ˍ (w*5_Of.HksEsGT%Owy3Rw :^9#V r Fp뮟&0gZZ>vEAKX8MQ,잪ICK R&xuqzKBRMM$@V'y:i?kw3g˕.>ʿd{R4KGDLaZ- br;lGqݚ= Bͤ+xh8f eG- +re.`5”C0M[L^Ww@JkU57G*i%x=n=&@h-#o!G ۜaHcnY }'av嗄#Y?0d |XK@s)Zi-1Cy^_FwնH(āSjO1dp$Yݯ^l)qp wP=jM') n#X KRsջYmTӓ@渑ur #10?\QzCۗgDCsԐLΠ -*'U{]%z(_ځ`9qzZ$ZpTo y`waA" nq+zfʜ4-,#=qPx?ש)1X2_*Gt谖xXC#2kz)PG\\97 hO4V39>^?8AkKPqMR(og e[:`ǟ:IOx&iޅNHz|a@#!$˰>zz}y E75IRVc6;HԕdQ9׽Z [FjK6xGUCJ{ .O ݇*e]N**/<+-_lGHuEӓ<81Q ,H_ t.5*X?6@(?G шX并MzuLK߈qyz^$'rs֮${C3+!tMVWNyQMh f᳭Ut)W9|U]{ge-m=0az1foVuR6B[2px-JH:idetM=thp~H) #b|d H)mtbm3r/_.!Pm'C1\FF7yq; \-)|Jb T2dM:;dnGLZ[ИF/>Oi-dseԖr]c %gqKwVjn)P{%ZB1ғqJRLaZ  F,粷ٔ  ^Ԅ rmM*|XYeIq ;4}v w|(2/ScrTO]Z& nB$PI^2j9F6Ӎz4'"TR'WI&'&cAoW?a^ٻg=`bά@`_%VEz2@{"f U0q}aր֊?O$6kOusaQI-x>袆:eCQE"@",c[rbC/3b{++Bg˲B~ tP|O\?sktːt oĵiq -O؝ tϚRˆ00R.a.оEd.CŃIݨPtMX^8C *htC Le3[`8OYxj{;0V-F $=-ǐ :>u4TAH-IdUG#LƹAVCkxEC0G<@'H Av6F1܈Aoe0Ft@ _^>?-Mg'Ay;fl/pyfx_b4:־ƚW,]sFyO |ЦL{\ ,%@;< {1]bfyxg^n_ޫzS_7W7,)IUcճاkY uue(>}V{"vjm&A˼C?-Q^2[ x&ړkrSHz&l4]C^zkd5ӪQD:A\J2B!OZ )~N։׳}W}L@ JIv$~dAJp0SM,gn{iS,7'.΄ҐMrdsg%w/<@|Y6(RT3|:'_?Swq=30g^n(KZ:/SIgOJv@C FP3,+Y k os$Pih2z[;lO7AQ]exI_ў>Kf٭7Ez!+12giڥ[dUstj0R H?" 14/s2#kڅT65TY_a |4\nﱂ[\b))BN:LˀLii:@U.RaLuky@8i'yލ+*z%2lyFoHk, O4j ui}}B)3ag2Q} -_$qK lK'I\ À/m%zGeY0T@ lj%.}9?_nz& \&ɺ£[!s{ J'EeP0QʤwBi7؊Q TQzՎh騎Zbڽ] t n^mT-WE &0&UW|KӬkhvm*JANxuIAd r4X}Jm-Yn96 ̠ȝޑCG~9 f/U+})V5TWu#yA†4@>C92Ƴ+ (n!{ۣ4AS+E gU'FS= zY*&8|g8 QsV8LAsҠPK7OLpCd ߰jKa`)ՙSi\5U25E˶0%p߆yfGl&^ۢG'۹-TO]W6 n"wߚd._,j[PM%y"M|sբ#JkWLZv, yl$V%#>6zClKW7Sh4ESAΖXOɦNMoy<}9[Wbepzqؽ]`u+o{z-܆7ҞH+r6vrr0& )h!5%‘8ׄI>VIѴ赙e1ɐG7y*O:%" uG͚U3(r&8m7AjhfG/z%=\3 )*6$htyC}[cz 5gzvrH  锏 Ni*xx3;P*8ZI_H7C - O B"rLSe%^&q|2ȥaY6U`JCRE,%@{!o2S ۸*#ߖVOب4xxhtm'$P,C {{Ów 1]C?״i$Ҿ83ljjc Ct8\Om&y$n}4e$'Ɏҽ=h,$tf~>U.k應 R\j;U)w\Y߶3"#DXn}+UhU(0_PMYʨtPJ3`r[soh-du[,D&MiG)=!1wY7?٩PW^lnxp)h\Ե Fq5eeiHx=\q,˒$3ړ<<=\#^R^sQ{Ofgٝ N[^/L ư৤)s3։`\GP$9M//͞?ZowH=ަu ح [18Z@&ի6E-b*>isfZ}3{P9bt)3xV^y>fɬs ӕHG .q@S'K>4@bX1GPH !%wFZr PQQ3-,$K!!>q핌-h'"8cI *w1F'Q %\r (>s?fRu,ydZYUI?LJD\ARSPA{,G a'n݊*OȂF;i9Kqm(\ξ}3G}/PU0R|UvcfTAe:&袊O"wGJy#2ISg=ܡa~'&ڮM\[l;Уz)`CC8׀ULfbgmpB*V*W3qb" ψS ࡂV}5/{p~|RVnD 8gUo N NT!6Kk#LYr^=D[L#L3 7!>?n'ԅA 9}huu :_Z'ОmX, f FO^~$.֞!=&㠀q ʯ! wakz־0}ý~Omd.fG:c)Y!t8D |fqe*L5v债ڒn AJ}D gY{"e+1Lf9V=ڳ_\'V-8I%z?k<βN)v'y߳PYwJPӤ.uڸ@t٦I+J4i/5esjQ5dPVVFycvuK.΢l9?U^; vY()lER|X2x7UMZюR`L 1C7\^^^-d`I+>h/chaA..hF'@lXo%F\4S`ں1ߐc|0oh+F^IjrS[W]( !=Lo!z5W$ a%VWF&F̘pQS<"wkjUq4U(!i^8EM>0V ׀,~?Yb^U:wc1 *$>,s*+ѭͺd^d[SUV131kx+Z 'RYbbUH%/)Zwvi<Zmۧ}2jT_JpKŅw4 hٖ^6نϵhWe+`@ J‘VC*#)UQ Bb/0o.]qQ5,P ?NdB?)8 $wSd lsmZ)+>I5Wkz>K1'Il)n-<% %αdO%tBrOg{c{I &XN\5>f?/׼@ymc6WmG=\tY*< u֫[,%jHhTexX4:b

Ӂ (V[y$C > XWkۯBCe> hB5ut,eB$9[\M%P釬Нk-?E3aޯV3Uw/nnn5ɮic?郚IX]%jt%NI1}jɛ%i *w.T7;45S֞]TڵZCo\ 262@s >HԴ^km=7ExH m@W!{B?߁H֫)ZȽLDCv#h!5 ฎc%g~jbgǩRmĔ 5:~@k|xe(hG Lfe?_0?[1- iF/')ÏgOs9*5^!O" c+̊hDaV{|ᰖ5~>mMr[dCZV%1gfK.Eh 0[^>7vC6LTtTʇT^aK=_;#|W!IN/[,L%pPdoX84 'eJ^ڃn6%*豛E4-3kի+⹍ydbğg>32\ փJc## h[Y!]$AkBeZ7}g O5Yeu1kt4.=[Jai|Ʉ}0Qrәk錫?v[\BLO?=VT >ՖB]j<6fIY[4d8(Zf5˃f4(Gb# !SI)GE'I^aU]8)jhcƸAGϦ`b{,B.;Vd\9Co[Ԣ㬳h8(NY&2m+dkgD?JOv0 Z(/!K;N#>/і6R+Tes/(Vz@ %AKYۋ:T_Eޯ$r .'G ),y8)DMQ󗰸κܯ>8Scu - ׈8/ekYKn gfR%3^e>2{W"栝bjL  NxOQ`zjqzۥp-iފԗb 衺*k(5o?kniz|׈_@O($v8NL6vʤ4 uns.vL+B.|Zn7.qBܮSq! e1;<},o`}|j-=au>2pIM-1.&ȥ=65ʪ@p 0hpۦ{؍󚒉i6<U_%n!z1N6J\8F=GbJ:s "'>0#fj_1U~Q+%D2F=3_([0OU[cܩmqcj[rIkĺiF+wJT¼w 9 k!n$yfzD8cUh&f3=A_c)-AgѡO5KRT`ZAl5=Ab&+xēx-H3L,03kwc'ޒtNP w pżcLF8R`<-$~xߞDZhiߧWف9˸h7H9\JuuKM8uw6W8ɹZ2N W 5Y ȃѡn;u˞Qp,5$C䭔7$GQ u#/)t݉ղ8e uAjja $ܟ<IͼlMmU8 A3fԨ}8#xZr 7ؤRσ B򑧂ޢ˨Pا}HC$%Ga?I οZYPɼ=H_($d4 6z7JOIIrB !T-\+nz=LsДg@R hJU"Db 01~v"gѡtir5Ύr"Tx @iv~%h%-Jáz&,D "אBC'FOqi  XP99UWֵoꀕ%zءF6a֯չ^tEBktQ\VAPis[ Jk0Qt=k27HAhjMndnNSiNF;A-+ )ЍXQ0Ū~}+V8&p8U}5Bcƨըrh6v%Y2LPy[9$d31VGߘyCE4?>J-9X\/XHcVFs2N=zh>1ḲE]G#.ZU*|o*{yQvP褄#𽒫`A##:tq6 SBYM$W2o`I+BTih0 gß3*%\ص{x'}93$;׺yE&Zu25 FŽ;AqN8,J"=Ɇ$GK*(-JCI RT{b pbC8yҼgݴ0oBRQ֠W 7l/] eE@rh-}8dŲV؀ U%^G7P9=LNqJ'9|5ѷ{Gg*I* jb3lhn-' "^DoC_B^ -z(3^%)v)4P84EN!2ˁ`8 0x{LUk'&9'6,Z5´k22~Mcb=vh&=~3ȑxˎXSTdkۊPVyYZبpYqsF%,7d8 ĂN;])\a*K g۩WXiʾz߀lp܅}<[eWi,.λT̠c'^>6fܡ`<Obdϵz`S\4қ?Ch{yCNTqt`zB9l(4˝UdK/rl]<I 7jD8ɹuO`8 GBH\ >w>O}m[U ]*#'8?}rJD\inZ0>E)ʥ4,5dlݙ <XI,u#]MDJ:e>L_ 3뷪 [|4%-f1A현 Ĭٗ%NERn "GYKhz!bErLók*wY#JE͛7,l X)$ze??Ά(L5M"ORL[#/ΡfCc:w-6a"1C>W>9Iei&}ly^)"$zZf^q sId߰2?pi=ts/i[U>=>0rT2)yB?fIШFm:!9kY0WdJ`A/6?rm9ϹSwߝVVy-+lD!89ȗCpl{-$Ӹqat -B51 :b {$2){~3z3؉? 9OmêԣXIy[z2AFaJcr3irf B@W~r=Xc֎p+hgHdKsG#P?b]#nً.sqٔjL͝O=hn&[v7T ɂu)]P iRmA )Zp4ɺy6TTu0yzN}43=eeRܢNiJ|`ϵ=qftq枌G?3+hFeM92Crk6(˿C J( %r"1+X}Or  sYƿ{#\U/ Fw+q?\-V@k 49TcDW-F`vZ}wPXeSFdh\[w_A{TK -P*G? e~.-J$o`Y6it&N&~v+oz07r6#jHeg//Pjb46Ҡz"xbgrq(ذQo/JN9+E[WDlF"499jo rB|{(hHiWkAw \gbα˞ITҶ)nѯd Uy1:.~cRrxljv?]rɡ /1c H?^UW` ܡ8,wEkQs&6U :Ep3ڼ-vu7Cbۍ̡lIHk-OQC˙hNs\ 3*8Ֆ.[MxHDS,:Y")sFX TdeO[aċX̝rR0rEn S Zdtg 7.|$~<)cdve< j)i*ZaӴ4NܸAKXקjF棔Cv8be A.H-ё\V|̶i[i)}+=S4|D25X17V@;|JZ ۝Z9qKhwi?1єOGԁd5~d ղ1m'|sHE=1[ \wjmzdǽT>G/Y64 (LN ۧ*JtRC=aSnTMb$:qWr+;6^VQj;VÎ:X=(sgFWFgڞ-3ʚj!ip6f^9[ʠq/XȬNsMjEj-'S!Vz1Be'ƅ8-3}%OWL d$PԗDe1]Qimh|FH̢؂&`5]M؉O\܅)q-D?iS!L[zǓgSMEuJuBuɒN4+k޹6 )^P'ʯDH` "D$}}M_RQBS1Tb aN󵣦-^ o ,r{ ŞǢxϿ KF0@ZDѡ7BVO Up*T}$HKT%%fs@K7!1h8eѝ#ƌ"MlIj)pP`SNɄ ;qFd]2U컨zg@ؾL gA;iMOO7(jnH7cg޽CKJ-e*>BqP+H!EX=huԂy8Pۏ 0¢=v>^TdG:}#&~KGo21k} kcGgq4(훼fAΪ"i* &qAQB ANs :q(v֫>J9G^>g8.(Jxꒂ{ &< 1|>x~17c>򷄕fB<L;%BFs@W<9Q{`:jō2OƯ*V|Jh镛dX;Or*4c2@g Bn }˭B]ҊL#!z[2NjTJΈ~R?.\64"af'xyq, <%xCCZiBP)Hl5[?- `}/A^QY㘧*`g쩋ŀ5+9}KE6bU.//N("Q`hO =٩X ],{OG=H%$n)eo Sgʗ!܆1e3>1NͭRں(QOTIjMZz:oՙ10wP$[*J5k5KIѸt}遴ttT[ sY`oAڥUɫHώDߎ>ag  tr$Ajӳ۹QD]cQ6Np34YnGD1O8 |&'}w 7TceENOWғfgTJ7KE ~ONɐE,w2fz|H^6-ú_|gQ/abw! 5U57eyE.6]dB:G0|g 鑽GF8dݟ0z`XÝ|Ua%AwPI, wfz37j[9U)*|!b3ڂq)0fz<ܛsoc^FI4?mmaAJ*5kpNeV/?}~x#m7AUц_x-x |6F}+e{jy<AxnÙ=D&xUN1Rtp?e%h5~RAx~(ǵ}imfLL$Yt^Qm6r]4xs"E:z h.u>{<{AȁDn6Q#`oF#䙭r뷓ȒzTzia  "K*IuD$;9@~vlخۻ<|sT|L/_ 3®0s OZV4CLST<䄦19t A0G;oL&j[RjG 2Jq=oc = 8 vaʡ_s>xÐ])qZ#("no*$u}}A ӷ'!R#_1 |7ep f#gYqlh~ViuZsߢFNhZo!t hПX%J{Ǚ"TK?JnB/ylwXәxdKP_'c4k>b)|m9%&QeC`-צ(צG('߶o{q@:5!~d(Ϗxف#p- [&ɋx'GIr?/8eLF* }4 U$Q%sb(`J#} EMG=nSs!.6fs=LJ* l0< ~bVN6!ILNy͍{}܅G=.6V9蓉Xq୙7Nemo›-T)څ ۹~{Cu#,>(i fӤ z'xC l$ysҝqV7u[ M-KikV4bƠZLA. J7& :&aXiV)(<3͑ @d.+4G=C{ >G\@uX0,Zp )WϢZ jՖvמ= |=޳u^g>k3 ~N=~"7 EeZ_yәYm;YHds!z R-pqod.$zfMeP@So 0[րsF\Lѩ҆2mW웮@3m [Et;- !㩜'"mWߧ}M?P[=Z+ܚ/#F{`]c|2Qr2{(\4~f"H(/4ūdy|1uǧ/%RZ˅ nƔ8aryǞ1OM ŵKW^)gCKr0T'`,G˃<.] OxfHDLV+:Ŏ%SڿJ`ܼ;s86$0 U'Eywٜ9 \_bMhkWrQ,7g#Iu^54VDtl,X]ug!-pb/+}j]/5äuI(*?1Ypq2g4a}_ҖSnF3PhtmIBB>PV+4xf)[ /1RyMTuKP4 *1I;f`ȴ|U~w_zƤq 2?ۉ~R0nR+!T 3WĴV2QTN􅒝jѥۂ/8g8~2v D rNVKܴ r8ayd+35QT 2xX!x=iPhSu6(;M7} t M&3?Lo~X3d7\x2n*Pom ґRU1v<Ȭ E0{BUFu|54=(n%0{j J0y.⿱OKbv 5B?r"Vѱ.HW1D2|iA1 80-%\OrIŪ+YeC:C߄]6|!+RLՐ B g{cؽ>`^p29>mc \b>o"kVU[hJ;>S*(N-э !,6@z]"0iiqᑧt<Հ{c&Hr-WCAPNjo;j3sM 9|7>cB`B\[60vmBЬey޾sB,ABU4ɛ :bWјȊB9~7!-As~*ASs>CrPn˂)<%{E>{W[/$_r[4ěw#;udtD}C +32E$ GXҷU{n8ms |tZe 0Ewq"ц,C;`G%2Wg@[:eRd[F39Y֦R8蝊~{/6}+w밦bv֟UAT2 oq_{#А"ip]Rg%8!+OPMI7$ƭ+Tuh?ƠMR|1X␙'+S"Vgm[v;U[aN." C˄3Ȭ`4T/jN"uO~n@ ]L_Ju0,w!Iom,JiBM!#gNx>aw-=yR}V dh78#_hd%/*t_NWR?)?DO?ѽv{Cf|!csb[ ]ȵBᄏb#eSҙk+;RC"t`yZ"@qy ; `Zly;Powb8h"6bYUM9J-ۡh@B*d16(Q'~vJ5?D>i-bU4*y {5 ,YTLUg}+? +ZQDoh%CV{i|!ޤ:~$cLJ㱎T65Pe`WQdKĉv-XZ,(Q0aÆ>x +SH$5-ş>EAF|6~k̩Nhs? |XݶR[SN 3Z_&VloLϊ}2|)LA>&k2w)Pf?^U8 = q%ɳ#1 bPJ3 4} V-)SӔ$ݞM>'J~!2YodRzܺS rLM䑕p|_,|Zʐ0Y_ C4/284eR+)qJ~if?e=6 s̵p 5ۗᐗZJ0aOpOf4Ͻ9fnFч5aW}իps_ibv\^ a pD/8Aw{R> A(SO)Q Q mƃhLK%8 ̈u݈W:T3/FR3؝WY>C8H@'"!r2yjG~?0ޠUޡs_`CU;<#}H+N$>rnK@7 v?+$$ZH.?Ҵ25/ fk7Z(C sI/);g=+i;YVFAllؤ_X\f*< oڨh5̝GbW32_ D\H#VO g/:K=yuq`&pGiJb)2+NM*ąi%#룢!^Q vjC?&{pXH~9lё=΢y'ڐh3>w?hK6sfiv#LpTh+1E])c+\+4yvY4?f?5\~F ocNUR*7`6%.sʾ %e,r9$_|82>7C*(4 ([,'Bڃ@)Q&s?oulѦ=pbG%h_Eͣ4N` j:1ݵs+>i~@i.*߫Tk2b꼗U>6)Ϟܪ_iQIHq(ļ"l[ꞧsҫY øBap=Ip<<mkvo&fhFKno%qU ܟ30:)`I(kuh  9U?(zk,-un;*c\Y^Ż!4! Fķ&.k}.@:ZLȥSrq<Ty)S%s"=0V %O0U:$`+!JSe&>` ͱ`ήA;@tB ^"Jx9wKSv6Q7 g{Qd,z:j_Xͨ:{uG)D~/bb)krɾfݕ/FW^0 "ż<;Kd_MGDӊc$`O[6&Sܙex4Q➠Ɂ@C K BNV!#Ŋ ͧ&pn]I* sGAV=7= ~ tC~l/O1 5xؚ)OTr'90$偸xXő'5/ѩ%FcːZ(g]*`m~@Tn[U*:$k'aYsjl+R˘0+˹^ʝݪF,+̃S^P RPNղ=bV;lb{PMKq"Ja)2pΟ[Lr☂Wl!x4{|ta"R2`Zim֢+2(. e5D7"eY+sUl(0qk븤U(€BTLJ.* .nUJA68&kyZM"Yfvk1?(ac)6I.}Q-$Z7dEBxHY% <:,C-4SdB;LQlR52 "l|>nvSU[ݴ ,8ӊ ڨrd~\Omp@*T` p/}5QM*2k2KEk=pYqxxf@~EX=]4RhA)r \4}R{ͼs,}ʯPNb=\r-R>2*fWGu0`zξb}^)W}^Xo1?&Ȼka F@nuCG Y~ii!oz<7e oPFR*@N|<]Vq5:)Pwo}tt1%dAƤqw7j C\^ƍAW-wo@]yP37ZBTLU$bV8nEYQ崦:s@<|#Tu:[GaNEGd&X^$|PHC;$YT@/;Ru`*Wh* *ǭtub*9颌RPrS;vAI(-x#@奖'q'9*@Nz)VZF B& GBW!"aǡ A,W΄ B=/{B)?n PsMRCOxnq4,G"2f@a؋mRJz+ԍf7cjʂ32M[A;HqqOPA9٭Y\=/I&^'r9Eˇ/TԼej~tqʡ!v^3cy[NKH:̀:#^V- ¿_sJ%F棔a=FaB_RCx[?\")V[5Y/M$#Tu{!Z@ `&)ݓO Ƕ0|aj-=1]!EՏvEYM'E0( )`rikaG˶G]$JxJjTᡅ=~G~ Ʈ5hp=E4Q}߈eE]+}}+7׬!VG3eZ^~K.H:4%FުClO,*#lҮ^́Blh6i do*H'XXaaKÂ+<;ATF`e@w @J5 ̊YO10y!Nbq /tH]2,*7APD#jݢ (x'x^LQqmaT'Mb(v 9oTL]\H_5%Ɇ4@hQ\@.hR݃,1 !>r,QS渨Zui{w"qU5řULup1Ym{7F3| ypܡ;dbt;Om}4$eGxF :#զ#Q28ť;1_Xʴ9Zw (| rkm텩.\ 2R8kg3vlfKV446Ā '9",Ӆ<E0α)2S+4ÏVcD* r^ r/meX?f~`EAe|c4"#^P XUx??#DTXb窎vC׋p) pڃ7M]%sb{o.y{䍹>$r{:o~QNUX?"k:nCw$2ܦ7fСU^& {ITǥl{VMVl ,$=I09].,'Ɨ;𝋪[A!ub) zcIrM`F6jQWjӑP Ea(@lC=/2PgJp maDshڧqI }__FfF!oLC4T#lO DT@9C෴;z}hB@L>`)+X-K,X >|9w0BN̼Wh#^>`xjVCFF*r!)Pg5(.7xAUpvL,"s>}~&uJnoΠ7sV%,i\' Qj~ C(n_1G.x(9m$qBxUY M@:aw>sSL\<]3JxpFMlIP.=3cU72x_R # '$3^1)~_v?~=XoR "OB˞YVM3h|Z;^L{6Rq=~m/oZj}Aj j= V ք21drF+PPM|7alx *KR%vDckװeW2pslc1W:i|\u| m[AFʏ~3sh\5 GD) ;ys/-L&7W<{^(Ǡ O [d{=Quk{DHQπeu[~A. //[9} @^S*LCM(rܿ$dZ߿Gפ9G\? leHsrs ճNLͬu^o*x-6"|ֲ(Qw!ʎẆ1?WPziljy|1|bܬbn9O2 9ƍS*+,$~!ET+#PLϾK`=ݰEmvU?JwHF~Ju\Q> |kmP z4a .nň\Ͳ^e/2.! ap({XmSCm)|yx"$-)+ ?ޠd=u?v?x^_(-=/l|\*/ §?R`BpLHSYK{gTΰ'gjWP$=W3D7DoqG\c}(h0NԔuc]-z겉:-GcA-1mK~O{* R1k)N{[czs_t~+EF>c~8eQH6mZ󄥡 $c΀Rs?bV x2d֭>\ n*ma"hIQZ f  &㵤Q UQ9u,$JXto;%@Zy aHBb)VF(4j\r3k׿ aA@vke٩Mc!;d5o.9C$53g~#1V8Vx];~,J6pG;VS@褿/Fql5bM_̭&)JyaԊ@yG[YWH܂[0"vZB5TLrwn |D_1", 祬zx<7>8 rL7>CU^=ҍ$f E.鰴 0αD7Sg}_ݴzcClˏDžT:F M RzH-@7Oi$܀-G_R:*=NBTNU"Gf?E"\׈;[G\uaƅXĽO@nos6^܃_I p,[QD=*au&K"w_StwW#@%w)nB[.Gfj3vP7;b,➙;{m,o+|mgobt 8ǚ_pܵrc O< pLD̥ߜ-J9FY؟E*ñ 0v94YnGM[ ,qiК8|zqp1ѱ : 1ۄPwޭG0KuχM >bo:}߾^`M`0 Z&W*ÔQ>Z`Ql656Qw iny/1|j㛣N( C~E yI7Kq71(sK 5^vvF@4$*A!Nk\ .uZ,M_t\լy*lZֆm:9ξAj̅XEO(8Z4=dr:¯Kofuq^(ʁ]7'wIz9 @w ^eݤ-؞{BorlGyX|ѣ?Lo{J0|jm7 8A1Õ b7-g'vnj4:mʮ퇮kE(rm{5mzHYS(v2hҰ#g*n F+.=}G6Tx)+RK}c(dxF/~ ;<7H`%|H=D45_Y 0fŚA-m kJeij,-V:4/(:T+#H<\؎.$TCj앃bznUy@i:D3( ٤1/AΈ<+ą$N"=g}+{|è- FZ/.yz:TKYK{ ۝ >` lT Tw׀Ytc=azҚ'4jp-Pr@J6?hTqp:Zuȋ/AZ4̣SXW5$Lj)ZWFgtR,kdƙCldX;-Bn\F04]qot*wp \(8:58Sʶbzull\rr rC'I.y}ߊXzv 2Rb_RYVHO pyE2?bK0k*lݛͿs/I9e^ʜ0Ȁ#0o6T tTQǎ^x#D 䨥 UH*˜A\:wz,:OzU޷Ji ?#&Ux ON欦Um~9 ذ9XX^ Q#1j8ILxg is#5nD E]pK/χJW[P4l>2U[NIx?7a>F.q kE|\ 0n3'n7hBX#a8BSj{0yycM^w\SS( l&݆+miqۦJm(UY+֖ O_[B94iq0!^ ~(KWtᲉͣ-LK¶;~5s4{_!@kbȓҨ;ac9'qd@sxQ(R/YU; ӫiᑴW~ ދHZ~`pՄB #]*N}wϗ(KnovuB#u`,$`J`e/jgtl{:MC= n"ƠD#JdLPL}JeSXdo8YŒ^"m}1' I1 "fȽLr.ح NME̾镣 I>5C{aL" PB2`=jk g磂̢Îgl] yf'8 w5fNQ^a7[,zK\["+y0u4p{y)mpCx U}qxmD`#O (qYa0!UF#,n7{nr\}^G9=1x) Ʈٶ;!HGe)u70JMZ q0-q:Zt{DA PgK]=Z̅>9P:z<̙ԋZ?y* ؆DOJ+  :z^y~țALV;HY ΒeϖZ]Uwr$X5<}NF*QEh~K`߱Z+Ji:X &a /]:':?C{}wʈ316$|lMTUdQV@h!]IcM=fmlЌ7-/˟iAb}LHqpyxCC`|XP8|(jm-T 6'5[iRݷKNtu-)Omo/JwI^gWa4F@72D v:GJى9\9[5BδxJ?2gb:I0JVM6 ƟgZopW*7xNWKUZx9d4],/|}An.9@$SMBVo;c> -JJfzHtI4KڇvRak}c\^M B&U=Qqm$rמ Ԑ=^FI:+`)KGҬ`I׋mqNI+.xqp`^gS`R#Mh@@ߞ;zSV5Gݶk ,mQ-4]f)2zNP \Peo@"Eh4"ZT[eC5S^̩ /I1אjUcVSO,VrÓ33)Ni5!m; b M@|BoYu H~Fz\uXG/H8_M~.HnBA`y-k T q>% #MbȣT}vb#cƖJ +'m5~mE DpFWXr(,{`}^c(e)j\İ`W\vËj'΅^u(cڡ-K5 U"qpXloĔ'd+h{ 9YSdܷX+@6 KȴK*ƮBB yL3[-6W} KU\K s~GO?X9N~@}jxYDwJ~ޘaUSȎ1$LǟxQ4(qwt{mA\1`"bs0MJIk4EE:V[m.()Spܢ\H Rf bDO/.BX0#i dv RQavl&3 =͐Sd!e:A `%)RBV#l -F)M(4[BR`><5oJ~`)#FJ@!uj)Ї3Gwڱm a&RoO2}(%ֳFW3 6R%h" ks1doկo4՞:-q ,Pe@'g[# ~ˬ@i3  ˛6*{ayFP נg2N&HoRLX#zhp{źW 6~bA:.Pd[<Mk^64]Jtn[~GJ4?N\pQ;v9=\Imf4B#CUߟ@wrf_X\XC۴djۦmrfH"VԈ&oI y!?HB)@ð|k=J'O׳[L,ma)yXjhoL^ys?-Z~10` - jj{.uc}A!gPVAӐL￟ M P?2:khd`I<ȌP~#?ڣ[6U>af6w~&j|VY"J U{A]Dӽӿ NH)c&S>6]p k Mu-PimPP8eets~FɦoexQhaݙ|~3oUݟjZUW~TSܫvtspûva3euɋ=7o  B(k9Y΢۱W%8{ c a,.,$ʐV-g$-6d!IIHOMd*Ke~Qr 4AQ2X2ǷΊk#_n$_)Au4ZTy5-q&,죥|Ua.k٠uE5EQBv׳9IfuC=l,|UfqyoᲝnФ6qxo5G3YVe0lyh~h4==lGuM멹:Y/JGt~zt1f] t\RId;.C|( &Pj~ˆB~3#Dyxy_4iŜVgQ ɑKi2Vr ,H=îwS9yQE+D/V;р_.0i@024~!q09gFe~ԍKͰ8%KX_erow*-%d]Q&Gɕm+kh-=US%Y_T[ 9K%9u$A>SØΗT9Kޢhg !+}0(Qmt&I~`nQ>"3y<Hc@X_2j oS,`PY 8|xL4l?_mN jK%A d^YI,! B"Ó!qMmn0_I>e4DXʮ,wRNoURh-BF<5Tu?Ec%y:ح雡WNX3WU|lj6^V(&)'x4Sj^2<Ϣnq,j2}IsQ-}ŶQF4}{IB!sİ(UBcɜ)υYFU[3J ` szKFD nrγۚmV3e0YtoJzPѵt 7ja]yh$_ܕNßFYzZ̵Z'OtӕӲ>!ļV&6 V+̽%,pCc^N9N=_I`\bdͧ'6 ޭ@KD{U(xUnTp{F*# $[} [%> &iap? ^2IqhϛNMkgKќy "%#lsl,nŹEBq 2W1 ֕Grx0)ET,IXUP3݃&x*Y9t6Dۂ5(Whr1u˽v<%Ͳ;.2N}o(g"+eCF̟yZwՆ*^,qNߘiQ-NvdQs 6o^E o_<@~SXVZu]K*rOW|"|LI;'luK[O֙:wu)RCKVZަkSMߘƁ)Ps&74~I eL hC~L񯎈7g/.87DC$4 >%*d:JRn^T5r9*V'Oկb[m,]Y% [>bSc-AhR+3伮3"{IsE wOǘG"ǣi?<f@'0 c*ʭ$c7Q#D3REu d(b[W ߅Q0c k7\bGUϸ3**a;HF!S U(cဴ?w@{BMn#*ྺ FIHbUJ7ޱ >(qf0[hBf;'uė5!4`+DAQwLSΌd|wGhi5:+?\Oﭘ&FTӎ߻`.]47ι4$h6#8ldNaV–{dMOvaN֊ Їwc֫Z%=uH e{Ev~ɂRyQmh_Qp)J qH=z-&Fk˪!Nk1[vIn-~e.q7Y7-ԓɳg˶Zk_u0ѯ8gBWxPJ39#F'/ÿX YehdUkw:七_lCN7[-|s$"򴘒( _:sf$Enqn;}?rR[0 q(&T".IOn!Aq/Rcbp5(~??|&O 8)uS, ` b1zAȭB^Ƚ~? R]kυ_]0>|OPgL=qӓuݹ/uCϫMދ#ZvQMjΌ3lunyWzxƚ4#!"|C 0]`O00}|SpLm#Q(Wk={= -M"1{v 05Yg[I\m|:[-߻ ^wB){J z  [ D;֝0d.S}!k6s0䅔d{U2%z2/bb6PvGdliNqD>9oIxk~'6c!bI3ǝ˵}g`kd'%[S^Y\@RF p'KQ`g{X_nng!0:L.1)#Bkr3ؗ g?glp{K=0ޏKzj\_Yيy`>Ve0 2W7 \ =8^l~V8M]:_c_;_yoxY5B ,ų%#4ƭ,T[ VݮԣdR` 6-GDbf[(Ϲձ\ӣ^ZdY k6C-qe(ov;G)|1)F9-x_ՠJpgPz4oLMV7N}ڐ<=>>>,/6 L,XD j{jbGO I S^yas)_Ve[Jfjf7Y~TRآS_u[ [_@"VVDaa_ $4̶#!{0:or/np5-ocI>5Y c NQ!D2_e?+;S#0*M%atZr4-A\!;0^0??1xn/4U͙Aln0]\ >l0'&͏>58Q`RMxZ"lnȊїj:L6sCܺ?8~e`L|}]&E5 QpBlTP8k!RîADjU}p蟝rdWKIWWYD/n*ʊeP;[#8ՌIUN >Xڲ}i޿tԒoiKWH_{=)<ƝX'C KqS|hSQm sc)1%1YKo(ZiQwU]}&{%ཀྵX-שa$ e5mJ"0ʷE%F XR@5fanI 5+|Fү<xU4kw"7-I]-JURKj)M;D]\jŒZ G@mb]@rU(ƷitXenl`MM Y`=XRd醜ڡ%e4!YB+6-^<(G]8ݸC;bsJC4 N>Jr!r vc<p,ecF f[r~Ѩg),"((Zy<5H?EzcNG8&]\3O aXk1pǫuȥ "vP^TgȩC9ǡ~|-w ax˸K28HI 1 r HL#:{z$_)ޕ.3U6(m{O.l.0^(&"8i,y8 Gs@AURSd݇*kCRka Yh yYh?'J)? ž|J*j2kka{)\(.Q-h2p~aI`=E }G\5dѾGMxHگQUUS`$hƅ1_uȪ'+{x(%0녟@:/X8/<4UM@)N@XO-G ^x edQ^ 4C.cGi7m `yFKqDPqVZXׂD-#vGX1́-ef5* P`Jɣ<ǓhJVUHj~=qH#%lߤӮ3E) %l<rIZAkbȝ2+l.', Dc5rZڈyS|άptޜu'.*ލcBDQUWɨՃHAH!ԭUp'( uUӱm_8ӹfQXTB}]k'#{DCwF r7f A QRK&$?fv[QÓЋ͑n+H &AGqscsJ{t̆GJ7@xc-!JZ@s'4-4ȓx 7i?=PIY{kT> @jNBMޤsdgCXՇ fPegq/չmJ$, wi%2Uɼ#M|1lP=`թ`ϵ-znl&NyO8mVM c7-aT8ǒjNK{^;<]R< "ՆRtO/3̞h1nc' Xg9z:ɥՒ^'#*9;Uu["btJ^Lny^7+ܮA wQ08PCg`~HXٟo`2ފPr[`^'n C4 &&h=|H`>#mr\so"2 Zg cUmG* +41i[x88]Sn lr8%Px /iD@ɤ .i\#ĔH1L;]%-oT8iNi_;HnMc(aĈୱ#><jLv)$>gF$b25FGUq7y$XoGAUê0 $kb=7KZ#+}1Em!ٓ:<#c& 8P!t!-Ѓuͅ'Z '99hJ^TIũJs~79PWQK;pF~OpX._ւM3ot}GPҒ܊@CFkS t<קr/ )Wa-')ʋQc hG\l(hŰ:Y$be>jFHjEgo;j+wso5.ѸMP&o <8I/o0,:>-qf5X3e<֪@ %7<^=zOdSx?+䥏Y:-NN l; gzrpo*!#z-ATm&h8tqciljrʃ/_p%-6?}ѰͶG62#(8 Z5BI{6wəʹ' (BqnsbDE\yFyĞ_e]6p0NMVCbhjVDh7s.BB̧2, Έ5]wFt^R~!Eih'/γ+s( 5NcQ*HTu!&D~5ȕ]I耂O:ВR%BXdULyUsc%O үp#cdC|cmKUMf@ %JJvgcsV4qYr-ɀͬq~MGnvMB{qk'n}dy҇&êeXS0_%?b[rZ~d{fqIA싁=Hw@=M6 8}B+wwr(sE^#Jb*9Gb뺂{xk͞5꼼#s3YbB@&\<ͺ)ѸGC^l|27<4gN_j6&A_L]vJ7{B̏dZRnI7C GIz741Vw%>N 뀗0r~cǸ̆IןOe|_Wu !oSߪ:ᰌz̑ 3epq7l9bgI[5+))Cv,L#=cbT> V}I48g+R`vCm j/.?BlOD̓#sn[jjCZoVϠ#.g6 Na}R qjbDD8&>xM2KT78r mذ(qYzjykBNs2 Z&tzfq41* K` RN1ʔVeSݘ|8{c:7 =wg&B$ 1޺G];߫,1Q H) G.e_H' ~rzAll ѼJJRPk9;Bxr2elKWyץH'p+~pZj8E~x rʩ7F0UV8^BT/'Ґ¼A#URĝZe6 }s |u0֢NHV*wgo>K /yJdxa^'߼{n0GjEW ʸg+bR*u 4.'}_tra A]DXTS X3gwa IiiG47K*'tn }+tkW>ٚBl^N$ƏJMɡhlLPC(klT0Qܧib_2Оf*)r6~BI8s(4B} T,Z\b%Rj-j;Knӊ9p[oˎE#OijP`be}!~QugQZ0㈭I֔E3`"`4+zQ9 Bqak7k yb%t3U,~"f|6`,OD׵xװg ܋q:pqf*K3\cKusK <ͪ+$f6~tnȹ- ZV؏ cBzZ᝻> j7@viU4;l슥pe W\H8GąAͶUL\TH\`{dyyAd17)wtWg3|0A%}BVWԜ9P/ܺBJ &JqQs?1ՓcT*fGiAzঠb68jF7f>r:c&%Sh#532,1xE9O͉_ HFlZw`/p9vhH_mXL̛RwttP"QNyM@!.L+aTO ]vѨ#?5˩ Np*j)s$ .="S)&pWsw6:hKNĐORD!̉$J@(q{K%[0]+R%mAy XF<ebo մ<^.`xtDM=Jc2䰔ڇҫŨj qތKJ蟇ው>sCmk 'd?S\ uЎ JD$}j=h 5 { mlw-G<|u/n9]?{NШiN|'= Bs H _y(]y#o]u<-ty]ܐ6NG}0 e <{L%* s^.u!P-C;<hTDFpFf@BB\r1gQ9hց;WUǷ!I_v2WaPH b<3" ݐ<]SxX nOɀqV(]a.JeOqAbԡo y˺UcPQI_ fsKD89cЏ!`H?Y B=_qC >t;Rj-gƚ p* Zg|fAC;TU$ur >X"hk` *')φLz.`SN-g1־gP+flR'lH;Jk'0,$Y^CRب:>1|NajS gϜXTU&Thvir)e 0D u-P& XFL&lL{l.i7OWg#u.uk/LMSYZ}BG]8dH 2N~]:x(u63@j 07/8Q.p5ݏ[B\2.)¦?}sW#:TD\S%x*H]$},YH[Yh\[pZS|ilT"l2IK)EC]gy93' O&lqi"/[7{fsԩ@Ct [Z%۫)ϒ64]G o1ZMd~N֪G^o67"3 Ke ns$9.SiV3IڿJm"Sud,U LTg7"Atx :ˢ}DT4v(S&4nm'wd^#*k=1 NZM.w<ƶ?hpErZ ˖hfkyQokf]3n<|jtRXoGБ19'EwacT  /`X&s" .S 6ʆ-ŗb֐uƌ Sf|Ffd=qpߔbݰ;>,~GpQ%LYZg~OBmcȟblFhRHeg!B>X&E;| ^ *z{)!p6Ip5|g_nh/oYDuم(w~owY-^IBC"]2wgiHZa ,(J"PLNIq%*sՄFNݳᄃ{Uptr|'qߛD-gdK5ZDž7hy"KMΘPXOr4+mӪ z1>F>۔_0ֵ٤=Xl+W12Ƽ?}1v_W Hu9Gu/!8oxbDYnecHF57|1RYz*~wQ9,-(7b?s7-އ/h 9֙&@s)N4YB 6GO;BW,>r`zͮU8<~Z@uRè[[Ը )>AwNfKD1`iR;) <,_-Zw럆I܉ <[3Q nz+Tw@HTf3( #,h*όj&l4G%5ëgW6/PTIaz?,-U:o&h[]ΗݜIZ8UxTiù:4˱iPVSV fq-ri7zi-@ܼ\b>]-p_DJ3}v.u-at9 'ǔSeOu6~9EZC{M>N2'ty{ g/R R1Q MIY?kSdv=m2@%^G#cDJu׎~ON'MӼh|/}.Ꙁ&1.FZNu7@x+`і6Ψm0ȤؐDϫ| [Ӆpt&%Sm.FѪ+CYKvwm7ٮoWs3?hb\O;ρxQr#L)GdPQ%*UC$!RyGv!T ~@ ba *67R=B8JJWh~:C8(E^:VhLp;f΂[sCZ4T]j]Gᙷ7+2QR%׳W Kru'v[|EAf>_ۇ/*Bj'fo~:J|S;I)q*(Û$2Fu;mymYV6 q kNTAV7gzPameǝ DA;jsduD5؛W?,a5ԔE%VqK1)"Ta*J;{.RLyz?TO@_B&P˰fX ڭie0ƾuQUA{VE6;;+Vg7w|=>d`Vp.c9lsY Q^p'/Qa!ɭe]yǢcXBJng~r}ƙ~a?:ջd=̭/R1\֡U$7 ƴ%ؖ !0]?.2ndhb#%0Ƣ59wQj lhsnGj2c/%meK8Ldk@Yrbf!eB,7`qD ;#6O4FeN +Y\?Y;Q TlW$+F*>,^ـZC>b{{{zmaF3|1;^MOX`?a /)t)$aPGt !aq,Tx$Kd3!!=p8QF>)Yd "2̼%I;hNVۼ҈d6R?$'PTq4ٚJOȯ`<ګ'Y%o%dϣjQOW$A%4]'\]hbySbOjhMJ؞ U/%rAc]Y6 'I"֏OO;"k)A62 H3vNjfm~|, $'xإDN]_ۉa|<\P`pL8( aJaTqFU4'JNPX^ 9 I+6$fķ2Iվmd2 O:"ChqfoL M+>!/bO-u'K"lR-@Lv2ՖR Q5Ǔr##@ \\P[{߅%9#?} =C#jl1z< LBM;l+>G<Kۭcсkn0..|&̭7^+8Xuo3҄ŃE]bHбLW9)@\qbYKYN\g?_ʟ%ܜL|(6G;Ʌʒge 'h^45hiD鮹#¤렾%R#m2).{.,F[3Ko[䗉9719ɻ,{X h?iJɺdo^V|tL{`0f:PUqg k?qRҶl8rv8t%W%rVj. [-C`+?ӱjEt>~<}ژ~z\{ᾭ݄Cm#rqQ?aP.#9 I-KDo{H8FZCyR9#`!CuP SrCSzW`;!(7[KislV;v{< om5þ!Q48șV}R%R |@+zVGo]~&y}B,^:ڢ>u&aZ 5U@]+3}7RmHl[').Jb' P 7&K¯vLǖ])p$#)$L&-Yndx!HBc!sH,UL\PI(&s-A2^$ѱw(z5NEc:5ƃq1@4UcNmh;ع`} ưgЬKv˝NDRI.EҸY+L5e/D4WVbB-5o(- )bKW8 {ULPSf =q}j[Gg¢G4 &X CRX_KXqq“*1*c[BJ!hPWH ˷YD}|V~S<= *n5/Ynr%;oી鬬;V&wm~7`|)0nC6 ߆U&6_;+!83lLaW fd6dyJD"(3- 8N_ysARnP-8 J@؊10?aJN//J*("_mQ;εatgDq#^*tb!8f&,!1.fcp z3y!xhokqJҸ=j hC,\EO<0;$On6[N1{|{f=yl0J!GG.qg4+ɆjV9RhB{'u c[{|'m!#c;_~[I?O[agتJ/Q`\jdZFZ?|m]j6AswRc&.A"*F[S9QOCL P"\ Fl( slx9jQnWú:Ixm;ӹ *9&ө᧦T#@eȦ`=Wx0 CM4=&d/ЈI4ZY/enx6ҞdA3U"RRswQQ7\k 4b\p!Nd Dra/G5)ɛT V%dԗ'<]4>""y8T!d'h8e,|N,3fz@5\aO9!k.Ƴb !KhlE@6Ȧ/[$hJa{3(o:Jv]&n#o)1JQ5B ;;N `:i<"bjBS{|u ^$Bde7`phxv1.KR*FAhCXCY;!)I+ud 54}%lxa7+8Qoonx0ҷlFKi;T|*cnJN!⿷~<La@ZZ&==gUsX۸d93aWUGEmfaasqb Tgy^g*La=m__\8mQdV9??8ߟbW^dF(dkF/$/dBL)R+xfr>;1XߟkݪזabqdcSf; ]hj~Wg[֡oT Ցˉh!xe=du 2wNfN6%90LB;ʌ}h2 1glY7{iPA&iZqޝWA Ci$;Bm\0"ZL fȤI77_3еC&@DZg 223d!aR.Fr 8ZsU]z\_1/'a&K 2_|RZnQv[[VD GHR;_FGު{t(hq2\ t,2]ɪE]DbGe)Y3(͂|+P3& vJ2I]*cZ`:km7CW YSFJ HTł[O&'|xM8|p7|҂R~i#*ZjkA@GJNT Z5BvlK!;wk&6 ɗ  CD̓f(#8u/5 b̀! FFǑ>U el]-fp%/R?& \\]#D:KUDIiOaFǏ|v5WȜx8Qn~09?` }'Mu>?a;0 D#2~mTyr{>O=n kKS{>K4}jѼ" +qP2NIn;N}0AkOjC5׸H0>8WcH4eA/ÁA CRd3ȝ }L_8ouL3HQ$Vw1@̓AsRX"nȁjM-%1nx j$QCk;̞KsQ(kտ..s+ &" K-/0:A%[KR$X^gWɾRnG'#5;fD &1L 0?ʩ\Ieu53 qmR@2v>CfG4C-UJ;?SmGq+oCr&^ajcc~F]bWOB\pLiͬ}*-j*oc/B| &㙆 B [5f Exu`MoޓeG8o4ĩdA 1W{RءkЀPh=$Y^] 9x20+אV46ԭrX vYJl5r]f;}BCs;)ʫ :n [N%jT;N'w3\)ҒM]a`='szV, Sl9%mW `{GUmxCSʆgEeϑ.I3TP"2q"[Md?4\MH}+Xnk(ٺC}S|Ca*(ΐplŠGMŘo ѳDwHW7k ekV.e735o{NZ>#% )k6R2g4fEzJR:ݝ^D+ / VLճ`NlP"U ߘ,AH,,$[ ZGTxKT>P4/7oq3py̳Cݍ}p۱w h/c%IےREsȼ†Swr=F$&2ڂw\Z!&'"Zz?bxx(oC=F#C)ei7nifW02<P#]58HP 왂}< 3꧲N·sEԙF* i~j3#m}HUj6ǖU;-vc";l7p+Y{:adELyc-0tw(6*:Nb8[1}gݱ "`Szw\=0(!nr$Ar20Ja!mQ8j(>lG-D/Mo?oc]2)<8X:N0Ynh?hw)[Rh"{#apݿh^ +eF,橣sJc 3uճW[ %DCs⨍B]S- HnP8Xg]+ iU%2m#h LH1!Z5ȢMP783TbiOX9SU(Y 1g)yx<5 ɛC X1Ad̹N 瓜tb3gzʯ%/>Kg qa^U(Oe˜2Bq7cϩ׵DLYV)MK+ ,е2D|Z?(( VFm0`fK>Q76 P؆ T76M0ڼpYA{g~xJi!+%-ݜNo}鴭9 3h)1_BPF!uI<'AS{)BcNZχb.ExXOy3DMt#݂Ȇ5gaZD'{yMo=&YTGSalBe ?~,'"&WLe>ybx8fNIc9g4鑛kUɊ9 1~OGnkcy+ ɪ{GO=殱$:;8A+8T\|rpL3wPqdUri2ִWPjwm74NLvO.IOOվ KߎmK)fF}dRo2{SQ3~<@U@(m^agJRw'ѼZ=gjEEZ-T$#RPK&A64)1=HJm!+Y JK `#v1 FuSdk 0fO6E\e| Ёq'qw5_5jxt$$Z}SڠOfIZ7\Tc۞~F` ]RuF<Ћ^] 'XYGԦ2S j_; tk5ΚyErv1syr=[TH vԧ0.q =+$k:=X/#<(TyZe Pڳ^z9p,z1Oq *&Bg]S!Ύʨ%YF,bf~/l>+;@t\:$0ު . 7 5ZyKqJ1P\ &j-eALÜS] W٘vLJ7nʹr~7wŵn[?-J+K{EΥ618x#Utz8uVn&o8Z&!]7l0i"ҽ7tR6$6܋K1BtȠ,KuHL wvcksb 0Ly%w߰)`A< y. A5.e~`'VgaS1D-S U5"dK|l +eZ=&AWlG|ҽ#д ȑF1[u"w ;Yw7=Ti6.!eMjԍu2fF=cԜt2p3tCR_?X-{@d0l=Jb w͐}g_5,m}'~'(ݔxŁ.LX}eE;=ßCfk(ψ 8~ ҠH> B}ݽY%2]0i(gL #_>a>*۪OZb_`LjV67@XNO\ՕW#.ZyRl^TU 1SDWV\3մw6faw+o5+=$w9q>]D4bHg'F Ffj0\g=dh<;4M]z4ިd[jVM9w&h2a3 \6mC XŠnNe8EC3t-h&ѽj7A+e ~^{ZO)8ȫ9#Ʃg>8Ć_sDH5bM-\z\M~÷8' spF;671#|Q;Uk2ƾߟ*$޳yѲ ofnT(U#v󩫭cm3jeqL6V9^_>{(gux]Cmg~ (×J+#2PۉlJZ"OA1KK[ox2ο.*E|o?Ow (:HYS JPkC,HkxgԈxXl(Ւ&H\8cb*oIv\=xS \9r ߹1 Tm}tgb>d;8͂,G(% 4N:,Wx>fmob>)k u4@V})zi.zH_ӷЗ+ZjkҘrM-SBwm_~wTdVy@WY*5\1IsT3DBaC@Ҫw@-Zo}{z>?Nㆧ( Ǒu8>YٵcSmYG!pAz)X0HRJuʼyvc߶cTl_/Uz0N ٳ$\C͊0\*ƈ=p1emŬ)Sݜ!8[VvA_0Ѧ[1Sb%U˨\l)۱R~fQQ(4?y+KvG'Ejmʛjn|,:'MQ0YV>@0&FW̰TLlKoJݎCTOpމJd\ gah&>q笃1X@-0j]:aI<F)nz/]{ U5ʐiX|uLD %r%i?R \l zC#w`7eWPiLeʑ6>xhU%Upc];5t6* qUE8g?{˚R_OkLuuH"+ 8k\q䙩v6g8Њ{arv]t^76%Lfe[Ňd2n!7npPEeyGn%R2fh73}s;;RK\iP v,ePҵ~.,/]Xڗ-Fsщ'ɠ/ٸf<}CF)l"yRC1<~o'qnh>&Wo!Xb(1zca] slO*}(*֠4G ?δ>4l݁ =3$Ȥ\iͨjC Q[ ${ޙlq˜ _6X!"aɟl{=5|j L2"t~]Pƴ\z>>Y̝("pXzQr0^QgC@SX<}LOmӆJi~ĝJ3mls EmX.Y* c v2#yO]r"y0o~)#[ S%WO]/n\6fN:֕[`q.q3\P6q4BP[C@ !NiIIzޛ(4sGZTUj"9mI` ɸӻn)jhio qѠTKFQkSQ?/2Fْf5[~X>9ʣ< *~%>\(o+`dV'ʇWW8@N$HjqzA\2/|>rw > 84ۂʢ~?(?K ;*Bt|N81W)9ҧvVzP/DLFIZKXC[YH#`.|=ܬlT#ܧc@qt|1Sp益ȏ}h.vyqiatဩ|Q|Z<"nWBJWyY*vV)c\G opM~K:5L1IV"&w(*[ZQs( 9;zE: Y(S2bZcEɽKn0C@<1*Ѭ0/ ǀ*z˱cmv1߿!|׋\tF!a!Lfcwv}@}[,XZJ|6Y3\Bָ᫊Bw>o>VM!$BƇ5'wt4 ٭[|7JedM~. ZG(*DN~mΗLBKM wj#.S(rv RM߼('Hew%{sdM K}m*? N%@_ԯUf\BzATY,@k2!_FFM K<)zÑLJ&T|3{{7'm'=V%x41j{}T4m5<$S lpP֓ǎ?;Q\\ߘP-4QU>=."vꪲp˹ _];稸XkG:3^\6:72bDf:)׼!|29Cw '9C };r +ȱb\v6! z AdZk&ú4n-.uN״Kh'_gm@v"X=)vfulzoò2nj"ԼR@t%{ ^W2g{9O@-2e6 ֩'so!_|YZ$Jh nzNc^?Ǎ[7ă8 3W:1cQAnke[@kok kkTPLѴ%5ҋ=aMMӭ2!g2TOۊnb^`hD/ ^uLSX"`WH m c"]at6#՘>R4x QGswlem(O9&CyfT,H.vɆ3B\v\[2xP L%[c?vuPs v}]Ŗjc8qV\q57mS3y9aZj ?^mxajSy\ԛPBѝd]CYsw=B!##~eK)2^@5+ =0>2j8N*`SZh`AQ{ȳbȲʂ ]SWp:}*6nnKw=YF#]U= z2)~\LcQ\R*I_203 #٨h T6;wU1RaiC+ŝATbr2qT!wʦr)0FBI^zIӥUZT|nyNm5N5'KKP^t%z\ϩCkv/投Xv+m@ILa|ߧ܉ݓ0E&f,h7! -z1Z@Mls7חlZ/ߡOZC<#{ }ǬV*<~~#SUU QΚ{˝1µQ`^F3׳' !+ P|I2_ j~n6X2}#b,#I!A .Xԩ&h̒A|A{8>z*B]Sm+0꫟S`4K! եBQڽh 0*tcLفf3A{/O+q(hǏNmIy˩7憋Teȭ1#wA"Uu!.PkUAkg.h\B&z:V@i՟8Ci5r:]ӄJ4y{xB뻨1mO HS@VhT X {DgP)L1V\]1D,?f6S$4r[z)]aU4, rʬʳ~;MpOiؐdZY$`1xf/qmMwVCLW^jֽx ,}A+?$˵EI 82a4QxJn[%56ѳy&6G =a`Wլj*tgM  GO Nhdy O.ʅ$SfՖ+zZm <LţewmE=C8ȋ4nmzZ^ai2ʰ] ;-C 3K`QMm窿1❤fϾn÷%|8ǧd~ٰO!02 QPM#nE%K 34P}}#%&@Y Q4h >sW=B ηròiJPB QAxc٬nd MZ ڝc:(;v5ttyyT{&;WX,L]$ JԕB~ %0-7#z% }' lgq8*;V=nsvB2J[v:qR y}ebY$<"SeV2 EM"=u?,EI1"#](ʡovck 6/p4캝O x?(`P|3&}S`ݫ]tQ/'kI]S%MfVuxco)cSz$`ZR3#_hhO6 A1vSĐϵ^R9BKT+ ;7fA >;t1 v8Ֆ}]#֐M* ބd R>_Pd7`&jhx~䏤7s۲=_Y$ۂ MױJ5#- զ<ҭQٓ;>{G#{YfZ@'HfOB;Q!MfW?iLGIe*FͷՐNI#B 3VmcϽ9~9.pO=&7ϦPYi@YٻM?ӌXa\B)6*hv2hbA3J*+!RuaVaQ 8Cu{)qGn8Բy56Dt/+Y\X5c8yu?"Ck%WAۘ.dc?/A5֢)ׁxY3}kW\BM;``{JZ=C}55yC%od@k&k)jNɵ>q?`'$/UHKA^ ^l@hBt g,\ W0p hdtO@e6V֏ ȜV^@EDgņ3{pRO@l>(WmLb&`ōEqr<,O͆?x7 k8K35?ǿzVQa=Sb ǭy̾i/Uh~nb?I(40['4 ab?<69u;Bv9|FۢƒƪkWݟ*Jp- [ҋ`E͚#q 4i9)ͨw^}Z4r*BszV(1o$"P5I삃!2 r M͵QeXQbmF2G$g]o$ǜHuH.ol{Ko`7K>3fԯL< ҹJ!c?azV][8I;t< c=9w4[–[v? z%aRቔ_~ҡ3F9ҌÝh 8-5f\*"\uxU l 05~˸|#5Q^w\ZHP=d0M,5Ûv'Et F˹x;͕6կYq3}av+&Q<=MYH#3"_ wZM4jw ,zk]]Z AC(x@KTTzt~F:z.o/8=th0.*x* so(`z4RDd%o(v7f-zwk-%ŮJۖ[QvyI€8'de\ sU]J0L7F:Z'MB|G.? g7*%mLFNorPAL;tC/k˚2QQf7h)|7CMUhUAtK|,R~igBF;pNY \=V<0jz-5` ^Ccba wJhpu-Qa7,tb#`!8^(5=n3p*)it)3\HuVՋ \!bSTf?KqfȅJZZqa\F~Am\'*SV,Iz`X,:V[2֮QJxUT8>q*&s眛%r_L`4K+] yйg#B.l UIGQaS6r2jF(ΘqE!ضr59%!B73xW~O aX"kCω 1.:Bh?a%ك\9.Zƾq \?l7TFo4Džgt$B=z.o~M# Vo0I  @@?oKӊ Q~IMZqG&0aqBp۞Y5 nBulPO%8r#Sfp2v-OxX1;}>:@NWA [[Ku,unqItobJkoe"Ɉ?!+3$/}?a F2JjYةp̯A]J zu8^k1!lbFf -:cS U~#IYPl!,ݫ*е7Rmm̈́ǸKJXFsRaSG.[ h*ힾ>xq+-tLOOzJוkRb OMr[,s]\ɽo>1tUPꥪDN#~^pgl?p@|Q޴%bW1* 5ˠ]َX (aYpYźOK'YQ>P<[]H7gp/IP3[qVO= {X4 ;DTN5z;*8 [`.#bdƵ( S"il7[,$aN(YT4"slogN'|S?:Tz O3ѹTZm=b8$Ȅޚuc-24MUw|+&KewMQ$.b5>q&o╓$GqffܓStw$4H!u^,!Ƞ96z@yGPaAUkh>R: *lkVHf4bRPqT^;[eÁgťF\ܠ=B9rDk4Mnn>dB-lǢ 5]ulVs!zmV6iKX@Ғtt"7+W!wj.BP{!# k^Ώ0>*e4dI}q×I4Nb۴cE3{?v8Dun?9.[ ]婯̧@džĵ>NI,&ÕySal$hAެ ` MZa'qX`ҵf~ǥǨI< oG8Y'iN2;hBNBN脙''L:{NHVMхc reIǘecHȱ(QjmaRϫUNy]kuMlV Ls/GS32%dh$]&:{68JJ <84:24;BQBFHvhn{Õwmĵ8%iB &37 36Rcmi35ku$8Ȅ|ωUUs}ilMτfS6JZta"fod6%p6E ?}*'}MfR2,v&~,t:Eʠ3 8쿫; n3@{l5̬"?ۑ/؄|P<'3GZ X=&lQJLٙwף$x?7$?[ĩ1|32zo=]a.XOΕy7O?}l gaxnWadft1 b d(M9o\ ^[YdD[㖂P֊y %Uz)7F^02TcbvV:BÕ4Z0!P&BYq`NAT~ qg Y{{(kGǰZ@Qi*˻mbG:W"xI3$Tvyy7L@mVO躲G]Vpbڡ۾*z _$Fpn.BK8 e6 ؠwl QkEnZ1k0jr56"f]9YWYrc`V:\N.Ohڵ#zd=!I5uX>lM=B\+MÖC/+Ne*)<^h(P?Cv)) ŲfG]pd:F6W_/1FSr׫Q"ij˝ZY ;ɏu&dm #9Hj&"Xa}d}=Z=dhQqث\5;E8YZ9Y@=Duz%rxd;b$̆|XƈOqpdmdtY՚r 罳Ϥ3'͙ps2Ke\ct\ωt3PYǍ:5 goY.a>bn_mti eՅ"6xDu O"o\"D܊2TJJr7+,R,q$\1H p&Q#_|BUjYк+~< ?^:?NS+HSs%x" Ģrp[cJ|Am4O{^lU2rK|}.OHjFϷꭌs:jyܯxfrˀLPRu@CJ8Z bo\]pm =y'\"mOYԣ0饚ox%QT{:)okĿڣZ'U:P8̨l0y&<X͈PSOG Q ?:cVhy$Eڭ;)`֕-̅bް-H )fN^i]Kʑ,|3[%fAmSg<>Jy1Ujr?W9RR/*jH %# ֱ~q !lTRv\XL*W|4SF'ko/̙^D1[]f+~cD6JR55iOݴ{ϣrc`W *a/:KOܵ3W rJ0ڙ" NAށ1]Գ |DBzbviF}>U|`~(V ?-@H_@p֦šb %7?c\|4]Q܀<@ƄwXR {NZ5kĽd:O&2`*΢5udzюWů qxVONc&yf (7";1U=!%۾ LBO(3bR`*JOO8C{H6F@jGgX[OkY7l<bUCCA-aE% 3lɇ \B-ؖza(fܣ}.4;qqaTP걽އs(œuuH'"C.NMY1ZqmiN)oDd(:PX4=6cS}D ' H^|zDM{sp)]ӥX&$Ƕ.C"[/??s'z,̬l/wZw>p߫^-E 逳tCu-3t\FR_!- |x{u9xK+)- #,Ǐ4IK1 ECS%l3[y}2x K0e25Ѹ }BgvEW6 dTDv(o ฆIi2-K—ً5#8cFY7Q ۝=.V$L&i)t}$. lE$D燖A={_Pj QB@Ku^i}#W>wH`UPjh1iw+H%ih pRbwGbl_#ƉO='BSX8OM}dΗTGgGFKn$di~SBWisC_E9bTê-DV[ۡi^']ܷۢUD2[+WAЁqvcRP]9dG-(|xϝq ŻS<߲4n5޻љ'[#$ [K%wS{JvlA UQfD0Mk uy!34E n;V5U먓>;%Ѣ X0 Dmݺǔ@ȜHtHc{^0s›S00q%To֝S6^foy#C!~fXZf,{ً+gi>Z>3WBmb҂ Wě ,ijCm {=JmGѥ>>*_|%Y I _~u޶ERD~zSl e@ JKHy_|QǮe߷:05Q30vrp%ژ-sdl#CZe[|̐Uh0 U]BdOc6Pwj "[5xYU7A\f{Ui[^`{(^/.82#lAi;n=TjPS * мsVW)<W{apLJWgpceA4T- hw(sFGԚ)}l]+ŷKW;]a+#t7'TE%F\M(uy/<# uj#WR6\ShUm upK2x[F} U Qqs<%ubɅ'ffH\Y,0e B8yhO|1T|ʍ7=I ;{{S̼ŪiYG ĭfQyrx^Q`lciC3@ޤB.lѤͭF2~V?E ?+7" UytX+X H@$N=l7' ٺ*3;,FVZ9M\/z*~h9gr/p>5! 0ꎓ=ݺ Ƈq}ۡe l;%(*hq /_2x796Ծ:vGt 豮 S_5%ɅE/ueUm+KF"ab2-\Pvl"kĸJwk# Z/Z'd_I,@ipk2"6i@R ̥s)*b_P堑 +RgdM3Sh!:6oH + ]<t3 c(Le#0,cBZTpnfjXOY3)mI'~ ]yHH #x)~~PyU"5]TM1?.y5) ?N_Su< Ls֘ 2az})Es(q>Ȣ|OUFD̽xC=N|8. {EV?ĂW ̒͐gkÕvZf3ejxfJpۣ!x X8~g'J^j*O= O.nXr&||4Ua&\ 7X{8DLm1/sv:S>T\335ɳOEۢ<ƬoJ\/V"eIs@.u img8u!e>^ĴnKrtTq]HzA9l/+}ؚ[O7)H1[ Kcvp1 5sz5(>+wp -֔TcL6R*wyZvCQޔ$B^g lwdo\|y7-33(eZQX scɶpb]e 0@u &__MT~VLauk}>[71aaJ$ L jZ'x\Km"14ap:3@ shǕ%Bs"Aұ/9 vTثt'Bw0iMz=DIVZ5r|1Ե773"d:e{@+%bS;`Ksgk[eRk=㗪Sq#'ڋ\N +'v(`&%oGm;8S; ]O[2IU)coKh)gbYrJ~73Bs$U1']Z/ֳ h"}Yu]n a\uћšJN p./UyĶel+btԳ%N"&*Y V6`X0i=BD*JO{8FJӔg$ZMYU֚~ktz4j JrQܛ |TcV@L8!k~ C7sYiۏX/9Ƥ֖4F}ks ʦ[\+`˯+珰cPd\|j"|Hq9jA f?'~5m -伭>X@Ov0s(=n꺪EC~Ob*!FmO%`cZ S//-<4K@gPuD>(ӫ=i@a^o$}$ĤL^+UoQȭhe!twN ?0pQkPSzʍʯU|}qʣ/9 ops=+紈__JOQ˻Ld)J(uw"qS3|ȃNnwX[,_Y(l2%Du%6F*ְt84SJ5x_ȗi,}ËzLOsّ<C>*p: .M@, 'u zU/Y;Ut@BKh&LV{5A#]jID_tjB T3[4Ę8䙡-O?Q*rsmwUdX0=*C*O4GNė[\#URb$L:-']~C] Ge>`N6eI Ixe̼ISpL6¡Jxn㯢QZ߻x;r(z5lHHBQYSi|C1l3H֟\a5N2x&u<]d;uTN%G$KtgMe{m(dTeמ_);&4IMf嫥9isWc[#$"kRL\=HpҕZcR.vy+c%b @/6rE?:o&[6` H6^nhE4!yhjYOhL)Q^~׌FN^ZgѢFܱ;$zHknr:RJO4>+6EZ;-#MzdU3*WTęHT:`߆k7p^d2)$֌>GegԍIzi]HƂ[ **Oʯ10~kD}~gԋ@~`~~>Z ĐL1Ӡ򾞝|16tI195nLvZWimԬ]i_[8 g72p_Ye/&h!B\N{dyeHE~t( *XD& PaEw&cRlCFJ*f&٘m 'Rg Y!IL`{]Gs_&&PjacFQFoTN&d4@"Ŵ|nYh,[;W;lz۞1ap2 ;?ޔxVMˁ^^xZటqoO))e*qw~/'A<fLBS€ YkYN7XeK+cnmr)O2 f]3kg1{xKz}w]Bi]1q^AHd@ŋ)mЫ34#K ZF-rVm(>"`%GΓ ΉW%"v!,E>YչC8OI'mWB4pγu ".$^چ~KңZjy;gtzzexx;Os  {GTJ"?Fk(x͸x0W]xan)x99w*z6Cw=@GTOdg%@ a-&/WT(Οn 9!Igt:>-˅J$D9Pl_/"v"t: RN7Hz~A}?}ޒЏwxi:}]jZ6PVEVGGSI'*IƽH|LH4mhI-0 ;DF+Ew; x{nUZ1-8^)[8ƕ?iPm~[tPT#x 61,v־P"C jSA#E}+EJV„GQZWM[{P9uȻ ^廯- Eo"+v5ܰߣg9 U \{v:;?Dُr\^F޼gj坁ow~6h߬ףzE S<`+Q({kaFT)f-L kPDQbu ͸CCG [#;0OgQ>䙷cr*r Gy5n H ' {:3d;ȓd: j vs%jhr8 Q$h^:܄MqKs/8r <ΐ\)9b>FlKL"]Ylߺ|h،uܬk1 P1^x`?T 7YPwj& 00%3HpChqsbqtk$͵0Hml@Xx+:A0e.6wrZ >CT4HLhW~LIӗ蝥%à {9e MumA#yqW%N6g]6>ϧpRFp4˞خbM|ƵAIO+P.e^$s.zTLS!W(U6 m*0Q""eZa<)QuwHxb:_c>N)0ӱ֞u ;֧aQpFAӰ9+*bbYH|{7 1k7v62e @#ZB-c+2q^g@RlYEA2" ;zPMTA'vtuDj*3tʀ(+(JvZs$QN Jx(aԓws2#\wZK1|1ƳHf_ji(J CNtCAZ8yA7OYKY_< 1heTVt2 ~za_ߦM4bCXv\~S(0XȑNw,xC6ƠVrH+ `U#qgIj%vV{PF葛PX1!OqcÇz;~rؕeh5hʳHrOȉ~ȤAVWZ:Gy7ȿt>Y~Y2!縦l9u׫eS{T=+(vO5o55ձ][ÖTb%r6TIIA1ԡLړio5\{KfPX)ӈ?>j4t889<̑G/Eo=1@`W|R4$1Zx 2i"Mي|XO˛0–=v(WEiwlRN3q[71-Bv4`N~Ԉ䵂/ZVfudǙWevNQ;@&d0jW1ZI_!z-f;?$WIg&9iQ6rP®0|b"s߉yg 2 l̙-aބэB?2ѳDg߀8uZ5ߨ̝֢cT+yc A(("Ew`H&^X\S;Lw)ΑC6i*9yx޿*{Ve/A6ߋ,:'R0Z_?q[„T!G?*CsL.e.ܙÉSef}$! ]3Lv+-R0B?,pnJ~ Btwd?TI|| /ɉ" M6!$AyD[U`pka0V ѷ딅-00i7x;sJ M #c˺v{ɀsl7ޝVT` _(ⶌ6usUIP9&|_^qBZ]$ھVE_E{CJ+Q (rL}6v^Sl#21'3Que4+Фw-^e!NA|bV9i/ڝ eɻx䷩es>}@&CLEǍKҩx+b'0;[NegT( j8Ek&λCNħ%8ھNBg-u gO:VfgII@x_=螶E keq' >'njFSJ [$TicY{D~vS{vnܥB#{Q2>U+G~oʌ$B6Ҭ|<"%-w'6UtiNl; .C{n{8^qfU{`ؙ7n5ygC}綃b"OF#ˊm#3neWu+P!ΰT&cH 0ɺ1bE*U{dp c 41@59ZhZh1U PL-a٪v)Z:;opFGyl,8hxF*˙{\%NRfO򸄏2( {S}}3C޹/8Ц?-cw}KyWSY֮ȍb+:g<&D}\# / p?"u\H-7æ{} ~׌)>Vfs*@sѹY8N>x˅\C*`dzr.3l3z _Fۭ+#R]>Tb#/l9J0 3:&4EGuȒ2F$7ʈJŕU ԪLW9Ӆ]OH(s&|ݠq&qmAܹT[(q0+̿P NIBbIr=7s#]ZV}9+Mu'!YS/K8w ,4f;;-8V?j_UVCb: yEґwEUO|.IMeGӢy\(QjYm-k+5cνqͶ Eb="kZ3Yŵo۝Jdc>ErLM:mMtˁRMwV7q JEB1>aDfaվ7X*K1ql0'q0Mp^(.Sm^-; X[EW%jyMrSV{8e{^T`0d->|A/!uUi9#6gCQYA -sa>E1OT[deud E]떶äΊxtwa)r"=b7`qm&$B)6`J+dQiw4n p t|za:MU?1EdŚ+w1w%R4Ze]o+!%v}]XŁC]tٴth8&8 (-Rz O{l&@&9'&rJvxy8"$mDΎCŋ ; BAbaUiύcr+Rv;8YHM}D /) > ((߬( Z-$)v\uZs3KNOChGA{L5ەkqؠej\XN~Rz-fE0<W75qd;CkC8bIm`c:vO7*,bISf/^q΃&[&h3.x.Bo^-m.G/I{L*- 2Y7I-&2,^yI&h,;&pQ(Jsj]7Kłev]$_lw&`fjp _@Ha6;oU ڲV!l*xv 1rRkүsVX4 vm 1Vd2%7)7ӆda}l3.3HKQ{1:9ɐ24?ak8h6[~^M!6b(v/ZҺgYMU"u5ӘI-}ɗFL y'V}Ǡzkca!/~ DL:ڿv܍6x f^z I\):4;`^9 ?nOhpFL MƽMO +uHiz&(r(B'H.ej"$~I!9ACg.Cgl,#b{okc^1K9P6Φ_F9˩j+z nc ~1{9A/'~جIe.5\مLM:Cz)1h7n6X -E6/ȴomӝS]$i\M#ܹnF÷egpkwlj~D}su9|Qkg-vHORuRSz) "zUS Y7qcf~J.Xi8*#\95PTI+(-Wz_4'r?${6Q҈q~cv3r|B_4?jd#L' *BZOEYL/1AlR™+R?ڂ nlHÇu4h&c`5HZ >.V!Y3)z Ȣکd̷\F+xyb&kC1c-r+;:*I^am߻VtNq $*bO.Og lo8,H},7 ">=ßn@bMZ!M[KY8NjRGI+6 \md `Jt_2WbjO\:>x?ꪋ[iv7ۍ{d,WW16KN7X2Q{&"ֳy(!$CN^.CW/!bh~1R%zN'( #;E%E29rr&^WtaV÷yV'<׏Lz5J?Sk(> BlKەkj=Ķ7f-TH]=p Mn 7{!hXJ 7OP)X'֡,4c\9].C/ p8Sd5" #۰ 4e|wCd%FM+5lg@̅oM*z(ȦJ,>\S5[mPռ@$~AŢh 8fwhw\n"^ر^ 86UC$lgGh.[` @sIIյ-CGkҚaiqͳr[ s/O}uo/ ?b!Ɛ>)67cdgq|֗ a;b\<$Uki%2#800 >*eϖY_EEk)^D6gd06/-BڠO3 c p{^3cc1T JY _/WAiQ}(=MN`N0*lo~%l8`@09ߔ|5''#j'\ (:CLX |{ R6i\r/U CUVj [U.F!4cRFےrldlܻ^[?̕]NFߛgkP g:ń8e/-SO<MS7wD dMHXD6nʹf*Č-0LJqh6&}RyC鍗,-neavNpA$$T-us>Wr%cZ p_2$f$&X~>bh|&'.c3BCV` i1l,gbeC*Xg 4n8*Rjʑ!grBV3sz$ <#br_%x؋Xڽ\o[b&^|Gz(I 4N;#ȹ[)v=pE#B?Q BYYEz;;WEˉ;40]`MECX\A{*.ɻj&p18Lq(.mN+8aBix q1ﰞ˷5[ɸ?g3+f>KibUv>\h0_Qd ņy.`qBIK߸ͻcu &16!K8sd'Q\/mK(bm"Kimf_@#$frIQ!#8h2UQRT8V* iR8.״̄$o7ö}P>+LƱqCw7tg0]\tt瘦>z8K6S8_x{ЎpYg;,B%jU:Mƙ3R F6'Rq36>7W^DF'˷X8~[1[YqMFT'_~$yʯrѪ>ps=^'O=ֆu=5˙32(/:V&41WSi( 7*xt#rT w6KáK(mɭDo=g)gK('ζ!]+ *;zph)N?2!װ/s Yy~>oUt=x[JV&-D@̔sD}1 PV\CbW:⺰(෮L;]wߕIAjvX\E@=pܨHN4_Ptw/#?1Vக!.=Cq`AjtC\b;P@1X+UEQCNJ/zysN_[cA)|/j!1 =[8E+% ^:O6; ^iu Wxd5F{ lL/Z ~řz$Ir`%kZ >D GWeg4ʍZNVȿyhwN-hD,M8UG>~V"6OPFgZ3Px1"&ȬwjE3F(4EG0+`3Z9R($}?>I[E ?1BV{K4|`6VԺw0^@~8?$B7Vj)l%HҼ+DlWxأlw, k_9zZ ߁)5Џ>_尓ؘ>lv- uq5"/6ѭΟ\%-Vr`̇ \ }<DԐKVh|'xvg.T%vΉsD n8 !»сg8JJXQ|m6 X=EURӃЈQL dq[hs 'UW=UF4) g/c=omɽ\[Rf?!WKRkM'6$#Cy eQ_{޸t9,fQl7{.PMt•mH%NtD'OW^`icZJLzFyG5Ҟ=2_;]W+˜c+ugF“ aп/@A׷`Mf>Iב_UΪ}uÌET9uHl(щ|Ze }<\؞]4'[&9ljex̔.6s=o0(+e-Ǎ7506OS@5[u|A>x/UX/Lc K:5-:s#h8ϥK6uΞ)_gM6 }ȚfjB6 E0Q\eˠ3oL F{J%-ˈxy3"Ot[!Ktw|]ƀ60 a)Ťs^!YRSu)Bް퐀ڇ5cƻжĬWk7ME7*,b!Pmz GGIPe(hBO\H:V_mw?JL(<*Kw"D9軳(#ضpB43Ttqɸ%$)BR`YQu:=Dx$ə"9@p tO$NMS,Ae0%y0P'ot5&`yS[sª9Z̛*"=_kq) H8a{l0F?ʗio,Vs "DI. ~UbPY7c#~1 tz4Y'*KyxI7mrjeVXav\ԬPIVDyU-"9#6p,OXx 1C (S4Jw7EKhPA&;!Nh0 1\ٹ V|n{I4JCk6%-'g8*٢N?XnPh7'NdwDZeF{ uhG j5>~R#BQא {8u&uH 1?M0(\Hޟ+Iu Ɏ]Z>L.0 F0zq8 )[ 1ֵ&}`uUlvzl#;nq옋Oۮ_ M۽O1ػq. RMT) wM]I+9*k 3Q2ӊ`꧔=GNɮ>&!eVOjaі !Fo|M?;,ȶ-"ܫ:h.ڙwŒ}l0gmѫ&?CLJOQw[3t$CRSA!]zzPS`LIƭgvg(R z}%f)MC¥Jf3*h*w(5kc| \9f:+m}>'^= KDPo8ozЭLJcPd4Pz[Sc% xF}vzB>Hn !g% )Afxb#* tlXHGI5~TգARIKUnlο.Kiς1ЂycbbF9D6ƂPFOʱQu'TfGԷ 5(iM0Niʯ`<Ji"]imZ~'AWZ# !6Gԛt_7q)׋gє2([qJ MB ~1@tA.CpASt_rEl [K"SU0ڠ{cnHoD5U:>'g&` {N4]PҸ_C/`q^N7ROҖ@a /͔ކ^ H9rK$ N͹iB" oWM|:3dmL>ټ.~|u<#fzk?=&y:()%5Sf_^<%m p;}4 s {"ug\ i?V= Tf<1*|G)d'Xز7;)عR6R_xyHHt9VK+D˜/yEȆE'K}I2Fp& 4r 0K0SeJk88+@tK%ٕ_V" IHrhG66s#[_i x7#]ji 5 ѨsF[l5w OX ݀yWH"w=+f14C 5xl~Oҝܢ9 ΀CP}k.>RrRߌ^6N6"6ߵ+ꋬڦ{8ZjK-[F+u2}R200NP,ާV=i.oFFe~YRnEun0oMF j*ꮦKf=I)G9m%[{>#8qS]Eߜ! le7#fF] K1 WIVz4ρ"e3Fj& Sb^#O9SR0Q=$oP,U+ȟT7T}#~!%Ye P}%e(" )4;!}J`yT_cկJT~yp3%' sOfd 6i!H!;JTC;nl I C1tib}>g=@k}F_RBFIvVVksGٯ>-p5H32&\'b,*BQkS[G7e-=)ٛI,>?U:Kl]󆵌-fVkM !;[j ]<ʚD Sӏ:U6+ )&_1=ϵ<[f'BJ>t'?迴)W*uL:3{f,Yt0ԇP.+"Զ4:䖢,>S6D!WP>:$HQYq/Yv ^0z&4q8 w"q~Wv=hJ h9kn(6..~avxҺ$]eHˆ_$}≱;p tib?,Pz|֠о &P! m/{ܢSZz琊7R>T:EsԈMK*l)4ߐ쵅#rV.LNBjcd .T:$h>VeG*W׾H +J0 uQ"% zAΚ1 @gdh <N ''_nB6Qs>'- V iuO|t/fc@ PoNTcsL{ޟxQ*S%e?LZ\> b6 _ Ud3A E@&қ$Do]JKDDh 鉰1Iyw?By\ Q)6PQu h('cO:TU(zpXB#~M@WOnZVQ}וF)+g҇naԽTc#|11SOmR0 LFhdN8'lkҸJ;0:?9R؟ T þ*ÊeX_*\+qӷ5bYt 쎤T'؏96~a#kOy%bx^=!Q clA_.Edw~%`Vʯx׎$|Yv]s}cCnɿ}a~pAC5Fi`H5aM"u8oRp!A/r֫t&GE4VrhED5HwL`웢mdJP|wd`Hz1Η8PU;8pRk7CMMgrRip1}L!Hx=amP>o:kfgHBoʫ`g݉x h%shwPrsnC+Cd~͡J:N+t`M%xK lL&'kp/gOB4eUP6.t`@Rгga%tycNͿ.J.96oc47;A b^J: iȮݎ2n49/-Yl#E:*`֊4>aU0MJP'pG tMC;ăg9w4 ،ӝ>PutiaZb(XMK1O9prum`n5r&.<@(MgMBOZЯFVP3eS^|33Alقg`Y6GlG΅-6>hk %3:d94D.E ZJbCκ}OiĒӅ sR)@-HL:+Qk4AxLh/#3@ 4:*UnQ8 }9K$);v D&mZ C!f w;@2©!6ŽٌLOA`sMX Tnn#ˣM:jyFMtfJ ;V0.čW6;glAcH*Ҫagnx,b#b> KkaAl+z 덖(5?`?9SZn\I 3{ 5vXV'O]*kVJ=OwtJKÚE WK L ڃӸxyԨ! xujjqfQ췣 ⥓UO34@E~y0t2 w~05IwZbkF{1oPnXHyԌ/0DvPu9Nw$IG=Ro[?{\RMz855A4?s:g6hB4sjW0`?K~lߺGJT\[nWaULQi1ϵ{bc>_(Qn(|!"Zp[5!>W̻wJA7HUtka\!kVR'[Zm(M:?x,ݲqDu#/}صhƄ0@39^QT7qǯ<(B1%SXl]2s2T+jd%f<+[n)hx"HGo Ѷ, PKbx4ZOBpz˸*s0[mXIlDQx jN`J_"l&lR07cfY&yi;=Z~?}t-3$_@or9tmRX߂P$;EE$!VG!2qmlD*202 ]&E F :mQw.dxT;O` %NRV8 !5W55̄ꢯa|:uGtB=R߹U(@sd l'. (ҍ)?-OI7eYTC jrWɡ(fV-K u+CZagROu6Q9ԥz,-2-ӂݣ}Dcړ~}0L|z"ȩo#dl-!8b!",vnD ac]49f mdN?iCVu5ϭ=rE[dBܑ?2`3P,cJֶ.Fuli1މc?~=&ek$su)'v#<32"?k &dHk~Qd.r~!+\3CGaIYCaݶ4~ۢ*jCcHS˝4{yQz ~twݥrqpS#P,돏B 5 3ٱ.e<,_]IR]86H֖E8b3%MqSյ02i+𫍽EEzV\LرJ8+P?ʞ轋5hI> ^#Oiz8pJuǽ`'|(Q:+)R0l  6qdtm$`"}nsPֻ/_!5jA!J'Txn VM`eQ5KHfa~5ֹق2P! 4)ugXYp8\ỰjLl&GI 8DUj':07H4g=ѷ9Hs|O(Q0wO>?CvP40,bq;syFKɩb` 6h2 Le==I=}UO '5?OwO#`wX8p*]/ђirc}=+jN7x`,J'[NF,fZ< 3NcD_U98ApDZ:w)0ej?Wi3(Q<Nf5p:vb峖 #}4_|bo=agr lVvC3MZ 7G}wR%'ov!ISb*9k 87M\ LfQ\bɳ] ٥Gvlu,DEl̳Req?O4]ukA!3A5O;BUB2gT\,# W@)•~JqGb?@ZIVEvCcԒIcew~kY}aઠji}5sFgvqOͨU0r"q-jʴ8<6gn_(q]Jo\.U~^tN 1ĠRҖ.lj`v и\a|Hn|g>$.#Z(T̩t\Kf1iѴ9PiRu53+n62LjCa%"5lL3첬Mƒ6A2ٚ8Teɸ>:v{RIJUdE/Mfuq툛POZdT0qǶpM/O#!L.Gɧ8kzArgkJb8\upX5  c.U`3UOx*(f V򞺝1B8RV.AMd1N MtSdvGχ #4d o`6]LjozJJߍDC64Zh[J23ήn0N)p63+%ڭ}*?oМ_Wh5YzOƮ#ԚA-Zܰl2g4y]kј! N~&G9)4 R# K4y̒јuu 8 gcq\^5>js7a[3v|Y$ lŬO𭉖xlugժ۹C )|%9ܷ=Q EimӄŮ=XR  hmkRV3O~n,} & ˃;vKHyF*7in~`x ċMet Y4߭O~V>+ Sʳ,Q拎S<`坩AV}aE00EpVi許W ht`>e e2]tZzz!f+2Dn_0-nu h8tXS47<8X5}t*鑫VY5M _W̦P&4\ʼnX?XlRjE5Lj5L=/"qZ'B v^Vj}][89vNwXrmLm'}U8(~Z/ gxaF!dEeL4(IQC9;xJdIi*MHׇ9'ǭlُ]J ]7}z>u]<~_?RBRWZApZ(I72g]/LvF(PF)hfy3{xL~gna[(_CJs)v",٥ ԾA}A=MON;H@:G˂+iUږ?GV%s*^`}UAυn SE9t4+"2y`[FB^  iQQKEu{)+tI\&{S~Ad[6bJxo(:G| $Y{ޘD%~Hh=sd J(3DpR`b[]P4ޣXDdJ3#WGدItn9CШ2Mƕ}UBM5ݪs'<F$ N-h 4agq;3ee%ʙ{,}~_;+,][˖ Q!(jot;хl))I J4w HY(YeTaĤ(Zg񉍨sw>I+#iy1A 3 k~X&ܲeA9K.L8*J|9kLB"ޑlJ3#??pOIKDx^rÚ5@R#MXJM0kwR֖(ĩdDVhs;@E™n 5eK˕hssmYnϑi@vv)5Urz@`"QPFIAo@Qt:qhG*mQ|Unn52{:ܐ˦/0޻RjGBS֓%\LďFc0NIu`tOp1 6bQS/նm˱=f۶B#\1GNzTnc^am/g sC1${%h Kdt97\v|_\'3²migk;H-B_*w|oMtkCet(,| %\,CY2b&9FIZ)E*v8f#dKD2'*OwMBy=r*g.# 7Q/"T6m^ʲ$`lpށ3bL} Cy9]gɻ*IJ,jh Mcy<1kJv x*Í_3ْދ =v f]m%5%q),4U:lL,˧4`YnrzݡAi 9wF($eP(%Vk\x&hƝ.>@];^Mg"e".ҟUg\q cf5[XWdPvXoNfa<2bۤ'ItN BűV|8?~tqf‚_.U? 5դ\l/ReƌGqyhX処>(E3.BMiU {)rVљƝ޸Qv;# ZZq0l"EJ- ,3܀^0J$k?(- XȍǵE%6l60}ˇ[3kWeM;N)uf9Ec$(N~KrZG֪ Ƃsȕeyyx ͸ծ2C JG45bJbfMyMيrW& cbNڰz,H,Qw: c$7"Iad 9' QK\ /w>dK{"3ƴ~$hق퇁G@3촚S

̺݃!0 =&(2 J ;[n%p2ZֆÙ߽<Kt滛^6 .oF舾dld!XH]@cX{OGm< _\s>ttOԹԤܫ!4op t߸%JJD6{ekVAbiAD [+Wl5АAW&;!yQz!f$ 5 Z6[ꙑ} Z~FVݯï}Ή_uK?&ێ!IYriX{Nv4xW/iUURx%Upgz1gDf> ,mwWSf,b]3bۡYvSp_Eu泺J pF!-:::0BIԎ^4n.˺uzJ NJ2*xl̢6L-> L ֌NUca@7R{8.Ey oFñ$nlPFjI;x [9$NU"bKM<}mCXiٟ1M{uib ρeokU%~_A$:Tt0 ( ?\ʯ&٦n{&kP$|7w+}mp}.$"c(nζ3$P< [}ǂDPL̵{h϶,=*UJFlil/d%Ƃ{9gl |D'VK908q0!lD4DG<^' JouF I D`^ct{sRMWɆMKsD;t#!;-m)k 4J<=18>1}5Pd7y$>` `{b34:ōrv?Q܈tp ̷@Z5\>Tw 5&a߭P zeӤ[o1nTj}[{Sdj=|l˿Dk־'27>~ym'0q#k֘v /E"MH39ƃ.$@UngƱ\3^GHd+H)[2 Xŝ vQ]Ơd:Cs{.$Sd!FЧb-jxyJ_ lu?1)F@'jsyNB/pvƺr3vHF5vAuEJiְ0ܖL8AQr\,6}GL[PVytIްh4,Plu?09CPQ{5cr5$i܃Y#MHROF>K[iV;,qZ3>xMޙ(-fUkT@=VAj\$lB7Q v`4Bb&.vF pgh"9b 5@;^Vל[r@uQ!`3+)$=b6bpjN5D; '%^4j* fȔ*-#iozN T9)vǻm4C3ѮrrOJg>9Dcr^-v7^[WM[TE6{'MMz9t&o(JG>+G$b[s9Ff]y<1C(:GwadScەS1%W($eU SX@ЪCV Ϝ$iglXpϝ+&`Zm9–u=aŻ̚/+Ϧ~ٻe3zp&*^5:MBW[a,@A Зq Oh YUo+!Vmȥ/IJ575+1q*$$TM\$!JC@ ԬdI$0S4seH}T,"Qj߭+U?r y^W@b>}2.ap]QDOY:)N Peh[^I5}fbY.QakoSU0FJp؜ݭi1[ I}o i MPJ rk=Kmdb$M8N>tr<=j$E@֍\j!$X#_P{FUJmp #GcٝnmF(r aǻIrVkjg]B_טlwg7+5N%/[885`[>ĺ!d ,Nw6u^`bj72-/ ѧ9wȎ j%_nln'ݞ C'J9(Zs4ozQS b1\'^}~fA:E*Ba36CY/yfi;=v,kL,A˖&-3m:yւ (\IE\e[u-a2޾g>#V׸`lG7Q6Bx>D!%2߇I 'Fڼ뽀E:8mxZ:ʸ,9\򱱏x("h ;b⠜6#Q^M=f+l6}SB@ #zTӅ\5o`Tdlg[K W4! *!܋s=/% .&>ckf äI„D5fd L i ps4m[&O0^$7C$wE~nc(Mb %]ަH\{j"7zrCU{{'L!P9!yD{3Qbp\ce I` E؛;8o:k+9j3@}ن={J_3V ɸj2pkNd:P j&GxtF̓G|.dǧaYf)Re彷`5d_*)8V-f7)yW^b@SE)$ū͋Tg\u Gr) <%ƣ&p{sb>gnyQl:F'鄂[_0цVYM)G=f;$Żm(+;6jnL q.F `=L@ʓṡcL[.AI5u#|:^tDb?֧Fd&( 3a`_?Nδ>>2e>8|Q%_fOKZi npz7op'i^1r1 >24X YHWI[s=p3b<f>/kTXJf' #_XL. -%",h.;eA\8@UJ|XBT4׋#C; ެ/=Ef[yeZGm%iVF\;&$:4Ғz4 H=Pὑ/+)p"ub.PѲ9OmIOnٷ`e?aKY%Y(~Zkw՟F s(? B*YM`x0eƭD)]fta|FrsEfڧsr`j94PĬd8O h*uU O 7KIDcH:VU|S]hkś8FB` ?8mi/i|vw'}̂b%%V[qFb5)S0 rn!wCc^w*Ri-;~@1+vKOʓAϒonE+w֮ѡF5vvCS=Q4M{|l8ak*F;\)@f>K1_y(U]yqǕN?h-;0)РKIJW ZC{{ rֵ!(D ж@]:)Q>6&sބ⊚x[v./]eiBqR}Iv}̫G#PL[+'lb]Q`QnՇq E\NA¸p5D*aCր%U;Џ濂W}j1{ @ 㴺"SۉpjJ e8ğ We0%J>H"ip,/%.ȟS.NI䖎{&O%_t#MmW~)DYVtN $A~enD6v>(NSML}V1Ҙ-Šrnq!5UK6iV$8B䰟UpəzU$\F-Dk'Ǫ >xZ = :Hk(֙X_TqVvXӃ I᭎`@h-Uu)ȥbƿ "0veBlqbg1(RCGun1#tdq[MV%I6 $: ةXgwTۇ6SeTѸ̅hDS'Z6ǣj041(D(\ÊZ>'6`Éeފ-9kvrà[=fk*pqqp}a쭝 F a1.d YM3n4 51[S0!!d'/oCk2Ƿl xu\#Y(֏˫h Gt)AJ<JR@7qu00#M~)T!M oL^fUM /ɑt2\S=MYry_)FUQ`]Yc'VA8=gl~yl3#6}DHIVuyq%_x$0kWDʽVU=~Jz8!k(:/j;,Z)r2=)7Ln~hz1zUfai~f~ XR2!h}{2XXCc '#o6YdM*~[`$MJ>!bBQ1OrdQXt*A`BزW/uG2STnvK%^e$^QfSb8|N33Vnl KDSe!e;ˤjk?d V7R:K86/Plz .#GϦ(2zw[UE/nWuX1zL"4~yS1#i.XV+ݦqLЃά0<|,&,@.k#v0$ 264szUF'^ &TÉ[XO3˱ns{F8oBU[H{5"T?D1ăepiͯʡn` WTiJ-+7Jd SdSUsxWҵ!IZǶwM`)W r-&|M7;EeE0~6Zᅰ(Yr+-Ht9.؎$f Bh(=D'X~_ɓBE` bE%~D,P_J'{ֽ3NR&GKYQnY^_{V킮"hc؜?VP+p/{>y<8Ջ:Q2ޥ%EZprdCKj[L jΆ!X=ri57k8ܰǕ<GZ'ڣl-x9.AQAO-(+ 3{[[aj#~Z궔5FO"`csi$M#D+PqU&{^1Ȍ5<G6‡bu @Jb6\j3)X%LRB6qWϘP(5W?U^0S1YI=ɷ2-,h`Z)Je2( F/0Aݵ] S,J1R"G=OK fwn CkBXekO5s)f~1s;Y-p+LVE{/$I\O37,=;;0L@msĒuB{jfUt Ԫq|g:hPOL>D@t*O2l@bhlϰAY6e8"]{oK,xk2,j2_8=sznA5ӯ01"űEv) *dYnK]8eEPU!ίtAM[>7(H }̍|rМ <U븖;" :1?$L[}6{֤?#i8dXlWaBJɚTW.(.,ԐO!Pd+QyO0ں#QD!Es.n\M=IGw_Kn'ؚO !4ZRHRoW1b-:\{``KKlMmSawvAZxvHГiD҂#/}#*LbWHyckdIw46Z;)7&n˩kB5h_} Ʌ)dkUp(ڿbb:=QBk,9їf FSY!_ t o0z"uӮSV[(((8P.s0)RH bR39ٵKsM,!V<ة t>vү~=T|bk VґuE.Ֆy9\=1PD! uhk6sTcĨhx,n,p_J)ؙuZ?'I7x{0+im7/X 4;3ڣUU67Fl"w]f6jZMj(m5> hyҰt KAoD`X%JB∶q>8!![AL=r/C,1|u2'G N {jyYW-B-: ˗|"Q3RM"u!} F$ Dhz풝՜r9_;:i30\kGޕ5+JZC^ڵJ7X-hZD{H(}܉ Ӆ Rj[͑WfjIj%gjcNKX7aE7./Xh!=_֨oz' ot9{.NٸVcճ7~?Ԥ#`Q_(*x2%R cw ]n&N"ii_^ȥ.Nq-f` /+LB|A<] QFL((+ q}!༏F9^p'"rApϚsm!:5$sC2hHk}9m4d{o@, hfN01fE<ժW+vG8Zl{֧!bdF+mfWZZolrkS sdjslL2ꏴ\WA`KG3 1zu- 5_!g\c$h`ya?:5 ]$ }5\nΌ8ϩa{tvt  eq(۠[FM/zU.6h(M9p;%#Oit6'51ENnNKrEbͣ܌ح&5޻APC>dH#qw7ɳN7#<].IXX 99GYG:LC&VFI.Ԧ'5Bj,0?(kZh8\g0n@Uu5,D^ev( L,l{2%Z&GLѶ,vqjAUfRnlnL?Fv)[TA>ZtY9t]koC&0Nծv {]F( F->C`LiYRvuhΜlrˊ" I7#F^? d4f/#0$vǧ_ 2) 'Nޠ.1 ;J"&v.O8 TI8ieGIs',% -ѫ{udƄXRe|)χ1=>+f&! =liW*`F6s/+(Պ3)Ā {ۋ)T8e֛''+\ Wi7e^CzN?Vqe3  sZ.fU}<*yZ!Ruۦ5, 31Bد-g·[q]YLkH\G⫈&pޯiJv9(hF׌*1'*;,ʡ-K1;=FƑ\@EHJSdYrSyhS0Cޡ]IL{jxNX-ik!ƏmB[xG w -|n^E2G.qSi;ϔM=2# t;l}!*:A/*N/9z^e XD*b}$k̝X 'gj|:̇W Y;?%I¢PxZbF.,sX NZŸXlժMwԖ{dK,\ ᜹j7an.\*F0Kf:;%\IE*xX 1' d wv{-|師sK^=}K,/ĽJww1!22(gJLE}ͦ^&?ġSɟUc,6Pfp!O$GKO?8f"usid =o,ff@˞ IܘX0 D4Jҋ; .~'rvu;UC"0{s"]KAɆ ςq~ҽ [‚p{e"Օ'|+ hS01Xci#a)b>7ç^qh^ ;Mv}̧ޛ7 g@X v)1a9=\~rS,rw5 Y{X*LآPHIuJMvuH(]{'wW3G6/;r>QZjML5D}StM`01y-vs :5%yB\?61U}4+޷`L'Ul=:UL|P<#;M 4$JPr8pr[\f(3zYŜa'C&ʲQf{>b| Df/^7uc DV!dsb\_8 XeRutef}u裤0`gSדj* 3C-@ĠB]<6@H7$f3kP.&۹Ǯ&hB%)n U_r{7;ZJp46 k&|Ub)g Ԧ@+ea"b!Blxw`i ~8]N2ߚA( MTjg6 Mh?[:#OoTXy5S#FǑ tYB dvf=)W^Es<~Li}~CG8gA~U/bBAmXgE p`3M uw90s YkNV&l_XL@ RXHw3շFY#z;kHOm5Zh榷j@s=6~9IzqȪ3w95%>iLq{Pb1geH<͝p~pϣQB5-𞽭*d-֞sZdNp;qyqpEiԨUZ鞺g{Fgqlgsr5[%ʦkU1 Փf&TjG*qu DbJ_aU[@_i?@8*)1(pU2.Z&c*.:Dm`F[S~Re7ocl |'o\m͒?ef/NgBg6T&lE{IOf5qElK3?"ݽOORqK`92`EWuk~gN"ت րn^xRwk!]%f %b0J;At'y9q|[914"W#B_x:%tt< ?XzhsH(Tç9GGV坯>r#@iRsJŖ:c3R,Y@: ǡj +i!~*\7¼IB-"x(񏥴k5<<  .F$C# ^Bg\`Qut<&7HPEeL6PO#x^Qd\5}ml&dR~Tu;HƦLjV{{)iOt>5ʣ=^ 9 K孿rߋTH=|rt{|f/*~׉N"Lly<~99!iX+ DhIiϏ=+ l]4vx#Ԯ3ls┡hwAQRWO\Ј9 QI;{o"Lӆs@w)ċdYt *z6mo}"RRȄz%J!f=rf-9$%&{YS Rar{ݕ[P+z5]0aC%O91œh;ݕs3!0i&faqi;]}ғ̎i rӝ/T铛ٞ@|G_.Q˙LP8S+ӹ-LL1[I賵VrM{ѯ>sW[*+c 5E*~<]xbS̹ )>x%D#HpqACJ^_70AY][hcݿ6j(- q'ն:󏆵BGqg< [<+n'GE4Ol;WTJ@8tg >o>Yaq?}qC&CґcU&779 5~Zpl:zU63>ݍxҚ{GJ`| `-܎30J<6! H M9/qC 4TG`}}N1}ݚvPϴe5:^dZ.XA^ͱFwrРYrB[h߀KT"ms/p/T73KV>zLqa?{Őn Cb5(qQ| 聰@4)W Xm0 znp›ZQ,.F}<,K$!IdMtBrCiC`f|_U ?H臆^T+d֢de~6e)ٺZT;B4w&Mx&<pg}~ވ +8$U3a&/@ƜCjcbL]?.ý2GpCTI$}/mV3dMwaCs +CCP=b;>!2+5&qD"(JӐ ֍$}d6{a?~Q7||)G$e aFw,kM2W 2;E;S'6+x GÃh+iτ 0u)j'qJpu8]p}~ېdF K_6?|I|L Adz^B.lȏBjt@`ڌ (BFϜCIr&sJ)qؗ4]m;H ~l:={QQ=$ DZ,"ɦ^\)(N[(L[b6ǽ8Xh7$8@AAXd|iu86du~ [^GEIXG0w2q=8]Q($\}1K>'Չ K`sBhJm^p)F5b {[F6HKS V@ Ц;3ΎvYi2JrΥBo}ýC9?5w] )K@R"dwǹ>FśFĉXzsY$~:gYytaqXqIpb B@p\Z)o*T4 )7jvM>Oܧ8a88MH|uE0zJk'Tbn ֎2qE' x"{_QuKf5@+$O60ρ.g2p: {=U~Ȳ:'LtF5j#z0cڜmt,r5ܧJ=|AT̐!(1OD=U\G֮l*Me3]M3a|&858-@:e$˂^Xz\L̝/x=bR5?)ʅ?:~$&0 otrVQ$"o|l6: PT8\8.YZ 5~F؇y\Ej#es[_ 2nW(ΤӨ-%p#!8,:,M* B,v{.W`M1ĥ{QzY>*g(g6[oQkaGٵ[[R+ A6 :I4V gt!eoPy+)MRl=;^d(k`_ܽz&+:Ϣ{*PW04C- -[ͦ\ 0tSFЫh:gJ&ϏT.NP^݌1uIlϲsAnkdx8 E?ș'/$M;v3CڍP(N?⃁~癌44g3Mqţ*,5QQzQWhXxUP٫uN Q5j Q51"4J>f+3Tک:No8BЀ+5;`̼ƕczIw!S&fI9A!t"sG@{&$F~}}&A1hVy%r/fO* E߅`{:ۍj.l{Lt:Im,_y.K>^l ujgNɛXU cLHB= *tv0\{|)iD+*;IF뛈$2)Y|Y+5O$Ls ##-Z+ _0C =O$yq4s)]E~8ne(4 /E?3>n$6ިy*G~RP;NV¥?JdNzKMvmVPBۛlOiveܔ؅ a"{L,V<'jۋgw,ܤƊ4yi Ttb!~b*m@o ;Є8!YC>i<!%*Mq.9u?ګYuV K1gQhtG)挩{,jaWnv%̬!F2 >d VV,T0oޫWNu+{:G ۝V Vp:,O'}˓, `ps$LN=C߼ ෮^Q3_lBn( i5אajI4huB!$U/ ͔zY{rjf4r>u4|>Xc0vxUD#4 ]'d;mօrG!^EdCu0a= LQB{6~P `e?g{-2$׋4h55;ht捧mtAm˖? \c0$Uzp˜7\15h)Rk ZC . +bm*=䦾RԒF & )xS'Tmx'q[28QC_mGx 4Ď|▵_S`gUEB1*[0K}-ѿhGc4!Y;0 f/d f 1XUSOÃʱ{DKAdsd Cξ(pj-B߱P\ 9 MRvVxWzkό)"۞#6~̿S8Xzxԕȶnʋ QUDq: HCO!rB|QxZ PyHrCe4c|U2԰w?%>N/,1 +66Өe:E~K2˥"*slVd`Eia랤{,).Y?cò Va3Xی™Q˰<9eAWY荰$!Hs/rBVro+fC^{JD#c2=H5OJOh+Nq{ r2m[g+& ͉sTnrvr4D,zw=U8^㊆;x R_͚6{ʝ _?"VZ >TRbKrA]t pOVIXSu\Ve;r-VdWįHS2TBìlG8}EKq"eNi"=mYy|(@ rz>>sTޞLENbU}ԇׄM҂;Rop18HrVd>f%/-O`mV;iNڟ ޖ'A`PYsy%:5pn#*xJ= Tܰ8Rx4' Ut7u6g/gv2-E^^[QLJrע\X^:'M(a KLPcPQP.auLjk qJLv; x3ZIāר=΄.bxQ?\]y}4zG"} x[B> PM*pƖnJg>aY4l)'fP{I!C;1$,uRIG{mv=ʁgׯּ;D4. ܁=hƋ#iKѡUүkOҠ4 =)JxAO)A7ڵkװc %rOP ?&4$#K<ΡK-~Q|F=/ P~:b] cɯ u`)1w:[ŸOh9agA 3 cWSrx(8d^I4%I'*ȱMv.;{Jj:iy :pFk£!cˇJ|v"%։ܪp$D䁒YF rm/>"yFKc ; R(%u3j8S] `c 8O8+Duu\lFK~qi hB~RdZ?x<Z!{eڥKu[/I@?n*٥qĢް5f{duQZn_冞C}XbϹ5 I y⛞fpv`@ɩGLl~Fp1m0 %wIlAy<v܈c0XN:gD  vn Ws * !O]4lH>92)QONKGmS4&6?eZNreZO9($`Pkʈq#%L+Z$O,\|`2qF^i6^U@:ۇ`}]0TKIoaN+L~v-qU9,r-r hF"eMVGA\XhAb;MͿӏ\$ܸKa:(S:w^LNZ9E2J=L1XIc, J98F\'_x-7ӆ*Dz<?|.L՟}9̘FuOkoҷ]ܐ}I{डJe9dyWLBAE> K:l-J@Q3U[J1?-:Y5.&a helQG7H`k$dlU5yد6SM5$ իe1ſ%M+fT|F Qs< Uߵ[ymg0]uv7_û ?3U JB?8@{bݕ]_7#iLCH'!D#](Bb2G z?i&AGwr!b)w֢uDy['q3it{(,dP) -s8k}uj۴|UI^Lqԧ6ēN9J1cnuv;:G]Di6(8KS>V@o[||4{I?"ߓq*EbcBrz[Hn8.N8{d8H"iߏ>%V}݈;T£LO)7)gD*f[r4<ʕQ`'gpK滝?X_3\Ao]dE3w0 5POtb-6uVRV#O ۲E"j16/Z^C~`}~2^9yA ,*:І1x,d֞e}^ 3C9CXz6ϒsh+'ԾcbcՈ<8\ W-P/si}zsp~w~/j^ Yd]*Bfn@Fi(Yj A(Ve>-|0ftR$Z̰97ڮސ蛸 ELr3xy]9H;n?,sP( Tb:8Ut~(tu4ޔ&Qt觓F2t_ήQ=yJ+(M¬j@THƝ`'t8Ԍ9vfWg:յh/)4]r3ؕQg>^htVVm`9Nֵ2jQ7o0jqIS$CEvkYqLKPHߏ߇ /XdKiimf6GN_@C ܹnqs1Ol?UfŠ%Fܯ;#/QEJHC ,)Ur[nCjnZ @j“[S~Rk@y]&/su73: dFt{/ҕr<XeB@yȭB? P=h&Z`RPz]F:"Z%t[xѶ6,!8_[h,^[n^XIlcR.&G;Ŀum<0lIpPϘ`V35bĚUA*}T6];ޑB(OҊn};dH  S"YZaJLdas T_c;~Ȏ܋!1zm킠Ԭ .om8boz$[5>eP^E[Y )PXliƒ[l̗57M|* dcDIIa"Fve/ڱ`/C m ሄ$ J`v$)_WwNǏ{Z=FE^ ۈR3n4*NzKͶ1" #dE!ybKṭܵ}*JEEkr?i֊&+ J^wA^/-@ ZKjWm>[ع X 5rYyB#XѩQ2=3@3&~? S+xE3`a*I\ 7 (vdJ@qnNk#”s5^y_LvqrRmCkoteeʉ~ B`[_v3O5G Д1ȷ~•c_Cߎ˅Ge٤Y.+^C}aEIcWhI&ATxZ"&u]ì>UF'#/Ns<“:#Cݦ3_G@l wIZݰ zt 9>ڜQ"y8Y 5>7 c,w=P65fۋHQK^;o6g~oTSб%ulzg_ҭ @i}Φ7P4jF*!/THsc#B ܈ Z֤}i`Y~c%@L#T_5,Peg1KSVS,Um}~:u?ƠIAg yNij-Ԉ,KNi7Sv%鹽~9QVNsD̛aEKӜX A |V1aUPDLD_B&wXX3vmmwV Z`ȹ?N& G2,= S"eb*@= nՃFDlwRk%Jp4ī6l9\|TZ ݟ Zٱ͒Y8FdI1-]:%4:r''ο>Tlqs.2 P5 vFwvߛm8Rl<|`4+$lB0jH8Q708A54<{u{#+r8F^S  bOVAn,dMfP=[=r^bM?2hx5zN k%ZeB|ikA^8Y?9$FabG:@$#!e"@l/ LS ) #腿uBϊkZiRhzC2[Y9t+Q_:zQ.#@jxb{8:K?oJ"8_H>X <+G(fB)*}MH):mj e&ղX n|wr*YB~sDH$-| ujEL,VGS3qGN{gCveS;~fn/L\\74;mbuɼY*鮰GURH,j*D_ {,nSJ(8?OTlGrODD1>WJQ$sɠ5SRTKKr( З V ۳rNOh/YIGkΟ&uBċD5q+7[GJu=oIZ*qݐFi:56()ܣ^4dBLpqG(4Y7 2&xE"@[ 9.?">OZYPO ƟJ>X>>h++r9$ ȸ[ޫvdPӤ%zLXk-c@vҍB Wq-P>̋\²qS|jru"Ly畵t_2žТG )F"+n慡WZ8s eexpq fSN:Sak"c_bC4l)? ^u?edgR&omcN|C#`1"[%(YmO-ȡkR&Px y+8F+ fA1 Q57Me%J1И) A\F*T J g%h$ԃ} /iɿǞrsZQ Fڐ,DyE L{~8`l7;+O*s8 :_"#hm[7:`4G\ڋ+\e0tXe~S{S=r(l<|Vx+v!a45f-fal⑮[o׊RmI񌴨8Fݲ;>|}&r37 ~fyR x72Y/O;:Gk퓄]ߵFߑ@ I`xN $gw z,AkH9@ 5{Ő.EΛm hvMBگY Ht 7 *A]t¿'$ĈD &YJ҃v]Qtd쑢)_˚*>RF+!0g fPC@#\tϿvFa|F]er4ɩ\`KBQ"ĝg+ў1jܬ  6IĠx4ga<$6{Ma& 2W[) wҕAL`77d=AdiŘ%mg"$~H7 ?9}|[w s`?9:dzkKcj; ZZ/Mp 6WLc8.#5yhxr,N% .T[sV2,ӕ.+h Np+m>~|*LZicpBzIRpɃE {Q'IMnrו[x<:gLQ>B֤Ɉ g(Pi$V/3qm_`فMnXDLn$.>iջ# JY,jk$L]qX!hnQl,DhHz eP>\@2ʟfБeQ  #TmMϰH2#{+'~0Wd{N2L:kwNi:vR"?yQFItFKH .pW4n[_@Q|ӽp,]Ue#̃WSrK~9, b,|ϖȕ,adV@S>vweitV ,hΖ=SC5:+~qba-)a1c.Qfh<jJY/1\CwWQF0'E+ d@ak·oV{&{Tf8nz j*^%.'tP>y9D:E_KGփ|MR Cܖm_OV1K$ -J= >VvDŤ=q"R(.30)W?o"}3Iֆn@"R3};Ɉ&mt jm 'R63BOB~/yYw% $NL6-#t@D;7Ww`B-Ԗ %zDe.h)Ooxaz'.Z?3{k;8I3'I +m<1% \)":`S~`E$cǛho} ;7 kW''l6hy1SIGhS7s[@FQ3{  +ޘwoQfz"GUΕ4yz Am֝t뮅w!34g'k(oSP=t<"&* _Q YכC % [h|'6[;[Z!D aùQ#d;]L#UTD3/(FN)M:KgZJOLZ`1fMhmЙ)LԽq)ad"7}d9x4pe3Z7BۙJzciwd;^rlbFRȬK"Ev'_xyWτoSꞄ\V~{cYŃ9a:%5ޯI9eT!`&xf`,@2:sԤ3jrRܖ^0*GD_z )F[ Eפv0پ|9V&&{ @@O&Eh|1;7plBCF &sX].k2|B[3L}5wS҆\&j5 3G}S? =5I]:pj8gQy$` Iyg,GLVr,FuȈ.`48ZB9V`P&G6BO, ^0GSԭ>i5K>m #O mR >v)ϛ3c3-yCnȩ#O"D|ؒsH,bD) RzL~kI 8H]/c]+O53uuד@(]ڳ!Y;=WЧ]% L ?vapV4T81Zq0SX-MR:F(݌/n|`p`jMo2JWC{;=ij6醻Z_/k\K2[.0[.yԹq5݉-R̶3@6osjbr{{<!cmqKQ, =#^+\]3EuN::VNhN׾=ʺ(<6iQ1r87|7f.͟b'ߕ[yF(5S`YPN"_́Fz״ki(:nݚOR#!6>9+p_}0LΚ{&+GJ\ޘxEJ!)p Sυ]|e?$fӏ(W~nT~~p=ZC;0zwe b)x1q /2_.;3pe7c( 0%g`%f^^֓PtC. IrW fKqRfgeT"ڐV.y|$j›/d9Y[;!Lr^ S{FCQ } LX݉HZ8~'CYA S`?"*_MzO{:or4ᑂ[̦>zc/'l e"'G|^")aOZU8S}T~T&Ql*90A2=o[ J;bAcʘf5I2;QJvrK€47W[s q Ӵ&b03.)t)Ie)Im~h3Iፒq$~O"tYV4s: 4}9 ֻw/ݚLΌT*o3S B"6Y/J OueaAŴ8 3eP@!*5#{jB݃( 3]fHvIwROIuRzomHkݥZi^*œS"ZfOh[#8gjƯ2d9;<+LZHEU+x+;"\I,7nsVT ݒ !`M:i,? Z9ߑ}̚y@{(*ľM˗#]Рyj}M۾IŔz(gB_~^@v&(K͐~xD+O T(l1rZD;|qBӴpD&l\pq)ػ0ȷ-u+>k:=M V 7px?(գ7JV*[YGnIJ, ԵF%P8\g6zZDb BVǐ v-'B3zwXt|< L\ ʲ]d1`P˳|&U(59n^SRgK҇trVH fHZ+r"TNJ}w@ܬ7,&/w2&\|UR(.r7B| ߡ1>N7C6]|2Iw: r%y˻l( Y 4흇wG)H,c18"0%w7*3[oGpGƚ<,%wl.s/̙qڏAY2K8Xu*&uI'.7o](NűIhv q4fu0~Nv 1;)WԟA?z[ xyZQPXReSy8tDNyR0޿N)9JY$*6%/OX^?;K!T0~3 7SwL~I?>0bbI(':sk/m;*C/ +0?-' {.-TdH[L6֫ d1nlͤXIW60VsŶWr ʞ/]įAH+ ߭)xu%9&_Ő9Yj' O5v߭X*!Qd"Rh/qQ*٧<#;*^Lf 1HmADŽ(u=gaA<;\8 1 ByyLzxC8WpxH#>=*J*習IH/iZ,TrfݚwyFk6 A:,%IWdލDL1ᕑuГnF.B\3~x÷sgzDxbvZf{{xҪ`:O*:=nlsjs47qȒl!AeU=`_,oX [n Aa UČ8ItsƪOt" o'A :k]G6H^\x\C6 Dv~TfJAoxIzɦv++ (L}, gzDؒ6̈S8e&Dz)JX8nޅW-AIjÅC|/W|mm3)C+9<:Dq)Peadzw:~_`yOGďci[+țGl$.Bvb0a3 $p甼_sDǫZ'iQͮER/I9`A5&) jA_"jꋨr Csm$@Xl+d'RaɠUmQYO8 +Ӊ~iQc~>n%(v@:0c q0 = s^+ȴg͏ʎx!QycFB nq? Ɉ\~(ip.׹\Yh9@$uQnpjJ`].tA +wDSIL)E<)m28) jZ@^[q,Z$E%# oREWOC&GV-d$B!4:G9"}}ieb~Ml.=yUi=HŞ? DzٺYNL 9C=m:2jT"kRT#Ll y\a?3_fg^Ae1&8VTY?zp#FOЙ)|PeuXGw n~>NJ bN[4ځ~uc)%{ yUP]OYq@X<GKg1*c Rx,IoKgѡ<\փ'/K.[UȐ& 7U!𠓩aаTDaw.u岢tGfʴ{&oۙк=jM8!zD-")S$8:tN) P% ƹ-;ُ ޫ)x& :Hst$" @Nj&Wlg.[E_*@Ygh7(!&p a m@Q|Zo<o!fDR/FŌi;w̓6?~k߀>Z$8<|SPpB=i3@1<7r9A8tc^qy,3c-` "B߬.=| U#iSc,k4N>x8j>GFSeY쳗./4T]ՀomX/DAm+n5B\)v7u5QSu0@Jwk Y%vTJȡxϢXIu)oZCO[1n/Ro*rĬgr\Mkk 'ydSmȼt2VQi_q 3 ݃UX {FK](g)4~eS{C!Ci<~/$p氹p]aE}yĭ [Qd餌O*m9. g]p4(I-wZnǝIJ;4[h["+7 Q9tOn8)r2us", JF%e(.+c!D=V9P U}KkԀ a!ы߀sVЬm iI`ITPh}Gz:P_gN[SrΞ2^$=P{).z0h ̒ ~7 (KjW];Ed7 T Fk6\2rIKP IkB實"nG͎`P1&~A鶬Æ{MzٯGXk']\ 3PG;P=yL{riu< 3s(= "hd$td eޭ{c ݚ}+WA^%ӇC,~?IjW^gѓL x2"Y ͹#\!͟P)4{g/8PҘ卟F~wӫjrZ&b<#)Я1Nd0gh cvGK>%sH,h7{UaP[׈_Fб$V+$rox-Y$ܒtmb3;y.OmVR9EQDaфM{L9QĤYa"5_p\zpc7Ubt:}ۧ+8®O$Ӓ{ 9;5l /kq-1(<&pbقh8ꇜ(IA G;XM.9ܨ6T\q>Qhn%eğ"RS%Cա": RR!}\*"-!WKKp'j<^+N&V[#ii 1c~eMZdIɊ6~r%L{ <}ӢxclJSc|c3]|fN:69ObXSPTL5 Ղ#'+޴;{NU~Ddc0BYA|okstGChD Q')P-X\-_a)7NVH~=5ɹ9m۞G2f%}'CշE+bo]RڏB=Qux_ygWQD}l)?XWRhyƎ6Y'ú9w~ Nַ`c1 C;SW<7Ώ /ȆRQ %_x0$O؈f%e@ʾ SueVCe1➃舄ibkKj.Iy Yz#cRޯui{ HĠM^̂F`(@VpG`aW߳Rgk}REZB|\UG%Zy=g qf<^ eIo^lƂ39Uprv+rk+>Non('_T b8?18+%N%샹@#7#@ ݴo߈ 5yC>tgSûٓ& Ue:\0Z"J}LwbF+,652e-YR{LՊW6CqrӆŒ&>"8CrC'LgftprM LFZyA'A7|teۆZ}O'_4zΎL*:ܜ,'sHM1+;"4:0?{~`Lb5\@@NO*X`FŘڳ`eھdE?+z0-0ڌ D)-(s<%\N:]k ɍLL ᇛ G-=Yb4lzGm7AJ"W׮Y;'Ÿj:), P/g[X0VPFWf,:%U[Yg@GezC"0/e@flVmSeHAVf1)j8TbQS 0ڣ B24!oAH\I36䑩.7Y#P]/] *I2#]HNm4}\s}`#-[LgՆΝHvJԔӺXp7B&5jY糄}=̽_TA-q= UE6Zp|Q(#61gЃ=Lh0#HfSmqIPKG3.ʘZ Q6D{86pU +)sPDEwOO]6 }Oaj4N=ЃZfvoL#Čǂ (  qRHԦ>r cd![E΃!O!:% O]>(u>Ј1i.1oA!XbY$-Pi?FcjaoDt?%d}V]%5aģm#aŻ>xOإСӝ6#D-^URo/ƖiӚȔE;7PmQ?P!ģJnI?nD𬀭s B"`Q=.PX5`mDo95>]A]!uӫK F@VYb,\2ĘW]_Ɨ(ؐ8h2 VCHiE8Nzps3'L\RƇ@ם#lnPt{|ɌeE=I0Qm(8yuךiNT!FY'> \[AׇaEfҭ`9]-/)KaV$Upoxfq>Pv"Nm&_lar30Aq&|3yhs}gɠb1AYG^= KGhҡЁA:'~ߵ5CǏJ+ZH/lbcBOtDGA-d$3Vf=|佐=lq5q1P0Q2Alg=Tϱ5$JȒ3̙~9Mj,ۡCgD7 r:}o~\b} xjŪfSjl;o !h*1C;@ vA-fd QhLQUz{@|Gh-76bp^-x5AFœ.*̀lXbcSo5^~MAp}jS&mϛ^˞ ~0jO$FY33-*d:DLF;CjO0):jI|,Vb ujFWձJ")T48 .Y,ŒePDI+|ҽiϛCOatȰ*f4-T!9 `Q8;:`Ҷ=/_1WvyӰQlU#hWrh!YdoGTdIX_S#3aD!z9%#W{&Ux;aj BP 0h")WVrR?Ѯ2Z:Ėm:(1M.lT a⡄Qt!6~8yzi馭~ִzXSm;X"s]K`5?mq?G9! ')pKm+!5Pڦq90}ƏLߡ,xr=rH%Hs=?CԩX9Cʳ{e* ܋5͠ǁIQc$I:+-&T4sGx<³(@sULm+ oj"ڧ[ݙE-rN-P5yK~xcY|,ʆƼB@!LJ֪BVC&E!ڮj?a`;(O}GK!p<( [4Z ~YF̀JUcx MN4.)>Tb ~D"'Pv-h e[a-PzjpCͫN TKvV3Ҕ-i [Cjܧ0XEĴyK$a,4(`ĜApި:dtn~]EM6r}|Ơ&xA#ޜ/ .!'יIۉk>)qNG8`M]mGlݪmg7;O%'^$c?}Y=*=Z֑>ְפ!z5?%G=)gݒȈ$9>|lb]]6 ︓?ֶa.>(ۍC:;[Ω =fd'4zE`ݛ=< 䢿"ٓ3=&'' VXλLxd'Ȥ;Ey% Q]K|H:"x@<ky@{ڎ?}E{u]/@QΫX9`POc>vg"4c$ւdz;Jka| ,10/8O;>@!w{8sUR-3nnmX ‚"_Wۯ_Yrq%#Uzd2n +"?2n =V F_Х |}ND"\>[󙶆-! sW"4 e/Cy(iQY(bG4=hC; Hj+jNmMk0QaVn4O)}o6ki{'JC_*ZIiG-)G&Ѱ;|?תOcܠ%BIW3iB"(fxqh9n YXt0gk|-tDVfֻ_o[`U!J~O' T115Cqڀd 9ӣ*FSp!l|rP1|IJ*K]}|wX[?.wOuATzB5K=.b`{sNQ:^I<*ӅnPq3^m`NY]1)<E(2Gz-cfe2WY)9L ݁[ c@m٬ \Y[{ '*VD1/vP`r6h2|c|QDoZ&@:Y6@xVgKohX?ŇO#zn.ByljG}Cxcn~bKFoab&j>;paHc{9c w",ĜGsjވSX׿y9C3?-ya~|X⇥^/MA'Rbx(}]7&;_1z5Ym% ra,>`U'Z>Geos%)I)n 8CJAf91NAk%8f2pAٮ{8vOJԽωu{#BLQOwi> HÆe90瞰X]klשmC&g QDJvB\ǀ}[o$֨yZ> ݢXkrDl{ߛ ugk~Y K@>%aSܩ5.e[/w7rJkgEr|L7MN+'s{3{VfCTDLZ{2E2Bc`@۞ϒ%x:@5G-VD9l/M#ZƋBDoK^\?N(`Z8Ɔ#~n+x^?17Iռi,F:}:o\Kfʃ7[͵xUQsWq"܍ׅ[7z9:3i,cĥڽȄޒqAO3mkT'4l Ǚw!OkFCKr1Ԣ>4FS`$5/o+9u͈МL\ i$E5d~cHM ?s{Y}428Y{nLu=7)9yg6 :0s|.]żܝJ_5@<7 \ak,&K'eÑItы]U{U^kqlEAry pY(zJ }ebbSOoJ<.YZ!ɋu\:t?hvQu4{KtԷ-_PkIq?JcI~|񅯍Шܬo{F uԞ=S {BdXvU*"=r.xz:nWLHzzum<Xˁ{A∈Na_^#R9]}#G2Y ޑ4P5;UT*1VP/<7 lJQr3T1|IR í6|zAe݀fgjP_`*A:Riɨ1á$ 5_}x}|P0% qO7V$sqԬ^{3FoK\<#Ex˞?3 L/ܯ([8޿xN3FDny <CA'/n YIyև +NCHrI_qYYENK*yxkʡ#n_J~};LAL|J٘-vkt!2gܠqTrj2ۧAT ={o9K1%)Ӎr.}xm;M:lO;W@}p%Af<-hӲnORMH/t A.|ᡱ $RŔOU90F {yW gA7uՏ$NRr.Ѹ$"C0憓?BUl fAʶBfI=6^s'̀Dwgu!}.7Ari{V a"1?_YRyv*GEkg[[[Hc !CH3r)Ϛ#lV7h^}} d.NR5=6Sm bLe9mmȃKCKfvDaEYy`?D>=\DRI3#\Y!dϜ&ƈ/Kk|4P崜cMC£ٛm `x:Z"%EaId~[+1Z)cT kr[d_OD?c>-U:$\o$ \ fV&z6XKd(~'{cHpný)MEI 7.tCD-4I,;l&XԴG!mrwsJ^%G揩X PO{J"4dJs7B` n\c&lɤB;UTL@7x>HѣQ̋дJuUț^Y2۫zEgpH۬lٔR^+tw;f**Dx3|M#A0!sfumhʅmic==b疷t=LdpvȘp cx X}lhh1R3]y0MJ}Ye \dEB *iKJU+3 j\ydKSQ!yZSK&Is'L\`3H˗KXCcVT qe4$UHyd16"?KtV:V#UMe z؜C뗭1Mo!n)롚;eזQ^t}G"0 !ʵT;ˌmݶjk~| n5z}'L\S||ۿuڔ M<b6DF_Յ6Q*ۭY?ƧzLIX0_&bɦN5B Y::͹13QVD쓔Z\O!hZ.޵xȗ!>Iz'2̫<;GM?6CV^&@6\ rO20+O-f#lŞeuŤAzLZTO꺰9wP)%̸-yKUxRm)DEDjE/eMG-4#y}I,SXxԃ.\M3dLmRYv sCiacR{r [4P*)W> o /IՂk;`W[\!7 9#O h\cKbL>Zj_*ƒ ]2gHGƸ>M}iiM`/0v]6L a'CЊCR;sfU_3)%1 av"xuJ t1c{#7ކr S΀"|z`gt2Wq2]{%ݽId"7rf`9]8|\/x~=usҞ M0ad~GUB,'ȫ[ꖎ᧼K+/>w9J1h+%ʘiG>LrX'GqSp}18 i:t:2J.ixkLP]Ѓ6҅9}I%H6"{W}>>2fkiLI$@htW@Zڏ %_*Bc)_/e:ePR|@Iw&7]6jZp> ַXGǫvraK-EXl!-5fpDMvi3$KOLȹ%YIK/Tei1x5:e<'DYgK!nGؠ/5iP- A-!Z`&Ul!퇸{OU0M¾:bƞB< I?'f?ٸ^ZuB5d#=.}NPX%@괛Gw]Dr1 +Zbvtv !0Ry0xc&4)_6FW޼r6M9XY xq{ 2x}f0̪wzW |CVAF@,q; #Uײ5TFN*dMG+J` } ;P&8@˲/Ph_! ٶپU =Vߋl+^l' O`sTJB͍vpQo߉}bK!L{/|G ['n_TyŶ{ԧ`"TI޻bӮJ^ܻ;2?+";<]ư)Mv*u$ 44%1Q!.!Tpfdsڱ)T)KU& $NRꈃ:cx3vt" BBT]8.\NVDF$9~ Tc;Lq*u)E2+Yz,ӮF@+@Fa&N#Z)Ǧ<p|{̠z_G .Hx_*l -c riT4A6L3jko,ѣC ;ѰWf Z-<՘f׍"Wvoli&nxWb؏,\5蠴]8MGs@*@=9ݢ;zxfx[yv,[ax+5n6UFO,}4.(\VCTO5؄打ֆ.nn吣,w/n@ &GbȒR+d= BUHC}JE(~/iݐ%AcI1Td4͍K;O K~TwT l|Ws;n T^򕒓ȬG#= |3=%Ί墬& X(2 >)6v9㡜p[ q9)v T0\Y^TI>Ue>M#:Ucă1=fTe,ύF2?~f*bbYQ >?e=s7/c@CkEho \B_@H>l@yqmlݏٷmEF %W4, ঽ}YmBR~ O6Q!hu&ՙ~"9zLN0˴<0\ڐ/up\# C mimf]Y}?gW 8+v s9sx pD %;,7~1 /823?5T1,Y+&r?I9FDzI\3ZpR# x(#(._r\n!JG+j҂*JSe^g4x(6S(S<@ {Rd}dZOvxs8/u $k"PBH<Ͱ8D^ ǒ"}`DaO'HVRTsw1cSD`VMWcsonr9Q)3N]ODY4Jf/Tk%&.5z.{-]ְTSь]/#R|Bz^|v@XkF @?Χq1,8?#^EXFĥ.E/ 7шo[%-P\^6(xr<+~令f]2cs(URI 4 ×P- g7:Z4J;] "2$~ab% xlT@!!q/y<.*8Io_p|_>@W?A.( t?z2l}2faޱ. yxZ Boa(s ~U-sĆlN.{'BFfΓNB˹shU~ GP4J4µfm{fKz\@VX9v<-C0>k;g ~wm">ڮ l9'kOOvBA TJ4ȩac7Z Hɩ$3FO*Ȳ~kP|DULe;ukF'D>)R=_u%7䫕=D'q`d%E%UBMqbS(zi"8RooUjY—jljJBŨ{ֵmY_,g_Kג 8[ bg&4V셀\1 =)x*OبSZ[ð[}el}qT;ݏG/6o7S,uMaltfÞ~=RD d2l66NtqXjڗ&9[%*q5DEu4 vʓb ջ@&6l@3?#E+]CЛ{&e DG8_`cP,-w ?S;모᩽㿟iJzfJ.]luCū0P k0'Vi Ӽ>p"h_j'2zfOz6c;fY0GzpddzIHW&l4*fpfR?EcĎ;$r<`MqmW̲z[V5XIQWo/}ϥPY72C C*Iq$5Sw 'ǑS=}3:#婏u@砠9*¦U}WFf QW߶`8 3Qg RnrOUN8yP<'10\18d]+xh<ښTbVގf9'Dfrnbnf9rk/ #E5k9i^%b%%qk[~BP*DR2u^CqDQM):˪߮4");32(NU~L}%8ѹv~Kާ*m& )G)K-w&_8ͷ?/y# Q^e+L5(Sٙpj2:9A6>hhUVjзQ쾈6*YGT(!B?+Xx~Q7~^(>F` t6$*ul7?7WLP<2Xr4j|'{ieJ,]u}{@s6pq 4 0GfmgUvnj14|t4ߑ1n=AZ#5 z0ۻ?xӼyf}TS7wpЗCi2;uLc(}[Xᾖ C uL|etb%Qf ! b?,sDm3S|M#6zW- ;0s;9p~ZE cx:a2\%tI^?fr\UA2I^HP*e¤Gzi|s@_{S61N w~2Fk$3~6C'.mT&)5\KΌDX;;,z+>.4$96Թn~Y#Ȩ$dXEeeFy3cqaApV4OhW0GIsуaZS!6etP+۳qSb5 &)7p<87Rwy[UЮ3^h@=㮄>~ NW.sN<3˝.B?\HwG} dfEߠMSz`JBJ4,gz".#{qL.~`L@TI9-{Fjs JXaE@J CA (\qiqH .gXլ'wbD o nA ]㮹vQQ h,TVK1FwV+ $IwEqWևoI]~Xp#](o!ň_QA#by#bSi> pWP> g#Ld -XԽ+jAwaޟ1@&W\APh[3&;rD,ֱ( ¡($ɫ[hH@ћ:+o,S4NhVV+B%y:MP&Ιq㳻yis ;nylUklszq3X]py~zKc{MrjgjQx9ػexUy.QLڄSwh*okl *S[Ĉ=C 1xBw3L3 Ӄ--P8mF.ڪwS2P%cمrMʛZ- }[lhS CP߽c~LHeŖo HNeJguaHRPg]Ǜz.3{P]<]D^xt`}ev]{Nh.8Qƍ~ 55&"Ǒ`,Blt&}$pƛ-dE^}Nepֹr7(E?I4٘L0,?W=}&0=xY𸺮gH&x)\Sqf1 l?|p,khao=u8q漈.lNkaN&6G&ڄzy{B,#csWOF[2bH*2mIPDTJ,.TlTu{ğϸz+v볖(uodVzF'h);F[؏l{1pN]'NkV?0٪ jǝEC`z]V28&aCtǒHlN6̑Åwf<'}NhFB<3lümLrus .6껒],$ 3v(D? oY#gb@ R%d+KX%ѐ!f-Cc\5jihJ"!BDC1%V7屫[ an ^;(1~vI` wVçؙ8ds0F_phj1B ܿ<1МNo7QBg|6ػs,?@j]QnJ«r2cRy$lх=YOz&J:LbIO0sgF5Ž=-]2iB VWYW0(ɡ VjcB#m:m`5XfTY9)L\j:җƿY:I£FF)7N_T]k^iK Ll*A}5| ^v Odu+%lNLvk ;8)k՜db)5VRs5$㜒<=W\@4 VK0Z`d ֙e1-BI*5MتIdI`nrAmT'%vޒq~"6]<*{o 㸼"^-'$(^P(SR1)^ג= fr0gsMl͉آ(ҢBMVH?ՅN8jr{<:%İ_'[x+Q!-{75\[wѨz?' w&tVս/lhQi^!{ K˧P;gϹM~gE {{-X>׆by=ÒT`)C#QΟ@>>I/HKf/ ,C6X|ϙ}`D͐%1s l Qcq.ܲ@y'2tWd澽icrI;bВ eCg7`go<h?NcKL x<_B|KuUef`:fU^6R\q $6THɞo+m# <<m$ƨbR!'I-r3jQ9rw y3 /.(Fچ,ΉRXMʹRHu~lZ!sV[ .Pv56a[<괁O>U sXA6< [Cj,=l @]6 4d1hkgceP̅ѥe*cf_g|11W >SJm}(ciE䄳]Egiñ&؃znmc0jԊ^PI[x;"ܩ3ؽ?^B-e@|K2Gao"q3$'t$0Fa hw/.]$x^?/\Ouu`eř~cP&:A?i JwEC`gMbcT B=:0zH"`~bʂx ӪuS a2ǫp.:isn.ua޳ZmXs/LXF$A)~o$!V1hUb^43APh}Bscʱu#kqd' BM;d-hPQ .I ޸Bi|( dA#;ةЫs|BϚs<3RGkܷ΋â`BZ3ҝZ ^G%C&wBg p!J6!`emϻn<rK篮Y5-VqDȎKO !x ݪ?J}8WC[3*`/g>4WM~u·󓽻 5 8VOwRhWODI (3X+!, +&| d7^ZyiI܎0E0TW7n؁BêϹe7}?+7pVj[Okeh`'S{*>ݮW,v= ֩g1#R`Q&b֗!c`2ʡ;S^o0eۢ"aL$9&'h9,pdGy~q(NL~7VoTxd67Z_^ycnơՙmiBFYk?@7%{Qı…;H#`8'k=҄ )#y Lo5TA|]_gmy᫕Q8Ͼn(x["%N5+z`pM%Փ !Hl#V-yXi3WB6c\  >.axF9Q ﺯ#2݃6?m ]2%~}D]rUPmtG͚31Bs$:Y8DG9D"e=eV}'mXM\?s^z_&dg/O4[>>WaA2g|d0C@rӣ:f/ޝWƓ0&~JMVp٦wB ȓ!@HjC1pEV*Ka³JuIHʣUw*ϲxɌ} ,NM9{0{)றy~"K8X +Y ( JA>aZp“պp8di9ilRmj'b T4;Ф5R^A;7/l_3$նk跔**Y,ش:5l\",`*p7W 852ÞZN/UݯV5?KU$D*u"H׌0hz7gON MW) 7b'%pbw Os**Zxt2 M¾)alJޫ!gL& R eTNH<*Y(yOT+U6BH'7"ʭ-i$/6.17 <[6րjQ|$b_X6Z:F9,h$4?(0IҰr<QSh.񅀫hүc2R o*42\ZZegckhJt3JEwXAx糃wMB])}`CF=WHvN[^Q>#uNJ Z&"L i{Q(q%2IPn{??o~XGhѣWj$yo4_{NH n1 f&gl8[Qc> '. l)챷 k!M."a E$?IE.XN{˨IL.xDBt`yHگz͜Sv7W2NYHm8>nd؃[y[P7lR9w8=O&% <]Wu7 fb:QcBKHKjW!zݼ7*ٵ^(*5ucᝊvXW; }}#Iwv|AtZۺ m%{[t v2YB5C! l,sNToS_}[3M^#AlOzF&K#G&wյBpϠ㓵)&ɢ3Ra95$0?Ϭh"T5gN7ycU//9r>&  }9o넔ӸmOsEDڂ$QKl-sf@' 6xwP)I:gg-5tb=X+ bCai'Z' ^wխԬJPj=ƩAv䷢ҁW ˢ浪@s#Mj#"<o7#@ mXÙGݏ>`2SB-dxl U4yړl/+YJ#/*B9 'sZW|>PnCsy\ 1{Qh||i&X&]n6ĦAY19p,<a@J9OKٟ/W-lgC?9> J+(ZVdClmGHP"7zoc.rT'nuʹ &H{K{][d1n҆þƱ$!jc'IB]Dir=1{JTQ-A TGBHڦ$M`,"S@e{ v9y^msxnGZ۞4c _znk|`ݠ rP;m! Pq ^.a2֚*̚])%p z/!*xzXrۙG94 )js+{զ *w8c"U)c˥RD]|wkr9ۢuIĸwWn$u8W}tZ޷2p8EY̳0+hw6ͻ۳U冝tYiH54CUpbM"̟, 8`oTTˊ/)t !S1Dyo۝Q( Tc ٩Urq.?7 [kOqiE%K5`?}zEMXk ӓY;HXlM'w^d ʦmB;1\ٿ[ޕ 4փmXȗK* 49"U dQ z*fa, J>Pi¾`ˇgK$w&#cldr"0J~D_XDa%KwH0~rOr"H[ǹFRtL+?77QD/m.H=|`e\-Lr)؉hϤk.J jbmzz5KzxlD;x]ZaVC % ,Z-1%ꑁ"&oz}hR||grpd]Z/*t$@;IiˡoCMo_zwѫ4]ԐLڐSC@TAF؜#V>wۃ]9-߂٩K{ےCIs$c nǖP]2~csHWY >aSHh ;?lLX`]a{Y٠ :Xq11Tz e!2Ui-j$ŋPil-iW9rZ]T/=+K?Jb +2D2~Hp]Wg$iJ'JY&wing\cT_j YI\ Ma,J#S{pۨG4c/&\f8.Uj/Gݭ2v;RRΌMN['[Reg1Pc)Ȧmf` z\&@! TwZxrleY/X;IJjsdЛhhXAxZ򣅛{/Pi^Rgz~o0T6% 8g~V z㖆cuhjT6Ukg# Ѐv&* t=u Z%;$o[9]DBix(=Sy0rш`t-څvqHFH t^ Ο|sC°cN1! !} \" sS,E-4r zptM]rĈ4ņTtB g$4: [='$Gd,JH_Ȟw)jmb` vQuOQjfBMBdV}r}¯F]5a0{8LmRu 㣧1TDtLBݡC#]Nd]cwQ=pi3^dMWM7<vi(l;vs1"-5t\f >rBɋV>4 h\PjJӪOe` gAE,vxZ ;˥QC?FQ&P#ܲCG&^j&31! kã'xӠO)(W o@?3 Q3bqI`Ab !٩O(շI!0/Ⱥs P FnAմ^*bn0HPm٥;e%䛄T+cjjc ^R+(ٛw=o|otjC(K0NߘzKogz`9wI!?}&8|Gٌ7RK;#ǪN8QrťA3vH阇T`_?\9*,8i=*|HXe VQZ~fJCŭbލj(Z:m;p*ۯ^GC7*r%}gX=O6mb sY0<rL)!tZ8*-,©hZq:r?Z봨j'kQH?b!,~qK\ 1ouw5 92Kt.|ȳAZԇfi:'B/$>|Yb_{bd<39@h11D=i&8m;!%t_>ьlrc!!ZѺS`lpk1,CF *ʠh0 /t>BH #G]nɖUU2c.yZn'S[:X]T`+MɆlu)qLd|U-TAqs ^P$Q*Jkm;Jㆸ+9)LzS/`@}@`Q8Kx2>G&9l%rAQV$MmK`ͯT Vӫ16.ܮ*\q^L Z8 JĹ y` ZG&ts*`~K=(V+!R,%j{S+ݏa,КMGI6]dB(GRl!r"i:י[PN +9O$&98)H1PCy M{?ԑ>NWKxXZQ${Lj 2"SZ;ûsP0cLN"1&̀2V2xsnl-SC2HFYAE-nXvYU*߯$&Oǫ\ܳw O]>>CPNNt?FKd^opwfߏ@Xms7Z_BK{-}D饲EZv"N <$wB,N:&|tGyAg}]Q4j϶,fSE%#hqbK-zHM[K9\ L!ֶ?ž jXZ߫a-~aciOȅJ%xj>akj= s p34eabvF*pGG/FstdF=wH$t maaY=6[JxGS5LR(RtV5+P~ EdHS ܝo}mBWߍ MxM)yOB_5JU;ҏgu3JQZe^oI1le@:p^_x8m.wwǔ[*0u5OZҁA'ydjm[dUuPcm30ϖE~bk4)COGf8Bn̶U5e^6 osDGq^]Av=;kb20݅`4M(.3}!F$W[ES3 A7ͥiRL?1{xZNAt6WW6J8sȧ"M1ڇi#a5qm'"^D_JQؼMRi)\,Q$4nST{^b% lΧr5bN8e[j܀ORjq#E_PgqVӪP?L0W||! 5FǭpKA}T\GF$ :J5fx"#_ JuEb 95#=W)2(NazgdfmouW0/W~Օ]ΘBq'@ߡU e3g֞nҐ]J'& ʊ_y]w}G ԽW{nqj ՟LQq'=d[w~9?q1&CM?%1/Ǒyu ŭLu9@cݎgۨ 8l`1ZG-Ճ+)hB%E\c#K)lSiv{'x'),SC$>BJ.msu Xۗϳz#dJtQcO@i$ͤxNvG)-;'`Gwl̘M ,7(W&Z1[Hu^tQBnn89]Ag&Pȭ"kPS0Lǚc>5Nc}q'GM|R=C6xAi\E ߅>)FfZC r5nx/2J9q0¤#%HNφͼܚwesb_.RȅH~6mybμ9q+BVڡ[.Dq_-ZVʮdzzst۽nK}7Tz]e_Ӳ /7H?KQyo .2Lm%QKZF_* 5g4Mi~TR7S.t]uTGN,,ؗMi=CgUvӏjnC(T޽E+"W8E.W%i@.K jMݠ: %`-+i$j>N1tT!NHq !-sSg;UG#ҋ=n'is(QI4A '{|ݓ~??SϢY:~b:|Mn_Q xQaT&&Z9K@УMnD0PV TcН;*vmxJ.\ro@7`/n_DklD&:vT / u!U1:),&1f]сkq_4K֥ qu1I>bӫTAlڇt\gaLw);x$wtXrUMBX}Z2I=CV2IVMOGOcRu lrO5BZ6`PkHNsWV1ߝy!mT&VS2MY{gy 7D3|A j>/W(G?aGʼn*>קȱiE[rVlc!xiLckdHyK4Hqu*Q`6#k A(J쀄|.a_NS)^~VPT$xSL$ c5"*OoH/7<(bJRۡzQRsށU v}ɋglg=Um3與ƝnCGa)FүLβ|lJUg/?K7XqSScjHhUd6#,Ƹe_]pu"Oӟt nk ҎՏ!ȏm!R>;NssZR DYdX)6n2&b(`)q[>C r[9{9^)qF4oi[HHJf;ePIڏIkܒBGToS7\A>iuʏ`"r56ky+Y`c?ՠ"4=8jx}tgAf.%˖Rq$d_fvw$b"++*Sأ$(}`a 9P^"A{[{(mƽ+2hFPJ]& FpT6Fl^i(d!GgJԲJmx;#Ro/16M>iu34 yQMRϫBhIZ$Q˒f 8SײEZp!u)7lCˍ.ͫo|RlM{b(,M5ў @̀B#RE^ @c)Ɏ|lkP_Y B3Ed\"dR(XtI`̊tٮ =ܑo= ֯UQQe*%P2iߖA-t|TR|/jP>wnUXh6'Z9ꆅbe% $m 0'mqٌSF51rQ`/em%ܰYm~V}8M\'?s=k[rJ3ul"K,ϗHIM@lAA/h0; ^jjR 9y_舘B ѹNOt'5Qқq]c.4`*S}G4a̺ @#YqX՞Ct7 ״$la#nC*/>tg2.52Ԅ@xm+":>!p<<́D TN}ƽ.dLKꠙ/ "/t}?@:ũ/> j6s5>ڌ$H|cs!hJ'*1X޿j+aTYdj6Y^} K%qE=6eNu3' Q zOJ Hx{{Ռ *Agfff)Aףp= S@> ףpiy@)rLASF_SpecExtra Bytes RecordColorsColorsReservedReserved FlagsFlagsIntensityBrightnessTimeTimelaszip encodedV:by laszip of LAStools (180131)PqI`B& ADMXDMXD^ɐ)e3P>Q]t4$5\#tTu+ ݭX[(쐘-k򀏟ۗydJP@IfzD3D-#d&e' kf(ftz04ě7HlPi,< 5rS&!Vm|IQLldK lNOA5)\ɤ9}K,t]B` S Vi(L^y\_:-a \gmbe5ZW\n~y@i_q=gͺjXK~$qRg;%nWT]jG:2zD]Aܩ$u ]$[ˁ)>p,=L /hL7$H@[0è7R9Bj`qf.є ;2XKP)Og*ftqNpqbtXv7t5݆%5bx@}hetxzdwh"U0D#1 I( ̉30& # *kNJ `T$ɇ Jy| 9 88N`aF][e^fHHSHY;H{A޻Wk('Y!l~Lr3d!we8a 0?;-oIG+8,z.@?@η0QboZƮ#-T<Q)q%dM |׻A=[|R\/e @3/CR%k&|A#OpYpd54EO|iv+K5E *^B4Cp#DǢfq޷D4G-O 4|%ߢYo$t p6E2/@8$+>T`=q-4+ehߎO]m= hXo'VZfp%hl푲X7/U fr2p wZx(ŔK8.n:M@ YjN.rʨ҃?h 5YeSRUIRJm89V T{hH$kú,ܿWR5혡qF hx,B ŝrglLM^Ľc(=0㸬~tīk &ȯ56?^]^|ۡ~&U'^+R#{+Gt.i+M^\@OQhVW ۉhTG 7<6 !:T!of2p-E4pm6 0WQ&i(Gdq,.̙)gpC1(t:{eREVqa,C_ dž*R=cTe5CncXᠩ8 G HuR0A@ŘEOE ,^jbSJ?4Dωa`hPk*DKtKV.W( OW?mJ( MlNaDANt7n?LO"lF.:7ZyMΥ'5pNŸ;N\Cӄq") \hGx "PD.hY]٘t:}f"E7ԗvnN f4iFPZ\!d:G|`& +a`=P F}cPch!+T:)z 6R7ydEIbG]ЀBԒ Ӏ! Fl봂 lLY$mta p_\lSdt4Z5݅̀xCZyZhml*_g b,t4t>dķr&)6&@XgNCX6yN璚sfl4B\Uә@[&SMvA*V[sLZAGl4/1*D8 o(tm4Ԟvh[|, N@|Po[ [nzAPU`2uⴇܗDu 4ؑR 0T 65"OI$ R (8 I݁ȀoGYj3`S3O-s·*f)@tO.k+7Zzq,#G͜"bc7n¬97X*̠qMjN,p-WzzMzMNP؂ B.(]3Qf5+JRsi  73E:GjAa;a{( N/NXhb₨at00 h%`V$QK=w?'@PR-HE}[lvFƥ[Bד[B"`M:Yn5Oc_T!nu)](s7T' m.1pk@c9tBDt bdd\!+r`bQ +rl'rWc0_}¹4ǟп  YJ@;C^*Ё.E:{q[ϊ{z1ҸNsG9{-[&4)?*'PVrC٫a U0|&2 3pm ~%ofG,%9b:}RuA΢²Q<>&E/ԿAHt#k>!#{2ـ׬㱭Q'FX7&U `7[<ƈ2ie`ZulVXxů/Xc gOVȍikvkKDT@'- \W|G8E40sOb=2Sm \ 1) tb~k2m'e*3rW[<"D6aWVbl0֠R/ƥƺdhZ<2?dr/ z_N}AX"41>ua09Qarcc!V#$ [`qN:SY"lF^-Ds*Y@>t[  zF@f6,^YXfĀ sդ[JUۘ]ohg&ϚFe0[UZD7kD ivA O-Rfdw`W:O0lU&arx:Ŕz'gpDN36s/~K׉ĚF"V "\>"Un@}cY)I$Xchظ"z(K3 ?eF,#/im hڶ*tgd$cu>7vZH \ Or>H͵:yGlo5QLFD?ȳvaGA=m m&_"YgZQf\Uc",JzZ<M(BMEX'E,VG|`*lDi"{]i~OG Lה>4cwhOo+1܀^t*v6k ?O\xGM6غ8GߞH=&9W#CcUz+,tOlsGlЛS#ۉ9Cj9jрF&\5`I ;X4j+i? jQ >"b-ڙLaM#4m=q)t_ݎPGG󷍛B15Ԩ9{Ho6ݝqOe2pX!]T~p}Iv? f_jxƼfj[x{kJJNe>\.p 7c]B5\Y2HiDO$!l;U9;HϱR>q?+cj{+5l-N -7AT<5 U}+,? hVR+±rgsA7}ጰ\ܼ7=0A1) "~iv5GЮ[MSFF;vx;A |;mڽG*|}6ONw;3st8;'\TWIXosat[A5ÎlPbmS7R~IWs,Kj#Riq,']ZD֣+GezV6M?3iF oo_h!%ObZ.G%VRf_HIK76%ixs+-iXbD.d$CʕX󘖮`Ih䛔|/F[T[B_|բdeL z4HܽZ̓>.13uD(A07#%{ԮlA8iIG߬O,끻59"JӜ,|4!rO2?D5%2Ѕ}~KoZ><ʌA. J!_KR1_N [+^GgY3rfLxlm0b`HXKA!E ]&tq5[ Kh;v{%Oؗlgт>R3_P(o<9!R~ڕdDbէ3Z0HX#ztcniDTF{Qeӵ7"DoJB?|֜8 E씢wA4RdV\ԶW4ǀB/N%FWpL)or eo3$>6ezİp/oɷύ$Nf]{+{2Ckz/R_\igvIf!^SB Taڈ!$X5,5J͆쌞16Fht|y~sT{%C1=mվŇ$/ ^: 8 :eQ cҙU۶V8_ {kF!=7M +wHRw b&T#Wlo蝒֕252inN79Ǯ`:&IG%jOS- 4+KK!q:%Rt{Id/P Sh3$_Pr͋HwZͮ/xen!a|v+FI_^آ!"񶔘V? "0 6w7d.'pĭiJF_Y܁@eDɛ:Tp3rp""5T% c"3musd[[E׿|%}=t3,;ژ 8%P#k,wC]]ޙqQޮkԠof7m%>Ҧy& *fu҂}ԏ+qP_u5v.{B+IL1I`dkq 'H:/ p/Z7z1|V`KytbKD'+f(_jdRlSS]$sa'V#,K$o͑Vza(\MH—QU۷ý"N/&ʿfsIqJ~uZFTJy7k@ X*sj|"A/d bG&X13Il*K )tiwNBt< u vhwn7WO-dZv(\XrĻ1pq_y+>< PĚN T*(Jɒb{CXhb>#a3tQ]ӑ7屶?_v+Xj2Muv4"Ujd+(^̺x ¿G>0^dSeM D[;4ړwW N8ОYb=@?ġf_q5ЪoM*egp 󖡅d^7$poJѦ6lǣ 㠬 H u= mEDۻJTRMd)OGWYwuO\ .F]0NHpi{9'M' }E#w'L* =U, -WZR" { ݇(rEȂw~k {Q\i$R.i OZ -]nG+]QzŻX2eԯU ?̼CTr,:!Tцh{-7@ ^K$YmYa!8)/nLbv U" 7fi@jTe)jG;[a-Ą4C,$#IRKۏ2*}t{uD0LS ^(OU s@6ټ.\vDe&f:wS*33{8}<|GtSuo|,&18m  (|`v`j>*Mh8ZLދ<̵e~h7uj4cuZZķ;QK6wI2n0P80(ڵr|d -c<@61#9pǪbu_Ӧ1H`?D~^4ЋCIhhfDrXx\`I^Q0Ϲ ,}Kf^Ҳ]ʾ3斷or95%Ukh);&'nG"}jv+Lars[=?)*ةCGE!kh$`?A].(J~+[i@-z{8֗(2KqEQPI]RTD*g ȚoQnIԎv6d#ZR$NwL`@X!f^_͐(6F#c좃39k@kͲ㋝N i= \5 a.&lMP : :PA|RCT _,MX)x&ˈz}+3:3t97^$ӔE(sfQ;Q*nʞzÑ{`gߋ9o]},eH~tKHs{7gE%~.2sz5J˺ƇEw/[eC8!Z x .MgJ^bf(:? n7ۛ,yk<\^DB:Et4}{/G;JQ0r淘 gC@1` q݌-3Ed>'JWڣ ?cm^ oV75p*ڹ6fI// 霘:{h1,we@a=5\t$nfpo #nz]}@ Y_=4qөѯ⺘ u{W,&>jAzk2mzb'\BPVnI`\W xþ@hJlU$"oj1h%+ZO`kLO]jZuw#" ɋ]kְp cii+Ѝ| fW$$ ! 7ꄖTԨǠ-ZכYV.~$;Xq!^(7`8O*.bg5o҅&ZvS%-ZV!Qzz Ԅ0j"P, da ?z +UwuF  ::N[ݎYפV%ヱ7&iQWk ؐI,}Tî*=Uh0ez:yB%y\&F-64i *g>'8Br{43؟]0vOx_c1 甁Y hbFjCsud0d#NtݿcDhJZej;A4by97cd?X~'aCiI/ ;*.n':0g|z n^p&m3-JZcgE7N;G2[Q0:n[wC9. \/YDnMYvKy%aWd!Q-DAY*k.j9 <Zه mEyT) b/U+'&x=]vMvRYRygb[tϡTgPurd~uM1?XHg1nh'A j .`;ćO9ӆuH^e€ sDyqO4YbW*Qā~s3rS4BEdŗ-9tfU'kn2UL+tAA9U?<(bOUrJ&ѐN˄xO,0}`)Q Q =: ny ]Xfc .gu X> [Y5VV#'L̮n.U잝&DAfk0uxFf l%eҗ0A~_%=ij Axtn ?*gøɚ ?̜ʲܡ[? iMg|CH'ԽL̬+p>COުӴw<Φ3#BZHۊ|ߊl>⍏m< W|CУ,ǭ8Kz͐TH.ԊS'+w-A3XNM`hsvh0[ب3jjmݞFD} 91}.RYL8chȎq(vs$%BM 93Sp?ƕ},O8SV/lkqlʅQ^ګT x }@GWG 2E~NaE;NAf]b_uOqԳ'=sUth*OwJo0"ap4F$(\tS7  ϤEGF?U}ewI.=U" $<Cq8l*1FR$\$ڮ5mF*I:-vÇÔ ]X PɪRqyzLɶ ]{9H`D|I^`cW&xj /r6Wq`[Z*ʟUX ɯ<s9É~w8=!-ؤ^39i7FYw;eǧ98+S:;kg4 "7 1Y _D2r~5IA.ߑJ1o_Ɨ[e`Ҧ ԊR[Qw8>V +hb$nҖeŠ^G2.㧶!r}:?`#Fly(l_P|+|쮄 `:s%AU(C|@u;rw4)|!`MJkXG{?]so'q0N)_n+T/jHQg[FLkjw;VgH%ok P1zNf:WƳ|oojJ̭GZ05`?lK#:CFd>zr4yiBDbqǻt.:XdV(žel94e[[M1_lܒ2<5jN<1GT҉1$T_G#Ebq 'CT-/IҜsmkѢ,G7n\R˞$SE”I燼dqA#zP@GG0cj V|>gȽ2S.Mwv+졯?C7Cq\/̵;b;:I/yk5ѣ/jߎ#!I1UK_R >ۏi:2'Qy+'BP{}xw#mlQ]A5qrh@N&}# VKR_HS5mH2` k9+_tـn5 I=^_>Ჵ̄)Mx_ 9Qdݵ/gD.SwBoP$S`Ǟ'j)Q4DdRHyՀi#Nuq|Mdw'o5e]$\dd2Lomb*ko$eDE{,JҬ$1M| |ڋwD$+?!QS9Ȝl*vU_QK>%oW }s`F<#<<(0Z ߲;2N \Ӂ{jJz ôNR0\)$ʶ2f.5ee@fQX[ELq`f-{p|)C]S'4ڎ+;aB5~# K_0f>/vD/FD磻tK_]`2~Dph󮒽B!f m.:i)8h[Sw<y&v[oHTu¬4GT1z9*Qĸ/ͯZo\] 8gݴ;&Z8' um*fgޓF[TFOLZ3lE,(P&-93uM 㥚B!SY~R  e|n~.eZk>ԡ C%)~YS5M )8f}2M&jkPЎ/F۪cDΏ9jeaik> u=2j,V,sr6i5՛ޏt.I8ˏ%GU9"Trj1=T "EX_`Xc%rF^l0hsJ}BM\a21W;:Jh6kj$T+$;w>=Ok#d^ݧSXDl= j|^!-vH^}֕ӁR#tߍ{OM#GAylKdv?@SjoyM#=P}qjAV`oCq5;^IqP>lsRjn9#ΗO38TmDٗycR$[b߯9jg:*M&uIzwBzCe:F%Cp d/l;ThxŸ?5 ;hT1&+Q71^k@][-(2-u'QFKGwIFY;0y7-nR Rf*U+?f`ky`6[+P!s~Vib0Fqu*pl;V >H] Vt[TT@i&m x ;%3d]4p6v)^t}+[{^w~lCVu]_k7N-덣+2M[nRG^}$Kr@=J:yqpd4Q[m&[*tz4<#Le䘛5Rv@.@"e'`=yDZMG{4 ۬u:ׁnnK>4*7 39輮T`2u QE/{/kl@)AXNKr&4@'s.~;A8*oTbiE+e~.lx +>Oi*,A s5>vX+(oֹPZ95`~D?Nd>3lXpWoܥAs@4T,W*L|' ™ LaC r̠dw̄A;N#Է(#ts#Q.-ko2FTKQZ;ʆ S1:K> fFܠYd8|㥛Dr4z:)={uX嘯CXfM#d=NQ'Ylie{}KAa}QzNtprg2Xu ig ]̕rvUQ[zX5u0Hdq!k)FtW9l< t/VZF]-&1tuu^l8 "טNuʱRc)]}׿rd4{dǰ6j5Kca6<1_9(_eKK5 }0FKJ;= aE͊M8lq`폵`u(u1}<i_rq$;?vaXՒMkʲQ0kiU`JX_%&or^8ޫlz%x/d=VB!(_cVE#.ap&tFNRrsZ hƱ zt]iW$>|5!T;]27`Z q3MeqAhO$|4 O}xG xSe\sQ j-6tYd$>SQU2}B?-ɺ5- Fo./$\ȹ{VjhBN5@*#{ e\In<…F &~ҍm`-@Em\2?Cx}G 'H@E"J7B&6!P+'YiAkP$i\`l1C Kdk~}v?J]s.J}nrBT.Lq n:O1}{]y91 ͢bI0% d.!+حd,lւ@"0.43)*ri'@T:l0k3ެO]oBSlZ)_w hÚ@qGh\%/WQE2[WH,/vH`F3֝X|M7bZAwRc/z<: ˆ !-:EM2FvʫC+ 'BMni6җ2 m\ͷibO)tQn/AҘjm  e Q\ ؖ2z)V穀rvMh+}X9_e! Q]*BzPqsܰڈ E7eƝ8"Oվ:E:&~\XڿyGgӞ\b_2ض)Yt>)`6E&2.u7HX1C)5؅'oAX`} ,T-7)OgT"Dp՝IC0ZGfD9?15H% 3%Z0"Ib#yjP85\tlס6H< *RLHu 6<UuD\X;fs_![AՑ59FVwcBكYan'?%ab͍xLSU.mY}+>IY)*8skg/ do%(h$8|sPGEzg&V7/"{Mׁ Bs>ĿdD4(Gn]JKQVGN/l Q3exO#k7zL!''P8\14Oۉ2fly?A9 (" ! h$яUBmWt=4]Aj5(c0poes'ʰI}m%?qfUU_ 8e8nt,ktef7ۻ2y Év=Z4<O^^8B1TeڤB2+ #i16&N8sj{o$7oxV!Phef ’iʩ9uvr?^(fn|`6D$8@vkRL׈ col`(ЪhȋHlQ L+vذQ|&8XjYm@:Wmgc-k*HWڌT`v9f)Ge(Byp (-7K3N4}\ԪbB_ҹ3Yd\q`;+7>X=0##Ɩ9(`A(w([8M'P`_ O7Ij&J\MyD戔b=swNp&Y3(v5qbz9D3+VBӚ/W!Kqusy4H0xiLIh_BiS [1^g] H VVϓX<?\+YGaRpd*Jۗ*)E}hQk6=)e.ǥ;rr߈³`xpP1[ؽ[<# 7dj{,Q#ʎʽXn(5z*z$Xý OLWwOOU;FKegHګd PEiiTۗCl״ r51Rp4}KFykz-VUj'aXysn.V%%2ٶxbY?yW}cRmGqNoBFjQOu>% CTXH&@観`ڗM QLnb3e8?)?|-}7ЫN\~o"DuZ}4zdYdA_j$׹I$mXb\:iiasfex Y9ǻ%O-$H5PB_mS`}0[]Wp%ϼ+F!wiE;hR}fFӵ6Ҏ^vݪ>_\RB{EZ:uk Y9skb~ߨWA1g=# |=ҥqwX0J͔Qꉽ* RIȵs~cI.tSC^l<D"`'O%gY{D;B۝.|jMi[MM[3XSM cqč68mx;Eu 5g3b_6S.5qo?⧓FgPԒ8$aqhfthS nG#ҷl!0j"̕>b#< 19tl= 1X ~OmjjB[Yu*:W۴8YE}'`jjaՄz7v[F:2N'8k).t{vjIx}eVIKʙ׽~^OΗ a`@ZT7 Tq~UUyu-Z`{l+b@J9% UxƿwV< =EwPmx!޾.A /qЩ"! gy '  ؽh欘S eG3sf^:A`6깿#3WNPn,ae;c`}tS:|6ZXF8$eLZ+>3yPVd4sӦcܨO bjYdYAŠc َ;Z_ZcX|# ECl=ݯm,'Gj(H}WEK9xt]@9ipj^Qh'{!ZI߂sE;Î'Xow M捂 %bx.(Ph=1$=+F2W3‡)akm.*sj~쇘JTzk4*0BVIy{H$w|cdK&7nWٟhXTn˃&~VHV\4kîة,Uj— Ε(u{N@n/ʶU(fOux@2K0تTJ_'ȼ WeWtqQ:N{d1}H.eZ|¾ ~wva:3I XUcL`" 1/;n*8Ǻ"^1"IyVhyEl'D^T$MvE'U9AM"{Q Ka \iM`NIuE3즍+h]>O16 AJ`}˜x 3 '{tZ}il**´%NBucY ;EZ԰~y|2Ovy'nK P]7=1N{Ag+[-ͬVZ t/`S@  bOtk&{*Ri"L=1rT>7naNbUCAYW^л&Ks kb+ǛMmjC=o&;RARJ'۹tO83jE/ 7V7[ C`j0fx,`=dpn!Зej oѭl,#7 H(9?ї+2}2JYSrv+.610Yֽ޲bb}{}csC'cirU^{G%J4uiaZцA~R&jŞtW!Y|SmpurHca>^ BMA{|ĴYڻ7͗;|~[&VF՝5Wkx~6aY ! J Z4rB%L} xg Pd9ؘ)@il΍wڰqh[.~^MiuM.EetQ+0'P8zZR\?o;cA3ǛM{`cU M<')+hZ}V7(hR+.vmx }2u8/#!|>'ͮA$NRb,#OWfwA/eRنΏ33RCM#lE#KܳɇLʪ'z|#t;ғTMFneJhggf)_qĕ5iSAōS^]5?ГhugU.bygۏr7w Գġ*8 :9Y*4Zs}Rٷa XC8f Qps<oUw]ldQg%٨l#w=8ӸKPbFDQ𔙛e-'eFŏv/]d[ lͪ N ] C/}mkEQ잚\v9E%j] ,7{gl60޼ѓ*p`wu>B@?o4Uk <\)Du9D]p?ÌkG ,nroE8IKV!.-O3$3A^"|R}jMʖ/Sxtut#YE3il kJ&R>FN IB7q5rM`GŠpdg̤#XHVMRt03?2-(9|U_ss鹷@/} 9|2VFaGkKڃ|~9Dq@ *Agfff)Aףp= S@> ףpiy@)rLASF_SpecExtra Bytes RecordColorsColorsReservedReserved FlagsFlagsIntensityBrightnessTimeTimeI`B& ADMXDMX_Q4U+ A6BD6BD Jv z]l1 Aparparvu+d |:6 Ad`|I~ݱ; Ahh| &0 zX* ? AcU_cU_0 IM C AZ_jZ_jEy(Ik3ٖF Ajd}jd}'5I~I Aj_|j_|`7?|I|L Ad^zd^z|)B |YIO A@FJ@FJz+K |7/R AllKGF? |}T AGI]GI]?dBCQ~W A3=A3=A% ~c۠Z Ae^ye^y>[ |W?<] AbRrbRr[P$ujI|>_ AffB(s |5b Avv-d2 ~Fd AhhD}a A4AD4ADL "I|ISte A'98'98L  !Ug A_Yq_YqL7eL[ ~;h APSfPSfM90 ~j ANX^NX^0MJ:~HP>HPQIAl |h ATYiTYilQLR|i% A9BI9BIQ_ubI|"` ALVXLVXbR%mI| AxdxdRup ~' A,D=,D=RH I | A\]v\]vRq_Ix AITZITZRR  |]: A8KJ8KJR0jQz>D AT^cT^cRW)?bI|TO AbSb]I~_b AjjS{ I|#w ARP[RP[ S T%I| AFRTFRT%SQ |?D ABMPBMPSC Q|zԴ A<KM<KM ScmB` | A`SP  |+ APXdPXdS,{I~1<ҽ AyyT~I|}С AhhT2e#I~3 A}}#Tb`R|Hգ A0B@0B@TaR  ~ˤ ATVbTVb TLQ |2ԥ A__t__tT"=} ɦ Aii}ii}}T]0aI g ԧ A4BD4BDT5cI|_Hbݨ Aff~ff~U8ȨFSI~ A:GJ:GJSUCcI~ Aa`ua`uUf! <| AppU@KMAͽ&AOSZOSZ@+d9Q~.)AFRXFRX91*7I|e+,+A6@B6@B;z8I|OS,Awcwc8 QJ.Aje|je|Q+?R e/APR`PR`Ry z0A;EH;EH uk Z ٴ;1A4GC4GC9RI~~B72ANX`NX`(c`3Afe|fe|}I~4Acc/ŀ45A5FB5FB[i>@Y7AETSETSiV  <88AJX^JX^ڣ 'P:A6BE6BE.VIO;Agpwgpw)>-=A9JF9JFe‴>A:PH:PH` =@A2AA2AAwE AA\dn\dnrS]E [xCAzjzj'NmK'EA:FJ:FJ@vOFA/A@/A@6wR8%HA4:B4:BX&A $/;IA.<<.<<v zDQJATVeTVePi ','^LAff^9< vMAOSeOSe?;F i(kOAPRbPRb7|R~0exPAbahbahW͟ GyRAn\mn\m&Q~SAW]oW]o&7  ˇUAmanman3I|#o(WA0A>0A>ġ8|I|dPXAjcrjcr|FnsZAgevgevL4+[~H8\A>JJ>JJ+~WEI|]AiidNaIzum_Ajja`iy  aA5@D5@D qdnbA8IH8IHq"eūI|f,dAG=QG=Q40J 'ϣeAbfrbfrJ Y|gA.<<.<< <5FI|4KhAFI.jAe_we_w'^!I~A<<,Amhzmhz![֪3|z1?,A3n`R }#>B,A8GD8GDE  |pSE,AhhCc*֥ zz.H,A:>@:>@_)/IfGK,A@HR@HR•hOI|ʕ[N,AaaV@ |4_Q,AddV"I|3-T,Annbj?I~^V,Ajj?C̦ ~81Y,A0B>0B>1|٥ ~[,A>PP>PP&CSR1],A<LK<LKS,/ ~Hy_,A8CF8CF ѳZia,Afhtfht` ~swc,AXYiXYig8.7 ~3 e,A<JP<JPQ |v%m,AOV`OV` W{I~^No,AffMI~D[r,A[Yi[Yi}wh |i;u,AZxZxh~|mI|gx,ANAVNAVmʟ<I|z,Akkv@RW&z},A9FJ9FJ@|Ϩ~Ui ,Aedzedz'{rI|\|N,A:HJ:HJrG̬|Q?,A6EE6EE)I n҅,A`br`brk  R,9,Ad^sd^sS.{RZ4,A:BM:BM,(m8I0,AENVENV8ChI8,A4@B4@Bh}I|%V A}zAŸI|ϠN AzD |z9$ A}}{VxI|Ɇ Axqxqx{rk ~ A{ZgI|<^ A}}|Ipc!I|#d Axx!|  ~ 8 Axx|m?Q AETRETR|NxӧI~qZ Avzvz}tAS 0 Atqtq}Vɧ  AFTPFTP}W+ E Ab^db^d+}F~ Adj|dj|F}!QG-w AS`bS`b~wi!VU Ahhxhhx!~ϑ], AJTWJTW~٥ g A`hl`hl~s2f AANNANN~~LLIM A9QK9QKiAQ4 A`dq`dqg2gVI^qj AN_\N_\8/ڠ ~*o A#S ~r Al\jl\jgRm A6@F6@FY;R~f AFHTFHT;U3E:I~aС AJV]JV]U=f?~U ARZ^RZ^U}ls6ˑq Aajsajs6Vӗf L[R ~. Alr~lr~[VB]bQ~kÙҲ ARGTRGTV`Ϸ | APX_PX_VCOD ~X ACBOCBODV8 ~u໶ AjjV7PV,|Y޲ A4BA4BAWƠ ~N ANX\NX\W٦NI|L AnPpnPpNWz{  ~kd Ahbhb{W I~zǻ A?FF?FFW | AOWWOWW W^`  zԯa Al`|l`|`X$ yr AGUXGUX Xy ܧI~=? A>GG>GGX-x zo ATHLTHL Xo'| z, AMYVMYVXFQ&e AJPUJPUXmɠ |N AHNPHNPYt#ϧ1R~͓M AANQANQ1Y.fI~#[ A4=A4=AYSŧ ~ƨ AfO_fO_YC%9YF ADLTDLTY3=v` ~yϐ AAGHAGH`YS I } AiiZS mI)mE AvvZRq{I~ZD AZfjvI~. AvvZ<2>IW App>Z>u{IQ Avv[{_|\? AHTSHTS[G|81.Q- ATXjTXj.[ CIX; A[R[[R[C[wY ~ A[և$* Avpvp[Őe2drP Aqqqq[ x AP`^P`^\tYw AMVbMVb\J.)Qs AXSnXSn)\ AZ\jZ\j\AjI2x Agk}gk}\EY8 APZ`PZ`\:Rk Acmqcmq:\fۊ AT^hT^h]@4I%F Aqq]\+Y¾ A:JH:JH]V!ӧq  A||q]U7 ه Ayjuyju7]Y387 Adfpdfp]:LR4{ Agd|gd|]F e AVPdVPd](@$  nn ARa_Ra_^/ɦ  A^ A-ݥ r Arhrh^V<Bʼ~ Aairair^HTOIn" A~~^RD Z|BF Afhwfhw_TrQI[( Alr|lr|_כy&   AMb_Mb_&_Vc $I A>XT>XT$_I~4 AM]`M]``$M 46 A8PG8PG`¥I|v A`#2PR~&!AZijZijPj=Q~5nA:OH:OHCG/[ ~⃓Acgycgy[ I ~qÀx?C`0Abbrbbrt~'IuAVZ^VZ^'gªQ|jABPTBPTGh9E~lAmkmkE-K  ~`AS^^S^^ WhV ~Ahiphip?̫ Q~,>MA|z|z 2O<~orAii~ii~<.}Q|Y  AbdxbdxwII|cAsiysiyEm< +/A_fu_fu<}3DI~<\Ag{g{D-mO+EAtztzFn˵AXYrXYrF>CWI=A:NL:NLD ~M7A}}Qw ~.-BAnnw ~M"xAnn4L!RxAfmfm!`@O&R|rAfk|fk|&w'|IPAuu||$+vI~[LA^\h^\hvu>Q~gAdj{dj{ډI ~Aee}ee}3@mYqI~KԯAfh|fh|q t)5OR AhlhlOOS 0ABGKBGK5"Q4WAGLNGLNBq |AXP\XP\q=x ~?RA8BD8BDx d[*AFVZFVZ S9MAruruRNA2DA2DA>Ow ~v #Ahhw Q,Z |A.D?.D?ZCI~/RAkk>*  䀒Adftdft*<( 8!|Affpӥ ~ōAyy ~j?A<FJ<FJGOQ ~u)AEKREKR?R,A@JN@JNK& Q ~mS-A9FG9FG nbI }V篍ASVbSVb}dY  XA3AD3ADrTI^I 4I ACORCORc 6z&!A@MP@MP yb5Q\DK"A4=?4=?gyQ' #Ajn~jn~-f  v$A`en`en:i%I~%`H&Am~m~%;[;YE(A2D@2D@YV_ rq*AHJXHJXg$S1R4n,AKS]KS]1U qL,A2>D2>D*r ~0 ,A0C?0C? o!Q~,AEKSEKS!|-;~#W,A4?D4?DMܮR}50!,AIOUIOU]%yI~i ,AVN^VN^uQFI|,AJPYJPY;$I|4,Ac\sc\s$G ~7,Arr<'I| ,AllL1w~:th,AGQWGQWEMV-,A8DD8DD W_PR~,A}~}~PsIo3H,A}x}x3Az-Ʀ ֙,Apj|pj|8 Ir0z,App~k5,A{w{w/y~g0,Az}z}mmIa_,Avqvqhm| ~~>,Aabiabi|v!Y/)RH,Aabxabx)1\4g|H!c,Aafvafvg?"G-ZSl,A~~-NHe?~[,A4QJ4QJYA7IC0+,AFRYFRY7webZ'l,Auquq'(~vT,AFVTFVT@ 9jIAK,A;NJ;NJiw^ ~xO,AITZITZ^X,Awqwq6e~RL#AMZ`MZ`(2 6'ABJTBJT" T ,A~p~p ?1A{_x{_xUFI~u45AffF2I~:A{{Q%I @All4*c kSEAzzx $JArras pOAiiG{I|װTArr{{I|xYAXVIz _Azz;I|?J*dArr(} ~ߵj2,ALW\LW\C  ~=5,A3G?3G?$]  |O7,A\P^\P^9EУ  |D9,AiiJpvI |:,Av`hӣP  |*|<,APo  I~ֆD>,As`s`xƣb  }?=?,A~~blZw_j R|4=XA,Atl~tl~ Sg |E*B,AkD |KyD,A{{i ХI~1F,AxxrIzI |Z(dv,A><| zDx,AnYnnYnt٦ |ԧuz,Aq~c |.{,Auu,Q|➑},AW\fW\f+C#I|{B,Avv#w¥oI z^7,Ao4|  |?",Axx|:YpI}sK,A~~B>~S[[`,Ajh{jh{S*fo }5m8Ao -, z:o8ANXWNXW E |!q8A'@I~BvBs8A@MK@MKJ8 ~ u8A9ay2 zsNv8AS ( |dw8A(DE2b |3xx8Ab ]0 |{y8A0j ]ZI=z8AZ 3VݥU |f{8AttUط | |8A C`nIzp~8ArrnwB z78AXYI~+Z8AY]\iIzDFr8AppimXZz8AFJSFJS>5Q|eU8Ajbzjbzш -Iz$8A-   | Ņ8ABJHBJHh |"[@߆8AnnhU |x8A pgH&I~8A&q!I~E,8A!!I1^I|;8AB@VI|N8AEQJEQJ_y ~ۤK8AuuJ DI|?=H8A@LK@LKDXAKsf |bH8Appfe/I|tAJ8Allu; |GM8A;8VS|fZ8AJTYJTYSL<Q ||k8Akhvkhv5OIR ~t8AƦ)I~8Axx).M`)I~8A)d^S< ~d8A<yvãV |妘8AzzV }58AF<E |Pƚ8AplplECH&!I|Л8Arr0}Ӣ$I|zڜ8A$P { 8A.9 ~fP8App̸Ƈ R ~Զ8A@LK@LKR"̥I ~8Akk(o3I~U8A~it~it3`#I9\!8Ajdxjdx*<dI|@8AdBI~'S'8App&tI |t<8ATPTTPTBnl Z~ nL8All|ll|=2y<I} Y8Aool/̥  |;U8Aff8*ƢI|g}sW8AuukaI|n(L8Ah2I|&.8AIv |T; 8AHRVHRV @D  z[8Aww{1^I~&L8A4DI4DI|338ANS_NS_cR㠏f8AQT_QT_c@<I~vUͲ8AwwW8c |Ra"8Ac9 I |;NA (_IzCqNA_EHw[~ENAwlwl.+`pIz 0жNAzzp4 |XoyhNAxB޾I~R.NAyaI~CNAaV\OcfI~SWNAf!P"I |y nNA"]|[¨ |=NA\Zb\Zb+Ne5 ~qNAa%I|sNA2IzJiNAS9!  zL7NA!4i[ zNA[Q(I|^;5NA~f~~f~F) ~a*NA;$<HI|IxNAH5G{ zROA|j|j{ZaIvZI~W-OAZ_EI|:[AEgR I~,<[Ag#NIuIs>[AgEj znT?[Arrg!QzI|'ՑA[AhTFRx=`C[AJPVJPVhan IztD[Axxh[V^VIvy>F[AYMYYMYh@D¬VI x$SG[AW\dW\dVh] x)4=I[A=IJ=IJ]iy RIxоJ[APX_PX_Ri~FI |THEL[Ai]FI|۶M[Awkwki1/B ~S>O[ABim jB &>P[A jfȪNI~=>R[ANjp٪6I|S[A6j (  , U[A(jdyp?I~D]3V[AjgIw zZW[Aj XUEI|g/sY[AEk'/|KI |8Z[AKkS>(;I|,8W\[Akm RQ |SΫ][Ashqshqk[D:~UI |]_[AUkL;I|m}`[ApnpnlDJӢ ~C;a[Alr s@ Y~cc[A@LM@LM lZ5KQ ~i&`d[A^^l^^lQl08I| ݶe[Atk|tk|lxjI|;g[Al9\Ixth[App\m]u6  |\i[A^`v^`vmIxB3_k[AttmS{]z<*6l[AlfnlfnmJ]  |#KvSn[A~~]mSb z2޻o[A`Pb`Pbbm[Уm zCq[AjjmnA `I {%r[Ann`ny]I|t[A\_t\_tn,lzjI~$'|u[Ard|rd|nHr;?tI {Nw[A]ax]axtnosw!IzVA[kx[A!oߚ | y[Ao2wYIz-{[AvvYoF-I {x)ˎ|[A-oB`ТlR~}[A^^j^^jlopRF%I~#[A%og wI |wfc[Ap(, |^[AAHFAHFp>{YR([A:MF:MFp3"I ~B7[Aps͢& ~ʅ[A&pMmI~6Z1[A@IN@INmq_ P[@|r>[qA>KJ>KJ@+eF] xf]qAFMJFMJ]+Gd3Yx_qAg^qg^q+jg{zgI|UXbqAqiqi,;s}ZI|eqA|m|m,MYEGhqAMR\MR\-RJSI|p'&lqAob~ob~-7f xgoqAllf-hbӤq }rqA~~q.]"~?cuqA>IG>IG.R iQ|bwqAV[cV[c.J/DcQ|{fzqAvnvn/Si?# |\}qAdX`dX`#/roxv |qAHPVHPVv0up ~˙݃qAV[fV[f0vQ| qAM^^M^^0ϯtP z "qAzz19BA z_m[qAxixi1-aݤ# ~NqA#28 zqAcbycby2?(jIzWqArr2b?% |LBbqA3V̪IAln~ln~}} >ADVUDVUHs(8R~MAmq~mq~8bRPI~NW,AOXTOXTyhs'΁Atptp;I~-A~~ ;+ RAvk|vk| I~h^AOr ~ AzIsAjXdjXdl+TR3cApvpvT2FI|HJ A~m~mL$vY'A5@D5@DO,~AJSZJSZ,R(A8@F8@FI~P߽AMKOMKO*~҇^A^_s^_skDI~TAwtwtv` ~ 'Ae\|e\|`Ñ|<~AALTALTzڣ"I$AJRXJRX"cvKRbšARRdRRdKLX* |7,AELTELT qt!I |*=,A!eSݦ 1,Ab`tb`tsJԶA,A\Zl\Zl:tIBg ,AQT^QT^hRd|,A5BB5BB\+ M7,AJTVJTV+C_ =,A(IZ ['\,AgYigYiZ#tƤI~z/,A 35I~/ޘg,A5Q~ئ*,A5@A5@AD[~-󏛛,AefteftD=<`$  Z-1,A$T5KI~^מ,A%<xI|;,A=KJ=KJx8piI |!,Am)GBm,Ad^td^tX2 ],AD9I~n,AXRnXRnbqVj< `,A<y_VR S[,ARax`I |Nޫ,A$,m j,Aæ  o~G,Av/!I~(Sc,A[`g[`g>ܥϐ-I ~\),A-]$~,Acewcew$ ӢIx,AahnahnF  m,Aww}5 ~Յw,AGQYGQY LZ,APXkPXkvmZ~w饎 8A{{I{R}Ĵ"8AHRYHRY{Nh5[@e$8AMVcMVc5~o8R I%8Az~z~D[!?'8Aho~ho~!`v#[S(8A^`k^`kFg:5jQUz)8Allllj]}Re.*8AR]fR]fB Н;g+8Avsvs~o([;,8Agkwgkw9z ~V-8AjfljflzOkP) ~-8AG\VG\V)ߋUcJ.8AttttH%/%Y~+H/8Acjrcjr%C8iX ~708ABTRBTRXfƥS)I!18AJ^XJ^X)l3I$Q128AEZTEZTMaB 838AzzB>k-tR XѦA48ARi٥  ~AGQ58Ajcjjcj]]v  ~\fd68Avh+6I78A6C--ݤ |88AZ"+I CZ98AS_[S_[+.  ~:8Apw"I "<8A""4I ,m@=8Ah{h{4 6I {>8An~n~6]֣FI ?8AFc+I!@8A+UI?I B8A?P1% OC8AcE X/D8A|/w ٚE8Azz<I}DF8A<dcLK  .}G8AK"]  NjI8A}} 6 YjI$>@J8A a)}  6cK8A $Tl3I΅L8AVWXVWX3 {C? mFM8A? B$v 1&N8Av &?rI @O8A  x2I ~kGJQ8A J $-%R8A  Ԧ=S8Amkmk 1 y ~PT8A\dg\dg C!LV ~_U8A M̙k\ |uV8A\ p\j NW8A {B|xNX8ACLPCLP ȄK I|1Y8A 8<4ύZ8AWXfWXf  I~a[8A "#I| \8A||# z0qsI~W]8Azz GU%I~^8A% li ~^t_8Ai % <R~&`8A<IH<IH< (I|3a8Ann O ~ZUb8A :I Iz( OAtc}tc}  | " OAL5E z :VA OAzmzmgeI|Pf OA}c* |.OAff*{IzOA 0 z!F*OA|x|x0mpI}9OAuu 5LeIw LOA}r}r- |M/OArrVQvr |l,8HOA@PN@PNrWtI~[|gOA#\2`IzxOA|l|lF7' ~6OA' uL ~uOAL#P | IOA>I|OApp\t+  OA+t> y+OA+@I_LOA@25Q j OAb h!OA@r[5I"OA<0 W#OA0_A~%I ̸%OAU151I[2&OA1BNC?6 |d'OA6]7I1&(OA7bic) Jy)OA)IB: 2 +OA:Q$1L  C,OAR 8%r-OA;/I|.OAt}ITP:/OA}sPoIU1OA=٥HI<:tQ2OAH?Y<4IR"3OA4ъ.˴4OA#?IVJ5OAL8Ig 7OA8EϷ y38OAEI Z9OAE= 0 K-:OA0(\A K;OAAV9IAϩFOAuuOymJǪFOAgfpgfpm;IGOA<TJ<TJ;.] ;PHOA^#/YzmIOAtntn/׵e(7]IOA_dt_dt([$YcJOAhp|hp|$6#~w3KOAZ`hZ`hZ^Hh(QepKOA~~(ѡ5 |nLOAqpqpRc 4*MOAjl|jl||?I yMOAbhvbhv5â$ ~ػNOAtttt|fP"UI OOAGQWGQWUԵf8(POAii|ii|RVyQOAbhtbht6a^QMjSOACP\CP\ε UOA`ev`evqrȬ~ZAtvtv\`NR׳ ZAbjvbjvN\(9: 0ZAgi}gi}\'[hZAFRVFRV]ABJr ZAHVVHVVJ]Y 1  )ZA1]A' BZAV[dV[d]>N9 ո:sZA@VP@VP]7@ CZAhhxhhx]y3_I ~A/ZARXaRXa_]~'?A !ZAgixgixA^QpLm} ҽZA}^-Y b ~;ZA`eu`eu^ ; 1A5}ZAww;^\=p ZA^Y#nI~sXZAn^f5$ +"ZA$_C{IZAV^bV^b_#9 I~-ʵZA _s;(ɣIZA_2|֣#I,ZA#_I3  )̗[Arprp`6I~[A`~" [A`(I~  {1[AIZUIZU`s< yR[A<`@   ̷[AdojdojaC-I~Q [A-a|cI |Z8.^ [AaI ~i5[Aa#٤, 8k[A,baIG &[AbS+I ~=H[Ab I (A[Ab9J-I >N[A-br 8%I hR[A%cf MI ~yX[AMcT&I Nc[AukkukkcQ9;8 +s[A|n|nc@l v[Alc"(96 ~t [Aldlldl6diI~ՠ![A~o~od^-`R|,#[AdSB)I|2_$[Ajdnjdn)d(gI~x=&[AgdaK |@۶'[AnjvnjvKdz   ~N6)[Ansvnsve&&[I |ﰵ*[AmltmlteqmI۶:,[AmeZ z>h-[AeVI~sLK/[AVeS}I~M0[A`Xj`Xj}fLzkI|1GW2[Axo~xo~f /H ~V3[AHfA%}: |BW5[A:fމN} I|(7[AHWRHWRf?vQ|I|B9[Ayygt,I |n<[A|f|fgj=S+I~ISqA+3ԍI|rRqA}p}p4F\FA|[ qAvi~vi~A4^t! |7፩qA!5T/S ||oqA]V\]V\53 |ˆ֝qA6Pf?:I|Ƌt.qArr:6z$I|]3qA$6|x I||qA7߶ |qA7%IyqA%8zB' |),qA'8T  &vqA9M0D E |_9qAE9GJ/Q|vqA~~:̀9 }̳qAT`XT`X:%I*iqAXdbXdb:FIጰqAHXRHXR;tBe|7qAR]bR]b;"(~v qAxxxx(;_CY~YqAututC<xjz ~*{H4[APXSPXSfE86jP |7 8[APg*Rv zN<[AgNҪ zL,?[An{n{gIx/\}C[Ah5 Iv}FaG[AJPNJPN h+ z[J[Azo|zo|iU |ͻM[ALS[LS[ iL" ~^}P[AynynjJzQ~|pS[A^Yd^YdjDS! |7V[ARORRORj2V *d%Z[Akcv|X3][AebvebvkUQ|t`[AKIVKIVl| Q~-`c[Asrsr l c ~Fthf[Ajbyjbycl`Iz6%i[ADRNDRNmsR}k{}m[AFJNFJNmK}Q~ѱp[Azlzlnnzrs[AWZaWZanUY":v[A~v~vn"BQ~ 0z[ABRLBRLo>8sZ5&Io}[A?IP?IPo ʙRv([Ajh}jh}p,LH>LHLJSI |qq}Aylyl2XBR ~iDu}A^T^^T^hФ  |8Fy}A zB}}A15ҩI |e7}A_"I ||3}A"#A v)rW}AfftfftcLI |θ?}A$hL I |aP}A|| 'Is F/B}AP\`P\`sx-% ~R}AJ\VJ\ViVWS  {C)}AS I~D}AuuRI Ǡ}Axcyxcy;7Rn}Addtddt-n+hI~P}Aii{ii{hPMӣ$I~GbE}A$_xH zᤒ}AOV\OV\H2FWGIx-P)}AGdI~@L}A|8 hZAxo|xo|8[/)XZA[yw zQ6ZAX`\X`\\b ZAjm{jm{ \;m IfWZAHZVHZV ](~@~IM{ZAuuuu~]zz| ~YZAHVTHVT|]7pUocIPGZAhnohnoc^QQA\0ZAP\\P\\^BRIoZALTSLTS^x\I~NZA?TK?TK\_2|I}}vZA|_U9 4Xj[A{{`HsPI~\(![A`VХ eǙ [AP\XP\XaI|if [Aabt+JI[AJbP1IX[A1b [A~~c`F G{[AFccD ~y [ADdG5I~Db$[A5dt].I}([A.e8H |DX+[AthsthsHexY |:2/[APV^PV^eW5ן zksԘqAdbtdbt 3H %IzOqAthth3:] zcrqAll31  ~j}qAvrvr4~¥ | QqA4h}BI~߈qAB4*gtI|CcqAvvt53m |Q78qA5]cP֤I| 7qAtt6r^IzsEqA^6WEIz1qAttE6^=Iz AqAI^UI^U=7@4|JIӣdzGߢqAkh{kh{9p2$I|"qAO\`O\`:ԝQ~ L,qA|v|v:zQ|qAogvogv:N- ~$ &_qA:̧ |oqApjpj;{ˮ |mqA;|5!D`$}A[cs[cs%!)Q R(}ADMTDMT)8 $QEc+}A^bp^bp_~J).}Ackxckx}R+ ~mi+2}AYdjYdjV,eI ,5}AO[bO[beH1QFv]8}Avvvv,|IBӣ;}AHZTHZT 3qG }?}AVZjVZjG XI~NrC}ALXYLXYAaD~ ~*G}A01 ~ J}Acjtcjtw_I }/N}A_b:S[I| ϝR}Azfzf[zEy/  ~}VV}AVRdVRdzi|DZ}Acgtcgti=:I | ]}A:%+  |i:[a}Ad`xd`x+_L  }$e}A tI |!i}Akktlaspy-laspy-a32c7aa/tests/data/file_with_both_wkt_and_geotiff_vlrs.las000066400000000000000000027233721463461040100265140ustar00rootroot00000000000000LASFLAStools (c) by rapidlasso GmbHlas2las (version 230424)wzMbP?MbP?MbP?dBAf"AQۧBABA\gq"Aq"Ap= @"@@c@cLASF_ProjectionpGeoreferencing Information &#k    h} & +#+#LASF_ProjectionPDouble Param Array@TXA'?XAr@LASF_ProjectionAGeoAsciiParamsTagPCS Name = NAD83_2011 / Nebraska (ft)|NAD83_2011 / Nebraska (ft)|LASF_Projection@(WKTPROJCS["NAD83_2011_Nebraska_ft",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD83_NATIONAL_SPATIAL_REFERENCE_SYSTEM_2011",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["scale_factor",1],PARAMETER["standard_parallel_1",40],PARAMETER["standard_parallel_2",43],PARAMETER["central_meridian",-100],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["false_easting",1640416.666666667],PARAMETER["false_northing",0],UNIT["Foot_US",0.30480060960121924]]4 @۳A0Ş @۳A:4ة§ @۳A^2 @۳Ah0ĩ@ @۳A*2ճ @۳A0ػ @۳Av4 @۳Ar0 @۳A/F @۳Ap$1 @۳A0/ @۳A*a @۳A2d-P~ @۳AH4+P @۳A> -P @۳A)d @۳Ar)y @۳A* @۳Ah+ @۳A. @۳Av*x @۳ArJ)t @۳A% @۳A' @۳A"$ @۳A0V"T' @۳AJ r @۳Az!T@ @۳Anj"Ÿ @۳A8"< @۳A Ȫ @۳At"v @۳AX~! @۳AV, @۳AjW @۳A<" @۳AJZB @۳A @۳A,G @۳AH  @۳Axj @۳AT@T @۳A" @۳A@e @۳A.  @۳A  @۳AlP<. @۳A0P" @۳A, @۳A& @۳AnL @۳A0d @۳AA  @۳A> @۳AJw @۳AJ @۳A\h{, @۳ARpz' @۳Ac @۳Ahx"| @۳AT@ @۳Ad @۳As @۳A6` @۳AL @۳A6B @۳A0+ @۳AD6N @۳Ap O! @۳A: @۳A&6t @۳A6 @۳Az @۳An: @۳A:ܪ} @۳A |= @۳At r# @۳AH  @۳A+  @۳A6> @۳A> F3k @۳AD* @۳ATF @۳AR Pu @۳A( *+ @۳APx @۳Ax q @۳A6 X% @۳A  @۳A ! @۳A  @۳A j @۳A<Y  @۳AJ4ܪ @۳An1 @۳A`f~  @۳Ad6  @۳A2 @۳A q @۳A, H @۳ADDTe' @۳A~ # @۳ALz$ @۳A o @۳AldD @۳AbV  @۳AV  @۳A ^q$ @۳A n @۳A2* @۳A_ @۳An @۳A r @۳AN ^# @۳A $ @۳Ab 0# @۳AX + @۳A,^ >R  @۳A, (~ @۳Ad4G @۳A Q @۳A8z|; @۳A " @۳Ab >: @۳A 1 @۳AD H  @۳Ah:bE  @۳A@$ Zi @۳A    @۳AN  @۳A t @۳A:Z7k @۳A NR  @۳A DA @۳At  @۳AʿL  @۳A0  @۳A.>0ةt `۳A,3ĩ; `۳A0 `۳A2 `۳A4+L `۳A)# `۳A+0 `۳AH*Pk `۳A-n `۳Ar. `۳A4&d `۳A% `۳A8#Ļ `۳A(n `۳A4 (xV `۳A'Ҫ `۳A% `۳AB,)H `۳APN  `۳AD `۳AZp `۳A2!ȩ `۳A^f `۳AL"Ȫ `۳AQ `۳Ar~Z% `۳A6 `۳A.8d `۳Afզ `۳A) `۳AL `۳A08$ `۳AN `۳Aa `۳AN `۳ANX `۳Azk  `۳At` `۳Aϯ `۳A&8PP `۳At `۳Aձ `۳A `۳A.lK4 `۳A< `۳A:4 `۳A @ `۳A\  `۳A> `۳A*p `۳AtJƎ `۳A `۳Al , `۳AJ `۳A2 `۳A  `۳AV& `۳At2  `۳ARb `۳A$<"; `۳A`dv `۳A<C( `۳An^ `۳Atx+ `۳A J0 `۳A i& `۳Af `۳Ar<< `۳AX "e `۳A+ `۳A& `۳AN `۳Af. `۳At. `۳Aq `۳Ac `۳Al `۳A2Q| `۳A8  `۳AN   `۳A f `۳At `۳A`* Z$ `۳A: vs  `۳A68 `۳AB   `۳AL4 `۳A~ E `۳A `۳A|H6 `۳AP  `۳A(: :r `۳A: l> `۳A  `۳A8 x{{ `۳A( "4 `۳A Z{ `۳A" < `۳AnbPp `۳A2 ܃ `۳A$ F$q `۳ApxMn `۳Alv`# `۳A 4 `۳AP l4 `۳AzBp `۳A|  `۳AF  `۳Al  `۳A  `۳A< O `۳AV, [ `۳A 9 `۳A3l A@0/ڡ A l4 AN/FU A 2 A:2a Az2Ω A4j A2 A4ĩ AL1E A3: Aj1 A01C A1 F A4 A~2? A1d A4 i A/ G A-2n A+» Ar.P AJp+Z A*+] A>- A) A ., AP(n  A &d Ar$PE AF(xY A$ A4&xy Aj|$o A$Ȫ A'Zd A|$+ A6) AX  A6~"J: Av ^ A:: h\ AFn A8"Ҫ A^J# A ܪ Azԣ A} A^. Ab~& A|) A|  A<JB ANM AJץ A@U Al) A  A< A ANް A A^n A֫Ƞ A&) A^bD AT A A(T At' A A>c AJ Az^p A<t> AvZ«J At  Azt Ab AL0 A.ző A4 A0Tf ApM$ AF A A: AH,Y A  AA  Ad AF"~ AM A! A<~T* A P A( AR. ARY  AHj y) Aʿ ܂ AjR AVx An+ A4"  A xc A  AB} AH A< % AP,2& Ahx;} A$ A a Af  A8' Abu A2 AFȪ  A| Ab.5  AV AR (ی A.$ A> / APR ( ALW A: ANl # Ab F A4  <; A Av# AVZ A(" Ax  AZh A n+ Av A$nN  A.< A(.:* A^  An k A  A  A  AT Av A~ n A `  AX A . A0n<  A  Ab Z A^P AJ  A  A  A   A2 AP d  Aj 2{ A`  A4lL A*| R) A  A \ A  Ah  Af [} A  A A nvg A   Anh A^8 A2zv Anf AV  ALV^ Ab! A4 o A*Nnk A Pp A6 ; A,nm AZ, s A 4 A ZAm A | At j# AB` A, y* Ap A - A, ! AB \w  A@ ܪ At 1~ AdRz AZσ Az A޿bb' A8 z A2ĩ A2 A22Ƙ A1ة A0W Ax2 AXx2  Ab0 AZ&/ A/<ҫ A"^3  A,+ A~P- ADd-x AZ,ds A+x A.D A) AzZ-P] AD)x A:z+x AZ-P A24+d AH.2y A,Z A 2-P A>+n AX.Pk Ah(-d A~H+2~ A`-* A`.ة A*P A( -s AL)Z A8\+F A. A޿,( A8 &d! AL^$͞ AFh$x A'nx A'n7 Ah*&n Ar'n A"$j A.'۹ A&= A'Z: A4z&x AP&  Ad#J AJV'Ȫʿ A& A&'ȪF A$ Az'Ȫ  AH&ҪW A$ A$ A%F A (/ Av$' A'Ҫ AB$6 AB%< A@$,6 A@\&B A@(! AT֫5 Al", Abr A@, A^@ A !h Ab Tܷ ATe A"" A!˧ A" Azշ A  A  A"= A A #Ҫ+ A` Ȫ' AH."˿ A v Ҫ A6 Ar ܪ Ah"r At Ҫ8 A͹ A8"Ȫ> A, A",* A$ Ҫc A$B"Ȫۥ A A." Ad" Aܪ A"c A6q A6 Aj^ AJ A,n6 A^" AvN6 A8h A0J Ax6 A:6 A~ A4u  A\L A{ AF:@٠ AZ, A, $ AVxr AJ ADVJ ATY AT A& A8 AB~+ Ah˹ AZ_ A A Aj Ad A` A֫ A A ADn= A:_ A^ Ar A A ABR An<֫ AB! A= A«? At AbTl A`" AFT A1 APt  Az0 AJU A6Ȥ AX8TT AP" ATђ Ah>bn  APz AF, A> A AJ AP,a A@" A@à AR A4  AF AT= A,<T AJ AxJq Aj6  AZ- A._! AhN Aq A:p Apܪ% An A~ AV. A> ҪǏ A6<{ A = A&r A$# AH Ҫ AJk' AB  ATȪ A^Xd* A,+ A  AM A& A 4Q A$ An  A B Ah  AȪ A A  Av A`/& A2L $ A A0ȪO AF Ax A A AH AT2' A a+ AR  A Ab&Q A "$ Ap AVp Ȫ A<& A> A{ A^ A,H0 AT  A A, Ara A, | A  A . Aj>yz A  Ap  A = A P  A \c Al A|  A  Ar lz* AP 3 A "Z. AL c. AL  AX~{ A*XM' A*: R! A  : ADs A&6 A c A0 P( A օ A l# Axx F" A<q A  A~fZ  Aj0v  A Fl A0  A< 6 A# A\ Ad <y A6 A f A4F - A FLg A  Abj A,n ! Ax 6 An ( A  A.0 A=% Atm  A  A$ Ue AR> A >Q A0}  A D D A r Afz A_ @۳AUި= @۳AUѯ @۳AX^Qި @۳AKʨ @۳AN @۳ADKԨ[ @۳AK @۳A޿`OԨ& @۳AHʱ @۳AF- @۳AnF> @۳A~J7 @۳AnA$ @۳AFA$ @۳AD @۳AB @۳AD @۳At0C @۳AzDR @۳A@ @۳At;t @۳A=` @۳ALL;t @۳Atr=V @۳A^; @۳A~4?V @۳ArJ=V @۳Ap4; @۳AHT83 @۳A6 @۳A|: @۳AV6ĩ @۳AV6 @۳A8 @۳A9 @۳At7  @۳A68t @۳A9 @۳A.b9f @۳AR] `۳A`Bݨ `۳Az]ڷ `۳Af] `۳A_.6 `۳Aa$ `۳A.^z `۳AL_Bذ `۳A.^V `۳AzXa8w `۳ABV^$ `۳A Z `۳A.X[ `۳Av X `۳AXY= `۳AY `۳AXX$h `۳A[# `۳A[ҷ `۳AX `۳ALX8 `۳A8Y3 `۳A&[Ԩ `۳AR `۳AZU8 `۳AtT$ `۳Ap4SԨb `۳At~T `۳AT. `۳AQ `۳AS `۳Ah S `۳AFJV `۳A^V$ `۳AjT1 `۳AtR. `۳A,hVި `۳A@Tʨ( `۳AM `۳AP `۳AK `۳A(M `۳AvMƯ `۳APm `۳AtOB `۳ArKԨ `۳A,TQʨ` `۳ADMݸ `۳AM `۳AQ `۳A޿M  `۳A6Qި `۳AXi A\X. A\X$ A[ިr A"VԨu AVB ARި AtV.; AJ S> ATB AV8޳ A(~T$u A|T. AVL AR AT AR$ A`T. AFQ ApSö AUp AT A8Vp A,Q AM A*N Af~O A Kʨ" AHMԨ AhO1 A2P׹ ANO AJʨs AbH^ A~Jʨ_ AHި AHԨ A4Jʨ5 AbH AFu A&F- ALHʨ* AvHިw AZFިY AHި< A^B$ A@B A2AL] AB  AD/ AD) A@$ AAB$ AHB$O AA." ApD AF@B( A @. A`Dʨ A,=` AH?BU Aj; Af;M Apr=` A=V A;Ω0 Ax;` A? A?z A=. Ah=` A; A?8 A"6 A"8~ A9~ A`T8~ Aj6[ A9~  AN4Ω A0:~ A4Ω AB6 A68ٯ A9~Ȩ A~69 A@8V A :Ωê Av6ĩ; A^8ة AP7ة A2 : A^8 A :ة A\4' A9I A6 A 6Ω: A^8N Atj^ A`. AD4b` AP_  ABR] Ata ATp]  A2_( AZ_h A]. A&a A0p]V\ An_H A(d_ϵ A<&a. A_{ A^^ AR]$ų AZ_Lն AL\$ Ar]Ѽ AT[ AW AZ[L A*X AZ A[Ը A4X A:\$ AY$ AZ8Q A:\8 AY. AT[89 A4X84 AY AY AX8# AZ A[ި AZͿ AZ' A[ި A8HX AV. A~SԨ AU. AV A Sf A hVL A4S AfT AT AW$y AS AVg AbR AS ANM  AOʨ ATQި AK A6Q A~Oͽ AXXM AXOQ A&L ATM A6Kq AdO+ AMD AO  A@Q8 AOʷ AL A2O A(K| A @Q AfKިɹ A\JQ AJLި6 AJQ( A0Mʨ A,Q$k AlOi ATMй AtK  AL,Q% AKԨ` A8O  AM Aʿ$J AF ANHܹ AtFި A~DHި A8J A@Fʨޫ A FԨ A\HԨ AHz AjJ A`Jިl AF AFۯ A4BJʨE A I A Iި ALJިô AD&HԨ ANnFި AbI A`JԨ޷ A$ZFԨ AK[ AHި- AIިh AD AbCO A0FAѮ ABf AD AvC AFC$0 AC AC= A\LE A C AzDʨ A^C A@DY AdA ACT A.=.G A<<t0 A&?B A|?L A>?VP A=# A <ĩR A?L A=~( A?LX A>.c A?.T A<t A=j A0;jV A?. Ab8 A6@ A4, A6 A9 A@6 A$,8 Aj6ĩ_ A2n. @۳Apd @۳AqjJ @۳Al n. @۳Ao$W @۳Ad4qI @۳Ao* @۳Ak3 @۳A"j @۳ALhB @۳Al @۳Ac$ @۳Ad @۳Af84 @۳AgVN @۳Am `۳An$ `۳Aq `۳Am$ `۳Amr `۳Abnͷ `۳Ahj$ `۳A*l$ `۳Ahj$ `۳Ah `۳At|j̬ `۳AjM `۳Ahި `۳Aj `۳AxiLM `۳ADh$f `۳Ak `۳AhV `۳ALg8d `۳Adb `۳AZb} `۳ABcc `۳Ad$ `۳ANd. `۳AcLF `۳A<@eBP `۳A( gV `۳AdV `۳A4b.r `۳A0f` `۳A jc.) `۳AeVū `۳ARLc. `۳Aejz `۳A\dF `۳A~d8 `۳Atf.? `۳Ap  Aqo A(n` An. A>q) AhoިН A2r A n Aq A~o Aoe Aoʨ An Azqި@ ABoި˰ Afl Afl[ A`h Ah A6\l8T A>k A"j ABh8 Ak. A"j Aj AJlBд Ac. A8dQ AfBY A gq AdV4 Ag Af AcB A(bB A`4g. Ahf$x Ahe Ac$] ABcB Aq. Aq AB(nĶ Abo AqjA AoBγ A2n` AoB Aq AZ(n Ao= Azo Ao Aq$ Ajqr Aq# An ABqި A(i ArjC A\l$3 ATjM A lԨ A>h`! AH l$5 Aj.: A( l$ Am$| Ahj$_ A"BhB7 ANrj.l Apln Apl.l AJj6 Ar8h  Af A^eQ Ac.s Af8 Alf8P Avf$ʲ Ac. Afj Ab8 Adtc Ahn Ahej Ajc~2 ADf> AgBR A*1v @۳At2hMr @۳A3lz @۳A* @۳A>v*։ @۳A,j @۳A6.ƒ @۳A؜6.1 @۳AĜD*4rp @۳A+$D @۳AH,0z @۳Av(@ƅ @۳AN&ۊ @۳Az6)l @۳A:*&~ @۳A>(v @۳A% @۳A#( @۳A\& @۳AzF(Z @۳A&?t @۳A&#c @۳Alv B7} @۳ADsp @۳A(P# @۳AfF#<̃ @۳Ald" @۳A#d @۳A\!h @۳A! @۳Ad @۳AJy @۳ATV?% @۳ARJ7 @۳A(@G @۳A @۳AN*P' @۳Aء88 @۳A \ @۳Arj @۳A,4 @۳A(>e @۳AXJpl @۳Au @۳A</ @۳A( @۳AΦ5 @۳AH @۳Ah@ZS @۳A\W @۳Apg @۳A@RFX @۳AP @۳A`s @۳A4dp @۳A ҪV @۳AJV^ @۳A*j @۳Aƕ&:J @۳AS @۳Avz4L @۳ApS @۳Aܓ @۳A Ҫ/| @۳A # @۳A:N% @۳A @۳A64, @۳A.  @۳AڟT @۳A@ @۳AΡ @۳Aܪh @۳A \B @۳A= @۳A8  @۳A4v  @۳AП. @۳A  @۳Aƶ @۳A ^ @۳A& @۳AFNl$ @۳A!Y @۳AL  @۳A| d (  @۳AJ 3 @۳A   @۳Af0Ă `۳A0 `۳A4h `۳A"/\| `۳AښV1  `۳ARD/x `۳A1 `۳AP/x4u `۳A^3bAt `۳A.,$} `۳AZ`,Bv `۳AZ-py `۳A:*46q `۳Av*f~ `۳AL,8~w `۳AL,8 `۳A+ `۳Al*l%{ `۳A% `۳A8'… `۳A&|y `۳A)&s `۳AT$ `۳A^Lp `۳A- `۳AȢ\!{ `۳AdJ `۳AXy `۳A@y `۳A0 Vkc `۳An#s `۳A n^ `۳A j `۳A*dR `۳A\63 `۳Ah-- `۳AZ6 K `۳Aj;l `۳AnJ> `۳Ah 5 `۳Ab8? `۳ApxJ> `۳Apu `۳A<Ht `۳A@y\ `۳A,rf `۳AvJ: `۳AN^G `۳A@] `۳Ar `۳A63 `۳AnJQ `۳Ax"I `۳AܢJ3 `۳AD8o `۳Ahx `۳AbJE `۳A6: `۳Ahv `۳AD@H `۳A$,P `۳A~TK `۳AvTM `۳A"~[ `۳A `۳A,Q `۳A^. `۳AU\ `۳Ad4g `۳A0ܪ6a `۳AҪ{ `۳Aܪb `۳A> `۳Ax,(Y `۳AZ* `۳A2,, `۳A|.T `۳AR `۳A >64 `۳Al,x `۳ANb `۳AF"T `۳A<j `۳A8 `۳AܪT `۳AneM `۳A™x `۳Arj `۳A^  `۳A<n`Q `۳AP `۳A 3m `۳AD  `۳ANj] `۳AǓ `۳A(  `۳A }? `۳ADf `۳A z `۳A<ƍ `۳ALFȪ `۳A  `۳A  `۳A `۳AR?I `۳Aҝ Nf `۳A – `۳AT /> `۳A8Nb9 `۳A `۳Aġ*  `۳Az * `۳A£nA `۳Aޥ,Ȫ `۳ANf9 `۳A,f< `۳Ą ܪ `۳A~  `۳A(\|' `۳A( k `۳A y `۳A\0 `۳A  % `۳A B `۳A>  `۳A ." `۳An .5 `۳A4^} `۳AXb^ `۳A ~ `۳AT ( `۳AJ Ȫ `۳A  1 `۳AȘ" `۳A2l& `۳A  `۳Aڕv"c `۳AЕ '} `۳Ahp `۳A@ p `۳AT1rz A"3Xo Aڕ/ A>0z A  2yk A6j1\ A6"3\u A^4Ht A`0V{ AT1P} Ah/(A A0Z Ą/Pr AX*zs Ą.r AZT){ Aޥ*Hu AfL,Vw A4b*4e A|b*)r Ah,y AT".r Aė,XY At-N A,0z Aڕ*{ Aڕ". A+j A@#n Aڕ$'@|r A$@z AΗ&o AҘ%^ˀ AT`'0w A؜(} A(: A~'vɌ ApD%Wv A& AF$@ A)[ A*a A2#m A8Lz A" Al\!(d{ ADP* An# A^. Aġ7 A\!,- At<L A\!T" A! A6*c AP#΃ AT  A!%x A!f A(, AΗ#m| AD Aė /, Aؗlq As A4Z3 AEj AR|my Af% AVL| Axf{ Ap+ A&\0o Ab i Atrb A| An|xq Ax~* AZm$ AhD A .x AƤPG A| A$ | A6v A"Z^  A0{s Ab~ Ab A, A|V} Aԥfo A5 A RD ATq A T A(G A-l A,2,& Aȝ Adrnl Aԛ&V^' A85  AbY AT,' A@> A@+d A:Q AJ A@ym A|[- Aڕ$  Af ( AΗ( ' Af (l+ AJ Al= A> A A C AF M AR dw AH ' AlL ܪ{ A& A AL Aޥ  A[ AD+ AdD  AB ! A ۚ A" 4 A~ s A*2   AD A  A"y Ar`( ATH/ A@ƶ A@. f AP/ AL * @  ABd<' A   ( AК% A&0rI  A  Ah vx A^:i A, AΗ  Amc Aj(  A  A,  A  An h  A@  $ A6" Aܓ2@ t AH/| A$|33 A1{ A|"3ẋ AHr3{ A0/ A0 A/ A<1^r AD16Fu A>r.xу AJ.h A<J.n A* Ax- AD+o AZ-r A*T{ Aܓ$(un AZ( Az&u A$v Aܘ,)Ft AΜT$q A$@o A$y At'vv A$^ Ab>&l Avj'z A$3 Ax&0\z A$U} A֨)t A,!P A~, A" AR!_% Ar#) Atxx) A| A!x Aԛ As Al! A&4!'_ A+ A™k Ahs A"r Ajo Af!n A"U{ Aȓ|8q Ahd A6Bj  A jo A*o Ajh[m Aؗ8pv ANJ ) ArJo A.5 AvV Avp AU( A.& r A8| Artj Aڟ84 A z  Aޠf Aw A0 A( AJJD', A  Ad| AtH{ ATk Ax A% AZVs A` A,.Vu A5 Avϋ A&,u A A<ܪgt AZ~{ APt x A.5 A~b AʠZp A Ats A&n  A2;y AbWu A֞w A"HZC Aue AV A^ A\= A A9 Avz7 A|\Ҫ_Q A8 Aj Azk Af AҪ A@0m Agj At$@d ABna A4@q Av Ahn A: A. h A|c Aғl! A@<' ANB4 A AJ  Ap(  AB Atf  $( ArȪ= A|ܪ3 A ; AJ" APҪړ A ~' Al ܪ A`ܪ  ABr A24  AПr A\F| A < APeC An ܪ A^  Ạ d A AX*zb A* c A q& AȪ A  AT A  A* A Ԛ A Ҫ Aҧ, ) A vW AD  A*&D A P T5< A  A:,  Al A` נ ATD AZ6 ܪڔ A(6k A0) AD AfV  AƟ0u A:0" Av0j A&: \ Ažx  A) A4 v  A2 / AΜ  A|w AL:' Ap Apr r A\ ,q Al 5 AT   A6$ A0 AD  Ar  A"+" A~  = A8   AlV Ah3 A,vr@Z A ( A,L^ @۳AL^v=| @۳A.^ v @۳Aښa. @۳A~adz @۳Ar]*w @۳A]r @۳Aay @۳A^g @۳A0ad @۳AV[8z @۳AdZ @۳A:\Zn @۳AءZZU @۳A$YZ @۳AzX @۳A[m @۳AX\ڄ @۳A@\x @۳AQ@^ @۳A^V @۳ArT! @۳ARB @۳ĄU2z @۳AS @۳AHO2u @۳ARJL @۳AL.{ @۳AN>q @۳ATLHt @۳AH@ @۳A`K&~ @۳AJ @۳A"hG @۳A`G @۳AA2 @۳ArLEt} @۳AԥEp @۳AVEY @۳AAz @۳A~E|s @۳AܓLE"y @۳A?p @۳A=^u @۳AV?X[{ @۳A?8_ @۳A`;2z @۳A<?) @۳A~7C @۳AJ09zv @۳A :>v @۳Aa1 `۳A _: `۳A~\| `۳A4b `۳AΜ^r `۳Ab̀ `۳A,^r `۳Ab*]N| `۳AaD!v `۳AvaZ `۳AXv `۳A[t `۳AW `۳AX `۳AD\| `۳A*X\҃ `۳AXJ `۳AZ<v `۳Aƚ0W`Q} `۳AW$w `۳ALY8(v `۳A6[ w `۳AXd} `۳A\Zw `۳AښnU8s{ `۳AQ.v `۳A2Uą `۳AQxҖ `۳A:RS `۳ASrJ `۳AQ^ `۳AZfS:ׁ `۳ATV P `۳AUH| `۳AR `۳A¨V<X{ `۳AM `۳APHNLk~ `۳A Pw `۳AK,s `۳AJL&z `۳A2P2 `۳AM `۳A4NVr `۳A PL `۳A(PP>k `۳AڕL0ݍ `۳ATQw `۳AؗH4e `۳A@G } `۳AG^ `۳ANH؛ `۳ẠJbF `۳A<Bi `۳A`E `۳AB `۳AC6z `۳AA8w `۳ABB `۳AD:z `۳A:,B{ `۳AFAp `۳AL: `۳Ar:>| `۳ARZ<,/| `۳A\:Wz `۳A= `۳AF<{ `۳A\?m `۳A*5| `۳Az8,v `۳Aj6tŽ `۳ATx7 `۳Ar8: `۳A6x `۳A05t} `۳A|_: A^\| A^w A"`| AT`T]{ A_Njt Aba z A^nHx A06`y AhX{ AdW}w AZ[`v A((Zjz ApYp AxZ! A<WZ AZfp AW AxZS ASP A: A8t  A5`6 AL6t AT*:hp A"46w A4b A_v1o A^`$~ Anr`Pt A|\,q A>brw A\.^G{ An^{ A_ } AR_z% AP_V_m Al\P\ A[y ARZf܀ AX  A\:W1 A\X AZJv AY AښZVIy Aƚ\jy A^[w A,\} A~bW* A$YXy AܓWJٛ AXr ASB~ APU` AR> AFUz~ A,&Ro A8Tֈ AƚS8w A<4SZ AfUˆ APVlk A ^Q~ AzUx AbQF( AM v A£@Lג A<JL A1t A ?v A<<N AB;} AҘ;H| A,?z A>y A=z A<#} A@, AR=T7 A@ρ A(: } A|=y A?Nr A@z A <~ AP=`E Af?' AN>ؔ A;‚ A֨n7ʇ A9~ Ad:2 A(9  A5 A6˄ A6l A 5l|z A֣&9l A\:bg A(6w A8u{ A*5rM} A4,1 Ax7xz A>5  A~f5 App:u Alr8 A(7N Af5y A08+ A68r A,7h Ap~ @۳Axn @۳AܓvpM @۳AVi*y @۳AdiEt @۳A6m( @۳A™ i8 f @۳Aj(~ @۳Afh @۳Aj u @۳Al= @۳A~cl @۳A"eLa @۳Agu @۳Aޥct @۳A,e"t @۳AtcX @۳A^e @۳Apg< @۳Ahs @۳AbN @۳ADq0 `۳AnqjH `۳AVqH `۳Ap% `۳Aޠqz `۳AnBu `۳A\xn `۳Aܘqb `۳Anz `۳AmX| `۳A4kr `۳Ah(u `۳Am\zv `۳A(i.r `۳AHl `۳AgH} `۳AJJe( `۳AfN~ `۳AcD{ `۳Ahv `۳Aܓfgv `۳AȓcT) `۳A^e|t `۳Aoۓ AT8r4 An:s Ap/t ANpj ApTw Arn@i AĜq<Pz Ap2z ADp A@p Aؗqz Aof* Ap| Aȓxi AܓlK| ANg,y Al|e܄ ANc߃ AgEr A(dބ Ae6s AeZ AdP ARe Ac. A&2nzx A|p6 A<8r A֞q^y An#j Aq Aj AjH AlH AlL A*l| Aޠj+ ARj} Ah Alk Afl Aho Aȧmņ A¨j ANni Avld A"ejg Ac4A AeN.~ Ady A\c`y A4Hg ArHg1 AКpg| Ae} AeH y ABc| A c0 Azgvor AevM| A62nj@ @۳Aq @۳Ao; @۳APhoL @۳Aq @۳AVh$Ŭ @۳AjL @۳AFi @۳Axi.  @۳A&m.x @۳A6j @۳A,m @۳A"dd @۳A"fB/ @۳A  qĩ `۳A.r~T `۳Aro `۳Ao~ `۳Ap8 `۳A:p, `۳ABoި  `۳AlzqR `۳Adn `۳Afq. `۳Ao8 `۳APo$ `۳Aq `۳Ao޿ `۳A n. `۳Ao. `۳Aq `۳A44lV `۳AZiLv `۳ApRl8۳ `۳AjB `۳Ah `۳A&>l; `۳A`h~ `۳Aj `۳A"m" `۳A@~hʨ `۳A Tj `۳ARkַ `۳Ah `۳AD>l$ `۳Afk `۳Ak$ `۳Aj `۳Ak.  `۳AdkL `۳Amt `۳A&ht `۳Al `۳At2i~2 `۳Akj `۳A \lة: `۳A f~ `۳Ag, `۳Ajc~+ `۳ALc~ `۳AN,e` `۳A:f~ `۳Ad"e$ `۳A,e `۳A2fѴ `۳A(e{ `۳Ae `۳A\f `۳AHc `۳Af. `۳A*g$1 `۳A c `۳Ac `۳A2dި `۳Afæ `۳Ac `۳A@e9 `۳And$  `۳AfL `۳A PnΩ4 AHqةK AqB Ap Aqz A\p Aqɶ Ap A lBs Adh> AfjԨQ ApRl Ah ARle Ah8 Aj Ak.- Ax*lL Ah. AkBŰ A~k.b AJplz A th Ak Ai A@j Am AP iԴ A2i Ah AjB A l`t AvJjt Ai AJj~l Ab Ad. Ae< Abμ Af˨ Ad7 A^bɸ A8dc A$h.3 A& gB Abr A d A g.\ Ac Ad Ac Afv Axcq ATc+ Ab A6on @۳A.3nn5 @۳Ad/qP @۳A^&p @۳An @۳A" |o @۳A, kĩ @۳A jĩ @۳Ajh @۳Aj @۳A4*l B @۳Arj< @۳A"!@j2 @۳A$j( @۳A$h  @۳A,i( @۳A6j @۳AV3HgxW @۳AH( g( @۳A$bF @۳A"b<] @۳AJ!d23 @۳Af  @۳A0cP @۳AZ@ePM @۳A"e  @۳Afd @۳A\c @۳ARf% @۳Afĩ @۳A8h7 @۳A eة @۳AH-(n< `۳AJ& n2 `۳A&qb `۳A o2 `۳AXq `۳Alpغ `۳Apq( `۳Ao(t `۳A|o `۳A\q `۳AzPn(s `۳A(o `۳Adn `۳Ar PnΩ `۳A hz `۳Aj `۳AXm2K `۳Ath; `۳A!thz `۳A!m(. `۳A"h$ `۳A"4l `۳AH(h( `۳A)Rl( `۳A-h l `۳A/flL `۳A0plP~ `۳A4 g `۳A4`cn `۳A3tcP4 `۳A&1gP  `۳A2/"e<_ `۳A-Vc2 `۳A+eP `۳A*f `۳A)e> `۳A$f `۳Ad( `۳A(c(  `۳A$he<S `۳A6*g  `۳A\eΩ `۳Aj jcة `۳A8 gĩ `۳A3o A^+fq A)q  A)o< At$o  Aj$fq A"nE A"zq@ Aq(# ALo2 Am A&q Ano( A|o  AqΩ A k^ A>j A l( AZh  A:\l< A@j< AzlFM A`h<  A`6j2* A>l ' Ab4l w Avm A&j2y A@&>lF A *m$ A*j  Ar+mF| AZ/j A&1PiI AX1jF AF4h A6zl A6h A64g Av6c+ Al6dJ An4"en A&1Fd< A/b  A. g´ A.|e< A,c2 A+f e A *jc(< A(c A>(,e A&c A8$he20 AcP A$cd A2f< Ac  A<f AVe ADTe  A"eX AdΩ2 AfcΩV AHHg A fة Ar Vcĩ# A6m  A6fqɼ A4ox A4pqX A3q+ AX1qxh A:1nF A0n< A/oP Ad/n A-o2Y A-zq  A+o. A\(o AH(nF A*(qW A$n2K A #o A"!q(u Ajn2 Ao2 Aq A(n2 AZq۾ An2 AoE Aq A>o A>qΩH A4(j( A>(Rl(V A+j(W A+h(s A,k24 A-\l  An/h A2>ld] A3PiP A.3jP A4jf A4fl A5m A2^ePC Al1c< Ad/ g  A&Te(w Ah&*g) A"Je A"4gw A"!4gG A!cF Adn} Af( Av@ePA A@Zd<l Abf<1 Ac A&Hg  APtc AP,e  Ac Ajc A dة ARvpk @۳Ar&px @۳Aq @۳Apq- @۳A^8rz @۳AJoBdP @۳AȄnB@ @۳A qy @۳ALr{9 @۳A pځ @۳AЁhoBB @۳A^oE @۳AJo*b@ @۳A*}pH `۳Av0pVBD `۳AFun `۳Asq `۳A(pn `۳A pqj `۳Aj&pBl `۳Aidn~ `۳A@gPn`6 `۳AfoV `۳AhJjt `۳A6l l `۳A^lhj `۳An|jV6 `۳Aqrj` `۳Auj} `۳Avh( `۳Ax lq `۳Axhĩ9w `۳AzRl0y `۳A&|h| `۳A@mfY `۳A…&kZz `۳AxjDe `۳A: it `۳Ap:k `۳A&kFV `۳A8e6 `۳A:pgz `۳APc<{ `۳A<e, `۳Abts `۳Aff8Rv `۳Affgjz `۳Adh6 `۳Adzd `۳ABycD `۳Axf `۳AvBcו `۳Au.cĩx `۳Atc) `۳A4sfP `۳AqLcq `۳Aqe~- `۳Ao g١ `۳Al.cj* `۳ARi>gB- `۳AhcB `۳A6gft `۳A2obĂ A:|n«J A2zn6= Axqa Au.rΩ( As0p Ardn Andn Ajn~# AfrL] Ank~Z Asm APuk Anuh Ay"j<p A|j<m At~iةm AhLh f ADlh A (i  AЋiv At$m A`m~ A<gj4u Ag i AcN AnpgB AFe) Ab%A Ab!| Ad^y Acd Ab` Aex{ AdΩb Ab\ A^cĩq A~dm Ase Aqftê A(pej ApVc AfneV AldL AfbL_ Aޑm q Ap6sp A:pz AҎn~U Ao`~ An A o8 ApB}G A@qu Azqj P Aă$rx An@q AnBE A&p.Q Aq`L< Aofj ANnG A|pq~A Anpqή)C A~~\qI A.~p~X A{Lrmv Azdn?Z AxqI Axo\ Abwn>J ANwo APuBr.? A(uod A0r:p Aqq Aoo A6lgΩn A>Lcr A4@el AeA` A(dT AgN Aheĩn A~Bcw A~f[e A|dn A|8cu AX|*gĩx Az*gh ABydY Av gХ Al @۳AGh[ @۳AVjx @۳Ap_j @۳Ac6jĩF @۳Accȳ @۳Acd @۳A_"e2d @۳AXtcF @۳AMVc @۳AKf! @۳A:JfȪR @۳AGheS @۳AFfȪ> @۳AD.cA @۳A@dҪJ @۳A=tcJ @۳A9dȪ˽ @۳AeqB `۳Acq`' `۳A``0p `۳AV`q: `۳A^o< `۳APod `۳AOod `۳A8Ln `۳AKoȪF `۳AT?8rni `۳A <dn `۳A;qܪg `۳A~8pU `۳Aj8q) `۳A8lܪ `۳A^:~m `۳Ar?LmҪ `۳ADTjW `۳A:JTjҪ `۳AOh `۳AQjn `۳A>Uh `۳AVh `۳A"Xjh `۳A(\in9 `۳Adh8 `۳A`ejh `۳Aedj `۳Ateft `۳A`ebVլ `۳AcfE `۳Abbf `۳A^nd< `۳Av^fΩϧ `۳Av^.hJ `۳A]cP7 `۳A<\4gxC `۳AZrexn `۳AXJeny `۳ATX g `۳AWcF `۳AS"e `۳A"Sbr `۳AOe `۳AOb: `۳AtBhe `۳AAb `۳Ax\lp AZHq AXq( AXo AVq2ӱ ATox AMmȪ AMoJ AKqҪ AJoy ADJzq AIo AEoȪ AFCoȪ AFCqM A >q A>@oҪ A`8h A`8j A=LhҪ  A<>mܪ A?kҪ A\Aj A|D\l ADLhȪJ AFh AFhjȪ AH|j ADJhŻ AbJ4lܪk ALTj" AMjܪ} AMh AOrjҪ AO*l ALQmdw AjQ l AS l A~V*ln9 AVmnU AXlZ4 A>ZJjnt A[ ln4 Axad A8`bн A]eZ` A~["ex ApZVcdJ ARZfx AVfȪ. ATSf AQtc֭ AQ"eӭ AN6e| ANf» AJ6e AHdҪ AGcҪи AFc ADf- A?"e A?jcs A=f AR<f A8>gܪ A.8c3 Aeo`7 Acpt AcZn AaFnĩ AZao> Av^xn A]q2ٱ AZ\q2# ATqZ ASpA A`Qpn APqn APdnnP A"NqV AHqU AHFn A8Go) AEqҪο AHARq A?o A<oܪj Aj8m A@:4lܪ A<rjȪ A <`hܪ  A=*lܪ A="jҪ A?hȪ A?,jܪ AAmܪU AAthm ABlȪܬ ACmȪ APCthܪ AnC6jȪv ADm AF lҪO ALGm AHl] AJmܪL ALhܪs ALlܪ AM lȪi A~Qiؽ A^Sj ASh AXTl AUj AXjnA A:Ym2U AHZVhn AZ*ln A<\m< A\jFl A]l: A]j Af_mF A_l A_jhH APazlةŶ Ada i Aa,j Ac*lΩo Aej Aab' A_fв A\g<E A\Df  A \bx AVeD ApUf ATbx ATd ABQf A Pf ALjc A`Leܪ AIjcܪֵ AnHXfܪ A:Ee ACf ACbҪg A>Af A?Xf A=d A<d8 A;~c+ AT:g A6:rei A9cȪ A;_ @۳AlJ] @۳AM_Ȫ @۳AM]ȪG @۳AW(_xؾ @۳Aa_ĩ  @۳Acv\ @۳A`h[ G+ @۳A_b\ P! @۳A^DWD+ @۳AUZx: @۳AJS\ @۳ALQ[Pv @۳AOX @۳A8L\Ȫ: @۳AHHX0 @۳ABGN\ @۳AC&W @۳A?Z" @۳A <X"` @۳A:\[ @۳A@:fX˰ @۳A8X @۳A=V @۳A=4S9 @۳ApAzS+ @۳AGT @۳A"I.To @۳AIpS! @۳AIQ% @۳AOUa @۳A PQ @۳AQ8T~' @۳ATHS, @۳AU^V& @۳ArX*Sn @۳AX,VS& @۳A:YNR2 @۳A[VM @۳A[TJ  @۳AepS  @۳ABeDMd @۳ArbM). @۳AahL @۳AaOd  @۳A*_O @۳A\fN| @۳A\,Lnt @۳ARZQ! @۳AHZNC( @۳AxWM4 @۳ATQ @۳A RNMu9 @۳A>PP & @۳AOP% @۳ALPj| @۳A?Mh٣ @۳A><M, @۳A4<~O" @۳A:K" @۳A>XH @۳AbOIV @۳A~QnKn @۳A]H @۳A^I8 @۳AcFnA @۳A_DC @۳AF\D @۳AZA& @۳A*Z:C! @۳AZWxA @۳AR@E @۳AR@B*# @۳AGVE @۳A=>X @۳A>F>: @۳A,Iz? @۳ArS <&L @۳ArS=4 @۳ANTz?_+ @۳A_*: @۳A\9@- @۳AZ7 R  @۳AU9F " @۳ATx73$ @۳A^S<7>4|( @۳AQ$6W @۳AM77T% @۳AM98 @۳AjL(7QX! @۳ALL8fR @۳AJ6xZ @۳AJf5Qu8 @۳AI7Q @۳AH>5 @۳AjG9 @۳Al@7- @۳A@?9>m @۳A":27e! @۳A:] `۳A=]Jw `۳AB_ `۳AD]Ȫ `۳AvEx_Ȫ `۳AO` `۳A^Sa `۳AhS]k `۳AT:ad `۳AhXx_Z `۳AHZ_F3 `۳A[bad `۳A\]2 `۳A^aFz `۳Aen_`  `۳A]Zx5 `۳A][x `۳A(\Zx `۳A\[ `۳AZ2Zd^ `۳A W*Xn `۳A U[@ `۳AP:\{ `۳AMlW\ `۳AKxZ `۳AJ:W/ `۳APH:\ `۳AFnZԷ `۳ADXȪ `۳ADdZT `۳AD&WҪ `۳AD&\ս `۳AC[ `۳AFCZ `۳AzAZ6f `۳A=l\| `۳A0;lW"  `۳A<R, `۳A?V\ `۳A?4S6k `۳A?|Q `۳AOQF `۳AtQfSж `۳ATZU `۳AfUQy `۳AUR `۳AVVR0( `۳A2WTx `۳AYT `۳AZSF `۳A2\NR@" `۳Ax\V `۳A0^&R. `۳AD^RZ `۳A_SF `۳AaV `۳AaT `۳Aa>S< `۳AbXR  `۳A0c*NB `۳A$`N  `۳A^Kn `۳AX^K= `۳A]L^ `۳A\,QZ `۳A[M `۳AVjOD/. `۳AUBOP `۳AQNB `۳AXOM/ `۳AMpN `۳AKK `۳AnH~Ol  `۳A A6LJV `۳A9M@ `۳A8FKѦ `۳A@:H"v `۳A=jJ `۳A\AI6 `۳ADxK@ `۳A^IJ>  `۳AKFF_ `۳ANnKȪ `۳AvOnFܪ `۳AOJ"L `۳ASdF = `۳A@]J `۳A$eEn `۳Ac.E `۳A_xA `۳AD^C `۳A2\bC: `۳AZD `۳AfZlCxܰ `۳A>ZE `۳AXD `۳A|S&C@e `۳A,:~;Ҫ$ `۳AN;6=  `۳A;R?6M `۳A>At;h2 `۳AHF;6 `۳AG=: `۳AG;t `۳AH<"ӓ `۳AM;  `۳A2Mz?ܪ  `۳AtQ8;Ȫ `۳A\U? `۳AzU;K `۳A2W=״ `۳A `۳Avc(<r `۳Ada86¨ `۳AZa"8i `۳A2a7 `۳An\5  `۳A[9N. `۳A>Z9nm `۳ADY7H `۳AV7 `۳AjV40 `۳AQ8p9 `۳A P6n `۳ANt6 `۳AK5D8 `۳AKV6@w `۳AJ88 `۳AI5| `۳AI9,ֱ `۳AG7z `۳AE9 `۳AE6 6 `۳AD86 `۳AD8ϥ `۳A"D9v `۳AX(^ Av^`Y A0^X! Ah]W& A]X\ AF\HXx AZl\x AXW ATXZd AWX\ AVZx- AM\ A?v\,Ȳ A;ZZ, A9PZ` A$8Z1 A8Q" A9V Al;Q A@T6 A>AQ  ABZUy AFrQܪ" AGR AG,V AISc AO:Rp* AzP|Q AQRN' ARR`,! ArSR AST@0 AVR AZQF8 AZU A`[RSM A]UO A]BT  A]VE A^U A^Qd A^U\ A _vRJ J A_ U4 A~`dU AbTV}! Ac^VΩK AcUV ANcRS AcdUF AdV  AdR4 Ad@7 A=FA| A;@6 A@:\D A,:@"R A8dAҪ% A8DҪa A8B1 A8PAJ* A8:d At8=4 A8(<ì A8=- A^:p?5 AD;>>j A <;, A=< A=j;<*" A=z?| A?T=&# ARAz?6 AtB:& ACR?6ŧ A|Dh=6ߚ ApF=4 AF<"B AVG; AG;6H AH:"_ AH;P+ AK<:: A(M;,Ӗ AQ^=M ArS; AXT=&dG A"X.;+D AHZ? A\; A]z: A_? A`V;$ AZa? Ahb=$?# Ac=R Ajer=J ALe6ȪV{ ALe9xE Ae8Z, Ach8P Ac6Љ Ac9Z A8`6d A_7 AH_5| A^4,d A^|8nޮ A&^.6d+ AJ]7,5 A\,8F Ad\86x AZt6x AZ7P- AX$6 AX9 APWj6 A2W9  AUF7' ARUV6 AT8 AS7Ȫ AJSn7  A(R4, AQ66! AQ9* AQ87  AP"8Ƕ AO78:  AOD9:M AO4  AO`6Q A6N9I AM 5b8 AdMj6" AM8 A M9q AIt6r AI9>9% A^I4Q+ AG4: AF : AfFt66 AE7zy A|D4"& AhD9B APC7, AB6  A`B&9p AzA9^o A@@8r A@~6rݕ A@N9Fk A?9T A?4 A|?$6 Ar?8TB A^?6| A@?.6  A,?7$ A=f:8k A=8J A=4rڰ AL=V6,  A.=9 A < :nQ  A;j6S A:r8 A:6 A9"8 A88 A`8^8> A.89q A`8~^ܪ( A6:_: A <la A=va] A?_@ ARA0a  AfA` AzA],x ABa A2C]= AF] A2H] AnHn_a AHa AK:a AK] ALL_Ҫ AMaҽ AbO_ A8Q_S ALQ]} AS_o AT_xI AV&aPM A&YaP~ AHZbaZ ARZ]< A\n_Fҽ A_vaQ Aava Ac^ Ac4b} AdL^ ABeZĩ AcRXĩ; AvcWh> AlcZĩ AaZ AnaX Ana[\ V A``W A_FZ2 Az_[( A_Xu( A]$YN& A]Z ^ A ZRXx AhXXn A^X&\x# A\UNW ATX A"S(ZL ARfXʰ A.QfX A.QZ> AO2Zf AM2Z AMzXxs AKX A:J[ AIX; AIFZ AFHFZ AFpXȪΰ ApA[@R AHAzX"% A?zX" A=FZ"̹ A=zX" A <\,K A~80\} A8T6 A9T A:|Q A6:fS A; Uե A;Vz A=U"A A=Q, AP>`T,2 A?U,= A\AVñ ACRSA ADRS8 ADQa AEPU AFUB AFV AFRҪ AdHV  AnHQ AxH U˒ AHSܪS A,IU AlJtTҪ܏ AJ0Ro! AHKBT$ AKRp%( AKV A$LQȪ A$L(U ALL S AVLS AMTV AMFUu AM4S϶ AM U5 AbOT3 AOV AOpSg APQB ABQVI A`QU AQSj AZMm A*Z6L ADYN#/ AXxP4 A@XMX30 AXKX, AVO A8VP AT@L5 AvTO& ADTPP ATSK AJSP ARMJ ARP  AtQPƴ APM ALK AK Nܪި AKO AKOȪ AzKLd AJMܪ AvJKܪ AlJRN  A&JO AIO| AJI:Md A,IMR A,IBOܪ AHP_  AnHTLP AFBO AE|L>  A0EMw ADOz ACP ACN ACOK A@MT A >K"ϼ A=O A;JL A8M At8 I< A:I AN;bH,ӯ A><F~ Ah?G* A?J"; AEF@ AFFr AHJ,q AlJJX AzKHҪ A.LJ~ AMJe AlOlH/ AOI# AQNHҪѱ AQnK&  AT8J"8 A UDHj A4UJ6> AUH 9 AUF9 AUFKe9 AVNH h$ AVIJ!$ AXDHݮ AYdK) A4ZGl A8[0H A<\F AF\I A]0HĿ Ap_G A_:Hd A_Idk Aj`K| APaJFѰ A,bGŐ AcHF Ae0Hn@ AeK AeBJd AeEdK AeAȪƪ AeBC Act@e ANcBG AaDE Ada2A At`8Eɤ A]DR A\dA" A\AӺ AlY@ AbYzDa  AZWAD AFWC3 AVC A$V@ 0 AUB.8 AzUC*G A*U@Bp: A UZAí AUBR A0T@1 AVQC ANdAҪ AN&Ce ALZA AK.EҪ AHC AFZA6 AFC"9 AED  ATDD|† AFCD AxA^ Aj=fD A;Bu A:;D; A^:&Cޮ A88@Ȫ A8<0 AJ:V;N3 AJ:=O AD;T= A;< A;?\ A;?* A<&>: A <;Y% A4<: A`=>  A==T A2>;J  A"?d<n  AJ?4?զ A?> A?=^* A?~;Jc A@;" A*A=& AAr=@ ABr=@< AB;^w AC= | AD;| AD;6ϣ AD; AE<  A0E?,: AEB;zp AF<f  AF?: AH ?” AI;"] AbJ?,^ AlJ=~  AvJh==! AJh=R AKZ< AK ?, AK;, AK=" AjL=, AtL:9O! AM=s AO=Ҫ֤ AO?Ȫڠ AP`; AQ?G ATS? AhS=ܪ ASf? AU=\ AU4?*1 A$V;T# AV?޺ AW>A AX(< AX= AX? AY?R^* AY;> A$[=ϰ A\? A(\=x A]=d A]?Zڳ A]<x Az_b>ٲ A_<  A_<] Ada < Aa= ADc=! AXc? Ad<$ Adp?W Ae;4 A0c5O AZaH: A`8v$ A_"8|y. A^9|n/ A\6h8 A\5+  Ad\v9Zۯ A[82 A[j68< A[57 AZ5  AY99 A0Y7 AYn74 AYB6nP AX56J A|X*5 AXB6nF AW96qE AWZ76" AW7F AdW"84-  AVV6x6  A.V7. AUl9*4? AU5~ ATj63  AT\:7 AS9ۚ ASF76C AS.6Ҫ ArS8v3= ARt6 AR6; AQ7/ AON9ڪ AN4P AN4B AM67D' AM8c AL5Q" A`L~6 AK686 AK9' AK 5  AJ6 AJ7Q AJ5J  AhI7] AH~6Js AH4TL AH68@~ AG4|  AF7, AF<7z ADh8  AB4, A?8f A2>:Jz A>8 A~=8<# A$=9) AH<7>% A9:Ա A299 A85n A84 Ai\`Ȟ @۳Am\f @۳AsaΩ! @۳AbwV^t @۳Ay"`tą @۳A}](v @۳AL~Hbq @۳A_Gl @۳AR``g @۳AL bq @۳A]l @۳A\҄ @۳A b b @۳AZ\] @۳AJ^t\ @۳Ata,| @۳AN\{ @۳AnW. @۳ApX\ew @۳AƋW4z| @۳AlN4n @۳AJO<l] @۳AځM{h @۳A No @۳AB~Nu @۳AR}K]q @۳AoK @۳AoMNj @۳AmO @۳A0hHPm @۳Ah2F @۳AmIܜ @۳Ay.JB @۳AX|\I~ @۳Aj~J uq @۳ÀJd @۳A~bH6 @۳A܄G - @۳AhxK lw @۳AJ҄ @۳A>I @۳AT I{ @۳AH @۳AnH8 @۳AȎTG8ʼn @۳ȀFĉ @۳AbJ' @۳A8C @۳AlLE׉ @۳AAL @۳ADAU @۳AĈANv @۳AZAQ @۳AJ8@EC @۳A@֫` @۳A~A֫g @۳AL~D,b @۳A,{xA6b @۳AlB @۳Abr$@ @۳A8tv>4 @۳AuT=dZ @۳Az ?*y @۳AV~"=֫d @۳A6=g @۳A=*N @۳A;eG @۳AR<, @۳A?XŇ @۳A;*i @۳Az?8/ @۳Ax<8 @۳A?V @۳A:Y| @۳At6 @۳AV>5 y @۳A09xy @۳A :$B~ @۳AB09 @۳Ax@8z @۳Aj8r @۳ABz5p`k @۳Aր7*1I @۳Ar>5 n@ @۳Av7\ @۳Aq5e @۳AXm4 @۳Aj45  @۳Anfj^`6 `۳Am _; `۳A\natE `۳Ar_Rl `۳Ar]e `۳A\s\hRl `۳Anuad `۳Au]! `۳A&wat `۳Axa~ `۳Ay^ `۳Aza} `۳A|_ĩp `۳A^`2~ `۳A_2pq `۳A`Dv `۳Ar*blu `۳AD ] `۳Aތ>by `۳A$\v `۳A2_ `۳AXT`<= `۳A~"`JE| `۳AZ(y `۳A[k `۳Ax&\7 `۳Abw[5 `۳AsZ3u `۳A4sZ^f `۳AqZj `۳Aq:\br `۳AoZ«, `۳AkxZ `۳A\iHX8+ `۳AnV `۳AtSS `۳AuV8St `۳AuU[} `۳A~S<o `۳AR(Uw `۳AV `۳AVp| `۳AQn `۳APSp `۳AQp `۳A8`OH `۳AX0M <~ `۳AOK| `۳A>Nvy `۳A<RNX `۳A4On `۳APk `۳AMy `۳AP*M[ `۳ALfF `۳An,Lv8 `۳A|TQ,y `۳Axz^L? `۳Aw@QV6 `۳AqOw `۳A nHN `۳A|lJL `۳Ai,L2 `۳Ah^LJ `۳AgN)! `۳ATg,LP `۳AgO `۳AjBJ `۳AlI6 `۳ApnH٦ `۳A ptJΩ `۳A}bH2q `۳AVJB `۳A>Izij `۳AGi `۳AG|n `۳AH‚ `۳A|G  `۳AzF"|~ `۳A܎BJ} `۳AH `۳A`fI `۳Af@~ `۳AԇFADh `۳A* DrTy `۳ACnw `۳A….E,p `۳A<A  `۳A E] `۳A|"B aP `۳AJ0Clk `۳A|Crf `۳Az$E2 `۳AxB( `۳AlwNC  `۳ANwLEĩ `۳AuBE5 `۳A2uA  `۳At2A. `۳AsDC4 `۳AlDd `۳Ag>? `۳An; `۳Ar~;i `۳AsB;H" `۳A~z?֫o `۳À< I `۳AԂ<%n `۳A?dp `۳A؈:{ `۳A;ތ `۳A>Ԁ `۳A.:<t `۳A>5"x `۳A5G `۳Ap:h `۳A94XW `۳A^ :p.E `۳Azp5 `۳A>x5j `۳Arvd7m  `۳At(72 `۳Axp7Zʉ `۳AnR5  `۳Am4Z8 `۳Ai^t. Aj]LW A@l_ A|l^ AlaL Apa A|q]Qh AFu_ AJ{] ~ A|]Ω t A^XC Ar`G A>]o AR^~{a AtT`u A]t.h A|t^6z AD0ah AH\ Aph`JK A^6 An_< Ad^0C A`>} AHpXny A:X} A&HXy A<~YOy A8Y"} A4X] A[2M AzXb Aօ[d ATW]r A2pX` A(2Z5n AbW$} A>J[m ArYD A6ZBF A|ZjBh A0|RXBH AZz(Zp A`yXBy AwW~Ն AwX`ȉ AvwZǕ AuX΁ A u2Z  AtX\t AqXч APp\X A*nZu A*n&\r"x ANmZ A"l&\ AjFZ~R AfQ( AfU A,gV~ A6g\S AkSLɜ A|lUju A>nU ApT  ArqSr ArV Aw*S AwT AxT7 AxV Anz>S AR}Va A~hQ rz AU\@ A@Qp AL^QZ AU` ATĩe A@Ur AXR20r AVmU AVZ AxU ; ASb AXRSx A2UV ARSVy AHSPMx AB\S"~ AؒU@ A֏TQr AN| AO ADO\{ AŠKf} ATQj Aȉ^Lv| A*@QxG ALP< Ar6Q<7T A,,LLh ALK A΃P,k A`M}c A Pةpj AƁNg AN^ A6L"_ A~Lnk AxTQ`} AxO_ A&wMc AuM: AduO At@Q AsO AI2_ ARKfr A~H2W AJFr= AP~J,} AJH+ AtJt AHu" A@G  AlJ 0 AА,G< AnVJ, AĒ.@@Mg ARbC*E| A AN< AE. A^@&N A^\D֫6^ AxEm ARD^f A@py ABf`s A@U ABf ALE ` A|E[ Ah0CH8O Aj~BJh A|@{ AjyrBny AvA2I AqB2[ AznD(T A>nBn A|lA3 AjB Aj@J AizD+ AJgAȪ( Ah; Ah= Aj; ATl;K Ahl; ArlH?h Abm=: AmR?b An;0p A4nH? ABo? Ao>? As= Au>?P Ax < Ax:dv Axz<7y A|?h A~;a AT;oh A4@=&Ke A\4?rm A>:X A@2 Ar4?:_ A|r=3V A=Z A&>I A4*?&OU A>r=8H AH;: A<Xx A֊45y A֊6& Ax$6$ A7( A9b9 AHJ8b4 A>8 A5ht A6du A9Q A8O ARN9ps A>6p{] A45H3_ A5Q AB6)Y Ah9Ba A~`6Tl A~9̫cf A}4Ҫt A|6"{ A6{6ܪ} Au6݊ At8ћ A>s :xk As~6x ANr8M Aqr8< A pV6 Ao6d̆ A\n8R ^  A n6Z Am8 AmR:s A@l6 A"l\5  Al9ǣ Al7ڨ Aj|8z A8j9ƥ Ai5> Ah : Aht6ǣ A:h5-# Ag6 Af7K A6g_` ATga.< Ai_j AiXaL Aj_~ AjXaj An]t A>n_ĩj AnB^:` A~oT` ATq_l Aqaĩy As$^Gs AXw_`v Az_o A|] gy A|an A~_q AT_x Ahagv A|*]N A^ةc Ajva  t A`i AxvaP A ]Fu A@J`j Ap]H$: AL^T A̅b AN_p ApL^<@ A^P7 A_} A6`y AB]: An]} A>b A&ał A_ AH:an, AV^ AV]"g AlW Ah[6M AjX) AZR{ AZ]q A0T[Ww AhYbYy AvWmw AP X(L A[rx AYPC= AއW^x Az[Ռ AІYLZ A̅LYu A^[Pv AZX6i Aj\v A`[q AVY$c A*N\ap AZ o AXh A|NWpE ATZة g A@Xe A~X[ A~~\ةo Az4X_ AyxZ Anul\ Z AsfX| ArYj Ap[y A\nHX~ʅ AkRXV AjX\` AiZL A@g[t A,gXj A,gZZV` AeWh A0h*S A iTt? A i^Qސ ABjRB AjVLi AjVTLT AlVV Al^Q= AqT A s*S A*sVz AsSw3 AT@V(F: AXUN AzQ` ABS ADV A`Q= ALrL  ANO w A.RN> v ArL w AFP^ ANt Ap,Ls AfLO<&= AMs AMxE AdzN | AFLv A2O2z AHLm AK(Y AP4l A@Pn A~BOX| A|BOv Ab|HNq A{8Oة~ AzMot A8yL AxHNة3 ANwOD Aw|Lة* AnuL As"L/ AsMl AqTQ- AqrLO APpP+ ApOÎ ApnO AnhL AlbM AjO< A*iM AhO AgNM2 Ae6Q(o AfHZ A>itJ(K A,ldFd A>nIң AznF[ A(pF AIV AjJ> AErB Ap4Iv AFF0 # AdLJl AnFbp AJG A\FHc AJz A HP Aޑ6G AVE AA`u ARD< A&DC AA AB`K AxD$̄ ABA\~ AԌD ANXC A0t@ A0EF AŠvCƬa ADv AADH AvCb1 ACDD< AjE&y A`@2z AA0E AB֫C A$E| AJ^B2/ A6C3] ACFy ABd ALA ARCpd ALEfnD A|.El A6{Bxf AyfDۋ AtyA|\ AtB* AsA AsDĩ A sAS Aqo Az=y AN|=@y Ab| <d A>ie Av <@f Aځ<c A\4?:X AX>5r AL=:` AP<v APD> ʐ A;/F AD<y A\?@R Az:k} A<h} AZ:>& A&>&( A^.;TY. Ar?D8 A; A< AV>5 A> A&< A:>ă A ?%x A>Pru AP<(I| AX<7p AX8Ym A5LYm AZ 5{ A<8Dr A27} Aʌ\5 Aʌ7fS AX8 A:& A8Nz AZ7Xy A5%w AV4Z0 A>Z7 Aچ5Ȫ? A&92 A7W Ahf:V| AZ6|YI APZ70w A΃p:t)p A9L A7֫B A9P A"7?^ A$~8huv Av|8) A:|b9u Az7 Az9{ Ay~6ܪ3 A8y7 Ax46 Av*: A:x Ao>:Z Ao4  An8 AmR5& A^l7R t AFk4; Aj$68 Ah7 Alh5A Af\:$ Af46@  Af5 Al1| @۳Am"3 @۳An4  @۳Ar>0 ' @۳AxuR0," @۳A^v:/~ @۳A@{2t @۳A~2sh @۳A $10B @۳AB.:x @۳AP-} @۳Al*e @۳A8,a` @۳A.b'l @۳APj, l @۳AF,.o @۳AR)T. @۳A.> @۳A)@ @۳A}*<\/ @۳A}.ܪVb @۳APu|. s @۳Au`,Z @۳As^);  @۳Aq$,dH @۳Ao-d @۳Ao):= @۳A n+xZ @۳A:m+ @۳AJl+PC @۳AkN*  @۳Ak+  @۳AgJ$ @۳Afi%Cg @۳Afi&z @۳Api&% @۳Adk`'<u) @۳Al&<m6 @۳Al' o @۳A:m& @۳An,)  @۳Ao$h @۳Apd( ? @۳Ar'Ȫ @۳APu'<. @۳Avd(   @۳Ah{N%p! @۳A|(  @۳A}' @۳A}&J<% @۳Ax(g @۳A*&<, @۳A0'B @۳A&b%Prr @۳AH&u @۳Ax0%{ @۳A܉$y @۳A'D=/ @۳A&>Ep @۳An&sr @۳A%p- @۳AĒ&%u @۳A*!z @۳Ap @۳Arl @۳A~< 4 @۳Aj#! @۳A\! @۳Ab @۳A"% @۳AP6d @۳A"x]J @۳AȄ!F @۳A> 4F @۳A} @۳Az< @۳Au!  @۳At. @۳Ao H+ @۳Ak #:.% @۳AjFl= @۳AVjz4 @۳A:h 3 @۳A0hCZ  @۳A"g G @۳Ag( E  @۳APfH!~ @۳AfPA @۳Ae@|FH @۳AxknE6 @۳Annt @۳Ap @۳Abwp  @۳Ay< @۳Az`4/& @۳A~# @۳A 2,  @۳A(,@ @۳A}K @۳A"+ @۳A@( > @۳A`.  @۳Ad\  @۳Al! @۳Aj"| @۳A$3 @۳AFz $ @۳AP"AH @۳A8,K @۳A">z @۳Ar ' @۳A. @۳A:V @۳Abx"+B @۳AvIf @۳Ab4 @۳A.I @۳At | & @۳A,F @۳A2 @۳Ad @۳A @۳Ad @۳AVn @۳AL @۳Al,$L @۳A: 9c @۳A0W @۳AR6N @۳A^[ @۳A d % @۳A  @۳A   @۳ABb+ @۳An"  @۳AօV+ @۳A΃6 @۳A`!L @۳A 6O1 @۳A~>% @۳Az @۳Ay @۳A.y,6 @۳AxX2' @۳Aw,U @۳ALt^" @۳Ar$x @۳ArRC @۳ARn. @۳An: @۳A"g4& @۳Aj.) @۳AkH  @۳A&m^2P @۳AmbPQ @۳A nBV:" @۳ApHl @۳Ap L! @۳AJq  @۳A^q q( @۳A.y F @۳A*}R!; @۳A`~DT$ @۳Ax6 @۳Ah\ @۳AJ@  @۳A N,h @۳Az ; @۳A`B- @۳A @T @۳A2 W @۳Ar\  @۳A/u @۳A H @۳A<b-O @۳AV^s @۳A ,Aj @۳A  @۳At  @۳At.  @۳At h  @۳AƐ z @۳Ah$B @۳A6B" @۳AƆ: 5% @۳AD=3* @۳A@ $? @۳A*~ 1 @۳AƁ (@ @۳A,8 ; @۳A~ 2 @۳A|&: @۳Az 1 @۳A:w' @۳AtX 6~# @۳A^q& ,7 @۳Ao r6 @۳A\n@ @۳AkD 5 @۳A`j 4;8 @۳A8j 5$ @۳Af4 `۳Ag1n `۳Ah1n `۳A>i.14 `۳AjN/dޑ `۳AFkl4; `۳APk0 `۳Axk2 `۳A|l3"! `۳Anb/ `۳AHn2Hy  `۳A~op0  `۳Ao$1! `۳A2p4" `۳As0d `۳At"3Ȫȏ `۳AuL1 `۳A2uv/ؙ `۳A| `۳Aތ~1p= `۳AT3 `۳AL1  `۳A܎/x `۳AF2L]| `۳Av/ u `۳AА1o `۳Aj0Lz `۳A,q `۳AƐ- `۳ABD*p^y `۳A|.~ `۳A-8cc `۳AT)<< `۳A&|$, `۳Az,F `۳Ax+Ȫ `۳Au*  `۳Adu.b `۳As2-  `۳As. `۳As+F܁ `۳A\sT)p+! `۳Ar-.  `۳Ap +<z `۳APp2-  `۳An-Ώ `۳Alm+ `۳All*6 `۳A|l*d  `۳Aj.VM `۳Atj-& `۳A$j-  `۳Air.B` `۳Alh^)<0 `۳Alh+Fq `۳Ag)(o& `۳Ag0*>C: `۳A,g+Z `۳Af+~ `۳Af(  `۳Ag': `۳A"g$  `۳ATg'Z'9 `۳Ag$d `۳A4i'% `۳Ai&  `۳Ai&, `۳Ai:%@b `۳Atj' `۳A2k:% `۳Akv%,N `۳Ak~' `۳Al&  `۳ATl$d  `۳Arl6$ `۳Aln(  `۳AbmJ$@- `۳Am&<L  `۳A@q%( `۳Aqr$&% `۳Aq`'  `۳Aq(@ : `۳Awd(J `۳Ajy(<0 `۳Az#E `۳Az& `۳A{*& `۳A{)<J `۳A#  `۳A&0K `۳A,$B `۳AP%i `۳A&6<1 `۳A|(<K8 `۳A#0g `۳A$;" `۳A$w `۳A:%<' `۳AT%</* `۳Ad(%t `۳A$sn `۳A&l>m `۳AH(=z  `۳A#tu `۳A.] `۳A2p   `۳A΍$t `۳A   `۳A![ `۳A&)! `۳AP+' `۳A~"   `۳Af ,  `۳AX  /  `۳ANf G `۳AV~!2Z `۳A|4!Ȫn `۳A|^,?o `۳A|#s `۳Az:   `۳AzP2% `۳Axz:   `۳Axz d `۳AFzt"C| `۳Atyd# `۳Ay^n `۳ApxF # `۳Abwh `۳Av  `۳Av#X `۳A^v  `۳A(uV"ܪ `۳At"  `۳AoB" `۳A n`" `۳Al!N.$ `۳Ak-  `۳Ai"  `۳A>il G `۳Abh" 4 `۳Ag!  `۳Ag8I `۳AJgt", `۳Af  `۳Ae& `۳Adf,NB6' `۳Anf*C `۳Af 6 `۳AgS* `۳Ah!y `۳AhCE `۳Aja+ `۳Arl<L `۳Ap~ `۳Aq(LD1  `۳Ar `۳AFu~b `۳Ajy."2F `۳APz4/  `۳Azj `۳A@{B2H `۳A|&@c `۳A|f4/c `۳A|ZJh `۳A8~,B `۳A|P,o$ `۳Ad1 `۳A `۳A0D0 `۳Aʂ  `۳AԂ\   `۳AZX `۳A^" `۳A…r   `۳Aօ  `۳A+ `۳Aއ.  `۳AZ:z*0 `۳A" `۳ATa `۳Ab\@# `۳AL n `۳AH"F `۳A~R `۳Aj( `۳A&34 `۳A6z # `۳AJVrrc `۳A6U `۳A0E0 `۳A2nO `۳AZG `۳AD@@ `۳Ac `۳AR!L  `۳A l `۳A@T `۳ABd0 `۳AdPJ_ `۳A<cU `۳AHH?f `۳A|% `۳Ax .$ `۳A |O `۳A$& `۳AD `۳A> `۳AR@} `۳Ab8 `۳A_} `۳A^H x `۳AJX.+ `۳A@.+# `۳A΃=s `۳A~X.+A `۳A* T `۳AD `۳A:\7 `۳AT- `۳A, `۳Ahv `۳A^|-~ `۳A6^Tg `۳A# `۳Ah(h `۳A~,-k `۳A|# `۳A|  `۳A{#i `۳A{#l `۳Ax  `۳Av% `۳Av?5 `۳Au2'x `۳Au* `۳Au,* `۳As B `۳Abr/x `۳A6qRC7 `۳Ap̕ `۳A ptC `۳AtoC: `۳AfnȪ `۳An8v=~ `۳Amndn `۳Ald~ `۳AlȪČ `۳A6lp( `۳Ak `۳Aid `۳Ah< `۳Agn `۳A^gE `۳A^gxƌ `۳Aeb6 `۳Ae" `۳Afd  `۳AgV  `۳A|gRC' `۳Ah,.52 `۳Ah<6/ `۳Avhf4+ `۳ARie `۳Ai0 ;> `۳AnkF;_ `۳Al Y `۳A,l. `۳Amt<6 `۳AmVf `۳Ao8,<U$ `۳AFp ^<& `۳AJqfCD `۳Ajt  `۳A~tz  @ `۳Au=  `۳A2uT  `۳A@vp  `7 `۳Av z> `۳Av$ `۳Aw~!$ `۳A&w ^ `۳Aw `۳Aw 5 `۳Aw* &+  `۳ApxjA `۳Azx8! `۳Axh~` `۳Axjz> `۳Ax ? `۳AyB `۳AyD A `۳Azf ? `۳AJ{ : `۳AJ{`:( `۳Av|F*L `۳A|} `۳A}  `۳A}Hܪs `۳A}|x `۳A} Y `۳Aj~h@6 `۳A~86 `۳A^ `۳ANX `۳ADFR_ `۳A `۳A>. `۳AtA `۳A v. `۳A̅8 `۳AD\F `۳A| `۳Af > `۳AƆ@ `۳Ab E `۳A؈ h `۳A| 6 `۳An% `۳Anl4H `۳A֊ `۳Ap /h `۳A"h `۳A0* L `۳AA `۳AvȪ `۳Aܪ `۳A `۳A.R  `۳AFf <   `۳AȎD `۳AD [ `۳AȉN / `۳AD( `۳ADL `۳AN< 4* `۳A;  `۳Aօn@$ `۳Ad D `۳At ( `۳AL DV `۳Apo, `۳A=O `۳AN `۳A # `۳A~ R6 `۳Az}4 `۳A{\F % `۳Az. 6 `۳Az  `۳AFz0 %( `۳Aw Q `۳ANw &( `۳Aw` 2% `۳Au 6 `۳Au  3 `۳A$tj p .0 `۳Ar  3 `۳A:r:3 `۳Arqv ^<% `۳A^qB   `۳Ap|aG `۳Axp3 `۳Ao,I7 `۳An f, `۳An6 `۳Am# `۳Am! `۳Al   `۳AJl5  `۳Axk,i `۳Ak4$5 `۳AiV R `۳Ag T2 `۳Afv  `۳Af:/Zh Ag2x Ahg:/.  Ag<2^m AhN/@" Ah2 Ah/nG Ah1x A\i0`( Azi\0 ABj.1x AVjr3ܪ  A`jb4Q Aj4v Al3Ȫ A@l/˙ A n|3 $ A n"3  Afn4\O Anx2C AVo2Ҫ A~o/ܚ AoX4 A6q/Ȟ Aq>0 P Aq 0 Ar2ٜ As0/n/ A4sD4ĝ Ax0w Ay/ҪÁ A}0Ҫf A~/ܪJ A81ܪ3? A€b/Z}A A>4ҪQ AH 0^ AH2Ҫ4N AF"3.[ AP2 K Ad0/L' An/z` An4a A^3_ AR36{x A22 A<0_v AF2Ҫ) A 3g A3t A`-xy AD*b Alv*t AN,.v A+] Az+f]q A)h A+<) A`)n= A+j3 A-r) A*n A,x A*FA Aj,v A,.Pw A +q AP-) AP0*m6 AP+ҪB6 AP._ A *h A`), AԂ- a A*>%T AV, A>+  AƁ&* A,<Q Av)  AD+R/8 A€-!< A6*<6 A}z+Ҫi A|)   A{-} AxF- AwP- A0w)<xC Av)Ȫo Av+Ȫ Auh)<A At. D As)Zt  As.d Ar+ Abr)X ANr) Ar)=# Aq*$ AJq.  Ap.  An' An>& An&0 An &|C A`od( APp'&X' Apd(@  A^q6) a' Arq&M Ar^$^ AsH&n AtF(ç Au$ Au>&x3 Av%& Aw$Z  Ax#  Ax &T< A8y\&R A`y$ Anz$Ȫ„ Axz ( A{<(<  A{#- A|z&<3 A| (r A}'"e A}|$N A&%/A A:$^F AD|$I  AX@$e A\#J A%Re AL'a A.r$B A(,\ Ad(ff A'F: A8'Pe A0&Ҫ7 A:(F^ A(Ji A&3 A'q A&<M> Ad&Ȫ0< A,6)|o Aʌ(v Add(vr AJx($t A֏f&tj A(P1l A#y{ A&Zz Af A& q A  A#Bpq Ap! Ah A(\!G Aj6 A"& Ar"n A!̫ A~ j A2Ҫ`' A Aʇn#6 A(Zb A L3 AF A!\m A: K A2(#<  A( 4f A  AăF<E! AB,f*" AB"G A>!I AZ#za A!>ua A !V AXrJ AD~"  AN   ATd# A"+ A6ҪR A~~!  AB~* A~ !r^ A}+ Az}p A|!}  A^{!   Az@+ Az. AyJ J AyZ/ Ay ! Aw!  ADw"ܪդ AuȪ Au>!3 Ajt As,Ȫ[ As Ҫ A:r" A&r !ܪ* Aq"Ȫ AqP#"5/ Ao|- ABoF#0A Aoz!'E AnH! A4n[ Al"d Alxa Aj\!:.y Aj"t  Ai AiP4 A4i n Ai G Ah N AhxЈ AXh2d0 A:h6D A|g" A@g@ Af\} APf`, AhgH AgC  Ag8 =  A i9 A i4 A4i& A>i.I  Ak A k~nʇ Ak,n։ Adk^LG AlLx AllR Aln~ A\n<js Apn.b An AnK. Ao AoX Apxs Ap] AFpD AJq^# AqL Aq̃ ArȪ" Ar A sFK As6& AFuy AZujȪ Av - Av8  Av86 Aw,Vt A&wv  ADw ADwȪ AwhZ AwP Ax0  Ax8y AzҪ~ Az6$ AzܪJ| AN|@Gq A| ! A}# A$~Bb) A~# A \H8 Anh( A~RQ% A6T A~"Q Aq  AZk A6(! A~,l AhH A$aG AB~,o A`,c A(^ A"tH A  A  Y A>y AZ6w A@X A  Ajj At|u At+ A؈+  AZUK Ad4(   Ag  AZ A|  Al4y A "A& A\  A,v$& AL%  A28xX A.T#l AX$Mo Al  A$ AL^ A~ AzI Ap:W Af A\I  A A2  Abe A # A ` A = AlP"g A" Aʌ"i Ap& AD^H ADEY ADyi A҉TX A҉#L A86v A\x*b AHV!$ AN x" AD ASb AB Af  A A@i A""ń Anz An`$ A΃6a AR  A   A ~5K A` A$ AN</ Àp.0  A€Pv A& AP0 A A~4 A~^ A}Jg A|^ A|X> . Ab|ndG& A:|# APz" A 7 AvҪC Av A&w^  AwLg+ Aw AzxJ ( Ax  4 Ax " A$y ^ Ay@2?A Ay%z# Ay@~+ Az:[ AzlQ Azfd F A{LZ5 A6{6F A|{?' A{z ,l A{R A|lP= A}, A*}, ? Ap}p , AV~  A~ "2$ A~h= A~" A~|}0 A(f j} Am' A`, A 2G* A* À1 Aր) Al&6+ Av 5r( Av6& A2 A*R.0 Aʂ) Av. A܄|A$ A| 1  A 8D  A>v. AH|' Ap B2 A.j5" A *C7 AĈ: APP 6, A, 8Df Ah+ Å> ' A c AZbE AȎ R' Aڐp- AH < A. AB AR>b AdA" Al Ad A Aji Aj ܪ"| Aʑ  A   AfJH A>  A,C Avf y A z> AJ&6 A܎*Tb A؍&$# AL hj A>ro ANN A5& A CZ A  AX* AN  A B5 A  AD6W ANx AV~ ` AR 4 A* ~D0 ADd A3 A…H(  A…r  A Dq( AJb 5 A6(+ A, D AxC Adf0o A2 >  A~Z,7 A wg A 3 A>=@- AЁg A , AvB )^  A ,% AT3X  A1# Ax&D An ,C  A8~0, A~\ A} 5$ A} v A}>x  AR} 26 A|\ A|= A{Z x0 Az F# AxV (# A xX Ax ܾ< Au  5 AZuM AZu<  =% Au$ * Au  At*Z~. A$t l5 At   A4sT  i, As 8 Ar>ة& Abr " A|q ,7~. Arq2 I< ATq z Aq Z Ap\ Ao * Ao (Z` A~o4 AoB v, ARn0" 6 A4n*!* A*n^ 68 Am x4 ANmL *- A&m*=) Al <N Al x!K Ak,  A(kr (9 Aj $5 1 Aj0 2vD Aj Aj:R ALjHW A.j  D A*iLW Ah @ Ah2 9K Ag D  Ag( Af@  AfHp= Af ZH AZf1 Af26 A^g/ Ah:/Z AhF2p  Atj/  Aj1n  Ak4hJ AlV1Ty AJl0 ATll4 Alb/9  Am1Ҫ An0  AnZ2 " ALon2t# Aot1  Ao3  Aq/  Aq0Ȫ; Aqv4 Aq2S A&r:/ As1r ARsf0ng AuR0 9 Av1> AXwv/( o Aw3+ A.y2i~ A8y4% Az0n A|1Ҫn A|2v A"4_e A2 IE A3R Az0 PC A 2HY Ab/Z!> A*1ܪ@ A3pHr AB04ҪI A3pc A1xZ A0ܪ4 A@F2ҪA A27c A̅4Ȫ; A0p0q AHp0x A16 A0) Ax1 A/bo ARR0҉ Ax3ӌ A3`1t AF* A\d- zj A"T)c2 A *+rbi Az,<y) AІ*n$> AƆ*<2 A…+Ҫ> A.~,R_ A$*<C. AN*X3  AH+{- AH-FH9 Ab*<L: A) Av*. A>+dK An,=c% A~-H A~~*r^ A|*Ct A{b*<9 A{j,<Z  Az) Az-z Az^)<D Anz*<3 AZz,<z Ayb*<: Axr)Ȫ Ax,<%( Ax.L6 Av,4  Av*<69 Av$,<* Aux-S A y! ABtL,:=[ As6. As) As)=. A\s*, Aq-Z- Aq.d $ Ap* AnD*<" Anh.  Am)d$ Am,% Al6.  Al+ A6l)P8# Axk) AjF-B Api0*  ARi*' A*i". Ah+d Ah.,P  ANh+rB A&h|)R A,g)2 A,gZ-Z) Ag) L Adf) Adf' '% Af,$~R Af`'5 Af$,;! Af|$/A Afz&x\ Af%ZR  Ag*&~ A,g$4C A^g*&" Arg#$  Arg' Ag'd Ag@$   Ag & Agr$P  ANh &j@ Ah%\C Ah#( # Ah$, Ah$ZV A i#F A>i8'z  AHi&d AiN%r> Ai&~  Ai&, Ai% A.jL'r ABj&< Ajj$,& Atj$ Ak#4 APk^$a Ak$0! Al' ATl*&Ti  Al% Alm#lt Am@$n Am% An(X=' Ao'e Ao@$nܥ Ao&, Ap'=H Ahq'Ȫ՚ Aq'<q Aq(|) A>s#  AHs6$Ȫ Azs(~ s As(W A8t<(<. AVt") Av &~ Aw$S Aw'  AxZ( AVy'P " A`y@)<Z? Ay%fJ" Ay(p" Ay.', Az(8[ A"{%T< A{.'8% A|%g AX|'<I Av|$Kk A|d( A|*&p A}D%j Aj~&<=3 A~~(<N@ A~&V A#r A@)<@ AN%x A'ܪO AJ (<@@ Ab%^<i" Al,)<KE A&N  A &FA Aځd(? A&<3 A*d( V A'</ ABH&; A&%<  An(9 A~'<kB AƆ$$+ Aچ%< - A\(<H A. &@x Aj")<P> A#* A$<$ A&a3 AN'4 Af' A8$Ry Al|$8w A"  Aa A #zo AHR!u A! A #bh AX' AD :c A0 d AY A"H% A!i A, (! A^h A") A0 dl AH"* A4(#8i At"H A0(l A< Ad$"*$ AZ"^  AP#zn A F+ A΃: )# A~- AԂr&)! A8 A,< A!f   A Ҫ?Q AvH AT\!U A!t ^ AF * AR A~D A~n0k At~_ A.~(#Ҫ)W A}b /4. A\}   A&|! Z  AFz#f b Ay( Ax Ax Axt"ܪ Aw2  Av ϕ Av A,v"+ Anu' Afs#Ҫ= ApF  Ao y A4n#d Am`" Am"0) ADm!@, AmF9 Al? Al!/ Al" Ak"N( Ak   AFk p5 A(k  Ajrn  AVj"ޒ AVj" ALjp Ai",\ A\i"T AHi!   A>i  Ah"N&  Ag\!6} A,gh' A"g 6 Ag"G Af  Afx AZf HC AHE A8j  AB,7x A@C A   A`+  AV Ar"'_ A8+m& Aօb AXv Av  Aچ!Q  A Hds A8{` A>rd~o A`=t A! ( A6Tg AZ~# Ad9 A A,.Ja A4g A~N ADie AlnT  Av#.( A`Na Avn AL2^ A> Ačdp   Ačo_ AF ADk AbZ+ A$p  AƐn A>LL AjcO A~BA AKi A AZL Em A2` ALc A.>n AV8 A*d An AАtR` A!z A6Z AȪ8g Ȁ.( A6v^ A! A# A8|` A%Y Apl& A j ÅJV ApVz Ar` ATub A|aN AZ$&} A(~( AĈd^{ AZ AVp#" A.<& A$ Aʇ3R Av ARY A,~ A…Aa A=f A"@ы Af  ABc A`f k A;c AV6c A P Axz ) AR^K Aځ,o Az+R  A^" A|~+* A"o Ad@x( A XJ* A}T- A}|W A|& A|' A|F"?q A||Af A|{"j A"{3 Az+  Azv# A zBA! A z|A Aty. ALy$ Axd,  Ax0nM ARx + Av, Av<> Av.+T  A^v02' A@v,( A(u AHs As Aq C ApCp Ap^ AnȪo A n:] AmF  Ahl: A2k<Z A2k0VI$ A kVd Ajz"7' Aj(@7* Atj A8j<d'y A8jx? AziHz# ARiZN  Ah. ANhH], AhzT  Ag6o AhgNz Ag@<l Afz6: Afb: Anf^7  AextC< AeJ AfPl ATgH46 Ag >4q> Ag.*4x5 A0hM AHiD& AziXc ALjt$  Aj5v! APk^# AkĩuQ AJl|D- Arlx' A|l t5; AlD.! Al @7 AmV: AmJ8:  AnR f' AHn.# A\nv=Q An 1% Anl(  An L) A~oR 2/c Ao 2w A^qZc A|q> <Z AqZCM  Ard;( ADr:I Arp  P) Arn  ARsC Azs l=k% As4`?  As/ ALt F Au / AuH ) AFu`9 Auh8 A6v LD ATv<! Arv^"I Av ?, Awn" A>x..&n AyP&# Ay` p  Az(CD A(z 43 A A~R   A~\ A< ,' A }T AҪSb AҪ+j A, Ab 1$ AH ik AzR@ AB A.|@{ AB5! A`~ Aj,  A`~5  A( Ҫb A"d A|v. AvV$) AN`k  A^A, Aَ A  A>0 A6v A @$ AP@l AZ Ύ AT} A@ A4 ,~ AH< ARPhsw ARr i AԌb^U A$>Jb A h&{ AҎTs A֏ ,w A $P A  AƐ>P ABR, Aj|B AVJ Ҫ A8lY Af& pK  A&#( A ? A 6r ADdV8 AT @v A<' A( AT @ A> T AX @$ ANT @ A4Tph A4 A 4 AP Jt AΈF 2  Af|e A 4 AJ | A 4D% AD@C A $?- Aօ .?78 A ; A|b. AJ q A  AFp^ A΃ 3 Aj D AV x AʂR>i. ARh Gn Ad 2 Ah U A^*vy A ȪC A~: A~ 1@ A~ 1 Aj~* A} [ Az}lj A }/ A&|0) A&|4R A|q Az (P% APzD !  A~y 4   A8yv> A8ya A&w0*A AvB ' Av:  Av` ( Av>! Ahvp' A^vX Au0h= At:*  At  .9 As T7 Asvh# A\sz A s $: A sP ) Asbz  Ar@ (o9 Aq @7# Aq ZG Ahq PbT AJq$:B A"q 2 Ap  ApF QE Ao ,7T) Aov  Ao6 Ao 6r1 ALo&& Anh 49 An 6  An <W AmZ <P Am^ D Am Lc A^l, 4I9 Akt   Adk2 B Aj0 4 Azi  0 Ah 43 AgxJ Ag @.+ Af4 Af xA Af 2> Ae& 2H A=F2:  @۳Ab@40T @۳ApA/U& @۳AM1Qr0 @۳A\P/ @۳AP2  @۳ARt1d, @۳AT05 @۳AU1; @۳A W81 @۳AX4 @۳AY0 @۳AlY/V54% @۳AZ2 @۳At[407 @۳Ab^2 @۳A$e0n @۳Ac)P':! @۳Ac6. @۳AaR+0 @۳A^$,DL @۳A]*dT" @۳A\0*R.) @۳A[*R, @۳A Z)zM` @۳AYl*fR ' @۳AV*TZC @۳AT+LD  @۳ATJ.2B  @۳AS +HD  @۳A6S. @۳APR-X @۳AjQ-; @۳APp+5" @۳AXO.6 @۳AN\+R @۳AL* @۳AVL.D  @۳ARK,D @۳A,I.S @۳AG+N, @۳AG4+V$ @۳AG@.P0' @۳ABd-  @۳ARA+  @۳A>AB,^ @۳A@+~  @۳Ah?(->a) @۳A?,U$ @۳A`=,\ @۳A;)+  @۳A; -X7* @۳A,:)$S* @۳A:, @۳A9d($S7 @۳A<(\L  @۳A~='P @۳Ad>#O+ @۳AT?%RM! @۳Ar?'  @۳Ar?'bG @۳A@D%O* @۳ApAH&O+ @۳APC&E @۳AnCL'|P&? @۳A@D`'>W|% @۳AE(P"2 @۳AE (lG @۳A*Fb%S\, @۳AF$.I @۳AH>&@Z @۳AJ&>' @۳AL&J* @۳AM#5  @۳A@NT$49 @۳AO%5B @۳AP2(F @۳AQ0%Q7 @۳ATSF(T"4 @۳AS'&Qr' @۳A U%r @۳A\U&W @۳AU,)IU @۳AV$dE8 @۳AW~'V @۳AX(G* @۳AX$  @۳AXYd( M$ @۳AvY$'  @۳AV[$'jI># @۳Aj[(Q{) @۳A\$D`^3 @۳A]$j05 @۳A@]`'Q( @۳A]d(f? @۳A^L'Ql @۳A_'"A @۳AB`(_( @۳Ac(Z'f  @۳Ad&FQ @۳Ad"2 @۳A@bEv @۳A(\!Z+ @۳A`[2YF @۳A["N[F3 @۳AY#N[j @۳AV Ȫ1{ @۳AT(#O% @۳AlT"R. @۳AnR`"RR @۳A2R: L @۳AQ !M @۳AP  @۳APN XL! @۳AfPGn+ @۳AO Fr @۳A:OJH @۳ALB5t @۳AEn#S  @۳AhD!T @۳AdCH!nJ9 @۳AB!DE @۳A@E)& @۳AD@!&L5 @۳A0@H @۳A=j"K: @۳A= ZBw @۳A= T @۳AH< RC& @۳A:  @۳A^:<Or @۳AF9<#B:$ @۳A8"Th @۳A~8L"| @۳AJ?jJ, @۳A@E, @۳ADx j @۳AFx"  @۳AGTJ @۳AH*M @۳A&J`L  @۳AKI$ @۳AO&Q @۳AzP>PT @۳AP4&G]5 @۳A2RJ:B @۳A@SFg @۳A^SXS  @۳AS~Nf0 @۳AUhK+ @۳AXP? @۳A"XhhK  @۳A"XA @۳AvYT^8 @۳A~[6bL @۳A[vL @۳AT]Xe. @۳A](1 @۳A^j0VD7 @۳AD^T ;  @۳A^`.D @۳A^ @۳A_R @۳A`0B @۳A @۳AcE @۳A\d|Fa @۳Ad @۳AVe`$ @۳AjenNBr! @۳Afd2<@ @۳Arb( @۳A_I @۳A_S @۳Az_A  @۳A\pW! @۳A[\J  @۳A\ZW @۳AbYQ; @۳A6XZY1 @۳AWT2s @۳AnWt8]A @۳A @۳ArNG7 @۳AJF4@ @۳AJ,<= @۳AI=t. @۳A= * @۳A|:>0 @۳A8 @۳AB8̺. @۳A8 ̺) @۳A8J8% @۳A9v @۳Ar: @۳A<<'& @۳A?BJ9) @۳A@<\Y @۳A@  @۳AjBj  @۳A:E8$% @۳A>F 6 @۳AFDB0 @۳AF|(Ad @۳AFhH$ @۳ALG2+D @۳AG @۳AH(t54 @۳AH>j00 @۳AdMK $ @۳AMC @۳AMh<4 @۳AXOJ<% @۳AvOf|< @۳ARH4" @۳AR FA@ @۳AR@! @۳ATZjS @۳AU p4+ @۳AUp R% @۳AlY"L  @۳A8[@R @۳A<\|K @۳A6] 80s @۳A]RD! @۳AcT21 @۳Ad5' @۳Ac8 @۳Aa - @۳Aad54 @۳A` 89 @۳A_ Iw @۳A_I  @۳A]l;  @۳A[ % @۳A"X H/ @۳AV@ Lv @۳AV I$ @۳AVl_ @۳AU4 @۳A"S  @۳AR:1 @۳ARp08 @۳AN, 3K" @۳AL 0~& @۳AJ ĩT @۳A(H T- @۳AG  @۳AGFqG @۳AF @  @۳ApF ^9 @۳A:E  @۳A0E\ @۳AC Jc( @۳AAF "> @۳A@ ~N @۳A? "C @۳A> Q~ @۳A> #"( @۳AH<D T @۳A: DP @۳AL8~ ȪG @۳An>l/RW> `۳A4A|3^ `۳AC/h `۳AE2 `۳AHFD/  `۳AHFb4@ `۳A`G3 `۳AH3  `۳A@I2P `۳AJI2.  `۳AJ/P1 `۳A:J1 `۳AJ0/,Ԟ `۳AK26P6, `۳A K1 `۳AtLX/E `۳AN/|Pn `۳AbO<29 `۳AO// `۳AVQ2ͬ `۳AhS/BX_, `۳ATL1%# `۳ADTd2v `۳ATj1d `۳AZN4 `۳AZ3- `۳AZ 2# `۳A[l4R `۳Ar]/\ `۳AN^/  `۳A`/ `۳ANc2P `۳Ae:/$' `۳Ae81r `۳Ae@3bm `۳A$e)hF  `۳ADcH+CL `۳Axa + `۳A`v*T  `۳A~`~,SD `۳AR_h) ( `۳A*_D*Ȫ `۳A]* `۳A|]*;" `۳A\. `۳A[l* `۳A>Z-n| `۳A0Y,Y `۳AX-$ `۳AX0* `۳AhX*g+ `۳ATX.7$ `۳A6Xj,( `۳AU)5 `۳AUt, YH `۳AT,u' `۳ATz+# `۳AT.b8H  `۳AT+Β `۳AS)&Q- `۳AS+Q3 `۳ASJ.XxA `۳A^S)F" `۳AQ-` `۳AO) `۳AO*S `۳AL)O7# `۳ALH+xO% `۳AJ,Rs `۳AXJ*8X- `۳AnHp+6 `۳APH.T `۳AlE)\! `۳ANE+D[, `۳A^DT)Q2 `۳APC`,Z, `۳ACF-UV' `۳AB. `۳AA(-^{ `۳A?.6q `۳A^?+  `۳A>*V `۳A(>R+bS `۳A=-< `۳A<,E `۳A:+Y+ `۳A9r)Y9 `۳At8+n;;; `۳An9$ RR/ `۳A9t'^ `۳A:$Q `۳A>,$LE `۳A>N%^P,- `۳AD@2(:[ `۳A.B( `۳AB$"w `۳A2Cb%M=" `۳ACl%^P8 `۳ADl%Hs `۳ANE6$$x `۳ANE%TPS! `۳AE\&VW `۳A F'TF  `۳ARF% `۳AF(S" `۳AFZ(O `۳AG'JF `۳AG'@Z.' `۳A H&a `۳AH%E& `۳AI#V `۳ADJ4&HW `۳AJ& `۳AK (Z `۳AK:%I `۳AL'VL `۳AL&O$ `۳AM%Ou `۳ANx( * `۳AN$VA `۳AO(L `۳AO & `۳AP%( `۳AP#X `۳AQ'K `۳AQV'F  `۳AR\&QQ `۳AS%v `۳A"Sf&v `۳AS'Y `۳AT((Ȫ `۳AT$ `۳ApUx(  `۳AU#85' `۳AU(^Z@  `۳ALV& `۳AjV'N `۳AtV%85+ `۳AV#r `۳AW&5^ `۳A `۳A<4M `۳A<x1 `۳A?vdE] `۳A?2XG9 `۳A@H `۳A@P `۳A>A8=t `۳AFCJF  `۳AE*C! `۳A0Ez6~ `۳AE${ `۳AId| `۳AKR~i `۳ALX8 `۳AMZ3z `۳AO} `۳APh. `۳AQM `۳AQN:** `۳AQNV  `۳ASȪi `۳AS>F8 `۳ASL  `۳AS|4 `۳ATA, `۳AT:@K8 `۳AbTTPc* `۳AT(>F `۳ATNL  `۳AVVKa `۳AWR ; `۳A@X<rAY% `۳AX `۳A:YSC `۳AlY^S? `۳AzZrbLU `۳A[> `۳A\l `۳A\j1 `۳Ar]> `۳A]n y `۳A^W `۳A^0 `۳A^ZLV' `۳A^J*W' `۳A^W% `۳A8`Ȫ_ `۳A`pW  `۳Ac" `۳A\dH `۳Ad8# `۳AdB` `۳ABe<$y `۳Aez `۳ALe  `۳ABef- `۳AdP `۳AdI# `۳A*d 0 `۳Ad^u4 `۳AcB `۳Ac `۳AbP `۳A2au `۳A`P( `۳A8`n `۳A_r<@ `۳Ap_"Ph$ `۳A_  `۳A^:I `۳Av^>TU- `۳AX^dl `۳A^: `۳A]HI `۳Ah]I `۳A6]hU0 `۳A\S `۳An\4  `۳AZ\h `۳A<\+ `۳A[.V `۳A[ܪt `۳AZ<I `۳AZE `۳AZTxC `۳AYvR\1 `۳A&YZc# `۳AXG_ `۳AXT2  `۳A^XW `۳A"Xl+ `۳AX>>s  `۳A~V>>& `۳ALV4 `۳ARUZy `۳AT<\ `۳AvT `۳AS\H/ `۳AS=^ `۳AR* `۳ARr* `۳APR  `۳AQD3 `۳APRD `۳APFz= `۳A>PFF) `۳A PK, `۳AhNZ? `۳AMvQN  `۳AM8<t `۳AM1 `۳AxM3]1 `۳AjL`@ `۳A8L=2 `۳AKv=n) `۳AKV<A `۳AK2" `۳AbJ03# `۳AIP&  `۳AI?/ `۳ArIdEo; `۳AHPy  `۳AHzxEQ; `۳AG=9 `۳A.=T`+ `۳AX;|.  `۳A 9>F `۳A801, `۳A8 '. `۳A8n  `۳A::0 `۳AN;@* `۳A<(' `۳A<F& `۳A>&/ `۳A,?R h  `۳A@ h#1 `۳A&@O `۳A@Op `۳AAF_  `۳AA $X `۳A.B I `۳ABfW `۳AC < `۳ACf I` `۳A|Drz% `۳AD k `۳AD Fk `۳ADE Ra `۳AEp Nq `۳A*FH. `۳ARFp/_ `۳AfF?$ `۳AF R `۳AFXT<* `۳AF4*Hv1 `۳AF;  `۳AFr<- `۳AFN `۳AG& `۳AG0\RB `۳AGhF5 `۳AG~:2 `۳AH;( `۳AHt  `۳AH  `۳AnH N `۳AH2 `۳AH R. `۳ATIFx@ `۳AIw  `۳AIxE4 `۳AI4 x@l `۳AI; `۳AI R  `۳A:J2  `۳ANJ Cw `۳AbJ ] `۳AlJL `۳AJC `۳AK;_" `۳A K "2J `۳A K$7 `۳A4KjI `۳A4K E.< `۳AfK,+ `۳AKt-" `۳AKHH! `۳ABL x, `۳AMD0 `۳APMP@ `۳A6N @D `۳A@NxA `۳AN` `۳ADOJP `۳AlO~KJ  `۳AP x3Q `۳AP;- `۳AQZ/d `۳AQO( `۳A2RL `۳AZRxa `۳A"S4G{ `۳A^S p4) `۳AT _}" `۳ATT_O, `۳AT\ E.  `۳A.V,A `۳ABVVSG# `۳AV0V@ `۳AFWz  `۳APW Lj `۳AWX, `۳AW@A% `۳AW20, `۳AJX)O `۳AXBl- `۳AbY*X `۳AYPQ0 `۳A*Z0I `۳AZ4  `۳A\O  `۳A]N `۳A:^rhg `۳Ab^TM  `۳Al^  `۳A`,: `۳A`:a `۳AZaO `۳Aa < `۳Ac/ `۳ALe<s{ `۳Ae 0 `۳Ae2 `۳Ae 2A `۳Ac  `۳Ac.  1< `۳Ac\x2 `۳A^b  `۳A6bX V `۳AaX `۳A` d? `۳A`~$ `۳A`Xv  `۳AH_0r. `۳A4_" $KC `۳A^W) `۳A&^ A `۳A^) `۳A], `۳A]0~! `۳AT]Z ZJx `۳AZ\ R= `۳A[ {7 `۳A[, 4C `۳A[, 80( `۳AZ:T7 `۳ApZq  `۳A4Z * `۳AXB rA `۳AVb t5 `۳AVX| `۳AV @P  `۳AVVA `۳AT3 ' `۳AT| `۳AT: hAe" `۳ATNB `۳ATS3/ `۳AQ L `۳AQ x `۳A.Q: `۳AP 3; `۳AO, R9 `۳AO8 n1GJ `۳AlOP T `۳A:OH `۳AN rE `۳AN Z; `۳AN E+ `۳AM0D  `۳AdM ;X! `۳A `۳AK `%Z `۳AKT B51 `۳AK   `۳AfKr 8# `۳AfKv $DA! `۳A4KXK# `۳AJX `۳AJp/G `۳AJF `۳AlJ zM `۳AXJbVd^ `۳A0J" 0+ `۳AI2 6! `۳A^I b `۳AJI x6& `۳AIt   `۳AIJ7( `۳AH8M `۳AH"' `۳AH V& `۳AH '  `۳AH6 ,# `۳AH % `۳APH f* `۳A2H   `۳AHF <g" `۳AG F, `۳AG D @ `۳AG"? `۳AG @Z% `۳A~G b `۳AjGF K+ `۳ALG "-` `۳ABG = `۳AF6 n' `۳AFB 0]  `۳AF@c! `۳AHF0D `۳AHF  R4 `۳A4F~+ `۳A4F6  `۳AE P- `۳AE&! `۳AEd j!S `۳AvE 6" `۳ADj $!oI `۳AD F;R* `۳AD r4 `۳ACU `۳AFC&T `۳AC/u `۳AC < `۳ABl8! `۳AA VI! `۳AAxO `۳A@ `۳A@JK `۳A@ n"; `۳A"?H\Rg `۳A>:DSH `۳A>H `۳Ax>  `۳Ad>z@UN `۳A(> :   `۳A>:R  `۳AB=$% `۳A< dJ `۳AR< Z `۳AP9 J: `۳A8 &)Q `۳A8 $J) `۳AL8>Rr `۳A 9x2( A9X/ AJ:4ܪݘ Ah:r3Ȫʑ A<4 A*<.1^ A<t1Zp A8=/& A=J3r! A >3Ba A?b4! A0@3 Av@0,_) A@v/6_6 A\A4) AA4. AA\0^# AA0  A.B2f AC2^! AE1F  A0Ex2, A F0O  AF2,  AF81^) AF81hk AGX/P A,I1@P ATI0 AhIn2t AI4Td AvJ4x  AJ3| AK0 AfK2DK AK0P( AK2J AK4JV A$L@30Q- A.L4r ALL3Dm  ALz00Q" AL.1ҪT AM1E  AM2Ѣ AN4Ҫ AN35 ANO3" A>P1@ APz0n ARb/Ȫ A RB1ܪŨ AxRP2 AR/5 A,S1 A|SD4ܪP AS38  ASb/> AT4\ A0T1 ANTn2T` AT*0;D A>U2c ARU 2 A\Ul4T AU1 A.VH0|28 AVV224P AV0 AV0/Ҫ AV$1 AV2 AW0 A W3*  AnW047 AW/7 AW/ AX2 A:Y17B AY1 AY2F& ARZ/@ A$[2% An\v4 Ax\2¢ A\p0d@' A\4,>( A\/:s0 A]0 A_1  A_v49 A_1 A2a2P  AC A[4+ AZ*VI> AzZ:*f AZF-@ A Z+X4 ADY+FE AY, AX-7c! AX*5* A"X),2o  AW\+ k AWF-# A2Wv*<6 AW- A WJ.BXN AVF-hP AV8,J A~V+LD ABV+ ABV.<  AU.h9 AU&*W- AHU- A U$,= AU)͞ AT&*!3 AlT&* AS- ATS+ A,S0*>> ASD*l AR,=  ARb* AR*^U ARn-# AR\+5 AdR-hU? A2Rl*P AQ.j AQ-O AjQf+Ҫ  A`Q)o A$Q+[ AP+r< APp+T? AHP:*6  A Pt,>R] AP+ҪP AO-Ҫ A0O*- A,N*T AN) AMz+ AM(- AM~,P\. AMj, AL*   AVL.ܪ֡ ALt,Z' AK-=" AJV,2E AlJ,dT # A:J+ AH2-6 AH,`SV A2H+8 AH*( AH*O AG.$ AG* W), AG,N" ALGT) AF+G AF-JI AF-V]B ARF*j AFl*Ow  AE&*Ȫ AE+ ' AE.L AXE)$SE% AEf+(  AE+6 AD-h{ AD, ArD.o AD6.[*$ AC.  ACF-rz ABD*6UF AB-a!! A~B*{ AtB.P AA +:[% AAz+ AA-^ AfA|.`, A@.U" A@*Z{ Al@&* A?*:[E  A>+T  A >+` A=j,K A=<-  A<f+H\! A<.^ Az<b*5 A*<T)Ȫ Av;*W  A|:.: Ah: + A^:(-:l. A9 + A9,} A9-% AP9H+Y. A9*+Z A.8+ A8)6 A8:*p A9>& R 5 An9'0I A:$RB$ AF>( A>F(  A>' A|?% A?x(,U A?%N[q  AD@~'>$ A@J$Le5 A@l% W> A@&>" AB&tSW AB$E A2Cn(t] A,D&Rd A:Eh$4C AfF$E6 AF^$v AH&4q AH&d A|I($X" AId(O AI(! AL(O# A"N'V( A@N%K  AhNT$Ҫ֝ ANV'>  AOJ$49: AO.'5 APP(K AVQ'i A~Q$n AQ#9 AR(K AR(|P APR%hF'" AnR&Ka AR'64% AR|$Ԕ A@S2( ADT&U0 AXT(&/0 AT$U AT*&j AfU#A# AVVH&  AV$6 AV~'I@ A2W(z AnW>&  AW%JP AW)hZ) A^X:%A AX$'0 AXn(3 AX`':=  AY&+  AYp&M A&Y$ 4 AXY$"A' AZ(I" A ZL'I' AZ( A$[#L0E& A[&f, A[&0C A\#Jn# A]&& A^#80m- A^%[*% A_ (rU/ A>_$Pw Az_'x^ + A_:%_? A_&Ug A`'*/$ A`#J APaN%Z# AZa$@- Aa#>/4 Ac( A&c%A%  AXc&  Ac(`? Ac&`3 Ac &)( Ae%xۋ Ael%F A.e#,# A8e(` ALeZ(z Ae'O Aeh ALe G;# ABet  Ae!F Ae#/Z! Ad!, Ac  AaR\- Aa0 [%, A!f ABQ"J  AP  AzPh A P"DL+ AO #4" AhN& AJN#fQ% A"NH! A(M J A`LH!E AHK Z AK"ȪO AXJru AXJ"S A,I"J AH!U@ AH!V AH4! ADE!^KC/ AD  AD ܪk ArD#N! AB& TQ% AB"T# AALg A4A`"Ȫc AX@^T A6?: LO! Ad> S A(>"xx} A=!H<  A=JP- A;"Sn A; U:, A:f! An9! A8 A`8b  So A8G~ A8  AL8(Rv A9B1+ Ad9>p A9<`f A9:Fq A:0ML# A:TG  AJ:|2/ Ah:J; A:M4 Av;<  A;Nx[` A;2 A;O AV=t5 Aj=F4b A=V=- AAH- A A ("  AfAns AzAx AAJ A$B("$ ABI& ABEI A Cn@P% AC  AFCJ AZC"] AJD j ATD, AdT&f* Ad7 ALe )& Ae.dq Aex A`ej AVex Addj Ac A,bDX  Aa@\ Aa AaȪ[ Axa , AaA  A`fM A`<Ha% A`6P' A`l# AL`g AL`R< AB`Pn A8`< A_ lA A\_h` A_pW A^A AN^[ A]Ox A]1 A]<h. A\0 p An\r AP\<! A.[nb A[IM  AZ6 AZU; AY2 AY>\ AX|Ks AdWR[ AW^P' AWnyj AV ARUni A>U\ A4UKd A*UO AT*(& ATR>. ATAL/ AXT< |H AS,s ASPPw~ ArSP ASMb% ARBy2 AR ARH: ARF2`L A@PL AEH  AE2! AE *[ ADN A@D"y ACDQ8 ACdC A2C BA A Cp' AB   AB)! ABv_ ABJ. AtBh# AA(J AAvL AfA2" A*AKP AAr, A@2J#; Al@M Al@F%A A|?>Kr% A>K?  A>:=!4 A>G% An>F/\ A=<c A=HbG4 A=<'+ A=F [ A><<2p A; A;D w Al;d,  A:nJ* A:)C Ah:*t  A@:|t  A":*  A9H- AF9J A(9J2 A8<@F A8Tl A72<K At8V A9V0 Ad9rL A:f>  A: 3  Ab;C< A; 5V A<< A=deP A=  A=Z A >  A><JY AJ? 2"3 AJ? _ A?dP A@FJ A@j A@> ] A@2Z[ A*A2bX A>A AAR%4 AB A8BI' AB D AB|R%Z2 ABI* AC   AFC !/ AC] ACIp/ ACF} ACnO A,D\ &. ADn ADBD ADk! AD pH&/ AEdm ANET<& AXEXK7 AEX AE*; A FDB[) A Fv>+ A*F F"+ A*FR AFf ةl AF5 AF/ A~G$ AG / AG?% AG ^P AGG AFHLY AxH6  AH B AIL ANJ A K ARKdO ApK N AzKhK ALBh<, A$LN ALZ, AL J AL6. AL Ω`_ A M yc AM< AN ;( AJN(9 ATN ΩX ANL  ANΩb\ A0OK# ADOCF$ AOةL AP;1 AP | A$Q y_ A$QL A$QԲ< AtQv<% AQ  ( AQyj AQ^*  AQZ?% AQZ^ AR2L A AU4 + A`VttO A`V|2T AV  AVn; A W8]# A2WA  AZWĩM AZW3w" AdWةK AnW 4  AW0 AhX0L8  A|XP  AXl  AX 3 AX8]a AXz >l* AlY60B AlY0x\ AYH AY0BX( AYL41 AZ"X( AHZ  AHZB% AZ0R A$[ x]N A.[W A8[4t A`[  A[$R! A\z nAS A\ .N\ A\R A\x] A0^xd Al^ x{_ A^M A^P6 A*_  AH_:  A$`r` AB`neb A`I Aa$= Aa 62 ! Aa F l Abk AcZ2^y Ac`> Ac^2 Acvdr AHdt Ad ^2:B AeHo9 Ae&P Aex7 Aex FHF A~e0 Fa A.epZ> AdM Ad  AvcR ADc d< AbNү Arb R A^b  AV`" d> AV`: dK A$`; A`< 8 A_ /) A_n A_Da< A^  A^ `SS A^2 A^7  A^, x]4 A]o A] /8 Ar] A\: ?E AZ\ <& A[ E2 A[b & AL[ A.[b6 A[NP AZ xJp AZ |{ AZ< AY/#3 AY C AX? AX R. A@XL .0? A@X \ < AW  AW& j AW: AW:" AWJ Y  AxWl0/ AVV( R AU A  AU&" AHU P AT EZ ATR`" A0T 5 AT P| AS ArSD A AR \ AD AJ D* AvJ 26=+ AIB? AIt DF0 AI [ AI  AH f AHB @> AHl  14 A2H $$ AH  AG d5 A8G AFV f AFd ,&/ AFB0 AF 8n AF ): AF K AFv E! ApF D? ARF Z\ AE: _: AlEl B AbE  > A0EE AED "A AD G AD !J AD p> ArDlA' AC I" AC, 4.# AC  " AC2 (O ACy AZC^ U A ,#y1 Ax>    AP> b AF> b A=6[ A~=  r A<p< AR< # A<D"  A:XH%C% A: 2I Ar: D$"( A90ȪES Ax9T 3  A8J A82 \%* A`8|  A8X 27 AV80Ȫ A":/Xr A@:0q A;,3B A\<0Z AV=0 A>/J A>0VX[ A>2 A>N4 A?&/6_9$ A6?2u A|?~1~I# A?N/~( A?n2J A?/:VN A?0" A?4|3 A@/c|  A@`1J AA4^ AB0$0 AC3f APC0T AxC2  AC>0,_ AD40d# AE1 A&E3: ANEV1T AvE0e AE0(^ AFx2bd AF/Tc AVG3b  AH/  AH0? AH3h AxH0J AH3@ AI2^2 AI:/X AJ0Ee AK2d AM&4d AM0 AM2D  ATN/PF ATN<2Q) A^N0/k AO0x  A:O0P+ ADO4^P AbO4:& AvO2|7y AP2A APJ3dd  APl4\ A4P/U! APf0 AP0/  AQ3V: AQ267 A$Q22TN AQ47C AQ 0" AQ0( A R2 AFRB15 APR4l AS07 AS0j5 ASP2, AT08 AT08H AT/ AT/N)! A>U2A AHU45! AU/H AU0 ALVN/H AVB1vy AV/> AW426,# AW<2 AFWZ2(  AWv4P7 A,X/T<  AJX2 AX2>4M$ AXf0$5' AX4nC A&Yv/n* A&Y2< A:Y4vX AbY2PE. AYr3*4 AYz0&z A Zb/7 A*Z/& AHZ0 ApZ07K AZ3 A[p0% A\j1F AF\0  A\b/] A\0\ A|]/ A]2 G  A]N4 Al^3$  A_2 Aj`f0|  Ae+"(& A$e,d Ad*D  Ad,C Ad)P'$ AdR+xx Ad) Ad^)& AHd* Ac,Al Ac+v AcP-v Alc*~ ANc) Ab)V] Ab)H$ A|b- AJbf+'  A"b2-[  Axa)/ AZaZ- A`,E< A_Z-¥ A\_-J* A4_,HD  A^.S A^$,S+ Al^-3* Ab^*vQ# A0^+  A].J A],H Ah]+2- A^]*Hb An\.7}  A2\ +  A \,Q A \-8 A[+HC A`[)d79 AV[P-7W A.[)TZR ApZz+~ A\Z+7  A4Z)j55 A*Z\+ AZ)(/ AZN*F  AY*j5c AYr) / AX*hZZ. AXX*Q  AX. A|XP-+ A6X,[3 AW)K AxW,x;i AdW+ţ APWP-[&6 AW+TZC AW-|7 AW)^Z8 A8V-|2@  AUH+xY_I A\U,2 A4U+s) AT*=# AT-H6 A0T+`X&C ATr)F AT. AS)[ ASD*WD/ AS+X- ArS*TJ% AR.f AR<- AR@.7l ARJ.4" A2R+TU AjQ.6|  ANJ. AN*7N ANH+0Vh ANp+~v AM,R' AM.T0$ AM-R#0 AVL)l AKp+ AK*jXG AK- AK- AK.  ApK.E# A\K^.T!, A4K,"%& AJX*P AJ) AJ* ADJ2- ArI-i AI)8X/ AH+O0 AH.V]" AnH) AnHn-]& AG)  ABG,P* AF*,b  AFl*(  AfF- AEr)  AE+c AE, \J8 AE(- Q AE.^Q AD0*U* AD+TU AD)v A|D) AC-   AC)\Y* ACV,8M AxCl*@ AxC+[1 APC+T  A(C*P# AC*+~ AAr)~] AAl*UF AA+^UD< AAP-a?' AAZ-U)3 AA@.X[  AA>+ AA.4W  A@ +"U< A@+w A@,] A@."O A@+"U. A@n-2^  A?) A?.T A?*a A?+ A?.6 Ar?)T A"?*jSG A>+TZ  A=x-]0 A`=)Ȫ A.=+Zg A<h)  A><8,y~ A;2-Ҫg A;.Ȫ Ab;,;! AX; -R A:) A":)t A9)0 A9)] A9h.A Ax9-X1 A8)P;( A8F-ƅ AV8.X% A.8&x A88(@g A~8$FM A8 (! A9'" A9$2 A:f& AT:"); A::%f\C A;2($Sa< A;^$Z؅ A;J)SY& A;R&O* A;' A;H&- A4<&S' Aj=& A~=%Pz. A=H&x A=(b A=$d A=P(\ A>$ A?&P& A?(! A?$: A@&PY A A'Ҫ܌ A>A\&Ȫ A>A'  AHA%J ARA$NJ AA$h AAD%XL( ALB)TF A~B*& W' AB%nO1 ABZ( A(C',P AL AlT$JP%) ApU&P% AUZ(T' A8V(tD" AV &G AVn(> AW2(FH% AnW%2 AW$,A% AW((Q1 AXf&TF" AX&I( AJX) M  AhX4& AX"$E AX(Il AX$W AX%0 AXF(hZT AY (L59 AYD%6F  AZ(C  A Z'L5 AZz&|Fw A>Z$a AHZ &' AZ6$,A6* AZT$b[* AV['L: A[)zM A[*&D# A[4&n A\J$f\[7 A(\(d AZ\$n An\'jIc! A\%:D  A"]&f\) AJ]&A  A]( A^&] , A^(' A^#Zv A _%$ A_$3 A_`'I A_(Ҫ A_(rU" A_<(@. A_$Z A_(BI A`#*/2 A$`$J A.`(H/a At`%ny A`$  A`2(B A`&B A`~'hAQ A/*5 APa"P A!P_+ ANT!D, A:TxO<* ASB"`5 AS6rUG A|SH!D AJS"n AR\!G& ARx#t5}3 ARz!,/ ARX A(R#D# AR!d AQH!K AQn#H AQ!v AQ"(6, AjQ"H AVQPG6 A8Q5(" A.Q"D AQTp AQ*!5P! AQ" AP#F A>P#5$ A PPP6, AO~X$ AO4!DLW1 AO@aq AO8"5 AO" AO"X  AO  AlO AbO4! AN"9 AJN6& AN"FJN$ AN @ AMz!fG AM! AMu AM 4 AM"ٖ ABLz!N ALdL  ALB" AK u AfK J7  A4K4!IC AJ  AJ<6 AvJ S AJ J AIlL  A@In  A@IV A,I"^U( A"I>!J/ AI0L  AH# AHJv APH<6^ AA"<zy A@ )} Av@!OB. Al@"N3 A@! A? !n; Ar?(1} A^?"} A>^JP( Ax>>!) A(>h2Jy A>!O. A= : AH< !Z5x A;!U# A;V"ZT~ A;2 A;!:  Av;^^P1 A:;!f\ A;:] A:"2k Ah:U) A":M A": $v A":!`: A9 JUe- A<9"B A9(#E  A9X 9 AB8h(ot A7xJ2 A8r At8" A~8|2, A8VnJU: A9J(m A<9z 4O" A:\ A,:2( A:$1e A;j2 A;6dW A<~*  At=82m At=tZ~ A=xn A=G,2 A>PbGD A"?|tI0 A6?x6 Ah?<1v A?E3 A?PD A:@J45 A@T"  A@BPt AAB) ABBBG? A~B^J A~BPO! ABEF ABrFJ AB~xx A Cbxl A(Cd*CB AdCK ACJ A"D! A,DO+ A@DO AJD4C? A^D  AE6P% A0EO] ANEB * ANEtB[@ AvE@N( AEPRC; AEPO AEPV AE[ AE* AED[5 AF{ ALGM AG"v> AGh# AG0U A HBj AH5| AFHE  AH## AHi  AH AHTRM= AH *M A:JҪ A:J5 AKȪ AjLH5 ALL:4 AC ALVRM+ A`V"Ud  AW"P!I AxW>J" AW2< AWRS5 AXtT0 AJXҪ AX>F  AX,P+ AX<TP+ AXY8< AXYAL2 AZ.S ApZj(T; AZJ  A[,s A.[S AV[>S%9 At[F$ A[jI+ A[" W)' A[w A\VNLe A \ v A(\~U Ad\X}' A\{? Ah]9 A]U A]TF[ A]&L! A]*M! Ab^; A^@K" A^~do A^^fC  A_XM AR_\9  Az_4> A_a  A_tdx A_X;I A_hzWm A_j: A`X A.`0 APazI|  AZaL< AdaxȪj AahB  AartL A"bFP A6bz.y A@bN* Arb> Ab.B  Acjd ANc.j Abcr9 Alc$g, AcDl\ Ac(J AdF Ad= A`eX Aeb(J Ate< Ad7 Ad<! Acd Ac* AcN*@ A0chd A0cP; Ac Ac< Ac A@b= A,bJHm, AZar A`v{ AV`VI A_zhU A_Ph A*_ 4 A_pR  A^P1 Av^ R5" A]o A]D? A,]:Q1 A,]L  A\VQ, A\TU( Ad\rh<A A<\f? A \Ȫw A \Q- A[4* A[9@ A$[s A[^Qc7 AZR1 ApZd4 AfZv3 ARZ!i AY|K  AXY|Ka AXYr ;f AXP. A^Xnc A@XFVT AX(Z AX: AdW.d` AdW, ; AFWH>D# AFW:BA* AWn23 AWv' AV 3J AV<@c  AVhZ& AVFtc AVB AUHN{? AzUq A\U>C+ AU: AUnQ ATD.( AT(=! ATFv AT~N6 AT*IX ADT2P A0TZ$ AS@_0 AS \( ASd[W ASb>\ ArSR>F* ArSbB( AhSa ASq ARB@- AQ E% AQ<J_  AVQ A.QpBU; A$QB3 AQxMa AHP2jm AOD; ANOfBn9 AOEc, AO3" AN l AM& AM|?W AM:X3' AMpB( AM@G{: AFMv AFMzH1 ALVD A~LI& A~LN3?* AKhF#8 AKn AK@&3+ A*Kv AJ"2V  AJ^ AJ<H AIE  AITQ AI4? AH N  AZHLEj6 AFH(d A(H<(@! AG?C' AFHC% AFP@ ApF4@$9 AHFJ$ A4FtNu AE lBA AEĩtX A^D.H., A6DH$ A6D>B$H ACVIZ& AC*| AC0 & A CL'U" ACX./$ AB8x AB6h AB, AB " ABE^ AB) AB?# AB2D.1& A~BP  A$B>@- ABO AA4 AA\?M" A A(^o A@H=' A@j A@6# A@hW  A0@Pl Ah?Ft A^?n<5X Ad>Bx  A2>0 A >*' A=P * Aj== A.=-k A.=BX A=6 A<n8d A<.8! A><0w A;nT A;J A;p(g A; JU! A;`5 A&;G A:P+[ A:0(^h A9 '] A9(\! A88 /+ A.8 .D A8. A.8vt/ A88H1). AV8LIH A8 A84M A9 7 A:8uK A:! A<Z~S A<D A<~K  A.= A=b  A= Km A>:  AF><'1 A>` A>  A>  A|?^\[ A?   A? L&; A?LO AX@_ A@%g7 A@  A@tx A@R   A@~N? A@  AA J A4A Z\ AA ' AA   A$B ("i0 ABB ABf   AB@ AB NZ A C  AFCx AnC ACt4% AC p` ACJ AC6 AC= A,D/ A^D 8Ng A|D|<j" AD ة+d ADF$) ADr AD4 ADE PO AlE AvEb AEl*  AETR! A>FD- AHF+ AHF '_ ARFN  AzF  i AF AF ! A8G d@ ABG d'7% ABGR- AVGl+ AtG5l AG AGTC( AG*<- AG N  AH ΩRg A(H@' AFH2 e AFH|(df AZH8i AxHfL AH +WN AH8o A"IJDd( A,I B+.< AJIbh' AI:21 AI+u AI"F~ AIjH\ AIT' AI PJ  AIrYX A&J _ ADJX<6  AlJ2l. AvJ\ *% AvJ\ M A KD ApKx6  AKv2r AKd= AKH <P% AKRry AVL\ 2UN ALĩk AL:.( AML A4 A0O;: AXO pR AOF AO ;  A P $X A P2ΩP A\PK@- ApPl;a' AP C AP"pC APJO\" AQ.O7 A~QP^<* AQ\ @<  AQ>L AnR^L% AR Bn ASlZe A6SL A^S   AS AS*4  AS_' ATN<2U AT 6 ATvd[W ATAq& ATv= A U3" A4Ud+ ApU4$( AU  ! A8V> E A~V|_" AVL@  AV,  AV_ AV:V AW 5 AnW8S$' AWlPT A6X4 A6X,T( ATX \4  ArX0 AXRA AYFT  AY4 AY>:Bl AHZZ At[ BN  A \XV A \X=j A\T0G  A\4 A\<V  AT]R A]F A]Pg A]PM AX^ .N A_P A_ U At`\ d_ At`N  A`fn; AbV`4 A@b4kC AbJP" A\d  Apd v ALe A`e^24 Aed6^: AeR FZn AeP)D Ae * A`e\" Ae,  AdA ARd>*U" A d& ^2R Ad P*i Ac|  Ac^ ^2K ADc ! Ab h! Ab`9 AbJ L ATb dr_ A@b y  A"b Ab 0t  Ab <1+ Aa: Aat  Axa L AFaK A` 0 A` L A` I A`@ Av^>/> A]b A]^ 80, A\ 1 A\/F A\ R& Ax\J An\ 9 Ad\ , A[X B A[. I A[B @& AZ ~I AZ/D A\Z ~I ARZ AYd & AY4R! AY< I! AlYrA AXY8 E A:Y:&j AY 4 AXD.0g9 AX   AX( $ AX I'$ AXBF  AXf&  AX &B AW8 ! APW  AW:,z% AWB4$ AW`0JN AVB t0pC ABV P" ABV E A8VN AU P& AU U$ A\U*`0(P ATj0C AT \41 A&T ^B AT 4  ASB  A,S^ 3. AR0q APRr  AQ " AjQ42kB APb>R! APz0P AP >41 APv$ AOJ O ANp0uQ AM 3" AM4 AxM@ ? AL T! AL& AL jC AL` % AK % AK48eD AK~ ֿ+ AKγW AK /R A>K I  A4KT 8" A Kf AKV  AK& ( AJ\/J AJ4R AJZ D5 AJ&\  AJ _! AI \ AI j^ AI8  AIf A6I i\ A"I&  A"I B0 AI^ 26- AI8 < AHD8(2 AHNF% AH j AHV t  AH| 14 AH IK AHX  AnHJ7$ APHl zM  AFH(T/ AH "> AHzH! AG x5 AG 6I! AG  AG; AGl AG L A`G  ALGzr9 ABG AF  AF  >]% AFr 3 AF  AFb 0{$ AF AF "V AF >% AEV :L AEx ;, AEL ;( AE > AE ! AE>! AlE 1 ANE .( ADE@ 6 AD 0  AD G$ ADB @ ADt % AD :& ArDvGm7 AhD" (__ A^D" A^D^Fj. ATD>>" ATD F  AD 5 AC .'  A C? AB. ZJ( AB &.s ABBD@_ AB ("o< AAJ! ApA \ A\A X ARApn"j8 A>AT' A>A a A A@  A:@X2 A?v J) A?N  AT?" X2 A(>B D" A >|   A=D> A= Z A=" <zx A><. 1 A < 8## A<|  9 A;\W AX; HHy. A:, T A: l) A@:L H& A9 H@, A9 A8XP A8&) A X4ة @۳Ab4ĩ @۳A0( @۳A>7+; % @۳A6+ @۳A~)+8  @۳A$),>9k$ @۳A(.p9 @۳A'+^7 @۳AT)C @۳A.2 @۳AV r$ @۳A & @۳AH~'  @۳A%Eo @۳A~$dE @۳A(x @۳A"%*H' @۳A#,$Bj @۳A*6)9@ @۳A.p&nT @۳A.(:0 @۳A24&SA @۳A24'8 @۳A4|$9-& @۳A7&62  @۳A6H!"P @۳A4p!O2 @۳Az2!HR @۳A@020 @۳A,:F @۳Av, z {  @۳A(A @۳A&rAZ @۳A %"e @۳A$x#,F @۳A  P` @۳AXt" @۳A#VN) @۳AnZ¡ @۳Al  @۳A! @۳A` "# @۳A  @۳Ah P @۳A0V @۳A @۳A,$ @۳AJ( @۳AX @۳A* @۳AVކ @۳AN"LH @۳A"F5 @۳A&,j) @۳A&ʇ @۳A' @۳A' @۳A) @۳Ar0R9/ @۳A471 # @۳A 7(| @۳A6(x( @۳A4$D# @۳An4H3 @۳A3 0( @۳AH2p |" @۳A1p4O. @۳Ah0l @۳A^0" @۳AZ/D. @۳Az-N9 @۳AR-R @۳A,1p @۳A,<1 @۳A+k @۳AP* B 8 @۳A' @۳AT&`DA @۳A%+ @۳A , @۳A` @۳AB @۳Al8 @۳A   @۳A TS. @۳A@W @۳AT\& @۳Al! @۳A.V; @۳A f6 @۳A  @۳At= @۳A@ h @۳A V ( @۳Aj * @۳AP Է7 @۳A^ RIT @۳A  3 @۳Af4^6 @۳A8& @۳AL޲* @۳AT: @۳A&i @۳AΩm @۳AT>`% @۳Az>  @۳A<& @۳AР @۳A  @۳A&U @۳A Pĩ @۳A  ĩQ @۳A" G) @۳A"4q @۳A"r @۳A>#~!! @۳Aj$ H: @۳A~$4 @۳A$| ȋ @۳AP%>  @۳Ax%4 F- @۳A(  s @۳A)h @۳A+ X/ @۳A+6* @۳A+Z"g @۳A+6k> @۳A.Rd= @۳A/ZT* @۳A0$ @۳A|0lq @۳A0x7% @۳A0  @۳A1 @۳A1Լ" @۳Az2 $ @۳A4H + @۳A5< @۳A5 $ @۳A7P]! @۳A6h 41 @۳A4V 6: @۳A 4 ̫$ @۳A.3^ ^`* @۳A2 " @۳A1Z  @۳A0  @۳A0 ^ @۳A0, ZQ @۳A/| ZoT @۳A/ 6' @۳Am @۳A/d| @۳A$.r   @۳A- (d @۳A4- 21\ @۳A:,1 @۳A+ <Wa @۳A,+ ' @۳A' d @۳A    @۳A   @۳A< .D. @۳A7 @۳A L @۳A: B @۳A~  @۳A& @۳AZ# @۳A B (є @۳A Z| @۳A ةv @۳Aj y. @۳A  @۳A 2 @۳A v  @۳A c' @۳A   @۳Ad 8 :1 @۳A lĩ @۳A  (\ @۳A  4) @۳A  ȪD @۳A ~( @۳A 8 ^2 @۳A  N! @۳A \0r `۳Aj&/ز `۳A<1ĩ `۳AFZ2ĩ `۳Ab4& `۳A:2 `۳A2ة `۳A81 `۳A2 `۳A82 `۳A"2ܣ `۳A~$2ة `۳A%z0& `۳A|+2  `۳A /81 `۳Av6\+Z5 `۳A5-Z `۳AP/+2 `۳A\-r).: `۳A*+(r `۳A`)*8 `۳A&,>9Z  `۳A #z+PX `۳A"Z- `۳A R+ʐ `۳A2)F `۳Ap)) `۳Ax-n `۳Af+Zc `۳A" p+Zy `۳A P-( `۳A .U `۳A 'ٮ `۳AR$ `۳A &" `۳Ap&ܪ0 `۳A2% `۳A&%? `۳A$j91 `۳A:|$ `۳A4%8I `۳A R&^ `۳A!$H `۳A!&`I# `۳A%&" `۳AV)p&$ `۳A+"$;% `۳A,l%@  `۳A/$9= `۳A4#  `۳A^5|$\ `۳A5%8SW- `۳A5#VS! `۳AX6$<$ `۳A7$ R `۳A7:) `۳A6"P `۳AD6;  `۳A6 ! `۳A52F `۳A|5;$ `۳A5"2dž `۳A4; `۳A2J `۳A1"2T{( `۳Ah0$ `۳A7 `۳A'4# `۳A' `۳A'2 `۳A*(DN `۳At)VM `۳AF*A+ `۳A+lhA+ `۳A6+DL `۳A+`:/ `۳A-6:, `۳A/^  `۳A/83 `۳A159 `۳A1~o `۳A27i `۳A5 `۳A6, `۳A > , `۳AB `۳AD F> `۳AN,4 `۳A-3 `۳A L1 `۳A 7 `۳A9 `۳A Po `۳AFu `۳Af w `۳A7 `۳AR' `۳A(P_ `۳A4 y `۳ANة `۳A |. `۳APD `۳Ad* B+ `۳Ax # `۳A8I  `۳A ( `۳A  `۳A08Ie `۳Ajĩ `۳A `۳A! $ `۳A#A! `۳A#BqA `۳A#z q `۳A$6 `۳A$ " `۳Ax%" `۳A%xH~  `۳Ah&D! `۳A&B  `۳A&' I( `۳A&'R \  `۳AN'hA5 `۳A' ( `۳A4(? `۳A(|B `۳A) % `۳A2*@ `۳A+H e' `۳AH- < `۳A\-m* `۳AN1 | `۳AN1j  `۳AX1" `۳A1 ܴ `۳A1JC `۳A2 .5 `۳A.3 :* `۳Aj3P$ `۳A3:  `۳Ar54  `۳A6T2# `۳A74 5P  `۳A 7 D$  `۳A5 ڶB) `۳A5 #A `۳A5$ 4 `۳A3vO] `۳A2@  `۳Ab16 #n% `۳A^0 N  `۳A-zMa, `۳A,  `۳A, H `۳Al,h > `۳A+ _ `۳AT+r `۳AJ+ `۳AF* ;{ `۳A*  s `۳A( :  `۳A( Xx  `۳A (  `۳AD't ( `۳A8$: H4 `۳A"2  `۳A"vX `۳Ab""  `۳Ad   C `۳AD VD `۳A C? `۳AZ "W' `۳Ar VD- `۳A F `۳A  `۳A0l 66! `۳AdL `N `۳Ab ӂ `۳A*$ `۳Af `۳AX ZC `۳A  t- `۳A ` *" `۳A` 3O A N4s A`1} A0ĩ< AzN4p A2 AP/2 A&/P A0 AnN4ة A/ A/ A x2ة A 0 A"&4 A#N/B A%4ĩ A&1 A&2 A&4 Az(2% A(4ͱ A)3  A(*$1 A*/8 A+4 A+v/ީ A+$1j A-$1 A-2 A2/22 AP/v/(Ɵ An/4 ȥ A122ϐ A281F A23F Ad481P A42<  A4v4 # A4/F A"52^ AN6/d A7$1 A7/ A7+^ A6-Y A6*x A5R+0 A5N* A4+2Ռ Ax4&*Z A1+2 A1*:x0 A/*:C% AN,.,9w A,v*2܅ A)2-F A). A>(0*FΥ A'.Ӫ A'-2 A'|)<  A6&)F A"&. A$+<Ԧ A$-? A")d` A ) A x-rFh  Ax z+F A+> AX.2j A>+F% A+L AR+I A) AR+ A) AP-( A()J Az&n AF( Az^$7 At' A$F! A%  A$Ҫ A~'ZE} AF& Ad^$V A'4 AJ)E Av(V Az$g* A'F A^$c A #G  A (w A"#B A"( A#$F A$$*&% A~$(Z A$"$ A%$FX A6&(P A^&N%( A'T$C  A0'T$@ A'H&Z A('P A<*%^B AP*(<M A6+$<o A+%^  A+~'<% A-0%:" A.,$(;# A/(Pp A/8':$ A1t'F; A2#S A2&%8  A5V'S, A64&> AN6(nʂ A6#F'~ A6X%`>  A7%v A 7) A*7#~ Ap7%` A76)R>  A7'f Ap7J) A6!`a! A:6"Pw Ar5R!Bm A4l (p A3#S0 AB3rF A1<0 A10` A0"({ A0 (~ A0!FT( A/l ov A.H!PT At.>!, A8.n#Tk A-r A-P Az- t A+",<6 A*l x;(I Ax*!"<4 A8) !.? A(:$ A(!d;S A'D Hi$ A:' .?X A%d#F % A$!( A"lBL AJ!|E! A@! B & A8!I AN F#  AN"I+ AJ S  An|:_ AVj"F) A.H! A" AH  A"Ҫa A  A" A"y A`   A   A "Ҫ AL   A  A `  Ap Aj( Aj($ A.! A4j= AB  Av AB  APjnQ A`xA A06$ A$F Af# A- Ajn A6E AL: A0G$ At(E AF AHD3 A4H'" AZ  A!^w A"J. A"Z-% AR#w A#F.7 A%`8 A&~ΐ A&= AN'CI- A(2=, A)ZD~- A*=% A+b=1* A"+V# Ar+PA! A+<& A+Zp9 A+j A+z AX,8+ Ap-b:P" AL.^/5 A.``0  A.L7o. An/m Ax/FG A|0(b A0 q A&1dة_ A01Gi  A2D8q A.3x1K Aj3F3 A~3.1* A24Fu: A<4R AZ4  A4'n A4Pz A5) A@5 A5,F. A:6J" Al6@l A6""$ A6xG A7pU A7p A&6̺72 A|5 AT5R A@5ZT30 A37 A3t  Aj31Q$ A3* A>2f9  A1`6 A1~( A&1L A1; A07L A0X. A0~( A0H6 A^0N! A/ A/XV Ad/J27 A.< At."1 A-  A-` A -޲ A,R- A,X A+&   A+  ) A+x7 A+I Ah+p  A"+C AF*w A*:D" A)  A) A(F% A(lg A\(dw A (2 AX'# AD'c A&p A&b A%> A$8L A$0U( A~$ A#6 A"' Al" Al"p A!8B4 Al( ADO A@ AnN# A A|Nm A,&X A < A` Aދ Ap A&"C Ax^( A9 A A$ AL A ? ARzf Ah* AnhI! Aж A^ Fw A^ XV AB 2R A  A4 T  A jʼ1 A$ л1 AL % Aj ȴd$ A \ ) A p. A( 3 AP T0 A <1 A R4B A&8@ Ab( A^ A  @ AR:8 A ҹ4 A _ A Ω A> A\V|R A A  A2F ANTG A ĩ AA9 AjF AC( An  C\' Ax  A $# A  % A! A"C K A" bG. A# J A`$B{ AP% $IV4 A%`F A&HA1 A"&,p A' 6_ A'^S[ A ( | A>(^8 A(f O  A(4(  A)z s& A)=  A)& A*65 A@+ 3 AJ+F` AT+H:g Ah+ "a A|+< A, >t A,~'# A. A/1 A/ *- Ax/H h A/h!  A0`FW A60 f A|0"P| A0 <8 A01$" A1`.5 A*2>[ Af2T" A3$FB' A3b( A3( A3 $0! A3  A3H9 A4FK( A4  A,5 ܹ# AJ5  A5 (J" A5$ A5 T' A06v& A06>1& A6 V  A*7N" A47L|} A\7(q Af7*]^ Ap7>vs) A7ҪJT A7B&* Ap7" <48 A*7 0 A6r   Av6L \MW A&6 4 A5Q A4<C A40 4"* A<4x>[ A<4| Ʊ}$ A24 4 A3r @! A2 :' A 26   A&1 rS A0i A0 ܴ A/ BNk' A.X #! A.r  * A.F $ A$. M; AR-<x A,~ M- A*B : A*CI  A) X4* A( , A4( lo$ A (j { A(,  T} AP% fH A$z A$t J A$ X{ A# fH A"P L A|!( A!6  AL~ ( A ĩ A6 O A C9 A A h*/ A6 ĩ A  AN A4d   A@  . A HP A 2 A (f AT 2 A:rA! AT  A  p Ar   A ةg A( k Al qo AD O( A^ 2 t 4 A  (X A  P= An  j' A  + A  9 A < lE# A 0ة Ar 0/: A n22 Af3 A<v46 A|n2 A:/ A>0 A n2Ω4 A0? A:4Ω A0  A2  A::4 A0ܭ A!N4 A4#0( A$b/H Al'1  A$.0/(* A10 Aj34< A3v4FW A6x2[ A7-;% A7* A6<-T A6p+ A4F-Fi A`3<-< A2)nۇ A2.Fr Af2*:~( A0h)Z( A0.2 A0-< A0-( A.,9  Ap-h)z AR->+) AR-,ʘ Al,+ A+, A*-8J& A)r)( Aj)0* A(f+P A&-<y A|& +P A$)F A@!-P A@!.t A~,F At-xx AT)F+ AH*F-/ AP-x̝ AR+e A)@ A~,F6 A-n Az<-n# A&-xB AP|)K AP>+= AH+dx A+F Ar)δ A^2- A,F+ A+P  A) A(-Ү A.F AJ ) A~ + A - A )R Aj %m A h$ A 'w A6 p&H A' A`")N Ah$Ҫ Az& A<( A$ܪ A'Ȫ AF@$= AZF(( AT% Ar$ A#ܪ A &A AF(ܪs A#Fi0 A^$,, A$G& A@\&Ҫ Av&ҪS A#H, A%Ҫ A&J: A"$M A# &  A%&Hs AJ&$  A&*&xg A4($x A)<(^ A)$>% A *%Z A<*#?( AF*r$2) A*N%^  A6+R&@  A@+#| AT+%K Af-%dw A-(2 At."$n An/,$dU A/>&2 A16$? A1\&2i AX1% | A2\&F A3$ A83(n A3Z(; A(4 (S-. A4D% '  A4$P w A4\&dC A4'd AT5%>9$ A6(; AX6t'R& Ab6%P A6v%:! A7$B:C, A6!<z, Al6 (J} A5"Pi A@5"8:* A65,^  A"52#'! A5F# A4P An4*! A4X  A2!   A2   A 2<-w Av1"x A0"FT4 A/J`| A(/t"Pw A-"( A\-#;( AH- "<8 A,!6<5 A0,@ z A+" #~ A+  y A+ ;O A^+#^  A,+":  A+"@" A*2;M A**! d A*~">x A)Ռ A(H8 A(!.? Az(!>H A*( A' 2" A'H A't"2p AX't"G A&  A|&h  AT&"f A6&."B  A%<4% A%rA A#  A#Hj Az## A" Pp A"" A" A""E Av"l A!Z#E A!"lB  A!l E*" A ."E! A 2 A j"x Aj"F A` d A\<6F* A"F A F A| APvx A"9  A   A"G+ Ax" A( H A&$ AR Af6:V A"Fl$ A#> AJZ A, APȪ AX Ҫ@ Apܪg A4 ϥ AL" A  AF A A,ܪ Ap,ܪ۩ A  ܪ A t"S A 5 A~ d A Ü A>x{ Afe A.f5 A  A(:q Anj Ax   An AL A.d A2T) A # A$  Af(7 Aj ABnp  A6$& A  Ab2© A2`$ A<J Ax$ A: A A # A>\H' AȒ A A.' ApHH\' A   APΩp AD A(̜ ATt  A. AD$ AEp< AB(x At H  A { A" A"<F AX"82 A" Ap#~ A#N- A8$< AV$>Q* A$"~' A$ A$2P A$F* A%/ A%p6 A&  A&f$ A&B AX':=6 A (R@- A4(  A(VB4 A) h A)@; A)Lԡ A(*J.* A"+*  A|+ A,BC A,2=) A&,V5 A,j AH-Vxy Af-< Az-fm A-z98 A-Ω&r A.:- A/V Ad/F6C Ad/8* A/Jh A/6YD Ar0z/ A0FA' A048^# A0X82 Al1Pj:$ A12v A*25 A2(: A2p4& A2| A2F1@ A2Pz A3$I A6"~T A&6~9 AD6<5`  Ab6bn A6r,F' A6du A 7@J  A7bN3\ A7:  Af7'3 A6d1B( A6P  A66 Al6,23 Al6:2 F Al6z P AN6D A51 A5@( A57 A5>/` A5x1, A"52F A4z2 A4 G A<4! A(4$X! A 4dT- A3#. A3H< A3) A22 A2 QH A22)! A 2xf9z A1 A18 AX1 A0M4 A0z<" Ar0p4N A0 A0Dn) A/P! AP/ I A2/V A.bԲ  A.3 A. A'&C$ A',@, AD'| A&z> A&.? * A%D# A%.Aa: AZ%\! A$# A$c A$nB AV$8D. AL$= A$8@U$ A$j A#h' A#R9 A"C8 A!D62 A!pة A  AZ H( A  A8ݐ Aĩk A ] Av A< A A2 A$Ω A A A  Aۜ APڞ AFHzM A ALd!  A$ A  A* AD^ APh! An A$,u AT" As> AHG AHP A>T Auo Av? A0Zֺ?; A ) A Dж AT & A n A z A  q A 2p{ A 25$ A p A F A  A JR  AR k& A R * A  T/ A * ,k* A \6 A b 1 A 80 A Ti> A 3 A  <GC A 8 A|80 A4  uH ARH A ,) An" Ah:3 Ad ҹp( Axֺ& Al-2dJ A-dSG A-tH=' A$.R G& A8.F AB.q A.tZC A/&4g! A2/  A2/l A/F A0"P AN1! A1D"P# A1 #] A1d   A 2 &$ A2&- Az2ʷz A2B A2   AV3\ f  A3z & A3(Q+ A3 * A24ʷ% A4 4  A4F~& A4 ' A5 (J` A65|/ A5O A&6" Av6 4? A6>:  A6D A6" A64 A*7f l A*7\̺< A7 b A7 D$  A7HO! A7 L`$ Af7Rth AR7: (J3 A>7RT(! A>7K A6 n5 Av6 % A:6DP~ A5^ 4. A5 Ah5 Ro. A^5S AJ5$  A42   Ad4N ̫ AV3O A3 # A2&xd A\2. M A1<  A1   Ab1 NS A0~ v s  A0 #2 A02 #" Ah0NH, A/   A.v  A. L^ A. M( At.^  A.n n AX,v   A+ X A*^ X$ AP*6 bt& A2*8 л A)l At) HH  A`)r  5x A (>ة{ A& I) A@& Y| A6& ةl A%)z A% y A% : AZ%" ةKx A*# J  A! i AJ!D D A(  G" A %$ A$  A*~ Av C> AF ĩ A` Fw Ap@ 6P A `K A  q AT V Ahw A2   Az ܹ5 AN ظ0: Ah  5 AT . q  A  + A  ظ9 AB  fr' A  ! A J D0 A4 Na @۳AP_Ω @۳A ] @۳AF_q @۳Aa6 @۳A] @۳A*#laF @۳Ap(a @۳AF*.^ @۳A+_(; @۳Ax/@` @۳A1.^ @۳AD6l\ @۳A4X @۳AZ/X< @۳AF/-D  `۳A+B_ `۳A+D e `۳A)RD `۳A)A `۳A"$E `۳A!D `۳AVBΩԭ `۳A@x `۳A:C~O `۳A DB `۳Aj ;B~ `۳A =Lt `۳A" ?V `۳A;- `۳A@=j/ `۳At;/ `۳Ar;? `۳A\=ϰ `۳A <Y `۳A? `۳A!<} `۳A"(< `۳A$F<  `۳AH(H?ȵ `۳A+|=< `۳An/? n `۳A1f?(X `۳A2=P `۳A2;Px `۳A4p?P `۳A4:< `۳A6j;F `۳A17 `۳A'`6 `۳Ah&6Ωg `۳A$6 `۳A"j6 `۳AT!\: `۳A>: `۳A86 `۳A$6 `۳A74 `۳A<6Ω `۳A5B `۳A>t6 `۳A a A_ة ATDa Aza A]. A&a2? AvaP2 A`$^( Ad%_< A&a< A&.^( Af(_0 A(]_ A)`(: A+.^2ָ A,a2 AP/aq A1a< A4$^ A4n_ A"5aQ Al62ZȪ A2fXx A2l\x A&1Z<; A0Ym A-[d{ Az-4X A+l\2 A+HXF׹ AZ*0WF Ar!Z2« A X ATPZg A WA AL V1 A` Q`J A` Rj AQN A$,V A"R A@&,V(Z AH(&RF A((U<p A+\S2 A -R(ժ A /JV< A/pSF  A0VZI A4W6 AX6VȪ Af7Rܪ| A2O. A/TQ(0 A- Pa AH-MԻ A|+L  AT+P A)MZ A)BOZ At)K2z A'Mn A&.OFŵ A`$8OF" AB$KFg A8$bMȳ A"P(* A KFO AVM Ab$O  AXMĩ A(K AM AOW AKة AM AK AM AZM~ A K~F A KV A IB A^ It AZF AHa AdF AH5 AK/ A\dFΩ AJ A2&HΩ? AIZ A0F A:lH AHC APKة0 A.J APHĩ A.G A Hɸ A!BJF A!Fc A$VJZn A%IZT A (H A)Hĩ> A)8JΩ A+H A -H' A>-F Ap-jJFŹ A/HI(x Af2HZ A2\In A4E< A 7KP A6D" A6BV A4@ A~3"BP A.E N A.XC A.@2 AB$ A< A"@2 A!NCɳ AD AAΩ A&C ABΩ ADةF AB ARDշ A Aj0 AD AzZAt ABt AT B` A FAL A pD, A =BO Af\?jλ A?L: A= Af? AZ=| A0; A;ة  A~;M A"? A8$\?2k A*6= A+>  Ap->Ģ AZ/V; A1|=(G A1<< A2<D A3>Z A4@=d¥ AJ5=D A6?3 A7=H A6J8x! A64dr Al6$6Z A4$6F  A47H A3\:  At39N A36d~ A368Z A37tZ" A146 A195 A/h8ז An/V6 A-`6 A-7 A*-9d A+`6Ǭ A)4ժ A)@82а A)6FU A("8Ŵ A\(9 A&7Ω A!B6 A!J8ĩ A.6ة A`4ĩɩ A.:: AJ8ة A&5ة A6Ω  A:ةr A:Ω ARJ8 AD : AT8 A~6 A\:o A:ڼ A~J8w A R:t Ar 6 A` t6M AV 4Ӻ A~ _ A, _ Ar ] AlaĶ A ]Ω A _ Ala1 AbΩ A]R Af_ A`` A] A] A_M A0a A_  Aa AL^  A_  A8_< A _P A aF A!^2X A"^ A$aP AH-F_ ܻ A-] A83]dl AB3_P A6_Ȫo A6ba A6XܪY A4ZZx AZ4\x A2PZd A:1\̲ A/\ A(*ZZd A*XZ Af(XPs A\(PZP AR(\( A&ZZ2޼ A& X2G Ad%&W# A$PZ(6 A$\b A8$>X2 A"Z{ A"X\ - A" X A,!X A [ թ A Y2 A8N\ A[2 AFZ2 AbXF AX2  AZP5 A$[ AfZ e AN>X/ A:[l A*XΩ A(Z A [о AYΩ AHXة AxZĩ A0\Ω Av\ةt A X A0\ĩ AY] A  Z A [ A Z At X A TJ A TV, A6 T& Ar  Sq A rQ A R AHT ARhQ~ ARV AQ AJ^VةM AhVة AFWΩ A>SΩ_ ATΩX AS A$T A<VF A SV AUFd ArVF Al SC AT<w AUP A. S(y AVμ A!RS A6!VD A #T7 A$T  A^& SP A'TF+ A'V2 A8)RP A)T< A*fS< Ah+T<  A|+V2 A4-V< A-rQ(? An/TF! A:1TFv Ab1zS2 A2Vdo A2TP A3|Q< A$3RZw A42U A6>Sί A6(U A7V A6Q Al6Oi A5Mx A4"Qh A4O A3M  A2@L<޴ AX1|L<л AN1,Q( A0jO2 A/tOc A.ME A,K( A,N9 AJ+M A2*rLԷ A ("Ln A&Ln@ A"&0MZ A"O AD"M(# A!O " A M w A.L Z ALO  AbM A"L7 APP A2O  AO$ A@Q  A@Q( AxO A<@QΩ AO A~O A6Q AM A~Ot A~K~ AfXMj A>~OL A lMV A OV A~ M`¾ A KB AJ F` AI~1 AF A H ALJ AFLJ A4F AF AVJة  AlVJ AHةP AZFΩػ A~$H< A&PF<ˬ A&H<Ů A(FF< Aj)F AT+.J  A.vH A/F A&1~J< A:1G| AN1H A2G( A.3GZ A<4vHdT AT5IM A5Fn A47I A7Fҧ Af7PAl" A&6A A4CZ AZ4zDd˲ AR2DF3 Al1 A<+ Al1zD< A-B1 AT+A A*NC A'A A'D̡ A'B A~$.EF A.AΩܮ ABΩo ADO A`E A<BΩ AD Ap< A%=Ҭ A%? A&;  A'= H A';4 A)?  A<*;  A@+z:h A,;( A -;( A-= A.: Ax/=w A60:H A5;Zn A5: A5? Az7;z  A79 A6 :F A655Z An47 % A47$ A2 :($ A1:g A&4: A$9 A$8ة A"7D Ab">: A8 A9P A8 A86 A8( A 7~ A :9Ĵ ADa @۳A_x @۳A ] @۳AaB @۳A] @۳A[  @۳AZި֜ @۳AnZ$2 @۳A:\ @۳AdZ @۳AhZ$ @۳A:O @۳AN0 @۳A^*N5 @۳AvM @۳AlM @۳AVHʨP @۳AtxF @۳AH @۳AvH @۳A Fި @۳AF @۳AFKK @۳Alt@8 @۳AdA @۳A2A$C @۳A@Ln @۳AB$Ӽ @۳A^*? @۳A=8H @۳A;j @۳Az?V @۳A=j @۳Ap=`# @۳A\?. @۳A=t @۳A?8 @۳A;~> @۳Ad<` @۳A ,=B @۳A6Ω @۳A4ΩU @۳AF:e @۳AL6Ω_ @۳A: @۳A7ĩD @۳A9 @۳A$6  @۳A9 @۳A>:B @۳A9 @۳AV6p @۳A9 @۳A 7 @۳Ad_ `۳A^J `۳Aa `۳AF_J `۳A|,` `۳A>~^ި `۳A~:aM `۳A\z `۳A_ `۳Ala `۳AaL\ `۳A~Y `۳A\] `۳AY `۳A*>XԨͱ `۳AY$ `۳Ab\ `۳A0\ި `۳A4X `۳A^W `۳A^HXS `۳A[$~ `۳At[$W `۳Afv\9 `۳AY `۳A.T߯ `۳A R `۳AT `۳AR8I `۳AJ"Vި  `۳A|Tިh `۳A|V `۳AT `۳ASU `۳ATϺ `۳A S_ `۳A2R[ `۳AnRި! `۳ArQި@ `۳A0Uʨ `۳AT `۳APި `۳Aj&M0 `۳AM `۳A8O `۳ALҾ `۳AOD `۳AO `۳A$LԨ8 `۳A8Oϵ `۳AKިM `۳An@Ql `۳A0K `۳A&Mިװ `۳AM `۳AO$Q `۳AP8 `۳A`K `۳A*vMԨ `۳AFި~ `۳ANI `۳A0H `۳ADI `۳ABJԨ `۳AbHT `۳A8J^ `۳A<(F `۳AGި6 `۳AFu `۳AtI `۳A vH `۳AD `۳A:BE `۳AAި `۳AB `۳AA `۳AF@$ `۳AB  `۳Az@ `۳Az$Eި `۳A4@ `۳AAB4 `۳A@B `۳AC `۳A C `۳A>H?B `۳Al?7 `۳A*?L `۳A0?$ `۳AD=8 `۳A?8 `۳A(< `۳A<t `۳A>?j[ `۳A"=L `۳A;t `۳A=L( `۳A; `۳A>;j `۳A?8/ `۳A=VO `۳AH?.! `۳A;V `۳A< `۳Ah=`{ `۳Ar=` `۳A.;U `۳A<} `۳A$|=` `۳A=V `۳A;j `۳A\:ĺ `۳AH: `۳A7ĩ `۳A>7ĩ" `۳A:6Ω? `۳A5 `۳AT8 `۳A*:` `۳Ap8b `۳A46 `۳A B6 `۳A 4v `۳A9f `۳A :ۺ `۳A~4@ `۳ADa A]& A] A,Xa$ۡ ARaL A] A_- A] A\_ A2_8 AP^ A,a A*] Ap]2 A^Ѫ Aha A a AaT Ap] A\] AF_$ Abba APaV A`V8 ANaVa A]tԼ Ad_` AaVy APV^Ǻ A<_~ Aa`\ Ar_`w Ab _j Av ] AN Z  A,0WL AW APZ A(*X AZF A>XG AYk A(DWH A([m A Zح AR\ʨ ArYԨT AY AXި` A YԨ AT[Y A[$2 A|[; AB X= A\" AdZ AnZ AV ALT ANRԨl A.@Vʨ A@Vި AjR A~^VX AT A,R³ AR ATިw AJV AJT Ar^V ASި A T A S AzV$W A^Q AZ^Q AxT AT˾ AD,Vǿ AD V~ A OB ANM, AO.ѵ Af,Q${ AP AP A4Lʨ ALOʨ A@Qި A"QԨ A`LO AKS AMC AM ANQ} AQԨ A<vMިg AO AP AF۩ A H@ AFFԨԫ AFFި AGԨX ApI$ AlF AF AF Aj.J AtHԨ ALG? AVJԨ AHި AGԨ] A"J^ A (F A zD A @W A JB. AX\DϺ AB ADި3 AD. Ax2Aj ADC  AfDc ApDԨ AFB AD۬ A Aַ A>pDʨ ACިˢ AzD AB A A$e A~Dި A B AAL) ADި[ A=j A= A?8R A>=Y ARp? A;_ A=3 A\?t A=tQ A<a An=t A?$q Av4?tƼ Ah=8 A;ti Ah=8 AJ;` Aj;! ABH?V֧ A R:n A 68 A ~6ɵ A$8 A4Ω A9 Al4ة- A6ΩT A7ĩ A6ĩ A6ĩ A: A9_ A\:{ Af"8 A6 A6ة A :ة8 A6 A: : A8  A52 Af6; A8͵ A|6Ω APh8 A7 Ar8 Ah6M A6 A4 At6 A_$ڶ AhDa_ A&_ Aa A] A<~^ץ AZa$ A6`B` Aa8} AD]T Az] Ax_ An_ A0aި A~:aި Ad_ A d_  Ad_? A]ިؤ A] Aa| Af^l A(_ A4Z_$ A] AF^8 A]8l AN]V A [~ A X~ A||[7 A"\Xti AdZ~ AVZjX AL\X. AZV  Ab\LG AFY# A [ A[ñ AfXӷ ApX AW A\ A[} A,Xʭ APZL A\ A\Xߧ A \Xh A Z A[ A~X A^V$ A6^Q A6S* AhQQ AR A*Vʨ APQ ATV AhQԨ AfTm A*S AVǰ AFT AV̸ A^V AlU  AR A|Qʨ ATh AT AV AQި A>Sި2 AT A6V A^Q7 AVԨ AQ ARި AUέ AS; AVԨ ApQި AHSP A<Tʾ AU AV AT AR AV A>S ApSި ARި  A$(U ABRݻ AtV$ AT8 A*S8 Al TV( A Rj A K. A MB A,O`) AK A,Q8< ALKިU A.N* AMި AlKԨQ AK A.O  AM A`Oq AM AHK AN"LԨ ANO AMި AFM A(hLʨ AMʨa AMʨ AK A KB AO ArLO AKʨ+ A`P A Nިw A"Kʨ) AM AM3 A.O A@Lި AZO~ AOi AKѳ A$Oʨ A$OԨm A,L A|Lܬ AOy AJK AJM AjM ApK AtO AIިD A`IԨ6 AHɲ AIʨ- AHԨ AIި  AnFf AIP AH AnFQ AxFp A2F[ A2vHf AFI AH@ A.J* A:H AF A,Fި A6Jf AbHި AJ AFި AJ AJʨY AXHʨ AFԨ AfbHԨ AfJʨA AH AnFԨ A0FԨ} A:JԨ AlHԨ AFި  AjJʨ A.JԨI AIԨp A8F ALDHU Ax&Hx AF7 A ~J A"ZA AC AjZA A8:C Ab:C! AD  AxA A0C AjE A&C$ AxD A&C' ADިg ArCվ AC AjD AD AxA.f A:CM AVC AD AlCB AbDB ACB AA$4 AFA$ AD A<j A;Ω A?$) A:ةv A<Ω A=8y A>8< A? A=VN A?˻ A? AN=LH Ax?8Z AD (<.λ A ?Be A 7 A8 A`6o A7Z Ad8ĩ] A65& A8 At7 A7= At7  AX9ة A6( A7( A$v9a A|82 A4:~ A5 AH:ĩ Av*: An0- @۳AD&/- @۳AZ2ٽ @۳A(0 @۳A4 @۳A4ĩ[ @۳Ab/ @۳AX4 @۳A(0 @۳AxN/ĩ` @۳AL1 @۳Av/k @۳Ax0ة @۳Av @3ĩ @۳A /  @۳A:z+x @۳A0)f @۳A) @۳A) @۳A. < @۳Axn- @۳A)< @۳A, @۳A,)Z @۳A h.  @۳A) @۳Aj*(B @۳AZ- @۳A+n @۳AJ) @۳A'Ȫ @۳A'x4 @۳A'? @۳A|$Ҫi @۳A(( @۳A&ܪ5 @۳A$n @۳A *! @۳A,*!ܪ` @۳A~"Ҫ> @۳Aj"Ȫ} @۳AU @۳Av ܪ^ @۳A"ܪ @۳A @} @۳A6J8 @۳At| @۳A T  @۳A$ T @۳Arw @۳AF @۳A @۳A\ @۳ADٿ @۳AtN @۳AbJ @۳A6r @۳AnҪ @۳A.e @۳A l @۳At @۳AҤ @۳A:p @۳Af` @۳AVn @۳A j @۳A  @۳A @۳A|2^ @۳A.  @۳A< @۳A4}( @۳APd @۳AP @۳Ad @۳AZ޷ @۳AX @۳ARd @۳AǦ @۳A̫ @۳A( @۳Azʸ @۳A @۳Ab @۳A(<DP @۳Ax @۳AdHd @۳A  @۳AJ& @۳A D @۳A4 Ȫͪ @۳ADFZ @۳A@2/ @۳A 4j @۳A*hP  @۳A(r @۳A  @۳A\nE @۳A( @۳Ap< @۳A2Z @۳A2x @۳A  @۳AL @۳A2\ @۳A2>d @۳A(^/ @۳AZz>$ @۳Ax 0& @۳Ag- @۳A: 0 $ @۳A ޭM @۳A  6 @۳A: @۳AQ @۳AP 2 @۳AB v @۳A ƻ @۳A0! @۳A&  @۳AT  ވ @۳AZJ  @۳A4 a @۳AJ f @۳A @۳A*  @۳AB u @۳Aĩ( @۳ADr @۳A, ܪ @۳AZnD @۳A>Ȫ# @۳A@ @۳A|9 @۳A&! @۳At , @۳A H- @۳A N/2 `۳A3 `۳Av/ `۳A3 `۳A(l4  `۳A0/( `۳Ad4 о `۳A2/ `۳AD/ `۳Av2 `۳AT0ĩ `۳A81 `۳A,,3ة `۳A0ة `۳A/~ `۳A"63  `۳A 4ĩ `۳A^)0 `۳A$H+ `۳A -n  `۳A4+x9 `۳A,   `۳A4+) `۳A) `۳A -<C `۳A) `۳A' `۳A'I `۳A(ܪA `۳A*%, `۳A%S `۳AR& `۳Ax$ܪ `۳Aj'l `۳Az& `۳At'ܪ `۳A$ `۳Ag `۳A"~ `۳AH `۳AJ^6 `۳A !@ `۳Ar* `۳A7 `۳AP"` `۳A"h `۳Av&Y `۳A*v0 `۳AVX `۳Ax `۳AvX `۳A3 `۳AR `۳Ap$< `۳A|C `۳AB `۳A| `۳AT8Z `۳Ad `۳A. `۳AnX `۳AO `۳A `۳AZF `۳Anڬ `۳Ani `۳A\nê `۳AfnL `۳A nk `۳A `۳AF: `۳A `۳AȪr `۳A,JҼ `۳AP `۳A2r `۳Ab  `۳A` `۳A(T! `۳AfY `۳AZҼ `۳Ah? `۳A % `۳A6 `۳Axh `۳A0 ,  `۳A` `۳AhҪ `۳A>S `۳Ab(ؤ `۳A*Fm `۳A~4< `۳AP<q `۳AZ `۳A ! `۳A\2Ɠ `۳A^Z `۳Ap < `۳A  `۳A  } `۳AH. `۳AR% `۳A $ `۳AX$ `۳A 0) `۳AZ^- `۳AdV `۳A; `۳A pU `۳A  `۳A,3 `۳A  p& `۳A  D `۳A ] `۳A&$ `۳A 5k `۳Az  a' `۳A `۳A2H `۳A `۳A  `۳A^  j `۳A  ֣ `۳A  `۳A Ω) `۳A6 ĩ `۳A ĩ5 `۳A n= `۳A  `۳A+ `۳At Ҫ `۳A,  `۳A@  `۳AT ^ `۳AxH! `۳Av 8 `۳At `۳Aj ؞ `۳A@3, A 0r AVB1 A|:4F A J3 A*D4' AB1P A2 A0( A</( A0  A0 An&4ĩ A0' A2Y A45 Aj2 A2= AN4ĩ  A22 Ad24 A2) ALl4ĩ# Axl/ A$1 AX,3ة A$"3ĩs A0  A4ة  A L1ĩ A -x4 A ) A+( Ah)f AZ- AF*< A2- Abp+Z AD<-d% AJ+ A)xO A)n A&p+Z A2-  AP+ A4-* AP-(C A<-P4 A)| A| +q A$ A%Ҫ~ A@$@ A(& A#@ An\& A&( AB( AjT$ A\&ܪ A,@$` Ap&Ҫ Ah%Ҫ A|$Ȫ4 A\' Al $Ҫ A A:' A  A`" A\" AP  A2t"ܪѫ A6 A4^m Ah!, A"#~ A" A AH!TL Ar AD"Ҫ? A"|r ABN r AF A8:D Al  Alp AlZ AtD A@ A~3 A(v A A ANn A@ AN AV2 A A( A A^ A: Ȫ A  A <+O A xM A2 Al AtNb} Adu Az( AP AF AZ۵ Az n[ A< A@ Ax AJ Ap A ATJp AD A AH& A0l A|N A"dN ABNx A AvP1  A@ AR@hܟ A&6 AH T A |  A> ^ A"F| Af A| AA AP A- A.  A <ܭ A A  A( Abn A(* < Ao A0 AD  AV24x A<v A  A ( AJR F AJ |C A4 ȹ# ATd A# A ȴ* A Hx AXr ABb jY% Ab` A ^ . A ^ T A0  A (  A . 8 A0 A 0 Abt  AV  A t A2 B A c A  A~ AH  AVL  AB ة A  A ة Aĩ AL ĩ@ ALC AV  Aı A Fv A(F# Az  Ad" A~ " A $} A0V{ A ZG A  AB/28 A2 A0 A~1 A/2: A/<p A0< AZ2 W A4 Ab4 K Ax2  An2  Az04Q A0c A1^ A3˲ A/ة AZ2% Ap0 A&0 A&N4 AP2 A2 A0ة A8/e A&/ A + A& - A+n# A,d A) Al,ZE AZ- - A.- E A()Z Ap+ A- Az+ A . ALz+F A<-  A6+2 A,<-2t A,. A)< A<-FŸ A.F Ap+F" A.< A0)d A2- A. ^ Ap+( A)xI A)x A,P A)n A./ A+dv A+` A4 +ȪI AP-x AZ-F2 A^)y AV+# ALF-P  Av+ A%ܪ A$5 AT$,  A &N A@(ȪN A$T A2'ҪU A$, A\' A%Ȫ A2'H AP$Ҫ A*&Ȫ A$Ȫ A>& A@$= A( A8$ ABt'a A& A$ A%} At$Ȫ A(' A,$ Ah ( A>& AT$ A&ȪM A' AR&Ҫ A\& A(ŵ A.h$\ An%Ҫ A#0 A0%z A:"$Ҫ  A' Ad&Ȫ A((@ A  &Ȫ A d A j" A ~ A h A&"Ҫ, A  Alv ` AX, AB"W A" A # A,"ܪ A^ AB"} A J Al !r AN" AV"" A!6 A" AX« Ax r{ Aj", AX [ A"̫ A V A  A` Az ̫K A>`"Z A:Ų Ah : A"^Y AV"J At^֫ A ` AVNl AZD A A AN AT; Arη A$0& AZl A . A2& AF. A̫ A& A$| A Al AB|} ARbr AV@ AtB|ɺ Ah^^ AN A*V"ۮ AHȪ AhȪ AL  A  A A:lO AN AjB A8 A Ȫ| A 8 Ab e A& θt A6 Az Ax Ad A&C A4nT AZ A(nnW AI AC A06 A@ AFN ATA ADh ADh Arg Au A@ A&n An Ah Apl~ Al| A A@ A<4 A`u A`d A(6# A A. A A Ad A Al.R>$ AP  A4 * A* A>R6 AK AE AR hã Apr AF(  Ahl A0|0 A4 AH hӨ A2\ } A ^ A r A1 A(Z Axo A ة A(j Ap ` A:<2 AL Y A P A(.~+ A > A`p ` A~H U" AFZ! An\ֺ Aȴ( AJhw2 Ax AV0 Aʼ0; A l.N A Z0 A* 4$ A ' A  0 A $ AN ĩf AD   A0 & f% Ah r= A ֺt8 A Y% A <F A(fz* A ȯ A  A P* AvZ Aa- Ah p AR ! AR F AH ATR^4 Ak AHh   A  AH Z A  A2@  A  Al x ArZ h AT  A6 ȪK A<$ A Ҫڞ A$r ϟ AH>% A~ AR*F @۳Af @۳A2h @۳Aۛ @۳A @۳Albt @۳A @۳AR @۳A~Ω @۳A @۳AtX @۳A, @۳AF @۳Aa @۳AxĩË @۳AH~ @۳A~ @۳Al&Ω @۳A @۳A̔ @۳A~ @۳A:E @۳Ax @۳AK @۳A4  @۳AZ24Z @۳A @۳AhN\3 @۳Ax`# @۳Ap@9 @۳AH25 @۳AP  @۳A6ޟ @۳Avz @۳A 8 @۳A} @۳A4 @۳A(P6 @۳A(6 @۳A @۳Aܯ @۳ARة  @۳AL @۳AhF @۳A^Ω۱ @۳A> @۳AJ\M @۳A*q @۳Anĩ @۳Aj3 @۳AL`p @۳Ap @۳AةД @۳AB % @۳A< @۳A   @۳A6J @۳Aɢ @۳A2 @۳A42 @۳An @۳A @۳A~Zƕ @۳A[ @۳A~. @۳A|2 @۳A>]1 @۳A" @۳AJGt @۳A S @۳A ;0# @۳A$ @۳A @۳AXT} @۳Ar8B @۳A~ǡ @۳Aj. @۳Az͡ @۳A 8B @۳ARע @۳A<ndȣ @۳A h ? @۳Ax* @۳AX @۳A @۳AJ, @۳A @۳An @۳A: @۳A  @۳AS @۳A& @۳A&< @۳AxD @۳A r\y @۳AZ @۳A4 @۳A~ @۳A> @۳AzP @۳A0r @۳A @۳Ab @۳A! @۳A`4 @۳A `۳A `۳A4t `۳AB `۳A@F i `۳A&VB `۳AXV `۳Al `۳A8 `۳Ah `۳A*q `۳AF `۳A$hΩh `۳A,LÑ `۳A `۳Aĩ- `۳A,  `۳Am `۳Ay `۳Af  `۳A<~ `۳Aj `۳A9 `۳A" `۳A `ةǝ `۳A ة `۳A~ `۳A `۳ArZx `۳A= `۳At `۳Aj `۳A$~D `۳A`> `۳A{ `۳Aة `۳A\  `۳A~n%z `۳A$* `۳A>  `۳A* `۳At. `۳AR6 `۳Af  `۳A@ `۳A6W `۳Aj, `۳AĩQ `۳AN `۳A><% `۳A< `۳And= `۳A `۳A| `۳AΩ `۳A6 `۳AĩW `۳Ad`ݖ `۳AfJĩ `۳Aة `۳An `۳A4j `۳A t `۳AF `۳A2` `۳A 2 `۳A  `۳A<r܀ `۳A^| `۳A|* `۳A*C `۳A < `۳A% `۳AV(1 `۳Aȭ `۳A `۳AR `۳ABHZ `۳Alӓ `۳A\RF? `۳AȪ/ `۳An? `۳A.o `۳AL `۳A:ݞ `۳A`@k `۳A `۳A` `۳Af`S `۳A*tn `۳AT`ċ `۳Ajt `۳A60 `۳A$Μ `۳ABB `۳A: `۳AG `۳A*ң `۳A`( `۳Av0 `۳A `۳AX `۳Alm `۳AR `۳A6$ `۳An͡ `۳AX `۳Av2 `۳A  `۳Aje `۳Ax `۳A(? `۳A `۳Av `۳AƩ `۳AJ `۳A@ `۳AN `۳A^ `۳A 7 `۳A zِ `۳A N  `۳AT(lj `۳A`5 `۳ALx\ `۳AXz `۳A~0ۙ `۳AFݝ `۳A:ӥ `۳A.rp `۳A `۳A:>F `۳A `۳Ar\\ `۳AR `۳ALf `۳A$lV `۳Ad&  A6p A E AP8<kZ AN4  AD AB Aة A A AةP A~^ A AΩ A AU A,Ω Aĩ| AL,~ا A2~h A AZ~! AZxl A>Ԑ A\ A24 A AS A A`Ωђ A ة; A <ĩB AN :~i At' A`t  A~E ADtИ Af~ AZ` Ap APNJ A(Zj| A>t֫ A~ At Alv A^x A5 A~ޘ A͘ AT A~͡ AXB AL5 Ad; A A Aš A] Aڅ A A* AJd A , 1 ARP1 A\0 AtV$ AJd A B AJ A- AU A/ A v, A82 A2 ARB+ A"d[ AP: Af Aة٢ AK# Apƣ A<ة A2 A`  AD AX A A(\ A< Ab A8|f APk A`> A A"ا AX x, Ab  A6ԅ AQ At<ۓ A` A <؇ A:Z AV> AxV AO A # Ajn  ABx A.Z AȪʆ A8 A`Zz A$ A0xU A\. Ajw An`N Azx ARx4 AHܪ AV A@ Ap A>`ܪ A* Av.> Al5 A "D Ar"Ȫג A6ܪ' AL> AFn3/ At A6 AܪV A{ A| A Ap0$ A"( A8Bn AR' A Uw AT:% A^ h| A A A" Aj$* A,7 A@ Aip APw} AF6- AP{ A6q AD$6Fd A> An Aq AO AAf A"xH A@ k A_f A~D AFR Ad6Z A,dd ATD|m AF Aj Ans Ay A(ڄ Anv A0`d%o A"Zs A`Zc AT ; Affsk A~# A `e A* T A tq A zG A vt A 2N A0 `"<s$ A|.J AhȪW AȪ9 A H.Fq A.K Aj A8rb AܪX And AXW ANJ A8 AO A|ȪH Atn< A`z F A`ȪB A~h A~ AD[@ APdK AdQ A-K AnX AP AdC A.zܪG Az:R A4n@ A :H A$x5D A+C A :w A<U AdFiP AR A nS A\`6 A4 AnnM A0N Ais ATxM A@nP A,} AxP AU AҪL Ak AdT A, > A0xT A,= A@R. ADҪM AP"@ A8F A$_S Ah87 AR65\ A O A|: AJ AxDVf AZ@ AM AȪS A @EO Az^ Ah AXҪk A\ A@Ny AR6M A2` A@pD At!u Ah.Wt A"jj AzP Ap,a Avf^GZ AW A@} Ar hV A,t|^ ArV A6;Z A>:Q Atdw AHJTP Aw! A\b֫-F Ar! AJ(F Ah" ATh)= A`$ A A|/ A(^T, A|Ȫ; A,' As A8J A^0 A>r AF  A|63 A6 AJx AT AT:Ϙ A ^1 A APl A Ab.D A| ANҪ + A xG A>\ A\6 A h A n A A6 Al3: AZX<m AdP AB A A: A66 A.n A8 A`hJM0 Ax&dޕ A"3 A^-+ Ad A0 A f AP AhE) A: &Ȫ3 A /& A 0 A  u A\ Ax! A> AD A& AdJ\ A< Af/ Arz A r A^\z A2V Az A\\ A R4 A ARʝ Ah A b A R AD AJ AJ Aj A Av ADA A AVfܣ Apl*ş A  Af A8b AX\ A  ARTHS AhL AT4} AT o A*! A<G ANR Axj A: Ap0[ ABP0Z A`Phk A2  A2xnZ A6$ A@( A| A,L\ AةT AVZΘ Aة^} AF  ATة A$L A~ɥ AP~ Af~r A|.' A: A Ax A(x7 AfΩ AFfj- A Ap(j~ A- Aߙ App A( AC A} AzR A~ AL< Al A$ AjG A^ȕ A A~< A2] A~  AL<Z ApPr Av\2 AP AF^8 A AP AN \S* AZG A2 A*8:+ AB\1 ABx2* AV  A T% A N Apx, A6 A&ة$ A A26 A@." An AHΩf A" Ah Ah0 A A>B A>Ω AhةX A*| Abg AP 2j A h 9 A  J( A FȌ A < A& t& AL@2 Aj~ An  A~n) A*@<f A0 AJa AI~ A@W{ AL Ah]{ A` ASy AJA A P A$$cw Ad AX., Adxz Ajn A2%' A^א AjP= A\A A8Pw A,\! AҪ} AdȪ A/ AV|" A4 A^@ A"C8 A"~nw A.(( A(l/ AjL( AB`t: An 1 A*Ԟ Av@ A*yu AHJ| A$J2 AP, AZ| Add- A A*, A_4 A  A`>3 AZv6 Adw ATT A\w A, Aܪm A@ ABJb A`J  AJuw A@Ȫqn A^l6h Av"^$q A t AȪj A."rXl Ar] AP ALnX A<@e AC_ A`dqo A@Pu Ax< Ard AZ? A dd AXZ> AZq AZu} ATdw Anc ALx#t AҪt A,Ldo A6D[ A0 }z A J  A* ф A<7 AJj~N A@fP; A( A<l A$| At  A*o Ah Axn ATO AvR ATݛ AT _ ATb ABg A^с A^h A$ Ao AT~9 A8 A&W AN3a A:L A A`L| AVڣ A<` AV A@bi A2|z ArL A*Z2թ ApXr AzXԭ A,Ԝ AJ8 A Ƨ AѨ Adά Al( A0&|@ A: Au Al A&П Alnnc A\ AF"Е A AN F A  AnE AA A@  AlT AB,_ Avϟ A r A ߎ A A4* Ah> A  A>@ A.\  ANv A( A A0 APd AbW A4^r Aj A| ArPr AP APL, `۳Aŧ `۳A `۳A; `۳A `۳A `۳Adw `۳A6p`) `۳AX >t `۳Az A\ AlV Aw Aͥ AV ALY A~ AtB Ap~ Ad`8i A`L  Ap.D A2.@ AX`Vқ Ar A B( A~j Ad,pY Af8y A  A\B`x A~jz A8V Aj8 AZO @۳A"~&g @۳A$~[ @۳Ad%r- @۳A&f* @۳A@&3 @۳Al'% @۳A\(( @۳A/.^25- @۳A1\O< @۳A5+ @۳A|v `۳Ad "K& `۳A!f `۳A$pdJ+ `۳A%4%W `۳A&~! `۳A&( `۳Ab'E/ `۳Al''4 `۳AH(nC5 `۳A+ F `۳A+x1, `۳A+~ `۳Av,r!1 `۳A,J `۳A-|W8 `۳A.' `۳A..2S- `۳AF/B `۳A08d@' `۳A1VXL* `۳A2"0.: `۳AB3V#_ `۳A`3P1 `۳A6@L `۳AD6FD `۳A6\] `۳A>7<$ `۳A ~ A֖ ATΛ Av A= AJ(Y Avp AB L A&f Aj$p A %BH* A%D- A'V$ A(F\% A)2FZ A*z A*>D A*C0 A*z&# A"+J, A+z A,p`Nu' A,&" A-<. A-Pjr A.@ A/(,  A0XLo$ A05 A1-,. A 2p1# A2n@$ A83d# A`3 A4>g An4(- A4P}, A7]- A>7d A 8œ A ( AL Apt$ A  A, A A*%( A,!I, A,!&- Ah!t A!^( AX"Jh0 A*#tO An%FK; A%2* AJ&>/_ A'K. A (0]5 A(hF6* A.)(2$$ AL)% A)dZ1S) A*jJ0 A *Q A(*2N, AP*\%& A+. A+Z1J/ A+Fx1H4 A:,N/ AH-Nz# A-<P! A-8N  A8.P,- A.dp A.*r, An/r6 Ax/P^2"4 AN1P^* A1n0.D1 A1L~Nv# A2Z A3.  A5f% A:6$ A47~5 A7f%e  AL  A @۳A V @۳A<Ω @۳Az0ĩ @۳A$ @۳A֒ @۳Af  @۳ADĩx @۳AN @۳Ah @۳Ab2] @۳A".( @۳A#>~g  @۳A(h @۳A)xx @۳AT+hx @۳A/2v @۳A(/&2# @۳A/xFk @۳A2t @۳A3xZk @۳A4^=8 @۳AF4*=+ @۳AZ4N p @۳A,5Tx] @۳A7TJ @۳A6T% @۳A6zܪ}S @۳A6  @۳A@5 & @۳A4<a @۳A4z! @۳A34 @۳Az2ei @۳AD10? @۳A0Ҫ{ @۳A/2| @۳A * @۳A( @۳AH( @۳A'@& @۳A'… @۳A% @۳AX"F3 @۳A"!"d @۳A zF @۳A @۳Ad* @۳Ad @۳A( @۳AP @۳AFF| @۳A|ةB @۳Abr6 @۳A@ v @۳A @۳Ap2> @۳Azfةф @۳AL`I= @۳ADRH~ @۳A x @۳A<ٰ @۳AZR @۳AD @۳A @۳An < @۳A,!f H% @۳A"dC= @۳A" Hl, @۳A*#TȪ3 @۳A# H<* @۳A$9~ @۳A%N H @۳A%ƈ @۳A( @۳Af( @۳A*zm @۳A6+N) @۳A+.$ @۳A,H  @۳A$.~<  @۳A /Nj @۳Ad/x @۳A/^Rz( @۳A0}o @۳A1TF"E @۳A2*  @۳A3x* @۳A83lF @۳A3,r @۳Ad4&* @۳A4,a @۳A|5f   @۳A6^n @۳A&6J{ @۳Ab6d" @۳A7|e @۳A7J'] @۳A7 @۳A6T} @۳A5,N @۳A3P @۳A1  @۳A012T' @۳Ad/| @۳A2/t @۳A.8vi @۳A8.xT0 @۳Az-t{! @۳AX,z @۳A0,^ @۳AJ+x=' @۳A~)u @۳A&8* @۳A&7p @۳AT&) @۳AT&N:3W @۳Aj$"7  @۳A#v.: @۳A"X9 @۳A`A @۳AG7! @۳AjB @۳Av0G, @۳AB @۳A C " @۳A T< @۳AvK1 @۳A F @۳ARC- @۳AK8. @۳A^*jD! @۳Ab;  @۳A|A @۳A\|H+0 @۳AAD" @۳A C2! @۳ARC) @۳A7A @۳A! @۳A ++ @۳AB & @۳A#T @۳A$= @۳A$FJ  @۳A(%8S* @۳A%\ @۳A)<' @۳A)B  @۳A*j5( @۳Ax*(R2 @۳A*<  @۳A"+j5 @۳A+hSC @۳A-|S1 @۳A-xw @۳A."J( @۳A.@ @۳A/J( @۳Ad/- @۳A/7& @۳A60T~S; @۳Ar0M 4 @۳A1$67 @۳A 2 @۳Az2N @۳A2*I7 @۳AV3  @۳A`3  @۳A5C+ @۳Al6$ܪQ @۳A6>V&9 @۳A6Nr @۳Av6X;\ @۳A5H>< @۳A4(S @۳A4S6 @۳A4 ,$ @۳A(4&8^ @۳A3T, @۳Ab1jV/ @۳A0"`k6 @۳AT0:Q% @۳A.xF @۳A-y` @۳A-D@" @۳A&'$yg @۳A&L @۳A%vx @۳A#*P ! @۳A"!L.?n! @۳A J; @۳A @۳Aj^V @۳ABn67  @۳A,| @۳A"x @۳A?  @۳ABd @۳A @۳AxR9Q @۳A$j @۳AtY @۳A&A @۳A4P># @۳A @۳A7$ @۳A$ @۳A9 @۳A8  @۳A @۳Aztj @۳Az F6 @۳Ah  @۳A ..:+ @۳A B @۳Ah * @۳A<74 @۳Ab @۳Ar7T- @۳Ax @۳Av @۳A87' @۳A@ @۳A6^714 @۳AhV5 @۳A"2* @۳AZ @۳A,Z1Y @۳AXF7 @۳A @۳A ; @۳Az#0$"' @۳A#:G. @۳A#"|F, @۳A8$@$ @۳A&E- @۳A^&hA @۳AD'у @۳A+^zo @۳A+B @۳A,Tm @۳A/HW6 @۳AX1X!+ @۳A*2  @۳Af2B' @۳A20B3 @۳A44@]B @۳A5$P@D @۳Al6X' @۳A6L&wD @۳A47.) @۳A7? @۳A7>  @۳A7FH  @۳Af72,h4 @۳A*7|Z @۳A 7Nb)4 @۳A6ܪ @۳A>(f @۳A>(o @۳A&'Rs @۳AZ%K @۳AF%% @۳A#C% @۳A#T0$J- @۳A!# @۳AJ!# @۳A"!<zHp% @۳A~(g @۳At>H @۳A4>~ @۳A\pc @۳AJ @۳Alǔ @۳AD @۳A| @۳A^:6 @۳AT:0 @۳A z8 @۳A H= @۳A~ Jĩ `۳A @ `۳Atĩ `۳A7 `۳Ad$ `۳Aĩ>z `۳AL) `۳AH `۳A   `۳A d `۳A! `۳A!6 `۳A#X `۳A~$$ `۳A$<x `۳Ah&~ `۳A(~ `۳A( p `۳A+~  `۳AF/N' `۳A@0:ZO `۳Af2N1 `۳Az2@P| `۳A2 `۳A83>R `۳Aj34MM. `۳A3V( `۳A4*V; `۳A4D"(/) `۳A4N `۳Ar5 M `۳A5PS1 `۳A5^=~@ `۳A5@N" `۳A7r `۳A&1>b  `۳A0b)]# `۳Ah0 `۳A0tM `۳A..JB `۳A-lK `۳A -Q6  `۳A* O9 `۳A(*"r `۳A)fO?5 `۳A:'8&Q `۳A! `۳A(] `۳A05 `۳A  Ŭ `۳AZ FJ `۳A6 4 f `۳A^ H` `۳AI> `۳A>>< `۳A6;1 `۳A&@>C2 `۳A `۳ARH1 `۳A  `۳A GO- `۳AD"zȪk `۳A"P `۳A#4Lf  `۳A$2@; `۳A%3 `۳A%N/& `۳A&  `۳A&<LN `۳AH(Lg+ `۳AR(  `۳A\(t  `۳A(fM: `۳A)N=S `۳A+:Q `۳A-$ `۳A-^9" `۳A-l, `۳A.t57 `۳A8.JQ@ `۳A. % `۳A/@5' `۳A0 ,y& `۳AJ02Q:/ `۳A0X8(( `۳AN1*;  `۳A1FR `۳A1_ `۳A1 6(j `۳A26M# `۳A<4B:b6 `۳Ax4dn1\ `۳A4H99, `۳A,5hd1A `۳A,5N  `۳A5^A" `۳A5f, `۳A4FTN5 `۳A43r `۳A4&  `۳A4Pr( `۳A4\   `۳A34R `۳A3FCG `۳A3b3 `۳A3" `۳A`3" `۳A2.6d `۳A1Q `۳A:1Ht+ `۳A1d'  `۳A1'  `۳A0V! `۳A0>(J) `۳A0  `۳A/Bt+  `۳A/.5 `۳A /RDQj6 `۳A.j$+p  `۳AB.R+% `۳A..,/ `۳A.F"  `۳AR-*lQ6 `۳A4-T<j. `۳A,0.  `۳AJ+:* `۳A*\D.  `۳Ad*BS  `۳A~)dhK `۳AL)t>4 `۳Af(,#  `۳A>(*>S, `۳A'@# `۳A'$1 `۳A'P % `۳AT&|@Pv* `۳A,&C& `۳A&O, `۳A%$ 4A# `۳A%~I0+ `۳A%`I/ `۳A(%2$ `۳A%2$ `۳A$VN( `۳Ap#2 `۳A"h67 `۳A"6 `۳Al"ZV:'0 `۳A0"V6& `۳A!D3 `۳A!2E  `۳A 5. `۳AA  `۳AvfGr `۳A6DB& `۳A$z  `۳A `۳A `۳AI `۳AD=(% `۳A~I `۳A>|  `۳A:80- `۳A H<. `۳AL^BG `۳A0B  `۳ANB' `۳AN.$D `۳Ad B `۳A >p `۳A5>  `۳A5>FJ%) `۳A6J\ `۳A6N `۳A 7:@7s `۳A7 U_< `۳A7@Y `۳A6A+ `۳Al6ZȪv `۳AN6<# `۳A4*HCo+ `۳A4zA< `۳A3E `۳A3<PG `۳A3@LDx `۳A2F `۳A2n `۳AR24O `۳A1pRb `۳A1<  `۳AX1dW  `۳A:1ܪ] `۳AT0|P` `۳A/f `۳A/<ܪo] `۳An/<g `۳AP/e `۳A=# `۳AL$@B `۳A#d<" `۳A # `۳A"*`S! `۳A!VS `۳A >; `۳A8<@0 `۳A$.? `۳A07' `۳Az*@" `۳A `۳AlB @ `۳AF7  `۳A8ٛ `۳A6  `۳A67( `۳A2, `۳A&7R0 `۳A8r<" `۳A `۳A>; `۳A$ `۳A>9) `۳Ahz9& `۳AR.: % `۳A,:4 `۳AXx;. `۳ALV) `۳A  `۳A = `۳A &| `۳A 60 `۳AXJ7(+ `۳A`T7f# `۳A0P! `۳A<p/! `۳Ad0 `۳A13# `۳Aj28 `۳A 60 `۳AJ@ `۳A _ `۳A9 `۳A!y `۳A"zH& `۳A"zH0 `۳A#D͊ `۳AV$VGm% `۳AZ%F! `۳Al'XE% `۳AH(Mb `۳AT+lW `۳A,U `۳Al,- `۳A-T? `۳A.:w `۳A.T{ `۳A/N^ `۳A2/6`S" `۳AZ/|B `۳Ad/^#O `۳A/BN `۳A04R  `۳A0BX  `۳A1 C>. `۳A1Rd `۳A2ܪ&7 `۳A3ҪfM `۳AB3dF `۳At3A[7 `۳A3\ `۳A4fY" `۳A(4@bG `۳AZ4 .  `۳An4[ `۳A4c `۳A6$+ `۳A*7'  `۳A47<'f `۳A7<'h+ `۳A7}v `۳A6R `۳A5A `۳A|5h `۳A"5.--* `۳A4hX[ `۳A4v0.s, `۳An4*?]2 `۳AZ4D  `۳A2X[ `۳A2B `۳A2N/ `۳AX1H^3 `۳AD1^C `۳A0 9 `۳A06 C55 `۳Ar0L0B  `۳A/'J `۳A/HM  `۳A/H `۳Ad/08 `۳A/Rb `۳A.q `۳A-2, `۳A-!F `۳Af-f `۳A>-B `۳A,B^D7 `۳A,*^m9 `۳A,& `۳A+ `۳A** `۳A*̫q8 `۳A*M `۳Ad*6* `۳AP*>P1F `۳A)H  `۳A(\BDH `۳A(R} `۳A'FL% `۳Al'pG*. `۳A&h|2  `۳A^&DG% `۳AT&RBDuA `۳AZ%PK" `۳A$r `۳A$ `۳A$v `۳A`$@KF `۳AV$lL# `۳A#vG# `۳A"G2 `۳A! `۳A!  `۳AJ!p `۳A< xh# `۳A( Kf8 `۳A~r `۳AH `۳ArG~ `۳A\ `۳AL~ `۳A/! `۳A/Z2 `۳A O `۳A/O `۳A& ^ `۳Ax > `۳A `۳A% `۳A Ü `۳AVΩ AΩ= A* , At  A*@8 AJ A ^ A@!$R A|!V!" A!<} A!*2 A"Zȋ A8$Tx A^&BPEp A^&z A+8PM A+L  Av,J! A-~?  A-F A/N7I A0$ A"0NOD A0z& A0 A0B?/# A0lP6o Ab12tNF A1@ A1 A1j! AR2  A2p') AB30W3 AB3 AB3k* A4&LK" A4P A4o A4$VW) A4) A52T- A5@9 A5 A5' A6Ȫ` A6$xX Ab6p> Ab6   Ab6|2T A6TP+ AR7HQ  Af7M& A7*! A7">O A77 A7r F A6 A6P,] A68 A5z( A4J^  A46A A4zL* AL3J(q! A83"Q0- A83R A2  A42R A1P2 A1,> A1@  A1)) Al1v Ab12Nk AD1fJC  A09 A/ A/J(}  A/8P Ax/hj+:& AF/:Ҫ} A(/ A-VX Az-Nܪ A4-dÁ A-ܪy A+>߉ Ar+Js A* A *ft? A(.O_+ A(NW1 A' A:'T A&O" A6&Y A&Z A`$Zy AB$^I A# A" A M Ajv\  Abx/ AXdx$ A F A߈ Av$ A$|~ A4fΩτ AlΩ Ah(Ω A@ f A, (ΩƆ A~ f׌ A Z A F AT Ω A^ Fq A ʚ A$I A4ۄ Ah) A&`I5 A^8I> A|n AjRH8 AH|  AH A |} Au A*F A NI A Af AP A  AI9 A>{ A: >T Al8I]  AZH3 AIr* AH&G A< ZD A!f- A! A"X:B A"2ȪC A"ܪ A#:? A$ܪѝ AP%/  A@&\ܪŕ AJ&ܪ A&./ A' M!( A'( AR(P=$ AV)L07 A), A). A). A *. A*h.% A*  Ah+@ A+yl A+&Q:7 AD,'l  A,4M A,N>4L A -GG A-\*@ A -(O A4-  AR-{ A-,Ȫ{ A-I} A..9 A~.' A. A/26r A/"8+ A2/z AZ/6ȪMs A/rH  A/ D" A/~' A60   AT0&$ A0M$ A0   A0J$ A0n A:14 AD1J- AX1v i A12{ A>2%G  A2ZTg| A2,w A.3|d1 A3 ' AN6R _& A60 A6` A>7{ A\7JQ  Ap7ZTE Az7>Md A7&* A7fT> A2he A2,f A28S( Ap2 6 A1n Av16C& A1Jh A0DQ) A0H# A0vG A|0O  A@0tS1 A/5 A/:Q, A/n Ax/b'  AF/fvG' A/$ҪP^ A/5k A. A.r AB.@R AB.T+ A. A-| A -*J>1 A-Tf A,hS% A,bzR/ AJ+tl A@+8T2 A,+L2 A*4R+ A`)F  A(< A(M:0 A>(Ҫj A>(Ҫnm A ( ҪDy A(fNL, A&n@ AT&*ҪG~ A%Mn# A$D  A$P A#zH A #PQ]8 A #P# A#" A"P' A:"p3B A0"B.:s( A!C# A!N- A6!:- A!~\C] AF } ABrR AB; A ;  ATב A AHjn= A4@Z  Ax;0 A>  AT0 A Ҫ A6>>> AB:+ A ܪp AV(0G6 AFo A\n AR Al ABB" Aܪ} AdRC, AxH< Ả A|j AJ0 AH: At\CD, A ^y A 2 ALIm2 AbB~ AFH< A:h\C"% Ah  Z AJ | A 2H< A L A  F A FlB? At f A I_- A p: A4 AfLIk AjW A t A^6H^# A` A`G ADlGj( A4J' Af, AK A,h_ A,j AG8 A JR/ AJ($I, Ajrk Az> A4p>Y AJ7) ABs/ A$«Q A$h r A<RCC# A:>Q A|:L A> A60 A֫{N A"Q AX68 AVd$? AV,u A`U A`̫_ A I  A< T A"P̫S A"01a AH#pHi A$@O A$r<S A%z1) A%zD  A%FO A%(E Ah&^F] A0'.S1% AN'z AX'>0 A(fC` A*(x6c A*(bq Ap(@ Az(0 A(fT# A(^.SU8 A(JA` A)d"A A)zb=) A*@E A*p A(*? A(*h AP*F A*rAO A+r A+& A,RC$ A6pf>+ A 7{ A7:m+ A7@S~ AR76<Y( A6"A0 AN6x8&% A5E$ A5F=/ A|5 A@5.F1 A4V A4z>/ A3vE^% A3a  At3T  A2*"A: A2v:Y A2"Ai A1Y1 Av1RCp  Al1 M* Ar0NN5# A0X A/pC  A/ܪe An/rdS A.TP A.>vQH A.0Ȫf A-4Wl  AH-&RDJ AN,84W A,@|  A+"\ A+ A+"f A+RR5 Ax*"jو AF*0>R@! A*JS A.)P A)@P A("VC| Ap(t y AH(<>G A|&hH A%f& A$hp6 A$  A4#Ł A #8 A#,0 % A">ڬ Ah!R, A!ڬu A!c A!PWr A 0. A R@ A( jS ALp> ALԭ AL  A D A V A jS  A<# A @$ A:R+ Ab4:# A67/ A( A :" Axb8jk Ad4 A`<~ A9 A>Z AJ, A*ή A Aή AZJV' AD   AN7) AzJ AR7S  A 6, AP60 AF&8& A>i AH9 AjJi  A6A  Al;{ AZ>9/( A,P Ap AR47k/ AN, ? A>,gJ A u A(:W2 A . A ArxZG  AZ3 AP A</  AHL6 ATB Aɞ AO AT~B Az9R) A\H|; A4`8 A7A" A >gv A |S A L A |. A ~ A@  > A t:& A< ے A2 V A P;+ A W A f|> A   j Ap  A h5 A 7: A |! A T A d A^ h74 Ar l8>& A  | A 74 A TQ A4 A $ AfT A^' A Al A' A(;; A<6 A4/' A% A>/< Afvӡ A1 AT.$ A7, A< An^ Axd" AJB|7A AX<Ј A0d,W ADh Az:`57 A* ABf£ AL2! A5% AN At6! Ab|N4 AI= A.ZǏ A88H AzH8 AZ N$d A H& A!:y A"G A%T2 A%LD A,&xJu A&' A&JH A0'M A0'0K! A\(< A( A)^* A)(J A2*fK A,Tp A0,5 A:,v>W+ A-VTI A4-&q Af-x A-rK AB.B) A.HW> A2/Cn A/hRC A/DV= A/?|# A/?X A0:[ A0"?0 A1~@# A01V*= AN1,M A1$ A1X[, A\2< A2@; A$3 l[5 A3-" Ax4[' A4-1 A4d@pL A48-r A65pQ AX62@4 Al6rF A68p A6Bw A6* 1 A47NF  A7^# A7F^a A74@x A7r*& A 7ܪl A6\*% A5Dd@( A4(k A4hA* An4?n! A36|-( A3( A28-4 A2.?#* A2U A 2j( A1r AX1- A0^+ Ar0>&) Ar0X[ A/t0# A(/L) A.`FJf A-/, Az-9 A -8Go& A,bG= A,Z11. A, A,t80$ Av,FF_ A0,N A&,HX A+6K  A|+\p_ A*D& Ax*B A)K  A)P A)FD. Av'`DEP AX'&  A&63 A|&BD: A@&Rz A,&BG/$ A%l&Z  AP%.3! A$<$ * AH#pH A4#Z A"Gi+ A^!H= A 8J- A4p"B Ai A  AZI A. A/ A.0,@ A: A:09 A@`0z) A/ A  AVJ:\ A*D8 A TXW A D A  A ةj ATX An Ap A^w AΩǎ A^ Aة A Av AZ A( Al< A A8@w# A(x A A `  A!~  A"T A"^  A$$vd_ Aj$E AZ%x A(fPvr AL):Z~ A"+(} AT+B[  Ah+Z A,   Av,ZA A4-Xz Ap-8?= AB.xd6o Aj.: Ad/$?# A/"~?_ A|0  A0rb)x A1Pdw A&1dxWh A01DPc Al1 A2Th A2bk A3K/ A3>. A3y( A3@(( A4/ A4r=JG A44 A469 A4: A5ZO9$ A|5! A5 5 A5>- A6`Io A06\HM; AX6 Al6*  A6, Ap7Q& A7H$ A7dJ A7n;l& A72 AR7`S*) AR7d6, A47 A7.z& A6V9  AD6J& A&6l2@M  A5[ A50L"% A^59N" A4Z@(u A4d=EW A4J(m A4"F  A4pܪb A4  Ad4@P Ad46,P  A24<"A A3z6( A3@^ Aj3J, A36z[* A2:0 A2XJ A2L$:U A1* A1V:h A1   A04*% A0Nܪ7x A0,K A^0d` A0 6" A04hPS# A/X A. A8.>D A,?l A*ŝ A*> A*LOh6 Ax*O7 A<*Ʌ A) A(R A@&\} A(%I A$,W A$$d%v A"F Ar!Jy A <8 AHZ A0Z AH A0Ð Af A v A| y AJةW An A*o Ak A AĩɎ A$ ! A PS AT H^ AI' AI56 A؀ AP AJd A|  ABIS- ADH A<7 A6|& A:Ȫo Af|& A~^B AH73 ArtI! A>C3 A^ A Y A >CR4 Af~C  A~; AZ D/ A  A DH: A"G%+ A*#3) A#RH% A8$C/ A`$n  A%j\H# A(%C\ A<%4ܪҏ A%? A&?b7 A^&/ A&6S A&1 A'r1i A (NO= A(d O"F A)p/i AL)trk AV)x A~)=C% A)_} A *4 A2*ZL16 A*P# A*\' A*lQ; Ah+vL<& A+' A,@Ȫ s A:,ܪL{ Ab,h4y Av,.  A,- A,;v A,:QF A,h$r A,;/ A4-\* A-,z A/v8* A/H** An/,) Ax/>4 A/! A0f&# A0:! A0JX8+ A04"Az A085 # A1,z A1\`& A1' A 22J-S  A42" A\2NL Af2<<2 A5fO& A5O$ A,5Nl8" A"58  A4"1v A4>" A4.^h AZ4C AP4lE" AF4R. AF4m A<4"i  A24F4> * A4&BK A38S/ A3TP6. A3:.v A3VSd# A.3S+ A3d> A2FI A*2H A 2nFOE A1TP'. A1  Ab1LIi Ab1@ AN1 A1FL A06h A0q A0b AJ0<6 A/TSd A/r" A/q AF/-J( AN,B A:,L(4 A+Bj A+d  A+l Ah+Fj5 A*R A*< H  A*L45 A*Ҫc Ax*^ A2*:=, A *D=7 A)8=? A)Fg A)ҪJu A(pZO! Az(^dO  A(p>m) A'0n@_  A'Ҫ A'(*M# AX'B5. A'*M) A'dC A^&jO4' A&jCr Ax%:P( AZ%P@8 A$Z  A$jܪ A$8"Ku AV$G~ A8$z A$$2.:I  A$?  A#@P+ A#\\C. A>#t6j A #JFl! A#|D A"jvG9 Av" A0"\Cd4 AT!F4  AJ! ~S& A"!i A!.,f A!.5, A > A(  Aj Av`5 A AzH A>  A`ܪ+ ANRH! A0jBH A, A~ A ; A   An$6 Ax  A$80 AR>s# A( A~? A8x ALI.$ A A`@) An^? AP" AF8 AW AjA AJB A D ABI# Abp>U  A A A^HH3 AH3 A2j~ AzB AVH6 AtLI52 ARC*) A Aj} A VK3 A ,J A@ 6HG> A6 Cf A TKC AV lBm A RJ2 A  A :Ҫ A Ҫ· AF .J A R6K; A6 J#> A  A Ȫ> AI) AH A< A z; A(:| A"v A&<I  AHZJ'. Aj; A2V$I[$ A<Tsv Axl AL{M AT Ah| ApH8 AB& AH6 AH- ARCw' A.*> AL  AV@ AH% A !) A(=# A@Ee AbJW AJ7U- A># Ahk[ AJ A   Ah[s APRR) A< Q|& A ̫] A l[ AJ!H AJ!Th$ A!F`S6 A!`1E AD"(H! A"@G Ap#H A`$D  A$Po% A$vm A %Pj% A& \R A|&6!k A&q A0'jA AX'(H| A'fO  A'6Q A ( <! AH(N</ A(<.S~) A)R_. AP*S@ Ax*SL; A*` A*8w A*< A+` A,,< AN,.I A,n A>-o7 Af-8 A-PvQ4 A-D(@ A.>SG5 A(/ll AP/F! AZ/: A/@ AJ0G>) A^0 ~S9 A0Ic! A0Z6!) A1vgd AD1Z AX14S8 A1Z@> A15i  A*2.Y$ A2TB% A36#  A36b A83ܪOX A4;] A40\ A4ZHC9. A40 A65x}  AJ5A AT5hx  AT5 \M A^5\nk A54tS A5 A5P A06I A6n;  A6x  A7"6` A*7(\r Ap7C{' Az74 A78j. A7;:* A7C% A7^< Ap7hV&\ A 7E! A6n A6*( AN6~C AN6v! A:6*;% AJ5\Q A,5Lܪ` A4(  A4  % A4<YX A4 S4 A 4JE6  A3T& A36S) A3Y\* A1, Al1XTO( AN1:nh A1u A0Wg Ar0T7" A/ W( A/J`S* Ad/.\ A.6pR@ A.tBSS, AV.j A..8q A-[ AR->V) A4-BS A&,N A+V A+D8X{ A* AZ*l8r A2*:`D  A(*K At)\H AV)C# A(.E A4(8 f A'p̫?; A&$ A@&VhA, A%2h. A% S> An%(A AZ%E$ A2%$ԓ A(%NG A #L| A"Yv Al"0=F5 AD"4=' A0"Lr A@!4lf AZ@. AX$lo A~B A$0VS= A*J7& Ad<? A  AT># AvvJK A0j$ A&Ҋ A82  A,?' AF>*, A5z A<># A,L A*74 AV># A"$Z Ap6:e- A\Ru AVi Ad;& A2,ݖ A0V A9% Ah P;K A Z;j$ AR 5 A~ 4P61 A 8. A6 vi A K A7a* Ad A71 A,Š A@7/ A4;* A A$ A8b A AvhM Ab At A,20 A0 Adv ADl ANl AjNDH A AX Ad LI 1 A0"#a$ A>#} A#f A$X A$ A$r A"&br2m A&$ A&m Az(b։ A( A(:vL2$ A)D&Ǎ A2*$ AT+U( A+&܃ A+$$ A,U6 A,"U6 A.|B A~.tD A.VG A(/N;  A2/NxX A/hK A/WC Ar0>BN Ar0vnY6 A0^( A1ML A01[) A:14@: AD1le  AD1l-3 Al1,IW Av1TFR  A1A/ A2 A2H% A2@> A3   A3 A3"2 A30dYO2 A3<X0 Ah5l8&3 A5rZY  A5~& A5Zm A6P@h? Ab6J A7J- Az7"-3= Ap7jE;  Af7^(@\( A\76t] A5@,# A4cA A4rJ A2rR; A\2?+ A1R0u' A1.- AD1rJC A02@ A0|> A0Ga Ar0H; AT0L+ A A$$x( A.$3M! A$ vG/% A #T A"pH% A"׏ AX"#) AN"ZT2  A! A$NJ7 AJQ Az Ah5," An5 A4> Al85. ANJ^ A@ Ax@ A.H> A|+ A2 A6ߙ A| `0) A;J* Ar AR  A 6 Ah | A94 @۳A:PY7 @۳Al;n" @۳A=2 @۳A AM; @۳A4A@ & @۳ARAP  @۳ABP  @۳AFN.  @۳A F:NR @۳AFz<P @۳A~GZ~ @۳AJ @۳AKnrG/ @۳AO@]] @۳AP>8 @۳AQ @۳AQ'^ @۳AS.&E @۳AS") @۳AT6\) @۳ATbV @۳AU@ @۳AV(~  @۳AW  @۳A&ZF @۳A=S @۳AL=S @۳A=b @۳Az<d @۳A;$ @۳Al;|F* @۳AX; @۳A;, @۳A: @۳A:b\ @۳A|:@ @۳AT:: @۳A:zظ @۳Ax9,2 @۳AF9F+ @۳A8H @۳A8j6D @۳A8,2 @۳Aj8|CB @۳AV849 @۳A8Zc @۳A8PW0 @۳An9nz# @۳A:  @۳A:z  @۳A;M& @۳A; @۳A;Q @۳A;n0 @۳Af<JP @۳Ap<<  @۳A<~ @۳Aj= @۳A=bJ @۳A >: @۳AF>C, @۳A?\( @۳A?ҹ @۳A?8> @۳A? @۳AN@ @۳Av@J" @۳A@ K @۳A@)1 @۳A A|x @۳ARA @۳AAZK @۳ACȾq @۳A2C~( @۳AC0M @۳AC @۳AF' @۳AH|?W @۳AFHD  @۳AdHP  @۳AH^x[ @۳AI4\% @۳A&J^[ @۳ABLxV$9 @۳AMFҪ| @۳AOJq @۳AO|Ҫ(q @۳AQ @۳AQn/s @۳AR\ @۳AhSr @۳AS< @۳ARU2<)z @۳AV>n @۳A]( j @۳AX^ Fp @۳Ada . @۳Ab~: @۳A$e<R @۳ALexy @۳AtedԌ @۳A_F! @۳A\8F @۳AZ, @۳AY@J @۳A6XFc @۳AV2d @۳AV2vq @۳AfUdp @۳ARRF @۳ARvL  @۳AQ4~ @۳A$Q*S @۳ANOI @۳ADOF @۳ANzV_  @۳AxM~RRB @۳AJ~ @۳AF$$ @۳AEX @۳AE, @۳AD*֫z @۳AC) @۳AC(". @۳A*AB'& @۳A@t; @۳A@T% @۳Ar?T<0 @۳AJ?|s  @۳A>hM @۳A=«p @۳A<r; @۳A;~U% @۳A9?  @۳A8^ @۳A8hw @۳AV89  @۳A8;) @۳A8 @۳A8v @۳A9@ @۳A:T @۳A6:U1 @۳Al;h;4# @۳A4<>! @۳A>t @۳A?(P  @۳A?Tz @۳A:@  @۳A@r6Ay @۳A@r\ @۳AAI @۳AAvV0 @۳ABg  @۳ABB21 @۳ALBb%! @۳AB@- @۳ACn&c  @۳ACP  @۳ADx @۳AD6, @۳AD: @۳AE @۳AE. @۳AE$  @۳AH  @۳AIT+3 @۳AJ @۳AK&= @۳AKz" @۳A~Lk @۳A(M>U& @۳AN*\H @۳ANRR @۳ANUI @۳APtS& @۳ATSx^t @۳AUrZ @۳AVT @۳AX8( @۳AYf08<# @۳AY f @۳A(\Fr @۳A]$n y @۳A^X0+ @۳A`0#P @۳AaDF @۳Apd @۳Ad< @۳AdFl @۳AVe @۳A~eZ3 @۳AXc} @۳AaZk @۳A`9 @۳A^nhu @۳A]bn] @۳A\T @۳A\V @۳A2\? @۳AZ| @۳AvYS @۳AlY(s @۳AX0tX @۳A^XN6~+ @۳AUb1 @۳AUf0i- @۳AR|SJ @۳AQ F2 @۳AtQZ @۳A8Ql\ @۳APE @۳A4P (2 @۳ANfI>) @۳AJNTdJ @۳AMP  @۳AZMF|  @۳A~L @۳AKlB @۳AJ,. @۳ADJR$ @۳AIS_' @۳A,IP @۳AH<D1 @۳AxHzR=@ @۳AH=  @۳AG   @۳AGG @۳AF,<g @۳AD D @۳ACK @۳AC6 @۳ALBT0 @۳A="<9! @۳A(9"@#T/ @۳AB8Jo @۳AB8ܪ~ @۳A.8|  @۳A$8  @۳A:0& @۳A=Ȫ(x @۳A>Q& @۳AZ> j @۳A^?b^ @۳Ah?Ȫ4x @۳A?9 @۳A>A9 @۳ApAH @۳AA]k  @۳A0E2g @۳ARF22 @۳AH @۳AH @۳AHb @۳AH|`D7 @۳AIJ;/ @۳AXJR.  @۳AJ6 @۳AKTҪ @۳AKX# @۳AMP=x @۳A^NI$ @۳AO @۳AO"% @۳AP! @۳AQrn @۳AR @۳A(R/ @۳APR<jX$ @۳AxRT7  @۳A,S @۳AJS @۳AhSL* @۳A|S4 @۳AS:.^% @۳ASȪ}{ @۳ASN-% @۳AbTX @۳AU \ @۳AZ"7{  @۳ARZ"P @۳AZnv @۳A[S @۳A["7 @۳A\2S! @۳A\H: @۳A]D @۳A0^R @۳Ab^X3  @۳Af_N! @۳Aad2 @۳Ac|( @۳Adp/5 @۳Ad^PAx @۳AdBQ< @۳AarUT+ @۳A@S<u @۳A,S*  @۳A"S* @۳AR*" @۳AnRD,  @۳AdRTL @۳A_ @۳AC @۳AC0Q% @۳AC R3 @۳AC&{ @۳A?>vQ/ @۳A?vQ2 @۳A>N^l @۳Aj=th} @۳A&;2t+( @۳A^:>n|a @۳A,:b$\ @۳A9RG @۳A8lb)3 @۳A8,-92 @۳A86nb @۳A8T @۳A88  @۳A.8F@a `۳At87  `۳A8R n  `۳A9\.? `۳A29:I `۳AZ9.? `۳A9& `۳A9̰ `۳A;r  `۳AH<S `۳A<6$ `۳AP>j  `۳A>"Q `۳A>v3 `۳A?#% `۳A? `۳Av@~  `۳A@B(6 `۳A@T" `۳A>AvB `۳A\A""K `۳A`B  `۳A~B\>T `۳AB R `۳AC/ `۳AZCJ() `۳AZCp/ `۳AC# `۳ACPV `۳AClrK `۳ACD$? `۳AJD2h(H' `۳ADPG! `۳AD  `۳ADE E `۳AvE- `۳AvEV" `۳AEڶ `۳AE:G, `۳A F= `۳AFxa `۳AF'& `۳AFAR( `۳A.G-4, `۳ABG@-  `۳AGu `۳AG~ `۳AG V `۳AGx<8' `۳AH `۳AHd8&% `۳AHNG `۳A"I- `۳A@I#U  `۳ATIv= `۳AI `۳AJ F `۳AJ) `۳AJ«>G `۳AJ, `۳AJ(^ `۳AK~d1-  `۳A K^@C `۳A4K$$ `۳ALX= `۳AL|  `۳ALZ,  `۳AZMF1 `۳AZMd1/) `۳AMdPs `۳AMr@] `۳AMX `۳A"N\o  `۳AOD? `۳AO\\W) `۳AO"J `۳APh^ `۳AfP `۳AfPA `۳ApP1S `۳APH1 `۳A`Q(l  `۳A~Q01, `۳AQ0j `۳AR, `۳APRz41 `۳AR\ `۳AhSRd< `۳ArS8 `۳A|S$0vH `۳AlTx4U8 `۳AT& `۳A U68 `۳AU+D `۳A4UF/Y `۳AfU  `۳AU. `۳AU" `۳AVVH/ `۳AVV54 `۳A WL `۳A/ `۳AYh) `۳AZ&̫V `۳Aj[> `۳A[Z `۳A[/ `۳Ax\rQ `۳A\@ `۳A\H; `۳A]zk  `۳AT]F  `۳A]X^PX `۳A^ `۳A^  `۳A^" 5 `۳A&^VhQ `۳A^Tr^ `۳A_^Z `۳A$`~ `۳AL`F$ `۳AV`Jk `۳A`Fg  `۳A`,Ь' `۳A`  `۳A^bn@8 `۳AbJ. `۳Abc.4 `۳Ac,T `۳Ac| `۳Ateخ `۳AteN `۳ALeV `۳AeNw `۳Aa$7s `۳A`8ܪu `۳Av^< `۳A,]8H `۳AZ| `۳A\Zht `۳AYt `۳AYZm `۳AYt<K `۳AXFEs `۳A|X# `۳ArX~6) `۳ATXm `۳AWd `۳AVP7  `۳A>UxW `۳AT, `۳AS b `۳AS@7* `۳A^Se `۳AR2 4 `۳APR$5 `۳AR~e `۳AQ4h7  `۳AHPh^ `۳APb5 `۳AXO `۳ANXn `۳A6Nb `۳AL|FS `۳AL֫]J `۳AKV  `۳AKtG `۳AJB `۳AI@ `۳AI  `۳AI< `۳AI  `۳AI4E `۳AI$ + `۳ArIztsG `۳AH `۳AH*y  `۳AnH|%] `۳AdHD88; `۳AG@ `۳A.Gj% `۳A$G _ `۳AF"d 7* `۳AFd= `۳ARF.  `۳A4FL  `۳A4F H  `۳AFRj2 `۳AE" `۳AEj= `۳AEVTS `۳ADEN   `۳ADN, `۳ADC4 `۳A|DhF$ `۳A"DLU= `۳ADv$  `۳AC4J- `۳AZCpRY* `۳AB `۳ABIR) `۳ARAlh ? `۳A@RN$& `۳A@rU  `۳A@DEn `۳Al@RIQ `۳A@# `۳A>4I `۳A~=\' `۳A\< 7 `۳A;Ts% `۳AN;@: `۳A:xTe, `۳A9Vp*  `۳A9J `۳An9 `۳A8D8 `۳A`8 T# `۳AV8|m  `۳A`86  `۳A8xA `۳A9+ `۳A:/ `۳A:/ `۳A:P~! `۳A:p"#  `۳AN;lLa `۳Ab;Q" `۳A;|(  `۳A <^5 `۳A<> `۳A<fCs `۳A><"# `۳A< R `۳A=F `۳A$=D#: `۳A.=I `۳A8=@Uo `۳A="2 `۳A> 2J!) `۳An>HF `۳A>XH `۳A>6rA! `۳A?JT `۳A?nC$ `۳A?   `۳A@  `۳A@z  `۳AAxJx! `۳AAP `۳AA>_F `۳AA.\ `۳ABz  `۳AjBx `۳A CGy `۳AC~P$ `۳A2C `۳ACXc& `۳AC `۳AC `۳ATD `۳AhD` `۳AD* `۳AER `۳ANE:fW `۳ANE4 `۳A4FP `۳AFxHW  `۳AFl] `۳AG2 `۳AHH `۳A H\%  `۳AI<P `۳A6I( `۳A6I-  `۳AIf  `۳AJ `۳AJtt> `۳ApK>"e `۳ALLar `۳AMM `۳AOM `۳AbO\R# `۳AfP^R% `۳APK  `۳AQ< `۳AQJ?  `۳ARS `۳AR~D" `۳ASdz `۳AS\M `۳A*U(ܪo} `۳A9\ `۳AX< | `۳AX(\p `۳AXPF} `۳A:Yn>X `۳ARZndq `۳AzZWs `۳AZ\<h `۳AZ `۳At[4 `۳A(\Pj `۳A<\2Bt `۳A\dr `۳A&^W `۳A0^ZxRy `۳A:^(j `۳A_8( `۳A_POs `۳A_t?N  `۳A_<ny `۳A`dz `۳A`B `۳AL`; `۳A`  `۳Ada `۳Aa(y `۳Aa<tt `۳AcxI `۳A&cdc `۳Ac@ `۳Ae  `۳A$eP `۳Ae\ZB `۳AeF ' `۳Ad J  `۳Ac ZQ `۳AbD- `۳AbJ `۳AbJx `۳Aa ZM| `۳AaVR " `۳A``rZKn `۳A^Jdn `۳A\Z}r `۳Aj[~F `۳A Zjy, `۳AhX.dg `۳AXNO% `۳ATSQ/ `۳ASns `۳ARBM. `۳A$QW `۳AP,23 `۳AOSz `۳AvO\RR `۳ANOҪ@f `۳AMBI#  `۳AVLQ `۳AJ0vQ `۳AIZ`5 `۳AIdN `۳AH  `۳AFHPLS `۳A`GdLI `۳AFRL  `۳AEFLI `۳AEC `۳ADr `۳AD@>W> `۳ATDC  `۳ACI `۳APCR& `۳A2C82& `۳ABB& `۳AAl' `۳AHAWK! `۳A@W( `۳A?(J  `۳A?̫mc `۳A|?B  `۳A> `۳A=>U7 `۳A=S `۳A<4" `۳AX;L|A. `۳A;>0lH `۳A:jy `۳A9VT# `۳An9& `۳A 9P~ `۳A9I `۳A8jj$ `۳A8~   `۳A8f  `۳A8Jc{ `۳A.8zJ(K  `۳A9C `۳A9,5m `۳A9s `۳A,:;+ `۳A0;(;h `۳A;  `۳A<" `۳A$=6@ `۳A>LD `۳A> `۳A> `۳A6?tZR  `۳A?<5 `۳A@@u `۳A@D0  `۳AA W- `۳A A2  `۳A>ADB[ `۳AA: `۳ABF67 `۳ACQ `۳ACC `۳ACUJ `۳AD+ `۳AD>M `۳AD!` `۳ADr `۳A&E6>M `۳AFdQ `۳ABG@5 `۳AGrs `۳AHB3^ `۳AHP6 `۳AHD; `۳A6IRbV `۳AIzG@2 `۳AI>  `۳AI  `۳ADJb6| `۳ANJ>t `۳ANJ H `۳ANJ4J `۳AXJB `۳AJ&QM) `۳AJ I* `۳AKT( `۳AKvR4& `۳AK\K" `۳AKv `۳ALJ5 `۳AtLV0[xG `۳AMܪV `۳A@N[t6 `۳AJN,O `۳AOfM `۳ADO2Jl& `۳AOl[- `۳AO6 `۳A8Q"Z|; `۳AQS `۳AQ) `۳AZR,K `۳A6SBҪ  `۳AT*M `۳A`Vx;{ `۳A6X xg `۳AYK `۳AZK `۳A\BN  `۳A]TG< `۳A]fL `۳A]Ȫk `۳A^Ȫp `۳A^JL `۳Aa@<m{ `۳Ac\9 `۳Aje8I # `۳Aed{ `۳A:c:Tv `۳Ab~ `۳Axa:L  `۳AB`@nFd `۳A_OT `۳A^K `۳AZ\<  `۳AZHM-& `۳AZ\ `۳ARZ? `۳AY Y% `۳AXf; `۳AV `۳A~V26 `۳A UȪY `۳AUȪ[ `۳AT 6 `۳ATXE `۳ATX"5 `۳ASz2& `۳A,SNҪN `۳AS[D `۳AFR:h- `۳AFRXt0 `۳AQxLX `۳AtQDǍ `۳AQR `۳APJ# `۳APX0( `۳AHPFT `۳ADOJ/ `۳A:O|d `۳A:O6Z7( `۳ANC `۳ANҪK `۳AM<`5  `۳ALPC `۳AL3 `۳AL4Y `۳ABLbS$ `۳AL"F/ `۳AJR * `۳AXJ4 `۳AIfP| `۳AI `۳AIXe% `۳AI& `۳AHܪH `۳AHLR `۳AFZ0V `۳AfFP^A) `۳A F4HC) `۳AERi$ `۳AD4  `۳ADI `۳ArD_ `۳AD6>J. `۳AC0|Z" `۳A(C8Dl9 `۳AB: `۳ABX" `۳ALB$J `۳AAZ~% `۳AA `۳AX@:[ `۳A?2L `۳A"?DQ  `۳A?h `۳Az<Ȫ>z `۳A><nH `۳A<Jn `۳A0; `۳A 9P  `۳A~84 `۳A$84\C `۳A8 `۳A8R^< `۳A6:6^ `۳A;@r `۳AR<v `۳AB=J `۳A=kk `۳A=HҪPm `۳A(> K `۳A2>Jk `۳A>J `۳A8B Hf `۳AC^B* `۳AZCJV `۳AD `۳ArD `۳AE| `۳A4FRb `۳AFL `۳AGJvD `۳AGP&en `۳AGb8S `۳A(Hbt! `۳AH`!7 `۳AH|1 `۳A6IDF `۳AIn `۳AILe `۳AlJc `۳ALd3 `۳ALv|d$ `۳ArN\[! `۳A&OȪ| `۳A*P@m `۳AQY `۳AQL'X `۳AQ>Z,  `۳AQp&3$ `۳AZR:t++ `۳AnRT` `۳ARx `۳AR$  `۳AR.$ `۳A^S2fH `۳ANTX! `۳AT*Ҫ `۳AT"U `۳A>U@Z  `۳A\Ud `۳A~V.' `۳A@Xb:.r$ `۳A@XS6 `۳AXn  `۳AXN(  `۳AYvSw `۳AYvN `۳A Z/(' `۳AZ~S  `۳A\Z<k `۳AL[X `۳A \~N `۳A\ZO  `۳Ar]D5 `۳Ab^ `۳A_xx `۳AaRj{ `۳A^b5 `۳Ac P6 `۳AVe 3 `۳Ad ( `۳AcT|Z `۳A&c<t `۳Aby `۳Ab2Y `۳A6bVy `۳A`/z `۳A_* `۳A]n} `۳AZ| `۳A ZF~ `۳AdW\s' `۳Ax `۳A=z^/ `۳A<o `۳A*<~ `۳A<b`3) `۳A;2h `۳Av; `۳A:rZ `۳A9"A `۳A9v] `۳A9h `۳A84f*B `۳A8Y `۳A~8bh5 A8@;Y A8D  A<9He/ AP9H# A97* A9@v A9HG& A97{4 A9v  A:\ AJ:rbG4 A:m/ A:( A:f  A:"pR A:̵ A;, A;0 A0;LJ- Ab;64 Al;4Z68 A;^ A;6-# A<_D A4< A4<" A><H Af<Q1 A<8C A< A<d: A<. A=J $ A8=\pR  A=r2ESF AF>VE! A> A>L. A>6@-K A"?y A6?|(6) A?~ A?~c A@T  Ab@H< Ab@nI A@J-! A@JL$ AAZj A*A0) AzA4 AAD̰;  AA"P AAV AAU ABTX A$B A8B*  AjB@W4 A~B ABrA5 AB8&Bb9 AC|( AxC A,D0( A,D|# A6D AJD@ A|Db# AD  AD) AbEz4  AE\> AE, AE6# AETt AE!V" AEh) A F &=C$ AFz`D# A FCx. A F6  A4F&L AfF; AzF!N AF8&E+ AFpH AF% AF>*A) AF('& AG  AG2  AG^2O% AGT# AHG AH  AH,2 AI\/5 A*K8& A>K AK=> AKD|b AtL AM@Y AMh + A^NN:P3 AN<>}9 AQ1 I AQJ0LV AQ|y AR63@ AR`= AS^ A@S2 ASY AS6- A&T:w, ATW AfU85=" ApUx<. AUZ^: ALV" AWֿ~ AWR,7 AX26+ AXxn AX6$ A0Y$) ANYZk AYҴ AYʷ A Zb/ AZNZW^ AZ26{  A\v& A]x2, A` A`@  Ab. Abv N  AbcZO A>d  A$e@,! A8eV A~eP:0 AeȪ: A8eO ARd@ Acln Ac Aahn|1 A_5 A_t A_x1m A^?# AN^  AD^l ( A^]|$2 AT]> AJ] A"]: Ad\p9` A<\H{ A(\f95 A[dT A*Z~F AZ$: AX,OI APW*$:  A(W"T A(W6= A.VD" A>URr A*UP6]> ANT? ATS A@Sh7 ABQ= AQ% AO$"e AMHG5 AMVd AL` AK AbJ  ANJK  A:Jd  AJrW AIxT AI  A6I  AH`f> APHPTQ AHj A8G * AF,PTYH AF*.E A FP% AEE7# AE AbE6 ADE AD$7 ADBDJ# A|D\' ATDd0 AD< ACn AC  ACB4 ACvV9 ABZk ABHK ALBVR? A.BFE0 A.B:! A$B0VB ABlU5 AAC AA"; ARAq$ A>AT$ A@2E A@fW# Al@$Ur1 A:@ ^ !  A?P@  A?T) A>F A>U A>(?< A=Dz   A=B H Az<T(W Az<T(S A4<T0 A;PJC, A: A:,1< Ah:^+ A^: `SM A":HU A:J.& A9@& A9h[? AP9M A88PhvN A7`S  A7H8O A9|. Ad9*^> A9L% A9  A9Phu A:N) A:pH  A:` Av; A;2U A;XI, A>K  AD@N T AN@<M Ab@VN A>AA A\A(h$ AA A.B( A`B&X@ A`BNM A`Bt9& A~Bޭ!2 ABzS A(C  AFC} AC$M AD,  A"D"#  A@D,\% A|D , ADl>H& A0E.P\  AE AEFTFt  AF  AF  AG0, A8G" ABGdDt& AGIg/ AnH( A^Iz.I/' AI^86  AIt\%2  AIjI|2 AI> AJjI@ AJP&\  AJA AKL  AM  OJ Ahv" A=v«Nx A= E  A=\'9 A;$"q A;^i A;? A:@ A:(UJ. Ar:PT & AT:B* A9^ An9v AZ97 A9 A8I_ A$8|- A8 % A$8 =$ A`8! A8`*M A 9p~ A9;7* A9Qm A: A:@N A <6[b A<dm[ A<c A= A>| A>U A?(YJ  AD@1 A@^5, A@v^b ARA A\APb+ A.Bz:B AB ABW6. A(C2r AxC>M  AC< ACR> A,D" A6D~&  AD5 ADW ADb~+ AD6 AD$H ADT7  AEz#d A0E;" AlEp32 AE0Q' AEfHs AFHH AF8+p A4F;/ A\F, AG\%m AGU  A Hs AHv2  AIjBX AJvd;  AJP\# AJZ, AJҪ A>KzH$ ApKG  AKA A8Lz4+ AVLflQ` A`L`S!  AL8C AL"Uk AMnF AM5% A0OJX A>P2T AjQJ AQzM' A6SP AJS*M, AS (Ye: AbTTf  AbT"*M| A*Uw A>Ux AV} AVx AJX6! AXZO AXZt AXYi A[ 9 Ax\`o A]T= A]L A_d-v A_x A`Tl.2 AFanvu APaG AaG5 AbhtH A`>M  AH_&O! A^V:  A[: AZ5 AZL: AZ\X AZ 9^# AYNX8& AY*M" AY4  AY$  ANYRW$ AX0x A(W~0- ATH Y$ AS@:  AJS\1 APNhW A>P:< AO   AOX A0OFu" AN~F ANv[K AxMpJdf ALt`5 ALSc! ALf`I0 AKzҪXx ApKE0 A>KZ/7 AXJh A:J* AJ`Z AIX2 A@IF A6IN) AHfȪ AGrCb# AE  A0E4 A&E4ܪ֐ ADv@0 AD,RW ArDt@V  A"DRK  AC|Z(& AC@HHr AC6s, ABFB  AB WF. ABZ$ ABBHHu AAX2 AfAD6$ A@ZLX! AN@H A@[ A? A|?d"y A^?I A"?fc A=;x Az<R! A;S A:>  A6:0 A9F A8"+ A8. A~8&Qs A$8"`( A8xt A9.&^" A 9_! A6: &` % A|:ff Az<Q A<R.]$ A >>~], Ad>2] A@vd A>AM AzAB  AK\ AKpM  AK AL\ A$LDG+ ALLM( A MX AM{{ AMRx1 AMjdF A,N:3 A6NXd6, ANfV" AvOtdG3 AO:V$ AO\.3 AOfTU AO,& AP2J* A*P, APTT7  APcj APpD ALQ\> ARb[ AW& A`V\Mj" A0YF60  A0YT<6 AHZdT A\Z 3# A8[ZO A[1 A\ /l A\-a0 A\bЁ A]n44  A]X A^>0=  A~`N Aa8 APaS Aa44x Aa63 Aa8;  Ab&ZN AcFT Ac8u AdT% AeT6J  A~ezm Ae^. Afd<@ A4dD)i Ac2(p{ AXc`8 A"b\T Aa* Aa7 AFaPT A_,N A_ xք A^dC AT]P Ax\NjX A[9 A[l[" A[:QP. AL[T-I" AB[6.O  AZZ AZ& A Z3 AYT\M AhX::`T AW, AWX6 A~V_3 AjV@8S ATvUa  AT,O ANT@@_( AS4= AS|J' ASY1 ASd. A|Sd> A"S= A R$X] AQnY AQhX~ AzP3  ApPW+ A>P6Zb! AOp`IR" AOb? ANO^t{ ADOta5( AO~0# AN`I# A^N$0 A"Nv8@+ AMd7@ AM*0B AMUj AxM AnMlH3 APMz A(M$ ALU# ALLO AL  AVLlV A$LPG 0 AKׄ AKȪ AKǀ AvJ  AI>ff AIer A"IU  AI AdHrf AHVx A$GzR& AG6UM AF{ A\FҪ3w AFJM AEdP* AbE|JU6 A&Eb\R' AE]U3 AD$P/ A2Ci% AB\ AB`[  A~B\Wo AtBXL` AVBKr AAh AAҪm A@ J A@jXf  A?^" A? "d A?Ҫv A?@.]Q# AT?>8 A>`X4& A8=jX# A=zf*m A4<T A;@ZT A:;@  Ar:i A6: q A9"A A9Y[ Ad9`j A8F^ At8pf A88. AL8L " AL8XK A`8t{ A~8+U  A8z 4 A8PT) A8D> A8NJD A9b0 A9&` A92|  A9̵ A@:5 A^:  Ar:btIG A:  A:G" A:R. A:Q1 A;&Q A:;(  A;p$ A;<b A; A <P&)f Ap<R9& A<`Eh A=D\ A$= A8=vQ$ AL=4&$ A=  A=32 A=vQf A>- A(>^  A(>  AF>L  AP>Pn~ An>(M  A>"" A>$ Ar?B& A@<%  AD@z. AD@GZ! AX@T1 Al@ Av@  Av@, A@M A@ AA  ARAH; ARA^-~% AzA$+ AzAR|! AAV/ AA  AA`M A$B> A$B^Gf& A8BK/0 ABB.f ALB>p/$ AVBdJQ$ AjBN  ABF- ACD&B( A2C0T(#% A2C^- AFC:x! AFCx  AFC" AZC(j ACj! AC&  AD A"D" A"DڶM A6D AJD$R AJDA C ATDV  ADHڶ  AD< AD5 AD AE AbEr7 AEh@" AFf%} A4Ftc* A>FXm! A\F AfFvAF# ApFHpL AFP1 AFfL AG '2 AG<@- A8G/ ABG| ALGA AVGx6 AG.5 AG~ % AG&#Q  AG|p2 AGL* AHh  AH.  AHx" A2H ( AxH.% AH>*C% AHQ AH AH AH~EY AHB&=% AHL+ A@I %! ATIP A^I@X= A^IZ A|I^+ AI.+. AI*' AJE# AJA* A&JT A0J  <  A:JX=H) ANJ ANJ} AbJ\ AJj7 AJm AJU AJ&  AJ\% AJ^\/9 AJ  AK A\Kr>, AKR AKLM AK X } A8LE ALLL" AVL1 ALz" AL:;& AL^  AL# AL\' A MJ  AnM$ AM0$ AN75 AXOo AO^21UX AOB1r' APa AQ.9 A.QF& AjQ~1 AQq8 ARzT* A,S1o AhSR4%C AS43 ANT 4. AT AT8 A4UP6) AUz& AV8Z@ A$V-8 A8VVF  ALVfZ AtVB2 AV26' AVZ) AWP6f+ A2WpZ`2 AW'C AW AWZ / AWfP AW,0 AX2=5 AXx9 A^X0$ AbYZC( AZA AZTJ AZ'& A[>4  A[4  A\T Ax\L6 A\8# A\ A\"; A^ | A^2.& A^@ A _]  A_hT6 Aj`^U Ana>l  AazT/b Aa6hq AXc  Ac  Ad g  Adr APa=O AFa$F  At`t| A_j:U A_=o* A_w A^j: A^l" AX^. AN^f0 A^ܪH A] s A]J A].  A]9D A\lh Ad\< AZ\&5 A\Ȫy A~[J A[RQ9 AZ>ܪn AZ;X5 AYj; AbY7! AXd2h AXN:- AWt/ AV' AVw A>Uz  ATܪy AT|h7P ATH ANTp$ ANT.h7&( ARK< ARZ  ARl( ALQ,b AP AP|  AzP& AON  AO AXOh<C  AN:? ANVY A@N.7 A,N= ANrq AMh'  AnM2 AFMF- A MD AM< AL ALT$ ALV4 A`LI  AK< AK~ I A K& AJ\) AJI AJW AJ AbJ6 R" AXJ  A6I<BD A"I& # AHy$ AHT 6 AH.rZ AG`+ AG:   AGES AGP' AG)F ALGE AG(R AG<" AF<'" AF AFB $ A>FX *& A*FA" AF; AE$) AE*. AEf$; AEX9' AE(kB AE`L  AvEPW2 A&EBN AEJ AEx ADJȾ  AD AD  ADXN  AD ж7 AD A^D$]+ ATDNS' AD"L AD60M ACJY$ ACY AC6 AB` AB,  A`BTU1 A`Bp<  ABB A8Bd # ABR( AA6D  AAHW:* A A"\R% AA  b. AA A@2I=' A@p  A@:  A@4j Al@U+2 AD@&$ A?dT% A6?[; A,?̰ A"?V~IO" A?E Ax>A) A<>F,#T A(>r# A>N AV=a A=~ A<^"#M A<Z A*<HS A;LZ A;Dj^N A;\Z A;j^^ AD;(  A0; A;LK A:XI A:J Ah:O AJ:V>$ A,:7/ A:" A9F@7 A9(R Ax9@R Ax9B;c AF9$ A8  A8A A8,)1 A8MK A8;3 A`8 AL8TM+ A8j 6 A88 A8ZT A8T% A29t\9 A<9̫D A<h A<TX)  A.=P^A, AB=2J  AB=fC! A=@$ A=,M A >`3 A> A2>(% A<> An> A>:rA  A>$ A>4+ A@?I! A?  Th A@  A@ZW AN@~X! A@. ApA ApAPW3 AADj AA\p AAjX"* AAnD  ABLs" AVB ABD   AB  ACFJ A2CW> ACdW4 AC4ʭKO ACޭ}1 ADH\%7 A"D` AJD<P3 ADR AD AD" AD>H' ADG AE֫>I AXE֫U AE2R7% AEJ% A*F>̫q[ ApF.= AzFtZ/ AzFDJ AF.. AF" AFl$[4 AF8D# ALG$ AG& AG  AG_ AHB$ AH\" AHt: AH   AHW AH*rY AHT^ AI2d  A6IVe( A@I AJI@[ ATIvL) AhIX8  A|IZT2 AI71 AIhV AI  AvJ. AJrb AJ& AJfBE AKL ARKL ApKB&D AKtIB AKZRR  AKd( AKhn ALҪh ALA" AjL"K AL2jI' AMI AMS AM(+ AFMR ANhE A"N @t A6N^t ANS AlO|@ AvO"U AOw AP@ A PX ApPFT APKt  APhe AQB? A$Q AVQ$S AjQ?s AQ\.L- AR:L AR~a AhSwm ArSDM{ AT. A0TtK A Un> A*U<G AV  AhXPV:( ANYB> AY~9 AYD= A["<A A<\hb=0 Ah]LJ< A Ar]y A]*>< A^@ A^T? A _PK! A_ >6 A_; A``t?% Aj`6  A`8X0 Ada@( Ada8W AaAd+ A6b( AJb. Ab  Ac|D AdA A d`0 A>dm* AdRC ABe6 AVexI Atebt y% AeFE AehF A.enI Ae"n{ Abc"n AXc`F AbJ AbA AbK/! A`v A`Gm$ A`K  A_<v A_(Ww A^ E A^&1D A^|El A]jnLs A]LS A<\n AL[V, A[^H ApZtn$g ApZ |F  A>ZL AYV5 AvYL ATX`j? AW8P AVtno AV6(e A~VOO AUjx\ AUdu AXT,Z v AS*\ A^S>TUD AJSCJ AnRBH AQ@TF( AQHMB ALQ` APT,1 APA AP`:_ AzPL" ARPJ AIg A|IjIk1 AH4"U AH,*s A H^9x AG^y AF< AfFQ AfF@ ARF r A>F ~I: AE8ms ADE# AE@ ADR& AD`U AD.% ArDp{ ATD8Dh ACT#@ ACR) ACp AC# ABhM AB4W1 AB8Nk AtB6 AB<V: AAJ@m AAFH( AAo A Ag8 A A|~ A A A@v* A@R A?g2 A?j|r A?6# A?Tg A?R|% A>" A>^T% A=* A=`K1 A~=+ At=L@ AV=^y A=a+ A< A<| A<4VZ; Az< |څ Ap<U+ A\<X A<{ Av;C=' Al;Bc+ Ab;" AX;tV%. A; A: rK A:X)  A|:TT* AJ:.",l A9 -! A9L6r An9To! A8@wt A88:- A8U=- A8Tu A8x*M6 A7f .! A8`\ A8> A8,%c A8U? A8"g A8 A9Tp A9(_ A9hhU+ AJ:L  A:vC  A:p c A:;f>># Al;r@ A;> A;>R5  A<Lz A<jN AH<v Af<^  A.=X`?w Aj=:>P A=ܪgi A=fQ  A=?3 A=JKX A=jf  A=j A=- A>>. A>Nran A2>h An>? A>4D A"?D}  A@?0 A@?|y AT?d  A|?b  A?4 A:@@ A@Tρ A AfP+ AA8"` AB AC *, AC:B A AO07 A*P[; A*P4K A4PRRT% ARPX& AP67 AP8 AVQ AQLF AQZ= ARS  AFRxY8 ARY= ARX! AhSJ1 A2MH AMO AL"|ZC AL`.Sz A~LZCM AjL A`L AVLh$ ALL*0G=# AK*X& AKPG  AfK<R4 AHKR# AHKR- A KtI  A KZf. AJ<$ AJ  AJ AJܪ< AJȪ AvJZ6 AJx< 0 AJ>,[ AJ*B_ AJ<+' AI<% A|IE= A|I(RW A^IX+ AHҪ AH>S AHG3, APH4p>  A HB;5 AG  AG&t AGB% A`GZRS# A.Gh AG" AGjD( AFRBj9 AF>ܪ] AF(o AFŽ ARF  A FfG A F0VE AXE43 ADEB  AE( AD[ AD ADr<8 AD  A^D  A"D*L ACXj AC?& APC>( AFCdܪ ACf ABk A\Afn A>A A A8F A@<6 AN@pJ A?R  A"?Tzp A>& A>0LA A>R  A=d A=o A<>R A<L A< A4<d9  A;w A;R  AN@LH A@Z A@r A@q A>A0# AA71 AAx.W A.BM & A8BMx AB^y AZCҪ~ AC`M~( ACH  ACb}  AC 0V AXEi AbE,dr  AlE`a  AE(2 AEc} A FV0 A*F A>F0`!w ARF:e A\F9 AzF4ID AF`!1 AFȪ AFD$9 A.GN A8Gbj& ALG  A`G< 9E AjGD| AG0e& A"Ijb A^IJ" AhIncs AI\8N  AJHY0 AXJ AJ&م AHKZJ6 AfKI3 AKZJ AL*R ALL\c AVL~> AL>GE ALF1 ALX AL$* ALz ALT AMM% AMIP% AM|P% ANl{ A^NN  A^Ng ANNQ AN. AN AO\' A&OR2H A&OM# A:O3 AOh AOҪz AO\/ AOr AP2+ A*P9 A*P|# AP"\5 APP APXe AP>2/ AQv3 AQ A$QVb< A.QV  A.Q AjQfȪv AtQnN3* AtQ AQy AQZ I AQ) ARv8S AR$0 AR0Z A(R^6 AFRL,  APRjX ARd AR&ȪR ARN  ARX AR\L- ARRt]=! A6SȪaz ASRM AS&[C( AS^_ ATDZ A0T  A:T4M* ADT;- ATp,r( A*UT- A\Ut] AU AUX[% AUX0$ AUP AV>W/) A$VV(! AtVXVw AV\Yz AVb+ AW APWBpMM) AWW AW( u AW&. A"X&Pu  AJX5 AX\M AXZe AXF{ AXx݋ AXV" AYRM2 AbY1v( AvYB AY /l% AYP`Xy AY`5 AYJx ARZ1$ AZ AZbl3& A$[49 A$[V  A`[$S  A[P44H A\5* AF\ An\fR~ A\ZO5" A]XYb A@]LNX A]T% A]xT A4_H,H AH_:Qg A_D= A_rN A_U A_f A`br2 AV`:Qz A~`~ A`U) AaHD=  AdaF`w Aa>pR~ AaB5I  A6bxT Arb&Rk% AXc*2]z Ac2Z AdT@ Aen% Aje; Aje< Ae 9 AeP3x AjeF{ A.e/C Adj; Ad8 Ad  Ad' AfdP AdT8 AcZZ/ AJb/+ AJb8f  Axa<f Ada/6 AFav AaPG. A`(/ A~`D[) Aj`D[$ Aj`dSz AV`<}| A_[ A_hdɃ A _S A_jSi A _, A^D[$ A^[ A^,Z$ A&^rZS AU`Z  AUZ> A\U;# AUdt]N) AUȪ: AU2# AT ATpd1 AT] $ AT+# AT]* AlTdAC AT"# AS]{! ASZ  ASZd: ASX- ArS8] A^SN AJS(JK A6S ASRd?E AnRX( AQz AQF AQ\4 AQ4ly AQJQF AQbhd61 AtQz AVQ&& ALQ 3/ A$QF AP| AP$X APfa ARP&#> AHP& AHPd.30 A>PSW AP| AO_ AXO&^ ADO2 A&O0I - A&OIv) ANPNQ ANfs  ANN`e" A^N% AMȪ AMM AM*[E AM]p+ AL<1g ALM AL> AKzH# A\Kda  A4KN AJ@&Gg% AJ|DM  AJncb# AJ AlJS AI4 ArI$nc ATInc A,IHa  APH6&m A2Hff+  A HzR% AGn AGjS AGf>aL AGff AGd AF|z AFH$v ApF&P$ AF AE`  AEhRf AE80L  AlEU  AE8 ADȪF AD>d^ A6D\- A"DK2 AC~  ACM ACZX AB^ܪKj ABjq A`B R_* AA_ A@~]}! A@Kz  AD@vQ\$ AT?6l A>2!l A>vQ# A=25  A=<*6 A`=n^" A<xaq A<n^& AH<Nl A;@Zc A;Pl`} A:v  A9K A8F A8$+0 A8(*; Ak(4 @۳Am|3 @۳An& @۳AqOi @۳As7 @۳At5  @۳Auڱ @۳Anu  @۳A:w0'  @۳Ax0B0 @۳AFz5- @۳AzB/ @۳Az« @۳A^{b@7^ @۳AN|֫ @۳A|h2 @۳A|(; @۳A|,v  @۳A @۳A2)b @۳A0" @۳ApNr#+ @۳ALȪy @۳APh# @۳A@28 @۳AȄ(.  @۳A^P0 @۳AXt[ @۳A (@ " @۳Ad/| @۳A+ @۳A(821. @۳At6# @۳AFr«i @۳A.!W @۳Ap.Z9 @۳AFhJ @۳A&D8?) @۳AԌ, @۳A>x  @۳A3~ @۳A3  @۳A:$ @۳A>`0 @۳A, @۳A, @۳A@ @۳ARx0/ @۳A4 @۳A| @۳A|b.JH @۳AT{^.- @۳Az:$Q1 @۳Aw+# @۳A&wn2 @۳AsH^(z @۳Ar- @۳Ar @۳Ajo |k @۳An|`&H @۳An`= @۳AmҪɄ @۳Al"/ @۳A~jҪt @۳AiJX @۳Ag @۳A f% @۳A&hV M @۳Aif! @۳AVj @۳A`j*x @۳A>nF @۳Ann @۳An՜ @۳AZpzߕ @۳AJq2ܪQ @۳Ar% @۳A>sZ @۳As| @۳Au2nʌ @۳A@{ 9  @۳AJ{4q @۳A|r.' @۳Ap}~  @۳ATv  @۳A #X @۳AFn" @۳Ad8 @۳Ad"* @۳A& @۳AN~ @۳Al @۳AZ# @۳A8z1 @۳A2 @۳A<T @۳AR+ @۳A~ @۳AV~L @۳A>}X$l @۳A4} @۳A},d0 @۳A}? @۳Av|Jٔ @۳A{RC @۳Ayd‡ @۳Ax @۳A x @۳A:wd$% @۳A0w @۳Au֐ @۳Aux @۳Au\# @۳AsF( @۳AqZf @۳Aq JlD @۳AF @۳Ah~F  @۳AhK @۳A^l"PD @۳Anz- @۳A8od/ @۳Ao: @۳Aqxב @۳ABt @۳Auz @۳Arv @۳Avv} @۳AwH.& @۳Awx @۳Ay @۳Az# @۳A6{2" @۳A|$K @۳A}"X @۳AT @۳ADF @۳A@P @۳Ar>6 @۳A>  @۳AVM @۳A0 @۳Al @۳AFxr @۳Ar @۳AlZ @۳A.. @۳Az^ @۳Aܪ @۳A @۳Ar6R m  @۳A@ @۳ADx  @۳A.n<  @۳A08- @۳A @۳AP  @۳A6s @۳A2FpM @۳A~ < @۳A}f%E @۳A }[) @۳A&|rF9 @۳A6vfK @۳AFu @۳A2u\WK @۳Azs $ @۳Azsbx @۳Azs  @۳ArN - @۳Aq l& @۳A4nn  @۳A nVP @۳AmL  @۳Abm\F @۳A2kf @۳Ajو @۳AhxP @۳A6gd[p @۳Anf0z @۳AfL6& @۳Arl2 @۳ARs. @۳A~tf" @۳AuX% @۳AZuv @۳Aduf9  @۳ATv>y# @۳Avd @۳Aw  @۳Ax2 @۳A| @۳A} e @۳A~Ft @۳AJ(  @۳AbJU& @۳A\27> @۳A ; @۳A @۳Arn\J @۳A>i @۳Ap @۳A% @۳A$TAU @۳A8T^9 @۳A4,  @۳A |2 @۳A\  @۳Aj" @۳AV^ @۳AА  @۳AJܪ @۳AҪ͟ @۳A$L @۳AV @۳A  @۳Ah,9% @۳A"d$ @۳A h @۳AtB @۳A 6pz @۳A:  @۳A€! @۳A~ @۳A~[ @۳A\i:. @۳AhP  @۳AhFT  @۳Ahڈ @۳Avh| @۳AgV& @۳Agt| @۳Ag6d; @۳AhgP1 @۳Ae  @۳AfȪFT `۳AfH+ `۳A"gj `۳AgܪmU `۳ADhtd_ `۳A iN@G` `۳A*i `۳AiK  `۳Ai|!* `۳AiFX `۳Aj `۳A$j~  `۳A~jp` `۳AkB2& `۳Ak2< `۳Alb h `۳Al,G `۳Amr! `۳Am¿ `۳Amjl+ `۳ANmE `۳AXmvl' `۳A n,J `۳Ao  `۳Ao|N `۳Aod `۳AxpD` `۳Apd( `۳Apb! `۳Ar8x `۳Abr-Q `۳Ar8Ne& `۳As,s `۳A8t p4 `۳At" `۳Av*^} `۳Aw"Y `۳Alw^ w `۳A4xX `۳AHx?  `۳Axj|yy `۳Ayxo `۳A~y`7 `۳AzN' `۳A0|Y `۳A| x `۳A }RZ,  `۳Af}v `۳A}`5x `۳AV~_O `۳AN, `۳A( I, `۳A `۳A/u# `۳AJ\ `۳Aځ `۳A* `۳AZC `۳A8<b( `۳A΃@Բu `۳AZZ*P `۳A\.  `۳A# `۳Ar`b) `۳AXR7 `۳A04 `۳AJm `۳A^Dt `۳AL  `۳A*r `۳A>hz  `۳AqR `۳AN0D `۳ABb1 `۳AV]" `۳A: `۳AȉS `۳Au/ `۳A,̫W `۳AE `۳A04 `۳Al  `۳AƋN)D `۳AƋ. `۳ApNT͚ `۳AԌ( `۳AV1O `۳A:x `۳A  `۳AdN" `۳Ahl<, `۳Al6 `۳Anf `۳AP6z4W; `۳Aj<$ `۳Aޑr `۳A<- `۳Ax@ `۳APBT `۳Anb$ `۳A~4% `۳Atdx1 `۳A0x1 `۳ATF `۳AdB0H4 `۳AFF3 `۳AJ9! `۳A0.J `۳AHxT `۳At"7 `۳A! `۳A@y `۳A@v6 `۳AJx `۳AT `۳AT1 `۳A@7g `۳Aܪ `۳A\6 `۳AT `۳Aj~^ `۳AB~N6 `۳A}. O `۳A|i `۳Al|h~ `۳A{K `۳Ah{\.0 `۳AVy `۳Avwzh `۳Awr `۳Anu$!= `۳Adu{ `۳Atw `۳Att , `۳As<^i `۳As(s `۳Ar7 `۳Aq^\ `۳Arqr$ `۳Ap(-- `۳ApdJh `۳AoҪ `۳AoTL `۳Am `۳A@l""w `۳A"l( `۳Al,<} `۳AkrF `۳Aj{{ `۳AiU `۳Ai2pX `۳Ah:Ҫ< `۳A@g(@4 `۳Aft `۳A2f~ % `۳Af59 `۳AfPe `۳Ah18 `۳AziZz `۳Aj(<Y} `۳AjJ `۳Aj^B%" `۳Ak # `۳AlN `۳Am `۳AmzS0 `۳Ane `۳AjoV~1 `۳Ao2n `۳Aq{ `۳ADrp `۳Art `۳A4s.!# `۳ARsN `۳A\sR\: `۳At r} `۳ALt~  `۳At*f%2 `۳At0  `۳Au>x~ `۳AwN$ `۳AyxE `۳A$yܪ `۳Ay0" `۳AZzX  `۳A||/ `۳A}Ҫ֛ `۳A}H9 `۳A~Ҫ `۳A6T  `۳A" `۳Af4T! `۳AЁȘ `۳Aܪ `۳A4/#I `۳A z `۳A `۳Ah& `۳Aօ`! `۳A03' `۳A!3 `۳AD *! `۳A|ܪ `۳A ( `۳Ahj!( `۳Aܪ `۳A, `۳A08s `۳ARF#,+ `۳AxVV?s `۳A<@ţ `۳A,ɉ `۳A4e `۳A `۳AD<68 `۳A41. `۳ARd"# `۳Af> `۳A+ `۳A<~9 `۳Ah# `۳At{ `۳AZv~ `۳At!. `۳AXܪ `۳Åܪq `۳A S `۳Aט `۳Ap" `۳Af `۳A#a `۳AlB # `۳AH  `۳Ax  `۳Ax2a/ `۳AR8d `۳A&Z6 `۳À\ `۳A2`J$ `۳A`p `۳AB~8 `۳A|l `۳A|$" `۳A{ܪ `۳A{$  `۳A{H `۳AT{w `۳Az:R `۳AzRF*< `۳Ax! `۳Aw `۳Aw `۳ANwn `۳Av `۳Avj' `۳Av % `۳Arv& `۳At$~&! `۳A~t^jC `۳A s& `۳Ar8 `۳Ar `۳Aq  J `۳Apz2  `۳Axp  `۳AoZ `۳ABo"9 `۳Aoz" `۳AHn< `۳An$  `۳AjzZ} `۳Afi< 8x `۳Ai 1s `۳AgGA `۳ATgF| `۳Agt y `۳Afpd3 `۳Afz # `۳Aft8I `۳Af2J `۳Alp V+ `۳Am<( `۳AmDА `۳An 'H `۳And!  `۳AVov! `۳Anp8 `۳Ap0,+ `۳Ap( `۳Ap4B `۳Aq* `۳Asv `۳As' `۳Aud2 `۳A2uR.  `۳Av `۳A:w^  `۳A(z:J `۳A{" `۳A"{! `۳A>}): `۳A!/ `۳A( `۳APLC `۳A6d `۳AJ `۳A) `۳A>  `۳AȄ9< `۳A!  `۳Aʇd `۳AއV$ `۳Ax!p `۳A) `۳AZ΍ `۳A"' `۳A< `۳A `۳A` < `۳Ax `۳A<% `۳AjN `۳AN' `۳AS `۳AfB` `۳Ab `۳AblL! `۳Ah' `۳A,T`# `۳A>) `۳A2 x  `۳A `۳A `۳Atxi `۳Aԇy `۳A*#) `۳AR * `۳A< `۳A p=% `۳A `۳A( `۳Ah# `۳A `۳Aă~n `۳AL$|! `۳Aʂ*  `۳AHf" `۳A0v `۳Aځ~7 `۳AЁ,3 `۳A.) `۳A6br `۳AX6 `۳A$~R  `۳A}l"z `۳AH}  `۳A| `۳A:|2~ `۳A:|z `۳A{X `۳Az `۳AzpF `۳AzV `۳Anz. `۳Ay `۳Ax `۳A x\> `۳Aw `۳Awn & `۳Aw `" `۳AvP `۳Av"# `۳A|vB A `۳Ahv|0 `۳A^v>uM `۳AZu d `۳Au>  `۳AtTL+ `۳At!  `۳As+ `۳Aps$ `۳Ar\? `۳Ao\d `۳AoT i& `۳Ao<2} `۳AoR k. `۳ABopN `۳Am,7 `۳Ak* `۳AFk* `۳Ai `۳Afi9 `۳AhRN `۳AfR- `۳AfPw `۳Af `۳Ahό `۳AhRx- `۳Aj\ `۳Adk ) `۳Am J+ `۳A&m( `۳A$o-  `۳ApD8 `۳Ahq` `۳Aq% `۳Aqz `۳AqtF6? `۳ArL5?! `۳AHs< `۳As `۳AsҪ} `۳At< `۳Adu  `۳Au`D8J `۳AXwȪy `۳A$yȪ `۳ALy( `۳Adz  `۳AzȪ՗ `۳AJ{eD `۳A| `۳A.~  `۳A8~ `۳A~vd `۳AZ  `۳A,  `۳Ab `۳ApT! `۳Ap:V= `۳A! `۳AX' `۳Aj. `۳A `۳AȄ `۳Aܪ `۳A…" `۳A~ `۳A `۳Ar  `۳AF6 `۳A `۳ATȪ۔ `۳A|c `۳A `۳A>& `۳A  `۳A `۳An" `۳Aԑ `۳A^# `۳A@ `۳An< `۳AFЮ `۳AF@ `۳Arx `۳A~ c `۳AL_ `۳AT> `۳A<J< `۳A(, `۳A@# `۳AL! `۳A  `۳A6? `۳A `۳AH `۳Ah  `۳AȄP  `۳A<  `۳A؃`"y `۳A" `۳A `۳ABr% `۳A^0K1 `۳AX3 `۳A `,o `۳A `۳A,_} `۳Arȑ `۳A~  `۳A4}V `۳A4}|, `۳A| `۳A|Ȫ{ `۳Ar{|'# `۳A{ZB `۳Awr `۳ANw> `۳Adu  `۳AsȪ* `۳An b `۳AlH `۳Al `۳Ajn΃ `۳ADhr>/  `۳ATgP `۳A@g `۳AZf~/ `۳AfX Ag  A iZ AVj Aj P A k Ak4 Ak4bo5 A"l n" A6lܪF Arl|2 Am@.7 AmJF Am> A*n,^^ A*nJHB An Ao? Ap>H A0r AzsbL# As AvB0r A{-B Ap}8 A}t/I A}/D Ah ; A|4 A€hC ARK AJr#"  A0 A: A>@xY! ALlm  A* A267F Ab$) AJ(1- A|" A<P AvB^<r ApP; AF2@> At0" AƋ$ A>, A&Z1 A܎hb$ A"#, A& A"* A# Af^ AV"" AF&= A<? A ABJ AhTp ATz4A AV44 A^"7 AT3 A L? AV?! A&; AT: A(? AΈ A*?< A<1q3 Ab"" A&/@ A6 A "# AP6  Aj81. A.$: ARJ AH"\. A$80, A.4 A^/O Ah A,F6 AZ.A A~#5 A~R6% A~"% A}Fn  A}.q9 Av|$5R A&|= Azh| Az,)! APz AtyB( AVy,3B Axh A\x0% AwT(v ArvD$/ AvL*h Au3 Au 7 Asn #? Ap: Azn@ AmD AZkM Aj2s Ai  AiRBA AiD Ahb6O AhyE ADh/ ADhjn Ag+ Ag\H Agz  AgHz AgPr Ag  AHi% A`j`p3 Ak L A^l$K Alp Al( An  AnpZ!|  Aq' A&rP AfsFf/ AsD# 4 A2u,S Av2y5 Abwd2'  Ay& Ay24 Azӗ A"{L A6{2) AT{X A|{|# A{|u A{ A|ҪÌ A|0; A}& A~<F AZ A& A2p An  A"&  A/] AN& A  ARv#  A2V' A 20 An"$ A AZ#{' A|pܪ͔ A2~0X  A@# A 3, A*2 A4zܪ AR^ A$3( A`:32 AP: AŠ^4r# Aі A / A4B4 AH< A"  A*850 AʌJ AT#l. Ap1 A0I Aԑܪ Aޑ47 A Aؒx& AZn A. A$`! A AR,> A% A@d Aӏ AΈd AΈD' Ap AT n A8#a AF` A4 A΃@7 AԂf A*K Adܗ Aځ]/ AځR( Apc# A6n A0  A~T A|B A|{d'" A{  AzJn AzTg& AzH2t A2z\ A$y # Ax)P Apx3 A x&; Av Av Au($ Asdj\% AsP AHsJ$ Alrd$ A0r Aqv* Aq' Axp  AoZ Anz* AHnB A>n*: Al,Z ABj8  Afi>  AfB(z Af* ANh$ ARix  ' Ai . AiQ Ai8l Aj8 A! A`j: ' A k & Ak.zr An7 ABo A~o # A p4 Axp n AqBB! Arn Ar"Y As AsD At I A(u A AX  AbL= A df AJd" A A ͝ A Aԑ| AB, A *@" A A A@, A|@% Ap6* AB AȎ A( AT^( At*~b A6 A A>RH AN Aph% A^ A( A(- A$Jw AN AR . AfR8' AS  Aօz.d/ ATL A, A܄D# A"z  Adn A$& AfFU A  AX% A0:-6 A| AhPT AQP A1 A$~}} A~(P A~Ҫk A} A|\ A|ۋ A|n Az\L! Ayr  A~y43 Atyhr Axnh9 AwzG$ Aw:4  AvwO A^v I* Atl% Atj7t  At Atf9' Arx F Aqy Aqp Aq*` ApN*2 Aovd~ Ao*Be Akv Af6r' Af: A^gb= Ag\P Ah6! Ajx A k:: Akr@7 Ak5[ Al\ A4n0 ARny Ao d6k; A^qRl? A^q^6M Azs_ A$t! Av7 Av AxҪn AxȪ Ay9 Azfܪ A{F+ A|Ҫ} A}J A}JT A}dU AB~ Ab" A26 AȪX AD:VD2 AXҪ׋ A ܪ A2): AʂXt/& A2z* A-} AFLm: An^  A>j5 Ar A܄d> A|( An5' A:z Abnd`9 Ae@ AFH A~ AHDn AR~I Afb AB A^t A(? ArXx0( A:^! A8Xr%( AfjE A<4 AxȪ Aj A,* Ar, A0X A` Aԑ<  AjR  Añ A\  Anv8 A4q  Aڐjf ArPR ATP& AhH>  AҎ4 AP  A6 A֊  A} At3 Ad A`XT AL AL A*DT)" At A z ATT A~ A^|r Aj A B A0:@ AJ6 A Ad:f( A`~ A$~4 Az}Rf  A }& A| A@{t Ax- Axp AxT Aw(چ AFuJ΃ A Ahdh Ai*0f A\ihX Ai  Aij Ai Ai*": Ajd'z  AknbA A(k^R AlD= A"lX A,lbh Al*4} AmlJ A4n,g Azn Anl; Ao"jm A2p d A A u@"c A(u72 AZu3 AdulhV Au7 Av~^ A&w| Aw|m AxJD3 Ax AxvӀ Ay~+ A Aj~,  A~8/ A~*9 ) A~d A~,  A;(% A. A@/ At6qv A,63J Ad1- A@ Aځ/ AځdF A4ł A>" /  AR2 AԂ) A.$ AhR0B Ar#" A6L A6Ap AF)[" AP$$ A<] A@ AjҪ3t A/ A^3 A…6f A/ Al; Aچxb$ AH7 Aއ00 AL A:0 A,֫i A"p0@ Ah,:e A֊ A{ Avj A4r>v AH 12 ALLX AF# AZ4#o Ax| , AT} AJ AV^y A|e AV: Avd; A|Z Aj@# A~LJy A* AJ A$ z4G. A  {# A&T A&p^C A&=, A֏J A# A^٬ Ar#! A8@# A$T Aތ$@ñ Aʌ4 A4v3@ Ab>2b ADT#  A:B A;W A\9m  AJn`! A,# AP"3% A8k A"2+ Af0T AV$"% A?W Ab_ A9" A AH/ An"= A67 A… AZ1PG A"1 : A/3  AP#g< Aj$: AB6 Aʂ6#B ATh AR$:R! A>/F A 44i A0"#q8 A#' Aր8 Aր@Ȁ À& À#E A@@7. AZ#EB A@7$ Aj~P A`~.UM AB~T A.~5o A}# A|2' A|3 A|{$7 Az0 Azz(N  Az4R" AzT Adz2f/H A2z$) Ay(,) Ay$;6 A`y:$U1 A`yD3u Ax:JՉ Ax22 ARx|$O, A x$( AwFZ,i Awf21) Aw* ADwJ= A0wb21! Arv(Z,I A@v0U$ AuT#,1 Aul0% Adu APu*« Au!(1 At$s% AsT-i  A\sD A4s|3 Ar%) AlrTp A0r0' Arqz` A"q%+ Ap5= Ap' A p0 ALo+ ABoD~>I AoB, An# A4nhQq AmL Am+C A:mz( Ald A^lZx'F  Aj,S ABjxd'C$ Aizj' Ahj Ah,Ҫ*i ANh ANh[  AgU& Ag{ A6g A,g; Af6  Af! AZf\H AZf&4  AfbzH Aex0 AfFD Afl~  A,gdy AgzZ0 Ag,lr AgN Ah2"H Aij< Ajn8 Ax!: Ax2; A$yܪ Ajyv Az"d! A2zL A An  A.0h  ABB05 A؃26 A("͖ AdR~0 A@y A 03+ A&hD34 A.& A*# AȪ AއL8u A$2<"** A#T' A8 A~43 AԌ68 A&  AX8 ALF}. A6Ƙ AJ" A> >- A"- A&FV? & AH,!L, Aޑ% A.: AԑL Aʑ AƐ.. ANҪ8{ A* Aj Aܪ Az A֊~9 Ad  AFt5 A A45 AH+ ALf A:#K! A6 A@` A Atn A< Ajx AHV" A^"% A"0 A, A(4x* A~8x A}9 A }` A|N$  A|d'/ A|j 9Y Av|j7 Al|  A{6 A{nU Az ȪQ Az. APzX1  AFz: A2z>j& Ay"D  A~y  AtyVP ABy _ A$yBx'( Ay*(M Afx&! Aw Aw~` Avw4 AbwN)% AXwlN AwX Aw2& ATvR A6v<  Av( Aun(  A(un A`tBPЅ ALt) Astq( As< "B As4 As$ ANrFx ANr? AqP Aq"6 AqPDH Aq* Aqm* AqB* Apzt( AoVd Ao, ALo8 An"/ Ann AmPW Am` Am*I Alm! AlV 4 A^l>G! Ak`' Ak8 ! Ak|  A2kx A(k* Atj<-q Ai@ N Ah + AgG  A(fI AfZs AfP Af.Z AXhW Ah:J> AhD. Ai* A\iXH +, AjjҪҍ Aj A2kd Al0 As4 . As!# AtT ALt t) At") A(uQT AnV  A }" A*}.2"- A}Fa A~d A~* A~`@) APz A"8 AL A A A64 A|`  Apn Ax A&!1 AfhNM ApPH A`Pq A2 A(d AF^ A|7 AZy AFJx A0 A0Rz AL! Ad Aԇj  AnJܓ AThU  A ; AR Ay AԌf A AN  Alp A ! A : A |/ A8H AʑȪޟ A*@7 AƐȪ A& AȎx AxҪ A. A.D A ( AX,L! A A Ah> AJ# A$N$ Aa AF A HO A@4 =0 Afnn A>v AƆ*8J) A<f A% AL A^ A@x- AȄ  A^D A:xg Ax^s  Ap3 AL A2^" AR& A| A@xW~ A@*!' A;{ AX`o# A( A`~ rH AL~r AB~L A}>9 A}>y Ap}v$ AR}nM A|"vx( A{@  A{*4 A^{*8 Az@ Az<H A`yZ AVy* AxI AxFHA A4x  Aw*|b: Aw AwH AvL$ A,v*X A,v<E AduJ!/" APu+ At AtvY> At2"v  Ajt<\E As 8<% Azs Afs"  AfsZ AfsQ A:r!, ArH  Aq<FXz Aqω A|qZT7 ApR0_ Ap( . AnpT7 Ajo   Ao/Q Afn Am׃ A,lҪ AlȪD Ak   Ajx  Aj0 Aj@7 AiZE Afiz Ahv Ae  AeT Afn݌ AfЃ AfvA! Ag6 Ag Api66{  ABjn Aj<5- AkHJ  Alǐ A6l A:mJ85b A n>1 A4n<.5\ AfnF ALon(3 Ajo;  Aoc Ao Ap> Ap> AhqU Ar| AsP As08# Av1 Ahv&  Aw  Ajy&#  AFz A:|  Av|(J A }0o8 A} AL~D At~`  A~~  A~ܪc A~* Ad. A(1 ADf2 C Abj! AV7 A AC AJ5 AF2= A~  AhZÎ AN~f  A̅+ AC AN>Fo AXj AnH A | A ("Y A\2 Ax  Aԇ"{ AĈ   A(ȪB Axrr A A<> AtlP! AY Aڋnl> A\0 A|TA Az AԌT ANx! A(r AZ|6< AX) AȎr  AF+" A@L A A6( A ܪ> Aڐ~K" Azt$ A<` AʑܪJ AJ A2<  Ax,q AdT A< A2 M A  AB~ Af Azf  AƐ A@Ji AZ,P A`" A@F A\ A4rg A0 AƋb AN AŠL  Ah( A Anz6 A؈"1 A7  A8nA AV  AʇՃ AH|y~ A> A4T! AІxl AR A^1  AXT<{ Aܪ| Ah( A@>.  A6HY AS A2# At^"/{ AL AN:D6 A A AN|f AN|Ր A{>  Az AzrF  AP Afr܍ Af<>/? Afzp/ AnfrR Ae>& AelVK @۳A$jtnh @۳Alx @۳A~o @۳Auo @۳A2u @۳A܄Z @۳A2j @۳AFh @۳A@  @۳A,b @۳AB  @۳Axf~b  `۳Apʼn `۳AJqjZ_ `۳Asz `۳A.yZ `۳AzȪp `۳A| `۳A~~ `۳A~8Su `۳A~% `۳AF `۳ALܪF{ `۳AfX `۳A4 `۳AF) `۳At `۳A؍B^ `۳ArL  `۳AΒF6 `۳A6gz Ai0VQ3 Alxc A&m>UQ) A:mT{1 AnU3! A.oT AqҪx ArV ARs Axs Ah{z A€4| AR Ajg AT A|  A v AH APP ANp*  Aj8J: A~,Ω AFnc  Ae.@U AnfW A|gW  Ag0V& AhQ. A0hQ> AiZ AiXVC( AlU 7 Amb AnUB# An Ao{ Axp ApS Avn` A{`p A~dD A ~ A`H g Au AH! A6j x At9! A&( A>$ Aԇt A1( At A2 Ao A  A |* A A$|<  A AJ A` AR  A4 Aؒ6 A - A24  A88R]? @۳A8j$ @۳A:2^& @۳AX;q @۳A=i| @۳AAd @۳AAFtg2 @۳AA]# @۳AxCJU @۳ADm @۳A&E @۳A4F`w @۳ApF\' @۳AGq @۳AHB] @۳A,I b @۳ATIdzQ @۳AvJt`v @۳AvJBgE @۳AJ() @۳A.Lx{t @۳AN' @۳AN>"G# @۳AOj2 @۳AR`/ @۳ArS1 @۳ASe  @۳ApU.~+" @۳ApU<x @۳AVn, @۳AV- @۳AX<$4 @۳AY` @۳A^X @۳A$`jX @۳A`</ @۳Aax @۳ANcx @۳Apdzf/k @۳Ad= @۳A9x*  `۳A:;*)+ `۳A< \ `۳A=tFY>+ `۳AA `۳AtB  `۳AC\ `۳A|D2Pck `۳ArI.Hu `۳AJddh  `۳AJc  `۳AK.J `۳AM>\w `۳AM; `۳ArNLgG `۳A&Of/ `۳AObQ= `۳AO\ `۳AQ*W `۳ALQ.h `۳AQ<ž `۳AQd+ `۳AQ# `۳AR.$ `۳ARK+ `۳A@Sz%) `۳A@S%  `۳ATS"R `۳AT4 `۳A>U,( `۳AU<\ `۳AU , `۳AjVd  `۳AY/ `۳AlYj\iR `۳A\Z`dm `۳A.[R `۳A8[>QI! `۳A]BR `۳A] `۳A]T2  `۳AX^ `۳AX^ ADZjX A,D Y AD8l/ AEU+ AE AFt  A.G AtGX( A(H(" AZHVS AHR(& ArIX" AIU AXJVI  AJF AKPNV AdMc, AMtS AO:`h ARP# AjQz# AQR+- AQH"' AQ( AR +] A^SL< ASH  A\U`< AzU8j AW[- A\ AF \R AGPD$ AHeW AH8l AP.W5 AHPe) AzPpJ[4 APtJp/ A$Qx  A8Q:`  AQJ AQ A(RJ. AZR%* ArS.+ AS] ATzMJ! A0TF~+N" A:T ADT`' A4U4T> ApUM7 AU7k  A$VBN, AVPn A W:`n7 AW|*? A@XVXQW AXS AY1  Aj[ A[W+ A[x1  A[*N  A \"P| A\Py AJ]T2  A*_DQ\% A_d} Ana,xu Aa n Aad2T# Alc  A d\R6 ABexR- Aef A,J @۳A| @۳AJ¬ @۳APn @۳A @۳A\  @۳At s `۳ALV@֧ `۳A`J `۳Ap.  `۳A2<  `۳AFC `۳AF4  AL AF* AP4  Ah"B Arn Ap0% AB&C AjZ +# AH\ Aȳ ẠѨ A . A2׫ AVJ A4  A. ADV@| A> A> AHZ AT A2~D An AN A AJܪv A AҪg A*$H AVU A~BQ Ạ AdW @۳Ar @۳A&Z  @۳AvQ @۳AR  @۳AFJ\ @۳Ạ&, @۳Ar @۳A  @۳AR @۳As @۳A @۳AD,z @۳Ab,  @۳Av3( @۳Aޖ 3% @۳A|O @۳A$< @۳Ą @۳A6VD @۳A% @۳ATҪɻ @۳A>Ȫ @۳AJjr @۳A. @۳A^. @۳Ab8 @۳A*,l @۳Aܓ. @۳AC @۳ABȪG @۳AV @۳A֞a @۳A,1 @۳A.Ȫ @۳A @۳AbҪ @۳A0P @۳AR @۳A @۳A*) @۳AҪ@ @۳APҪ @۳Aܘ2Ҫ @۳A.\S @۳A @۳Aȓ#5 @۳AHx @۳A @۳ADH" @۳A8 @۳ATd @۳A" @۳A~ @۳A< @۳AP @۳A @۳A0^ @۳Aܧ|ҪP @۳AҪڰ @۳AzrC @۳AD @۳A* @۳A @۳A\d #& @۳A* "U @۳Aښ @۳A=$ @۳A B  @۳A6Ÿ @۳AB(  @۳A@ `۳AnƱ `۳A@X `۳A” `۳A @3 `۳A   `۳A `۳A   `۳A$= `۳A7 `۳A" `۳A rb `۳A(vC  `۳A^ `۳A̙ `۳A0; `۳AXB! `۳A* `۳A4L-  `۳AR,u `۳AޛP~ `۳Aj `۳A~: `۳AR M `۳A"*  `۳AH@Ҥ `۳AT `۳A@{ `۳A &, `۳AҢx] `۳Ah,@ `۳AJ/ `۳AƤp+ `۳A] `۳Ab `۳AF<2  `۳A֨b `۳Alܪs `۳AdҪ `۳AZ `۳Aޥ" `۳AҰ `۳A(<, `۳Apl `۳AP + `۳Arh `۳A8^­ `۳A`Ti  `۳Av3 `۳A@ `۳AȓF,1 `۳A6J  `۳AF `۳A@0 `۳A, `۳A^:C `۳An7x `۳AdRi `۳A  `۳AƚZh `۳AJ `۳An@3 `۳A^ `۳A `۳A  `۳A4F `۳A: `۳Aԥ( `۳Abg8 `۳ATȪ `۳A"# `۳A,ܪ´ `۳AV2 `۳Aԥ* `۳A:0 `۳A: `۳Av" `۳A@ `۳A5 `۳AFҪy `۳A `۳AR( `۳A&t `۳A `۳A~vu# `۳A `۳AJ `۳Ar `۳A.  `۳A~pD `۳AޖN}# `۳A|ܪ? `۳A6 `۳Aғ( `۳A `۳A`ܪػ `۳AJB٬ `۳AF `۳AȪ `۳Aʛ\b `۳AΜB `۳A `۳A2 `۳Aȝ# `۳Aҝa `۳Až `۳A̞ ܪ# `۳A `۳A05 `۳Alh `۳ARfҪ `۳A~ܪ `۳Aܪ( `۳Ad `۳At `۳AҢ"d  `۳AC( `۳AB(& `۳ANX  `۳Ar`_ `۳A `۳A0ܪV `۳Aq `۳Aޥl `۳Aԥ `۳AZv. `۳A `۳Aڟ `۳Af,  `۳A@  `۳A|$D  `۳A   `۳Av `۳AP! `۳Apj~# `۳Ap  `۳Ab4M) `۳A.4M `۳A  `۳AܪY `۳AΗ& `۳Ar `۳Ap `۳A28 `۳Av! `۳AN0, `۳A( `۳AdL  `۳A^T* `۳A\Ҫ  `۳AbNG4 `۳A”- `۳AZܪD `۳A `۳A* `۳AL& `۳A2ҪG `۳A H `۳Af `۳Aޛ `۳A0ߣ `۳An  `۳Aޥb  `۳A.b `۳A|h  `۳Ar\B `۳A> `۳Aښ`  `۳Av"w `۳A" `۳A2P `۳AVA `۳AV r  `۳A"ݘ `۳A|@ `۳A! `۳A  `۳A `۳A&  A AR ' A|" A,C/ A|a& A8BR6 A~ AJ\ A,$ A^b|  A( Al. x AP  A@ A>  Az* K A,J Ažr| A. Aj A6T( AX AB A|2  A ,ӹ AJO A@z| A8 Av@ AX a* A^? A ' AܓJ AH  A6$- AHb3 Aޖ  A A}  A 203 AL A0\  Ad,0# A23 Aޥv- Ar  Aj62; A Ad  A A AL A9 AP|  A A AZ AB  ALܪظ Al A| 4 A^2 AT3 A@  A| A0 A* AҘ^Ҫ Av[ AN@ A\+ A AȢ2]$ A&Rt A A& ApU AȪ Al A> ANܪ A; Ann Aޠ1 Ax A<"c A( APp Aʛ$> A:V,% A8O A8! A™>. AҘ8 A8D! A$ A  AЕN/ A|t7' A\" AprR/! AzJ A<$ AP A̙<" A֙^Z Aa AW A # A`^ A AI ALd - Al. A@ AR6 Ax A0# Aޥ AC AܧM A AH,w AdJ " A,С At" A|~,ͣ ATl' A@ AT* A A.g# A$= Al6| A_ A0 ATP A"| Ar` A AvJt Aƕ8:  A,@&h ABr A~:# A|  A0" Arޓ A|:v Apd A0 Ah v( A: ApV|m| ApQ ALt Aj: A2^ A2 \ Y) A<h' Arބ Arv A |  A*|J} A~(:E ALJZ A£@J֣ A£rT A\J Ab A$B@X ABĠ A+ Aҧ A9 A< AȪ An"˭ AZb A§ Ab] A' A$, AFJx A<J  AXU ART͸ AH& AbL0 Alrн AؗTǦ AؗJ A4N A8 A48 A@J A8@ Aƕ7 AhT  A?t A- A, , A AV,c A`.8 APrï AؗT! A<3i6 A@& A" A`4h5 Ah3 A3u6 A@ Aƚ@n A\̱ A3w" A؜f&3 A (2 A2" AҝP AJm AR, A2nVV AZn Ad AҪ AѲ AȪm A0 A  A2 A Ap Aȧ Aȧm Al|ܪ A Ax g AB( A.8 AW Aڤ<Ҫ ADrq Ar" A:ܪ9 Aܢr  Ax A<Fh]) A\v A\O AzҪ APnh A֞\Ȫ Ah AT AT> At~ A\\ A ^y Aƚ" A| AT^ҪY A@ܪ AؗȪݩ A` Adr A  A”Nd) AڕM Ab A( AL AFJ$ AК Ap@ A AJ Aܪ Ap 0 A   A  A8 Ah A*/ Aġܪ An! Aܢ\d AT*3( A& A A  A4 Al Ahi AtҪ Aҧ ' A2Z A> A&" A&&"a A@` Aҝ7 A@ AB<! Af! Ab A™F   AL  AȘ A2" Aj A$nK A{  Azs& AD0 A@: AxT A"ܪԮ A@|+ AJ R  AR% AB@d An& AȘH"w Ar A<1 A( Ahz6 A"ƨ A 2" A&2 A A. Aܪ A( Abܪ A6[ A  A$ A A&~ ẠȪ Ad~ӵ APȫ A r AΡ Af4ɴ AҪ AJP A  A(v AX A  A  A" A@J AR A A`p; A0Ԩ A  Ar$ A"<  Au Ah @۳A\ @۳A$ `۳AR `۳Af.> `۳A.# `۳A `۳A64V' A f ApŞ AfBL A R AH A2* A2C APRB A L A A~ A" A~i A8д A֚ A* A2 A~/ AN~L A8b) @۳A 6_ @۳A<$ @۳AZ@d%  @۳A) @۳AZm @۳Ap  @۳A @۳AV @۳AF$   @۳AvE @۳AR^ @۳A2o @۳A<M @۳AGY @۳A<} @۳AV @۳A|| @۳A& @۳A- @۳ARl~4 @۳A\O' @۳A&8 @۳AJ @۳ALj= @۳AT(- @۳An @۳AhH^ @۳A  @۳A@"zP @۳A" @۳A" @۳A0 @۳AfhJ  @۳AFv @۳A0S1 @۳AF|> @۳A<@ @۳A @۳AR8P @۳An"q @۳A^V @۳AJx+ @۳A<e @۳Az @۳Af0Ȫ @۳ADk @۳A>L" @۳A~  @۳AR @۳Aj @۳A2w @۳A^2 @۳ATnJ @۳A @۳AZF @۳APr @۳AF: @۳A.RT @۳Ajf+% @۳A @۳A0 @۳A40  @۳A&) @۳A% @۳Aq/ @۳A^]] @۳A: @۳A  @۳A6C @۳A   @۳Ay @۳AT @۳Aʿ^ @۳Az\f @۳ATJ @۳A4ܪ @۳A(H`% @۳A(H@f @۳A+ @۳A7 @۳A% @۳Av @۳AO @۳A>`i @۳A>( @۳AB @۳Aha @۳A @۳Ar{ @۳A(Ȫp @۳A 0^ ! @۳A2) @۳A^dI @۳A| @۳Avi @۳Ar<! @۳A~i @۳AF @۳AT*2 @۳A0z1 @۳AL25 @۳AF @۳A2+ @۳A f2* @۳A& @۳AX  @۳Ag @۳A*, @۳A*. @۳ALL, @۳A* @۳A|" @۳A@( @۳A:tx @۳AJ @۳AB& @۳A~_ @۳ABLx @۳Al0B' @۳An' @۳Azd# @۳AL* @۳A:$ @۳Ah @۳AJT+ @۳A# @۳AJ& @۳A4M @۳A " @۳A  @۳A`f @۳AR>) @۳AH@ @۳Ad0 @۳A @۳AP6( @۳A.  @۳A,a @۳AZN @۳AR  @۳Ar|< @۳AF  @۳A\+* @۳ALj( @۳AfLH2 @۳AD' @۳A 45& @۳AV) @۳Av6 @۳AdR @۳A\"9 @۳Ak @۳AvB @۳AP @۳A  @۳ADK @۳ANp @۳AV @۳At @۳AV> @۳Aj @۳Ah @۳Ad T @۳Aj( @۳AP!Y @۳A4| @۳A 00% @۳ANX; @۳AB0^- @۳A @۳A  @۳Aj4 @۳Arz @۳A5 @۳A DH @۳AxT @۳A @۳Aס @۳ARZ `۳A$) `۳A8 `۳At0 `۳Ad~ `۳Aj] `۳A6 `۳A8J$ `۳A `۳A2>J `۳A2 `۳ADȪY `۳A|t `۳ADr `۳AP( `۳Aj `۳AL) `۳A&   `۳A2  `۳AZ^Ja `۳AZrn `۳Az0 `۳AJb `۳Ah<8 `۳A `۳ANVt3 `۳AȪc `۳AHԷ `۳A2/ `۳Ahf `۳A~ `۳AF |_ `۳A@  `۳A|T `۳Anh `۳A. `۳A. `۳AԷY  `۳A* `۳ADT  `۳A `۳AF0, `۳A<Q `۳ARB6 `۳AH& `۳Ap `۳A  `۳AJ `۳A `۳A   `۳AP `۳At  `۳AJ `۳A> `۳A< `۳Ad `۳A^ `۳A80D8 `۳AH&s `۳A ܪt `۳A? `۳A> `۳A& `۳AN1 `۳AV `۳A `۳A@r `۳A@v, `۳A6  `۳AZ `۳A(T `۳A|n `۳AR `۳A>la `۳Aj `۳AD` `۳A6 `۳AJ `۳Av&`  `۳Ax) `۳A p `۳AN `۳A\h `۳A `۳AL K `۳At5 `۳An.[  `۳AȪ `۳A" `۳A6ܪ `۳A `۳AΏ `۳AVa  `۳A$2)z `۳AVo `۳A݇ `۳Ap~ `۳A:R5y `۳A `۳AB/  `۳Az `۳A> `۳A>: `۳AH† `۳A2 `۳ALxy `۳A `۳A|^l `۳A4>b? `۳A> `۳AfP `۳A&1 `۳AX `۳Ax `۳A9 `۳AFf `۳AF>  `۳AJ .( `۳A4ܪ `۳A@ `۳Alx `۳A `۳A| `۳A `۳A8vo `۳AT `۳A<51 `۳Am. `۳A^nF `۳A|: `۳A:T `۳APr `۳An `۳AR `۳AL `۳AJ8& `۳Ar `۳Afh `۳Af# `۳A `۳Ak `۳A<R- `۳ABnO `۳Ae `۳AfS `۳A`  `۳A"r} `۳A `۳A8u `۳Ax"  `۳An `۳A<v `۳A86$ `۳A T `۳Az `۳A `۳A4 `۳A"LU `۳A  `۳Adnf `۳AȪ `۳A*ܪ3 `۳AB' `۳A82 `۳AR `۳A*w `۳A / `۳AtX `۳A `۳A z& `۳A"* `۳Abm  `۳AJ"ː `۳Ar( `۳A&| `۳AL `۳A"/ `۳A,` `۳A2  `۳A ^  `۳A  `۳A~P `۳AL( `۳Ad8 `۳AB `۳A  `۳AL\ `۳A`h6 A } A , A AX AF/ A#  Ax  Anh  A(k ApQ A0 AP* Ax^^ AH A= AV A>  A4D A21q AHJx_ A\f} A\ ANҾ A84 A@ Az  A" AZ  AJ# A2z Az*( AVe! A/ A^ؽ] A  A2 Al A ' A & A A/ AG" A,d6 AX Ak A@ A) A* A< Ap^  A:~  Al AlP A6 A:&4( A& A8  AL A" " A, AL] A A_  Af A A A$bN AO- A9 A4   A"Z> A A  A` Alto AN~F A A|x.7  A"  A Axl A A`*( AB&*  A8  A8Hj AH  A  A~R Af0 A\ A\H  A\6v A* A A&& A& Av A̿: A A^4! A, Af AdH A(" Adr  Aj  AjD A8lȪl AԿ< A, A4r,v A.S A@ Ad AR  AF A(  A(x, A At AT$,  A~ A B" A&x ANZ  An. A>& A. . A`z(* Atn AD A< AJL` A 1 A# AR  Al  AZo A A$fB' A: A Aj  AH  AR A:d AR A$~+ A A>|" A> Ad9 An A^" A6T; AT>! A# A4<q AH ARPvL Af ALh A(hw AZ<0 A{ AT"<% A  " AHV! A\& Aj  Af( A"Tdq A|20 ANb  ATz! AXF0 A|- A|ۗ A, APJ>4* A>% A A > AHBL" A A ABt A@ A dG+ A  A 9  AZ$ AtL AB\ A A&jH A A> % A4% A<  A4(' AȪY A "/ A|j6 A0  AdW( AFtȪo Ac A:< At AY A{" Ad  A~e AV # AB"C- A6& AB  A A>ܪs A|BJ, A":Ҫ A,  APj# A! A6 A> Ars A DF  AJ A. A8 At,/i A,oa A A>Dy AD8 ApH-  AR A A~,c A`v A2@: Ar% A\  A l A A4fl A:o Axw A>ܪd A>DU A A&B< Ap<' AB" AL@I  A  Ah^ AJae Au A4#e A4" ApT AV.G  AZ2v AL} A A@ܪqv Al) Ap. A,{ A A^8q A0+R AB ApO AB AVw AW A; AH~ A"_ A&B A6-O A a AT=8 AJ- A Q AD rT Az22 Al"4 AND A\6/ A ()1 AȪH AȪy6 A\W A>Y A\T6 A` AO AL AxȪC A8 AgR A ^&8 An= A3 A,pA A8)@ AI A<׎ AT> Al A~ܪj] A9 A4*m AFf AܪN AN$".4 Ad"%: A>"+ ASM A>?& AԿ} AV2f& AjJe( A( Aa A"* A@ AH"f8 AfP A~Ь  Al ADJ3 A$ A@J1 A^2 Ae A APP AН A~H̫2' Ar0 A"4h ' A6r3 A, AthV2 ArG5 Ar< A A ry= An(dL Ahh: A0 A:&^M A^ AP@( AS A  A A&X: AD= A* A,% A,Jr7 AjX A8^Ϟ AX Aƥ A|] A Ax= A`" AP A AN A Aa A2 A2 Av  An A AT Ah* A Ah A  Adr§ A^zbe A6"К ApXd Aҭ A \b Ahܧ A@h A` A8^ A8 A | AfX< Aʿ ^  Ar  A24e# AF   AF*d  AF  A6U Ar2! AT  Ay  A< Al A Ab Alj Al A 1  AfL4 Ap&O A\~ Ahl AJR  ATzp Al  A*^dcb A,@* Am AJH AR% AnT@ A6v A v+ AQ A| AR&Ȫ[ Apd4] A& A~! AP AZ<J A A:dW AN,% AlܪkS Ap# AR A\ Af    AC A Y A<Pp[ A866? At} A{  A  t2 AZ  AZPSV Apx# A.h% A 8 A]. A&(os Ab8| A AK Av+ AH% A2m AVZi A AȪGe AxM` A A,!u Ahx A$X Aߜ AȪ[ APܪp A~ Afk' A>*5 A L4* AN? A:֡ A~4 A G. A6 AP,x A  A) A<d A2ܾ A`R A A. AzP AZO A S A A4Z A A~ AVf A<? A <' ApZȪg A\} A A&*O AK A  A^zz A\>$ A^ AbC AL A$ AHj A` A\h: A\VX AHp8\ A4f AF* AFhI AD0 AR\, A$ A`  Ajq A A  A6\! A<3  Ax(\j AndVX A  A.:C A`\ A: At AFN AH A4/ A j( A< AB A  A\v| Al AXZ Aܪ~o A,( A,_ AB A, AVj  A, AQ AL^a AV( AP\ AV! A"P A,  ATB A^[% A&X) AN` AN~w An AP A|s! A6 A9 A. AHn AY  A6" AJ( A\3 A^ Ad2 A|" A,Ȫ# AJ AT D AT~f  A Af A AZ9 Ar A~ A 1  A  A( ATܪ? A2 Anb8  AX A~ A. AR< Ap A' A2j AFp A AG Ax A(8 Ab*W- A") AjL*1 AhN AZ 6Q) A# AT"4 AZ^, A:xL A: Ad2 A  A ~*` A~U A2"# A{ An A% A:;, A0n, A*( An& A ( A! Adjm" A.dg$ A A3 AlL ARj A0x2 A= A4 AL0/ AZ>  Ah Ax) A ABV Aw A  Ax4 A Ҫs A.* Az`f A Z! A`* AX{# A~h5 AB Aj_ AҪ] AҪ'z ATn+ A6 Ad""i% AtҪss ABXf5 A."O- A A>`~ A>ҪF A| AP A0@2B A& 6! A`<*$ A A|^I  A^,,z AJtv A4% A' A A~/ An* Ah8w AZjlI$ A25 A8( AB3 A A Ap AtV A`ZF8 AH AN, A<. As A9 AV At,i Ar% A A* A/ A - A' Ah[& AlT' A$o A\ AԿ AX AD$ A X AJh A0|Yj A6d Ah Av A";( A$w AH( A*  A(HQ A2", A<"n A6 A=" ATn Ap Ao  A U A@  Az Aܪp Aak A "z A8] A6Ȫ` Aa Alvc AҪg Aj A A?n A^ Ar ] A.Ȫ}c Alkf AlҪtx A m ABh AV%[ A(` Ad A@0q AXJ,G ARZ# A! A8J Aj"6 A~ AB AZBB A",y Al@nW A(j A"p A,} A&] A$z Ab&ȪQ A6 ALy Aje A^ AO A: A:oU ANf"  AD A.R Aw A6 A" AU# A|,Z ArjC" Ax AJ=. A`0n A~jM A~ Ad A&jl Ab@R A N A& Ahf8 A  Adϡ A2x? AZ A A|+3 A ; AL AB A(@} Ah,m A AF: AD Az Ar Apl Axx A  A~% An AT A.B Alaspy-laspy-a32c7aa/tests/data/plane.laz000066400000000000000000001637201463461040100203450ustar00rootroot00000000000000LASFPDALPDAL 1.6.0 (810417)n"nn{Gz?{Gz?{Gz?j5AOAףp= P@`p5An5ALOAأPOAP@@ P@LASF_ProjectionGeoTiff GeoKeyDirectoryTagV#       )#      LASF_Projection`GeoTiff GeoDoubleParamsTagF@@ F@F@9APA@TXAr@LASF_Projection_GeoTiff GeoAsciiParamsTagunnamed|GCS Name = GRS 1980(IUGG, 1980)|Datum = unknown|Ellipsoid = GRS80|Primem = Greenwich||laszip encodedV4http://laszip.orgP +}L@C7-@+Pp{6 NlN(i d(""]F2םvJ:tr7.^^_-7^v" RۑO^H.hBIlxYR?#27=C-i2ߞ#z,62N8kP Ox gai@}Ud,v4YSd'U"P-p)1G*[@ur:Z(e3a*?[ v;>X"9]:bߕJYj9fOk DB׎r]z=m-W N W6o+ YE*ŗ90)ewp!5|k޸ҚWڍܮI^Xb!AUw` K5%q:9[L*>b&_xkXzʥ^($w~ TCZW6/0wکH@# 4w=Vsh<!q ~ i0љ.%OYu]^3#ۈ-BUaҼ}2ס3%Ef%.i.$I8o <#7-J&o -Χʓ[ls!S沗,N䒮{n3/J~c2T{l-G7/S GdL ȁ5 Ib /W;y\S Qeq4 AŠmHsxqp|„%ەO\]]])eF8?&7b`քU7}(WNP˹`VҠ `SU~mb·yrۣ0(or]F%oS 䦓y4nB"qn/9_cςt5"o+I;G)^ oD+̰=•ѡ%BYI1Hw{jA,Yf'3Sb5V&γ T~#=0 9ʣt GVTU,oqiLOgR Ѝ@5W G18u-=֊`R/:aqyXy Z9$Ukm0윓ߴ+#Ŧ̇_;Ͷ3B.y^"lVUU"u߰1+K|£\Tң+ fʷǤfg)3~5e̫ɜz1n^!%/&KU2a\ -R!x- !8o1FpQmcwU r'@I`YJ{w_T-[J2m>"0Z b?=˽AyU6VyD`A5*Q 5 ̔ SGhmyj D˗Vn7x>@rؠ00F&^g_7^=DW!3o]%U1yt&'űts=QӦK/Y~) 8.{#p:V>JC '۝MɎpi"*}C1F.uhC@ɡ2vy8fMG; jN<d67 Ri/%!yے )6C">Ճp.&~OJRQQ4Ɖd|TDR{/s'Ow~3r]Y\rx2I1EKyU&Tӏ|yC&ON#vɧ =1߄3%VI6Vc9oi J@7+țebNFyD5$JٹƾnE:Ec:?D,&8$I:NtaW*GL2ySj# "=GQ< Y=`F,a%F6gijK~-­gee/'Bso ziR ՠTealL'#po/ņbV}N~x9l$I 1Ǝ[rg ;niV)͊l*'nH@*DO P/IOx>0:W"6 x~Br,[q">{TOj;07}DgD4C|M o̾~Lrщ+ੇ]BEx+`2݅CrUHp?^M vOWTQF#]u)F{ -O0e]MXӱX6pΡ2 sO xKLS& B!TrEROP6YqWNQ*\7c/ز3:C"ϊlzUZXAiF-dU z1gP)ZipgSXn*{-mĎmN D*)#&;AHD>X b={I_AJ ,J,sr`Tk'; ~[ќA>\ig퀿8fRŗN +U4(]Y@m4 jlF 2H]T&n=)Nc->EJcIbɥ ^#Xuj[PǪsg6MJ+W[!(ZɯIlcJ?kn/WmD#<߮QfrZw猂˖;>yZ+}PB"ukGR~`F4l$ae /zOu6𛂘i RHmrT=4BPJI5Gʰ⑸gnu{-+H}<{8,qW`a瀟 |&,¶x4thjጅ/ֿ#;oYZՆ`0ga 鵦Pܖ/h,IQVuԼF!1Z2HWLUQUeTeF!"iG$ ȵ3]VACRq;6<ӂf+|@7`VBt3"~ LЧP o%.kIOlI7@x;ULh gk~ު4#aΖ\1Z[ު&pT9A^V71xnG /n`)DqQAJ(3BXolĪOQBM<V'.hoia;> M+{v݀L_^}g$N#uCWKk\l7=6b;,ϓn%xcwV#{hb䯄Ùa Ұ x?kGY*XӪw-کHْ8,tԵKaQŃk@P 2.(3X0@$.*vC2c.ÜlUm5Z{ӴG]/ØA:ЬzxTs7AJ?UU kPxnmڴZiQNp?a>5J1͖jNb쩷EknƎǫl"'M:2ؗzGIߥiAh{ݪj`)km8>l ~46m vl#?7':Vަ춮MCcbSCoOIx'q_o_ p'~!rKɖR!9h5k>XpO JXƔ Otwof擋EA/m"E 5 {sN(pӞZB2,+!44zzma%mnk >}>wf@yݯ h7V )qߪ5 1jW:)ݡi oHMʼTfN:5<^zp_]=aH$pZ9A;KV]Ziض()5-,y^]B%qGM՜IJQ3~Y@A"أJ|ׂ t;閚V DP~YjQu{E0@xIRy3ZA^dmORө FvtETh25jm?gp#WAn1E54(S2uig izL!e)"6Y 10㬋S{;8.U3&'֧ksqkps]`z3Yb,PA ~{eB)<;E,XŶb@g [? Qm5ޟ$fc+`8ǿlѐ7bv; W\]"P ѝjwKSr 7ꃴ;=w_fxtPô:]d8#eX#ٖӡrhs?cGm$#3Ҧq`:GQY ty}ajBptXΨ-sT ک/b.-l ՗G"ͳgIJj庩W{݃2r5Pk`m*ʧbfK.D0Iǡ|a@(6^l[V={{M]} ǐWC=F iK=&UW܎4%3{2ٞ+|B:z(xԐ0FsCP2]a#v_)ba3:;{e S0<¶iMѢJVA|د!zcS"2ذ\ŵ5:(VNqB 8cOW p2CN?$cH}fK!Hl9qVs6/G ._]pjwtQ$}l,YIc2*EB5wڹ`u">U2ܷs̃lm5m8@|շUUCQtGᙽ8qϴarR&ygHsթ< WF땅UC3<|@S s.ds@olr6}.Bk$r[{=+F'l҅On享2lyV *uYd(v; ͱ;0[ ?P-]8xܢ<6 p<ץzDc7K~b y+0U皠 &@~S 4<*ٹicM=U>ڳYFF67W ~^+Νo=]̘Dj,po>'Y|gī;^Г YZ9L=be;Ƿ<4i|cg!ъ&sզk.~iQ -j`vY90{VK xՍ.-hIuShh(ثo„磉DO2b۱i, TII_-.ʝe^FXχQv`]w07} *xKjxY $K hZlȊJ;+k젮[hr=PcAoHyYt1ѮfypowRvfU?3:SsBnR1nn6O,jLfNAqWR(-KT Gh$Ƒ:b|?C" *sU*d|> o@!*;qώ`ȒNJaKZ=ٓFa#0T !'z j`w2rPwlM!Z #k /}xOTIoy<QOJ[>Ygz?/ؾ) T'䞝QOa\6쥞_%3AJ~31~@obߤ&,*K6A~2Ք=Ec'io;~3zn*6A~R,Ѥ+G hyWsySJQl-ʓ ΣufC3_U%oKS Y滰^t+5ʚ27?Z-*ˡN AHU5/YE0#˖F <`ڦi F+7DC ^ʀ`5|_2,<+L1&v-E  BϐDb$7j@ؗ6ѷ25E.dP`jbB6̄Ӭz-Q(;eQȾЇV}rd$NPwI %*_9LttH ʉyf"ffAb_d%?Xѵ e:îr)‡yaA|e\uCgi(/ND9wߨXMF(XZce ȝI^߆B5B2$4iO9]P|X`n|ɝEV8x)?Ș&㲒?]"ty\r\ni-Dvwx tnbN)ys[KGu_͆5⒲~${mIs%z]-:VyeJك mAԉt<ޭ%+$+2?8w$_PfiLM`a?x[OM8 Y m\,آȲ}f@\!z Ht,!mr8ͣj\pџ߱]c[XXb_=H |3,b.tpTl+}?IwCmhUD}y4F2RC(8W ݌թ/drĿ $ ܱ8cF 0[۸\$>YhY%rDJ?:#GN(9HYJF Nʓ_o;k4炻C.܋sEl\6pX^dFۮ\ʴAc^PlWo{@SK z zSR!t}!{9/PZ0J]?pSqSkG] g#%U&\ 0&lSxδڎE3]FhR&*g1_G)S'dV ho"nTPA=_O"M1_[ 6yQwƃwͨ媥THܺt_!Fp!+Sz3,STXEg!_*8&Ĕރ_1c{bAώH J!YABgwMwZ; !fYpeDi#R{p_:~44HjL!E\ʑCw0Ê'@?5_yP'eineˑŪ{#pxa)L,Xi}6TKuu=?1t+Wu(MW"E( yfw2\0A1}$7.[텹V\xx2fESs< -J쭥B,) 69 AA(hYG*Qo] r(m-[eI8Dz˪0rA Fӹ(@X.qu4Z% /Qӛ V^I= crL ixS.r%l#q* *G䚟KM@,{z_/ O/]>um Jn^]Y~n+W'_uCzX_H_tyTzx<-5y:H~ڏG:(eGU7qyс T7Zg]@4AHvs7=\ߋkG7 [#ϸԯqTģ;}pZ +ނ+pE|vr j0\ 'I*{8P49䳤nqd @kmF4ıLJ.s?1DNνWSĿ'A$5kHI(h2g{.`N72O&;%8?kܖ=${@HR /+ۑzJ\)'/B?{1|@,=tad@ "-l}y^_hoe`wfA;8i|_W/sH5`l6DkL[qY@7cװTg:4,;SI}M]#E rیI(o MO@9FfUKi`Ib1eK%e[R.8yt"{N]TRNHCd `RY"mwO[LgSWʕAr!!7'l9s^dHl%ig;)og:übeV6)-CeiYlʖK>@#hZ@4XcEpf>/mH90i&,o&\"xy~OZCOQfb7L.`3 21vgqsJhIsyG gT'l?lyBO[N1ExUI ,!&4^ 32{y/y[٭,\jr0RNxnW,>BZ11Hذٹ=Eٗ?Im-KO'pkJdsgKf{cӟ6k\`W.Awϔ)+|-?;z2WB)Ra3#~ Z~6+8#7y x&059D.u -$arCE~-Fsݱh9qKቯHԽʂ7zT҃bת[wiסT-3hPth2ϷH#;.ЗNYcgA(@C^hz=n %VP;ƞ U\b6^6(PWc.vi8 gD >?dI-33z<.cJK`PF r{G"ۂ΋?h,'0M(̱Ne^땖ƖɃX҉e1vd<9:0Sfm=Hsso2FDi[ MV=Y/jü QҲGۀ9a==zϿ%*^(hi {hxDagQ2s[Z-oGƢAp+Gsvg}' MUG׾$=aG&{đVE_Nӆ_Ѱ)zU7DVP@i ,k9YKKQjVx.: K <![GŰN-ݲn@2uIʗh&5savT!dS ){}wP^ RW`sW9CQȫYqd`7UDSt:[2`kNc ;of Z CL˲1\څ)u@\p^B`Ob]^!z Sinj #}(po"WT4@2(!#mכ8 DΆ#EMDY"e_E !BqUmpxg'pb()qWlp!Z> Y}lI|Kg1#30Gc/+in]lX!{ޮ1@gK˲Mr/"¹tɲL뒔hěT_WHL@O˫m0a$,a*"nG)ũxaL'+AwTnxץNg_,|R{:*rroR@RH//G,O8y^[4"ilGPnʂVjef; MNP5vLucEY1_uH.e\Þ05{oٯ;GHURy~w3 E zðXP~#9LeaugH|^8WcPoscǙ:\&Vm^շHCX}查5=S[ɮ)hYK({=-P,IJ%vpL|P]^= I%XC Q Do$#wAT "L}b{ò cP.&1< VB./Ɛ- qiQ6:2`V ?DttHbpP93a:Rfle,q%אgGDW4iü!k.S"9[,F$~CpGʼnݼ\zmqTXr#3`ΣGz/ Nfss|11A]J #ZJfОv/GʟCzcJ$8!Pa7׭pdK4@ve S:Q/Efod7ohPX>= 05pxu[FZ#( ^d]nP.49jLY((ԫ&3s<)*o:d&(gǘD;/ \Vs6'G*g{q͏+o}]JYbP>ӄ mEl6f 4DsyK02)Th*Λ+Kjx^2J;3^w49hŐR[5Z쳬bCc[ά+sҫ 3S2r ЗmԴy1$"ܔĆx \]ES[m8qK<)(5i6.hMBa!'1x}\V+i/ Eٵz[)/S$ĤIwq*8+,/OUjݩ&q5ߏ<]ΗoǏY8mm?ݒ5bR\AZ9~ )WD F8:e%V K[)HQM19U$א`3Ihrīʙ[;wYyXSэA]pޟvzz?2~r [;nRU 3%A3uٖ"X6$`S\U8,n{ %{V;^XjZu({؞RY ;4anyc@YX,@XKBj;ST_{64Q{ܽ:2wJDYR^"0j`*q8[<{,?naPv7ԶC^ ė佗Xdt<0 bA?rKwn[v ў8E}k7 21)&H rO%5UҖoU pfr՗ ^O]հ iYgE'\48Ԝdީ`DIH 9Ȳ$3]GkAT2HR9=iCr9#沪mX}(Xwjˆو{=%T^+}vgk.8o3SplRuX{+4jOp2an a5"wӮG *wI3n:RVB6T;sHsϒ(VOAl^67$$\pvmH.H @63Gq$>ݶt? Ե?!ʮr~,a(okʃ0մ5PzTNpHw`a5"PYmo@3aȊ b +*x-l|}>/"9Bc_bMoY-\$ux(gb U[?5{Eq]wDm$jE W*,Kjf٥$Tax%v/Dżܚt>ym(h,&fhCi!9G0t6 5 *T^waj;l'XA-:1yL#׵'QR+! ;LlLƋ]cB AV>}&WVf2yׯyY:Z"az¡c XEt<,OI ^)XVCJbsTOI 63Kޣ!mKf RWٿ{!qAy)#A 5>"d_{UY0*zEx=ߺHZ6+)I CoUO%_׍5I-xX\~7fQ|]ƞk sA cjlscNGzB%+Z2q[N0FqS* CväS[D-tk2ٵT8^m%CK˭0.#tK,7FNAągG&$7aP('zq8nRMKhCiIa=UuNVES*KxXL Eh$rpl }Al:?6?E\__kc,7a`w}V|hV hŴ֓ko'A.R|(; k*QQaؼʺB -eyl biO<(e'qۻl;H:Kò#7Rrnkzǟ烍sK"#/T?I(yB0ڣBd) H!H>O1j@+_zPU3v_q>b))UζBQnoG(}M` o HZԴ ؽ\;'P\8-G 8= FwUp76>,utVQڿK35y.n̉dz\hk#5kkS p6ꚼTbatRtMIR i9^?Y/1(<~[|@;—8)Z@[·~ >g")몙oǶXOesVLn~r-2Z h*iIۉ4}ɬ=0 'k<=;-SϨXmnE M:5ݧ̊:-Guӱ@UlԱd/pP!B<({"*ՂD>ϵۇ6# 28݉cҌU@!}]p{[d{xW yu-Ƶp- s+Ӭr mZ%8VAӨ> ʚyw%zh v Nx5\s꥞O*0@¬r'[J˂ CPD1 ˊR/'֩OV{B[zz}9pKLwhm߸9K%]~ !N ڪDKvNR#KރZW!Á]4;b`nZa},~N#'a[І|̟h@:7>Zrb(YZ; ԞҺ1gnڇ3il0JzG>usÅY*C?F~">j@{ Gua"}ыWmg[J}UM9iN%(T.J21mӴo33U#:FRLQ_ 022)5AeCϪ6e$ 7yU|ڶ;vF{*~DX^O T߈`Y`WF}IeJV[3?Ԫrvkh y%Sm$P\q%Czl8TR[z=q/'rLZұ2<+z<I>-f Dy#+Xa"%T׬g{ ' Qq\Y p 1.d-M֜",S"!+h| ߒfبؚ&5 jt#WL􃚹rϸ0$ 9Ԑ;;E?ZN؉kD\V1eD:V6ӜO{GDY۷Oq#!XuJG,S3RmnF(ub9֛tId6 @^S z78Č-V덫qY&F;!yfOԵ\}2^F*b& .;QõsQLXeLX)g$<_Z]`+Λg4Ot99-Ss tB jFWPJc}쬎'4 AF~ϸ7F͍x65wr|DWL"TԭXj ~s=.r=^ä巎rG;xh9;`Q04DφABQğL@a%=8֘\"bdEν(V~.݈')Sdp{pl,9e×`Kҹ's˖ ecyCNtX٥;Q.ﱂGFwոs]>ýuICU8M k 1B5H m*pDS,G>O 6r#En/gqA+yy$Ihl$&Zy&&XY0A!T{N̒FFH(Wbحb6ci+,1`U`8khZE}~=m|Nw9#_܋]U3JI_kz UzdG-H fC.zLav?nνG[ҔyzDàj-*:$/URvT`[ldc4TՁ΂h#* \c̟}R @MM491r=`'c?׉,=eB>(<lDK_K\  (ΐٮʪhc544^a [|f?o2їWx?ڔ+=Ԃ[usӅ:ӍaH c9lct (TLkX.|=A r;Iֈ@cA{s'9lAl,B"JH(UKD`R u@7c3V;rI(_z z1AY.HdϥI:h冟>6Qcԯ럮2-bnCQ Z|~ɷ-P!IT%Qkp^е0km1\ f}%&jON|7|l]Pr8 oH{dWOaP{#.3+ #fdvm;o0M[~>`N=In^:J/W s#ΉMn/H;=E6y&,N,lQ*#g@>:gV^?xxfÊTrr%$_ /:3%k3d!+)5*?"!CPz`s(yT1"HwIptP6 4fOG䷊!2Y4섬 IȠ!HǭaEG8V@/AU aYi8^ x a}_jeU?I+-GDb ۽>$y$jN_:ۇq1x}H+Fѽ ;AUg"RǨ?Tн7پJa$ldLb xdO4D?:Q4'7g.4jh$uǕXoeRi8 &C$n_R)9%xT$w`pbhx[j/^-xO !5*sO>{UL$GPZͽ `9&`pLҲӡ3\ Y897.Uj9kY{^KD5.buً֍< Wj%4DÕ3phL%2*FUǎg1Fi7=yx80|=:6 ]v0tC3iQ$lvu!4n7%let~ѝ 709'҉)%q zsb(r0wHqF(Hx=XWkCǢ-pl=V))N+]h ]Ywo|yQ#u0Gku2$ MdE+4JS L <`2Zv7nrDaz#O$e82+N,0WE]w 5T"6PK8Dž:S .}hO319?%3EɎPGūHcЏVۇZ^X؞+]C#pѲ3DyUD2t C 6]Eg^iѓ@4٤@3LźQ#Qj #{ o)A;xE+/v5/$FdVAw+ ˮ,MK(=ZbT;WZ(1`fg>X˿?)CĵK`htQl4:&e*щEHLSB2W*LxG.78S^sk"#O_eLHy0-iwH‡F<)o|snQv{+C&rڵ`#=xXWLg SIӟ8<ޕ"uJQ~ڧXcGrKUno= JCSYadY%ws*$#$1(;ܴҁ( +͘B[lV8Mc ֐5T Of!J+Oϫ%F h$,ndH n ڻ #&P2FB^JNeV6p2 6YW C`d$=yCZ?V+ H'j%IvH Y8VO\-Z#@Q<ۓ;8M#s|q$HW'9*̚_0}~%DP&19TO^9 eAz(L(.fZ!m`m͂89tl+Xq R+E?E&M-zž^ 8Pp#gdQʠMwVTW#kp_4۱v' s߯2^4-68~{vͼLO-L>3vFqvxXfocM))/۹\{ RhW- Js~|g18XDQV+kzmj:m'xcHQFasU2t+4]%MmԨ. f;# g."ڭjG|,%?:%pU4(j &pТV6;BmKY:&fe _\}IF珫 ]R8 D'VLcL@A+v4)2u8 *UuNGM}THt[ *_C 1͎ pIy:8Sx $Zh7?zN,]F N W f̃Q<-ɇ4d}=*hO#JyQZ[ND^~AD̆;ה$pTCC1?kR/ -=uӇhׂhgl S3d}]x1YBģ`1\'~wsGaY V\5I]/v 3Ϧݪrf랎дG+d-ѯ>V#8A0A!B{nuk=7;o]Jۅ<]Jt0F D1B6**5fw *@~@,Xny1ޟvˬFaRB[B-LxGp+rIrii>&@SD{nFGM #} e$yK[0jx7ǹw4F:к \ vWu#fBM$ 'ʹ~yPٌ@*ZqP]r%kOKwC r'FSTyhR u(x $]~O[R^8j(]4 {f"H,Ci{&yMb>E@ϗ*kO-&<rBCa;*w!?۰,$#W(W%Bu%olh*O}c4ȯҚ"G,|'!x{2[k! V ie:^vh顕LSխk-V :# d:nl pޓ3Bos"@E^2=vͧLopw(>b69?й5? ЩW1_D_7h1,LRfI?ld cU h^Zƀfe2K];*UH<.4ek(r z +^?r}]&H޹5?tt鑐 ~FPJ}P#g8(v#8aw 8籵 -fNJUzL,mk8eXHczc1L0~GWaKq&K<,b׵TB7iqDD +,tӟt=j,>󽆍cѾߖ;b@b%K SJ0b'gé,H81KU򿞷@@ooڿ3ex.-1![A:VOv9DL (xUT-xܣTmfNz!phqrwIp?i7d3Zr=d#8ZJ%A}Di'_ė ݩ`kmCȮ]ZӦMw'}x&D4pO h&g Of4=n_^T/}XFIfoT]րFYƉ'yB'Wpb{!8^}OM-'a8SEq [jP u-HZV03(eD!.&+Cȣ,*!">ˊymhTdw-m;1TWm:. aubO[vM5(R fF_@^; Ԗ{pp]- |gDŶC%-[ Up = ƛO!$_UpAʊf`ށFtB\iZp_DG7]pZ(-d>&96єֲfUϠ,P(`^7qG3> &.';F|L!VpWS9UY|_!{f˹mzPz[?Kl)xfXԁȌ2Ԁ;UKhFd_=7IOв/uw}d*K=OX_ q>y+'C F4M*a1\ \m-L .%s2_00v& ߆iVzz'ΔHMVo՛3VA|Q7,W2]tЇY$p%(`V(G#4#¬.lu)45@ɼ'+APAlfy{DR eGĈ*P?a⧌9ׅl!WS'e⺰' e&MRC*|Uq9),8䰇 9=Bѯ<' \f|ՌZÊ۝0s+@)βbKR8ʥ I .N |b譽ْ4T,a5N|D*RdіXFN6[E 2eF#a22P(-8OGFsJ5Z`:,OC.@ R/߱sFNoN31Ѧ[+8H'v,ͱqdNzlb}%tLԏpl:YO4!!t ?% |Lr#/ѩJ]CIc;bjz8?QQBsA_m@uLXr*3""0*j&A!ŴJr_ׇ-"6;Wo<:>?a/#͂ .e<'T̸,,:h/Y5ϼl*? vZ =+'e U@"$3Țlam,+raԔq$ltf+ttT$]W#!\|FKqgyӀh2ގaALi/HzkxmVEsdP&~ [7ö絯Wbѻ$eeF?CT6^;'kr:{%*DuAPm曫Lm2[ H&-I %郵^<"j#2 p%ǟSt%0Oo,[PZ0d?l%ɷxe߈jB9\-k)4j b7h\2vkw_HڎsqRƈEBF,+Sd~0¦gFFO4L1|Fy[ la3A?CyM_Ywۏdi-rĚF\Ұ5601X[wYA۱etHf^덛(lr/Vĉ3ګopE&Jܩ-!^O~Km'!A'n旙!,vO`)g@W_'7=Ŋ:a) J9K ýgz8z_B;cMY./6$ЇkadC*u3]R@dNjYcA+*Ʋ]cwkn"y{yIANI~/\}0t&IB4Xm&K4gplLpU' E>5[RDm^˯O0͖ǘus$N)1Ii;g>΄S B8[])l4LK›ZG䮥/†4>Hj:+D&[u<ɘЋ(\!h\{z}ac(QvC/]V 꾾c`g_¾{4^dY.nJ 1Zt.z63̵̌Jf4"~֕<k4_mprFd~PuRS)\͑,2+)Bh2_cG7|S)>ĥ@ad2wjۛ$e~drky(^t[IP/%.*+Sm@bt ?~q }ϡ 8 _>fFcU&2vUE K,[:r?W3]Ho!4x@ i O(X%M!a-G 1+4d-$"IU` 5 {[_QUL5K8 hg>RN, Lp9 dfGW.4ɐsGw@"rEl0,*V:Ua οP;ɯ|FNN(OKfA縐R0h1q QJC WnGw\tҬ ZH8~uqSQi&WӇ<BP$SDh[UYhN/gQ%e)M6cG FbJ* ɳS/2x<-]HK|9o h V|"Iy qVHP9Ha0 IG[6@tueuT9ͥ wƧ v@&y3gI;[@#@n$mR>*lE~=z H{IJvz,a;j"ya u [%I.-3{jQ4*͉!#DXiBlC2}IrF̚DŲy0Ya9Hg dǡ;fŞ_,xJ69%;gx^VM頢yrhxpZҎơ ?ᗦ,!ѢF&>h"o׶ Ob/D$Qsz,>np51HFZ?.[8|٬zJsfdaY 9N]GNi넧K~{\{GE?$S$P/?=א]vμ&e9ntGܦOJ@+2_:<sbE*G,A= L82(Hw%U:edž4i,DNܔG0ݝtiD g& wjZՌɯZ'$!Qu L>wLDrc'#IJKЃuiKqwpkZpl'.]GcpV."{ݣ^l ^փBhzLBP  3)4 }0-5^Wu>Jl#}_i{wK9E }b/r(n zGw"4]UJЍ&wSV g (IDuȃ~N9TYNTB`&4-oB=LJFЯE53hG*$RiWah'N Lb1-F{@WcCʖ%l3dz u[ԨoErs@; EiFnx]rϯ O󦅫Ob(QJ 5ʿ^Vi9@DzAzNX0\EtA!>60M% ۈ۴N)R#Q(;|;b]wvE=Fo)NKc0U"IӒ}3)-P 9( \/]q5ZX -O u[mS˅S7s2 k<,9`$" Ly!÷qtxʭe߯4Q|(R!8ls~ I,|2`kxhuh"*$"AJ.іYZ7^HibE eE$(C%E)Ǝy.7VvW)j|4;SMPED[(kzTJ=±;Spe\$%ՉcFН Ն[99hȡ+{_Q^ )v0p˥G%NؼΟ $ۉhb凱Vi_mq""ELwT ,D5%<8xnBUG,HqdŮA79=MS3|A9m;lH#Z7ASN|EAeQu{fN6 C7Ȍ差kͪ)ܩ>N<\vIljTku3 o&BԬ,xѹ!@' 'ep#-8JV&;JFl$(1p&9'/:OmU`C"m>aB- wm%|IJD5flW.b݁'TS bO&Nޯm}"MYyȦ< wV!"v?DT4GpS"jW1ic4108s0)mEn21&Jy#:AbW8@ޓwA5ީA xCñM~*4}@DXPɃ(X<>z6%3R-AWmPc?YpVoL$)d&X\U`OtdTq.D!DWdMtp}!i " J_#G;؁G'W+"'Y5t9_t`vγG΢- 7nɆ]Z?' 뾓eRZյ6 ,}WNLι(`JxS$g =\FԪ4\:I8PhQ `wnŦ8џzTLa̢\~Q#}X٥AKYPf&v(pL(9w5fpa ܐ=e4B7fԎE6LL 4ypɣ_5?/ojt_[Hb3_jDc8<~NfR.@Iʥzk@%!MsP}I\i@P|F1sQV2;@^(d{NƐAy[,VgB)G=z?/{Mx ~ 󜓴6DE5ic;rtm_xNp무`1" NV-^.},sKH 4>& _t6"5>jWPB؁+@ub!J:FP9_ߴ0zv6'o52޽ yZPY3MG5#ј3r+`ҍiJzrm\iF};+sO ݳf]3ڱ1"I\WnuBK|h;|Rq]NO[GKhv,_%7ik%e$j J0Žy/58|/=" s0g9 %k{_oαȥabnq.?hW֧D7~)x CG4B 7{`,9C5TͷUšy8@\ֹ5*C% fcˇ=l=_e#}DŽA(0Z1fGbϴgua3[cѿ#:KX XPPu4.tHi]"87q8ek yiNxc7Қ:Ad=oe^Lܔ{ wF^C` R I:>=CTpF}bt?h'T%+vP:FG"#e[74ɥH=#]8pɂ;*d*isU#7b0 @o!$&ҏ&ud|G9v`aM{gcR:j7x]]%UX@e3O]7VQPY`{$cݧsŗ>s,5K$3/0[w+/R̓ sq~TRsiiak o">1I%u1EQPNjYɗ5Ʃ?i,wKldn=Idqp v!r/u+Xm(e{Yy8VhK WBR#4/r@~?'>cyXτ!>yZL+axtX B)9K>.$\N>'{Ep$ZfXJ\Y7KM),8ƓB ;*Ͻ EF.zRKU6<˖g*A/i Fp_xIA{vru@VReYmZF%e c&YY%GZa=˽j5"I;9^m" 05&ˑ(sӱE'"2˳b)9C\ЄѓdV gK, -R$㜩cOI]cS +q%{?OdM29=5T`VJ$,$9GK{G. WrCɰ>̺l@+J|/{ϧN.ªDވ `fX@ܫpg4s'شQA*%-m: =se[yI!W$%) D&&9Z[jvU10.Ei-?I:6s|K4$X3o׻h1F^!!~"k+=œuQ{O;%PCx*RNqC!4ߊo&-G`n>G巐C)(۲ڍZjVMv:oq."7̺-'2p$KG5$Ac#jyah!Rzf2z(d?uHN_C@bC|$ az*A8$;0Q6O|~e4}?|>./ b ^\{% MoxTb,GJWe!ӼKNJ5ӻ"g,A9 0۳8:@wӣǐmᩤfܩ<֥!&عK(GZ=Ap۩| eANGܣ`bFSTP*Lcio"<ɗif.r>GcG*Q<ƥ y2$JF j#q-QѶ=nmf0-)1&zjS_juU"88PlV*1,]eD &W\ M;1ռO9@jEAQ/e[=@t1~]K ?̱\&$深suKP{9cہuv]ף;SOtzӂ=K3佧?>; h=TgVhjQP)'ep3xNzt 1L[}r !15N=& ַMS.\s,XV6_*=pM}:i42 l%Vy 1϶ƴMS,ERT̘^ -E;`B6 Q\E`>otd92φܿ[9CE}Rx\ߜnY6-v,ɮQt]6JD _QMWO sڣl/aZ<"I-)'%~k62O_Ӽ䦉ޫ0 j?T:$ 3vПgws7A 5v4 )~/1чʶ&ģgvł^DuCh/d Y>`^YVil,疕t P pksfR3FSJ8,6߼mD_BNK79YၞR0[s3jzɾ2`F(ǰ- zs[U+Lb FDŽr$A=a\2Pq. ZJ5'|̪s{ |Z6A+ ²'˜-롩9&l]ev3`!\}~9yX^w璶rK##>lՁ{ث 6 \^ ?}䄲Ỏ]`݂Q!ٲ*-ݟ(-!mYPT82XS4x~45H Aya "Ǵ ۲^3b6%XKAǏ}DF_2ɯy'nd.F>b5Vkx=u7b,]$zyDG u>O|?NJc'1=:E]]|kjn6S#NX˖5QjXTBܪf|N~Ogs8Uw 3SU̗^Bvs R\N閣a7TA, qj{:pcGܿN~{tL &QDS`?q+_&-fX /i]Lホ}핱.z'T"G/ mk" q} GrӾ"cf(ݏgƴ Jѐp]bE)CwkζpGO*Y S9aǐ!Ã1]qvJv#շFŻ]K~LQKNSkW\k֩epͣ߹G>^~%h'"bFJ~E 1iLpv`IiB>ArT\ .j,=qO]g>Xz读[|i05,w򮅜m.5c[|l J$ ”V*My68[qk>t kĀJeS MK6:i{e^k(ǻƊ5)/ 뇕+Zo~"H4N'^x0Q*?ٝ?'^>rtJKf4䱚rՌi>j&|M]̝P2U41Cr) ^JGToy J(+kU2r/ d/sz t:UXZ9Zo._ E-"",/`MU 4Ć2 &xOu9FPq&h޳buRLvp&"C~,`4F;q>D19{&('ij]FB|mz{KB[)uR_ۿC-nd*RUXi}{]MX *z.0s/6IR4j|%| hbR;r[ r1ʾń0EsJ<(&=>^q~k/ܣ# ҆ jWA0'xތ$ >ow.+~]}3p3 :pi%m;%Bf>>4(,Ϣ< dC-F7CfQed ߵU( Sm#04L>{zF #/F}HqY#= oϡeRR@z1ٺwG_CU[Ez$Kϧ`?IKp w?qpc8y 8[/j PuTd 3J|Ε?xuNȒ!P85f"Q9EC;ߥ3U2ڢopk|52+h  :SCʼ(Heuq{.q Eřh:} mٰ=bď+|<.$zEv C5;/JKbJDg!q鹵 $ΰ|kw2B:7=WžA(Z#Q%() 0dQP'} ica*/0t,߽xưDKNqb,߮ syLp),?AX&eINm\  #a\lŋ~ę^'ov>O*?9)0/lT0B^SS ?>mr9}5b}FA7:;:w9Qݘ`ͷ'K` }H1F5o3G#ufiX0̀i 8*1. CN@ySx1Y "E]]VTʙwVݖeA]a&(cXH(Q:ҷkҨhŷ R|n9'h%1\}S2i;IÍnIICUJ@FbS'Paab 1;޺E3FPy ZKDPjQ6rX 00꡶T$_~F6H9K٨Ui\o3&ם7S6po~s[߫_[%bU8M6l~ ;gRS7+t); E.}L| 8-j7@ʑ|lLL]Fj9 0 ]c΃!nxfi==#麍)8ދ݌k<>"gU6 -`(/uN#:(oZTxxf %$ mT@/+(J0bI2g~DIzksR  1N9]Tq]I&*A01jb^j {v6t2Kk`2 ޸|q9"%=[`<}?Tynǀt@^BrՍ""oH߈gjԝ̄j v AʟTG("UݵCդD'ӳqM|.;0۟F"o0ccN." Y5(BGKwDYRH{ a2tPIe=RV@-S5@Ks] X%)n{Tw TcxdtĜNk)kR0Giy~(4xWb}j{Y^<I4˝564TYeK ^(J<? y `NzGN  a;R`dʂ͐X.a~dNEmA8m}|//` }E_T~Aˬr[ *``(u6L./gf؂ |XR\`NP_UGC Jp\C jG5JY;\z/A^(9]|9!EPT ]Rp.-Gs ]>+|7Гm^EJDžh?dxFB Q wA2InfES͂2U\""\30ڪʻ\]\ .Yh&÷vr60$\MCm9gu_uN~ ǝRPO9 YQ^g}V7:zlqf{h(\~lνzlS g=P!KR'bzu,l̚ńX+J$ {|гæ⎩Wll^W4XT߮T-^?e&>@+ Q3MCqA?BAA6M$L||]Y.9qqU@hj֍bS3i޶ՔKE0 _| #ת1z/N9D#++q]9!UX]S\Ap`U+U3$:[]Mؼ ۇz ؄7;GH[ "zi- /wAKg]ɷǸZ."{\ ǚz*gv-fҟE`!K!C}.5lklP6ꑉ*H~7|ҎJsFbWɞw&{u2eݎ|Lқஈ-_:>e|`|=8 ?fNKT7EH6]b$\u86"pI]F-W;h CEqbmmU%\d$YfOBn_Jz r >.D@Xݨr֦:{JF92x,;8c͛>V¬O{ͻ|26,+j)&}L)J|w5z!">e gNFJJ(sݓ9ǹ$Q+$>lb^h>ARpDtk9>N {Nk F=] Fa^m3A7W&Q,m}#x\ tcTk_Ob-w"& " 'D˧ gj"_0n+]44|B:%{mc q:I:8 4D'[zqa Ln_N#:4|RҷҥxL8)L>}-zsr@ l04H5|hۏs8u[`9>GfE/+dFGR+Oi4}&krDl~['MQoAG(q#M7mL)=Pp'w]v<*ɺȡ+6A7mL2Hm $=V6ܺbFrL2 X݊XIwLaۇX!WbI~i>~Id1!L=~F=ZC!Kb DUgY}:STO.v+'^._b5@h(x!mJFR0;׿ voWA[GnI [6캔2xn@#O_E=R`tѫh_0O+!؟,]} L8O3,ڌjW8wYv;RMOҭ}rSsn%ښr"r|q/,\ XeA ҍ(.L2gkjSvUЙ҉{-ݜ`8B+np0>_ gZh[D͛Ĝ>a$$J,7e?whMVvel䑔_ FY,MO"G4_\X!{wa^␢?6XOʻ]΀DJcU?.Ig1dž5!:APRdʵA^B2IsutP.#H#>K8tCp-Oly,u)a:h/Dnz0Uȑ:~$~}}`X\RF&ϯ`gY% t/x%DF˛&}R|[=\'b 9m@E!9w`Ϸ,[ xϒSj9kQ TmfS$J ltroĈ˟q;8SJ4ĚC\ݠ':y~LmI =BH9[噤l6/M<cMglh&Y ?k71ǰHק0${>u3r*N NEIۓ!ę}NJK۴LSE\Qto,hډ5_+uE+Fk߳մZ7BKgKyEM $A ҟ>ᔀ!o 5A|ldpLݰm.e1q0%WF\bwLgi'`ovRYՀ`*ͳbmd2\=1b_Jpz`2k/BV, "k];(9 Ҹ_tnu_D.O%kGK$;>a\Kγ y9-Ĕ+ Q zwSkDN}$H'M.B;TIG91ϳClotL*\ऀ5ˤt& Ja~,fl]݌_sF*Y浢dc̖SvA3viMs=(JДRz"Ql6,N[cWu" J+tJ1ǻ|Y|}Fg" ]p_>ž5V-4[2l_rq J,l̙iTey34qhi| ;#R<-,k7Xv!$JUJy='mIu^fɎm+Qmܾf Sf:Z9i?`a:<;p<sm!年-i`QӤp* "#%*yID僸(DPG+>ti!8~x ;X'ˋJE8M(>C% chOI>:J\;Is"LC$zz?˻2ue aA;XQ 43{X+u릍4/sv}y]ۙˤ}m+wjǂ hoME@x}D+8,tOq7T@c88 J^ODI0pU{CT~6!F-\TȀ.e8dr%un3afK3c-23Ǫ5^sZ=qo8"@2]p`ܛSdMac0n)!^@yw]WA&}H&eAIğlH2\YնD@Ho',9`<ׁa2`*$1[<*6` ~AVRI`?я]+P-#D1 #W]YvC'^m-HPn]sAJGL@m CI$eԲvs 0"$]/^CB5'O5uoYM75C5xg}IdE"|l©^H^ :l}[sg d9^le=X/`o S}67jq+{,LvdkbSVJ ./8(U# h2|@od!i$o8 pɥb=}˴&Sv@,ŏOABVD'Pw("i5uaD%菍r@ il&cZYUo65O5" (k({YrȻoy%WfZ7kc+ꦱMa^%]JF`u@I7/?_aN\6]Y4sjlt9|RKIGvߨ2 + /GhU hoNwz Z7،֚I*즮HBowV|f/cjyHnF@GίZ.H!vI}5X]UyLfh68 5(IK$TCp f^IVvqXZfS)IdM5=Rx%|T1C::C$XkV/" BܗOEn>𓨋2:֙<2h"HR۠=>b%q LOԆ4*L?>;OX]DS/Y:JAyP`#B78KOgEش%yRAxKs.,g˅m; :ׄzd#ғ6 $bTseI7Rm-=QtFNW> ^!.CE֨ cQtT$IjuT- h jkjwXN"p5E]U}"h@$C;:5keq$f0t1QSǖLaɒet%#g`V1٘$;nM)O:(1ZtĐܘ}oxNF# 2^$yq+q@ qI^Oǎ"CA.=?A*%n悗+i1"V4ԚP;m=N֩c(uq hʢawW1VmV,Gr#GA3qx"AZc/c`hS_)7Qء ` +2 5-W(*j=L8μY R]լnU` D1sP\xu.x,.p;5?5K)smYԹP}Rm.f0'&*.}λ) biYSa1l.=*lbԚ̓UT]kx?'qj]V2$Lp8pDpj4) O.L!S\Z]B~꽦PU`! AH'ɔU IP\I&V@x]^iOFjyս`X@:|+0K~Q8] ł=bNLHO`O$3xoq”i>ke]Bf4Zh7juQ]Զ4yâ|vM`ɞߢ/-C0ML1#kp4>MPf\{%|gs*p+]LxHn{@ұ.pa kwUU\6Dr@'ևmR-NM;fQSZ+!9c Ot@~g<ЁPn,_L%/.yId$5èXyC QT85x_y07'\~.[NN 9A#iլ|S_T;Jbu` ><%EP7ņ/q P\X9dta 6Ic(l.nf7bB#a}(._Ncڡ 9M7c2y+Z΂xK3TF#-O袊bzMD|X  r c Ѫ3=-i*~ABdR#Vۈڻ?&8_jV' T[bBiÛLtQd"4Q14 >T$cy,J>1bs˃nǷHsBdZhϵ}0zHH)9r+%01C fD,i^\aOh]F6WUE!lKki4}"@{Y#۪"#/x&';O:gzL+QGi ۸r|o(?d%b1=~̶Ԏ$C)9W[5'͡ ce~tBK ja#]ݓm+mZNLs KYZ~,*h@Bc|&cckF6N9aPrEljŧ'wx+> J|jHɟdUE Z?Ifh _j"& gś@DkJ=8oj>4u S3?.+1xٞb4q/uxx!Dák ^5JQUDD'`:8tAivur&/qf:!$s3pX $ME9+Ý mܣL7:F?ttnXSாj ,^7 U فY9#=b@[@! LԍMQS{m3`lk!"[Ț;pѼ(E{Pr~wmNzE/@_h' ԩC&u2Yps.aҺ4zg*s"RF_O0 MCШĀcC*z0Iʘ`[FoQQQ`],MGx sac# 8124SՏ> _ۘKx E;N;xV/V4 LIiBɦ u潴1}Y [:dʜcTa%O^25ΓҰRʼXXymMZC"B\9YklG禙D֫)͞EN\;QN0Ȭ[i,&:5jS *;& qT16 )m/{ f5 I8~ҝalmd̈́bʲ]\J*޿e^bn1}2`(\<n0o m\ R=h9>u>)>SrR ػTA]&EԪ0W.C#)G@2 @6E(nQg=o;\J2A2j 3w`svy?k|gY^Bu% c ?Vj$y%F:U6{U# vũDfF [F(냅s;|>nL0Zk+ WQ ooD'w }|R!MdB k eo P 5ӄB7Kc'ʻ%$7;ǯiHnW2pwLV :kL5xWuS,lKHAXَg/TODi<њ?+QEx[Cr{!}Nv&ru9. [K^g>N㷎cS$`T,t]|:7]˨+5(> U?^(MaO_Gj#jtOlEK"N۸EEF/BE'{#(ft_b +j*bnP gsbzFr_"o nT%ÜZg6Ќ-OУ_iً2R<(p󐸙KMh_0m d6^@w)gA믢H'2#aR*-2{)XC(ZHCʩ'mX8h({Bh ăF=|u]ȳe1-CLau+v5>6ut$z342+Q2SzQd̥0\a^^F&Tr-F}K)dMq<tP@f?l[-*Cjepz|04쯉 7-V$]0K,zi\ҼEJzN>@ρ9,o!۩:0xͥƷ BG%=b1*8k(M -syip؍{tJ Jy.0,Ֆ1W H51bF Sܓt]Ì7x4,|]ʂ~l5I4i- v(/IQ#. ڰwJ#xhyzu20T% @A1*Hc\P]Cjén7u꿿!t@Нyx&WYvS M0/\{ߞ6I/79ݦ:%xh9;@-Yi6T#ffc|JR̢q#RT>HbZx7ĩD GggOuq WYDrp]=R)ơM2~_c}>=RyvNA[_G S$ D!EG7>n[2O$xkgcR/4\LO]R(RETE_A917~ %^U>GCpxRNL"}(-؟UgY\2NRgQ ĠbB>93U;qO!{I@V 8l_'R` h c.9C;vpd}u>u,= *Agfff)Aףp= S@> ףpiy@8{)rcopcCOPC info VLRznw#AG!#)AHH@G@GB@t{ %V A@L}Alaszip encodedV.lazperf variant  LASF_Projection@COMPD_CS["NAD83 / Oregon LCC (m) + NAVD88 height (ftUS)",PROJCS["NAD83 / Oregon LCC (m)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","2991"]],VERT_CS["NAVD88 height (ftUS)",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",0.304800609601219,AUTHORITY["EPSG","9003"]],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","6360"]]]z<[O|@|L Ad^z]U@0,@$bz[ڎODƈErr]mڐ)q;rU܁ץBLv9?fn8> q>.9EpS(NM=k)W; Ʉ@@߁U؅n1 Hozgت]ܵoTܷdCmȚ_||@@==>@>;B?:>=?72įQse2Њ%mW橵|dFA ~Pۗ&ZAcqȆ +) >e8^V>oi%>]Eo[[>V'γ*W-ж8b昖kﯩ{A;d|:6 AK F60+"xG;z~jHsvNdW{M.gߟ<;{sUlNn? =rX'XSYR@g[r@VQr]Vd]*NL". ע6B݁;+h~zA?>;;?>>>?8QArlek͎>.}DJKrTTMeoklzΒsgl߄glUQf 79ꪕ8aКĖ kPe[GHn9!Ug A_YqO F5>f0ҭBbQjobHLpc!೦h(`!pt%G*z=樟L ^[r2;c<?G)e*! `7iA>!ޛ0>b^{A}U+^p +amu͜s~l)֖e2MeBٵ*s`P½/NT"/ ouje[xCAzjh%!ZE0h*Wh3u{`PǾس+4L' j3F;u}pjwCU z!;rBrrĜ>*՘(ȥ}mN\2}.)X 1)9!S4:q@`C_bF_{ rj[saј S SjW&G~R@D<>@?<;@A?=<5Cnju,3^76bLn&g%s9Ѝ5H\zS@G48lP>8N9d>@w[ZhJ?}~mcU(aFڂY,j}OZ7H/ݔ_,@|?J*dArZVApBniBi# 1敘O]fJ}zq3&;C@%c-Y3Ѻ-*_)(ub`hP; Cf./|ԃ>߿ղ:9CLȧnW4B \39m!Oۈd~|?>=<@A=?>=><@>H_x0aI㪺C2g2[{c |*ȋ]fݱʅwE>-C?L?^ml$+^w2Zc8':yNsl]B~U`l䮙%At@RiK@|A6RAO,AHQY_"TB0l*P/ LsK b3AZJh?0exN.Be7tR4Έ\yPJvaNeAVF4 pXhn6kg;?dk@߿lʇ|!KJXqꅮb x@1>>Wiш0f|}@=>=>@@==>@?<6'f3] )b 6Vk#` j Nǰ750Ywp.aq>8ח:Z*cUﺳRu[:++@zx>]g.P.z#5HJL4"~ߵj2,ALW\^VA<.ck&R^K=ۥ>V Y,%\%*`+_qE6z2L?k'~.,0\`?>?>?=>=>>=8_>JB^n!U7췇:E=e ]e M7qgU 2]GƞoaS!vUns9Sh|7]ڍV/(Җ%SP~U_8\@y %wm}4S,Alf#`H0f_)% y6Rzsp|UdޤBρ'{N t}6(_.泣Ⳕz~إ0o7T ,S074*mwA:Bx#i@߁߿<YMˀ#o࣌uC]}}>| 0>\\XQD~|?@=;>?>@@?==@@?>4@n)jY\ 8lX#['ew&R +n"&s8FkW\Kwm9Z\ ߃65ߞ/C VVT귷'%Li հrQrHfU)`vO^j4{$ 8AVQ= 9ӭ#NH1[cnmHe-]JCdHW+WWNr=p"?| Ml߮vp{sb?-ӗ |<>>@>==<>@@8ks*+'r'0 6G nTgVR8?r)a3@ABF-Fqx2Mޭ{2˧`<>;\IExS:oS0hX*SGzuNAZ]sg$ ^I0\;lexHj!_]#A3} zUP굵WkF?KV<8NabA6~K1Pj{DMԉo;05O7P[K|D`I:!sӃAStdlfFkZ>d9e$C꒹J tO|XDZ5 <`Uzz?=>>@@==<7 Cj_J˦-֌'aC|aYj[\ =_m^#2gv-*Gj2}b(rlO vbH>/=ASw¨3ZZkE$%Wʯ-AcuA!Ϣ I @|;NA\V@0Ae R a't_9~{?#/?P5Ģaјl aj|q+?$QZJXƲܘR0،*=jsFٛ[gA͖)Pe@==߁r^BZK|:m:P:\^`=g.ƨҪzz?A>;A>8B@77,iL!-\Wl M{JW53%~r$hy=)G hFm.nSܠQ߶}Vu%N)j,#x[zn\6<: 0|> +ziĂdE4Mc G߿@!JV PG S ,ށ:D:R4=|~>?<=?@>9:B@=>@=:r=q)rk@[0E:im]9hfSm 81L=F7s﹚ɅW7Uݝn! "a#_P?߸,&aaP,2̹$RJu߰Τ'W6,ds,`K7MEjpJp@z06%i[ADRNXQ=:Mn kMZxB NdAlKJQ%=rÏ2B^7ՙGBT(pW0B=XB6J$GxrCzL@># mgmH1CsJ.UI>;A=9@7~`ަĢCy|",Q3>Q| uV,%wd 5\PP_zk~{E~,@H¬k@\ZC`g,_L"}*5hLuyKo`~|=@A9>=<<>?>E=E=8xM:^LI/n+P'ҭDaFM1%G(C^ 6¥ܡ4϶ǨgcފIJR]?캂Xۀݠ4v̫];gH"@m A6@F < 8)<.c~ {O9͡:!W%/Dn;ȏyi ^U .,ھTx?NmiΞxwG@>wưXUw}<#oSd8A@<>:I*#,|PrC~A}xR ޱ,KLz:>E?D@>77#d*0q%Vkm6s@[ta-}HϧB>xҠfi|<OZ=G%3bQ .ZG GX O̹g"xXg !@|zԴ A<KMd$YE8-a00a!Գ[0{SLԏW˩ZNOOcC:=uj%,.v)k#Ƕ1q KYҹ^r'};BSу,>"wFPֳ~#hN{Q` ^8)ȰUm_3/.!9~;||@>AB>>AAD>CGD@?5 { mx4#qEGKÛrIP}^dMnKu'Ce]cƨµ )ӪKӱ}6UCk~ug {(ޠױi R#_9lU䯀*X`ioy &1\["@~). Alr~z*%oS<--Y|b qB-|YjA_ e| 9lĞ?~rȅgX`cs_Z z$Xd=ͨ s~ /`R>{ؙh*?>B?>>@>þ7Y!}7waڃ.mbyU<(o=|j\TKPG-xܲzES-@ {d`*w(hf&^UmWrפ-)Q"^M2VR65(u210H%8iPJC)g=~FﱬIgA;/ ϯYtEI*5FFSh[_r8 #i  XA3AD.'pX:L~*O{gbD1 Z%}n~M/:5nj? Vg4 [O{cD^bf[_D=9ܓ0D't{ 7"zh'>C{ղ,ӳFㄠؕrU|j[jv9$'TPAy0s@H+@~߿k6}[C7Uz_W\zc5J$q\a3A'K9e/HJeQ>m@C@?=4m:UX_n~\i?VGEV+{a3:U1 @??????=?@=C><76O#h J/gaVkz ɵ@v蝙S=>h V49Qov"gPa३˺cA\giZxo9/sB]\rTKH 0^jX8)8-brӛ|Z;UyY&˧N.^|,ct3aB焙`Qz|=>?>><>C><<<>5ݮNħhQP=kN KvxOvo3('$pi!V((5lASڥL@EnnJ֘* |LVgV+]ڧe"_,!~AJSZZQ=x.TȇcqƝxs>OnHg#sz iKhw]U;@oO,?Z|=8P$;w_(0q|B@>>?==JB:>?<Hhi>϶1_+FE`˰qڪ/mmc_c;egAm>2+_wڈ`@y;TmCؾ=uY_!#|e=@i8A\ UA0t>(֙Di$c!R=≯7ܴpv ݺTNWSǫCX3_m]WًG:䕱HpqlP UYb,Ε}dvm#?>߁mg`#݅8b?A?==>@=5ҳ=(g-u7#2JNY%Q,4E(hg`$]V˜~8`1P!e_ٞcO:HQNQIJց]pj֦t/}zX^Y o٬l [!u p$Z-1,Aj'dLp (*\D-A|* >Ukg.c;9З{}0 7!j^XW{iXqTT{hn ^R|ꋱ@GZCv@¥H-*I?߁߀v}qrNWQesAcӍVD?M)(SG!;A>>@?A=:>GEDBFFU)h"!2NER#v3T':dѕUd ?ONp=,HFyh4U4@@ ZLM]cV$4{wQuMn1`5{φٳd<_)kum F~U>h+Ki|0!q8Aa%\EpC#wE k2K:5;t$x|7FXI @Ejڊ`WVsZ1/_OQO%Sg0\cxfdv%n;oWW~>i_VFKILQCDJ9++Zg6 ||@@=;͚M:K窯3& $F@>;>?<>=@?F@=<<4m}Gi8̴tcp?ݘf QfKh@Pk~z0=ngSQeB:aU@!r'?AYBy cf(ڲ;wl+,iw\ne*@& <(15-> j.Z,ѷp)}.zNAb[E0F$d0@& =I/V=|4=g,쵗ZSamA!8my8]Ps᪌ 8;3+LD0DsmMI10UJig?=߀>?H,;BPG?$XWr~B,ɋ O 6d@_r|z>?7IgꑰuZ&cYu`͕Ӊ||w " OA_WB8NX0yddvL~NO`W'4À t6Q3_JGZg飺?9{ݬNjv=Ngth[:C޺}mOiկw1P^j@|~B?>=AB>>==>>>=:CE:4٨I 6_uOu/"R?Q\]+L҂Cfvʀk#;"C詒b8?SS-.'R9n_E@KQ@jTOdLIL8*v7gʸ" vzN<[A^ VA0۳um{K,d[ |fF \@H};d<;Q+uh(S#/+тq $&=6 P38cVU+(D4zo]߿=~}`lkdrP=!1_lCpb`zx9@=>B>=>>@>;>>70?@dO6.gcЪ*Dn׋L &V#lUގuH{}g`mzV^ Wz5aF4EkV{46b-JBۣ)<[A~VQ>0߇DrÄ_`qPT1I#{ BLo& #",Ȉp<١aS MzanÓƓ#\ýe@p ~$ d 5Cz\4',[zJ~;;<=AA==>>>>7aUlsP(^1n=A8E;C8޾f?ŗTǟ,k?|&"ѰCxW4}ұ }E<OCGVz1b|+*0g36T>-D̥)~zlbr V!_ߟM) Z8<1Չ341|v/L }@|%V A+ )0)2 @mQbM w0E3OܲQ7L*x' l @^@V(у"M+<||>>BB;6nx8j V4SZp)2G,-e;+VT5E5O O}/($!v<@Q AvUM:8KU<Ŧ1 b W5L/1l,V-L\گ@/ICI>"FaQRKW<%>0s&Y [ Ǟ'IVr@߀=kũiߢt?!i4'1ΰa2C(rmA,~B@AB>>?B>5!]cfX#|Hn&?h}c6-He0>,L=sc"80f-҃aL~M==.j}YsD6^Oe_]*&  AMb_   0N~7Y-긞R[1;(>7@K$%3tekۥ~ALs,'_O#_ 5Vgz|9Iԩ98W|XSM,s'NMU=/&<5ӥK}$@=[`7b-TRUEt:6u\u8%~>??A???>C?7TPNҩ4Xj';ZJ\ptеJ%/X3 7ug /W)=X/-*DXĴInxU;:\jS=0>ADVU H B2*La%Np=4I{llZ;+hkF<@:(o١m}`]b;wv P̈dvSXKz@@lϭV`<2c5]k gP~~??@CA?>=A7MT]غCe%g Ni sp5GfjEe$wzP14)7,݌SzS^z$;hB\mjuU;m` Y͢EE5p@|wNޫ,AUO=0Al;:qɪВDtFz8rċN6K?}@s3@Oꞵ`Lq=8ɯ4n$H釈*}vi)ghm߀48@d$b52<@bO̗>CD;=AHC?EA@6AKME긏'|z Ŷ\U?!3V>.]p7~qK%r*æ$oJV m^ 7VtBUWXpE9@ے0X(ߞO@|,A F A10| o֨j5dpAf>Cs2rp Ơ88|E} S ] ѯQcD[xETȈj"6+ۗ`*Fr'c9W=:2=_-gڽ~;?C?A=?<7=c^m7-/οQy& Tn_btC IE~8B&\~Pl}TL7j\15 f:[¶m0kK\;Rčzz<k `,A G C.0 fM5'&M_ou9k<۷oH{By2F7$"AwH4[Q7/#jgjK] LBi%g[1N9fQSpy=JJBI;9b$6w[~lo8~D,Vv,d,[A0e` аhhU 63иUQZ7K-DUh7uu $,M 8 | 2@~}w饎 8A{ H A18JPt`%BRD~C<9 6ӻA(遺xè1Nt]:~'Ī"gA]#u-f]qHyAw=%$uiGfCY(/CBE:RE7@5GƐFR6VXX4xMWfչ,eݰp\|?P[^р 0btu~h|mls"@ "<8ARL:0Pq:Phi ƶ= IAPTk{H5>ը=x)`Zk](IU7g -LPdsML~@b%c/M~>MjEei1TX{Mv4%Kvf*͎3ŕBPLA?@9ce[bwQH#wd8)KoJ|Uk{)k9tvCҹx85і"WF0^5a<<5@ !ѽ= hjKQ+ѡDA R<Н;g+8Avs[ Q=0Ma+Z Ԑ0\pU(+s3zSDn-iV*lxgnDn'"9hl6)b)8\Mث3i',I͙"O>P6Zy߀m:,vTEߢLq ZOqohIuPwNSx?FGDD;AAB>9VbO54sK9^ȩF}F@\zYxxB҉hg)M8MM`w7,;͝dwM,U1pX$챷l8vs!#`ś"+wOAM I58M$ڑ fIX8wȷ GJ wU[Pn=EiR8,I(7.]9DZ#Okufp0v@=MbI57ǁs}ە"o"?4?;=>BB;7X ձ^4->^_R>WK~WGP0ȳ3Ӽ}Ocv'.6>QRm1{y,4h@ß2 c~+YxnvWyE1|nLOAqp[R;8,n.cY2̪A|z7RsA1Y=*܍p'f )iuk6=Dzp=·wsQZ7)%Fץmgpx[0jgw*CEB@E==A>=A?@4 ߑ'3rTK.BG`>GhפE+B VQ]YVXΚmLj!ݙlI+g@=3w=zzəfP!T.e` }c$U˞Vv@}oZALTSW!R=0E;uJZz'|g[r$M`]_$Ó:9UH;]Kg!T)W?bFcySrC\KJ]B~*x NnN#,>~F|jtt\+L0GNg2_}]ْ<><:??>AB>?=: G =fѾuTgGÂ9]1cn[K.h[^=މ+9N\xO;'[+FW[._EZO6rʲWP>whbNa}xA~Bǐ8hZAxo|O H6(M2C[=&|ZP|*N& g+,|04#};t:-DNQ# HM2"V*O\["X:z?۴] ل j̀f*a>Λa0QU@:=DE=AA7; $o\R): P۔zAIRS8`)NIJ6 } tY2,jjz豺~֝Vd/oMƍ-7D, ?Y}l8@$k3ٖF Ajd}[S= ʾă/sTR=r}[)tn}ܭxl{t<=B 2BiZcSY:ьށ-7N>xںh!$M"\Ñ)L];ܑ8r?=߁pi[d9KjN p]'G ijP3ø^"~|?>=@@;A=lgh@T~S*7۵s@M~ Aa`uf$]E08J'a·&RK}m8|*5EF *iTр r%!DuLHEME^WT,F ;)=q_AiO&k@߿߿>q:<; e^Gz[&z`GϽPv= ~~=;@C???>E@B>:<5q&V#t t H-(]MO4Dw;ittm' I$-D.RjWpW~ўrqd7v@D|oh97tRDQ˼e!Q)oǑ'c[RZvh˯!ѴI?X&PS'AoEu΢O>`@>?EGG㬾/ *VlK! Lnaq~=<>>>A>>?=?=G BvezJ[. 5q1Ss/q%bESO)jBk^NzZʐ|\k'ۜ%K ,wݪ# Z.^՟f 8VB2 ]u9jY^GYv,j gZ j@|0HJ A~mm$ ]E8m~dQ͞Vp2-\>2- āl_(ޚإ\iYB0D3_ M T"gqk^%DeqeKW7FLc8?G[U]1@?~?|+ʝM kL/wCɇߪaxg֏nLL\;Ibh~BA<?;=>7]EN>Ao ,2ݾ-[t_u7y;횏l{N沲[`+\UK:d GX5Q¬6ml6Nۤ^ݦ-ڌ#zm"_z[|eKAD*[dMv@|:,AZU>:PB]de UAj:"zf94"-,fFDfDl@Icz[7~~Oy:>z9:V1{9AuaHbN QUF9>߿aVc=ú; N4u_=B>>>??==<` mMt4)!Mqm kSȫuehJ([bIU tDLRY Cc@si8Ge9m(T|TڧsgkJv"zO,fݚWl8O>@|wZ(dv,A\!T>q뺖q6sxQDCmC[!ͨqW&)u!I8>v6戠B{n|[jR|T@Ŕ&H25{C -??@iSp[篠o = &cf>2d ,8?<=><'n[Dabk}q/ HzGGW~4-A䊱΅| !JuuЊ _qk*Ҍ8q??A| @zUNAi!_E!OB8J+׀[X?WǓ>Fn7R8rLπoBfx7е}.3 +|čAc~ /r(^S=9y(Z% Q<^⦜- V;u?ԥG/9t@߿=>tHs b[ b )0zDR+F~|?B?:\Et@9sN :50~p@ϛv2ҹ,o{::25 I{M9rh(`,zġZV]Ή0H#,,}7;`\oLbra9'WoA Q5@RLfDo ?&> 0"5P߿?5c%UXvʯG1_ ލ@@T: ǝm1~|?>=>><>?>>@><:`k_ɧaf3F l)Eܳz  ·gkqoϟ#_2fi@أǸ`~SUDKšt؍K"2*]9'gJt? }g͋GY~$ A` R<0Gnp2]Gf*mS -imf/]Y0L f0zl!xLZbqsSKh#*12r: ¼"̼XdΆI?@/.hds1$p,$pS( p? w|E@>@=DD:AdVT2ji ̎( .+Oj{Ղ#ng aI}q?*y,ܦye-IHX\/`V\tz@$Aln~_S=:Kh0yQ v풟f\RSV32^QfE"ْDwVU^SFUXO)/o.9۱mV?fq@9}gWSwg$N+@?=>h΁`mu0x07mڪ2)+5@\ѣ$~|AD>AG;=@>CLL8:9yJ wr7!>ޮF5םR;H.,e.:kJ21Z M,ql LM`"OH^~E:ݙsj?XG!{^2t] Ȣ.HF+@ CZ98AS_[[S>0wuJo\$]'V˜ gi  I<@FB=inPۋ~=f^i( &ao:6;CHDFbGRb:ؔ#}@߁T\wA"*T +} 4aElc4?\|/:O@H<:C;?:/ lozny-3#•NЅփON,AU*ϗȡz!UӬ`2v۽,WFL= Lj?~uX{5qԪ1:ڒ?CiϚU_cp:G>as5 @fWZAHZVWN9075VCwy'?}h/@bdQ5}=l#pHưֳ؉HW"~VLmJLAdJp J+i۹,~@v0~=jμ2JP%MBN=Ɠf͚_S}-~=F;?B=>>=:?<q R#rJ_-c#̈́V'+Bu b'e@x=; 9=D<W/2ɬb8qWo1*jBEoLڏW?֑yc1}Q AETR. *\8N~6w?Eumy|E&!ss%gv[+)B4-Vw`vgR%;Hy/|kdP~y 6c@|ۛ cbO2bp1H-b#+٥&B-˴]1pSӋv}'Y%^{/Vsx2FL͂p_(>׺>h>NxgxjaSEgͦ+}͹l@?V5%~qc;F>?9AD@>=P[t9_Bӈ]G:]\^a׾C#χ xa>6`\mel>Ɨ/HB@$yJY z0r &xMq ]+PþIvpXQ??%R2<%hH>m&f9wÒiIAׂ.nP6{1M-]Iuݴ>kT'^J䫵k||p [y-@|MɅ AfUar%#dH0ځ+=c.OK~l\dk ۋ *!kM.=9Tu||PB0]bfu, <ކòp&rV`7.]*2[ R0J;).K:.(",@@@?aC8!,sPHXuO>sZz&J n̤/E~|=<@AC??A>@AG<8;;akQZ_X. OV}'9G:bU,\TR^ѷkW$إSBQ㣴#DYC杔g͆7l+_sQSnSwͯ;VKP`-s]}iC-n"Kɉe?T{eUm @#!}], AJTW G B,8,٤`(!,̬g>悇7n0i3 lqz5MgZ=!#RO/98]1%CLFH޲VQAϾOi5N_ k~{`8Cs#rAC?A?>Q8,p!Cs`LjڪheZwa𯆘A7I7U䰽^Ȃ Qu*lk1Zh&>.ފbTƌhYWݰsHU  |0x8A})&pQ0ٛuR7X*rހᢋw8wYļ: f8ux5jI^x5̦_GGe灨z\'#~ R+ҹRyA?Ǎ[Yev8$HOj̚=Omb- PUzWA߁Mt]m nTq]}(HGBg]LW"\ g7Rk||@@;??=@<=A@@?:?|v%>/duTpEC^6_[s* GَlV@߀T{EA}pr3pQK7N/5O1J5;B>9<:ɮieD[=P̴lⓋR 6SOv I[A4- A޹8ij¼2֔n[֩&kZ'>``m{ jaU:ρiA*E'@QK;C77A*#3ڴX9%3\`@yAmNw zOu PRoSTUW`Ylaspy-laspy-a32c7aa/tests/data/simple.las000066400000000000000000001071251463461040100205250ustar00rootroot00000000000000LASFTerraScan")r{Gz?{Gz?{Gz? #A333e#A(> *Agfff)Aףp= S@> ףpiy@I`B& ADMX_Q4U+ A6BD Jv z]l1 Aparu+d |:6 A`|I~ݱ; Ah &0 zX* ? AcU_ IM C AZ_jEy(Ik3ٖF Ajd}'5I~I Aj_|`7?|I|L Ad^z)B |YIO A@FJz+K |7/R AlGF? |}T AGI]dBCQ~W A3=A% ~c۠Z Ae^y>[ |W?<] AbRrP$ujI|>_ AfB(s |5b Av-d2 ~Fd AhD}a A4AD "I|ISte A'98  !Ug A_Yq7eL[ ~;h APSf90 ~j ANX^J:~HPIAl |h ATYiLR|i% A9BI_ubI|"` ALVX%mI| Axdup ~' A,D=H I | A\]vq_Ix AITZR  |]: A8KJ0jQz>D AT^cW)?bI|TO Ab]I~_b Aj{ I|#w ARP[ T%I| AFRTQ |?D ABMPC Q|zԴ A<KMcmB` | AP  |+ APXd,{I~1<ҽ Ay~I|}С Ah2e#I~3 A}b`R|Hգ A0B@aR  ~ˤ ATVbLQ |2ԥ A__t"=} ɦ Aii}]0aI g ԧ A4BD5cI|_Hbݨ Aff~8ȨFSI~ A:GJCcI~ Aa`uf! <| Ap@KMAͽ&AOSZ@+d9Q~.)AFRX1*7I|e+,+A6@B;z8I|OS,Awc QJ.Aje|+?R e/APR`y z0A;EHuk Z ٴ;1A4GC9RI~~B72ANX`(c`3Afe|}I~4Ac/ŀ45A5FB[i>@Y7AETSV  <88AJX^ڣ 'P:A6BE.VIO;Agpw)>-=A9JFe‴>A:PH` =@A2AAwE AA\dnrS]E [xCAzj'NmK'EA:FJ@vOFA/A@6wR8%HA4:BX&A $/;IA.<<v zDQJATVePi ','^LAf^9< vMAOSe?;F i(kOAPRb7|R~0exPAbahW͟ GyRAn\m&Q~SAW]o7  ˇUAman3I|#o(WA0A>ġ8|I|dPXAjcrFnsZAgevL4+[~H8\A>JJ~WEI|]AidNaIzum_Aj`iy  aA5@DqdnbA8IHq"eūI|f,dAG=Q40J 'ϣeAbfr Y|gA.<<<5FI|4KhAI.jAe_w'^!I~A<<,Amhz[֪3|z1?,An`R }#>B,A8GDE  |pSE,AhCc*֥ zz.H,A:>@_)/IfGK,A@HR•hOI|ʕ[N,AaV@ |4_Q,AdV"I|3-T,Anbj?I~^V,AjC̦ ~81Y,A0B>1|٥ ~[,A>PP&CSR1],A<LK,/ ~Hy_,A8CFѳZia,Afht` ~swc,AXYig8.7 ~3 e,A<JPQ |v%m,AOV`W{I~^No,AfMI~D[r,A[Yi}wh |i;u,AZx~|mI|gx,ANAVʟ<I|z,Akv@RW&z},A9FJ|Ϩ~Ui ,Aedz'{rI|\|N,A:HJG̬|Q?,A6EE)I n҅,A`brk  R,9,Ad^sS.{RZ4,A:BM,(m8I0,AENVChI8,A4@B}I|%V AAŸI|ϠN AD |z9$ A}VxI|Ɇ Axqrk ~ AZgI|<^ A}Ipc!I|#d Ax  ~ 8 Axm?Q AETRNxӧI~qZ AvztAS 0 AtqVɧ  AFTPW+ E Ab^dF~ Adj|!QG-w AS`bwi!VU Ahhxϑ], AJTW٥ g A`hls2f AANN~LLIM A9QKiAQ4 A`dqg2gVI^qj AN_\8/ڠ ~*o A#S ~r Al\jgRm A6@FY;R~f AFHT3E:I~aС AJV]=f?~U ARZ^}ls6ˑq Aajsӗf L[R ~. Alr~B]bQ~kÙҲ ARGT`Ϸ | APX_COD ~X ACBO8 ~u໶ Aj7PV,|Y޲ A4BAƠ ~N ANX\٦NI|L AnPpz{  ~kd Ahb I~zǻ A?FF | AOWW^`  zԯa Al`|$ yr AGUXy ܧI~=? A>GG-x zo ATHLo'| z, AMYVFQ&e AJPUmɠ |N AHNPt#ϧ1R~͓M AANQ.fI~#[ A4=ASŧ ~ƨ AfO_C%9YF ADLT3=v` ~yϐ AAGHS I } AiS mI)mE AvRq{I~ZD AfjvI~. Av<2>IW Ap>u{IQ Av{_|\? AHTSG|81.Q- ATXj CIX; A[R[wY ~ Aև$* AvpŐe2drP Aqq x AP`^tYw AMVbJ.)Qs AXSn AZ\jAjI2x Agk}EY8 APZ`:Rk Acmqfۊ AT^h@4I%F Aq\+Y¾ A:JHV!ӧq  A|U7 ه AyjuY387 Adfp:LR4{ Agd|F e AVPd(@$  nn ARa_/ɦ  A A-ݥ r ArhV<Bʼ~ AairHTOIn" A~RD Z|BF AfhwTrQI[( Alr|כy&   AMb_Vc $I A>XTI~4 AM]`$M 46 A8PG¥I|v A#2PR~&!AZijj=Q~5nA:OHCG/[ ~⃓Acgy I ~qÀx?C`0Abbrt~'IuAVZ^gªQ|jABPTGh9E~lAmk-K  ~`AS^^WhV ~Ahip?̫ Q~,>MA|z2O<~orAii~.}Q|Y  AbdxwII|cAsiyEm< +/A_fu}3DI~<\Ag{-mO+EAtzFn˵AXYr>CWI=A:NLD ~M7A}Qw ~.-BAn ~M"xAn4L!RxAfm`@O&R|rAfk|w'|IPAu|$+vI~[LA^\hu>Q~gAdj{ډI ~Aee}3@mYqI~KԯAfh| t)5OR AhlOS 0ABGK5"Q4WAGLNBq |AXP\=x ~?RA8BD d[*AFVZ S9MAruRNA2DAOw ~v #Ah Q,Z |A.D?CI~/RAk>*  䀒Adft<( 8!|Afpӥ ~ōAy ~j?A<FJGOQ ~u)AEKR?R,A@JNK& Q ~mS-A9FGnbI }V篍ASVb}dY  XA3ADrTI^I 4I ACORc 6z&!A@MPyb5Q\DK"A4=?gyQ' #Ajn~-f  v$A`en:i%I~%`H&Am~;[;YE(A2D@YV_ rq*AHJXg$S1R4n,AKS]U qL,A2>D*r ~0 ,A0C?o!Q~,AEKS|-;~#W,A4?DMܮR}50!,AIOU]%yI~i ,AVN^uQFI|,AJPY;$I|4,Ac\sG ~7,Ar<'I| ,AlL1w~:th,AGQWEMV-,A8DD W_PR~,A}~sIo3H,A}xAz-Ʀ ֙,Apj|8 Ir0z,Ap~k5,A{w/y~g0,Az}mmIa_,Avqhm| ~~>,Aabiv!Y/)RH,Aabx1\4g|H!c,Aafv?"G-ZSl,A~NHe?~[,A4QJYA7IC0+,AFRYwebZ'l,Auq(~vT,AFVT@ 9jIAK,A;NJiw^ ~xO,AITZX,Awq6e~RL#AMZ`(2 6'ABJT" T ,A~p ?1A{_xUFI~u45Af2I~:A{Q%I @Al4*c kSEAzx $JAras pOAiG{I|װTAr{I|xYAXVIz _Az;I|?J*dAr(} ~ߵj2,ALW\C  ~=5,A3G?$]  |O7,A\P^9EУ  |D9,AiJpvI |:,A`hӣP  |*|<,Ao  I~ֆD>,As`xƣb  }?=?,A~lZw_j R|4=XA,Atl~Sg |E*B,AkD |KyD,A{i ХI~1F,AxrIzI |Z(dv,A<| zDx,AnYnt٦ |ԧuz,Aq~c |.{,Au,Q|➑},AW\f+C#I|{B,Avw¥oI z^7,A4|  |?",Ax:YpI}sK,A~B>~S[[`,Ajh{S*fo }5m8A-, z:o8ANXWE |!q8A'@I~BvBs8A@MKJ8 ~ u8A9ay2 zsNv8AS ( |dw8ADE2b |3xx8A ]0 |{y8Aj ]ZI=z8A 3VݥU |f{8Atط | |8AC`nIzp~8ArwB z78AXYI~+Z8A]\iIzDFr8ApmXZz8AFJS>5Q|eU8Ajbzш -Iz$8A   | Ņ8ABJHh |"[@߆8AnU |x8ApgH&I~8Aq!I~E,8A!I1^I|;8AB@VI|N8AEQJ_y ~ۤK8AuJ DI|?=H8A@LKXAKsf |bH8Ape/I|tAJ8Alu; |GM8A8VS|fZ8AJTYL<Q ||k8Akhv5OIR ~t8AƦ)I~8Ax.M`)I~8Ad^S< ~d8AyvãV |妘8Az }58AF<E |Pƚ8AplCH&!I|Л8Ar0}Ӣ$I|zڜ8AP { 8A.9 ~fP8Ap̸Ƈ R ~Զ8A@LK"̥I ~8Ak(o3I~U8A~it`#I9\!8Ajdx*<dI|@8ABI~'S'8Ap&tI |t<8ATPTBnl Z~ nL8All|=2y<I} Y8Aol/̥  |;U8Af8*ƢI|g}sW8AukaI|n(L8Ah2I|&.8AIv |T; 8AHRV@D  z[8Aw{1^I~&L8A4DI|338ANS_cR㠏f8AQT_@<I~vUͲ8AwW8c |Ra"8Ac9 I |;NA(_IzCqNAEHw[~ENAwl.+`pIz 0жNAz4 |XoyhNAB޾I~R.NAyaI~CNAV\OcfI~SWNA!P"I |y nNA]|[¨ |=NA\Zb+Ne5 ~qNAa%I|sNA2IzJiNAS9!  zL7NA4i[ zNAQ(I|^;5NA~f~F) ~a*NA;$<HI|IxNA5G{ zROA|jZaIvZI~W-OA_EI|:[AR I~,<[A#NIuIs>[AEj znT?[Ar!QzI|'ՑA[ATFRx=`C[AJPVan IztD[Ax[V^VIvy>F[AYMY@D¬VI x$SG[AW\d] x)4=I[A=IJy RIxоJ[APX_~FI |THEL[A]FI|۶M[Awk1/B ~S>O[Am jB &>P[AfȪNI~=>R[Ap٪6I|S[A (  , U[Adyp?I~D]3V[AgIw zZW[A XUEI|g/sY[A'/|KI |8Z[AS>(;I|,8W\[Am RQ |SΫ][Ashq[D:~UI |]_[AL;I|m}`[ApnDJӢ ~C;a[Ar s@ Y~cc[A@LMZ5KQ ~i&`d[A^^l08I| ݶe[Atk|xjI|;g[A9\Ixth[Ap]u6  |\i[A^`vIxB3_k[AtS{]z<*6l[AlfnJ]  |#KvSn[A~Sb z2޻o[A`Pb[Уm zCq[AjA `I {%r[Any]I|t[A\_t,lzjI~$'|u[Ard|Hr;?tI {Nw[A]axosw!IzVA[kx[Aߚ | y[A2wYIz-{[AvF-I {x)ˎ|[AB`ТlR~}[A^^jpRF%I~#[Ag wI |wfc[A(, |^[AAHF>{YR([A:MF3"I ~B7[As͢& ~ʅ[AMmI~6Z1[A@IN_ P[@|r>[qA>KJeF] xf]qAFMJGd3Yx_qAg^qjg{zgI|UXbqAqi;s}ZI|eqA|mMYEGhqAMR\RJSI|p'&lqAob~7f xgoqAlhbӤq }rqA~]"~?cuqA>IGR iQ|bwqAV[cJ/DcQ|{fzqAvnSi?# |\}qAdX`roxv |qAHPVup ~˙݃qAV[fvQ| qAM^^ϯtP z "qAz9BA z_m[qAxi-aݤ# ~NqA8 zqAcby?(jIzWqArb?% |LBbqAV̪IAln~}} >ADVUHs(8R~MAmq~bRPI~NW,AOXTyhs'΁Atp;I~-A~ ;+ RAvk|I~h^AOr ~ AzIsAjXdl+TR3cApv2FI|HJ A~mL$vY'A5@DO,~AJSZR(A8@FI~P߽AMKO*~҇^A^_skDI~TAwtv` ~ 'Ae\|Ñ|<~AALTzڣ"I$AJRXcvKRbšARRdLX* |7,AELTqt!I |*=,AeSݦ 1,Ab`tsJԶA,A\Zl:tIBg ,AQT^hRd|,A5BB\+ M7,AJTVC_ =,A(IZ ['\,AgYi#tƤI~z/,A 35I~/ޘg,AQ~ئ*,A5@AD[~-󏛛,Aeft=<`$  Z-1,AT5KI~^מ,A%<xI|;,A=KJ8piI |!,Am)GBm,Ad^tX2 ],AD9I~n,AXRnbqVj< `,Ay_VR S[,Aax`I |Nޫ,A$,m j,Aæ  o~G,Av/!I~(Sc,A[`gܥϐ-I ~\),A]$~,Acew ӢIx,AahnF  m,Aw}5 ~Յw,AGQY LZ,APXkvmZ~w饎 8A{I{R}Ĵ"8AHRYNh5[@e$8AMVc~o8R I%8Az~D[!?'8Aho~`v#[S(8A^`kFg:5jQUz)8All]}Re.*8AR]fB Н;g+8Avs~o([;,8Agkw9z ~V-8AjflOkP) ~-8AG\VߋUcJ.8AttH%/%Y~+H/8AcjrC8iX ~708ABTRfƥS)I!18AJ^Xl3I$Q128AEZTMaB 838Az>k-tR XѦA48Ai٥  ~AGQ58Ajcj]]v  ~\fd68Ah+6I78AC--ݤ |88AZ"+I CZ98AS_[.  ~:8Apw"I "<8A"4I ,m@=8Ah{ 6I {>8An~]֣FI ?8Ac+I!@8AUI?I B8AP1% OC8AcE X/D8A|/w ٚE8Az<I}DF8AdcLK  .}G8A"]  NjI8A}6 YjI$>@J8Aa)}  6cK8A$Tl3I΅L8AVWX{C? mFM8AB$v 1&N8A&?rI @O8A x2I ~kGJQ8AJ $-%R8A Ԧ=S8Amk1 y ~PT8A\dgC!LV ~_U8AM̙k\ |uV8Ap\j NW8A{B|xNX8ACLPȄK I|1Y8A8<4ύZ8AWXf I~a[8A"#I| \8A|z0qsI~W]8AzGU%I~^8Ali ~^t_8A% <R~&`8A<IH(I|3a8AnO ~ZUb8A:I Iz( OAtc}  | " OAL5E z :VA OAzmgeI|Pf OA}c* |.OAf{IzOA 0 z!F*OA|xmpI}9OAu 5LeIw LOA}r- |M/OArVQvr |l,8HOA@PNWtI~[|gOA#\2`IzxOA|lF7' ~6OA uL ~uOA#P | IOA>I|OAp\t+  OAt> y+OA+@I_LOA25Q j OAb h!OA@r[5I"OA<0 W#OA_A~%I ̸%OAU151I[2&OABNC?6 |d'OA]7I1&(OAbic) Jy)OAIB: 2 +OAQ$1L  C,OAR 8%r-OA;/I|.OAt}ITP:/OAsPoIU1OA=٥HI<:tQ2OA?Y<4IR"3OAъ.˴4OA#?IVJ5OAL8Ig 7OAEϷ y38OAEI Z9OA= 0 K-:OA(\A K;OAV9IAϩFOAuOymJǪFOAgfp;IGOA<TJ.] ;PHOA^#/YzmIOAtn׵e(7]IOA_dt[$YcJOAhp|6#~w3KOAZ`hZ^Hh(QepKOA~ѡ5 |nLOAqpRc 4*MOAjl||?I yMOAbhv5â$ ~ػNOAtt|fP"UI OOAGQWԵf8(POAii|RVyQOAbht6a^QMjSOACP\ε UOA`evqrȬ~ZAtv`NR׳ ZAbjv(9: 0ZAgi}'[hZAFRVABJr ZAHVVY 1  )ZAA' BZAV[d>N9 ո:sZA@VP7@ CZAhhxy3_I ~A/ZARXa~'?A !ZAgixQpLm} ҽZA-Y b ~;ZA`eu ; 1A5}ZAw\=p ZAY#nI~sXZAf5$ +"ZAC{IZAV^b#9 I~-ʵZAs;(ɣIZA2|֣#I,ZAI3  )̗[Arp6I~[A~" [A(I~  {1[AIZUs< yR[A@   ̷[AdojC-I~Q [A|cI |Z8.^ [AI ~i5[A#٤, 8k[AaIG &[AS+I ~=H[A I (A[A9J-I >N[Ar 8%I hR[Af MI ~yX[AT&I Nc[AukkQ9;8 +s[A|n@l v[A"(96 ~t [AldliI~ՠ![A~o^-`R|,#[ASB)I|2_$[Ajdn(gI~x=&[AaK |@۶'[Anjvz   ~N6)[Ansv&&[I |ﰵ*[AmltqmI۶:,[AZ z>h-[AVI~sLK/[AS}I~M0[A`XjLzkI|1GW2[Axo~ /H ~V3[AA%}: |BW5[AމN} I|(7[AHWR?vQ|I|B9[Ayt,I |n<[A|fj=S+I~ISqAԍI|rRqA}pF\FA|[ qAvi~^t! |7፩qAT/S ||oqA]V\3 |ˆ֝qAPf?:I|Ƌt.qArz$I|]3qA|x I||qA߶ |qA%IyqAzB' |),qAT  &vqAM0D E |_9qAGJ/Q|vqA~̀9 }̳qAT`X%I*iqAXdbFIጰqAHXRtBe|7qAR]b"(~v qAxx_CY~YqAutxjz ~*{H4[APXSE86jP |7 8[A*Rv zN<[ANҪ zL,?[An{Ix/\}C[A5 Iv}FaG[AJPN+ z[J[Azo|U |ͻM[ALS[L" ~^}P[AynJzQ~|pS[A^YdDS! |7V[AROR2V *d%Z[Acv|X3][AebvUQ|t`[AKIV| Q~-`c[Asr c ~Fthf[Ajby`Iz6%i[ADRNsR}k{}m[AFJNK}Q~ѱp[Azlnzrs[AWZaUY":v[A~v"BQ~ 0z[ABRL>8sZ5&Io}[A?IP ʙRv([Ajh},LHLJSI |qq}Ayl2XBR ~iDu}A^T^hФ  |8Fy}A zB}}A15ҩI |e7}A_"I ||3}A#A v)rW}AfftcLI |θ?}A$hL I |aP}A|'Is F/B}AP\`x-% ~R}AJ\ViVWS  {C)}A I~D}AuRI Ǡ}Axcy;7Rn}Addt-n+hI~P}Aii{PMӣ$I~GbE}A_xH zᤒ}AOV\2FWGIx-P)}AGdI~@L}A|8 hZAxo|/)XZAyw zQ6ZAX`\b ZAjm{;m IfWZAHZV(~@~IM{ZAuuzz| ~YZAHVT7pUocIPGZAhnoQQA\0ZAP\\BRIoZALTSx\I~NZA?TK2|I}}vZAU9 4Xj[A{HsPI~\(![AVХ eǙ [AP\XI|if [Abt+JI[AP1IX[A [A~`F G{[AcD ~y [AG5I~Db$[At].I}([A8H |DX+[AthsxY |:2/[APV^W5ן zksԘqAdbtH %IzOqAth:] zcrqAl1  ~j}qAvr~¥ | QqAh}BI~߈qA*gtI|CcqAv3m |Q78qA]cP֤I| 7qAtr^IzsEqAWEIz1qAt^=Iz AqAI^U@4|JIӣdzGߢqAkh{p2$I|"qAO\`ԝQ~ L,qA|vzQ|qAogvN- ~$ &_qA̧ |oqApj{ˮ |mqA|5!D`$}A[cs%!)Q R(}ADMT8 $QEc+}A^bp_~J).}Ackx}R+ ~mi+2}AYdjV,eI ,5}AO[bH1QFv]8}Avv,|IBӣ;}AHZT 3qG }?}AVZj XI~NrC}ALXYAaD~ ~*G}A01 ~ J}Acjtw_I }/N}Ab:S[I| ϝR}AzfzEy/  ~}VV}AVRdzi|DZ}Acgt=:I | ]}A%+  |i:[a}Ad`x_L  }$e}A tI |!i}Aklaspy-laspy-a32c7aa/tests/data/simple.laz000066400000000000000000000434511463461040100205350ustar00rootroot00000000000000LASFTerraScanM")r{Gz?{Gz?{Gz? #A333e#A(> *Agfff)Aףp= S@> ףpiy@laszip encodedV4by laszip of LAStools (150406)PGI`B& ADMXD^ɐ)e3P>Q]t4OTu+ ݭX[(-k򀏟ۗyPfzD3D-#d)f(ftz04ě7H 5rS&!V be5y@i_q=gͺ;%nWT]j]Aܩ$u ]$[ˁP\L /hL7$9Bj`qf.V)Og*ftq"7t5݆%5txzdwh"U0: ̉30& # *k Jy| 9 88^[e^fH ;H{A޻Wk(:3d!we8a;-oIG+8V@?@η0QZƮ#-T<%dM |׻A= @3/CR%k&|A 54EO|iv+KB4Cp#DǢfqYo$t p6E2s>T`=q-WO]m= hZfp%hlfr2p wZK8.n:M@\.rʨ҃?h 5Y]Jm89V T{h,ܿWR5혜 ŝrglLM^5~tīk56?^]^|#{+Gt.i+M @OQhVW ۉhU3:T!of2p-E:>WQ&i(G̙)gpC1(,C_ dž+R=cTe5CneuR0A@ř) ,^jbSJ?īk*DKtKV'W?mJ( MlNaE6?LO"lF.:یZyMΥ'5pNĤCӄq") [D.hY]٘i"E7ԗvnN\!d:G|V+a`=P F}{+T:)z 6R7rإG]ЀBԋl봂 lLY$mVSdt4Z5݅ZyZhml*_g E>dķr&@qgNCX6yr_4B\Uә@[&V[sLZAGl4o(tm4ԞrV@|Po[ [n{32uⴇܗDu"OI$ R (3`S3O-s·TtO.k+7ZzҜ"bc7h̠qMjN,p,NP؂ yjQf5+JRsi :GjAa;`zN/NXhb₨NY`V$QK=w?.@HE}[lvF4`M:Yn5Oc_Vhu)](um.1pk@c9_dd\!+r'rWc0_}PYJ@;C^*Ёϊ{z1ҸNsG9|PVrC٫d)0|&2 3pE~%ofG-:}RuA΢²/ԿAHt#k> 㱭Q'FX7*2ie`ZulYů/Xc gOVƻT@'- \sOb=2Wߛ"IqNڳQ~k2m'e <"D6aWV^0֠R/ƥP?dr/ z_E1>ua09Q$ [`qN:S-Ds*Y@>tH@f6,^YXdդ[JUۘ]w%1jqږbj˨򶶬C8Pv., {bh -ܽ` ju0i:P?\S&GRfSi!SL~F8Q NHIcC |[g,zυ it0ip'N (`!+ JdFګYtjjE D`ZO?R,c_A+v1c0f?Ɛ-.hF%VLMqU]P 8U2(Os^Sm"Dޥyf*Y]AcJ>e%']C YJe^W-U5 4}h)-!xXhg/$8z wG{D`u ׂa%Lptkj "3/ _n'=[~kp]jNߧzŤ]֒~9q5Z.CG^]'B`$VFZiZJН\ S"vxA\/z{E [59(X0XL.ը(2z$&Pkq| x&xq|thF9;ٱgM/T@)3V@& K^қ*dfqY{%[`X[tmn'%+Hi!K\@#۟nS6_ywB]? z֞/,)B?M6LO37\\qu@ε[#>#ejU#վ0Ǡ wŝoN]N:q^#YCUC @Pd;%",ҎY׸+/z!x,xŇ[*oC͵e5d+tƊ~52nGzY7<`ZǸ'(88dt4& ".L5\| {M_m#r(8Qwex Jm?cH\ T)@rK‰7]\~WrC eȲۤp.IIkO߫*l.LaMMpa_?sVo4XUl NO*cECJƋB_ZնĻñ0ĕ4hEdQyv. - 7*7JEZ(q^? Tfױۚ鴾p):c$7)Gs!aH'0|n!\  L[ڿ~Q&Ń9X\l5ko5(8fv.$oF5*g"53W69 zY_ds:c ֳ6 0q3Jg (uK7 <:y'jQ\a{D~DY(e6ng?߿tG6X}s+QNLh]јy湲l^6uIm(SZ'qگ1;i: fsۛQ%c<}ft.^SΆSjAz''}(+V귚K\-LQvߘӮ:@Atq, dfg*<N BڪV6t'ssۖ+oď˰`FXfte\1<Ȇ.m-Z%U]/ 4R/ryGY}Q 4U#;jq c;7 4w%@zgL hZʧnOƖr*fٽ9/-@v#\>L1kjdMXcM[Qg$d 4IJqDh{jW1.Rx@4Cs45n66*47Y1!tܡ/ЊXXRXVOU֜x:Xi/`]ؐ@Y^#_PǙpX 2Mgpl=Dc6:ES𮯬jpq:p ĆJ?27hZ5"#0֪Y  v3 jq7_u>U؏VLR/aR(7uيp~wcWN>?[;} -Tn%㌿^3聡_j^q8HrޠfZ0VX*c=/}YT@@Y3WgF3sѮ>]!AP0-b` @rh tzɖxy66.ghuH=Uw {O(2r2LoYǎp:Od]4VANX1e{j'BrlF<`:Y|牞a1+)bے5yMi5.e3L[UL>Saսn$+A)ű2˟q:uƭO̱[_~TWr#QE hqOK2$@k h 8wQVH]#"wE ɐǥ\` a=:[`/x:5թ#K@do0c^'mXC߀[}3mm38Gs>Vg 7/:ʰցs2xh,!g0Es^ FDŽJmF]9 \KWȂ.e50vʢ<)QVԲ4U\nSV&5JqpÔ.Ocu5廊>K"[#6W7ќ SX}][hJ{?X};Ej?O8Y4S]O߯4f1ԩQ^3a8u{abe`HK)f_*{\tfT iMH<6hqeWO-/j;"3>pUv]r2"H1 SH/Mujg z'W/P[>}x'b-I'K߈LWnU83ɻץ-^ ()VYBZop.lś@\F,шO Hv5q9RaZvndg`GEvEd^S'WvD-T/ca#>]n_ULjtSlceQ[Ǡ3I|n-$Fxyg=q/4aI0M`ꨇbj}lk aĽyȱpaԇ5nc;J/oͦW} Dcဃ ?./o7`cwv^ú>V.BBu=XIވ44%WU=!'o+?7&ywRxH$bF[=mw.qW Aj]-{@NA(3u9qG#.41Ks \s B*xщhG9 OK5S^LD}Z;XC_Ŀ:Fuv$w^0q d}G.m"tcW;.TAewΜ}0Bl?oPSV^{#> Уy߰.~NfQFߌ ~z߈f?x~lnkPKtN +Ѕ:ܸ_n2ʈ7XGدN*G[!jO޴zh-Q`ı?[}t{a:vltR,\ X$$;Cֿİ.{CKvu(:Q=^w0"ItXN41Sct*5$cbn?д[,"gY|KFs]-vF7) 4KECzBn z\2_A:%l'H"$D!€S'ѡ)|*nETI&j=-àŹ, jr ~JN+09}!YN!el^ЊQDT+abWy1p_:G l]J֨P,\ےuLUW^)].K)d˧a_G/gC$0ImDMrqS_:7߁p4RTYetFG i鰎v)^)IZi/]nє{NUg9YN5L~2b)k ;P|~Z2L-d,N릃E1U׵D`]j0 X@#2!1gyk=_~Pv>]VJET KwGSo`QCі_#\"lto!!`4~bUa1^⻳jD^!d,ukL"83N┥b爄&-"L]"W V%f'/BY-DqyZ0ΠT Q}!4>+趱DžwI3# .AB)TACshk6Iyp=/y~p+[)F KA&yrsEAN嘰@ʮ[mHrLdWK*Vn #q =1v4ogGк q`TYf E_ _bl)Ƽ5=c5ilUNUXlMȜXiJNmgP ez&[*m$dwѐ6LЕN tTNqy~vD߿vV+A?;BV^ZA-<Iˁ.+W#s:na /͡&iMޛ~)6y1!Rbh}V]a,Rꋹ ުʓɓ%=)Xz@48>I<66{C MVe~>p@۩-CQ#t7M|%F/B FL;pEṞSA1훤YKrD- L6Qk&}up͏AX;*9Ҳ"^G:GBu WUѺ눌41T#Md+h_8S >Q-B!`!1(1D.Hoܵ2kfQ'LcC}d2 UafS_%]c5m5#eZ M$(Cd^BŖ!-٦F!'Ôt:O'ԅi!oQ*LAi)+Dd^&N) lk*.ɮv45aD%54Hp[dYde Kb׉K r+Z|)Cͮ<ݠ XT ּDSzeA OnDоF7}]y2޽B6x؟RP=Z 8q x=vctc㞠qYA]@ |AwTy)rp;rѨоײv4.cҩLͽgVvҶ86 J|%U+OK}̳Zَ62B H =1J7۪¾NHԔ;"Zib~zYhp=aj{f*t>$#]s5{[g%ӗ%}{TҢl'zY88 /GтAzfk^~"XP*ǩ]L9]?$ iZ\'Qܺ-LBzbjV=8LU*6HT&Rc2;QYi/l!гj-1_멭-VA{ϐ/::Tp5'0!.KpN?2<3 ?1= 4˺}3O`~'K=_ EK]Rfi߬(d< =@+lc2䫫ζc-mw$[(ZS>aWzAu ESGgT0 к]Ka8kiŸO$8-EJd`G@0+Wĺ`-ca ] ɼI0|;yށ<_V%h~!#x#GJ+AjZ4w#ݿ 8u7@{^I 4O֏Qs# ov-caR#gP=,+ee0ber-x?egea40!NH&+0bKH=y~qV 0C@0"!Mw/JƘO.sN3#Y_q^+_iB?x.yj)זĚDdwvoJ9|1ZdcSsU9gGzxO!s*.K2P$EE cvv|N0"V CK @ERm, Ƨ'+,FY51gNFٯ  O*i _"xfyOEqE~|M>cl[i0|kvK6˨l-X~2~||Wڑxɠ8hXK-S,LS9/"Ėj[{$59%t3Z{BQ?3rί(ng* }#_2c]v¶UTpN%F+۸'lf "/u'58?ݒ^h!YLR L-oG>JPG QJ9QVNyi?>D$m^5(NU/#1Ϳ?F;c6i+V+vO6;儰Us|g }.jߜuPZ/t:$#-nNZɎǙ #la+' @8.L`QKz*K:=9.X8) cfm,9,੮PI},AtU|xQm'{aѼД:4ԒNĆ$)K&ʊA=tqQ (y=G?LeoGUyf]jUĊRDCtڣiH%V 5>qn2c}sf/w2ay:)`4*|\vٗ m@t[J̵rN,b_< ۲:U ?GNTl\ f0Dh(>M:K>vz@-]ֶMp1%k0BUa0'MԒ֟[(kWڊ*9hu:6Bs!Zgzjunla7>I =900¥FG\cnO 6@naפ~) dhƜ:nGV5mwO-ˠ ]ƀ'ĨL%;)}zA0t)ed8@YtZ_lٷ[m %U]d&A+n,! ȱ֚}RH.BL đzeE#Ouur3W$\PB%wX6DeFiOPFu Suar&/m3/|hyf6V_Lw jS㒊|\'%ܘUz=Pr EZ[|X2ϢĶÖ!&QOhWa'EḦ_o!jir%.t\9'&½,R)V)h1v1=Mo4lR5+%XŵN;e8Z"c-cBFU.ޒYQU$Ưoq0m^Sj'>M s[w5޳-mhiiZ}'Eh81  Z^$rQ7Ԣn!mJ=6ҼyVP3ʝC+;&{+X@燰7N SqC %xq/q)п礳|( > ǏɸiפSΦ 27E߶p//I"'Q > aF*V.ۦ57<(.KltT6 >c#;pX1=vvT=\Df1t|o,8r<_Gn+ Bp8u1"ѕVJ'7Tz@6x؊C%/? NgATzSI݊(E5bn5X-\s7)G@r*gW`7M$޸G7RI׃cw%pdqZus2e =հuȇfGɃ$&C^=ʖP- KOMͅ;S\LwTAXtvs<, 7`g 3â%BO~ ;>RL-;V׃v5y`:m2[=%X$2-~]64v/EW eFׅP٩VNE7d hP'W?SvvO? GB՝ ]#.2'Cl@iCJ}^?|eNcezm.vIr? ̢<˪2O|ɤu F.]n)fiA&K?~O'wJ0Dyo8(ĆU8 /#F_!C?wZ8aS~'B!"6\<_ƦN⒯'bO_ jDOǏj*ys0Fǻș_k9)Vw^]_I!j+Y_s%SC Ӧt0k> ќt鞘s9-qb;@\~!s ("m7'_cMu<>)z㄰}Ɍ FʙnL@4ɑYY,簟gD풿ւ-yz> RNT+p#}&}Pj>Y(CvRHP;Le, ;/ \AW{fuZjHt3W C;tV]蚚z*TLBhh)hDm [qx7p疔ہ.K5* TdĬ[ZZd?22zjۍ~Oۆ6bP^a7X1/1Y" X|t2'2 ygVT@ܗT鲔pXj2ji|7u50|7§w8-ou~d/E Ws_là_<ҠxhZ4Oѹcl?/amVmXakrsۜVA ֈDk?1R&5pNwd|؈<ȫٚU,TsA;FY|DʴhѢcEbgbzjf'=aolfh?9x jZf_w"VjC| 1 xYSWX*5hj`C(bP'0ZB|R1r0yƇ8n:˯qNב90cSER!CY5emMڏ8O su{`)Qx\ ׾a`GGNыut:QCaQ%JLHz4 xo }n/*- BQuPmAz2bt^f8RX\~*{6Plft5hAf&Eq|y^3M؆jb4WDiuʔ)p fbRKosš>=xlaspy-laspy-a32c7aa/tests/data/simple1_1.las000066400000000000000000000725371463461040100210360ustar00rootroot00000000000000LASFLAStools (c) by rapidlasso GmbHlas2las (version 200216))r{Gz?{Gz?{Gz? #A333e#A(> *Agfff)Aףp= S@> ףpiy@I`B& A_Q4U+ A Jv z]l1 Au+d |:6 A`|I~ݱ; A &0 zX* ? A IM C AEy(Ik3ٖF A'5I~I A`7?|I|L A)B |YIO Az+K |7/R AGF? |}T AdBCQ~W A% ~c۠Z A>[ |W?<] AP$ujI|>_ AB(s |5b A-d2 ~Fd AD}a A "I|ISte A  !Ug A7eL[ ~;h A90 ~j AJ:~D AW)?bI|TO Ab]I~_b A{ I|#w A T%I| AQ |?D AC Q|zԴ AcmB` | AP  |+ A,{I~1<ҽ A~I|}С A2e#I~3 Ab`R|Hգ AaR  ~ˤ ALQ |2ԥ A"=} ɦ A]0aI g ԧ A5cI|_Hbݨ A8ȨFSI~ ACcI~ Af! <| A@KMAͽ&A@+d9Q~.)A1*7I|e+,+A;z8I|OS,A QJ.A+?R e/Ay z0Auk Z ٴ;1A9RI~~B72A(c`3A}I~4A/ŀ45A[i>@Y7AV  <88Aڣ 'P:A.VIO;A)>-=Ae‴>A` =@AwE AArS]E [xCA'NmK'EA@vOFA6wR8%HAX&A $/;IAv zDQJAPi ','^LA^9< vMA?;F i(kOA7|R~0exPAW͟ GyRA&Q~SA7  ˇUA3I|#o(WAġ8|I|dPXAFnsZAL4+[~H8\A~WEI|]AdNaIzum_A`iy  aAqdnbAq"eūI|f,dA40J 'ϣeA Y|gA<5FI|4KhAI.jA'^!I~A<<,A[֪3|z1?,An`R }#>B,AE  |pSE,ACc*֥ zz.H,A_)/IfGK,A•hOI|ʕ[N,AV@ |4_Q,AV"I|3-T,Abj?I~^V,AC̦ ~81Y,A1|٥ ~[,A&CSR1],A,/ ~Hy_,AѳZia,A` ~swc,Ag8.7 ~3 e,AQ |v%m,AW{I~^No,AMI~D[r,A}wh |i;u,A~|mI|gx,Aʟ<I|z,Av@RW&z},A|Ϩ~Ui ,A'{rI|\|N,AG̬|Q?,A)I n҅,Ak  R,9,AS.{RZ4,A,(m8I0,AChI8,A}I|%V AAŸI|ϠN AD |z9$ AVxI|Ɇ Ark ~ AZgI|<^ AIpc!I|#d A  ~ 8 Am?Q ANxӧI~qZ AtAS 0 AVɧ  AW+ E AF~ A!QG-w Awi!VU Aϑ], A٥ g As2f A~LLIM AiAQ4 Ag2gVI^qj A8/ڠ ~*o A#S ~r AgRm AY;R~f A3E:I~aС A=f?~U A}ls6ˑq Aӗf L[R ~. AB]bQ~kÙҲ A`Ϸ | ACOD ~X A8 ~u໶ A7PV,|Y޲ AƠ ~N A٦NI|L Az{  ~kd A I~zǻ A | A^`  zԯa A$ yr Ay ܧI~=? A-x zo Ao'| z, AFQ&e Amɠ |N At#ϧ1R~͓M A.fI~#[ ASŧ ~ƨ AC%9YF A3=v` ~yϐ AS I } AS mI)mE ARq{I~ZD AfjvI~. A<2>IW A>u{IQ A{_|\? AG|81.Q- A CIX; AwY ~ Aև$* AŐe2drP A x AtYw AJ.)Qs A AAjI2x AEY8 A:Rk Afۊ A@4I%F A\+Y¾ AV!ӧq  AU7 ه AY387 A:LR4{ AF e A(@$  nn A/ɦ  A A-ݥ r AV<Bʼ~ AHTOIn" ARD Z|BF ATrQI[( Aכy&   AVc $I AI~4 A$M 46 A¥I|v A#2PR~&!Aj=Q~5nACG/[ ~⃓A I ~qÀx?C`0At~'IuAgªQ|jAGh9E~lA-K  ~`AWhV ~A?̫ Q~,>MA2O<~orA.}Q|Y  AwII|cAEm< +/A}3DI~<\A-mO+EAFn˵A>CWI=AD ~M7AQw ~.-BA ~M"xA4L!RxA`@O&R|rAw'|IPA|$+vI~[LAu>Q~gAډI ~A3@mYqI~KԯA t)5OR AOS 0A5"Q4WABq |A=x ~?RA d[*A S9MARNAOw ~v #A Q,Z |ACI~/RA>*  䀒A<( 8!|Apӥ ~ōA ~j?AGOQ ~u)A?R,AK& Q ~mS-AnbI }V篍A}dY  XArTI^I 4I Ac 6z&!Ayb5Q\DK"AgyQ' #A-f  v$A:i%I~%`H&A;[;YE(AYV_ rq*Ag$S1R4n,AU qL,A*r ~0 ,Ao!Q~,A|-;~#W,AMܮR}50!,A]%yI~i ,AuQFI|,A;$I|4,AG ~7,A<'I| ,AL1w~:th,AEMV-,A W_PR~,AsIo3H,AAz-Ʀ ֙,A8 Ir0z,A~k5,A/y~g0,AmmIa_,Ahm| ~~>,Av!Y/)RH,A1\4g|H!c,A?"G-ZSl,ANHe?~[,AYA7IC0+,AwebZ'l,A(~vT,A@ 9jIAK,Aiw^ ~xO,AX,A6e~RL#A(2 6'A" T ,A ?1AUFI~u45A2I~:AQ%I @A4*c kSEAx $JAas pOAG{I|װTA{I|xYAXVIz _A;I|?J*dA(} ~ߵj2,AC  ~=5,A$]  |O7,A9EУ  |D9,AJpvI |:,A`hӣP  |*|<,Ao  I~ֆD>,Axƣb  }?=?,AlZw_j R|4=XA,ASg |E*B,AkD |KyD,Ai ХI~1F,ArIzI |Z(dv,A<| zDx,At٦ |ԧuz,Aq~c |.{,A,Q|➑},A+C#I|{B,Aw¥oI z^7,A4|  |?",A:YpI}sK,AB>~S[[`,AS*fo }5m8A-, z:o8AE |!q8A'@I~BvBs8AJ8 ~ u8A9ay2 zsNv8AS ( |dw8ADE2b |3xx8A ]0 |{y8Aj ]ZI=z8A 3VݥU |f{8Aط | |8AC`nIzp~8AwB z78AXYI~+Z8A]\iIzDFr8AmXZz8A>5Q|eU8Aш -Iz$8A   | Ņ8Ah |"[@߆8AU |x8ApgH&I~8Aq!I~E,8A!I1^I|;8AB@VI|N8A_y ~ۤK8AJ DI|?=H8AXAKsf |bH8Ae/I|tAJ8Au; |GM8A8VS|fZ8AL<Q ||k8A5OIR ~t8AƦ)I~8A.M`)I~8Ad^S< ~d8AyvãV |妘8A }58AF<E |Pƚ8ACH&!I|Л8A0}Ӣ$I|zڜ8AP { 8A.9 ~fP8A̸Ƈ R ~Զ8A"̥I ~8A(o3I~U8A`#I9\!8A*<dI|@8ABI~'S'8A&tI |t<8ABnl Z~ nL8A=2y<I} Y8Al/̥  |;U8A8*ƢI|g}sW8AkaI|n(L8Ah2I|&.8AIv |T; 8A@D  z[8A{1^I~&L8A|338AcR㠏f8A@<I~vUͲ8AW8c |Ra"8Ac9 I |;NA(_IzCqNAEHw[~ENA.+`pIz 0жNA4 |XoyhNAB޾I~R.NAyaI~CNAV\OcfI~SWNA!P"I |y nNA]|[¨ |=NA+Ne5 ~qNAa%I|sNA2IzJiNAS9!  zL7NA4i[ zNAQ(I|^;5NAF) ~a*NA;$<HI|IxNA5G{ zROAZaIvZI~W-OA_EI|:[AR I~,<[A#NIuIs>[AEj znT?[A!QzI|'ՑA[ATFRx=`C[Aan IztD[A[V^VIvy>F[A@D¬VI x$SG[A] x)4=I[Ay RIxоJ[A~FI |THEL[A]FI|۶M[A1/B ~S>O[Am jB &>P[AfȪNI~=>R[Ap٪6I|S[A (  , U[Adyp?I~D]3V[AgIw zZW[A XUEI|g/sY[A'/|KI |8Z[AS>(;I|,8W\[Am RQ |SΫ][A[D:~UI |]_[AL;I|m}`[ADJӢ ~C;a[Ar s@ Y~cc[AZ5KQ ~i&`d[A08I| ݶe[AxjI|;g[A9\Ixth[A]u6  |\i[AIxB3_k[AS{]z<*6l[AJ]  |#KvSn[ASb z2޻o[A[Уm zCq[AA `I {%r[Ay]I|t[A,lzjI~$'|u[AHr;?tI {Nw[Aosw!IzVA[kx[Aߚ | y[A2wYIz-{[AF-I {x)ˎ|[AB`ТlR~}[ApRF%I~#[Ag wI |wfc[A(, |^[A>{YR([A3"I ~B7[As͢& ~ʅ[AMmI~6Z1[A_ P[@|r>[qAeF] xf]qAGd3Yx_qAjg{zgI|UXbqA;s}ZI|eqAMYEGhqARJSI|p'&lqA7f xgoqAhbӤq }rqA]"~?cuqAR iQ|bwqAJ/DcQ|{fzqASi?# |\}qAroxv |qAup ~˙݃qAvQ| qAϯtP z "qA9BA z_m[qA-aݤ# ~NqA8 zqA?(jIzWqAb?% |LBbqAV̪IA}} >AHs(8R~MAbRPI~NW,Ayhs'΁A;I~-A ;+ RAI~h^AOr ~ AzIsAl+TR3cA2FI|HJ AL$vY'AO,~AR(AI~P߽A*~҇^AkDI~TAv` ~ 'AÑ|<~Azڣ"I$AcvKRbšALX* |7,Aqt!I |*=,AeSݦ 1,AsJԶA,A:tIBg ,AhRd|,A\+ M7,AC_ =,A(IZ ['\,A#tƤI~z/,A 35I~/ޘg,AQ~ئ*,AD[~-󏛛,A=<`$  Z-1,AT5KI~^מ,A%<xI|;,A8piI |!,Am)GBm,AX2 ],AD9I~n,AbqVj< `,Ay_VR S[,Aax`I |Nޫ,A$,m j,Aæ  o~G,Av/!I~(Sc,Aܥϐ-I ~\),A]$~,A ӢIx,AF  m,A}5 ~Յw,A LZ,AvmZ~w饎 8AI{R}Ĵ"8ANh5[@e$8A~o8R I%8AD[!?'8A`v#[S(8AFg:5jQUz)8A]}Re.*8AB Н;g+8A~o([;,8A9z ~V-8AOkP) ~-8AߋUcJ.8AH%/%Y~+H/8AC8iX ~708AfƥS)I!18Al3I$Q128AMaB 838A>k-tR XѦA48Ai٥  ~AGQ58A]]v  ~\fd68Ah+6I78AC--ݤ |88AZ"+I CZ98A.  ~:8Apw"I "<8A"4I ,m@=8A 6I {>8A]֣FI ?8Ac+I!@8AUI?I B8AP1% OC8AcE X/D8A|/w ٚE8A<I}DF8AdcLK  .}G8A"]  NjI8A6 YjI$>@J8Aa)}  6cK8A$Tl3I΅L8A{C? mFM8AB$v 1&N8A&?rI @O8A x2I ~kGJQ8AJ $-%R8A Ԧ=S8A1 y ~PT8AC!LV ~_U8AM̙k\ |uV8Ap\j NW8A{B|xNX8AȄK I|1Y8A8<4ύZ8A I~a[8A"#I| \8Az0qsI~W]8AGU%I~^8Ali ~^t_8A% <R~&`8A(I|3a8AO ~ZUb8A:I Iz( OA  | " OAL5E z :VA OAgeI|Pf OA}c* |.OA{IzOA 0 z!F*OAmpI}9OA 5LeIw LOA- |M/OAVQvr |l,8HOAWtI~[|gOA#\2`IzxOAF7' ~6OA uL ~uOA#P | IOA>I|OA\t+  OAt> y+OA+@I_LOA25Q j OAb h!OA@r[5I"OA<0 W#OA_A~%I ̸%OAU151I[2&OABNC?6 |d'OA]7I1&(OAbic) Jy)OAIB: 2 +OAQ$1L  C,OAR 8%r-OA;/I|.OAt}ITP:/OAsPoIU1OA=٥HI<:tQ2OA?Y<4IR"3OAъ.˴4OA#?IVJ5OAL8Ig 7OAEϷ y38OAEI Z9OA= 0 K-:OA(\A K;OAV9IAϩFOAOymJǪFOA;IGOA.] ;PHOA^#/YzmIOA׵e(7]IOA[$YcJOA6#~w3KOAZ^Hh(QepKOAѡ5 |nLOARc 4*MOA|?I yMOA5â$ ~ػNOA|fP"UI OOAԵf8(POARVyQOA6a^QMjSOAε UOAqrȬ~ZA`NR׳ ZA(9: 0ZA'[hZAABJr ZAY 1  )ZAA' BZA>N9 ո:sZA7@ CZAy3_I ~A/ZA~'?A !ZAQpLm} ҽZA-Y b ~;ZA ; 1A5}ZA\=p ZAY#nI~sXZAf5$ +"ZAC{IZA#9 I~-ʵZAs;(ɣIZA2|֣#I,ZAI3  )̗[A6I~[A~" [A(I~  {1[As< yR[A@   ̷[AC-I~Q [A|cI |Z8.^ [AI ~i5[A#٤, 8k[AaIG &[AS+I ~=H[A I (A[A9J-I >N[Ar 8%I hR[Af MI ~yX[AT&I Nc[AQ9;8 +s[A@l v[A"(96 ~t [AiI~ՠ![A^-`R|,#[ASB)I|2_$[A(gI~x=&[AaK |@۶'[Az   ~N6)[A&&[I |ﰵ*[AqmI۶:,[AZ z>h-[AVI~sLK/[AS}I~M0[ALzkI|1GW2[A /H ~V3[AA%}: |BW5[AމN} I|(7[A?vQ|I|B9[At,I |n<[Aj=S+I~ISqAԍI|rRqAF\FA|[ qA^t! |7፩qAT/S ||oqA3 |ˆ֝qAPf?:I|Ƌt.qAz$I|]3qA|x I||qA߶ |qA%IyqAzB' |),qAT  &vqAM0D E |_9qAGJ/Q|vqÀ9 }̳qA%I*iqAFIጰqAtBe|7qA"(~v qA_CY~YqAxjz ~*{H4[AE86jP |7 8[A*Rv zN<[ANҪ zL,?[AIx/\}C[A5 Iv}FaG[A+ z[J[AU |ͻM[AL" ~^}P[AJzQ~|pS[ADS! |7V[A2V *d%Z[Acv|X3][AUQ|t`[A| Q~-`c[A c ~Fthf[A`Iz6%i[AsR}k{}m[AK}Q~ѱp[Anzrs[AUY":v[A"BQ~ 0z[A>8sZ5&Io}[A ʙRv([A,ӣdzGߢqAp2$I|"qAԝQ~ L,qAzQ|qAN- ~$ &_qA̧ |oqA{ˮ |mqA|5!D`$}A%!)Q R(}A8 $QEc+}A_~J).}A}R+ ~mi+2}AV,eI ,5}AH1QFv]8}A,|IBӣ;}A 3qG }?}A XI~NrC}AAaD~ ~*G}A01 ~ J}Aw_I }/N}Ab:S[I| ϝR}AzEy/  ~}VV}Azi|DZ}A=:I | ]}A%+  |i:[a}A_L  }$e}A tI |!i}Alaspy-laspy-a32c7aa/tests/data/simple1_3.las000066400000000000000000001726501463461040100210350ustar00rootroot00000000000000LASFALSXXALSXX_PP V2.70 BUILD#15<9MbP?MbP?MbP?SAB.$AALA.ALeicaGeo&|Intensity Histogram0 !I:D\% z1W|/on uQo*eV E  S%De4\n-WJbXQd m ` ~ N  x / ! Abo H#F&k'+04z7G;?QDDDKCNQ!XY;^R`^Pe-hj jlxppmprploo&ol5ehdb[ZWSKJ GBZ<p:?73.-9*['5"! UW`j( L  "G6cb:ByJ1/6 ncaZZKFSJ@?2?224.&',$$   brwm@j I M:I]' ~1Y|1op wQp,fW E  T'Fh4]o/ZNcZTi n a ~ P  x / ! Bbo I#F&k'+04z7G;?QDDDKCNQ!XY;^R`^Pe-hj jlxppmprploo&ol5ehdb[ZWSKJ GBZ<p:?73.-9*['5"! UW`j( L  "G6cb:ByJ1/6 ncaZZKFSJ@?2?224.&',$$ LeicaGeo+MissionInfoO4 $4|$Ů%* 黪LeicaGeo|6UserInputs|`|]|!4| hdD v 9vzLASF_Projection8Projection Infoh"|6 x)#)#LASF_SpecdWaveform Data@?)/ I"1D@<FŽ͜7u9l#/ I_@<xF{,79/ I@<FЖ7A9c/ If@<F%7<9>q/ IF@<ݰFC79/B Iٲ@<FFX79 ]/C I@<OFi?Ų7c9 /9 IYM@<F79 A/K I @< ϙFdNf79T/q I@< F?7H90/ Il@< h@Fdr79/ 9I4@< ѴFp7 9x/G I0@< тF }79+n/ I@<F}FZ U7C&9[/ IC!@<۶F{ J749/ I*@<_ZF 7<9eJ/G I+@<dF߫79/q I@<RߵFZ7:9:/f IW@<P߰F?Z7O9u/ I>@<#4Fs17r9,3/ I@< FK79/ I@@<"F\79K/ Ix@<#xF79/ I@<$F+a79ǿ/ Id@<%F1779n /I%@<&F= 799'/I^@<'fWFQ749ڸ/.Iw@<(7F-7?9z/7I(#@<)eF{@7:9N/;I -@<*8ޱFMLe7/9c/IE6@<+ͯF9:7- 9/6I;?@<,8ƵF7 9d\/6IH@<-eF17C9/FIQ@<.TF75 9ĨU/iIM,[@gFb7B91/tZIL@<4sBFrn7I9./tYIz@<5aFa<7P9/uEI@<6EFb7iW9=&/I^@<7/ٴFX67=^9/lI(@<8 F 7De9/bIa@<9H#FMi޾7 l9I/3Iq@<:dF7r9/XI"@<;ƱFLƆ7y9/UI@<<8ƵFp [7Y95/TIH@<=2µF-7D9ޅz/]I5@<>tF79/`I@n` /IA@9Bi/I@c/ I|9@<\F$u̷7$Q9;/I-s@<]1FRn˷ev7W9.9h/,Iެ @<^oFmʷ6G7]96/:I@<_Flɷ+7c9W4i/CI@ @<`VFukȷ7j91/XIY(@'/I՝*@<}_FЌ*a7:9Q'/I3@<~hFF/79H(/xI7=@<wFuC7:9U(/IJF@<ζFi!˱7$9X)/.IO@<|F^97*9Y)/!IJX@<_~FBRg7/9e*/jIa@<K$FE4749J*/\I1k@<Fj237h:9p+/I]kt@</ٴF%ΰ7?9I+/I}@<_ZF57E9x,/Iކ@< F. i7YJ9S,/fIp@<ïF67O9{-/fI!R@< FN坷7U9B./Iҋ@<hF=؜Я76Z9./Iū@<FAɛ7g_9A //I4@<F>!j7d9//I8@< F377i9'0/Ir@<FYF7n90/IG@< F5Ϯ7t9 *1/I@<hF sӛ7!y91/I@<lFch7%~9<2/MIZY@<#FRR 57,92/LI @<԰F":"7J9J3/`IE@<~F(̭7?9v3/I@<[Fᘭ7-9U4/wI4@<hFe79k4/IXn@<TȶF 179بc5/I #@<Fٍ79Q5/I,@</FƌǬ7Υ9Σl6/zIk6@<hFP79E6/IU?@<H#F_7^9~7/I͎H@<ɛFKM+7968/I~Q@<ΙFz7ٸ98/I/[@<FTeE«799/I;d@<>FmJ~7X99/Ium@<<F5W79 :/IBv@<тFK!B#79w:/"I@<t6Fs 719.;/+I"@<TF˹79P;/EIU\@<ℲFـM7k9ÇC/I|@< F6v@x79z>/I{@<PFQtB7(9kxs?/I,@<ΙFmirl 79u?/I)@<հF|:pר79Ss@/Ic@<jFq nu79pA/FI?@<-pFQkWk7t9#nA/ I@< FGi57 9k&B/I?I@<iF?lg7 9iB/.IRJ @<7FS8eɧ79tf4C/RI@<F c7/9cC/UI=@<OF`b\7i9DaED/[I%@<FF^;&79^D/\I%/@<RߵF{b\;7"9&\VE/IP_8@<FD/Z7&9YE/IA@<FW7*9WgF/IJ@<hFUM7.9`TF/Ic T@<FvS<729QwG/IF]@<iF8]QV7Z69BOH/If@<ZFOM7T:9LH/Ivo@<iFtLq7.>9JI/I'x@<˰F#J:7B9GI/I,@<<FtH7E9D3J/gwIf@<pFC=Fͤ7I9QBJ/!I:@<lFC7[M9?=K/5Iٝ@<7FA]7 Q9'=K/nI@<ʱF?&7T9:VL/IMM@<&F7M=q7ZX98L/NI@<iF;17[9]5dM/hI@<_F8o7_92M/~I_@<hFW65H7(c970tN/vI4@< FW47f9-N/\Im@<[AF%2G٢7&j9+O/aIr@<m*F/7m9k(P/MI#@<;F-h7q9%P/sI@<foF[+07~t9@#Q/IT@<VFE )A7w9 Q/pI6 @<OF&7*{93R/I@<"Fߥ$s7x~9nR/I@<OFZ"(P7ρ9KS/I/(@<F  67 9?S/It1@<ERFA$7<9aT/ I4:@<~Fk 7f9 T/IC@<Fbo79fuU/IM@<ïF&679 V//IGPV@<[F7ɔ98 V/6I_@<ڴFş7җ9W/JIh@<7FX7՚9W/dIZq@<7FwT7ϝ9o(X/sI 7{@<pF 79X/pIp@<.F 79,AY/Im@<FHH79Y/I@<@<#FU79T]/Iw@<FX궎79^/"I@<2F_79^/IW@</F-ᶧl79w._/I%@<]Fܶ~37>9_/I^@<H;FU ض79C?`/Ij @<ΨFӶ7/9`/I @<F{϶V79Na/I  @<ΨFhʶBL7 9fa/I}E! @<F&Ŷ7e9db/I.* @<TFW/ٚ79-b/HI߸3 @<F!ϼ79yc/ I< @<FBe7B9 d/5IA,F @<F*79Nd/&I{ZO @<QF79e/*IX @< F}79e/HIa @<֯F}79z.f/BIk @<PFGkC79޺f/aI?At @<-|Fޜ 7 9EBg/UIz} @<NFU(Ϙ7#9g/uI @<TF07/9\h/}IR @<F8Y7"9]h/mI( @<F7 9­li/pIa @<F79%i/Ie @<{Fms79sj/Iմ @<Fry6n79إk/I @<UF9Xp37m9;k/IxH @< F6gn7-90l/I) @<ܳF^79l/Iڻ @<F0T79PJm/+hI @<FKH7C9m/$IIZ @< FmZF7 9vt/CI9d @<F_ 7 9sou/KIVm @<ŴF`Β79Dqu/JIv @<dF ag79nv/'Iվ @<F:=%X79 lw/ DI @<(3Fo79iiw/OI72 @<FR'79f&x/HIk @<-Fǝ79/dx/>I @<F)Rj79a@y/"EII߭ @<jF +-79^y/>AI @<eFǰ379A\Xz/H4IR @<FeFw479Yz/Y1I\ @<Fu4 z7Z9Wo{/qDI @<$F= 5>79WT{/v I @<WF 35/79Q|/<Io9 @<ALFԈX50ŏ79O}/HI s @<ݰF)?}5Z7(9zL}/HIѬ @<{F5|M79I,~/BI @<FU57W9,G~/NI3 @< F025Ԏ79DK/AIY @I J @<' F96-79&2/WIS @<(7FX$6`79/񧃼/JIl'] @<),F-6B73 9,9/HIaf @<*]Fw76w7e 96*/:IΚo @<+ cF@6:7 9'O/=Ix @<,~FFI6`7 9$ׅ/DI0 @<-4FcS6 ‹7 9^"b/=IG @<.EFB3\67 9톼/DI @IA @<5F=d6ۉ72 9C /+@I @<6F6D79 J/0=IC @<7/F6`79׋/H8IT} @<8eF+K6#7f9h`/H4I @<9F-679/mAI @<:oFX{6I79y/\?Ig* @<;{F36k7I9}/w2Id @<< Fɮ6.79񓎼/=Iɝ @<=Fc67`9C/AIz @<>KF6&79񦏼/=I+( @C @76eՄ7 9//-IwŖ @I( @I4 @7rv7b9nΝ/*;I @I5a @7z7&9/XIn @ @n7lp79N\/ <I|fv@<aF-|p7up79K岼/ ?I-@<.Fir7o729YIu/ CIو@<{Fg u7Qo7U9F/ NI@<eFzFw73n794D񆴼/ !HI@M@<NF~y7%n79A / @I@<eFu{7Щm7ӣ9?񒵼/ ?I@<-F}7'/m79h</ &IS@<F#7al799񨶼/!;I4@<F!B75l79D71/0!=Im@<}Fra7.k794񼷼/`!EIf@<yFl}7>k79-2E/!OI@<hFؙ7j79/ϸ/!BI@<cF7Hj7Ɏ9 -W/!8IyT@<hFqՆ7=i79i*幼/!*I*@<lF:7NNi7h9'n/!-I@<F7h7<9K%/!6I @<cFW37Xh79"~/";I=;@<VFO7g7~9/ /"3Iwi@<kYFGl7gbg7}{9񑼼/"=I(%@<Fo7lf7x9/ ";I.@<MF;7Lif7t9u񡽼/>"II8@<s*F[Ǐ7e7`q9(/D"<I;PA@<iXF7se7m9X񯾼/J"AIJ@< F7/d7j9:/Z"OIS@<DF!7yd7f9.¿/s"ZIN\@<hFR;75c7~c9 H/i"AI6f@<FV7c7_9 /x"QIpo@<hFq7c7d\9U/"PIax@<Fj7Ўb7X9/"RI@<PǴFk7b7U9_i¼/"KI@<̰Fƙ7a7tQ9¼/"WItW@<oF;7a7M9Iwü/"^I%@<TȶF-7`7J9ü/"^Iʦ@<-dF%7%`7YF9(ļ/"VI@<,F27 _7{B9ż/#LI8>@<FK76-_7>9 ż/"CIw@< Ff7^7:9Ƽ/"TI@<hF|78^769Ƽ/#6IK@< FC7{]739c+Ǽ/#CI$@<F7?]7/9Ǽ/9#RI^@</ٴFˤ7\7&+9U9ȼ/D#QI^@<ysF7J\7*'9ȼ/H#SI@< F7V[7'#9GGɼ/l#LI @<_ZF7U[79ɼ/#AIpE @<F(7-Z79>Rʼ/#<I!@<~F1>7WbZ79ʼ/#9I\@<FM\7Y79 c˼/#;I '@<hFQs73jY79˼/#5I 1@<0ٴFZ7X7m 9q̼/#9InZ:@<$F7lvX7=9̼/#\IC@<RFo7^W79|ͼ/#DIL@<GFkа7~W79zμ/#8IV@<Fm7pW7X9μ/#-I2A_@<Fg7ߋV7 9fϼ/#.Izh@< F87pV79ϼ/#+Iq@<dF"7U7K9Vм/#7IEz@<M%F<72U79̼м/#-I'@<^FcP7uT7]9NѼ/#4Ia@<|Fc7'T79ɷѼ/#CIX@<tBF v7S7p9F#Ҽ/#@I ՟@<FЈ7?5S79Ҽ/#GI@<țF7R7@900Ӽ/#8IkH@<[F7~>R79Ӽ/#7I@<^Fzǽ7Q79/6Լ/#DIͻ@< F(پ7LQ7}9Լ/$5I~@<UF7QP7׾9$Cռ/$9I//@<kF7 WP7 9ռ/#4Ih@<.F7O7Y9 Hּ/#HI@<UF%7dO79ּ/#8IB@<F!67N7۫9&O׼/$LI@<FD7zsN79׼/!$=IO@<˰FT7M7L9.Wؼ/#$PIU@<J F?d7M7x9ؼ/-$=I@<-dFy7M79)aټ/B$CI @<tF7L79ټ/@$IIh6*@<-|F 7L790hڼ/V$TIp3@<RFn7HK79ڼ/M$[Iʩ<@<F7$K7ӄ99kۼ/E$]I{E@<aF77$J79ۼ/Y$SIO@<F7w0J7z92rܼ/?$UIfKX@<ׯF7I7u9ܼ/^$WIa@< F.7@I7p9B~wݼ/R$UIȾj@<;Fd7H7k9{ݼ/_$aIys@<`F 7hPH7ff9@y޼/c$mI*2}@<6įF7^G7 a9v߼/e$fIk@<hFt)7]G7[9Rt߼/m$RI@<aF47F7V9q/]$KI=ߘ@<FI?7nF7Q9io/$MI@< F_J7E7\L9l /$XIR@<FeF[7u|E7F9nj/$[IP@<6F f7,E7A9g/$\Iƽ@<Fp7mD7^<9e/$]I@<cnFr{7D779c/$XIc9@<еF7LC719`/$ZIs@<ׯF7$C7-,9&^/$SIŬ@<xgFi7B7&9[/$[Iv@< F[7k7B7_!9KY!/%UI' @<Fɫ7A79V/6%RIY@<OF-7fJA7{9WT&/#%PI@<Fw7C@79Q/%AI:@<F7>Y@7J 9zO*/M%TI@<}F7?79M/b%YI@#@<eFa74m?7;9J,/y%PIMz,@<F7>799H/%HI5@<]FY7Ѐ>7 9E-/%OI>@<<F7 >7n9XC/%GI`'H@<UF7‘=79@5/%NIaQ@<F7.=79>/%OIšZ@< F7\<7H9<3/%SIc@<F70<799/%UIm@<kYF7 ;79076/%LI^F<8U/759/s&SIWf@<tF8go/7/9/\&IIRo@< tF8.7@)9%/V&GIBx@< 7ҳF38.7"9}/&HIjŁ@< ,F{8.79x/t&RI@< EF8-7Z9q/i&\IU-@< *Ft81-79/&YIg@<8F85,7w 9Xi/\&MI@<Fn8K,79/o&EIhگ@<oF&8+79]/G&KI@<FSe 8h+7J9N/C&KIM@<F 8P*79U/=&JI{@<ܳF^ 8n*7>9/-&RI,@<-pFA 8*79GJ/U&FI@</FiS 8)7T9/k&=I4@<ڴF 801)79>/V&?I?n@<AFG 8(7W9=/L&;I@<GF 87M(794/P&7I@<F> 8'79/U&KIR @<P߰F( 8l'79I'/H&XIU@<F18~&79//&^I@<iFǪ8&7a9/!&[Ie'@<.FJ'8&79H/3&TI1@< F8A%79 /&KI;:@<;Fb8:%7Z9/&UIxuC@< ~Fp8h$79V/&FI)L@B/%RI C@<(dFN8R!7]9/%NI |@<)dnF)8 7V96 /&NI b@<*1Fh>8t 74P9c /%JI @<+F8 7rI9" /%MI M@<,F!*8ǘ7B9ڢ /%FI W@<-Fa8+7;9 /%JI @<.jF8749F /%OI `@@<1 F:v8u7O 9 /&OI sx@<2-dF!87j9Dg /#&OI $@<3Fb87`9 /#&DI @<4hF@8,7z 9ːS/0&HI %@<5F)J8Z79/$&DI 7_@<6LF8T79R</%&GI @<7&F0879 /<&ZI  @<8F_8z79܇,/[&9I J *@<9/F879/D&PI E3@<:␰Fv879b/@&gI <@<; cF8k8796/l&GI ]E@<<F;q879~/V&FI N@<= F8b79|r/k&FI ,X@<>FT8X79}z/M&JI pfa@9#Qv/'KI @'LI >@@@7)*9+/ (I 'o@869K4/(I 0@<AF>8P6q94/(I :@<~Fm?8V6<95/(I ZKC@<ǮFw?86z9}5/(I  L@<hF?8)6s9 5/(I U@<{F2@8bu6Ll9$E6/(I m^@<nF^@86e9<6/(I 2h@<aF@8 6]9d 7/(I kq@<FEIA8Z6V9}o7/(I z@<>F_A86oO97/(I 0߃@<hFAB86H988/(I @<rF0aB8<6@98/(I R@<ïFmB86998/(I C@<8FC8C6{29\9/(I Ũ@<FLsC8)6A+9'9/(I @<!KFC8s6#9L#:/(I V9@<xgFq+D8D69y:/(I s@<쵳F/)Iz @<FH8dL69M>/ )I)@<mFWZH8̡69?/)I3@<(F7H869g?/")IU<@<eF I8aJ6Y9?/<)I>E@<#LF|`I8ˢ6S9(%@/F)IN@<FI8629a@/I)IX@< Fp J8aQ6&9@/Q)IQ@<hFb&R8t69pI/)I#G@<F^uR8A69o J/)IKQ@<FrR8?689UmbJ/)IFZ@<8F.S86i9kJ/)I6c@<oF;bS8$6y9jK/)Il@< F_S8?o69thhK/)Iu@<2FcS869fK/)II-@< FJT8=6F95eL/)~If@<FT8 69ceL/)I@< FT869aL/)I\ښ@<mFf0U8xx6.9V`M/)I @<kYF}U86b9^eM/)IM@<~F U8dI694]M/#*Io@<OFV869[ N/*I @<F`V8h 6q9ZaN/!*I@<1FV86͏9jXN/'*I4@<iFvV8L69VO/"*I3n@<FBW8a6t9OU\O/B*I@<#FΌW8+6{9SO/U*{I@<΁FW8<6Hu94RO/J*IF@<FX86n9PTP/U*IT@< FkX86h9OP/D*I @<iFX86a9uMP/&*IY@<JFX86[9KDQ/*I @<s*FHEY8g6T9^JQ/*I;%@< cFY8ٽ6N9HQ/J*Iku.@<FY8LK6G9DG6R/*I7@<FqZ86 A9ER/]*I@@<7ҳF?eZ8g-6:9ZDR/h*I~"J@<>F|Z826849B&S/[*I/\S@<␰F Z8L6-9XAtS/^*I\@<F8[86'9?S/*Ie@<jFȀ[8(6 9d>T/*IB o@<|F[8p69@<Fgq^8#69L._W/*Ifx@<hF^8&69,W/*}I@</ٴF+^869~+W/*I@<hF9_8369*?X/*Iy%@<FRF{_8}6q9(X/*I*_@<hFϼ_86g9R'X/*Iۘ@<;F_8} 6,9%Y/*qI @<>F@`8e6#9$fY/*oI= @<FRFv`8 6.9#Y/*yIE@<F`8c6'9!Y/+zI'@<7įFha8 699g CZ/ +vIP0@<hFvBa8$6 9Z//+I9@<Fia8 6"9Z/B+I,C@<eFZa8狭699d[/3+IcfL@< Fa8(6Y9a[/Q+IU@<hF@<"jȳFoi8+C6k9^Sd/|+Iw@<#_Fj8ڜ6J97d/o+I@<$ʱF Hj8r6=9!d/+I2@<%Fd{j8@ 609e/+I$@<& Fj8M6&9?e/+IS@<'YʰFj8X=69|e/+IΌ@<(֯Fk8՚6 9e/+I@<)7FGk8lo69e/+I0@<*Fyk8 69z'f/+I9@<+[Fk8639kaf/+Is@<,_ZFJk83D6O9Of/+IB@<-vFl8ޘ6N9Nf/+wI@<.ysF$?l8|699 g/+I @@<5тFm8 ە64h9h/+I{G@<6UFm8~6c9h/+I,P@<7^Fm86^9h/+vI'Z@<8P߰F/n86@Z9+i/+Iac@<9^FCEn8f6U9`i/+I?l@<:VFrn8 6,Q9i/+{Iu@<;1Fn8L6L9i/+I@<<Fn8iT6H9i/+IRH@<= FNn86C9.j/+I@<>oF$o867?9_j/+I@gF&o86q)90Yk/+I)@Z9 ot/,=Ig @<rFw8Ӏ6W9t/,AI!@<ܳFw86\U9t/"-AI !@<Fx8w6S9t/-CI&!@<穴F*x8)I6P9t/(-<I_ !@<4F@x86EN9t/->Ie)!@< FVx86K9! u/)-EI2!@<DQFpkx86I9#u/-7I 9Yu/-+I<-j!@<dFx8ŗ}6<9u/2-2Ifs!@<FOx8H}6:9u/%-8I|!@<|бF y8&|689u/)-9IOڅ!@<A4Fky8|669u/'->I!@<JF/y8d|649Kv/4-JIM!@<FpAy8|639ߘv/+-DIb!@<#LF:Sy8{6.19w0v/'-?I!@<ڴFdy8ދ{6O/9!Ev/D-GI!@<9Fuy8uF{6-9Wv/--NIu4!@<xFy8{6+9fkv/I-II&n!@<GFBy8z6 *9~v/H-HIק!@<֯Fy8J}z6K(9v/)-JI!@<aF%y8>z6&9Av/!-JI9!@<`Fy8y6%9v/(-=IT!@<FJy8By6q#9v/-NI!@<1F y8y6!97v/-PIL!@<fWFy89Hy6F 9v/"-JI"@<FPz8j y69v/-WI;"@<F z8Bx6J9Vw/9-PI_u"@<(3Fz8x69w/-MI""@<6įFm(z8|hx6w9Ǔ$w/F-WI+"@<ɛF85z83x69t3w/2-VI5"@<|бFBz8@w69"@< FNz8w6^9Ow/7-SI]G"@<FJZz8Pw6#9\w/2-YIP"@<ڴFez8lw69biw/3-QIY"@<RF qz8=w69.ww/P-JIp7c"@<.pF|z8w69ܑw/(-LI!ql"@<F*z8zv6W9w/T-RIҪu"@<FZz8wv6@9w/t-NI~"@<̘FRz8Vv6/9Aw/U-GI4"@<#Fz8gv6$ 9w/b-NIW"@<Fez8@v6$ 9ѐw/N-OI"@<Fz8%v6% 9w/I-LIGˣ"@<n*Fbz8Tu67 9nw/O-MI"@< Fz8eu6P 9Jw/l-HI>"@<۶Fz8Xu6n9w/p-PIZx"@<hFz8u69w/d-PI "@<OFz8pu69ȏw/s-NI"@<Fz8%Su69w/e-NIm%"@<Fz8f6u6?9rx/a-XI_"@<hFDz8mu69T x/n-KIϘ"@<FVz86u69+x/^-ZI"@<F0{8t6F9x/X-QI1 #@<bF{8Vt69x/W-NIE #@<GeF {8t6"9Ŏ!x/E-TI#@<!F{8t69'x/J-SID#@<iF{8t69,x/G-PI$#@<9F{8t69u0x/E-NI,.#@<Fr{8ot6#9f5x/X-UIWf7#@<aFY"{8t_t69U9x/`-RI@#@<hF%{8Pt6X9D=x/`-PII#@<CF({8Dt69.?x/U-RIS#@<hF+{88t69Ax/I-OIM\#@<ׯF.{8-t6v9Dx/M-LIU{e#@<wF90{8$t6;9 Fx/]-SIn#@<mBF-2{88t69Gx/O-MIw#@< F3{8t69Hx/W-QIg(#@<mBF4{8t69Ix/Y-SIb#@<-F5{8 t69Ix/N-VIɛ#@< F6{8 t69Ix/U-WIz՜#@<F6{8Kt69Ix/Z-RI+#@<yϴFO6{8t69 Ix/-LIH#@<hF5{8 t69Fx/<-QI#@<[Fs5{8` t69Dx/v-N>#@<穴F2{8t69Bx/b-G #@<kAF1{8t69@x/j-O /#@<F90{8et6;9,=x/q-S Qi#@<F.{8't6w9,9x/V-W #@<_F+{830t69@6x/b-M #@<wFM){8]:t69\3x/x-R d#@<hFE&{8NFt6M9l.x/q-M P$@<OF#{8"St69)x/p-Q Ɖ $@<FW{8at6 9%x/y-R w$@< F{8Qpt6p9x/S-S ($@<UF{8rt69x/>-U 6'$@<yFY{8xt6p9׎x/K-K p0$@<ܳF {8{t69 x/)-S ;9$@<uF{8ct6|9x/L-Z B$@<VF/{8t695w/L-V L$@< Fz8t69[w/W-] NWU$@<}Fz8+t6F9w/T-R ^$@<F4z8%u69w/M-Y g$@<dFz8=4u69Ïw/8-X aq$@<^Fz8Pu6o9w/R-N >z$@<ΨFz8lu639w/B-T Ll$@<2ڱF z8_u69Tw/S-P $@<#Fz8u69w/H-L ߕ$@< Fz8u6 9w/0-K _$@<)3Fz8u6 9w/A-O S$@<iXFtz8v6 9LAS_SpecdWF Data       laspy-laspy-a32c7aa/tests/data/simple1_4.las000066400000000000000000030664641463461040100210460ustar00rootroot00000000000000LASFGlobal Mapper w;$HXHXư>Jz>MbP???@l@?Y@?o@F@[l HXHXLASF_Projection@Georeferencing Information#   )#LASF_ProjectionDouble Param Arrayrmation@TXA?XA@sr@dhi@Bjtu0~-  =88@KL0cր[kj`[zg@T(؀zا(X @]P40c@ $`a@fXgod$KI=!@H?6-1$K@:@o@0N@=O(L=:^!J;66nXG>5@x}@H?8!J?;XG>7?C:5@@72@72@72HpF87@!J;8@H;5A60Q%@5/@4A7.CC60S!J?9ZbpF?9@q D;6ހ?61 @51cpF72@$K<7(I<6) E<5lB94@0NA;zaOK2 XgXSuWXOJ@( D@77A81;G!J=7~V HTE@@es_MIupfTRDw`NL,M@:@ɢ7/$ ,)MP20$x;81@!JB?(IA>V(IA>  E;9@@H><,@H><_;XG?<JpFA=@Y!J@>&i$K@>hx(L>=,MB@@,MB@/!JB?qXGD?P@RJG@hqd^8x{nhz8sjcnc]@Prc\A o`Y/cVN>s_PI@N~bUMJ]Xg]TlzaXQ{h<QK?@$KC8SP@RH<[YLCظh<QG>@0NA9\h<QB;LUD=LUH@@#WXOFew`VM#zaTK2`g\OF@,B[YK@nQs_OB`xc[K>o`g\L=@5~bUEwȩm]Nhq_QvdX@>zg`ucYn]S@hXK@GdRFs_L>SWE7'SWJ:@P6eUHEk]TT`g\RId E>6@Ys94.`<92ݑ@;5 B=9@b@HA;0NE>8PF=)WXKC@k~bUMPrc\ x{md2H}of@t*yk`9ui[Hui[;XoeY@}gn`Uv~bTIP@RF:DpF:.@$K?3ȳxc[MB zf[Ml^@n`o^ p^V `|k[@ ȩm`O- cWG= w`SC_L w`PC@[ w`OEj WXL@%z 8DSI=h 8PF:@ (I=1 D:.. @H<0q pF8-@ XG=3 @H>47 E=2z C;0@ @6,! @8-@1 B:/@ E;2@O XG:4_ pF91In !J=4} @H>4@Ό (I?5 0ND:R xc[QH WXNE@ 8PF= @H>5[ D7. pF8/@ !J=4" 8PC:d% SWK?4 0o^RF@C ~bXN+S d\Qmb s_UKq _ZNB@ 0ND84 !JB5v (IC5 $KE5@ (IB2= XG>- C<* H=8%@ x;4$F 0>6) !J@4( ,MA5@ 8 @H@3OG @HB6V 0NH<e 4OG:@u 0NE6X ,MF4 P@RI8ݢ 8PI9@ OVM>a WXO@ _ZSC _ZQB@( [YK>j 8DSE: P@RD; 8DSF=@1, OVLBs; SWMCJ HTLAY 8DSJA@:i h<QH?ddf@B(inqoyz-He =@KLCр[gj`[zH_@T~ր~ا@]Ck$ B@f~bj](IG;!(I@7-1!JA<@o@,M?9$K@:(I@9?C:5@?6/?61@64HA55@ D63B71C60Q%B5-@4@6-C E61S(L>;Zb(I@;@q D=7ހ0>7/ A60c@H94@4O<80N?:)@H=7lpF=6@,M@8`g\JF2 ~bSNu HTKD@(B>37A8/;G(L=6~VLUD=@e`g\JFuw`QLD`g\OI(LB9@ɢ:2' /+MP22&A=4@4OF?4OFAV0NE> (LC>@P@RID,0NG?_;4OHBJ HTMG@YLULG&i8DSHDhxLUGDLUHB@SWHC/h<QHAq0NJA_ZQJ@xib8x{pjzPri`ȩmd[@pbYA p_W/@hZQ>zaTK@NXgZQJ]lbYlpf\S{SWOD@P@RHxg]p_Ul\OjZM@G(iWIdQCxc[K;'[YL<@P6eUHEȩm\RTs_UKd(IB8@Ys@9/A=4ݑpFB9 $KD>@b8PG@LUKB[YOE)xc[QG@k~bZOPre\ th2sh@t*`|na9wk]Hxl^;XneV@}gj^PvcUJLUI;D(L@2@8DSG7ȳdTG wfVMH}hW@x{dTweQ wfTV teR@ j]J- ~bWE= s_TB_L s_RB@[ s_RBj SWN=%z 8DSJ9h h<QH7@ !J>. E9+. pF:,q (I<,@ (L@2 (LB67 $KC6z !JB5@ (I?3! pF=.@1 XG>/@ ,MA5@O 4OA6_ 4OA4In h<QE7} P@RF8@Ό HTF9 WXO@R zaWK `g\RH@ HTL? 0ND8[ (L@2 0N@3@ 8DSE8" WXL>d% Hk]QC4 w`TF@C cWI+S cZKmb e\Mq zaXG@ `g\SB4 xc[RAv xc[RA xc[RA@ `g\Q?= OVK5 HTI3 (IA*@ E=*F ,MB0 _ZM<( `g\O>@ 8 WXP=OG HTM:V [YR?e [YQ>@u WXP;X [YQ< xc[P<ݢ WXM9@ xc[S@a zaVD `g\TA 0o^Q@@( Hk]M>j WXH9 HTF9 WXJ=@1, _ZQBs; `g\SDJ `g\SDY `g\RF@:i _ZQB-1caf@B-1dgl-1dml--10~ =-1|@KL-1[-1Cj-1xWz-1xW@T-1nՀ-1vا-1C-1,@]-1`[Ā-1v-1$-1&@f-10o^dX-1$KE9!-1@H>5-1-1@H?8@o@-1@H=9O-1(I;8^-1@H966n-1XG96@x}-1pF=6-1$K@<-1!J?;?-1C:5@-1@72-10>42-1?74H-10>43@-1?40-1?6/-1A60Q%-1B5/@4-10>3-C-1 D93S-1@H=7Zb-1@H?:@q-1pF?7ހ-1 D=5 -1(I?6c-10N?:@-18DS@<-18DSD?)-1,M@8l-1$K>6@-1,M>7-1LUC?2 -1[YJEu-14OD>@(-1B>37-1 D<1;G-1,M?6~V-1 HTA:@e-1_ZIBu-1Hk]PJD-1_ZKF-1,M@8@ɢ-1`<4) -1 40%M-174+-1 D=5@-1h<QHA-10NC=V-14OD> -1$KB;@-18PE?,-1,MD=_;-1h<QJDJ-1xc[TL@Y-1Hk]SJ&i-1`g\OIhx-1_ZME-1_ZLC@-1xc[J@/-1SWJAq-1 HTNB-1Hk]UJ@-1qj8-1vnz-1ulc-1lbX@-1n`WA -1PrbU/-1ȩm_T>-1(i[P@N-1k_SJ]-1hqeYl-1lbV{-1~b[K@-1Hk]SGS-1s_SG-1zaSHظ-1~bUL@-1zaSJ\-1[YK@-1_ZL?-1xc[OA@#-1w`VJe-1dXJ#-1~bTI2-1~bTG@,B-1zaSFnQ-1cSD`-1Hk]N;o-1cVC@5-1(i\Iw-1PraO-18s`O-1PrbS@>-1PreU-1ȩm`P-1(i\L-1k[L@G-1lZL-1@hWG-1zaR?'-1`g\O>@P6-1dTEE-1ȩm]PT-1w`VJd-10NF9@Ys-1 D>2-1@HD8ݑ-14OH> -1LUKB@b-1WXNE-1xc[QG-1Hk]SI)-1`g\TI@k-1c[P-1pf\ -10~pe2-1pc@t*-1H}m^9-1wjZH-1hqeU;X-1k_O@}g-1eYKv-1cWI-1`g\PBD-1OVJ:@-1`g\Q?ȳ-1j]L -1 tcQM-1wbO@-1 t^I-1lZD -1j^HV -1l`J@ -1eYC- -1zaVB= -1Hk]U@_L -10o^Q@@[ -1Hk]R@j -1[YQ<%z -1LUM8h -1 HTI5@ -1P@RE4 -10NA0. -1$K>.q -18PC2@ -1 HTI7 -1WXL>7 -1_ZQBz -1SWP>@ -1_ZN>! -1SWO<@1 -1_ZO=@ -1_ZM=@O -1xc[N>_ -1w`P@In -1s_RA} -1~bUD@Ό -1dTD -1s_SCR -1~bYJ -1s_VG@ -1[YP? -1OVJ:[ -1LUH7 -1SWJ9@ -1Hk]P?" -1eUEd% -1@h[H4 -1(i\K@C -1Xg\J+S -1Xg\Jmb -1j_Mq -1ȩmbN@ -1laK4 -1laKv -1ncM -1ȩmaK@ -1ȩmaK= -1ȩm_E -1(i[A -1Hk]Q9@ -1Hk]Rc8DSD=@ HTC<P@RC<)P@RE<l4OB:@(L=68P?82 P@RC<u(LC<@(@HA77!JB5;Gh<QC8~VSWD=@eSWHAuOVIADLUG>(L>5@ɢ@8- :6+Mx;7.C:3@XG>5@H>5VXG<6 A8/@B92, E<5_;$KG>Jxc[TL@YcYP&idUNhxzaRKw`RI@`g\KA/OVH;qLUN>`g\RF@ul8XzqzxpcndZ@ocUA hqdT/n`S>k]P@Nk_SJ]hqeWlhqhY{ofW@lcTS@h\NpfXKظeWL@pfUK\~bTG0o^PC0o^RB@#0o^UFezaUE#zaUE2~bTG@,BdWGnQcSC`zaR?ow`T>@5pfYFwp_Khq\Il[K@>ȩm`Ol_Nȩm]Mo_O@Gp_Oo^NXgXC'w`S@@P6eXGEl_OTc\LdLUO?@Ys(LI80NK<ݑSWQC s_UK@bzaWMdZN~bZM)zaZJ@ke^NȩmcW vj^2x{i]@t*vfW9pcRHȩmbP;X(iaN@}gc[HvzaUE~bUEDzaTA@eXEȳnaP veQMvdP@uaIp`G nbJV nbJ@ l`H- Xg\F= dYE_L eVC@[ ~bUBj ~bWC%z s_T@h `g\Q;@ _ZO9 xc[N;. `g\O<q `g\O<@ Hk]P= zaTC7 w`XEz w`ZD@ zaYD! zaVB@1 ~bUB@ ~bUB@O dUB_ dUBIn ~bV@} pfW@@Ό pfUC ~bUBR dYG w`UC@ WXP; OVK7[ OVJ4 [YL9@ zaR?" @hYFd% ȩm^I4 ȩm^K@C @h[H+S @h\Fmb l`Hq nbH@ ȩmbF4 ȩmaGv nbH ocK@ 8seK= PrbH pbG odH@ ȩmaGF nbH wgN( wgN@ 8 ukROG 8sgMV pdJe l`F@u odHX odH ncGݢ l^D@ PrbKa 8seJ ocI l]F@( lZFj (iXD @hYF @h\F@1, k_Is; k`JJ k`JY l`J@:i l`HZb0o^\_@BZbs_^cZb0o^bc-Zbepl =Zb t}z@KLZb2[ZbjZb$zZbK@TZb0cՀZbnاZbCZbG@]Zbz΀ZbZb$Zb@fZb`g\bTZb$KG;!Zb!J=5-1Zb D;4@o@Zb E:6OZb@H:7^Zb@H966nZbpF93@x}Zb D93Zb@H96Zb(I<6?Zb D;4@ZbC82ZbB94ZbA83HZb@64@ZbA62Zb@5/ZbB5-Q%Zb E61@4Zb E80CZb(I<4SZb,MC:ZbZbh<QF@@qZbh<QHAހZbOVLC ZbHk]PHcZb`g\OG@Zb[YLDZbOVIA)ZbOVIAlZb8DSF>@Zb8PC:Zb8PB92 Zb8DSB:uZb,MC:@(Zb!JB77Zb,MC7;GZbP@RD7~VZbSWE;@eZb HTF=uZb8DSF=DZb8PC:Zb@H>4@ɢZbB<0 ZbH=9.MZbH=6.Zb@5/@Zb D:1ZbC82VZb@5/ ZbH=4-@Zbx;2+,Zb`<5/_;Zb E>6JZbOVOE@YZbd\Q&iZbXgZQhxZbeXOZbpfXM@ZbzaQD/Zbxc[KZbȩm`P@NZbȩm_RJ]ZbobRlZbhqeU{ZbPrfV@ZbPrfVSZbobQZbȩm`PظZbȩm`P@Zbj\O\Zb(iYJZbeUFZb~bWC@#ZbdWDeZbdWD#ZbeXE2ZbeXG@,BZbjZJnQZb@hWE`ZbeVAoZbpfWB@5Zbj[FwZbhq_KZbhq_KZbn]K@>Zbj]JZbn_LZbȩm^IZbȩm`M@GZbpaLZbn]IZb@hYD'ZbcWA@P6Zb(iZGEZbk^KTZbpf_LdZb`g\YF@YsZbLUR?ZbSWQAݑZb_ZSC Zbs_UI@bZbw`VJZbcYMZbcZI)Zb~b[I@kZbe\KZb@h\L Zbk_O2ZbnaQ@t*ZbȩmbP9Zbk`LHZbXg\H;XZbd\I@}gZbcXFvZbcVEZbdWDDZbdXB@Zb(iZCȳZbnaN ZbPrcNMZbPrbK@ZbhqaHZbhqcH ZbȩmaGV ZboaG@ Zbl]F- Zb@h\D= ZbeYA_L ZbpfW@@[ ZbcWAj Zb~bX?%z ZbzaU;h Zbs_S9@ Zbs_S; Zbw`Q:. Zbw`Q:q ZbcU;@ Zb~bS< Zbw`T<7 ZbzaV@z ZbcY@@ Zb~bV>! ZbcW?@1 ZbzaU=@ ZbdU@@O ZbdS?_ ZbcS@ Zbxc[O7 ZbSWK3[ ZbWXL4 Zbxc[O7@ Zb~bS<" ZbeV?d% Zb@hYB4 Zb@hXA@C ZbeV?+S ZbeW=mb ZbeW<q ZbXgY<@ ZbXgY<4 Zb@hZ?v ZbXg[A Zbk]C@ ZbPrbH= ZbhqbE Zbo`C ZbpbE@ ZbPrdIF Zb8seJ ZbvfL( ZbwfL@ 8 ZbvhMOG ZbwiNV Zb8seJe ZbpbG@u ZbhqdDX ZbhqdD ZbPrcFݢ Zbp`F@ ZbhqaGa ZbPrbH ZbPrdG ZbPrbH@( Zbp^Fj Zbȩm]D Zbȩm^G ZboaG@1, ZbpbHs; ZbhqcHJ ZbhqcIY ZbpbG@:i ZbhqbEw`\]@B0o^^`s_`b-w`fd =dil@KL`|~}[(jpzP4@TOрgا88C@]p΀8$0~}@f_ZcP$KH9!@H>4-1pF=4@o@pF;5O@H;5^@H946npF93@x} E82@H94!J;6?XG=4@XG>5pF=4 E<5HC:5@A60B5/@3-Q% E6/@4(I<3C$KA7S8PF<Zb HTKB@qOVLBހ0o^RF pfXOceXO@w`VLs_UK)0o^TJlSWMA@LUL=LUG<2 8DSE8u8PD6@(0ND874OF7;GP@RD7~VLUC9@eh<Q@6u,MA5DXG>/ E=0@ɢB<. ?9-M@3+A2+@A4,A4,V?4. x;2+@8/&,92(_;C=1JSWOD@Y@h^R&iocWhxnbTȩmaQ@@hXH/pfUEq~bRBXgZJ@wgZ8ugZzofW(i`Q@(i`OA @haO/jbO>laM@Nl_LJ]PrcNl thR{ujT@ tmSSvlS8sgQظPreR@hqdQ\PraOp^Jn_H@#hqbKePrdJ#hqbK2PrcN@,B tePnQ8sdM`paJon_H@5hqcIw tbJueNPrcL@>k_GpaJl`H(i_F@Gk_Ek\EXgXA'cW?@P6pfW@EdX@TzaYBdHk]WA@YsWXR<LUO9ݑ HTN8 xc[P>@b_ZR?0o^RBzaTA)0o^S?@kzaU?w`S@ zaVB2~bWC@t*zaYB9s_X>H0o^W=;X0o^V?@}gw`U?vw`U?~bV>D~bT:@eW=ȳj\B j`EMk_E@k]BXg\@ (i[AV @hZ?@ XgW=- XgW== pfV=_L pfV<@[ ~bW;j zaV8%z ~bW;h ~bT7@ ~bT9 ~bR8. dS9q pfW:@ pfW: @hX>7 (i[@z k[A@ k[A! l^C@1 (i[@@ @hX?@O jZ@_ (iX4 @hY<@C @hY<+S jY=mb (iY8q (iZ9@ @hY:4 XgY (iY?@ o`C= n_B p_A o`A@ PrcDF pcC PrcD( xgK@ 8 PrcFOG  tcGV  tcEe PrcD@u PrcBX 8sdC wgFݢ veI@ ziKa x{lK `|mL `|mN@( x{lMj H}lN H}nQ nP@1, oNs; pOJ nPY 0~nL@:i oMs_Z^@Bw`^azacb-zaed =ejm@KLvvx[tjz@TP4ǀSا h0@]nˀX$`|{@fWXaN!JG6!@H>2-1 E=2@o@ E;2O@H92^(I:36n(I;2@x}@H92@H:1(I<3?@H>4@XG?4@H>4@H>4HXG>5@ D:1C4-A3*Q% E7.@4!J>2C,MC7S8PF:ZbLUKA@qSWJAހs_QH (i[Pcpf\P@d\OcYM)s_UIlOVNA@8DSL<LUI;2  HTF9uP@RF8@(h<QE770NE6;G4OC5~VP@RA7@e8P?5u(L@2DXG>/ D=-@ɢ@:, @6,M D3,pF5.@ E6/ E80VXG:2 @6-@`<4),x;5'_;pF>1J_ZNB@YkbS&ipdThx8sfUPreT@n_L/ȩmZIq(iXFȩm^K@o_O8naPzȩmbPlaO@(iaNA keO/ȩmgQ>PrhO@N8sgOJ]yiPlx{mS{znT@x{rUSH}rVH}oUظzlR@yjS\wgPucMyjM@#zkNezkL#yjM2xhO@,BxjPnQyiP`weMohq_G@5hqaGwPraGPrbHpbG@>laEoaFlaEk`D@Gj_Al^Ck[B'@hZ?@P6@hZ?EXgY>T~bX=dHk]V<@Ys[YR8_ZS9ݑ[YQ: Hk]R<@bHk]R>`g\Q;s_S;)0o^O8@kzaR;zaR; ~bX?2zaW>@t*s_U<9xc[T8HHk]V:;Xs_U<@}g0o^T9vzaU;dV;DdU6@eV9ȳjZ@ j^DMn`F@ȩm_Dk`B hqaGV PrcF@ PrcD- 8sbF= 8sbF_L hqbE@[ oaDj oaD%z PrcFh 8sdE@ PrbH PrcF. 8sbDq ueD@ udF udF7 xgIz yhL@ yhL! vgH@1 ugJ@ ufI@O veK_ xeGIn wdD} vaB@Ό ydE zgGR wfH  teH@ PrdG 8sbF[  teH ugL@ yjM" x{lOd% xjM4 uhH@C vgH+S zgImb wgFq yiG@ vgF4  tgGv ufI vgJ@ wfJ= 8sbF veG yiH@ whIF whG ziK( lL@ 8 H}lNOG H}jLV zjIe whG@u x{lKX H}oL rRݢ pS@ wWa zX "|[ "|[@( "|[j h6~^ h6` 2_@1, P:^s; 2_J .^Y 8>\@:i P:\,`g\Z[@B,s_]^,zaa_-,zafb =,pfjk@KL, ttt[,j,z,(@T,$ŀ,88ا,, @],gɀ,n,($,wo@f, HT\E,XGD1!,pF=.-1, E;/@o@, E;1O,(I;2^,XG906n,XG;/@x},XG:1,XG;-,@H>2?,!J@4@,(LB6,(LC4,(LC4H,,MC9@,$KA5,C9-, D8,Q%,@H<0@4,$KB3C,8PG8S,8DSL<Zb,LUK?@q,WXL@ހ,0o^PC ,dVIc,j^P@,d]K,e\M),eYKl,`g\UE@,`g\WD,xc[TB2 ,[YP?u,_ZN>@(,WXL<7,LUL=;G, HTH:~V,LUE8@e,LUH8u,P@RF6D,h<QE5,,MD3@ɢ,(IB2 ,(L?6M,8P?7,P@RA9@,8PB9,8PB9V,0NA8 ,0NB6@,!JA0,,(IB0_;,8PG6J,Hk]QA@Y,(i^L&i,pcPhx,PreR,hqeO@,hqbM/,o^Jq,o^J,paL@,PrcN8,obOz,obO,nbL@,odNA ,PrjS/, tnT>,ulO@N,ujNJ],xjOl,H}mS{,rU@,rUS,`|qS,0~oRظ,H}mS@,zlR\,yhN,zfK,yhJ@#,`|kMe,`|lK#,`|kM2,xjM@,B,ykPnQ,xhN`,yeJo,wcH@5,8sbFw,8sbF,hqbE,hqcF@>,obB,pcC,hqdD,peE@G,hqcF,pbE,paD',o_E@P6,o`CE,l]@T,@h]?d,e\?@Ys,zaX;,zaW<ݑ,zaW< ,w`V;@b,zaU=,cU;,dT;),eU;@k,@hX>,jZA ,k_E2,k]C@t*,(i^B9,(i^@H,k`B;X,l^D@}g,l^Dv,ȩm]C,n_@D,8scB@, tdCȳ,PrcD ,vhKM,xjO@,zlO,x{nN ,0~oRV ,qS@ ,uT- ,XvX= ,XvX_L ,XwV@[ ,p yWj ,XzZ%z ,(z[h ,{Z@ ,"{] ,&|^. ,&zYq ,(yU@ ,wV ,"wX7 ,"wXz ,&zZ@ ,&zZ! ,"yY@1 ,{\@ ,y[@O ,z\_ ,(vVIn ,uV} ,&vW@Ό ,*zY ,*{ZR ,"yY ,&z\@ ,"|[ ,z\[ ,"{] ,&~a@ ,*b" ,.ad% ,.b4 ,*`@C ,*}_+S ,2}_mb ,h6~^q ,.]@ ,.^4 ,.~`v ,*}_ ,z\@ ,"y[= ,"y[ ,&z\ ,.^@ ,._F ,2_ ,h6|]( ,P:}^@ 8 ,P:_OG ,2}]V ,&zYe ,@xV@u ,&}[X ,2^ , Baݢ , Bc@ ,Qda ,x]h ,Yi ,Ug@( ,Yfj ,Heg ,ql ,tm@1, ,mms; ,0ilJ ,0ijY ,x]f@:i ,0ie_ZZX@BHk]][w`a\-zac^ =egd@KL8sto[jz@Th0ĀP4ا@ (@]CÀ@$8sj@f8DSXB@HF1!!JB/-1(I@/@o@(I@1O,MA3^4OA46n(L@2@x}$KB3,MD58DSG9?OVJ:@LUL;WXM;[YL;HWXL>@OVJ<8DSG74OC3Q%8DSG7@4OVO=C[YP?SWXQ?Zb_ZQ@@qzaTDހdWG pfXKc@h\N@pf]N@h_N)@h\Llc\L@c\Ic\J2 s_ZGus_XF@(`g\UC7xc[RC;G_ZN@~Vxc[M@@exc[N>u_ZN>D[YM=WXL<@ɢOVM> `g\KAM0o^L@s_MA@Hk]M@s_NDVw`PC xc[M@@SWJ7,[YN:_;zaTAJ(iZG@Y8sbN&i tcOhxwhQxjP@wiO/ tdKq tdK tfL@PrcL8hqbKzhqbKhqcI@ thNA xlR/zqT>zqR@Nx{mPJ]`|mNlpS{sV@tTSqRnPظH}lP@zmM\yjMyhJzgG@#0~iJejK#lL2`|kM@,BzkLnQyhL``|gJowdF@5 taCw taC8sbDpaB@>o`?ubBhqa@o`?@GpaBhq`Bhq`D'Pr^C@P6p_AEȩm^?Tj]=dpf[;@YscX:pfX;ݑeZ< pf[=@b@hZ?jZ@ȩm\B)p\A@ku`EuaF ueK2x{jN@t*x{jL90~oPHtW;XrV@}gpTvnRqPDp rQ@(uTȳ*yZ 2{^M2}_@h6~`P:_ 8>bV Ic@ Mc- Ic= Ie_L Mh@[ x]jj `aj%z Hejh 0ik@ |q |p. mq tj@ Hef qi7 |lz m@ tl! tl@1 ql@ qm@O qo_ 0ijIn 0ij} mk@Ό ql qlR tl 0ik@ Hej 0im[ ml Hen@ 0iq" Heqd% `ap4 x]m@C Hep+S mnmb tnq |p@ xq4 xqv xq tp@ |o= mk 0il |r@ xsF Xt t( (r@ 8 qOG pV tme `ai@u x]hX `ai toݢ xr@ xna q pw t@( @sj (t (u Xt@1, rs; rJ |pY pp@:i @rJ][YZT@BJ]`g\[VJ]Hk]\X-J]~bc] =J]de_@KLJ] ttl[J](jJ]zJ](@TJ]J]اJ]J]@]J]J]pJ]U$J]hq{c@fJ]Hk]_IJ]OVR9!J]SWL8-1J]WXM;@o@J][YN6nJ]SWO<@x}J]OVO<J]WXQ>J]Hk]U@?J]cXD@J]dWDJ]dX@J]dU@HJ]zaTC@J]w`SBJ]0o^S?J]xc[N;Q%J]`g\Q?@4J]`g\T?CJ]s_WBSJ]~b\FZbJ]e]J@qJ](i^LހJ]j_M J]@h\LcJ]@h[K@J]@h\LJ]eZH)J]cVElJ]s_XF@J]s_XEJ]0o^YE2 J]0o^YEuJ]`g\UB@(J]`g\TA7J]WXP=;GJ]SWK;~VJ]SWJ:@eJ]SWL:uJ]WXM;DJ][YM=J]_ZO=@ɢJ]0o^Q@ J]zaQBMJ]~bO@J]0o^M=@J]s_P=J]zaP>VJ]~bQ? J]s_RA@J]dU>,J]k[B_;J]o_FJJ]xfN@YJ]nV&iJ]qXhxJ]0~nTJ]oU@J]H}oR/J]x{kQqJ]zlOJ]xjO@J]xjO8J]xjOzJ]zjPJ]ykN@J]x{mPA J]`|nQ/J]qT>J]qT@NJ]qTJ]J]pTlJ]qS{J]qS@J]rQSJ]pRJ]nNظJ]nP@J]x{nN\J]x{jLJ]zgGJ]H}fF@#J]0~jIeJ]`|iH#J]`|iH2J]0~kK@,BJ]zjInQJ]yfF`J]xcFoJ]wbC@5J]8s^?wJ] t_@J]hq`BJ]PrbA@>J]wdCJ]yeDJ]wdCJ]8seB@GJ]8sdCJ]ueDJ]zeJ'J]zeH@P6J]zeFEJ]wgFTJ]ufEdJ]ufE@YsJ]vgHJ]wfHݑJ]yjK J]x{lM@bJ]x{lMJ]`|mNJ]nQ)J]@pT@kJ]&sXJ]vY J].{`2J]P:}b@t*J]h6|_9J]IbHJ]`ah;XJ]x]i@}gJ]UhvJ]YfJ]YaDJ]`ab@J]xgȳJ]k J]oMJ]Xs@J](sJ]@r J]@tV J]Xs@ J](t- J]pp= J]xn_L J]q@[ J]@rj J]s%z J](th J]ȣv@ J]h{ J]P}. J]8|q J]u@ J]u J]t7 J]hvz J]8y@ J]v! J]y@1 J]y@ J]ȣx@O J]w_ J]yIn J]t} J]v@Ό J]w J]vR J]t J]@t@ J](s J](u[ J](u J]@u@ J]v" J]xd% J]v4 J]x@C J]v+S J](xmb J]zq J]z@ J]{4 J]xv J](w J]v@ J]w= J]ps J]ps J](w@ J]@wF J]{ J]h}( J]y@ 8 J]zOG J](wV J](we J]s@u J]toX J]qo J]|sݢ J]pv@ J]qa J]u J]w J]pu@( J]@tj J]t J](s J]r@1, J]trs; J]tqJ J]qqY J]xr@:i J]pt_ZZN@B0o^[Rs_[R-w`]T =pfcZ@KL8soc[0ij z@Thاp@]p$lpY@fcaJw`Y?!w`T<-1w`T>@o@zaTAO~bV@^w`T>6n`g\T=@x}Hk]W?w`XAXg[C?ȩm^G@n_Hp`Gl\CHeV?@w`U?s_S;Hk]Q9Q%Hk]R<@4Hk]U>CzaZ@SXg`FZbodN@ql_Lހ@h[H cVCczaR?@cT?Hk]Q;)[YL9l HTL7@ HTL78DSM72 P@RL6u8DSK6@(LUM67h<QI4;Gh<QD1~V8PC0@e4OB/uP@RG3DSWJ7Hk]N;@ɢ~bS@ eTBMpfSBcR>@(iWAkYCVp^H 8scL@PrbH,zfM_;kPJqV@Yp rY&ip uYhxp rWrV@0~oR/H}oRqx{mPzlO@`|mP80~oRz0~oRH}nQ@pSA H}nO/pQ>rU@NpVJ]oTloT{sU@XwVSwWuVظp uW@tU\rTXrSXsR@#(rRep rQ#@qQ2.xX@,B(vVnQuX`(oTo@oQ@5lLwlMmNXtT@>(uT&vT(vU@xW@GxX&zZP:z^'P:z`@P6.z[E.|\T*~]d.~`@YsP:~c8>dݑ8>b P:a@b8>bIc0ih)0ig@kxkm xp2o@t*l9@oHt;Xu@}gtv@qXmDl@ȣmȳht vMȣv@wx xV ȣw@ v- w= u_L (t@[ (tj ȣv%z vh hx@ h{ 8}.  }q s@ ȣq o7 qz v@ u! w@1 u@ ȣv@O u_ ptIn Xs} q@Ό s vR Xu pr@ q Xp[ |q |q@ mr" Hepd% mr4 |t@C u+S |xmb pwq pv@ pt4 |ov tm tm@ q= qn mn xp@ xrF tq to( tn@ 8 sOG tV |qe qn@u YjX Yj Hemݢ 0iq@ Yma x]n Hep mr@( |rj xp qn Yl@1, Mis; QjJ UlY x]n@:i mpww`]N@Bwza]Qww`\P-wd^P =wpf`P@KLwhqjX[w(ojw2yzwP:y@Tw.uw"rاwjwH}}a@]wewcwnnR$wpfeI@fwc]Cws_X;!wzaS8-1wdT;@o@wdT=OwdT;^weW=6nwcY>@x}w~b[?we^Awn`E?wPrbH@w8scIw tcGw8s_FHwk[A@w0o^S7w`g\N3wxc[M2Q%w_ZN4@4wxc[R5CwHk]V9Sww`Y=ZbwcY>@qwdX@ހwzaU= ws_P9cwHk]M6@ws_O8w`g\M6)wWXL6lwWXM7@wWXM7wOVN72 wOVP6uwOVO5@(w[YO67w[YO6;GwHk]N7~Vw`g\M6@ew0o^R:uww`Tw&~_@Nw2cJ]w BclwIe{wIg@wQgSw`aiw0iiظwUh@wIh\w`amwtmwmh@#wx]dewx]e#wUb2w`ad@,Bw`afnQwx]g`w`ahow`ad@5wMcwwMcwYhwYf@>w0igwxhwmhwx]h@Gwmkwxnw|o'wtm@P6w0ijEwqmTwmndwxp@Ysw|qwxsݑw|r wxo@bwxpw|ows)ws@kwtwt wȣw2wu@t*wx9wuHwPy;Xww@}gwtvwswqDwk@wfȳwXl wXlMwk@wpnws wsV w(s@ w@q- wpo= wn_L wk@[ wqij wtj%z w|kh w|l@ wn wXq. wsq wq@ wi w0ie7 wtfz wxj@ wHef! wHeh@1 wmi@ w|l@O wp_ wtqIn w`al} wIf@Ό wIf wQhR wUg wHek@ wp wq[ w|q wmp@ w0is" wx]nd% wUk4 wHeo@C wxu+S wxmb wxq wXz@ wXw4 wpuv wu ww@ wy= w(z wz w{@ wF w w~( w{@ 8 wȣ}OG wȣV w{e wz@u wxtX wx w@zݢ w@{@ w|xa wy w( wh@( wj wP w} wx@1, wws; wp{J w|yY wqu@:i ww'@h`M@B'j^N'Xg^M-'e]J ='ncQ@KL'8sfS['x{oYj'H}r\z'x{tZ@T'yrV'yrVا'unQ'ohK@]'oiI'ohK'lcD$'jaB@f'(i^B'(i\Zb'j_A@q'n`Eހ'n`C 'k[Ac'nZA@'lZB'ȩm[C)'kYCl'k[B@'k]C'k_E2 'kbEu'ncG@('pbG7'hqcH;G'ueK~V'xfN@e'yiOu'zjPD'oU'u\@ɢ'za '2|dM'h6}e'h6{d@'8>f'IiV'Yk '`am@'Uj,'Yg_;'x]gJ'Ye@Y'Mc&i'Mchx'Ug'x]i@'Yf/' Beq'P:c'Mh@'Uj8'Ykz'0il'mp@'qoA 'mp/'mn>'mq@N'qsJ]'ptl'@w{'(x@'(zS'|'yظ'Xx@'v\'@y'ȣy'v@#'@re'po#'Xo2'|l@,B'|mnQ'ql`'tmo'|k@5'tlw'xn'p's@>'Xo'Xn'|m'tp@G'xp'Xu'ps''p@P6'tmE'xqT'qqd'r@Ys'ts'qrݑ'qp 'mo@b'Hek'ql'pp)'m@k'n'|o 'to2'0il@t*'xo9'@sH'Xs;X'pq@}g'|ov'tm'lD'pk@'qfȳ'qh 'mgM'Yd@'Ye'Hej '0inV 'xp@ 'xn- 'tm= 'ql_L 'tm@[ 'mmj '|o%z 'prh '@u@ '(v 'Xw. 'pvq 'z@ 'v '(s7 'Xtz 'u@ 'tq! 'pw@1 'Xw@ '}@O '_ 'In '} '|@Ό '0iv 'QpR 'Qn 'Xz@ ' '[ ' '@ '" ' d% 'h4 '@C '+S 'hmb 'q '@ '`4 'v '8 'h@ '= ' ' '0@ 'F ' '( '@ 8 'OG 'V 'e '@{@u '|wX ' 'ݢ '@ 'Pa 'h '0 '@( ' <j ' 'x 'ȣ@1, 's; 'J 'Y 'x~@:i 'mvpT@BoTnS-nS =p qT@KLXtV[tVj&z\z*z_@T2}_P:}`ا8>|Z2yW@]*zW.{X.xV$*zW@f2yW.yR!P:zV-1 BzW@o@ BzWO B~Y^I~Z6nI]@x} B[h6Y2|W?P:~Y@P:ZF\ B~YH"xU@qN0~jG0~gEQ%`|jF@4zlGCx{nKS0~pMZb0~pM@qqPހmM lLcnO@kOlP)mSlpU@XtVy[2 "|Zu2}\@(h6~]7 B`;GYe~Vqi@eqlumkDtlq@ɢ@t xMz|@}8Vh P@ ,_;J@Y8{&iP{hxP}P~@h}/yqwȣ{@w8yz|x@(wA @v/u>xq@NxsJ]|rltp{0iq@0itSqtuظtr@qo\qp0ilx]k@#Qhex]i#qj2Y|d@,BFyanQ.w]`"rYo@nW@5p lUwp nT&u[ Bza@>U{cIzb2zb2|d@G8>}fM~hI}g'8>zd@P6h6{dE8>iTYnd`aq@Ys`aqx]rݑHep qp@bxruXv)(x@k|~ @~2qx@t*(9xH;XH@}gvHD@Hȳ0 0Mx@ V `@ - = _L @[ j H%z (h  <@  . pq 88@ C 7 z `@ x! @1 0@ @O G_ 88In $} @Ό   ByR P:s h@  O[   @ q" d% 04 @C Hex+S xmb q (@ X 4 v p 0i}@ = (   @ @F t ( @ 8 OG V pe `@u tX Iw He}ݢ @ 0ia Mw q @( P4j C  (@1, s; xJ Y q@:i Iw;XUb@B;XUb;XUb-;XUb =;X`ac@KL;XYe[;XYej;Xx]gz;Xqj@T;Xm;Xlا;Xh;Xpg@];Xf;Xe;Xc$;Xe@f;Xf;Xd!;X|b-1;Xa@o@;XxeO;Xxd^;X|d6n;Xtc@x};XHe`;XU^;XUZ?;XUY@;XQ];Xx]`;XHebH;X`a_@;XU`;XI_;XF}[Q%;Xh6}Z@4;X&{WC;X.[S;X*~ZZb;X"~[@q;XP:_ހ;Xh6~^ ;XP:^c;XP:}^@;XF~^;XF~_);XI|al;XId@;XUe;X`ag2 ;Xmhu;Xth@(;Xmf7;X0ie;G;Xi~V;Xpk@e;X@pu;X(oD;X(p;Xq@ɢ;Xt ;XyM;Xw;Xw@;XP|;X|V;X{ ;X~@;Xȣy,;X{_;;XhzJ;Xy@Y;Xw&i;Xȣwhx;Xv;Xv@;X@q/;Xnq;Xtl;Xtk@;Xmk8;Xmmz;X0il;Xx]i@;Xx]iA ;XUg/;XFb>;X2_@N;X.~`J];Xh6~`l;XP:a{;X*}c@;X&}dS;X*e;XFjظ;XIi@;XMj\;XQh;XUi;X2|d@#;X&{ce;Xx]n#;X2;X@,B;XnQ;Xpv`;XHemo;XYm@5;XI}gw;XFh;X8>}e;XI|e@>;Xtp;X|s;Xqv;X|}@G;X;X;X';Xȣ@P6;XX}E;X@~T;Xd;X@Ys;X;Xݑ;X ;X@b;X;X;X);X@k;X;XH ;X@2;X2n@t*;X8>p9;XPH;X(;X;X@}g;Xpv;XX ;X,D;X(@;Xȳ;X ;XM;X@;X;X ;X V ;X@ ;Xx- ;XX = ;X_L ;Xh@[ ;Xpj ;X%z ;Xh0h ;XC@ ;X ;Xx. ;Xq ;XS@ ;X ;XK7 ;Xz ;Xx]@ ;X! ;X@1 ;Xh@ ;X@O ;X_ ;X@ In ;X} ;XH@Ό ;Xm ;X(|sR ;X}r ;Xȣ@ ;XX  ;X88[ ;X ;X@ ;X Bz" ;XYyd% ;X4 ;X@C ;Xq}+S ;XHemb ;X@q ;X@ ;X4 ;Xv ;Xq ;X`a@ ;X@= ;X ;XH ;X @ ;X(F ;X`a ;XU~( ;Xq@ 8 ;X(OG ;X8V ;Xxe ;XH@u ;XX ;X ;Xݢ ;X@ ;Xx]a ;XMz ;XU ;Xp@( ;Xj ;X ;X` ;Xȣ@1, ;X@s; ;XJ ;XY ;X @:i ;Xl@BXl@n-Xj =@m@KL(o[@ojqzt@Tvhtا sPq@]qqȣp$ȣn@foȣo!l-1m@o@lOXk^pi6nh@x}qd0ia0i`?0ib@0ic0igmhHk@xkpo|kQ%mh@4HefCx]fSYfZb`ag@q`ahހtm mlcqj@mq)prl@u@prXs2 @ruXn@(k7qg;Gxh~Vti@e|lu|kDqhqg@ɢqi xmMtnxl@mjqmV|q qp@0in,mm_;mmJ0il@Yqm&ixqhx|sqr@qn/qlqqlxl@r8xuzu|u@pxA px/u>tv@NtwJ]xl|y{xx@x{Spظ@\8h@#UteHew#2@ @,Bh0nQ,`o8@5@wqz0it{@>0XX@G'@P68E(Thd@Ys@ ݑ @b)@k x2sc@t*wgX98>rH;X@}gvP4D0c@ȳ` M(@ V (@ - = _L @[ @j %z h @  . q X @ S @7 hz t@ x]! t@1 @ @O _ hIn h} @Ό x] (vR &w x@  [  @ h6z" 8>ud% x]z4 q}@C He~+S Ymb mq @ X4 qv M~ I@ Y= m p (@ @F x h6z( .r@ 8 8>wOG Y|V me X@u pX | qݢ @ P:{a *t "~u .y@( Yj q t U@1,  B{s; YJ Y @:i 0h w@Bh sh s-h ht =h Pu@KLh w[h Pvjh yzh x@Th zh zاh uh x@]h wh wh s$h t@fh huh hv!h hu-1h u@o@h sOh r^h (m6nh j@x}h xhh tfh j?h k@h mh mh nHh pq@h (th uh (rQ%h pp@4h |lCh mSh nZbh pp@qh Xqހh ps h prch @r@h (rh (u)h vlh w@h @vh @v2 h ptuh tl@(h Heg7h Hee;Gh `a~f~Vh Y~f@eh x]euh x]eDh x]eh x]e@ɢh 0ik h tqMh tqh xp@h |rh uVh Xy h w@h pz,h }_;h ~Jh @{@Yh &ih hxh h @h /h qh h @h 8h zh h @h HA h H/h >h `@Nh HJ]h xlh 8{h @h Sh h ظh @h (\h h h P@#h teh Uy#h 2h p@,Bh nQh (`h Coh @5h hwh Yyh Qvh @>h Ch h0h hh m@Gh h h 'h @P6h hEh Th dh @Ysh h ݑh x h @bh X h h )h @kh h  h X2h &u@t*h qd9h .}qHh ;Xh (@}gh vh h (Dh @@h ȳh  h pMh (@h h ȣ h |V h t@ h @- h = h P_L h @[ h |j h |%z h h h @ h ȣ h x. h Heq h @ h  h 7 h z h @ h m! h 8>{@1 h I}@ h Y@O h 0i_ h x]In h U} h B}@Ό h *x h ypR h Xzq h 2u@ h Y h m[ h x] h &x@ h zm" h Xvld% h xn4 h &yp@C h ({p+S h p znmb h @|pq h "t@ h "t4 h }tv h {q h xn@ h ~r= h s h &t h M|@ h qF h x h (|s( h sg@ 8 h tiOG h p xmV h zme h .}q@u h *uX h (w h (vݢ h 2z@ h p ~qa h zn h xn h vj@( h p zlj h (}o h ~r h @|p@1, h yms; h XzqJ h .yY h `a@:i h ! {@B! y! z-! { =! |@KL! x~[! |j! }z! }@T! x|! x{ا! `}! `}@]! x~! |! 8w$! w@f! w! hx!! Pz-1! x@o@! wO! u^! t6n! r@x}! @q! Xp! (q?! t@! v! Xu! vH! z@! |! |! ȣxQ%! (u@4! pqC! @pS! (tZb! v@q! ȣyހ! z ! zc! z@! }! {)! zl! z@! }! |2 ! zu! @u@(! pr7! (t;G! x~V! {@e! hu! D! 8! 8@ɢ! 8 ! M! ! H@! 0! HV!  ! H@! `,! x_;! J! `@Y! &i! hx! x! @! /! 0q! ! C@! 8! pz! X ! 0@! A ! /! x>! @N! pJ]! 0l! ȣ{! t@! |S! h! ظ! P4@! xW\! ! ! @#! (e! t#! @2! @,B! `nQ! `! o! @5! w! ! x! @>! ! ,! ! @G! ! ! x'! @P6! PE! PT! d! @Ys! `! 8ݑ! h ! @b! ! ! )! @k! !  ! X2! I@t*! *v9! FzH! m;X! 0i@}g! tv! h! D! @! ȳ!  ! M! @! 8! t ! h6yV ! v@ ! 2x- ! M}= ! M_L ! 8>}@[ ! *vj ! *x%z ! P:|h ! h6}@ ! .y ! @zq. ! vkq ! h6s@ ! t ! X7 ! Xz ! t@ ! M! ! ~m@1 ! x{zh@ ! `|yj@O ! zp_ ! xoIn ! rg} ! H}od@Ό ! zmd ! ukbR ! ylc ! `|pb@ ! re ! sg[ ! rg ! vnc@ ! hqi^" ! vg`d% ! `|ib4 ! x{jb@C ! zla+S ! zmdmb ! zmdq ! zpf@ ! zpf4 ! xndv ! tla ! vlb@ ! wod= ! yoe ! sg ! }t@ ! 8>}F ! M ! tk( ! vi`@ 8 ! zmdOG ! H}qeV ! zlae ! pf@u ! riX ! H}tk ! zthݢ ! x{qg@ ! xrfa ! zrg ! zpg ! xpe@( ! yocj ! zpd ! x{qg ! yqf@1, ! vnas; ! xndJ ! zpgY ! yp@:i ! "| ~@B x - ` = }@KL `[ j xz }@T { xا w p@] t s (p$ Xp@f p pp! @t-1 (r@o@ XrO po^ (u6n w@x} w x z? }@ | } }H ȣ@   PQ% h@4 PC S Zb @q `ހ H  c @ 0 H) `l `@ ` 02  xu @( @ 7 (;G (~V @e pu h0D @ (@ɢ (  pM p @  V   @ x, x_; J @Y H&i hx  @ my/ q  C@ 8 X z  @ A  |/ (> @N J] hl t{ Fz@ Q}S X ظ p@ \   @# @e |# X2 ȣ@,B hnQ ` o @5 w ( t @@>  0  @G  x ' @P6 xE |T d ȣ@Ys  ݑ 0i  |@b @  ) @@k q Y  B}2 (|t@t* xo9 XypH *x;X h6{@}g &yv `a D (@ Heȳ &x  *}M F@ I u wjV ysg@ zrg- `|tg= `|ti_L yoc@[ xkbj yoe%z x{qgh zrg@ wmd vg`. 8se\q x{j`@ p tj yo7 &wz w@ ~r! tre@1 (ijZ@ om^@O ph]_ naXIn pdX} pbW@Ό ȩmaU kaWR ȩm`W ocU@ hqcX p_U[ ȩm`W (iaV@ pf_U" k^Vd% n]V4 hq`Y@C obY+S oe[mb oe\q oe[@ nf[4 ȩmf\v keY ȩmeZ@ ph]= ph] zmd Xyp@ *yF }u hqg^( k^U@ 8 l_VOG pcZV 8se\e hqcX@u Pre]X le[ (ibXݢ @haW@ @hdXa jdX kbY kcX@( kcVj j`T (iaT jdX@1, keYs; lcZJ jcYY of_@:i 8shd+S }@B+S }+S hz-+S Py =+S hx@KL+S hx[+S wj+S ȣsz+S ȣr@T+S ȣr+S pا+S |j+S x]d@]+S `ae+S tj+S |m$+S q@f+S to+S qr!+S xt-1+S @v@o@+S xO+S (w^+S |6n+S h@x}+S 8+S +S ?+S @+S +S +S H+S x@+S +S +S xQ%+S `@4+S C+S S+S Zb+S @q+S (ހ+S @  +S @ c+S p@+S +S X )+S @ l+S @+S +S 2 +S u+S @(+S C7+S r;G+S H_~V+S $@e+S X u+S $D+S @+S C@ɢ+S  +S M+S +S @+S +S V+S  +S @+S ,+S _;+S PJ+S (@Y+S &i+S 0hx+S H+S x@+S Mu/+S t|q+S +S @+S `8+S z+S +S @+S A +S 0i}/+S m~>+S @N+S XJ]+S xl+S Y}{+S P:y@+S 8>zS+S Y+S pظ+S @+S ȣ\+S +S X+S @#+S Ye+S B|#+S I{2+S x]}@,B+S `a}nQ+S He`+S Heo+S He@5+S Yw+S F+S *x+S 2w@>+S x]~+S `a+S Q+S h6}@G+S "x+S w+S t'+S s@P6+S (}qE+S (sT+S &zd+S 8>@Ys+S 8>+S .}ݑ+S (v +S "}v@b+S .~w+S .~v+S P:|)+S h6|@k+S .z+S "}v +S vo2+S ylf@t*+S uh`9+S wjbH+S `|ne;X+S H}ng@}g+S 0~qiv+S wn+S h6}vD+S "yr@+S yoȳ+S zth +S xofM+S 0~tk@+S sk+S zmd +S hqi^V +S nf[@ +S ndZ- +S ndX= +S ȩmcY_L +S ȩm`W@[ +S l_Vj +S kaX%z +S lbXh +S jcY@ +S kaX +S j]W. +S j[Tq +S hq`X@ +S xd] +S mf7 +S ulz +S p |s@ +S x{ri! +S jfZ@1 +S caT@ +S d`T@O +S e[R_ +S @h[RIn +S eWN} +S eWL@Ό +S eYM +S ~bUMR +S w`RI +S cUJ@ +S eTJ +S eTL[ +S zaTL +S 0o^TK@ +S `g\SL" +S Hk]PJd% +S zaPI4 +S dRN@C +S ~bUL+S +S cYPmb +S pfYQq +S d[R@ +S d[R4 +S w`\Qv +S zaZP +S d[R@ +S kaX= +S Xg]T +S obZ +S pi@ +S @yrF +S um +S l_W( +S XgZQ@ 8 +S XgZROG +S ȩm^WV +S oaXe +S ȩm_T@u +S @h^UX +S c\R +S s_[Rݢ +S w`YQ@ +S ~b^Ua +S Xg`V +S Xg^W +S pf]T@( +S d[Rj +S e[Q +S e[Q +S pf_U@1, +S pfbWs; +S jaXJ +S (i`WY +S k`Z@:i +S la] |s@B @v pt- Xr = (t@KL w[ wj (tz s@T v yا z @z@] (|  h$ 8@f  ! -1 @o@ xO x^ `6n 0@x}   ? @  0 H (@   Q% @4 HC h0S CZb @@q (ހ   xc @  ) l @  @2  u @( ,7 k;G `[~V @e u D  @ @ɢ   M  X@  V 8  @ ȣ, ȣ_; @J m@Y |&i hx X Y@ P:s/ Fwq He~ X@ t8 0iz He Q~@ ByA  h6t/ P:u> Fx@N M|J] 8>xl *s{ q@ sS *v P:|ظ 8>}@ 8>y\ P:y P:| *z@# }re x{qg# 0~pe2 p uk@,B XvlnQ p uk` Xvlo xp@5 zow zp H}vn 0~tk@> vj ul 0~tk `|sj@G x{ri xpe vnc' vna@P6 uk_E vnaT zred H}vl@Ys xn `|sjݑ xnd  ylc@b x{md x{md yof) x{pj@k H}rl H}pj  x{le2 hqb]@t* j]W9 ȩm`XH ȩm^W;X naY@}g Pre\v x{ha qjD H}jc@ 8si`ȳ kdZ  jbWM lbY@ naX j]U cYPV zaWM@ eXP- @hZQ= (i[R_L eVO@[ cVMj cVN%z cVNh zaWN@ s_UL zaTL. w`SKq @hWO@ lXQ 8s^Y7 x{jcz `|qk@ zoi! ne\@1 c]Q@ ~bZO@O dWO_ zaSJIn w`QJ} dQJ@Ό w`OG Hk]NGR `g\MF Hk]PG@ zaSJ dUN[ ~bUO zaTL@ zaTN" w`QLd% zaRK4 XgVO@C @hYR+S Xg]Tmb k^Xq naY@ lcZ4 @hbVv (iaV lbX@ wmd= vic `|og wn@ |uF zt vlc( tg_@ 8 vlcOG zmgV x{nfe x{le@u x{nfX vmd tmeݢ Prkc@ wpha wph xmg wne@( xnej yld zme ypg@1, xtis; zskJ zqjY ynj@:i `|nmX @~@BX ~X -X P =X @KLX [X jX zX H@TX X اX X 0@]X 0X X $X @fX P4X h0!X -1X @o@X OX ^X 6nX (@x}X (X ,X ?X @X X PX xHX (@X X X m~Q%X 0i{@4X (CX SX h0ZbX @@qX ހX  X ȣcX ȣ@X X )X lX @X X 2 X (uX P@(X 7X $;GX ~VX H@eX 8uX hDX X x@ɢX 0 X MX X t@X @X PVX  X ȣ@X |,X x]_;X MJX .v@YX h6~w&iX IzhxX h6{X u@X p zn/X XynqX 2uX P:w@X *v8X uzX wX @~r@X {oA X X{o/X @|p>X |q@NX |qJ]X XynlX wl{X wl@X vmSX yoX {pظX wn@X ul\X ulX vmX uk@#X zpfeX hqg^#X obY2X ug^@,BX xjanQX ykb`X yjcoX yof@5X wpfwX PrpcX hqmdX hqha@>X 8si`X pe_X oe\X ȩmd[@GX kdZX kbYX (ibX'X (iaV@P6X @h`UEX (iaTTX (icWdX kdZ@YsX le[X kbYݑX j`W X k^V@bX l]VX (i\SX Xg^W)X jaZ@kX lbYX 8sd_ X o`Y2X k\W@t*X zaTN9X 0o^TKHX 0o^QI;XX xc[QH@}gX eWNvX `|j`X 2ysDX `|ic@X eZTȳX Hk]VL X `g\UKMX w`VM@X dWOX ~bUO X w`VMV X zaTL@ X cTM- X (iZS= X ȩm\U_L X eVO@[ X cVNj X eXP%z X pfYQh X (i\T@ X (i_V X Xg]T. X XgZRq X XgVN@ X ȩmYR X u`[7 X qoz X 0i@ X P! X @1 X t@ X yoe@O X 8sf^_ X ykbIn X zlc} X `|ib@Ό X xg` X vgbR X xid X wjb@ X x{lg X H}le[ X x{nh X ylf@ X x{li" X H}nid% X pi4 X pl@C X sl+S X wqmb X xrq X xp@ X {r4 X {pv X {p X {r@ X .|= X ~x X *x X h6{@ X h6~F X &| X &z( X ~v@ 8 X "{OG X "{V X &ze X "y@u X ~xX X X~w X @zݢ X ~v@ X p wa X @x X ~x X (~x@( X ~vj X "}v X .}y X y@1, X p ys; X X|J X @zY X p {w@:i X |y 0@B ` H-  = $@KL [ j z @T  ا @  X @] X  p $ @f K S! (-1 @o@ xO 0^ 6n X @x} P4 G $? 0@   hH 0@  ȣ tQ% Y}@4 |C S X Zb @ @q ހ P  (c X@ ( ȣ) ȣl 8@  2  u @( 7 ;G ȣ~V x@e `au Y}D | @ɢ   M U 2z@ h6w `aV |  |@ I~, @|p_; yoJ vm@Y tl&i Xvnhx X{o ym@ uk/ sjq rj sj@ uk8 H}ujz x{ri zpf@ zpfA  `|of/ H}si> H}sg@N x{rcJ] yocl x{oa{ znb@ zlaS zlc xneظ ylc@ xib\ ykb vi` Prh^@# hqg]e kaX# pf\S2 pfYP@,B (i\SnQ (i_V` (i_Vo @h_X@5 c_Tw s_]Q `g\YP ~b[S@> d[R zaXQ s_VM 0o^WM@G s_VM 0o^UL `g\UK' `g\TI@P6 Hk]SJE Hk]UHT `g\VJd Hk]VL@Ys zaXO dZQݑ ~bXO  dUN@b eWN eXP cZS) @h_X@k ȩmb\ hqd^  te^2 pa\@t* naY9 kaXH (i_V;X @h^U@}g naXv ng *zsD "{s@ zpgȳ oh`  hqj`M vlc@ x{nh `|oi  `|ogV  H}ni@  0~oh-  0~oh=  qj_L  rk@[  skj  H}sj%z  umh  xp@  {r  {q.  vmq  0~me@  ng  (vr7  Yz  H@  g̀!  @1  k@  X @O  8>_  .yIn  8>}}  2x@Ό  .~w  &~{R  "}x  "w@  B~  P:~[  .|  *}@  *{"  *{d%  h6|4  B|@C  8>}+S  Bmb  8>q  .~@  P:4  8>v  8>  B@  I=  B  B~  F@  P:F  P:  F(  P:@ 8  P:OG  BV  Ie  B@u  FX  h6  h6ݢ  .@  *~a  8>  M  B@(  Bj  B~  I  B@1,  2s;  P:J  h6Y  h6@:i  B @B  - , = <@KL $[ j 0z H@T ` xا  @]   $ p@f , 88! -1 @o@ O ^ 6n C@x} 0cÀ G ? @ X | @H ȣ@ ( m BQ% 2w@4 8>vC HeyS Zb p@q tހ Y  B{c P:u@ .r &}p) .rl Fw@ Ix Fw2  ~nu zk@( yk7 .|n;G .|m~V @vh@e Xuiu (wkD *zo 8>t@ɢ 8>x  &tM p zn th@ th "{qV Bx  By@ @zq, ri_; zkdJ x{jb@Y H}ib&i 0~jahx zlc wk_@ Pre\/ hqcZq 8sbX Prd[@ 8sf]8 oe[z lcZ obY@ pbYA  pbY/ pcZ> ocW@N kaUJ] @h^Rl Xg[O{ j\Q@ l[SS n]V k\Uظ j\S@ kZR\ k]T j^R eXO@# cYPe ~bXO# s_TN2 0o^TK@,B s_ULnQ w`VM` cVNo ~bXO@5 zaWNw w`YO s_VO ~bWQ@> dZQ cYP cZQ d[R@G @h^U Xg]S pf^S' @h^U@P6 kaXE lbXT ȩmf\d hqh_@Ys tkd yldݑ zme  x{le@b `|og x{qh zqj) uo@k p ys Xxs  @yr2 Xzt@t* (zu9 @{sH zs;X xo@}g @{rv P:y M}D M@ "yȳ p }t  (vM "w@ *{ *y *yV 2z@ h6{- 2{= 8>}_L B@[ 8>~j P:}%z Bh I@ I M. Iq F|@ 8>y F7 xz @ Gƀ! ȝ@1 P@ @O p_ tIn U} Y@Ό U UR M M@ M M[ Q M@ I" Id% I4 Y@C Y+S Umb Mq I@ U4 Mv Q U@ U= U U M@ IF I Q( I@ 8 IOG BV Me M@u UX I Iݢ F@ Ba I Q Y@( Qj U x] Q@1, Bs; IJ FY I@:i MN@BN`N-N =N @KLN@ [NjNHzN`@TN`N`اNN@]NNN$N@fNN!N-1Nx@o@NON0^Np6nNh0@x}N88NNh?Nx@NM}NP:vNP:uHNY{@NUNh6|NypQ%N0~qh@4NpcCNqcSNp peZbNXsj@qNXtmހNuj NrgcNH}od@N`|kaNx{m`)N`|l_lNma@NpdNne2 Nyi\uNxfX@(N`|h]7Ni^;GNH}i^~VNx{g\@eNH}i^uNH}i^DNi^Nk`@ɢNlc NH}kaMNve[NucY@N tdWNzj]VNoc Nqd@Nx{j`,Nvc\_;NPr_XJNPr^W@YNPr[U&iNp\UhxNl[QNl[Q@NkZP/Nl\OqNnZONjXL@N@hWO8N@h[RzNXg]TNk^U@Nhq`XA Nug^/Nykb>Nxl`@NNhqg[J]NlbVlNn`U{Nhq`V@N8s`YSN ta[Nhqb[ظN tc[@Nwe[\N tf]NPrh\Npf\@#NPrh_eN8si`#N tic2NPrh_@,BNpf]nQNhqg^`N8sf^oNuf_@5NwhawNxneNx{pjNzpg@>NH}pgNpiN`|riNH}sj@GNulNwoNxo'Nwo@P6Np yqEN{qTN|sdNw@YsN"yN2zݑNP:} NP:|@bN B~NP:Nh6)NP:@kNMNx] NI2NQ@t*Nx]9NYHNF;XNh6@}gNIvNx]N0iDN`a@NUȳNM NMMNY@NQNU NFV NQ@ NU- Nx]= N`a_L NHe@[ N0ij Nx]%z Nx]h N`a@ Nx] N`a. N0iq Nm@ N0i Nx]7 Ntz Nȣ@ N! Nn@1 N@ N@O N@Հ_ NIn Nt} Nx]@Ό Nx] N`aR NY Nx]@ NHe N`a[ NY Nx]@ NY" NUd% NY4 NHe@C Nm+S NHemb NYq NU@ Nx]4 Nx]v NY Nx]@ Nx]= NQ NY NY@ NUF NY NI( NI@ 8 NQOG NFV NUe NQ@u NUX Nx] NQݢ NI@ NIa NY Nx] Nx]@( NMj NY NHe NU@1, N Bs; NFJ NMY NM@:i NQ@B8-  =@KL[Pjhz @TاX@]($@f !P-1h@o@8O^x6nH@x}`He?&y@p zntgueHp yi@X{oxp0~qkQ%vg`@48sbZC tbXS8s_VZb taZ@qud\ހhqeY pcZcpbW@n`SnbV)o^Tlhq]V@8saWp]V2 kYOukXJ@(Pr\Q7v]V;Gw`X~Vv_W@e8s_Tuu_TD t]U8s]R@ɢ t]U hq]TMo[RnZQ@jYOp^TV8saW 8sbX@wd], ta[_;8s`YJu^X@Yv]X&iv_Yhx8s`Y8saW@weY/yg[qzf[zf[@ve]88sd]zviapi@F~A /`>@N|J]*xl({r{wp@&yrS&xs"{tظ&zt@.|u\(|s@~rX}s@#(ve~v#*{2w@,BX}snQX}t`(|to(zs@5"{tw.z.|2z@>2y B{2{2z@G8>}IF'F@P6IEIT8>d B@YsQHeݑHe 0i@b0i0i0i)m@ktq q2t@t*9pHx];Xx]@}g`avttDt@mȳt HeMt@mm `aV 0i@ 0i- m= x_L q@[ qj m%z mh x@ x m. 0iq m@ t 0i7 x]z @ !  @1 @@ h@O ڀ_ vIn } 0i@Ό `a `aR Y `a@ m m[ He `a@ `a" x]d% x]4 He@C 0i+S `amb x]q U@ U4 Yv Y `a@ `a= U x] Y@ UF Q Q( Q@ 8 QOG YV Ye  B@u IX Q Uݢ I@ Ia Q He Y@( Qj Q x] Y@1, Qs; QJ QY F@:i QI@BIȣIt-IM =IQ@KLIx][IUjI`azI@TIIاIxI*x@]I(xpIP:xI`a$Iq@fItI!Ip-1I@@o@IOI^I6nI@x}IIIIXt?I`|rh@Iuk_I thZIvj\HIui[@I8si]Iuh`Ipb_Q%I(iZU@4IpfUMCIpfTJSI@hWOZbI@hWP@qIjYQހIpfZN IdXLcIk]R@Ij^RIcYO)IeWNlIkXQ@IlYRIlXQ2 IjVOuIlXO@(Iu^V7I`|e];GIH}g\~VIf_@eIk`uIncDIodImb@ɢIia Ih`MIH}i`I0~ja@I0~mcIqgVI(xn Iyo@Iwq,I"xq_;I.zuJIh6yu@YI8>zv&iI.xrhxI&ypI*zq@Ih6u/IP:~sqIh6}rIvk@Irj8IrkzItoI`a@IA Ir/I>Iv@NIJ]IȣlI`a{Ix]@I0iSIHeI`aظIHe@I0i\IMIMIM@#IQeI`a#Ix]2IY@,BIFnQI B`IQoIY@5IYwI`aI0iIx]@>I`aI0iIx]IM@GIYI`aI`a'IHe@P6IHeEI0iTIYdIx]@YsI0iItݑIHe Im@bIqIHeIx)I|@kII| It2I@t*IX9IHI;XIx@}gIqvItIxDIx@IȳI| IxMIx@ItIm IHeV Iq@ Iq- Im= It_L It@[ Itj Iq%z Ith I@ I| Im. Iqq Ix@ Im IQ7 IUz IU@ I! I@1 IG@ I(@O I8_ IhIn Ik} I @Ό IHe IHeR IHe IHe@ I`a IHe[ Ix] IY@ IY" IUd% IM4 I`a@C I0i+S I0imb I`aq Ix]@ IY4 IUv IY IHe@ IHe= Ix] I`a I`a@ IIF IM IQ( IY@ 8 I`aOG I0iV IYe IQ@u IIX IY IUݢ II@ IMa IY I0i IY@( IIj IF IM IY@1, IQs; IQJ IUY IM@:i IUI{@BMv.}q-X{o ={o@KL|q[yljxjz8>x@Tmا B~0~pg@]yg]mf*y$ B@fMF! B-1I@o@YO`a^`a6nQ@x}*{{qyqf?uh_@Pre\PrdYhqcXHPrfZ@hqg[uf_pa^Q%n\X@4k\UCn`WS taZZbyha@qzibހykb wjacH}of@H}pguk)tklp sl@@un(un2 @uouvo@(.xr78>|v;GP:~w~VF~x@eFxuMzDQ{Q{@ɢI{ Q{M ByI|@UYVU Y@U,`a_;0iJ0i@Y0i&iHehx`am@0i/x]qQ|h6}t@(xq8(zuz8>}@H_ŀA  />@Nh0J]8l{x@xS|xظ@\|tt@#xex#x2q@,BmnQ0i`tox@5|w|@>xtq@Gxx'@P6|ExT0idt@Ysxxݑq |@bx0iq)|@k| |2@t*p9@Hx;Xt@}gqv|D@ȳx mMx@qq mV t@ - x= |_L @[ |j |%z xh @ | m. mq 0i@ m x]7 Yz M@ Y! (@1 0@ G@O ܀_  In } g@Ό 8 0iR t t@ q 0i[ 0i 0i@ He" `ad% Y4 `a@C 0i+S Hemb `aq Y@ U4 Uv Y `a@ m= Y x] He@ YF Q x]( Y@ 8 YOG `aV Ue M@u MX Y Qݢ I@ Ma Q 0i x]@( Qj M Q Q@1, Qs; MJ QY Q@:i Yv`|ha@BvXoev*zq-v|q =v~u@KLv~u[vymjvp vizv"xm@Tv8>wvFzاv*uvXuk@]vqhvvov B|$vQ@fvIvF~!v B{-1vP:{@o@vI}OvU^vY6nvU@x}vFv8>v B?vI@vIvM~vI}HvY@vMvUvUQ%vQ@4vICvMSvx]Zbvq@qvmހv v|cv@vpvx)vplv@v(vp2 v@uvX@(v7vx;Gvt~Vvt@evxuvtDvqvq@ɢvq vqMvqvq@v0ivmVvHe vm@vt,vx_;vqJvq@Yvt&ivthxvxvx@vX/vqvtv0i@v`a8vxzvxvH_@vA vx/v>vk@NvJ]vlv({v@vSvvXظvX@vp\vpvv|@#vevp#v(2v@,BvnQv|`vxov@5vwv|vvx@>v|vxvtv@Gvvpv|'v|@P6vtEvqTvqdvq@Ysv|v0iݑv`a vm@bvqv0ivq)vt@kvmvt vx2vq@t*v|9vxHvt;Xvt@}gvqvvmvtDvt@vxȳvt v0iMvHe@v0ivHe vmV vm@ vq- vt= v|_L v@[ vj vx%z vh v@ vm vHe. v`aq vU@ v`a vm7 vHez vU@ vP:! v B@1 vq@ v @O v(_ vIn v} v8@Ό vXڀ vR vq vm@ vHe vHe[ vm vt@ vq" vmd% v0i4 v`a@C vm+S vmmb v0iq v0i@ vHe4 vHev vx] vx]@ v0i= v0i vq v`a@ v0iF vq vm( vHe@ 8 vmOG vqV v0ie v`a@u v`aX vHe v`aݢ vQ@ vUa vU vx] vU@( vMj vU vx] vU@1, vUs; vYJ vUY vU@:i vY Iwq@B Ip I8- IP = I@KL I|[ Ix]j I`az Iq@T I0i Iا Ix IHe@] I0i Iq I$ I@@f IX I! Ix-1 It@o@ IO I@^ I6n I(@x} Ip I| Ip? I@ I( I IH I@ IX I( IQ% I@4 I@C IpS IZb I@q Iހ Ih  Ic I@ Ih I) Il I@ I I2  I(u I@( I|7 I;G I|~V Ix@e I|u ID I| Iq@ɢ I0i  I|M I| Iq@ I0i ImV I0i  Iq@ I, I_; IJ I@Y IX&i IXhx I Ip@ Iȣ/ I@q Ip IX@ I8 Iz I$ I@ IA  I/ I> I,@N IJ] Il I@{ I@ IS I( Iظ I@ I|\ Ix I I@# Ipe Ip# I2 IX@,B I|nQ Ix` Ito I|@5 I|w Ix It It@> It I| Iq It@G Ix Ix Im' Im@P6 ImE I0iT IHed Iq@Ys Iq I0iݑ IY  I`a@b I0i I`a Im) Im@k Im I`a  I`a2 I0i@t* Ix9 ImH Iq;X Im@}g Imv Im ImD IHe@ Iqȳ Im  I`aM Ix]@ Ix] I`a I0iV IHe@ IHe- Im= It_L It@[ Ij I%z Ih It@ Ix Iq. I0iq IY@ Ix] Im7 Iqz Ix]@ II! II@1 IM@ Iq@O I`_ ISIn I} I@Ό I IgR I Ix@ Ix Iq[ It It@ Ix" Ixd% It4 Iq@C Iq+S Ixmb Ixq Iq@ I0i4 I`av Ix] I0i@ Im= Iq Ix Iq@ IxF It Ix( It@ 8 IxOG IxV Iqe IHe@u ImX I`a I`aݢ IY@ IYa IY Ix] IY@( IQj IU Ix] IY@1, IUs; IYJ IQY IU@:i I`a@B`[€z-O =X @KL[ȣjzȣ@Tȣاȣ@]ȣ$@f!-1@o@O^6n@x}@?@hhPHh@Q%@4CSZb@qހ8 8c @)l@ȣ2 Xum@(q7|;Gx~V|@eupD||@ɢx M@xVt @p,p_;pJp@YX&ihxpX@X/q@@@8zk@xA P/S>@NJ]plp{@@pSظx@x\ttx@#e#p2@,BtnQq`toq@5qw0iqm@>mm0iHe@G0iqm'0i@P6HeEHeTx]d0i@Ys0i`aݑU He@b0i0i0i)m@kHe`a m20i@t*t9mHm;X0i@}gqvm0iD0i@mȳ0i HeM`a@He`a mV 0i@ He- He= 0i_L q@[ tj %z h p@ x t. 0iq x]@ He m7 tz m@ Y! M@1 U@ Y@O (_ X In n}  @Ό  hR S ȣ@  [ | q@ q" md% m4 q@C x+S xmb mq 0i@ m4 0iv `a `a@ 0i= t | t@ mF | t( m@ 8 qOG 0iV Hee 0i@u HeX 0i Heݢ He@ Ma I I M@( Qj U U Y@1, Hes; `aJ YY Y@:i Y9z@B9z܀9z@-9zG =9z@KL9z [9zj9zz9zP@T9z89zPا9zP9z @]9z9z 9z$9z8@f9z9z!9z-19z@o@9zhO9zh^9zh6n9zh@x}9z9z9zȣ?9zP@9z89zh9zPH9z@9z9z9zQ%9z@49zC9zS9zZb9z@q9zȣހ9z 9zPc9z@9z9z)9zl9zȣ@9z9z2 9z@u9zq@(9z0i79z|;G9z|~V9zx@e9zu9zpD9z9z@ɢ9zx 9zpM9z9z|@9z9zV9zx 9z@9zX,9z@_;9zJ9z@Y9z&i9z|hx9z|9zm@9zx/9ztq9z9z0i@9z89zP4z9z9z@9zA 9zv/9z(>9zh@N9zJ]9zl9zx{9z|@9z|S9zx9ztظ9zm@9zm\9zq9zm9zx@#9zte9zx#9zx29z|@,B9ztnQ9zq`9zqo9zt@59z0iw9z0i9zq9zq@>9z0i9z0i9zq9z`a@G9z0i9zm9zHe'9zHe@P69z`aE9z`aT9z`ad9z0i@Ys9zm9z0iݑ9zx] 9z0i@b9zm9zt9zm)9zq@k9z0i9z0i 9zm29zq@t*9z99z0iH9z`a;X9z0i@}g9zqv9zm9zHeD9z`a@9z0iȳ9zm 9zqM9zm@9zHe9z`a 9zmV 9zHe@ 9z`a- 9z0i= 9zm_L 9zx@[ 9zxj 9zx%z 9zxh 9z@ 9zt 9zm. 9zHeq 9zHe@ 9zm 9z0i7 9ztz 9zt@ 9z0i! 9zY@1 9zY@ 9zU@O 9zm_ 9zPIn 9z} 9z(@Ό 9z 9zPR 9zȝ 9z0@ 9z 9zx[ 9zq 9z`a@ 9z`a" 9zHed% 9z`a4 9zx]@C 9z0i+S 9zqmb 9z`aq 9zHe@ 9z`a4 9z`av 9z`a 9zHe@ 9z0i= 9zm 9zt 9z`a@ 9zHeF 9zt 9zm( 9zHe@ 8 9zmOG 9z0iV 9z`ae 9z`a@u 9zx]X 9zHe 9z`aݢ 9zx]@ 9zMa 9zI 9zF 9zI@( 9zIj 9zU 9zU 9zY@1, 9zx]s; 9zUJ 9zUY 9zQ@:i 9zQ@BnҀ <- =@KLP[jȣzP@Tا8@]$h@fP!8-1h@o@OP^6n@x}?@PH@((Q%@4C@SpZbp@q@ހ ȣcȣ@(X)Xl@@@2 ux@(q7;G~Vx@exupD@X@ɢ @MX@|xVx p@,@_;|Jt@Yx&i0ihxHex]@`a/`aq0i0i@8zz@(ހA 88/>X@NxJ]tl|{x@tStmظm@m\xqt@#qex#|2@,B|nQx`ox@5qwmmx@>qmxq@Gq0i0i'0i@P60iE0iT0idq@Ysq0iݑHe 0i@bqqq)0i@km0i m2x@t*|9qH0i;Xq@}gmv0i0iD`a@x]ȳHe HeMq@0i0i HeV x]@ `a- `a= `a_L m@[ mj q%z xh x@ m 0i. mq He@ 0i m7 xz x@ q! q@1 0i@ M@O U_ xIn } P4@Ό  8R P O@ 8 0i[ `a Q@ M" x]d% x]4 U@C Q+S Umb Mq M@ M4 Qv `a `a@ M= U `a U@ QF U x]( Y@ 8 `aOG x]V Ye M@u IX Y Yݢ I@ 8>a P: 8> 8>@( Fj I M M@1, Ys; QJ IY F@:i Ff88@Bff-fx =f@KLfh[fjfzf8@Tffاfhf@]ff8fP$f@fff!fh-1f@o@fOf^f6nf@x}ff(f?f@fff@Hfx@fxfxfQ%fX@4fXCf|SfxZbfx@qfހf( f(cf(@ff|)f|lfp@fpf(2 fpufx@(f|7f@;Gfp~Vfx@ef|ufpDf(f@@ɢfX f@Mf(fp@fXfVfp fX@f@,f@_;fpJfx@Yfq&if0ihxfmfm@fHe/fmqfxf|@fSǀ8fhzff@f0cӀA f/f>fx@NfxJ]fxlf{f|@fSfxftظft@f|\ff|fx@#fxef#f2fp@,BfpnQfX`fof@5fwfqftf|@>fxfxftf0i@GfHef0if0i'f0i@P6fHeEf`aTfHedfHe@Ysf0if0iݑfx] f`a@bf0ifmf0i)f`a@kf`af`a f0i2fx@t*ft9fmHfHe;Xf`a@}gfmvf0ifHeDfY@fYȳfx] fHeMfHe@ftfm fHeV fU@ fx]- fx]= fx]_L fm@[ fmj fm%z fqh ft@ f0i f0i. f0iq fx]@ fHe fm7 fqz fm@ fHe! ft@1 f0i@ fU@O fQ_ fYIn fp} fx@Ό fP4Ā fR fh f@ f fX[ fF f2@ f&" f2d% fF4 fI@C fF+S f Bmb fh6q f8>@ f8>4 f Bv fQ fQ@ f8>= fF fM fI@ f BF fF fI( fI@ 8 fUOG fQV fIe fP:@u fh6X f B fFݢ fP:@ f*|a f*} f" f*@( f*~j f2 f B f8>@1, f Bs; f8>J fP:Y fP:@:i f8>C@BCCP-Ch =C@KLC[CȣjChzCh@TCC8اChC8@]C C8C$Cȣ@fCC!C-1C@o@COC^C6nCX@x}CCC?Cp@CCC|HCx@CqC|C|Q%C|@4CCC|SCxZbC@qCހC C@cCX@CCx)ClC@CC@2 CXuC@(C|7C;GC~VC@eC(uCDCȣC@ɢC@ C@MC@CX@C@CpVC C@CX,C@_;CXJC@YC&iC|hxCtCm@Cx/CqCXC@C@Հ8CzCC@C <ʀA Cx/C>C@NCJ]ClC{C@C|SCCظC@C\CpCpC@#CeC#C2CX@,BCpnQC`CoC@5CwCtCtCx@>CxCxCmCHe@GCmCtC0i'CHe@P6CHeECHeTCx]dC0i@YsCqCmݑC`a Cx]@bC`aCHeC0i)Cx]@kCx]CY C`a2C0i@t*CHe9Cx]HCU;XCQ@}gCUvCYCUDCM@CMȳCx] CHeMC0i@CHeCm CHeV Cx]@ CY- Cx]= Cx]_L CHe@[ CHej Cq%z Cmh Cm@ CHe C`a. CHeq Cx]@ CHe Ct7 C|z Ct@ C|! C|@1 Cx@ Cm@O Cq_ C`aIn C`a} C@Ό Cx CKR C Cȝ@ CgҀ C0[ CHe C&@ C(~" C"}d% C.~4 CP:@C CP:+S C*mb C2q C8>@ C8>4 C Bv CF C B~@ C8>= CM CQ C B@ CIF CF CM( CQ@ 8 CMOG CFV C Be C B@u CIX CF CFݢ CF@ CP:a Ch6 Ch6 CP:@( C Bj C B CQ CF@1, CIs; CMJ CQY CQ@:i CY8@Bȣ@- =@KL[ȣjz@Tȣاȣ@]$(@f!-1@o@O(^6n@x}x?@xtHt@|xpQ%@4CSpZbX@qpހ pc@q)l@|2 pu@(|7;G|~V@e@uDȣ@ɢ@ XMpX@((V (@@,@_;XJ(@YX&iphxx@x/Xqh0@8xzv@X A h/>|@NpJ]l{|@Sظ@\||@#e|#x2@,BnQ|`|o|@5xwqq|@>t0i`a@Gmtm'q@P6qEqTmdHe@Ysm0iݑY Y@bHe0iHe)0i@kYU x]2`a@t*Y9UHQ;XI@}gQvQMDI@IȳM x]Mx]@YQ YV U@ x]- Y= x]_L `a@[ Hej `a%z Heh x]@ U He. qq `a@ m m7 xz t@ x! x@1 @ |@O 0i_ HeIn Q} `a@Ό X R O @ @ۀ S[ ` q@ P:" .d% P:4  B@C P:+S P:mb Fq Q@ U4 Yv U Y@ I= U `a Y@ UF Q x]( Y@ 8 x]OG UV Ue U@u MX M Mݢ Y@ Ma I I Q@( Qj Q Y x]@1, Hes; HeJ `aY 0i@:i t*u@B*uX*up-*u( =*u@@KL*u[*uj*u(z*u@@T*u(*uXا*uȣ*u@]*u*u*up$*uX@f*u(*u!*uȣ-1*u@o@*uO*u@^*u6n*u@x}*uX*u*u?*u@*u*u|*uxH*u|@*up*u*uXQ%*u@@4*u@C*uS*uXZb*u@@q*upހ*u *uc*up@*ux*ux)*ul*u@*u*ux2 *uu*ux@(*u|7*u;G*u~V*u|@e*uXu*uD*uȣ*u@ɢ*up *u|M*u*up@*u(*u@V*u@ *u@@*up,*u_;*uJ*uX@Y*u(&i*uphx*u|*ux@*ux/*upq*u`*up@*u8*uz*u*uG@*uA *up/*um>*uq@N*uxJ]*utl*ut{*um@*utS*ux*utظ*ut@*ut\*ux*uq*um@#*ute*uq#*uq2*uq@,B*uxnQ*ux`*uto*ut@5*uqw*um*um*uq@>*ut*ut*um*um@G*ut*ux*ut'*um@P6*umE*uqT*umd*u0i@Ys*u0i*u0iݑ*uU *uU@b*ux]*ux]*u`a)*uY@k*ux]*uY *uY2*uY@t**uU9*uMH*uQ;X*uM@}g*uMv*uM*uQD*uF@*u Bȳ*uF *uQM*uM@*uF*u B *uFV *uM@ *uY- *uQ= *uU_L *uY@[ *ux]j *uY%z *u`ah *ux]@ *uU *u0i. *utq *uHe@ *uY *u0i7 *uqz *ut@ *ut! *ux@1 *ux@ *u0i@O *ux]_ *uUIn *uh6} *u*~@Ό *uI *u(R *u *uk@ *uX܀ *u([ *uk *u@ *u@" *uYd% *uY4 *uY@C *uF+S *u Bmb *uMq *uHe@ *uq4 *utv *uHe *u0i@ *uU= *uHe *u0i *u0i@ *u0iF *u`a *u`a( *uY@ 8 *ux]OG *ux]V *ux]e *uY@u *ux]X *uY *ux]ݢ *uHe@ *uHea *ux] *u`a *u`a@( *ux]j *u`a *um *uq@1, *uqs; *uqJ *uxY *u@:i *u @B p X- X = X@KL @[ @j @z X@T p Xا ( ȣ@]   p$ @@f ( (! -1 ȣ@o@ O X^ p6n p@x} @  ? |@   H @  @ (Q% @4 XC @S @Zb (@q ހ   |c t@ x q) l x@  |2  |u @( 7 ;G x~V @e u ȣD  @ɢ p  |M | @ @ XV @  @ , |_; J |@Y |&i hx x m@ m/ Xq 88 h@ H8 z z (@ A  0i/ 0i> He@N 0iJ] x]l `a{ 0i@ tS m `aظ 0i@ x]\ m x] m@# te t# 0i2 q@,B tnQ x` mo m@5 Hew m 0i 0i@> 0i x] x] t@G  | m' t@P6 0iE `aT `ad He@Ys He Uݑ F  U@b Y Y x]) I@k Y I  I2 M@t* M9 MH F;X I@}g Iv  B ID F@ 8>ȳ U  UM M@  B F FV U@ He- `a= x]_L U@[ Uj x]%z Heh `a@ He q. qq 0i@ He 0i7 qz x@ m! |@1 @ 0i@O `a_ UIn h6} "|@Ό &}  BR X @ `[р [ ȝ X@ ," 8d% 4 q@C He+S Qmb x]q q@ t4 |v | x@ q= m t |@ |F m m( 0i@ 8 HeOG x]V 0ie He@u 0iX m mݢ m@ ma t m m@( qj m t x@1, xs; |J Y @:i W(@BWWX-W =W@@KLW([WjW@zW@@TWpWاW@W@]WhWWX$W@@fW(W!W-1Wȣ@o@WOW@^W6nWX@x}WXWpW@?W@@WXWWHW@WWXWQ%Wp@4WpCWXSWXZbWp@qWހWq WtcWt@WxW)W|lWp@WWt2 W|uW@(W@7Wp;GW|~VWX@eWuWDWW@ɢWp W|MW|W@WXWXVW( W@Wx,Wx_;WJWx@YWx&iW|hxW|Wq@Wq/WqWrW@WH8WhzWKW@WxA Wx]/W`a>Wx]@NWYJ]WUlWY{W`a@W0iSW0iW0iظW`a@WHe\W0iWHeWHe@#WxeWt#Wm2Wx@,BWnQW`WtoWq@5WxwWWmWm@>WmW0iWHeWx@GWpW|Wq'Wq@P6WqEW0iTWmdWq@YsW`aWUݑWI WQ@bWYWUWU)WI@kWx]WU WQ2WU@t*WQ9WIHWQ;XWQ@}gWUvWUWx]DWU@WMȳWY WYMWY@WYWY Wx]V WHe@ W0i- W0i= WHe_L W`a@[ W0ij WHe%z Wmh Wm@ Wt Wx. W|q W@ Wq Wt7 Wxz W|@ Wx! Wx@1 Wx@ Wm@O Wq_ WqIn Wx]} WI@Ό WP: W~R WY W@ W Wn[ W W@ WpՀ" WGd% WH4 W@@C W0i+S W0imb Wtq W|@ W|4 Wv W Wx@ W|= Wx Wx Wt@ WF Wt Wq( Wt@ 8 W0iOG WmV Wqe Wt@u WxX Wq Wmݢ Wt@ Wta Wx Wt Wt@( Wqj Wx W| Wx@1, Wts; WJ WpY W@@:i W>@@B>(>->( =>@@KL>[>ȣj>z>@@T>>pا>(>@]>>>@$>@f>>(!>-1>@o@>O>@^>p6n>p@x}>p>@>@?>(@>(>X>H>x@>>p>xQ%>p@4>(C>S>(Zb>(@q>ހ>x >tc>|@>p>X)>l>X@>|>2 >pu>(@(>(7>p;G>~V>X@e>u>D>>@ɢ>@ >M>>p@>(>XV>@ >@>x,>x_;>J>x@Y>|&i>xhx>x>q@>|/>$q>>@>8>@z>>h@>tA >He/>He>>x]@N>YJ]>x]l>x]{>Y@>mS>x>xظ>m@>m\>m>t>m@#>|e>|#>t2>x@,B>nQ>`>|o>@5>|w>>t>q@>>q>q>t>@G>>x>He'>m@P6>xE>qT>0id>m@Ys>x]>Yݑ>U >x]@b>x]>`a>Y)>Q@k>`a>m >`a2>U@t*>x]9>UH>x];X>He@}g>0iv>0i>HeD>x]@>Yȳ>x] >0iM>q@>q>0i >0iV >q@ >q- >q= >m_L >q@[ >tj >x%z >xh >t@ >| >p. >pq >@ > >7 >z >@ >! >@1 >|@ >x@O >x_ >tIn >t} >He@Ό >Q >.R >2 >|@ >8 >@ [ >S >p@ >ڀ" >d% >S4 >H@C >+S >mmb >tq >q@ >q4 >tv >x >@ >= >X >x >|@ >|F >x >t( >@ 8 >qOG >tV >qe >x@u >qX >t >qݢ >q@ >ta >| >x >@( >|j >x >x >@1, >xs; >|J >Y >@:i >@BX(- =@KL[(jzX@Tا@]h$@fȣ!-1(@o@XOp^p6nX@x}X@?@(@XH@Q%(@4@CS(Zb@q@ހ pc@@()@l@@@@2 @u@((7;G~V(@e(uD@ɢ@ M@XV p@,_;Jx@Yt&ixhxx|@/`[q @ 80cz@xA q/m>He@N0iJ]x]lx]{0i@qS||ظt@m\|px@#|e#x2|@,B|nQp`Xop@5|w|t@>xmx@Gq`a'0i@P6tEqT0id0i@Ys0i`aݑx] x]@bYYU)U@kHeq 0i2x]@t*`a9qH`a;Xm@}g0ivHemDHe@x]ȳq tMx@x0i HeV He@ x- x= x_L t@[ xj |%z |h |@  p. pq @  |7 pz @ ! p@1 x@ t@O x_ In q} x@Ό `a IR | M@ x h[  88@ ~ր" d% 4 S@C +S mb q m@ q4 mv t @ = @  @ xF x |( |@ 8 xOG xV xe @u xX t xݢ x@ xa |  @( j   @1, s; |J |Y |@:i |pq@Bpxp-p =p@@KLp([pjpzp@Tppاpp@]ppp$p@fpp!p-1p@o@ppOp^pp6npX@x}p@pp?p@pp(pHp@pppXQ%p@4pCpȣSpZbp@@qpހpp p(cp@pp)p(lp@@p@p@2 p(up@(p@7p;GpX~Vp@epupDpp@ɢp@ pMpp@ppp|Vp p@p,p_;pxJpq@Ypm&ipthxp|p@p/ppqpp@p8p88zppX@pxA p|/p>pt@NpqJ]p0ilp`a{pq@ptSp|pxظpt@pt\ppXpp@#pep#p|2px@,BptnQp`ppopp@5pwp@pp@>p|pqptp|@Gpxptpm'pm@P6pqEp0iTptdp0i@YspHep`aݑp0i p0i@bpHep`apY)px]@kp0ipx pq2pHe@t*pm9pqHpm;XpHe@}gpHevpHepxDpt@p0iȳpt pMpx@p|pt pmV pt@ p- p|= p_L p@[ p|j p|%z ph p|@ p pX. pXq px@ pt p7 ppz pX@ p! p@1 p|@ pt@O px_ pIn p|} px@Ό p0i p0iR ph6 p2@ pU pt[ p p0@ pCǀ" pXd% p4 p@C p~Ԁ+S ph0mb pq p@@ pq4 ptv p| pX@ p@= p p@ p@ p|F px p( p@ 8 pOG pV ppe pp@u pX p pXݢ p@ pa p p| p@( ppj pX p p@@1, pps; pJ pY p@:i pp@BX(- =@@KL@[jz@Tا@]$@f!-1@o@(OX^@6n@x}?@(XH@@@Q%@4ȣC(S(Zb@qހ c(@()(l(@(2 (u(@(7X;Gp~V@euD(@ɢp |M|@V @|,|_;qJHe@Y`a&imhx@`[ˀ/q`@nڀ8X zX@pA X/p>@N|J]ql|{x@Sظx@|\p@p@#ep#|2x@,BxnQ`XoX@5wpp@>x|pX@Gp|'@P6|ExTtd0i@Ysq|ݑ @bxt|)x@k|p 2@t*t9|H|;Xq@}gtvqD@xȳ Mp@ xV |@ - |= _L @[ j %z Xh (@ p p. (q @@  7 z @ X! p@1 @ @O _ In } X@Ό  R Y M@ `a q[ t @@ " (d% H_4 @C ݀+S mb Xq  <@ 4 v p p@ =   @@ F  ( @ 8 OG V e @u X  ݢ @@ pa  x p@( @j X @ (@1, @s; pJ XY X@:i XGX@BG(G@-G =G@KLG[GjGzG@TGGhاGGP@]GhGhG$G@fGG(!G(-1G(@o@G@OGX^G@6nG@@x}G@G(G(?G@GG@GpHG@@G@G@G(Q%G@4GCG(SG(ZbGX@qG@ހGp GXcG@@GG)G(lG(@G(G@2 G@uG@@(G(7G(;GG@~VG@@eG@uG(DG@GX@ɢG GxMGqGt@GxGVG G@Gt,G_;GxJGHe@YGm&iGthxGXG@G(ڀ/GqGHG@G <ˀ8G`zGGp@GA GX/GX>Gp@NG|J]GxlG{G@GSG|GظG|@G\GpG(GX@#GeGp#G2G@,BGnQG`G@oGp@5GXwG@GpG@>GGG@G(@GG@G(G@'Gp@P6GXEGTGdGx@YsGqG|ݑG G@@bGXGpGX)GX@kGGp Gp2Gp@t*G9G|HG;XG@}gGvGGpDG@GtȳG GXMG@@GG GxV G@ G- G= G_L G@[ G|j Gp%z GXh G@ G G@. Gq G(@ Gp Gx7 Gz Gp@ GX! Gp@1 G|@ G@O G_ GIn G} G@Ό GX GR G0i G`a@ GHe Gq[ Gx Gx@ G(" Gd% G4 G`[@C G(Ԁ+S Ghmb GPq G@ GSɀ4 Gv G Gh@ GP= GP G G@ GF G G( G@ 8 GOG GV Ge G@u GX G Gݢ G@ Ga G( GX G@( Gj G G G@1, Gs; GXJ GpY Gp@:i G(9@B99-9 =9@KL9[9j9hz9@T9h9ا99ȣ@]999ȣ$9(@f9@9X!9X-19X@o@9XO9@^9X6n9X@x}9@9X9@?9@9(9p9pH9@@9p9p9@Q%9@49ȣC9@S9XZb9(@q9@ހ9X 9c9@99()9Xl9X@9X9X2 9Xu9X@(9(79X;G9p~V9@e9u9XD9p9@ɢ9p 9|M9q9t@9|9V9 9|@9x,9_;9xJ90i@Y9q&i9hx990c@9h/9q9H9h@9(89Pz9X9@9|A 9X/9>9X@N9J]9l9{9@9S9p9pظ9p@9X\9@99(@#9pe9#9@29@@,B9XnQ9(`9@o9@59w999p@>99p9(9(@G9@9X9@'9X@P69XE9XT9d9@Ys9|9ݑ9| 9@b9X9X9X)9(@k99 929p@t*9|99tH9;X9@}g9xv9t9|D9@9qȳ9m 9pM9@@9X9| 9|V 9@ 9- 9X= 9@_L 9p@[ 9j 9p%z 9(h 9@ 9 9. 9q 9@@ 9p 97 9z 9X@ 9X! 9@@1 9@ 9p@O 9p_ 9@In 9} 98@Ό 9  9R 9 98@ 9 9ȣ[ 9h 9P@ 9" 90d% 94 9 <@C 9gʀ+S 9ȝmb 9hq 9@ 9ـ4 9rv 9@ 9@ 9X = 9X  9 9@ 9F 9( 9 ( 9$@ 8 9$OG 9(V 9$e 9@u 9X 9 9ݢ 9@ 98a 9 9 9@( 9(j 9X 9@ 9@1, 9@s; 9XJ 9XY 9p@:i 9Xtȣ@Btt-t =t(@KLt[tjtPzt@Ttȣtاtt@]ttȣtX$tp@fttx!t-1tX@o@tXOt(^t@6ntX@x}tXt@t@?t@t(ttXHt@t@ttQ%t@4tȣCtStXZbt(@qt@ހt tXct@@t@tp)tltp@tXt@2 tputp@(tX7tp;Gt~Vt|@etutDtt|@ɢt tMtxtx@tXtpVtp t@tp,t_;tJt0i@Ytm&it(hxtP4t@t/tHqttX@t8tzt|t@tA t@/t(>tX@NtJ]tXlt{t|@tStptpظt@@tX\tptt@#tet#t2t@@,BtnQtp`tot@5twtttp@>ttXtpt@@GtXt(t@'t@P6t@EtTtdt|@Ystxt|ݑt| t@btttp)t@ktt tx2t@t*tx9txHt|;Xt@}gt|vtxtqDt|@ttȳtq tpMtX@tpt tV t@ tp- t(= t_L tp@[ tj tX%z th t@ t( t. tq t@ t t7 tz tX@ t(! t(@1 tX@ t@@O t@_ tIn tH} t@Ό t t R t  t(@ t t[ t t@ t" tpd% t4 t @C th0+S tSmb tnq tr@ t0cʀ4 tGv t( t@ t= t t t@ tpF tp t( t@ 8 tX OG tX V t@ e tp@u tpX t@  tݢ t@ t8a t t tȣ@( tj tp t@ t(@1, t(s; tpJ tY t@:i t kȣ@B k k@- k = k@KL k[ kj kȣz k@T k kا k( k@@] k( k k$ k|@f kt kq! k-1 kp@o@ kpO kp^ kX6n k@@x} kX k@ kX? k@@ kX k kXH kX@ k( k k(Q% k@4 kC kS kpZb k@@q kހ k  kXc kp@ kp kp) kl k@ kp k2  ku k@( k@7 k@;G k~V k@e kpu k@D k@ k@@ɢ k@  kpM k k@ kX kXV kX  k@@ kX, k_; k@J k@Y k|&i kHhx k~ k@ kx/ k`q kh kO@ k8 kz k@ k@ kpA  kp/ k@> k@@N k(J] kl k({ kp@ kXS k@ kXظ kX@ k@\ k( k k@# ke kȣ# k2 k@,B knQ k@` ko kȣ@5 kȣw kȣ k kp@> k k@ kX k@@G k@ kp kp' kX@P6 kXE kpT kd kt@Ys kx kݑ k  k@b kp k( k() kX@k k k  k2 kp@t* kt9 ktH k;X k@@}g kv k| kXD k@ k|ȳ kt  kpM kX@ kp kX k@V k@@ kX- k= k(_L k@@[ k@j k@%z kh k@ k( k(. k(q k@ k( kp7 kz k@@ k@! k(@1 kX@ k@@O kp_ kIn k} k@Ό kp kpR kp k@ kH kx[ k kx@ k`" kHd% k4 k@C k+S kmb kq k@ k4 kv kH k@ k= k kP k @ kF k k( kP@ 8 kOG k V k8e k@u kX k kݢ k@ ka k k( k@( k@j kp k@ k@@1, kXs; kJ k|Y kx@:i k|ȣ@B@- =(@KL[jz@T@@اp@@](($x@ftq!|-1@o@pOX^@6nX@x}p?(@@pHp@XQ%@4CS@Zb@@qXހ| pcp@X)(l@(2 up@(@7@;G@~VX@eXu@D@ɢ @MX@p@V( (@@,_;(J@Y&i88hx@`/q@$@ȣ8@z@(A />ȣ@NhJ]hl{8@8S  ظ @8\hh@#e#2@,BȣnQ`o@5wp@>p(@p@GppX'p@P6(E(Tpd@Ys|pݑ@ p@b@@)p@kp@ p2p@t*|9xH;X@@}g@vXpD@ȳ| M@X@ V p@ p- = _L @@[ Xj @%z Xh @@ X X. @q @@ X X7 |z @ p! @@1 @ p@O p_ @In } 8@Ό   R 8 h@  [  @ " d% P4 h@C +S mb q @ P4 v  @ =   ȣ@ F  ( @@ 8 OG @V e @u X ȣ ȣݢ @ a   X@( j   @1, Xs; pJ Y @:i 8ȣ@B88(-8@ =8(@KL8[8j8z8(@T8X8pا88@]8p8X8p$8@f88t!8|-18p@o@8(O8^8@6n8@@x}8p8p8p?8p@8X88H8p@8X8X8Q%8@48C8S8Zb8X@q8ހ8@ 8@c8X@8X8)8l8@88@2 8u8@(878;G8~V8@e8Xu8@D88(@ɢ8 8M8(8@@88V8 8ȣ@8,8_;8hJ8@Y8(&i8phx8P8x@80/8q88K@8(88@ z8p8(@8A 8/8>8@N8,J]8@l8@{8 <@888S8,8$ظ8@8\888h88@#8he8#8h28@,B8nQ8ȣ`8o8ȣ@58hw8h88X@>8X88X8p@G88X8X'8@P68E8@T8@d8@Ys88Xݑ8X 8X@b8(88()8@k8p8X 828x@t*8x98|H8x;X8p@}g8|v8@8@D8@8pȳ8 8xM8x@88X 8(V 8@@ 8p- 8@= 8(_L 8X@[ 8@j 8%z 8h 8@@ 8@ 8p. 8pq 8@ 8X 8p7 8z 8@@ 8! 8@@1 8@ 8X@O 8_ 8XIn 8} 8@Ό 8( 8R 8 8@@ 8p 8X[ 8 8@ 8(" 8(d% 84 8@C 8+S 8mb 8q 8@ 84 8v 8 8@@ 8(= 8 8 8@ 8F 8 8ȣ( 8@ 8 8XOG 8XV 8@e 8ȣ@u 8X 8 8ݢ 8@ 8a 8 8ȣ 8@( 8@j 8 8p 8X@1, 8@s; 8@J 8XY 8(@:i 8(4@B44(-4( =4@KL4[4ȣj4z4@T44@ا4p4X@]4X44@$4@f44|!4-14X@o@4O4^46n4@x}4@4X4X?4(@4p4X4pH4@@444(Q%4@44C4S4ȣZb4@q4ހ4( 4ȣc4@4X4()4l4ȣ@442 4u4@(4ȣ74;G4~V4x@e4xu4HD440@ɢ4 4M44@4(4 V4$ 4@4,4_;4$J4K@Y4nˀ&i4@hx44 @4h/4ȝq4v4K@4 <À8488z4,4 @4A 4/4>4@N4,J]4P4l4h0{4$@4 S4(4@ ظ4@4`\44 4@#4Pe4P#424P@,B4hnQ4ȣ`4ȣo4@54w444@@>4X4@4X4p@G44p4p'4@@P64E4XT4pd4p@Ys4X4(ݑ4( 4p@b4(44)4X@k4@4X 4p24@t*4x94tH4x;X4@}g4pv4(4@D4@@4pȳ4 4|M4@4X4p 4V 4(@ 4@- 4(= 4@_L 4(@[ 4(j 4%z 4h 4@ 4 4(. 4@q 4@@ 4( 47 4z 4@ 4! 4@1 4@ 4@O 4(_ 4In 4@} 4(@Ό 4@ 4R 4h 4@ 4@ 4p[ 4X 4(@ 4" 4d% 44 4@C 4+S 4(mb 4q 4@@ 44 4v 4 4ȣ@ 4= 4 4ȣ 4@@ 4(F 4 4( 4@ 8 4OG 4V 4e 4@u 4hX 4 4ݢ 4@ 4ȣa 4 4 4ȣ@( 4j 4 4( 4@1, 4s; 4J 4Y 4@:i 4ȣe@Bee-eȣ =e@KLe[ejeze@Teeاee@]eee$e@fe@e@!e-1e@o@eOe^eȣ6neȣ@x}ee@e?e@eee@He@eeȣeQ%e@4ePCehSeZbe@qeހeȣ eceȣ@eȣe)e8leP@ee2 eue@(e 7e;Ge~Ve @ee ue De(e(@ɢe$ e,Me,e(@e$eh0VeP4 e$@e ,e(_;e,Je88@Ye88&ieGhxexWe`[@e`[̀/eOqe$eX @eX 8ezee@eA e`/e`>eH@Ne`J]ele{eH@eHSexexظe@e\ehehe @#e ee8#e2eh@,BenQe`eoeȣ@5eȣweȣe@e@@>eeeep@Geee'e@P6e@EeTedep@Ysepeݑe( eX@be(eeX)e@kee@ e(2e@@t*e9e|He;Xe@}gepveeDeX@eXȳeX e(MeX@e(e eȣV e@ e- e= e_L e@[ ej e%z eh e@ e eȣ. eq e@ e e7 ez eȣ@ eȣ! eȣ@1 e@ eȣ@O e_ eȣIn e@} e@Ό e e R e e@ e( e[ e e@ e" ed% e4 eȣ@C e+S eȣmb eq e@ e4 ev e eȣ@ eȣ= e e e@ e(F e e( e@ 8 ehOG eV ee eh@u ehX eP eݢ eh@ ea e eh eP@( ej eȣ e e@1, es; eJ eY e@:i eeP@BePe-e =eȣ@KLeh[ehjeze@Teeاee@]eeȣe$e@fee!e-1eh@o@eOe^e6neȣ@x}eȣee?e@eeeHeȣ@eeȣeQ%e@4ePCeSe Zbe8@qeހe ece@ee)e8leP@eeȣ2 eue@(e87e;Ge~VeX @eeX ue@ De@ eX @ɢep eMee@eeVe e@e0,e_;eJe@Ye&iehxee0@e/e`qee@e8e ze eP@ePA eP/eP>eh@NehJ]ehle8{eP@ePSe8eظe @eP\eheheP@#e ee#e2eȣ@,BenQe(`e(oe@5e@we(eXe@>e|e|e|e@Ge|e|e'e@@P6eEeTede|@Ysee(ݑe( e@@be@e(e)ep@kee eȣ2e@t*e(9eHe|;Xe|@}gepvee@DeX@e@ȳe( eȣMe(@ee eȣV e@ eȣ- e= e_L e@[ ej eȣ%z eȣh e@ e e. eȣq e@ e eh7 ehz e@ e! e@1 e@ e@O e_ eIn e} e(@Ό e eR e eȣ@ e e@[ e( e(@ e" ed% e4 eȣ@C e+S emb eq e@ e(4 epv e@ e@ e= eȣ e e@ eF eȣ e( e@ 8 ehOG eV ee e@u eX e eݢ e@ ea eȣ e e@( eȣj e e@ e@1, e|s; exJ e|Y e|@:i eP@Bhh- =@KL[PjhzP@Tا8P@]hP$8@f 8! -1 @o@POP^6n@x}?ȣ@(H@ȣQ%@4 C8S8ZbP@qހ c@ȣ)l@ȣ2 u@(ȣ7;G ~V@euxD@ɢ M@V P@8, _; Jh@Y&ihx(@/ȣqȣ@(8(z(@@XA @/@>X@N(J]l{(@Sظ@ȣ\@#eh#2@,B(nQ@`@oX@5|wX@>|tx|@Gxx'X@P6ET|d|@YspݑX X@b)X@k@@ 2@t*9XHp;Xp@}g@v(D@@Xȳ( ȣM@ V @ ȣ- = _L @[ (j %z (h ȣ@  . q ȣ@  7 z ȣ@ ! @1 @ @O h_ ȣIn } X@Ό @ ȣR  @ ( @[  (@ (" @d% (4 (@C +S (mb @q X@ p4 v @ (@ X=   @@ pF | X( @ 8 OG (V e |@u XX ( Xݢ p@ pa  p p@( j t He F@1, 2|s; .|J h6{Y  B{@:i 8>|(P@B(h(h-( =(ȣ@KL([(8j(Pz( @T(P(8ا((h@](P(P(P$(8@f((P!( -1(@o@(hO(ȣ^(6n(@x}(ȣ((?(@((((((H(@(((Q%(ȣ@4(C(hS(Zb(@q(ހ(ȣ (c(ȣ@(()(l(X@(@(X2 ((u(@((7(;G(~V(ȣ@e(ȣu(D((@ɢ(( (@M((@((V( (X@(p,(X_;((J(X@Y(p&i(xhx(x(t@(|/(q(p(x@(x8(z(x(|@(A (/(x>(q@N(qJ](|l({(p@(pS(@(ظ(@(\(((((@#(ȣe(#(ȣ2(@,B(@nQ(p`(po(@5(w((@(X@>((|(x(t@G(x(x('(p@P6(E(T(|d(@Ys((pݑ(( (X@b(x(()(@@k(((X (X2((@t*(9(@H(p;X((@}g(v(((@D(@@(Xȳ(( (ȣM((@(p(p (V (@ (p- (= (X_L (p@[ (Xj (X%z (ph (@ ( (ȣ. (q ((@ ( (7 (ȣz (ȣ@ (! (@1 (X@ (@O (_ (In (@} ((@Ό (X ((R ( (X@ ( (q[ (m (q@ (|" (qd% (x4 (@C (+S (pmb (q (|@ (q4 (mv (t (t@ (|= ( (| (x@ (mF (0i (q( (|@ 8 (OG (V (0ie (He@u (tX ( (ݢ (q@ (xa (0i (`a (He@( (mj (He (Q (h6z@1, (*xs; (&yJ (*xY (P:y@:i ( By/ P@B/ P/ P-/  =/ @KL/ h[/ hj/ Pz/ 8@T/ / Pا/ / @]/ h/ / h$/ P@f/ h/ !/ 8-1/ h@o@/ O/ X^/ 6n/ @@x}/ / / ?/ (@/ p/ / XH/ @/ h/ / Q%/ @4/ C/ PS/ Zb/ @q/ ȣހ/  / c/ @/ / X)/ pl/ p@/ p/ p2 / Xu/ @(/ X7/ @;G/ ~V/ @e/ (u/ XD/ p/ @ɢ/ x / xM/ x/ @/ p/ (V/ ( / @/ ,/ x_;/ |J/ @Y/ t&i/ qhx/ q/ q@/ 0i// tq/ / x@/ |8/ qz/ q/ q@/ xA / x// t>/ q@N/ qJ]/ l/ t{/ @/ |S/ @/ (ظ/ (@/ \/ @/ / @#/ e/ #/ 2/ @,B/ nQ/ @`/ o/ @5/ w/ @/ / X@>/ / / p/ @G/ x/ / p'/ X@P6/ pE/ T/ |d/ @Ys/ X/ @ݑ/ @ / @b/ |/ / )/ X@k/ X/  / 2/ p@t*/ X9/ XH/ p;X/ X@}g/ @v/ X/ XD/ X@/ ȳ/ p / XM/ @/ t/ t / V / |@ / m- / He= / `a_L / 0i@[ / tj / %z / h / @ /  / p. / xq / m@ / x / 7 / Xz / X@ / @! / @1 / @ / @@O / (_ / @In / p} / p@Ό / ( / R / p / @ / | / x[ / m / t@ / |" / td% / x4 / |@C / +S / mb / q / @ / x4 / tv / t / x@ / t= /  /  / @ / xF / t / ( / X@ 8 / @OG / @V / |e / t@u / |X / ( / @ݢ / @ / a / | / t / t@( / |j / | / t / `a@1, / x]s; / YJ / x]Y / `a@:i / HeU h@BU PU -U  =U @KLU [U PjU zU P@TU PU اU U @]U U U 8$U P@fU hU !U -1U @o@U OU X^U 6nU X@x}U U U ?U @U U pU @HU @U U U Q%U @4U CU SU ZbU @qU ހU  U cU @U U X)U lU @@U @U X2 U uU @@(U X7U p;GU X~VU (@eU (uU @DU pU @ɢU x U xMU U t@U XU @VU  U @@U X,U p_;U |JU x@YU &iU thxU qU q@U `a/U 0iqU U |@U x8U xzU tU x@U qA U |/U t>U q@NU xJ]U |lU |{U @U XSU XU XظU @U \U U U @#U eU #U @2U @,BU nQU (`U XoU @5U wU @U (U p@>U xU U pU @GU |U pU @'U p@P6U pEU TU |dU @YsU U ݑU p U p@bU U U )U @kU U | U |2U @t*U |9U tHU |;XU |@}gU vU xU xDU X@U ȳU x U |MU x@U qU 0i U qV U t@ U 0i- U He= U q_L U x@[ U j U X%z U h U @ U  U x. U qq U q@ U p U @7 U @z U @ U ! U @@1 U @@ U @O U (_ U In U (} U (@Ό U  U hR U  U X@ U  U [ U  U @ U @" U pd% U p4 U X@C U (+S U mb U @q U @ U p4 U v U  U p@ U X= U @ U ( U @ U F U p U ( U @ 8 U hOG U hV U e U X@u U @X U  U ȣݢ U @ U a U  U X U X@( U Xj U  U @ U p@1, U ps; U pJ U pY U @@:i U @`!@B`!P`!-`!ȣ =`!ȣ@KL`![`!j`!8z`!h@T`!`!ا`!`!@]`!ȣ`!`!$`!ȣ@f`!ȣ`!!`!-1`!@o@`!ȣO`!(^`!6n`!ȣ@x}`!`!`!?`!(@`!`!(`!H`!@`!`!`!Q%`!@4`!C`!S`!Zb`!@q`!ȣހ`! `!c`!ȣ@`!`!X)`!Xl`!(@`!(`!@2 `!u`!@(`!@7`!X;G`!(~V`!@e`!u`!D`!`!(@ɢ`!@ `!pM`!X`!@`!p`!V`! `!@`!@,`!_;`!J`!p@Y`!p&i`!hx`!|`!0i@`!F/`!Fq`!`a`!x@`!m8`!tz`!x`!x@`!tA `!/`!>`!@N`!J]`!l`!{`!@@`!XS`!X`!@ظ`!(@`!(\`!@`!`!@#`!e`!#`!q2`!p@,B`!pnQ`!``!o`!q@5`!tw`!`!@`!@>`!t`!t`!t`!q@G`!m`!|`!p'`!@P6`!|E`!xT`!|d`!x@Ys`!|`!xݑ`! `!@b`!p`!|`!|)`!@k`!`! `!2`!@t*`!t9`!xH`!x;X`!|@}g`!v`!`!pD`!(@`!@ȳ`!| `!M`!@`!`!t `!tV `!@ `!- `!= `!_L `!@[ `!j `!ȣ%z `!h `!@ `! `!X. `!q `!@ `! `!7 `!ȣz `!@ `!h! `!ȣ@1 `!(@ `!@O `!ȣ_ `!In `!ȣ} `!@Ό `! `!PR `! `!@ `!( `!([ `!@ `!(@ `!" `!(d% `!(4 `!(@C `!+S `!mb `!ȣq `!(@ `!X4 `!v `! `!@ `!= `! `!ȣ `!@ `!F `!ȣ `!( `!8@ 8 `!OG `!V `! e `!@u `!X `! `!ݢ `!@ `!a `!ȣ `! `!@( `!j `! `! `!ȣ@1, `!ȣs; `!J `!ȣY `!@:i `!!@B!!h-! =!@KL![!j!z!@T!!ا!!@]!!@!$!(@f!!!!-1!@o@!O!ȣ^!ȣ6n!@x}!!!?!@!!!H!@!!!Q%!@4!C!S!Zb!@q!ހ! !c!ȣ@!ȣ!)!Xl!@!!2 !u!@(!X7!;G!p~V!(@e!(u!ȣD!!@ɢ! !XM!!p@!!V! !(@!,!_;!J!@Y!(&i!Xhx!!`a@!F/!Mq!`a!m@!m8!z!!|@!|A !/!X>!@N!xJ]!|l!{!X@!pS!!ظ!@!t\!t!!(@#!Xe!x#!m2!t@,B!|nQ!x`!0io!He@5!xw!p!@!p@>!|!X!!X@G!p!@!X'!X@P6!@E!T!(d!(@Ys!X!@ݑ! !@b!!!)!@k!! !ȣ2!@t*!9!ȣH!;X!@}g!v!!D!@!ȳ! !(M!@!! !V !@ !- != !_L !h@[ !hj !%z !h !@ ! !. !q !@ ! !7 !ȣz !@ !h! !@1 !(@ !@O !_ !In !} !ȣ@Ό ! !PR ! !@ !ȣ ![ ! !ȣ@ !" !d% !4 !@C !ȣ+S !ȣmb !q !ȣ@ !ȣ4 !v ! !@ != ! ! !@ !F !ȣ !( !P@ 8 !OG !V !e !@u !8X !h !ݢ !@ !a !@ !X !(@( !j !h !h !@1, !ȣs; !J !PY !@:i !ȣ"@B""-" ="@KL"["j"z"@T""ا""(@]""@"$"@f""ȣ!"-1"@o@"O"ȣ^"6n"@x}"""?"h@""ȣ"H"(@"""Q%"@4"C"S"Zb"@q"ހ" "ȣc"@"ȣ")"Xl"@@"X"X2 "@u"@@("p7";G"~V"p@e"u"D""@ɢ"( "XM""x@"x"xV"x "p@","_;"|J"@Y"X&i"phx"|"m@"He/"qq"0i"m@"x8"z"X"X@"A "@/"@>"p@N"J]"l"p{"(@"XS"X"@ظ"@@"p\""X"(@#"e"p#"p2"(@,B"@nQ"X`"po"@5"@w"ȣ"ȣ"@>"@"""@G"""'"ȣ@P6"E"ȣT"d"@Ys""ȣݑ" "h@b"h"ȣ"ȣ)"ȣ@k"" "2"h@t*"89"hH";X"h@}g"Pv""hD"8@"hȳ" "M"@"" "ȣV "@ "- "= "ȣ_L "@[ "Pj "P%z "h "@ " "ȣ. "q "(@ " "ȣ7 "z "@ "! "@@1 "ȣ@ "@O "_ "In "} "ȣ@Ό "ȣ "R " "@ " "[ " "@ "" "hd% "P4 "@C "+S "mb "q "@ "4 "hv "8 " @ "P= "h "h "@ "F " "( "P@ 8 "OG "V " e "@u "hX " "ݢ "h@ "ȣa "@ " "p@( "j " " "@1, "s; "J "hY "@:i "*#@B*#ȣ*#-*# =*#ȣ@KL*#[*#j*#z*#@T*#*#ا*#*#@]*#*#*#$*#@f*#*#!*#-1*#@o@*#ȣO*#ȣ^*#6n*#h@x}*#*#h*#h?*#h@*#*#*#H*#@*#*#ȣ*#Q%*#@4*#C*#ȣS*#Zb*#ȣ@q*#ȣހ*# *#c*#@*#*#@)*#pl*#X@*#p*#X2 *#pu*#@(*#7*#x;G*#t~V*#@e*#pu*#@D*#*#(@ɢ*#X *#|M*#t*#q@*#*#|V*#t *#@*#p,*#|_;*#xJ*#|@Y*#&i*#phx*#p*#@*#/*#Xq*#(*#X@*#@8*#(z*#(*#@*#A *#/*#>*#@N*#J]*#l*#{*#@*#S*#ȣ*#ظ*#@*#ȣ\*#*#*#@#*#e*#@#*#(2*#@,B*#nQ*#`*#ȣo*#@5*#w*#*#h*#@>*#*#*#*#@G*#ȣ*#*#'*#@P6*#ȣE*#ȣT*#d*#@Ys*#ȣ*#ݑ*# *#P@b*#*#*#)*#@k*#*#P *#82*#@t**#9*# H*#8;X*# @}g*# v*#h*#PD*#8@*#Pȳ*#h *#M*#@*#8*# *#hV *#@ *#- *#= *#_L *#@[ *#j *#%z *#h *#@ *# *#ȣ. *#q *#@ *# *#7 *#z *#@ *#! *#@1 *#@ *#h@O *#h_ *#PIn *#ȣ} *#@Ό *#h *#PR *#  *# @ *#h *#h[ *# *#h@ *#8" *# d% *# 4 *#8@C *#P+S *#mb *#q *#@ *#P4 *#Pv *#  *#@ *#= *#8 *#P *#h@ *#F *#ȣ *#( *#@ 8 *#hOG *#8V *#e *#@u *#X *# *#ݢ *#8@ *#Pa *#ȣ *#ȣ *#@( *#ȣj *#h *#h *#@1, *#s; *#J *#Y *#h@:i *#hF#@BF#F#-F# =F#ȣ@KLF#ȣ[F#ȣjF#ȣzF#ȣ@TF#F#اF#F#ȣ@]F#F#ȣF#h$F#@fF#F#!F#-1F#@o@F#OF#^F#h6nF#h@x}F#PF#PF# ?F#P@F#F#ȣF#(HF#@F#F#F#Q%F#X@4F#CF#ȣSF#ZbF#@qF#ȣހF# F#ȣcF#@F#(F#()F#@lF#@F#F#p2 F#puF#@(F#7F#;GF#~VF#p@eF#@uF#(DF#F#@ɢF#X F#|MF#xF#|@F#@F#pVF# F#X@F#,F#_;F#pJF#X@YF#&iF#(hxF#F#@F#/F#qF#F#@F#ȣ8F#zF#F#ȣ@F#A F#/F#h>F# @NF#8J]F#hlF#h{F# @F#PSF#hF#ظF#h@F#\F#F#F#@#F#eF#ȣ#F#2F#h@,BF#8nQF#`F#oF#@5F#wF#F#F#@>F#F#F#F#h@GF#F#F#P'F#h@P6F#EF#TF#hdF#h@YsF#PF#ݑF# F#P@bF#F#F#)F#@kF#F#8 F#82F#@t*F#9F#HF# ;XF# @}gF#PvF#8F#hDF#@F#ȳF#h F#hMF#h@F#hF#h F#hV F#@ F#ȣ- F#= F#_L F#@[ F#8j F#%z F#hh F#P@ F# F#ȣ. F#q F#@ F#P F#7 F#Pz F#@ F#h! F# @1 F#@ F#@O F#_ F#8In F#} F#h@Ό F# F#R F# F#@ F# F#8[ F#8 F#8@ F# " F#d% F#4 F#@C F#+S F#mb F#8q F# @ F# 4 F#8v F# F#@ F#= F# F#  F#8@ F#F F#ȣ F#( F#@ 8 F#OG F#8V F#e F#@u F#X F# F#ݢ F#h@ F# a F#8 F# F#@( F#Pj F# F#8 F#h@1, F#s; F#PJ F# Y F#8@:i F#h[$@B[$[$-[$ =[$@KL[$[[$j[$8z[$@T[$[$ا[$[$ȣ@][$[$[$8$[$ @f[$h[$![$P-1[$@o@[$O[$^[$6n[$@x}[$P[$P[$P?[$h@[$[$([$(H[$(@[$([$ȣ[$Q%[$@4[$C[$S[$hZb[$@q[$ހ[$ [$hc[$h@[$[$)[$l[$p@[$|[$2 [$pu[$X@([$7[$;G[$~V[$@e[$u[$D[$ȣ[$ȣ@ɢ[$ [$M[$@[$@[$[$(V[$ [$@[$,[$_;[$J[$@Y[$&i[$hx[$[$@[$/[$q[$8[$h@[$8[$z[$[$@[$hA [$P/[$ >[$@N[$ J][$Pl[$h{[$P@[$8S[$8[$8ظ[$8@[$h\[$[$[$@#[$ȣe[$#[$2[$P@,B[$8nQ[$ `[$ho[$@5[$w[$[$[$@>[$8[$[$[$@G[$h[$[$'[$@P6[$E[$T[$8d[$P@Ys[$8[$hݑ[$P [$h@b[$h[$[$ȣ)[$@k[$[$P [$82[$ @t*[$9[$H[$;X[$8@}g[$ v[$[$D[$h@[$ȳ[$ [$hM[$P@[$8[$  [$PV [$@ [$- [$= [$8_L [$ @[ [$8j [$%z [$hh [$@ [$ [$ȣ. [$q [$@ [$h [$ 7 [$Pz [$8@ [$P! [$@1 [$@ [$@O [$_ [$ In [$8} [$ @Ό [$ [$R [$ [$@ [$ [$[ [$P [$ @ [$" [$d% [$4 [$@C [$+S [$ mb [$ q [$@ [$4 [$v [$ [$@ [$= [$ [$  [$h@ [$hF [$ȣ [$( [$@ 8 [$OG [$V [$he [$@u [$X [$ [$ݢ [$h@ [$ha [$8 [$h [$@( [$hj [$ [$ [$@1, [$s; [$PJ [$PY [$8@:i [$s$ȣ@Bs$s$P-s$P =s$h@KLs$P[s$Pjs$8zs$8@Ts$Ps$hاs$s$@]s$s$s$h$s$8@fs$Ps$h!s$h-1s$@o@s$Os$^s$6ns$@x}s$Ps$s$?s$@s$s$ȣs$ȣHs$@s$s$s$Q%s$(@4s$ȣCs$ȣSs$Zbs$@qs$hހs$P s$cs$@s$s$ȣ)s$ls$@s$Xs$X2 s$us$ȣ@(s$7s$;Gs$~Vs$@es$us$Ds$s$@ɢs$ s$Ms$ȣs$ȣ@s$s$Vs$ s$h@s$,s$_;s$Js$@Ys$h&is$hxs$s$@s$/s$qs$8s$8@s$P8s$Pzs$8s$@s$hA s$/s$>s$ @Ns$8J]s$hls$P{s$P@s$8Ss$8s$8ظs$P@s$8\s$s$Ps$h@#s$hes$#s$h2s$@,Bs$8nQs$`s$os$h@5s$ws$s$Ps$P@>s$8s$hs$ȣs$@Gs$hs$Ps$h's$@P6s$Es$hTs$8ds$P@Yss$hs$Pݑs$P s$8@bs$Ps$hs$ȣ)s$h@ks$Ps$  s$ 2s$8@t*s$89s$ Hs$ ;Xs$8@}gs$vs$ s$8Ds$P@s$hȳs$8 s$PMs$P@s$s$ s$ V s$h@ s$- s$= s$_L s$@[ s$j s$h%z s$hh s$P@ s$P s$. s$q s$h@ s$P s$P7 s$8z s$h@ s$ ! s$P@1 s$@ s$@O s$8_ s$ In s$8} s$ @Ό s$ s$R s$  s$@ s$ s$ [ s$h s$@ s$" s$d% s$4 s$@C s$+S s$mb s$ q s$h@ s$84 s$ v s$  s$@ s$= s$  s$P s$ @ s$ F s$ s$P( s$8@ 8 s$OG s$V s$e s$@u s$X s$h s$Pݢ s$ @ s$8a s$ s$P s$@( s$8j s$ s$ s$ @1, s$8s; s$8J s$8Y s$8@:i s$  %h@B %8 %P- %  = % @KL %[ %j %z % @T %  %8ا % %h@] % %P % $ %@f %h %h! %8-1 %@o@ %O %^ %h6n %h@x} %8 %h %h? %h@ % % %H %ȣ@ % % %Q% %@4 %ȣC %S %Zb %@q %ހ %8  %hc %@ % %ȣ) %ȣl %@ % %ȣ2  %u %P@( %h7 %;G %~V %h@e %u %hD % %@ɢ %8  %hM %h %@ %h %8V %P  %P@ %P, %P_; %J %h@Y % &i %hhx %P %@ %/ %q %P %P@ %P8 %Pz %h %@ %hA  %P/ %> %@N %J] %Pl %P{ % @ %S % %ظ %P@ %8\ % % %P@# %he %P# % 2 %@,B %nQ %` %o %h@5 %hw %8 % %@> % %P % %@G %P %8 %8' % @P6 %8E % T %d %8@Ys %8 %Pݑ %   %@b %P %h %) %@k %P %h  %P2 %@t* %9 %hH % ;X %@}g %v % %PD %@ % ȳ %  %PM %8@ % % %V %@ %- % = %_L %@[ %j %%z %h %@ %  %P. %8q %@ % %87 %8z %P@ %! %@1 %@ %@O % _ %In % } %@Ό % %R % %@ % %[ %  % @ %" %d% %4 %@C %+S %mb %q % @ %P4 %v %  %@ %= %8 %8 %@ %xF % % ( %P@ 8 % OG % V % e %@u %X % %ݢ %@ %a % % % @( %j % % %@1, %8s; %J %PY % @:i %%&P@B%&h%&P-%& =%& @KL%&[%&j%&z%& @T%& %&Pا%&8%&@]%&%&%&h$%&P@f%&%&8!%&8-1%&@o@%&O%&^%&6n%&P@x}%& %& %&8?%& @%&P%&P%&PH%&@%&%&%&hQ%%&@4%&C%&PS%&hZb%&h@q%&Pހ%&  %& c%& @%&%&)%&l%&h@%&%&h2 %&u%&8@(%&87%&P;G%&8~V%& @e%&Pu%&hD%&P%&@ɢ%& %&PM%&P%&@%&h%& V%&  %&8@%& ,%&8_;%&J%&P@Y%&8&i%&8hx%&8%&P@%&/%&8q%&P%& @%&88%&8z%&P%&@%&A %& /%&>%&@N%&J]%&8l%&P{%&8@%& S%&%&ظ%&8@%& \%&%&%&@#%&8e%& #%&P2%& @,B%& nQ%&`%&o%&P@5%&w%&%&%&@>%&%&8%&%&@G%&P%&%& '%&h@P6%&hE%&8T%& d%&P@Ys%&h%&Pݑ%&  %&8@b%&P%&P%&)%&ȣ@k%&%& %&2%&@t*%&9%&PH%&8;X%&@}g%&v%&%&D%&@%&ȳ%& %&M%&@%&%& %&V %&@ %&- %& = %&_L %&@[ %&j %&%z %&h %&@ %& %& . %&q %&@ %& %&7 %& z %&@ %&! %&@1 %&@ %&`@O %&_ %&In %&} %&@Ό %& %&R %& %&@ %& %&[ %& %&@ %&" %&`d% %&4 %&@C %&+S %&mb %&q %&@ %&4 %&v %& %&@ %&= %& %& %&@ %&xF %& %&( %&@ 8 %&8OG %&V %&e %&@u %&X %& %&xݢ %&@ %&xa %& %& %&@( %&j %& %& %&@1, %&8s; %&PJ %&hY %& @:i %&6&h@B6&6&-6&h =6&8@KL6&[6&j6&z6&@T6& 6& ا6&h6&@]6&h6&86&8$6&8@f6&P6&P!6& -16& @o@6&hO6&^6&P6n6& @x}6&6&6&?6&@6& 6&6&H6&P@6& 6&h6&8Q%6&8@46&8C6&S6&PZb6& @q6&ހ6& 6&c6&@6&6& )6&l6& @6&P6&P2 6& u6&@(6&76& ;G6& ~V6& @e6&u6& D6&86&@ɢ6&8 6&8M6&86&h@6&P6& V6& 6&@6& ,6&h_;6&J6&h@Y6&8&i6&8hx6&6&P@6&8/6& q6&6& @6&886& z6&h6&h@6&8A 6&/6&>6&@N6& J]6&Pl6&h{6&P@6&S6&6&ظ6& @6&\6&6&6&@#6&8e6& #6&h26&8@,B6&PnQ6& `6& o6&8@56&w6&6&P6& @>6&6&6&6&@G6&6&P6& '6&P@P66&PE6& T6&hd6&@Ys6&6&hݑ6&8 6& @b6&P6&6&)6&@k6&6& 6&P26&h@t*6&P96&H6&;X6& @}g6&v6&6&8D6&@6&ȳ6& 6&xM6&@6&6&x 6&V 6&@ 6&- 6&= 6&_L 6&@[ 6&xj 6&%z 6&h 6&@ 6& 6&. 6&q 6&@ 6& 6&7 6&z 6&@ 6&P! 6&@1 6&`@ 6&`@O 6&_ 6&In 6&} 6&`@Ό 6& 6&R 6& 6&@ 6& 6&[ 6& 6&@ 6&" 6&d% 6&4 6&x@C 6&+S 6&mb 6&q 6&@ 6&4 6&v 6&H 6&0@ 6&= 6& 6& 6&@ 6&F 6& 6&( 6&@ 8 6&OG 6&V 6&e 6&@u 6&X 6&x 6&xݢ 6&@ 6&a 6& 6& 6& @( 6&8j 6&8 6&  6&P@1, 6&s; 6&J 6&Y 6&@:i 6&PV'@BV'V'P-V'8 =V'@KLV'[V'jV'zV'@TV'V'اV'PV'8@]V'8V'V'$V'@fV' V' !V' -1V' @o@V' OV'P^V' 6nV'@x}V'V'V'?V'@V'V'V'HV'@V'V'V'Q%V'@4V'CV'SV' ZbV'@qV'ހV' V'cV'@V'xV')V'lV'@V'8V'2 V'uV'@(V'7V' ;GV'8~VV'P@eV'uV'DV'V'P@ɢV'8 V'PMV'PV'8@V' V'VV' V' @V',V'ȣ_;V'JV'h@YV'h&iV' hxV' V'@V'8/V' qV'V'P@V'88V' zV'V'h@V'8A V'/V'>V' @NV' J]V'PlV'h{V'@V' SV'V' ظV'P@V'P\V'V'V' @#V' eV'8#V'P2V'8@,BV' nQV' `V'PoV'@5V'ȣwV'ȣV'hV'@>V'V'V'V'@GV'V'PV''V'8@P6V' EV'TV'8dV'h@YsV'V'ݑV'h V'h@bV'V'V'@)V'@kV'V'h V'2V'P@t*V'h9V'hHV';XV'@}gV'vV'V'DV'h@V'PȳV' V'MV'@V'V'H V'`V V'`@ V'- V'= V'_L V'@[ V'j V'x%z V'h V'@ V'  V'. V'q V'@ V' V'7 V'z V'@ V'8! V'@1 V'@ V'@O V'_ V'In V'} V'x@Ό V'` V'xR V' V'@ V' V'x[ V' V'@ V'x" V'xd% V'`4 V'`@C V'+S V'mb V'q V'H@ V'H4 V'Hv V'H V'@ V'x= V' V' V'x@ V'F V' V'x( V'x@ 8 V'OG V'V V'e V'@u V'X V' V'ݢ V'@ V'a V' V' V'@( V'hj V'8 V'8 V'@1, V'ȣs; V'ȣJ V'Y V'@:i V'c'8@Bc' c'-c' =c'@KLc'[c'jc'zc'@Tc'c'اc'c'@]c'c'c'$c'@fc'c'!c'-1c'@o@c'Oc'^c'6nc'@x}c'c' c'?c'@c'xc'`c'Hc'@c'c'c'Q%c'@4c'Cc'Sc' Zbc'@qc'ހc' c'cc'@c'c')c'lc'@c' c'2 c'uc'@(c'7c'P;Gc'~Vc'ȣ@ec'uc'Dc'c'@ɢc'P c'hMc'Pc' @c'8c'Vc'  c'8@c'h,c'_;c'hJc'@Yc'h&ic'hxc'c' @c'8/c'qc'c' @c'88c' zc'8c'h@c' A c'/c' >c' @Nc'8J]c'8lc' {c'@c'PSc'c'8ظc'h@c'\c'Pc'8c' @#c' ec' #c'P2c'P@,Bc'PnQc'P`c'8oc'h@5c'ȣwc'c'Pc'@>c'c'hc'Pc'@Gc'c'Pc'8'c' @P6c' Ec'Tc'dc'8@Ysc'c'ݑc'ȣ c'ȣ@bc'c'c')c'@@kc'c'h c'2c'P@t*c'9c'Hc';Xc'@}gc'hvc'hc'hDc'8@c'Pȳc'P c'Mc'@c'c'x c'xV c'x@ c'x- c'= c' _L c'@[ c'j c'%z c'h c'@ c' c'. c'q c'@ c' c'7 c'z c'@ c'8! c'@1 c'@ c'@O c'_ c'In c'} c'@Ό c' c'R c' c'@ c' c'[ c' c'@ c'" c'`d% c'x4 c'x@C c'8+S c'mb c'q c'x@ c'`4 c'xv c'` c'`@ c'= c' c' c'@ c'F c' c'( c'@ 8 c'8OG c'PV c'e c'@u c'X c'P c'8ݢ c' @ c'Pa c'P c' c'8@( c'hj c'8 c'h c'@1, c's; c'J c'Y c'@:i c'ȣ(@B((-(` =(H@KL([(j(z(x@T((ا((@](( ($(@f((!(-1(@o@(O(^(6n(@x}(((?(x@((x(xH(x@(((Q%(@4(C(S(Zb(@q(ހ( (c( @(()(l(@(P(2 ( u(8@((P7(;G(ȣ~V(@e(u(D((h@ɢ(h (M((h@((V(  (@(,(_;(8J(P@Y(8&i(hx( ( @(8/(q((8@(8(z( (P@(8A (/(P>(@N(8J](Pl(h{(ȣ@(S(ȣ(ظ(@(\(8((P@#(Pe(P#(2(h@,B(nQ(`(o(@5(ȣw((P(@>((P(h(@G(ȣ((P'( @P6( E( T(d(8@Ys(h(ȣݑ( (ȣ@b((()(ȣ@k((h (h2(P@t*(P9(PH(8;X( @}g(v((8D(8@(hȳ(8 (M(@(( (V (@ (- (8= (P_L (P@[ (j (%z (8h (@ (  (8. (q (@ (8 (87 (Pz (@ (P! (@1 (@ (@O (8_ ( In (} (@Ό ( (8R ( (@ (  ( [ ( (@ (" (d% (x4 (@C (P+S (8mb (q (@ (84 (8v ( (@ (= ( ( (P@ (PF ( (( ( @ 8 (OG (V (8e (P@u (hX ( (ݢ (@ (a (h (P (@( (j ( ( ((@1, (ps; (pJ (Y (p@:i (X )@B ) )x- )H = )@KL )[ )j )z )@T )0 )ا ) )@] ) ) )$ )@f ) )! )-1 )@o@ )O )^ )6n )@x} ) ) )? )x@ ) ) )H )@ ) ) )Q% )@4 )C )S )Zb )@q )ހ )  )8c )@ ) )) ) l ) @ )8 ) 2  )8u )P@( )87 )8;G )~V )ȣ@e )u )D ) )h@ɢ )8  )8M )8 )8@ )  )8V )   )@ ), )_; )J )8@Y )&i )hx ) )8@ )h/ )Pq ) )8@ )8 ) z )  )P@ ) A  )P/ )h> )h@N )J] )l ){ )@ )S )( )ظ )@ )\ )P ) )h@# )he )P# )2 )ȣ@,B )nQ )h` )ho )@5 )w ) )h )h@> )  )h )h )@G )ȣ )ȣ )' )8@P6 )8E )8T )d )@Ys )h )ݑ )  )h@b )8 ) )) )@k )h )  )82 )@t* )89 )PH )h;X ) @}g )v )P )hD )@ )ȳ )  )8M )8@ )P )  )PV ) @ ) - )= )_L )h@[ )j ) %z )hh )8@ )h )P. ) q ) @ )h )87 )Pz )8@ )8! ) @1 ) @ ) @O )h_ )hIn )} )@Ό ) )PR ) )P@ )P )8[ ) )@ ) " )d% )4 )@C )+S )mb )8q )@ )h4 )v ) )@ ) = )P ) )@ )F )8 ) ( )@ 8 )OG )8V )8e )8@u )X ) )ݢ )@ )a )8 ) )P@( )j )P ) )@1, )(s; )(J )(Y )(@:i )(')@B')')`-')x =')@KL')[')j')z')@T')')ا')')@]')x')')$')@f')')!')-1')@o@')O')^')6n')@x}')')')`?')x@')')')H')@')') ')Q%')@4')C')S')Zb')@q')ހ') ')c')@')'))')l')@') ') 2 ')Pu') @(')7');G') ~V')h@e')u')8D') ')@ɢ')8 ') M')')@')')PV')P ')@'),')_;')J')@Y')&i')hx')') @')h/')hq') ')8@')8') z') ')P@') A ') /')h>')@N')J]')Pl')h{')@')S')')hظ')h@')P\')8')h')8@#')e')h#')h2')@,B')PnQ')8`')o')h@5')w')')8')P@>')h')P')ȣ')@G')')')P'')P@P6')hE')PT') d') @Ys')8')Pݑ')8 ')@b')')')P)')h@k')')h ')h2')@t*')9')8H')P;X')8@}g')v')8')ȣD')@')Pȳ') ')8M')@')') ')8V ')@ ')- ')= ')h_L ')P@[ ') j ')%z ')h ')@ ')8 ')8. ')8q ')@ ')P ')7 ')z ')@ ')! ') @1 ')@ ')@O ')8_ ')PIn ')} ')@Ό ')  ')R ')P ')@ ') ')[ ') ') @ ')" ') d% ')4 ')8@C ')P+S ')hmb ')Pq ')h@ ')4 ')ȣv ') ')P@ ') = ') ') ')@ ')hF ')  ')8( ')@ 8 ')OG ') V ')e ')8@u ')X ')h ')ݢ ')@ ')Pa ')8 ') ')8@( ')Pj ')P ')h ')@1, ')s; ')ȣJ ')ȣY ')@:i ')Q*x@BQ*Q*-Q* =Q*@KLQ*[Q*jQ*zQ*@TQ*`Q*xاQ*Q*@]Q*xQ*Q*`$Q*x@fQ*Q*!Q*`-1Q*@o@Q*OQ*^Q*6nQ*x@x}Q*Q*xQ*x?Q*H@Q*xQ*xQ*`HQ*@Q*Q*Q*Q%Q*@4Q*xCQ*SQ*ZbQ*@qQ*ހQ* Q*cQ*@Q*0Q*`)Q*lQ*@Q* Q*82 Q*8uQ*@(Q*7Q*;GQ* ~VQ*P@eQ*huQ*DQ*8Q*@ɢQ* Q* MQ*PQ*@Q*8Q*VQ*h Q*8@Q*,Q*_;Q*JQ*@YQ*&iQ* hxQ* Q*h@Q*/Q*PqQ* Q*8@Q*8Q*8zQ*hQ*8@Q* A Q*/Q* >Q*8@NQ*hJ]Q* lQ* {Q*@Q*PSQ*8Q*8ظQ* @Q* \Q*hQ*hQ* @#Q*heQ*P#Q*2Q*8@,BQ* nQQ*`Q*oQ*8@5Q*hwQ*hQ*8Q* @>Q*8Q*hQ*hQ*P@GQ*Q*hQ*'Q*h@P6Q* EQ*PTQ* dQ*@YsQ*Q* ݑQ* Q*@bQ*Q*8Q*ȣ)Q*@kQ*hQ*8 Q*2Q*@t*Q*9Q*PHQ*;XQ*h@}gQ*8vQ*PQ*DQ*ȣ@Q*PȳQ* Q*MQ*@Q*Q* Q*V Q*@ Q*- Q*= Q*8_L Q*h@[ Q* j Q* %z Q*8h Q* @ Q* Q*8. Q* q Q* @ Q*h Q*h7 Q*z Q*@ Q*P! Q*8@1 Q* @ Q*P@O Q*h_ Q*In Q*} Q*@Ό Q* Q*R Q*P Q*@ Q* Q*[ Q* Q*8@ Q*8" Q*8d% Q*4 Q*P@C Q*P+S Q*hmb Q*8q Q*P@ Q*h4 Q*v Q*h Q* @ Q*P= Q*8 Q* Q*@ Q*8F Q*8 Q*P( Q*@ 8 Q*OG Q*hV Q* e Q*@u Q*X Q* Q*ݢ Q*h@ Q*Pa Q*8 Q*8 Q*P@( Q*8j Q*P Q*P Q* @1, Q* s; Q*hJ Q*hY Q*h@:i Q*PT*@BT*T*-T* =T*@KLT*[T*xjT*`zT*@TT*HT*xاT*T*@]T*0T*`T*`$T*@fT*T*!T*x-1T*`@o@T*OT*x^T*6nT*@x}T*`T*HT*`?T*H@T*HT*HT*xHT*@T*T*T*Q%T*@4T*HCT*`ST*ZbT*@qT*ހT* T*cT*@T*HT*)T*lT*@T*T*82 T*uT*@(T*7T*;GT*8~VT*P@eT*uT*DT*T*@ɢT* T*MT*8T*@T*PT*PVT*  T*@T*,T*P_;T*JT*@YT*&iT*hxT*T*h@T*h/T*hqT*hT*P@T*8T*zT*PT* @T*A T*/T* >T*8@NT*J]T* lT*{T*@T* ST* T*ظT* @T*P\T*T*PT*8@#T*heT*8#T*P2T* @,BT*nQT*x`T*oT*P@5T*hwT*T*PT*h@>T* T*8T*8T*8@GT*PT*T*ȣ'T*@P6T*8ET* TT*8dT*P@YsT* T*ݑT*  T*@bT*T*PT*)T*ȣ@kT*ȣT* T*2T*@t*T*9T*HT*;XT*@}gT* vT*8T*PDT*h@T*PȳT*P T* MT*@T*T*  T*V T*@ T*- T*= T*h_L T*h@[ T*Pj T* %z T*h T*@ T* T*. T*q T*@ T* T*h7 T*z T*P@ T*! T*P@1 T* @ T*@O T*_ T*@In T*} T*@Ό T* T*ȣR T*P T*@ T* T*P[ T* T*P@ T* " T*8d% T*4 T*8@C T*h+S T*hmb T* q T*h@ T*P4 T*8v T*8 T*@ T*8= T*8 T*h T*8@ T* F T* T* ( T*P@ 8 T*POG T*V T*e T*@u T*X T* T*ݢ T*P@ T*a T* T* T*P@( T*Pj T*8 T*P T* @1, T*s; T*8J T*8Y T* @:i T*+@B+x+H-+ =+@KL+x[+xj+`z+`@T+H+xا+x+`@]+0+`+$+x@f++`!+0-1+H@o@+xO+x^+6n+@x}+`+H+`?+`@+H+`+H+@+++Q%+@4+C+S+Zb+@q+ހ+ +c+@+x+)+l+@+8+ 2 +u+@(+7+;G+~V+P@e+Pu+PD+h+@ɢ+ +M++@+8+V+ + @+,+_;+J+@Y+&i+hx++P@+h/+q++8@+8+z+ +P@+8A +8/+P>+8@N+8J]+l+{+@+S++ظ+@+\+P+h+@#+he+ #+ 2+@,B+nQ+x`+o+@5+8w+8+ +h@>+P+ +P+@G+8++'+h@P6+8E+PT+8d+@Ys+8+ ݑ+  +@b+ +8+P)+@k++P +82+h@t*+9+H+ ;X+ @}g+v++D+@+ȳ+h +M+@++ +V +@ +- + = +h_L +h@[ +8j +%z +h +@ + +. +q +@ + +87 +z +P@ +! +8@1 +P@ +@O +X_ +In +P} +P@Ό + +R + +8@ +8 + [ +  +@ +" +d% +4 +@C +8+S + mb +q +@ + 4 +v + +@ += + + +8@ +F + +( +8@ 8 +8OG +V +e +@u +X + +ݢ + @ +a +  +8 +P@( +Pj +8 +  +@1, +s; +PJ +hY +h@:i +8,@B,H,-, =,@KL,H[,0j,Hz,`@T,H,`ا,0,`@],H,`,`$,@f,x,`!,-1,`@o@,xO,`^,6n,x@x},`,H,H?,`@,`,,H,@, ,,Q%,@4,C,S,Zb,8@q,8ހ, ,c,@,,),l,@, , 2 ,u,@(,7,;G,~V,P@e,Pu,PD,P,@ɢ, ,M,,@, ,8V, ,@,,,_;,J,@Y,&i,8hx,,P@,/,hq,8,8@,8, z,8, @, A , /,>,@N,8J],l,{,@,S,,ظ,@,\,,P,@#,Pe,#,2,@,B,`nQ,``,`o,H@5,w, ,8,P@>,8,, ,@G,,,P',8@P6, E,8T,d,@Ys,8,ݑ, ,@b,,,),@k,, ,2,@t*,H9,H,x;X,@}g,v,,xD,`@,ȳ,  ,M, @,, ,V ,@ ,- ,= , _L ,P@[ , j ,%z ,8h , @ , ,. , q ,@ , ,h7 ,8z , @ ,! ,@1 ,8@ ,P@O ,h_ ,In , } ,@Ό ,  ,R , ,@ , ,[ , ,@ ,x" ,d% ,4 ,@C ,+S ,mb ,Pq ,@ ,4 , v , ,@ ,= , ,  ,P@ , F ,8 ,h( ,8@ 8 ,8OG ,V ,e , @u ,X , ,ݢ ,@ , a ,  ,8 ,h@( ,j , ,8 , @1, , s; ,8J ,Y ,8@:i , ,@B,x,0-,x =,`@KL,[,0j,0z,`@T,x,Hا,`,x@],`,,`$,@f,`,!,-1,`@o@,`O,H^,H6n,H@x},`,H,`?,x@,`,,H,@,,,xQ%,@4,C,S,Zb, @q, ހ, ,c,@,,),l,@,,2 ,u,@(,7,;G,~V,@e,Pu,PD,8,8@ɢ, ,M,,@,8,PV, ,@,,,_;,J,@Y,&i,8hx,,P@,P/,hq, , @,8, z,,@, A , /,>,@N,J],l,{,@,S,,ظ,@,x\,, , @#,e,#,2,@,B,HnQ,0`,Ho,`@5,w,,,@>,,,,x@G,H,`,',@P6,E,T,d,@Ys,,ݑ,` ,`@b,0,,H),@k,x,H ,2,x@t*,H9,H,;X,H@}g,Hv,`,0D,`@,xȳ, ,M,@,,  ,V ,@ ,- ,= , _L , @[ ,j ,%z ,h ,@ , ,. ,q ,@ , ,87 ,z ,@ ,! , @1 ,@ ,@O ,h_ ,PIn ,} ,@Ό , ,R , ,@ , ,x[ ,` ,@ ,x" ,d% , 4 ,h@C ,+S ,ȣmb ,q , @ , 4 ,v , ,@ ,x= , , , @ ,F ,8 ,8( ,8@ 8 ,OG , V ,e , @u ,X , ,xݢ ,@ , a ,  ,  , @( ,8j ,h ,8 ,8@1, ,8s; ,8J ,Y ,@:i , L-8@BL-L-`-L-` =L-H@KLL-[L-HjL-HzL-H@TL-`L-xاL-L-x@]L-`L-0L-x$L-H@fL-HL-`!L--1L-H@o@L-`OL-`^L-H6nL-`@x}L-`L-`L-x?L-`@L-HL-L-HL-@L-L-L-xQ%L-@4L-CL-SL-ZbL-P@qL- ހL- L- cL-@L-L-)L-lL-@L-L-2 L-uL-@(L-7L-;GL-~VL-@eL-8uL-PDL-hL-P@ɢL- L-ML-L-@L-L-8VL- L-@L- ,L-_;L-JL- @YL-&iL-hhxL-L-@L-/L-PqL- L-8@L-8L-zL-L- @L- A L- /L->L-@NL-J]L-lL-{L-@L-xSL-L-ظL-@L-\L-xL-L-@#L-eL-x#L-x2L-@,BL-xnQL-x`L-xoL-H@5L-wL-xL-0L-H@>L-HL-xL-`L-0@GL-0L-L-`'L-H@P6L-`EL-TL-HdL-`@YsL-L-xݑL-0 L-0@bL-L-L-H)L-x@kL-L-x L-2L-@t*L-H9L-HL-;XL-H@}gL-`vL-`L-DL-H@L-HȳL- L-ML-@L-L-  L-8V L- @ L-8- L-8= L-_L L-@[ L-j L-%z L-h L-@ L- L-8. L-8q L-@ L- L-7 L-z L-@ L-! L-@1 L-@ L-@O L-8_ L-8In L-8} L-@Ό L- L- R L- L-@ L- L-[ L- L-`@ L-" L-d% L-4 L-8@C L-P+S L-Pmb L-Pq L-@ L-4 L- v L- L-@ L-x= L-` L- L-@ L-F L- L- ( L- @ 8 L- OG L-hV L-Pe L-P@u L- X L- L-ݢ L-@ L-a L- L- L-@( L-j L-h L-h L-@1, L-hs; L- J L-Y L-@:i L- D-8@BD-D-0-D-H =D-H@KLD-H[D-HjD-0zD-@TD-xD-xاD-D-@]D-HD-0D-x$D-x@fD-`D-`!D-0-1D-`@o@D-`OD-x^D-x6nD-H@x}D-HD-`D-?D-x@D-HD-D-HD-@D-D-`D-Q%D-@4D-CD-SD-ZbD- @qD-ހD- D-cD-@D-D-)D-lD-@D-D-2 D-`uD-H@(D-7D-;GD-~VD-@eD-8uD-hDD-PD-@ɢD- D-MD-D-@D-D-VD- D-@D- ,D-_;D-JD-@YD-&iD-8hxD-D-@D-/D-8qD- D-@D-8D-zD-D-@D-A D-/D->D-@ND-J]D-lD-x{D-x@D-xSD-`D-ظD-`@D-x\D-xD-D-@#D-eD-0#D-`2D-`@,BD-0nQD-``D-0oD-0@5D-`wD-HD-`D-@>D-D-0D-D-@GD-D-D-'D-0@P6D-HED-0TD-HdD-x@YsD-D-xݑD-H D-0@bD-HD-0D-H)D-@kD-D- D-2D-@t*D-9D-HHD-H;XD-@}gD-vD-HD-`DD-H@D-`ȳD- D-MD-@D-hD- D-V D-8@ D-8- D-= D-_L D-@[ D-j D-%z D-h D-@ D- D- . D-8q D-@ D- D-7 D-z D-x@ D-! D-@1 D-@ D-@O D-_ D-In D- } D-@Ό D- D-R D-8 D-@ D- D-[ D- D-@ D-" D-d% D-4 D- @C D-P+S D-8mb D-q D- @ D-4 D- v D-  D-@ D-`= D-x D- D-@ D-F D-  D-8( D-@ 8 D-OG D-hV D-Pe D- @u D- X D- D-ݢ D-@ D- a D-P D-8 D- @( D-8j D-8 D-8 D-@1, D-s; D-hJ D-Y D-@:i D-P}.@B}.x}.-}.0 =}.@KL}.[}.`j}.Hz}.@T}.}.`ا}.}.@]}.H}.}.H$}.x@f}.}.`!}.H-1}.x@o@}.`O}.x^}.6n}.x@x}}.x}.`}.?}.x@}.H}.}.H}.x@}.}.`}.Q%}.@4}.C}.`S}.xZb}.@q}.ހ}. }.c}.@}.}.)}.l}.@}.}.x2 }.xu}.`@(}.x7}.;G}.~V}.@e}.u}.D}.8}.@ɢ}. }.M}.}.@}.}.V}. }.@}.,}.x_;}.xJ}.@Y}.&i}.8hx}.}.@}./}. q}.}.@}.8}.z}.x}.H@}.xA }./}.>}.x@N}.J]}.l}.x{}.`@}.0S}.0}.0ظ}.H@}.\}.0}.}.H@#}.He}.#}.2}.H@,B}.0nQ}.H`}.0o}.@5}.w}.}.}.@>}.}.}.}.@G}.}.0}.'}.H@P6}.`E}.HT}.`d}.@Ys}.}.xݑ}.H }.0@b}.x}.0}.H)}.@k}.}. }.2}.@t*}.9}.xH}.;X}.@}g}.v}.0}.`D}.H@}.`ȳ}. }.M}.@}. }. }.V }.@ }.- }.= }._L }.@[ }.j }.%z }.h }.@ }. }.. }.q }.@ }. }.7 }.z }.H@ }.! }.x@1 }.@ }.@O }._ }.In }.} }.@Ό }. }.R }.8 }. @ }. }.[ }. }.@ }." }.d% }.4 }. @C }.P+S }.Pmb }.8q }. @ }.84 }.8v }.P }.@ }.= }.x }. }.@ }.F }.  }.P( }. @ 8 }.8OG }.V }.he }.P@u }.8X }. }.ݢ }.@ }. a }.h }.h }.h@( }.8j }.h }. }.@1, }.s; }.PJ }. Y }.@:i }.q/@Bq/xq/`-q/0 =q/0@KLq/H[q/`jq/`zq/`@Tq/Hq/`اq/`q/x@]q/xq/q/H$q/H@fq/Hq/`!q/-1q/0@o@q/0Oq/x^q/6nq/x@x}q/xq/Hq/H?q/H@q/`q/0q/xHq/`@q/`q/`q/Q%q/@4q/Cq/0Sq/xZbq/`@qq/Hހq/x q/cq/@q/q/)q/xlq/@q/q/x2 q/`uq/`@(q/7q/;Gq/x~Vq/H@eq/uq/Dq/q/@ɢq/ q/Mq/q/@q/q/Vq/` q/@q/,q/x_;q/Jq/@Yq/&iq/hxq/q/@q//q/qq/xq/0@q/H8q/Hzq/q/@q/A q/H/q/0>q/0@Nq/0J]q/0lq/{q/@q/Sq/q/ظq/@q/\q/q/q/@#q/eq/#q/2q/0@,Bq/`nQq/x`q/`oq/H@5q/Hwq/Hq/0q/@>q/q/q/q/H@Gq/q/q/H'q/`@P6q/Eq/Tq/dq/@Ysq/q/ݑq/x q/@bq/q/Hq/H)q/`@kq/xq/` q/2q/H@t*q/H9q/xHq/;Xq/@}gq/vq/`q/xDq/@q/`ȳq/ q/Mq/@q/q/ q/V q/@ q/- q/= q/_L q/@[ q/j q/%z q/h q/@ q/ q/. q/q q/@ q/ q/7 q/z q/@ q/! q/@1 q/@ q/@O q/_ q/In q/} q/@Ό q/8 q/8R q/P q/P@ q/ q/[ q/ q/@ q/" q/d% q/4 q/ @C q/+S q/Pmb q/Pq q/h@ q/4 q/hv q/P q/@ q/= q/ q/ q/@ q/ F q/P q/( q/@ 8 q/hOG q/V q/he q/@u q/X q/h q/ݢ q/@ q/ a q/h q/ q/h@( q/8j q/h q/h q/@1, q/Ps; q/ J q/ Y q/@:i q/ /@B/x/x-/H =/0@KL/`[/j/`z/@T/0/Hا/H/`@]/`/0/H$/H@f/0/0!/`-1/@o@/O/^/x6n/@x}/H/0/`?/@/0/0/`H/H@/H/x/xQ%/x@4/C/HS/0Zb/H@q/`ހ/0 /c/x@/x/H)/Hl/`@//H2 /u/@(/`7/x;G/H~V/0@e/u/D//@ɢ/x /xM/H/@/0/0V/ /`@/`,/H_;/0J/H@Y/`&i/xhx//@///q//@/8/z//@/A ///>/@N/J]/l/{/H@/S//ظ/@/\///@#/e/#/H2/@,B/`nQ/x`/o/`@5/0w///@>////@G///0'/`@P6/E/T/d/@Ys//`ݑ/H /`@b//H/H)/`@k/H/ /H2/@t*/09/xH/;X/@}g/v//`D/@/ȳ/ /M/@//x /V /@ /- /= /_L /@[ / j /%z /h /x@ / /. /q /@ / /7 /`z /@ / ! /@1 /@ /@O /_ /In /} /@Ό /8 /PR /h / @ / /[ / /@ /8" / d% /P4 /@C /+S /Pmb / q /@ /4 /8v /8 /@ /= / /8 /@ / F /8 /P( /h@ 8 /OG /V /e /@u /X /8 /ݢ /@ /a /h /P /@( / j /  /  /P@1, / s; / J /8Y /@:i / G0@BG0`G0H-G0H =G00@KLG0H[G0`jG0HzG00@TG00G0HاG0G00@]G0`G0G0$G0@fG0G0!G0-1G0@o@G0OG0^G0`6nG0`@x}G0HG0`G0x?G0`@G0HG0G0`HG0`@G00G0`G0`Q%G0x@4G0`CG00SG0ZbG0@qG0ހG0 G0HcG0H@G0xG0H)G0HlG0@G0G02 G0uG0@(G0H7G0`;GG0H~VG0@eG0uG0`DG0xG0H@ɢG00 G0MG0G0@G0G0VG0 G0@G0,G0_;G0JG0@YG0&iG0hxG0G0@G0/G0qG0G0@G08G0zG0G0@G0A G0p/G0>G0@NG0J]G0lG0{G0`@G00SG0G0ظG0@G0H\G0G0G0@#G0eG00#G0`2G0H@,BG0`nQG0x`G0oG0x@5G0HwG0HG0HG0@>G0G00G00G0@GG0HG0HG00'G0H@P6G0EG0TG0dG0@YsG0xG0`ݑG0H G0`@bG0G00G0H)G0H@kG00G0H G0H2G0@t*G09G0xHG0;XG0x@}gG0HvG0`G0`DG0`@G0ȳG0 G0xMG0x@G0xG0 G0xV G0@ G0- G0= G0_L G0@[ G0j G0%z G0h G0@ G0 G0. G0q G0@ G0 G07 G0xz G0@ G0! G0@1 G0@ G0@O G0_ G0In G0} G0@Ό G0  G0 R G0  G0@ G0 G0[ G0  G0 @ G0 " G0 d% G0P4 G0h@C G0+S G0hmb G0Pq G0h@ G0h4 G0Pv G0  G0@ G0= G0 G0 G0@ G0F G0 G0( G0@ 8 G0hOG G0V G0Pe G0@u G0X G0P G0ݢ G0@ G0a G0  G0 G0@( G0j G0x G0x G0@1, G08s; G0J G0 Y G0@:i G050H@B50`500-50 =500@KL50[500j50z50@T50H50ا5050@]5005050$50@f5050!50-150@o@50O50^50H6n50@x}5050`50`?500@505050`H50@5050x50xQ%50@450`C500S50Zb50@q50ހ50 50c50`@50x50x)50Hl50@50502 50u50@(507500;G50~V50@e50u50D5050@ɢ50 50M5050@5050V50 50@50,50_;50J50@Y50&i50hx5050@50/50q5050@50850z5050@50A 50/50>50@N50J]50l50{50`@50HS5050ظ500@50H\505050@#50e50#500250`@,B50`nQ50``50xo50x@550Hw50050050@>50050050500@G50`50`500'500@P650xE50T50d50`@Ys500500ݑ50H 50H@b50`50050`)50`@k5050H 502500@t*50`950H50;X50@}g50xv5050xD50@50ȳ50 50M50x@50x50 50V 50@ 50- 50= 50 _L 50 @[ 50j 50%z 50h 50 @ 50 508. 508q 50@ 50 507 50z 50@ 50! 50@1 50@ 50@O 50_ 50 In 50 } 50P@Ό 50h 50 R 50  50@ 50 50[ 50 50@ 50" 50Pd% 50P4 50P@C 50h+S 50hmb 50hq 508@ 50P4 508v 50  50@ 50= 50 50 50@ 50F 50 50( 50@ 8 50OG 50PV 508e 50 @u 50PX 508 50ݢ 50@ 50 a 50  50 50@( 50`j 500 50H 50@1, 50 s; 50 J 50Y 50@:i 50x1@Bx1x1-x1 =x1@KLx1[x1jx1zx1@Tx1x1اx1x1@]x10x1x1$x1@fx1x1!x1-1x1@o@x1Ox1^x16nx1x@x}x1x1x1x?x1`@x10x1x1xHx1@x18x1x1Q%x1@4x10Cx1Sx1Zbx1@qx1ހx1 x1cx1x@x1xx1)x1lx1@x1x12 x1ux1@(x17x1;Gx1~Vx1@ex1ux1Dx1x1@ɢx1 x1Mx1x1@x1x1Vx1 x1@x1,x1_;x1Jx1@Yx1&ix1hxx1x1p@x1/x1qx1x1@x18x1zx1x1@x1A x1/x1>x1@Nx1J]x1lx10{x1H@x1HSx10x1ظx1@x1\x1x1x1@#x1ex1#x1x2x1x@,Bx1nQx1H`x1xox1`@5x10wx1`x10x1H@>x1x10x10x1H@Gx1xx1xx1H'x1H@P6x1Ex1Tx1xdx1`@Ysx10x10ݑx1 x1@bx1x1x1)x1@kx1x1 x102x1x@t*x1x9x1Hx1;Xx1@}gx1vx1x1Dx1@x1ȳx1 x1Mx1@x1x1 x1V x1@ x1- x1P= x1_L x1h@[ x1 j x1 %z x18h x1h@ x1P x1. x1Pq x1@ x1 x17 x1z x1@ x1! x1@1 x1@ x1@O x18_ x1In x1h} x1P@Ό x1P x18R x1 x18@ x1 x1 [ x1  x1 @ x1 " x1Pd% x1h4 x18@C x1P+S x1Pmb x18q x1h@ x1P4 x1 v x1 x1 @ x1= x1 x1 x1@ x1F x1 x1( x1@ 8 x1OG x1 V x18e x1 @u x18X x1 x1 ݢ x1@ x1a x1  x1 x1@( x1j x1 x1 x1 @1, x18s; x1 J x1PY x1@:i x1b2@Bb20b2-b2 =b2@KLb2[b2jb2X zb2@Tb2b2اb2pb2@]b2b20b2$b2@fb2b2!b2-1b2@o@b2Ob2^b206nb2@x}b2b2b2H?b2H@b20b2`b2Hb2@b2b2xb2HQ%b2`@4b2HCb2Sb2Zbb2@qb2ހb2 b2cb2x@b2Hb2)b2lb2@b2b22 b2ub2@(b27b2;Gb2~Vb2@eb2ub2Db2b2@ɢb2 b2Mb2b2@b2b2Vb2 b2@b2,b2_;b2Jb2@Yb2&ib2hxb2b2@b2/b2qb20b20@b28b2zb2b20@b20A b20/b2>b2@Nb2J]b2lb2{b2@b20Sb2b2ظb2@b2\b2b2b2@#b2eb20#b2x2b2@,Bb2nQb2``b2ob2`@5b20wb2b2b20@>b2`b2Hb20b2`@Gb2xb2xb2`'b2x@P6b2Eb2Tb2xdb2`@Ysb2`b2xݑb2 b2@bb2b2b2)b2@kb2 b2 b2x2b2@t*b29b2 Hb2;Xb2@}gb2 vb2b2 Db28@b2ȳb2 b2HMb2@b2b2 b2V b2@ b2- b2 = b2h_L b2h@[ b28j b28%z b2Ph b2P@ b2h b2. b2hq b2@ b2 b27 b2z b2@ b2! b2@1 b2@ b2 @O b2_ b2In b2h} b2@Ό b2h b2PR b2  b2 @ b2 b2 [ b2P b2@ b2" b2d% b24 b2@C b2+S b2mb b2 q b2 @ b2 4 b2v b2 b2@ b2= b2 b2 b2@ b2F b2 b2( b2@ 8 b2OG b2V b2 e b2P@u b28X b2P b28ݢ b2@ b2Pa b2P b28 b2@( b2j b28 b28 b28@1, b2s; b2hJ b2PY b28@:i b2P2@B202-2 =2@KL2[2j2pz2@T22ا22@]222$2@f22!2-12@o@2O20^2x6n2x@x}222?2@222H2`@222Q%2@42C2S2pZb2X @q2ހ2 2c2@22)2l2@222 2u2@(2p72;G2H~V2@e2u2D22@ɢ2 2M22@22V2 2@2,2_;2J2@Y2&i2hx22@2/2q2020@282z22@20A 2/2>2@N2J]2l2{2@2S202ظ2@2\2022@#2e20#2x22@,B2nQ2x`2o20@52xw2H2`2`@>2`2H22@G222'2@P62E2T2d2@Ys22ݑ2 2@b222)2@k22 2 22@t*292 H2 ;X2P@}g2hv2h2PD2@2ȳ2 2M2@282P 2V 2@ 2- 2 = 2P_L 2P@[ 2 j 28%z 2hh 2@ 2P 2. 2hq 2 @ 2  27 2z 2@ 2 ! 2P@1 28@ 28@O 2P_ 2hIn 2P} 2P@Ό 28 2R 2 2@ 2 2[ 2 2@ 2" 2d% 24 2@C 2+S 2mb 2q 2@ 24 2v 2 2@ 2= 2 2 2@ 2PF 2 2( 2@ 8 2OG 2V 2he 2 @u 2 X 2 2ݢ 2 @ 2ha 28 2 2 @( 2 j 2  28 2@1, 2 s; 2J 2Y 2@:i 2B30@BB30B3-B3 =B3@KLB3[B3jB3zB3@TB3B3اB3B3@]B3B3B3$B3@fB3B3!B3-1B3@o@B3OB3^B36nB3@x}B3pB3B3?B3@B3B3X B3HB3@B3X B3B3Q%B3@4B3CB3SB3X ZbB3@qB3pހB3p B3cB3@B3B3)B3lB3@B3B32 B3uB3@(B37B3;GB3~VB3@eB3uB3DB3B3@ɢB3 B30MB3B3@B3B3VB3 B30@B3H,B3_;B3JB3@YB3&iB3hxB3B3@B3/B3qB3HB3H@B38B3zB3B3@B30A B30/B3>B3@NB3J]B3lB3{B30@B3xSB3`B3HظB3@B3\B3`B3`B3H@#B3HeB3H#B32B3@,BB3nQB3`B3oB3x@5B3wB30B3xB3@>B3xB3B3B3@GB3B3B3'B3@P6B3EB3TB3dB3@YsB3B3ݑB3  B3@bB3B3B3)B3@kB3B3  B32B38@t*B3h9B38HB3;XB3 @}gB38vB3hB3hDB3 @B3ȳB3 B3MB3@B38B3P B3V B3 @ B3- B3= B3P_L B3@[ B38j B38%z B3hh B3@ B3 B3h. B3hq B38@ B3 B37 B3z B3 @ B38! B38@1 B38@ B3 @O B3P_ B3PIn B3h} B3P@Ό B3  B3R B3 B3@ B3 B3[ B3 B3@ B3" B3d% B34 B3@C B3+S B3mb B3q B3@ B34 B3v B3 B3@ B3= B3 B3 B3 @ B3F B3 B3( B3@ 8 B3OG B3V B3e B3@u B3X B3 B3ݢ B3@ B3a B3 B3 B3@( B3j B3 B3 B3@1, B3s; B3J B3Y B3x@:i B3`%3@B%30%3-%3 =%3@KL%3[%3j%3pz%3@T%3%3ا%3%3p@]%3p%3%3$%3@f%3%3!%3-1%3@o@%3O%3^%36n%3@ @x}%3@ %3%3X ?%3X @%3%3X %3pH%3@%3(%3p%3Q%%3@4%3C%3pS%3pZb%3@q%3ހ%3p %3c%3@%3%3)%3l%3@%3%32 %3u%3@(%37%3;G%3~V%3@e%3u%3D%3%3@ɢ%30 %3HM%30%3@%3%3V%3 %3H@%3`,%3H_;%3J%3@Y%3&i%3hx%3%3@%3/%3Hq%3x%30@%38%3z%3%3@%3`A %3x/%3x>%3`@N%3J]%3l%3{%3H@%3xS%3%3`ظ%3`@%3x\%3%3%3@#%3xe%3x#%32%3@,B%3nQ%3``%3o%3@5%3w%30%3H%3@>%3%3%3%3@G%3%3%3'%3@P6%38E%3 T%38d%3P@Ys%3P%3ݑ%3 %3@b%3%3%3)%3@k%3%38 %382%3P@t*%3 9%3 H%3;X%3@}g%38v%3P%38D%3@%3ȳ%3 %3M%3@%3P%3P %3 V %3@ %3- %3= %3 _L %3h@[ %3 j %3 %z %3hh %3@ %38 %38. %3Pq %3 @ %3 %37 %3z %3 @ %3! %3@1 %3@ %3@O %3P_ %38In %38} %3@Ό %3 %3R %3 %3@ %3 %3[ %3 %3@ %3" %3d% %34 %3@C %3+S %3mb %3q %3@ %34 %3v %3x %3H@ %3= %3 %3 %3@ %3F %3 %3( %3@ 8 %3OG %3V %3xe %3@u %3X %3 %3ݢ %3@ %3 a %3 %3x %3@( %3j %3 %38 %3 @1, %3s; %3`J %3`Y %3H@:i %3Hs4@Bs4s4-s4X  =s4@KLs4[s4js4X zs4X @Ts4s4اs4s4(@]s4X s4@ s4X $s4@fs4s4!s4-1s4p@o@s4X Os4X ^s4X 6ns4@ @x}s4(s4@ s4(?s4@s4s4X s4pHs4@s4s4s4Q%s4@4s4Cs4Ss4pZbs4@qs4ހs4 s4cs4@s4s4)s4ls4@s4s42 s4us4@(s47s4H;Gs4~Vs4@es4us4Ds4s4@ɢs40 s4`Ms40s4@s4s4Vs4 s40@s4`,s4`_;s4HJs4@Ys4&is4hxs4s4@s4/s40qs4Hs4@s48s4zs4s40@s4A s4/s4>s4`@Ns4J]s4ls4{s4`@s4xSs4s4ظs4x@s4x\s4s4s4@#s4es4`#s42s4@,Bs4nQs4`s4os4@5s4xws4`s40s4@>s4s4s4s4@Gs4s4s4's48@P6s48Es48Ts4 ds48@Yss4hs4ݑs4 s4 @bs4s4s4)s48@ks48s4h s42s48@t*s49s4Hs4;Xs4 @}gs4 vs48s4 Ds4@s4ȳs4 s4Ms48@s4s4P s4 V s4@ s4- s4= s48_L s4@[ s4j s4%z s4h s4 @ s4 s4. s4q s4@ s4 s47 s4z s4@ s4! s48@1 s4@ s4@O s4_ s4In s4} s4x@Ό s4` s4`R s4x s4@ s4 s4[ s4 s4@ s4x" s4d% s44 s4@C s4+S s4xmb s4xq s4@ s4H4 s4Hv s4` s4x@ s4= s4 s4 s4@ s4F s4 s4( s4@ 8 s4OG s4V s4`e s4`@u s4X s4x s4`ݢ s4@ s4a s4 s4x s4x@( s4xj s4 s4  s4@1, s4s; s4xJ s4`Y s4x@:i s4`R 5@BR 5R 5-R 5p =R 5@KLR 5[R 5jR 5X zR 5@ @TR 5R 5اR 5pR 5p@]R 5@ R 5X R 5p$R 5p@fR 5R 5!R 5-1R 5@o@R 5pOR 5@ ^R 5X 6nR 5@ @x}R 5@ R 5R 5?R 5X @R 5R 5R 5HR 5@R 5R 5R 5Q%R 5@4R 5CR 5SR 5ZbR 5@qR 5ހR 5 R 5cR 5@R 5R 5)R 5lR 5@R 5R 52 R 5uR 5@(R 507R 5;GR 5~VR 5@eR 50uR 5HDR 50R 5@ɢR 5 R 5HMR 5HR 5@R 5R 50VR 5H R 5H@R 5x,R 5_;R 5JR 5H@YR 5H&iR 50hxR 50R 50@R 5/R 5xqR 5HR 5H@R 5H8R 5zR 50R 50@R 5xA R 5`/R 5>R 50@NR 5HJ]R 5lR 5{R 5x@R 5SR 5R 5ظR 5@R 5\R 5R 5R 5@#R 5eR 5#R 52R 5@,BR 5nQR 5x`R 5xoR 5@5R 5wR 5R 5R 5@>R 5R 5R 5R 5@GR 5R 5R 58'R 5P@P6R 5hER 58TR 5PdR 5@YsR 5R 5 ݑR 5 R 5@bR 5PR 5 R 5)R 5P@kR 5hR 5 R 52R 5P@t*R 59R 5HR 5;XR 5@}gR 5 vR 58R 5DR 5@R 5ȳR 5 R 5MR 58@R 5PR 5P R 5 V R 5@ R 5- R 5= R 5_L R 5@[ R 5xj R 5x%z R 5`h R 5x@ R 50 R 50. R 5q R 5`@ R 5 R 57 R 5z R 5@ R 5! R 5@1 R 5x@ R 5`@O R 5x_ R 5In R 5} R 5H@Ό R 5H R 5`R R 5H R 5`@ R 5x R 5[ R 5 R 5@ R 5`" R 5d% R 54 R 5@C R 5+S R 5mb R 5xq R 5`@ R 5H4 R 5`v R 50 R 5`@ R 5= R 5 R 5 R 5 @ R 5F R 5 R 5( R 5@ 8 R 5OG R 5V R 5`e R 5x@u R 5X R 5x R 5`ݢ R 5@ R 5a R 5 R 5 R 5@( R 5j R 5  R 5 R 5@1, R 5s; R 5HJ R 5`Y R 5`@:i R 5`5p@B5p5-5 =5@KL5[5j5z5X @T55ا55(@]5@ 5@ 5p$5p@f55!5-15@o@5O5p^5p6n5@ @x}5p55?5p@5p55H5@55p5Q%5@45C5S5Zb5@q5ހ5 50c5H@55)50l50@552 5u5@(5`75`;G50~V50@e5Hu50D55@ɢ5 50M5H50@5H5HV5H 50@5x,5x_;5J5@Y5H&i5xhx55H@5/5q5`5`@5`850z5x5@5A 5/5`>5H@N5J]5l50{5@5S55ظ5@5\555@#5e5#5258@,B5PnQ5`5o5@55 w555@>5 5585@G555h'5h@P65hE5hT5hd5P@Ys5P58ݑ5 5@b5P585)5@k5 5 5 25@t*5x95H5;X5@}g5v55HD50@5`ȳ5` 5`M5@55 5V 5x@ 50- 5`= 5_L 5@[ 5Hj 50%z 5h 5@ 5 5. 5q 5H@ 5H 57 5z 5`@ 5! 5x@1 5`@ 50@O 5x_ 5xIn 5x} 5@Ό 5H 50R 5` 5@ 50 50[ 5` 5`@ 5`" 5d% 54 5x@C 5x+S 5xmb 5q 5x@ 504 50v 5H 5`@ 5= 5 5 5@ 5xF 5` 5x( 5@ 8 5xOG 50V 5`e 5@u 5X 5 5`ݢ 5@ 5a 5 5x 5x@( 5j 5  5 5@1, 5xs; 50J 5`Y 5H@:i 50=6p@B=6=6-=6 ==6@KL=6[=6j=6pz=6X @T=6=6ا=6=6X @]=6=6@ =6@ $=6p@f=6p=6!=6p-1=6p@o@=6pO=6p^=6p6n=6X @x}=6=6=6?=6@=6=6=6H=6@=6X =6X =6@ Q%=6X @4=6C=6S=6Zb=6@q=6ހ=60 =6Hc=6`@=6=60)=6Hl=60@=6`=6H2 =60u=6H@(=6x7=6`;G=60~V=60@e=6u=6D=6=6@ɢ=6 =60M=6`=6H@=6x=6xV=60 =6x@=6,=6_;=6J=6x@Y=6&i=6xhx=6=6@=6H/=6q=6`=6x@=68=6z=6=6@=6A =6/=6x>=6x@N=6`J]=6xl=60{=6x@=6S=6=6 ظ=6@=6\=6 =6 =6@#=6Pe=6#=6 2=68@,B=68nQ=6`=6o=6@5=6 w=6=6=6@>=6=6 =6=6@G=6=6=6P'=6@P6=6E=6T=6d=6@Ys=6=6ݑ=6 =6@b=6=6=6`)=6@k=6=6x =62=6`@t*=609=6xH=6`;X=6@}g=6Hv=60=6D=6@=60ȳ=6 =6HM=6x@=6=6H =6`V =6H@ =60- =6x= =6x_L =60@[ =6j =6%z =6h =6@ =6 =6. =6q =6@ =6 =6x7 =6z =6H@ =6! =6H@1 =60@ =60@O =6`_ =60In =6`} =6@Ό =60 =60R =6` =6@ =6 =6H[ =6H =6H@ =60" =6Hd% =64 =6H@C =6`+S =6`mb =6`q =6`@ =604 =6v =6 =6H@ =6H= =6 =6x =6@ =6HF =6H =6`( =6@ 8 =6OG =6HV =6e =6@u =6X =6 =60ݢ =6H@ =6xa =6` =6H =6x@( =6j =6 =6 =6@1, =6`s; =6HJ =6HY =6H@:i =66p@B66-6 =6@KL6[6j6z6@T66ا66@ @]66X 6p$6@f66!6-16p@o@6O6^66n6@x}666?6@6p66H6@6X 6@ 6Q%6@46C6S6Zb6@q6ހ6 6`c6`@6`6`)6xl6`@6H6H2 6`u6`@(676;G6x~V6H@e6u6D66@ɢ6 60M6H6H@66V6H 6`@6,6_;6J6@Y6&i6hx66@6/6q66@686z66P@68A 6 /6>6@N6J]6l6`{6@6S66 ظ6 @6\6668@#6 e6#626@,B6nQ6`6xo6@56w666@>6x66x6H@G6H66'6@P66E6T6`d6x@Ys66ݑ6` 6@b66x6)6`@k6H6H 6H260@t*696H6x;X60@}g6v606D6@6Hȳ6H 60M6x@660 6`V 6@ 6- 60= 6`_L 6H@[ 6j 6%z 6h 6@ 6 6. 6q 6@ 60 6x7 6Hz 60@ 6! 60@1 6@ 6H@O 6x_ 6HIn 6x} 6@Ό 6H 6`R 6x 60@ 6 6x[ 6` 6@ 60" 6Hd% 6x4 6H@C 6+S 6xmb 6Hq 6H@ 6H4 6Hv 6 6x@ 6H= 6x 6 6`@ 6`F 6H 6x( 6`@ 8 60OG 6V 6e 6@u 6X 6 6Hݢ 6x@ 6xa 6 6 6@( 6j 6 6 6@1, 6`s; 6HJ 6HY 6@:i 6n7@ @Bn7n7-n7 =n7@KLn7[n7jn7zn7@Tn7n7اn7n7p@]n7X n7n7$n7p@fn7pn7!n7-1n7@o@n7On7^n76nn70@x}n7n7n7?n7@n7X n7pn7Hn7@n7n7pn7Q%n7@4n7Cn7Sn7Zbn7@qn7ހn70 n7xcn7@n7n7`)n7xln70@n7`n7x2 n7`un7x@(n77n7;Gn7~Vn7@en7un70Dn7`n7H@ɢn7x n7xMn7`n7H@n7n7Vn7 n7@n7,n7_;n7 Jn7P@Yn7&in7 hxn7n7@n7/n7 qn7 n7 @n78n7zn7n7@n7A n7/n7>n7@Nn7J]n7ln7`{n7@n7Sn7n7ظn7@n7`\n7n7n7@#n7en7x#n7x2n7@,Bn7nQn7`n7`on7H@5n7xwn70n7Hn7x@>n7`n7xn7xn7@Gn7n7Hn7`'n70@P6n7En7Tn7dn70@Ysn7Hn70ݑn7H n7H@bn7`n7`n7)n70@kn70n70 n72n7@t*n79n7Hn7;Xn7@}gn7vn7n7Dn7H@n7Hȳn7H n70Mn7H@n7xn7H n7`V n7@ n7- n7= n7_L n7@[ n7j n7%z n7h n70@ n7 n70. n70q n7@ n7H n7`7 n7z n7@ n7! n70@1 n70@ n7@O n7`_ n7`In n70} n7@Ό n7H n7xR n7` n7@ n7H n7x[ n7` n7@ n70" n70d% n7H4 n7`@C n7x+S n7`mb n70q n7H@ n7H4 n7v n7H n7@ n70= n7` n7 n70@ n7F n7` n7x( n7H@ 8 n7`OG n70V n70e n7x@u n7X n7 n70ݢ n7@ n7a n7 n7 n7@( n7j n7 n7 n7@1, n7xs; n7`J n7HY n7H@:i n7`C8p@BC8X C8@ -C8 =C8p@KLC8p[C8jC8zC8@TC8C8pاC8C8@]C8X C8pC8$C8p@fC8C8!C8-1C8@o@C8OC8^C806nC8H@x}C80C8HC8?C8@C8C8C8HC8@C8C8C8Q%C8@4C80CC8SC8ZbC8H@qC80ހC8H C8cC8@C8C8)C8lC8@C8C82 C8uC8@(C87C8;GC8~VC8 @eC8uC8DC8C8@ɢC8 C8MC8C8@C8C8VC8 C8x@C8,C8_;C8 JC8P@YC8&iC8hxC8C8`@C8/C8qC8C8@C88C8zC8xC8@C8A C8/C8x>C8@NC8J]C8lC8x{C8`@C8`SC8`C8`ظC8`@C80\C8HC8`C8H@#C8xeC80#C82C8@,BC8nQC8`C8oC80@5C8wC8C8C80@>C80C8HC8`C8`@GC8`C8`C8'C8H@P6C8EC8TC8dC8@YsC8C8ݑC8 C8@bC8HC80C8)C8H@kC8`C80 C82C8@t*C89C8HC8;XC8@}gC8vC8C80DC8`@C8`ȳC8x C8MC80@C80C8` C8`V C8H@ C8- C80= C8_L C80@[ C8j C8%z C8h C8H@ C8H C8`. C8Hq C80@ C80 C8H7 C8Hz C8@ C8! C8`@1 C8H@ C8H@O C8H_ C8HIn C8x} C80@Ό C8H C8R C8 C80@ C8` C8x[ C8` C80@ C80" C80d% C8H4 C8H@C C8H+S C80mb C8q C8`@ C84 C8v C8x C8x@ C8x= C8 C8x C8x@ C8xF C8 C8( C8H@ 8 C8OG C8V C8xe C8@u C8X C8 C8ݢ C8@ C8a C8 C8 C8@( C8j C8 C8 C8@1, C8xs; C8xJ C8xY C8@:i C8ٟ8@ @Bٟ8(ٟ8p-ٟ8 =ٟ8p@KLٟ8[ٟ8jٟ8zٟ8@Tٟ8ٟ8اٟ8ٟ8@]ٟ8ٟ8ٟ8$ٟ8@fٟ8ٟ8!ٟ8-1ٟ8@o@ٟ8Oٟ8H^ٟ86nٟ8@x}ٟ8ٟ8ٟ8H?ٟ8@ٟ8ٟ8ٟ8Hٟ8H@ٟ8Hٟ8Hٟ8`Q%ٟ8`@4ٟ8xCٟ8HSٟ8`Zbٟ8x@qٟ8ހٟ8 ٟ8cٟ8@ٟ8ٟ8)ٟ8lٟ8@ٟ8ٟ8 2 ٟ8uٟ8@(ٟ87ٟ8;Gٟ8~Vٟ8@eٟ8uٟ8Dٟ8ٟ8@ɢٟ8 ٟ8Mٟ8ٟ8x@ٟ8xٟ8xVٟ8 ٟ8@ٟ8x,ٟ8_;ٟ8Jٟ8@Yٟ8&iٟ8hxٟ8ٟ8H@ٟ8H/ٟ8xqٟ8xٟ8@ٟ88ٟ8`zٟ8ٟ8x@ٟ8A ٟ8`/ٟ80>ٟ80@Nٟ8xJ]ٟ8lٟ8`{ٟ80@ٟ8Sٟ8ٟ8ظٟ8@ٟ8\ٟ8ٟ8ٟ8@#ٟ8eٟ8#ٟ82ٟ8@,Bٟ8nQٟ8`ٟ8oٟ8@5ٟ8wٟ8ٟ8ٟ8@>ٟ8Hٟ8ٟ8ٟ80@Gٟ80ٟ80ٟ8H'ٟ8@P6ٟ8Eٟ8Tٟ8dٟ8@Ysٟ80ٟ80ݑٟ80 ٟ8@bٟ8ٟ8ٟ8)ٟ8@kٟ8ٟ8 ٟ802ٟ8@t*ٟ89ٟ8Hٟ8;Xٟ8@}gٟ8vٟ8ٟ8Dٟ8x@ٟ8ȳٟ8` ٟ80Mٟ80@ٟ8ٟ8` ٟ8HV ٟ8@ ٟ8- ٟ8= ٟ8_L ٟ8H@[ ٟ80j ٟ80%z ٟ8Hh ٟ8x@ ٟ8x ٟ8x. ٟ8`q ٟ8H@ ٟ80 ٟ8H7 ٟ8`z ٟ80@ ٟ8`! ٟ80@1 ٟ8H@ ٟ8`@O ٟ80_ ٟ80In ٟ8} ٟ8H@Ό ٟ8` ٟ8R ٟ8 ٟ8`@ ٟ8 ٟ8[ ٟ8 ٟ8`@ ٟ80" ٟ8Hd% ٟ8`4 ٟ8x@C ٟ8+S ٟ8`mb ٟ8xq ٟ8@ ٟ84 ٟ8v ٟ8 ٟ8x@ ٟ8= ٟ8 ٟ8x ٟ8`@ ٟ8F ٟ8 ٟ8( ٟ8@ 8 ٟ8OG ٟ8V ٟ8xe ٟ8@u ٟ8X ٟ8 ٟ8ݢ ٟ8@ ٟ8a ٟ8 ٟ8 ٟ8@( ٟ8j ٟ8 ٟ8 ٟ8@1, ٟ8s; ٟ8xJ ٟ8Y ٟ8@:i ٟ8p89X @Bp89p89X -p89 =p89@KLp89[p89jp890zp89@Tp89p89اp89p89@]p89p89p89H$p89`@fp89Hp89H!p89`-1p89@o@p890Op89`^p896np89@x}p89p89p89?p89H@p89Hp890p890Hp89x@p89xp89p89Q%p89@4p89Cp89Sp89xZbp89@qp89ހp89 p89cp89@p89p89x)p89lp89`@p89p892 p89up89@(p897p89;Gp89x~Vp89x@ep89xup89`Dp89p89@ɢp89 p89Mp89`p89H@p890p89Vp89 p89@p890,p89_;p89Jp89@Yp89H&ip89Hhxp89xp890@p89/p890qp89`p890@p89x8p890zp89p89@p89`A p89/p89>p89@Np890J]p89Hlp89H{p89@p89Sp89p89ظp89@p89\p89p89p89@#p89ep89#p892p89@,Bp89nQp89`p89op89@5p89wp89p89p890@>p89Hp89p89p89@Gp890p890p890'p89@P6p89Ep89Tp89dp89@Ysp89p89ݑp89 p89@bp89p89p89)p89@kp89p890 p892p89@t*p899p89Hp89;Xp89@}gp89vp89p89`Dp89@p89xȳp89x p89Mp89@p890p89` p89`V p89@ p89- p890= p89`_L p89H@[ p890j p89H%z p89xh p89@ p89 p89x. p89q p89@ p89 p89`7 p890z p89H@ p89! p89x@1 p89x@ p89@O p89x_ p89In p89} p89@Ό p89 p89R p89 p89@ p89x p89[ p89 p89x@ p89x" p89xd% p89`4 p89`@C p89`+S p89`mb p89xq p89@ p894 p89v p89 p89`@ p89= p89 p89x p89`@ p89F p89 p89( p89@ 8 p89OG p89V p89e p89@u p89X p89 p89ݢ p89@ p89a p89 p89 p89@( p89j p89 p89 p89@1, p89s; p89xJ p89xY p89@:i p899@B99-9H =9@KL9x[90j9xz9x@T9H90ا9x9x@]9H9`9$9@f9x9!9-19H@o@90O9H^96n9@x}999x?9H@9909xH9x@9x9H9xQ%9`@49HC9xS9`Zb9H@q9`ހ9` 9c9`@9H9x)9xl9H@992 9xu90@(9079H;G90~V9@e9Hu9`D99`@ɢ9x 90M909@99V9 9@9,9x_;9xJ9`@Y9`&i9hx9`9@9/9q990@9x89z99@9HA 9/9>9@N9J]9l9{9@9S99ظ9@9\999@#9e9#929@,B9nQ9`90o9H@59w999@>9`999H@G9`9`9H'9@P69E90T9Hd90@Ys909Hݑ9 9@b999)9@k909H 9029@t*9H99H9;X9@}g9v99xD9@90ȳ9` 9HM9H@9H9x 9V 9x@ 9`- 9`= 9`_L 9`@[ 9Hj 9`%z 9h 9@ 9 9. 9q 9@ 9 97 9xz 9H@ 9! 9@1 9@ 9@O 9_ 9In 9} 9@Ό 9 9R 9 9x@ 9 9[ 9 9@ 9" 9xd% 94 9@C 9+S 9xmb 9xq 9@ 94 9v 9x 9`@ 9= 9 9x 9@ 9F 9 9( 9@ 8 9OG 9V 9e 9x@u 9xX 9 9`ݢ 9x@ 9a 9 9 9@( 9j 9 9 9@1, 9s; 9xJ 9HY 9@:i 9i:H@Bi:Hi:0-i:` =i:x@KLi:x[i:0ji:zi:`@Ti:xi:`اi:i:`@]i:`i:Hi:x$i:`@fi:`i:x!i:`-1i:0@o@i:Oi:H^i:x6ni:@x}i:i:xi:0?i:@i:i:i:`Hi:`@i:0i:Hi:`Q%i:@4i:0Ci:xSi:Zbi:H@qi:Hހi:H i:ci:x@i:0i:)i:Hli:@i:`i:H2 i:Hui:H@(i:7i:;Gi:H~Vi:@ei:ui:Di:i:@ɢi:0 i:Mi:i:@i:i:Vi: i:@i:,i:_;i:Ji:0@Yi:&ii:hxi:`i:@i:/i:qi:i:@i:H8i:zi:i:@i:A i:/i:>i:@Ni:J]i:li:{i:@i:Si:i:ظi:@i:\i:i:i:@#i:ei:#i:H2i:@,Bi:nQi:`i:0oi:H@5i:wi:`i:i:`@>i:i:0i:Hi:H@Gi:Hi:0i:H'i:0@P6i:`Ei:Ti:di:@Ysi:i:ݑi: i:H@bi:Hi:0i:)i:0@ki:i: i:2i:@t*i:9i:Hi:;Xi:0@}gi:vi:i:Di:`@i:0ȳi: i:xMi:H@i:xi:x i:V i:x@ i:- i:= i:_L i:@[ i:`j i:%z i:h i:@ i: i:. i:q i:@ i: i:7 i:z i:`@ i:! i:@1 i:@ i:@O i:_ i:In i:P} i:@Ό i: i:R i: i:H@ i:` i:`[ i:x i:x@ i:x" i:0d% i:`4 i:x@C i:+S i:xmb i:q i:@ i:4 i:xv i:0 i:0@ i:= i: i:` i:`@ i:F i:x i:`( i:@ 8 i:OG i:V i:e i:x@u i:HX i:x i:`ݢ i:x@ i:0a i: i: i:@( i:xj i: i: i:@1, i:s; i:J i:`Y i:@:i i:3;@B3;3;-3;x =3;H@KL3;[3;j3;Hz3;0@T3;03;ا3;3;0@]3;3;3;0$3;0@f3;03;!3;`-13;@o@3;O3;^3;6n3;H@x}3;x3;`3;?3;@3;3;3;H3;0@3;3;H3;0Q%3;@43;C3;S3;Zb3;@q3;xހ3; 3;`c3;H@3;3;)3;l3;p@3;3;2 3;u3;@(3;73;;G3;~V3;@e3;u3;D3;3;@ɢ3; 3;0M3;3;@3;3;V3; 3;@3;,3;_;3;J3;@Y3;&i3;hx3;`3;0@3;/3;q3;3;0@3;H83;z3;3;@3;A 3;/3;>3;@N3;J]3;l3;{3;@3;S3;03;ظ3;0@3;\3;3;03;@#3;0e3;H#3;x23;0@,B3;`nQ3;`3;Ho3;x@53;w3;3;H3;@>3;3;`3;x3;@G3;3;3;'3;@P63;8E3;hT3;d3;@Ys3;83; ݑ3; 3;@b3;`3;3;)3;`@k3;3; 3;23;@t*3;93;H3;;X3;x@}g3;Hv3;H3;xD3;@3;0ȳ3;x 3;xM3;x@3;x3; 3;V 3;x@ 3;- 3;x= 3;x_L 3;x@[ 3;`j 3;%z 3;h 3;@ 3; 3;. 3;q 3;x@ 3; 3;7 3;xz 3;@ 3;! 3;@1 3;@ 3;@O 3;_ 3; In 3;8} 3;@Ό 3;0 3;`R 3;x 3;0@ 3; 3;0[ 3;0 3;H@ 3;H" 3;d% 3;04 3;H@C 3;`+S 3;Hmb 3;Hq 3;@ 3;H4 3;`v 3;0 3;@ 3;= 3;x 3;x 3;x@ 3;HF 3; 3;`( 3;x@ 8 3;xOG 3;V 3;xe 3;x@u 3;`X 3;x 3;xݢ 3;@ 3;a 3; 3; 3;@( 3;`j 3; 3; 3;@1, 3;s; 3;xJ 3;Y 3;@:i 3;LASF_Projection@WKTGEOGCS["Geographic Coordinate System",DATUM["D_WGS84",SPHEROID["WGS84",6378137,298.257223560493]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]laspy-laspy-a32c7aa/tests/data/simple_with_page.copc.laz000066400000000000000000001016641463461040100235100ustar00rootroot00000000000000LASFw$)r{Gz?{Gz?{Gz?ffffr#AQ#)AHz@ #A333e#A(> *Agfff)Aףp= S@> ףpiy@8{)rcopcCOPC info VLRznw#AG!#)AHH@G@GB@t{%V A@L}Alaszip encodedV.lazperf variant  LASF_Projection@COMPD_CS["NAD83 / Oregon LCC (m) + NAVD88 height (ftUS)",PROJCS["NAD83 / Oregon LCC (m)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["latitude_of_origin",41.75],PARAMETER["central_meridian",-120.5],PARAMETER["standard_parallel_1",43],PARAMETER["standard_parallel_2",45.5],PARAMETER["false_easting",400000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","2991"]],VERT_CS["NAVD88 height (ftUS)",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",0.304800609601219,AUTHORITY["EPSG","9003"]],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","6360"]]]z<[O|@|L Ad^z]U@0,@$bz[ڎODƈErr]mڐ)q;rU܁ץBLv9?fn8> q>.9EpS(NM=k)W; Ʉ@@߁U؅n1 Hozgت]ܵoTܷdCmȚ_||@@==>@>;B?:>=?72įQse2Њ%mW橵|dFA ~Pۗ&ZAcqȆ +) >e8^V>oi%>]Eo[[>V'γ*W-ж8b昖kﯩ{A;d|:6 AK F60+"xG;z~jHsvNdW{M.gߟ<;{sUlNn? =rX'XSYR@g[r@VQr]Vd]*NL". ע6B݁;+h~zA?>;;?>>>?8QArlek͎>.}DJKrTTMeoklzΒsgl߄glUQf 79ꪕ8aКĖ kPe[GHn9!Ug A_YqO F5>f0ҭBbQjobHLpc!೦h(`!pt%G*z=樟L ^[r2;c<?G)e*! `7iA>!ޛ0>b^{A}U+^p +amu͜s~l)֖e2MeBٵ*s`P½/NT"/ ouje[xCAzjh%!ZE0h*Wh3u{`PǾس+4L' j3F;u}pjwCU z!;rBrrĜ>*՘(ȥ}mN\2}.)X 1)9!S4:q@`C_bF_{ rj[saј S SjW&G~R@D<>@?<;@A?=<5Cnju,3^76bLn&g%s9Ѝ5H\zS@G48lP>8N9d>@w[ZhJ?}~mcU(aFڂY,j}OZ7H/ݔ_,@|?J*dArZVApBniBi# 1敘O]fJ}zq3&;C@%c-Y3Ѻ-*_)(ub`hP; Cf./|ԃ>߿ղ:9CLȧnW4B \39m!Oۈd~|?>=<@A=?>=><@>H_x0aI㪺C2g2[{c |*ȋ]fݱʅwE>-C?L?^ml$+^w2Zc8':yNsl]B~U`l䮙%At@RiK@|A6RAO,AHQY_"TB0l*P/ LsK b3AZJh?0exN.Be7tR4Έ\yPJvaNeAVF4 pXhn6kg;?dk@߿lʇ|!KJXqꅮb x@1>>Wiш0f|}@=>=>@@==>@?<6'f3] )b 6Vk#` j Nǰ750Ywp.aq>8ח:Z*cUﺳRu[:++@zx>]g.P.z#5HJL4"~ߵj2,ALW\^VA<.ck&R^K=ۥ>V Y,%\%*`+_qE6z2L?k'~.,0\`?>?>?=>=>>=8_>JB^n!U7췇:E=e ]e M7qgU 2]GƞoaS!vUns9Sh|7]ڍV/(Җ%SP~U_8\@y %wm}4S,Alf#`H0f_)% y6Rzsp|UdޤBρ'{N t}6(_.泣Ⳕz~إ0o7T ,S074*mwA:Bx#i@߁߿<YMˀ#o࣌uC]}}>| 0>\\XQD~|?@=;>?>@@?==@@?>4@n)jY\ 8lX#['ew&R +n"&s8FkW\Kwm9Z\ ߃65ߞ/C VVT귷'%Li հrQrHfU)`vO^j4{$ 8AVQ= 9ӭ#NH1[cnmHe-]JCdHW+WWNr=p"?| Ml߮vp{sb?-ӗ |<>>@>==<>@@8ks*+'r'0 6G nTgVR8?r)a3@ABF-Fqx2Mޭ{2˧`<>;\IExS:oS0hX*SGzuNAZ]sg$ ^I0\;lexHj!_]#A3} zUP굵WkF?KV<8NabA6~K1Pj{DMԉo;05O7P[K|D`I:!sӃAStdlfFkZ>d9e$C꒹J tO|XDZ5 <`Uzz?=>>@@==<7 Cj_J˦-֌'aC|aYj[\ =_m^#2gv-*Gj2}b(rlO vbH>/=ASw¨3ZZkE$%Wʯ-AcuA!Ϣ I @|;NA\V@0Ae R a't_9~{?#/?P5Ģaјl aj|q+?$QZJXƲܘR0،*=jsFٛ[gA͖)Pe@==߁r^BZK|:m:P:\^`=g.ƨҪzz?A>;A>8B@77,iL!-\Wl M{JW53%~r$hy=)G hFm.nSܠQ߶}Vu%N)j,#x[zn\6<: 0|> +ziĂdE4Mc G߿@!JV PG S ,ށ:D:R4=|~>?<=?@>9:B@=>@=:r=q)rk@[0E:im]9hfSm 81L=F7s﹚ɅW7Uݝn! "a#_P?߸,&aaP,2̹$RJu߰Τ'W6,ds,`K7MEjpJp@z06%i[ADRNXQ=:Mn kMZxB NdAlKJQ%=rÏ2B^7ՙGBT(pW0B=XB6J$GxrCzL@># mgmH1CsJ.UI>;A=9@7~`ަĢCy|",Q3>Q| uV,%wd 5\PP_zk~{E~,@H¬k@\ZC`g,_L"}*5hLuyKo`~|=@A9>=<<>?>E=E=8xM:^LI/n+P'ҭDaFM1%G(C^ 6¥ܡ4϶ǨgcފIJR]?캂Xۀݠ4v̫];gH"@m A6@F < 8)<.c~ {O9͡:!W%/Dn;ȏyi ^U .,ھTx?NmiΞxwG@>wưXUw}<#oSd8A@<>:I*#,|PrC~A}xR ޱ,KLz:>E?D@>77#d*0q%Vkm6s@[ta-}HϧB>xҠfi|<OZ=G%3bQ .ZG GX O̹g"xXg !@|zԴ A<KMd$YE8-a00a!Գ[0{SLԏW˩ZNOOcC:=uj%,.v)k#Ƕ1q KYҹ^r'};BSу,>"wFPֳ~#hN{Q` ^8)ȰUm_3/.!9~;||@>AB>>AAD>CGD@?5 { mx4#qEGKÛrIP}^dMnKu'Ce]cƨµ )ӪKӱ}6UCk~ug {(ޠױi R#_9lU䯀*X`ioy &1\["@~). Alr~z*%oS<--Y|b qB-|YjA_ e| 9lĞ?~rȅgX`cs_Z z$Xd=ͨ s~ /`R>{ؙh*?>B?>>@>þ7Y!}7waڃ.mbyU<(o=|j\TKPG-xܲzES-@ {d`*w(hf&^UmWrפ-)Q"^M2VR65(u210H%8iPJC)g=~FﱬIgA;/ ϯYtEI*5FFSh[_r8 #i  XA3AD.'pX:L~*O{gbD1 Z%}n~M/:5nj? Vg4 [O{cD^bf[_D=9ܓ0D't{ 7"zh'>C{ղ,ӳFㄠؕrU|j[jv9$'TPAy0s@H+@~߿k6}[C7Uz_W\zc5J$q\a3A'K9e/HJeQ>m@C@?=4m:UX_n~\i?VGEV+{a3:U1 @??????=?@=C><76O#h J/gaVkz ɵ@v蝙S=>h V49Qov"gPa३˺cA\giZxo9/sB]\rTKH 0^jX8)8-brӛ|Z;UyY&˧N.^|,ct3aB焙`Qz|=>?>><>C><<<>5ݮNħhQP=kN KvxOvo3('$pi!V((5lASڥL@EnnJ֘* |LVgV+]ڧe"_,!~AJSZZQ=x.TȇcqƝxs>OnHg#sz iKhw]U;@oO,?Z|=8P$;w_(0q|B@>>?==JB:>?<Hhi>϶1_+FE`˰qڪ/mmc_c;egAm>2+_wڈ`@y;TmCؾ=uY_!#|e=@i8A\ UA0t>(֙Di$c!R=≯7ܴpv ݺTNWSǫCX3_m]WًG:䕱HpqlP UYb,Ε}dvm#?>߁mg`#݅8b?A?==>@=5ҳ=(g-u7#2JNY%Q,4E(hg`$]V˜~8`1P!e_ٞcO:HQNQIJց]pj֦t/}zX^Y o٬l [!u p$Z-1,Aj'dLp (*\D-A|* >Ukg.c;9З{}0 7!j^XW{iXqTT{hn ^R|ꋱ@GZCv@¥H-*I?߁߀v}qrNWQesAcӍVD?M)(SG!;A>>@?A=:>GEDBFFU)h"!2NER#v3T':dѕUd ?ONp=,HFyh4U4@@ ZLM]cV$4{wQuMn1`5{φٳd<_)kum F~U>h+Ki|0!q8Aa%\EpC#wE k2K:5;t$x|7FXI @Ejڊ`WVsZ1/_OQO%Sg0\cxfdv%n;oWW~>i_VFKILQCDJ9++Zg6 ||@@=;͚M:K窯3& $F@>;>?<>=@?F@=<<4m}Gi8̴tcp?ݘf QfKh@Pk~z0=ngSQeB:aU@!r'?AYBy cf(ڲ;wl+,iw\ne*@& <(15-> j.Z,ѷp)}.zNAb[E0F$d0@& =I/V=|4=g,쵗ZSamA!8my8]Ps᪌ 8;3+LD0DsmMI10UJig?=߀>?H,;BPG?$XWr~B,ɋ O 6d@_r|z>?7IgꑰuZ&cYu`͕Ӊ||w " OA_WB8NX0yddvL~NO`W'4À t6Q3_JGZg飺?9{ݬNjv=Ngth[:C޺}mOiկw1P^j@|~B?>=AB>>==>>>=:CE:4٨I 6_uOu/"R?Q\]+L҂Cfvʀk#;"C詒b8?SS-.'R9n_E@KQ@jTOdLIL8*v7gʸ" vzN<[A^ VA0۳um{K,d[ |fF \@H};d<;Q+uh(S#/+тq $&=6 P38cVU+(D4zo]߿=~}`lkdrP=!1_lCpb`zx9@=>B>=>>@>;>>70?@dO6.gcЪ*Dn׋L &V#lUގuH{}g`mzV^ Wz5aF4EkV{46b-JBۣ)<[A~VQ>0߇DrÄ_`qPT1I#{ BLo& #",Ȉp<١aS MzanÓƓ#\ýe@p ~$ d 5Cz\4',[zJ~;;<=AA==>>>>7aUlsP(^1n=A8E;C8޾f?ŗTǟ,k?|&"ѰCxW4}ұ }E<OCGVz1b|+*0g36T>-D̥)~zlbr V!_ߟM) Z8<1Չ341|v/L }@|%V A+ )0)2 @mQbM w0E3OܲQ7L*x' l @^@V(у"M+<||>>BB;6nx8j V4SZp)2G,-e;+VT5E5O O}/($!v<@Q AvUM:8KU<Ŧ1 b W5L/1l,V-L\گ@/ICI>"FaQRKW<%>0s&Y [ Ǟ'IVr@߀=kũiߢt?!i4'1ΰa2C(rmA,~B@AB>>?B>5!]cfX#|Hn&?h}c6-He0>,L=sc"80f-҃aL~M==.j}YsD6^Oe_]*&  AMb_   0N~7Y-긞R[1;(>7@K$%3tekۥ~ALs,'_O#_ 5Vgz|9Iԩ98W|XSM,s'NMU=/&<5ӥK}$@=[`7b-TRUEt:6u\u8%~>??A???>C?7TPNҩ4Xj';ZJ\ptеJ%/X3 7ug /W)=X/-*DXĴInxU;:\jS=0>ADVU H B2*La%Np=4I{llZ;+hkF<@:(o١m}`]b;wv P̈dvSXKz@@lϭV`<2c5]k gP~~??@CA?>=A7MT]غCe%g Ni sp5GfjEe$wzP14)7,݌SzS^z$;hB\mjuU;m` Y͢EE5p@|wNޫ,AUO=0Al;:qɪВDtFz8rċN6K?}@s3@Oꞵ`Lq=8ɯ4n$H釈*}vi)ghm߀48@d$b52<@bO̗>CD;=AHC?EA@6AKME긏'|z Ŷ\U?!3V>.]p7~qK%r*æ$oJV m^ 7VtBUWXpE9@ے0X(ߞO@|,A F A10| o֨j5dpAf>Cs2rp Ơ88|E} S ] ѯQcD[xETȈj"6+ۗ`*Fr'c9W=:2=_-gڽ~;?C?A=?<7=c^m7-/οQy& Tn_btC IE~8B&\~Pl}TL7j\15 f:[¶m0kK\;Rčzz<k `,A G C.0 fM5'&M_ou9k<۷oH{By2F7$"AwH4[Q7/#jgjK] LBi%g[1N9fQSpy=JJBI;9b$6w[~lo8~D,Vv,d,[A0e` аhhU 63иUQZ7K-DUh7uu $,M 8 | 2@~}w饎 8A{ H A18JPt`%BRD~C<9 6ӻA(遺xè1Nt]:~'Ī"gA]#u-f]qHyAw=%$uiGfCY(/CBE:RE7@5GƐFR6VXX4xMWfչ,eݰp\|?P[^р 0btu~h|mls"@ "<8ARL:0Pq:Phi ƶ= IAPTk{H5>ը=x)`Zk](IU7g -LPdsML~@b%c/M~>MjEei1TX{Mv4%Kvf*͎3ŕBPLA?@9ce[bwQH#wd8)KoJ|Uk{)k9tvCҹx85і"WF0^5a<<5@ !ѽ= hjKQ+ѡDA R<Н;g+8Avs[ Q=0Ma+Z Ԑ0\pU(+s3zSDn-iV*lxgnDn'"9hl6)b)8\Mث3i',I͙"O>P6Zy߀m:,vTEߢLq ZOqohIuPwNSx?FGDD;AAB>9VbO54sK9^ȩF}F@\zYxxB҉hg)M8MM`w7,;͝dwM,U1pX$챷l8vs!#`ś"+wOAM I58M$ڑ fIX8wȷ GJ wU[Pn=EiR8,I(7.]9DZ#Okufp0v@=MbI57ǁs}ە"o"?4?;=>BB;7X ձ^4->^_R>WK~WGP0ȳ3Ӽ}Ocv'.6>QRm1{y,4h@ß2 c~+YxnvWyE1|nLOAqp[R;8,n.cY2̪A|z7RsA1Y=*܍p'f )iuk6=Dzp=·wsQZ7)%Fץmgpx[0jgw*CEB@E==A>=A?@4 ߑ'3rTK.BG`>GhפE+B VQ]YVXΚmLj!ݙlI+g@=3w=zzəfP!T.e` }c$U˞Vv@}oZALTSW!R=0E;uJZz'|g[r$M`]_$Ó:9UH;]Kg!T)W?bFcySrC\KJ]B~*x NnN#,>~F|jtt\+L0GNg2_}]ْ<><:??>AB>?=: G =fѾuTgGÂ9]1cn[K.h[^=މ+9N\xO;'[+FW[._EZO6rʲWP>whbNa}xA~Bǐ8hZAxo|O H6(M2C[=&|ZP|*N& g+,|04#};t:-DNQ# HM2"V*O\["X:z?۴] ل j̀f*a>Λa0QU@:=DE=AA7; $o\R): P۔zAIRS8`)NIJ6 } tY2,jjz豺~֝Vd/oMƍ-7D, ?Y}l8@$k3ٖF Ajd}[S= ʾă/sTR=r}[)tn}ܭxl{t<=B 2BiZcSY:ьށ-7N>xںh!$M"\Ñ)L];ܑ8r?=߁pi[d9KjN p]'G ijP3ø^"~|?>=@@;A=lgh@T~S*7۵s@M~ Aa`uf$]E08J'a·&RK}m8|*5EF *iTр r%!DuLHEME^WT,F ;)=q_AiO&k@߿߿>q:<; e^Gz[&z`GϽPv= ~~=;@C???>E@B>:<5q&V#t t H-(]MO4Dw;ittm' I$-D.RjWpW~ўrqd7v@D|oh97tRDQ˼e!Q)oǑ'c[RZvh˯!ѴI?X&PS'AoEu΢O>`@>?EGG㬾/ *VlK! Lnaq~=<>>>A>>?=?=G BvezJ[. 5q1Ss/q%bESO)jBk^NzZʐ|\k'ۜ%K ,wݪ# Z.^՟f 8VB2 ]u9jY^GYv,j gZ j@|0HJ A~mm$ ]E8m~dQ͞Vp2-\>2- āl_(ޚإ\iYB0D3_ M T"gqk^%DeqeKW7FLc8?G[U]1@?~?|+ʝM kL/wCɇߪaxg֏nLL\;Ibh~BA<?;=>7]EN>Ao ,2ݾ-[t_u7y;횏l{N沲[`+\UK:d GX5Q¬6ml6Nۤ^ݦ-ڌ#zm"_z[|eKAD*[dMv@|:,AZU>:PB]de UAj:"zf94"-,fFDfDl@Icz[7~~Oy:>z9:V1{9AuaHbN QUF9>߿aVc=ú; N4u_=B>>>??==<` mMt4)!Mqm kSȫuehJ([bIU tDLRY Cc@si8Ge9m(T|TڧsgkJv"zO,fݚWl8O>@|wZ(dv,A\!T>q뺖q6sxQDCmC[!ͨqW&)u!I8>v6戠B{n|[jR|T@Ŕ&H25{C -??@iSp[篠o = &cf>2d ,8?<=><'n[Dabk}q/ HzGGW~4-A䊱΅| !JuuЊ _qk*Ҍ8q??A| @zUNAi!_E!OB8J+׀[X?WǓ>Fn7R8rLπoBfx7е}.3 +|čAc~ /r(^S=9y(Z% Q<^⦜- V;u?ԥG/9t@߿=>tHs b[ b )0zDR+F~|?B?:\Et@9sN :50~p@ϛv2ҹ,o{::25 I{M9rh(`,zġZV]Ή0H#,,}7;`\oLbra9'WoA Q5@RLfDo ?&> 0"5P߿?5c%UXvʯG1_ ލ@@T: ǝm1~|?>=>><>?>>@><:`k_ɧaf3F l)Eܳz  ·gkqoϟ#_2fi@أǸ`~SUDKšt؍K"2*]9'gJt? }g͋GY~$ A` R<0Gnp2]Gf*mS -imf/]Y0L f0zl!xLZbqsSKh#*12r: ¼"̼XdΆI?@/.hds1$p,$pS( p? w|E@>@=DD:AdVT2ji ̎( .+Oj{Ղ#ng aI}q?*y,ܦye-IHX\/`V\tz@$Aln~_S=:Kh0yQ v풟f\RSV32^QfE"ْDwVU^SFUXO)/o.9۱mV?fq@9}gWSwg$N+@?=>h΁`mu0x07mڪ2)+5@\ѣ$~|AD>AG;=@>CLL8:9yJ wr7!>ޮF5םR;H.,e.:kJ21Z M,ql LM`"OH^~E:ݙsj?XG!{^2t] Ȣ.HF+@ CZ98AS_[[S>0wuJo\$]'V˜ gi  I<@FB=inPۋ~=f^i( &ao:6;CHDFbGRb:ؔ#}@߁T\wA"*T +} 4aElc4?\|/:O@H<:C;?:/ lozny-3#•NЅփON,AU*ϗȡz!UӬ`2v۽,WFL= Lj?~uX{5qԪ1:ڒ?CiϚU_cp:G>as5 @fWZAHZVWN9075VCwy'?}h/@bdQ5}=l#pHưֳ؉HW"~VLmJLAdJp J+i۹,~@v0~=jμ2JP%MBN=Ɠf͚_S}-~=F;?B=>>=:?<q R#rJ_-c#̈́V'+Bu b'e@x=; 9=D<W/2ɬb8qWo1*jBEoLڏW?֑yc1}Q AETR. *\8N~6w?Eumy|E&!ss%gv[+)B4-Vw`vgR%;Hy/|kdP~y 6c@|ۛ cbO2bp1H-b#+٥&B-˴]1pSӋv}'Y%^{/Vsx2FL͂p_(>׺>h>NxgxjaSEgͦ+}͹l@?V5%~qc;F>?9AD@>=P[t9_Bӈ]G:]\^a׾C#χ xa>6`\mel>Ɨ/HB@$yJY z0r &xMq ]+PþIvpXQ??%R2<%hH>m&f9wÒiIAׂ.nP6{1M-]Iuݴ>kT'^J䫵k||p [y-@|MɅ AfUar%#dH0ځ+=c.OK~l\dk ۋ *!kM.=9Tu||PB0]bfu, <ކòp&rV`7.]*2[ R0J;).K:.(",@@@?aC8!,sPHXuO>sZz&J n̤/E~|=<@AC??A>@AG<8;;akQZ_X. OV}'9G:bU,\TR^ѷkW$إSBQ㣴#DYC杔g͆7l+_sQSnSwͯ;VKP`-s]}iC-n"Kɉe?T{eUm @#!}], AJTW G B,8,٤`(!,̬g>悇7n0i3 lqz5MgZ=!#RO/98]1%CLFH޲VQAϾOi5N_ k~{`8Cs#rAC?A?>Q8,p!Cs`LjڪheZwa𯆘A7I7U䰽^Ȃ Qu*lk1Zh&>.ފbTƌhYWݰsHU  |0x8A})&pQ0ٛuR7X*rހᢋw8wYļ: f8ux5jI^x5̦_GGe灨z\'#~ R+ҹRyA?Ǎ[Yev8$HOj̚=Omb- PUzWA߁Mt]m nTq]}(HGBg]LW"\ g7Rk||@@;??=@<=A@@?:?|v%>/duTpEC^6_[s* GَlV@߀T{EA}pr3pQK7N/5O1J5;B>9<:ɮieD[=P̴lⓋR 6SOv I[A4- A޹8ij¼2֔n[֩&kZ'>``m{ jaU:ρiA*E'@QK;C77A*#3ڴX9%3\L%} (AO-1=148<`@B?EGJNw PSTW1DF\I} Lx zOu RU`YZ  laspy-laspy-a32c7aa/tests/data/test1_4.las000066400000000000000000000770611463461040100205240ustar00rootroot00000000000000LASFGlobal MapperXw ->YM>Ҕw԰>ZT9At;Am1@PK9AOrV9Aj\;A#δ;A8ߵ@tiص@LASF_Projection@OGC Tranformation RecordPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]liblas@OGR variant of OpenGIS WKT SRSPROJCS["NAD83(HARN) / New Mexico Central (ftUS)",GEOGCS["NAD83(HARN)",DATUM["NAD83_High_Accuracy_Reference_Network",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6152"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4152"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",31],PARAMETER["central_meridian",-106.25],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",1640416.667],PARAMETER["false_northing",0],UNIT["US survey foot",0.3048006096012192,AUTHORITY["EPSG","9003"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","2903"],VERTCS["North American Vertical Datum of 1988",VERT_DATUM["North American Vertical Datum 1988",2005,AUTHORITY["EPSG","5103"]],UNIT["US survey foot",1.0],AXIS["Gravity-related height",UP],AUTHORITY["EPSG","5703"]]]*fvy)H 8"2ԓAfTy'H "2ԓAfo.H v"2ԓA4r ga)H "2ԓA?gYκ,H "2ԓA4-&gB[f,H T"2ԓA&3giO+H "2ԓA?g,H̼'/H "2ԓAv Lg&̰*H 1"2ԓA\Xg<)He "2ԓA'dg¹0(He o"2ԓAxogt̘-He "2ԓADzg~̘*He "2ԓAg_]$$'He L"2ԓAg;̅'He "2ԓA 0gȞ+He "2ԓA{%g \.He *"2ԓAg1׸ \+He "2ԓAgo+He h#2ԓAg`-He #2ԓA1grTU*He #2ԓAHgQQ|+He E #2ԓAHgx/Q|-He #2ԓAZgx/B?-He #2ԓAdg E,He "#2ԓAgcB?(He #2ԓAgʷ3,He a#2ԓAhhL&(He #2ԓA hL)w(He #2ԓA֎h‡&)He >#2ԓA=h6f,P(He #2ԓA*fhD,P)He |##2ԓA*%hD,P(He ԓA*h#&*He (#2ԓAE 0h0))He Y+#2ԓA~&5h,P&He -#2ԓA9h,P(He 0#2ԓA6>h ,P,He 73#2ԓA+ Ch~0)-He 5#2ԓA Gh~0).He u8#2ԓAFJh,P/He ;#2ԓAl-Nh̔.He =#2ԓAQh̔0He R@#2ԓAVThg{:/He B#2ԓAVhg{̂.He E#2ԓAēYhg{̈_)He /H#2ԓAahR8̍-e (]#2ԓA`hR8̍.e fb#2ԓAm_hR8 .e e#2ԓAD^hR8 *e Cj#2ԓAZhR8:)e o#2ԓAeXhR8,e !r#2ԓAUhY+e t#2ԓAVAhg{0)+e z#2ԓAgř+e #2ԓAi^߶)y֗#Ho '92ԓA ^M{֗$Ho 4*92ԓAM^֗%Ho ,92ԓA^ӵ֗'Ho r/92ԓAZ^n<՗(Ho 292ԓA^Q 5՗!Ho 492ԓAW_<Ǵ/+֗%Ho O792ԓA~+4_b5՗%Ho 992ԓAP_̻S֗$Ho <92ԓA1+m_W)y֗'Ho ,?92ԓA\݉_AV<՗#Ho A92ԓApL_AA՗&Ho kD92ԓA_i՗#Ho G92ԓA*_Iԗ$Ho I92ԓA 5_GAA՗$Ho HL92ԓA`TWԗ(Ho N92ԓA3`ӗ'Ho Q92ԓAwO`ذ ӗ%Ho %T92ԓAk`Ktnӗ)Ho V92ԓA`җ(Ho cY92ԓA^g`̯җ-H \92ԓA`gҗ)H ^92ԓA,`$җ'"H Aa92ԓAuL`:җ1H c92ԓA)a$}ӗ0H f92ԓA'*aGӗ.H i92ԓADajխnӗ/H k92ԓA_ap ӗ/H \n92ԓA6za( җ&H p92ԓAДaɬҗ%H s92ԓAGapdҗ%H 9v92ԓA9aZ!ӗ/H x92ԓAn+aӗ5H w{92ԓA+ayӗ.H ~92ԓAb6ӗ0H 92ԓAb70bѪ1ԗ0H U92ԓAIbӎԗ/H 92ԓA0cb2*ӗ(H 92ԓA{bi՗*H 292ԓAb5՗)H э92ԓAb`)y֗(H p92ԓAbM̻S֗&H 92ԓAEb7̶֗&H 92ԓAb vח)H M92ԓAlcؗ%H 92ԓA'chΧfٗ#H 92ԓA>cRٗ$H +92ԓAVc;HSٗ*H ʢ92ԓAync&;0ۗ'H i92ԓAkc¦¦ۗ+H 92ԓAEcm]+ۗ+H 92ԓA cV&Aܗ+H F92ԓAcAץݗ,H 92ԓAPhc*Rݗ*H 92ԓAscQ̄)ݗ-H #92ԓAj8d qޗ,H ·92ԓA$dʤ~wݗ*H b92ԓAU:dчޗ)H 92ԓA4dPdD;ޗ*H 92ԓAqed_ޗ*H ?92ԓA9{dfޗ)H 92ԓA՘dw{_ޗ)H }92ԓA揥d`8%ߗ&H 92ԓACdJYKߗ(H 92ԓAd5%ߗ*H Z92ԓAhdo%ߗ*H 92ԓAtd,I)H 92ԓAȢ eD\'H 892ԓAkeڥ:)H 92ԓA53eb=)H v92ԓAFe5&H 92ԓAYe"%)H 92ԓA*Ame 5)H S92ԓAoew" (H 92ԓAwe40*H 92ԓAϤe~+H 092ԓA(e=П)H 92ԓA(=e' -H n92ԓAeJh+H 92ԓAp9e(-H 92ԓA-Bepg),H L92ԓAfÞ[,H 92ԓA{f΀'H 92ԓA P/f=;.H ):2ԓAPfٝ+H g:2ԓA`_f:r*H  :2ԓAofut:r/H :2ԓA~fR11H D:2ԓA.f.*H :2ԓAfH$+H :2ԓAf1$-H ":2ԓAwf̀*H :2ԓA;fhy-H `:2ԓAf%y,H :2ԓA"fyn|*H :2ԓAfV+H =#:2ԓABf؞,H %:2ԓA gL}@-H {(:2ԓA?g[[f-H +:2ԓA %g7:O(H -:2ԓA1gH Y0:2ԓA=g՚H 2:2ԓAIg IP%H 5:2ԓAInTg~̰+He 68:2ԓAo_gp<+He ::2ԓAqjghOB)He t=:2ԓAtg-̘-He @:2ԓAhgR ̘*He B:2ԓA5g$$*He QE:2ԓAg;ə̌/He G:2ԓA`jǧ+He J:2ԓAg$ \-He /M:2ԓAgdy-He O:2ԓAgdy)He mR:2ԓAxQg!/He U:2ԓA4qg!gk1He W:2ԓAg`.He JZ:2ԓAmgmޘ],He \:2ԓAg⼘[-He _:2ԓArg⼘K.He 'b:2ԓAgVN-He d:2ԓAhgyH'He eg:2ԓA]gyK(He j:2ԓACh?XH(He l:2ԓAh6E.He Co:2ԓAχ h6B?*He q:2ԓAh*;-He t:2ԓA@h*;,He w:2ԓAbhB?,He y:2ԓAh8-He ^|:2ԓA#hҗ3.He ~:2ԓA'hҗ0),He :2ԓAP+h60He ;:2ԓAv/h,P-He چ:2ԓAD2h3-He z:2ԓAh4h,P(He :2ԓA2?7h,P,He :2ԓAW9h0)*He W:2ԓAO;hrm,P+He :2ԓA;2ԓAń\f:r( @;2ԓALf%;/ C;2ԓA-=fF;+ 8F;2ԓA-fhU/ H;2ԓARf. vK;2ԓAٖ f̜Q/ N;2ԓAeF* P;2ԓA en. SS;2ԓA'ke+ 1[;2ԓA$e=W+ c;2ԓAk{oè%, e;2ԓA'\eV+* Lh;2ԓAJen.m* j;2ԓAp#7e7, m;2ԓA$eJ=( )p;2ԓAe%=* r;2ԓA8dD\. hu;2ԓAڲd;ПPߗ- x;2ԓAdRSߗ& z;2ԓAdhVYKߗ, E};2ԓAd%ߗ( ;2ԓAęd _ޗ) ;2ԓA Td ޗ' ";2ԓA&pd7A;ޗ. ;2ԓADr\db ݗ, `;2ԓA3{Gdإxݗ+ ;2ԓAb2d ݗ+ ;2ԓAd,ݗ* >;2ԓAKdMRݗ. ݔ;2ԓAOcRݗ+ |;2ԓAcӢݗ1 ;2ԓAc#hܗ( ;2ԓAp˰cY&Aܗ+ Y;2ԓAct{¦ۗ( ;2ԓAn>c5~ۗ, ;2ԓAmcGڗ. 6;2ԓAVnWcDSٗ) թ;2ԓA2@cχٗ* t;2ԓA)cʤ6ٗ, ;2ԓA)cprrؗ+ ;2ԓA;b/ח* R;2ԓAL br̩=ח+ ;2ԓAb#֗& ;2ԓAdb)y֗* /;2ԓAb;֗) ξ;2ԓA{b~i՗- m;2ԓAJob ¦ԗ- ;2ԓAWb#ԗ* ;2ԓA ?b8HTWԗ/ J;2ԓAaN'bO1ԗ- ;2ԓAbeΧTWԗ+ ;2ԓAjna|1ԗ/ (;2ԓAaTҗ3 ;2ԓAlaҗ1 f;2ԓAeaJnӗ+ ;2ԓA"a ӗ% ;2ԓA*HaNԗ2 ;2ԓA!/aK1ԗ4 ;2ԓAMaЎ ԗ5 ;2ԓA`Ѫ ԗ1 _;2ԓAC`6ӗ"" ;2ԓA`yӗ& ;2ԓAj`ӗ) <;2ԓA8`ӗ/o ;2ԓA{$|`Bӗ'o z;2ԓA2b`ӗ'o ;2ԓAsH`ӗ'o ;2ԓA, .`-ԗ!o W<2ԓAX`pHԗ'o <2ԓAl__gխ/+֗'o <2ԓA$L_}Hԗ)o 4<2ԓA_[5՗%o <2ԓAO\_i՗#o s <2ԓA_L̻S֗)o <2ԓAu_bF#֗'o <2ԓAZ_y5՗$o P<2ԓAԑ?_)y֗$o <2ԓAH$_11̻S֗#o <2ԓA _Gt̶֗"o -<2ԓA^ذ֗o <2ԓA^V^̻S֗%o k"<2ԓA6^_֗&o %<2ԓA^ñ֗$o '<2ԓAՁ^ȷ՗(o I*<2ԓAf^I5՗!o ,<2ԓA2K^<՗*o /<2ԓA30^Nԗ$o &2<2ԓA0^4՗*o 4<2ԓA]wAA՗&o d7<2ԓA ]jܳ5՗$o :<2ԓAe])y֗%o <<2ԓA$]bi՗&o A?<2ԓA~]8Ǵȷ՗"o A<2ԓAo]M #֗%o D<2ԓAS]n ח"o G<2ԓA7]ӵ6ٗ% I<2ԓA]`\ٗ# ]L<2ԓA\YAڗ% N<2ԓAm\`5~ۗ( Q<2ԓA\#¦ۗ' :T<2ԓA\f¦ۗ" V<2ԓA\./ۗ& xY<2ԓA{s\D/ۗ& \<2ԓApW\P¦ۗ' ^<2ԓA3f;\5~ۗ" Va<2ԓA[\Լڗ$ c<2ԓAOQ\;Sٗ' f<2ԓAih[~rrؗ$ 3i<2ԓA[cח% k<2ԓA1[& ח) qn<2ԓA[ịח$ q<2ԓAv[:κ ח' s<2ԓAjZ[P ח+ Nv<2ԓAJ=[ulؗ' x<2ԓAw!QMTdɗHUO2ԓAQ74ʗ,H>XO2ԓA1Q̳˗$HZO2ԓAQG˗H|]O2ԓARR ̗!H`O2ԓAz 3R;͗&HbO2ԓADQR;ΗHYeO2ԓAʗH! &O2ԓA6Y(f@&ʗH! O2ԓAHVY,ȗH! dO2ԓAVuY䜣̜ǗH! P2ԓABYC8̕kǗH! P2ԓAYӢ×H! BP2ԓA0Y̳˗ H! P2ԓAYonڗ%H! P2ԓA= Z+ܗ'H  P2ԓA)ZIǡ ݗ&H P2ԓA{ HZ2sߗ)H ]P2ԓApgZޗ+H P2ԓAZﺠxݗ.H P2ԓAZMV ݗ&H :P2ԓAZܗ(H P2ԓApZ 5~ۗ*H xP2ԓA~[h(Aڗ'H "P2ԓA![Þfٗ+H $P2ԓA@[%_cח(H V'P2ԓAe_[x$ؗ)H )P2ԓAR~[n̩=ח(H ,P2ԓAٜ[R#֗+H 3/P2ԓA[+̻S֗)H 1P2ԓA\[̯֗$H q4P2ԓA [sF ח"H 7P2ԓA/\Zٗ"H 9P2ԓAG14\Լڗ H NP2ԓA p\w՚)ܗ$H AP2ԓAd\aGڗH ,DP2ԓA\-Gڗ&H FP2ԓAd\əGڗH jIP2ԓA\}dnڗ$H LP2ԓA3]g!MFڗ$H NP2ԓAdx&]żؗ%H GQP2ԓAD]#XMؗ#H SP2ԓA>b]̯֗ Ho VP2ԓAe]k֗#Ho $YP2ԓAu]Kȷ՗&Ho [P2ԓAü])՗Ho c^P2ԓA`]՗"Ho aP2ԓA]p?Nԗ%Ho cP2ԓAt^ڕAA՗#Ho @fP2ԓAn73^-vHԗ"Ho hP2ԓAݲP^35՗"Ho ~kP2ԓAxn^uΔTWԗ"Ho nP2ԓA?h^&Nԗ%Ho [sP2ԓA^“ԗ)Ho uP2ԓAc^z]ԗ!Ho xP2ԓA0_ei՗"Ho 9{P2ԓA_µ՗!Ho }P2ԓA>:_!Q՗$Ho wP2ԓAjW_ i՗%Ho P2ԓAt_iȷ՗$Ho P2ԓAI_Sfԗ"Ho TP2ԓA_<՗&Ho P2ԓADj_i՗"Ho P2ԓAt_Y/+֗#Ho 1P2ԓAA`5՗&Ho ВP2ԓA`B֗*Ho oP2ԓA9`+oNԗ%Ho P2ԓAU` ԗ(Ho P2ԓAq`rǎHԗ%Ho MP2ԓAN`bԗ,Ho P2ԓA`0Nԗ,H P2ԓAx`1ԗ(H *P2ԓA`xVӗ(H ɧP2ԓA`aTWԗ.H hP2ԓAzaӗ3H P2ԓA1akӗ7H P2ԓALLa(ӗ%H EP2ԓAcgaËnӗ.H P2ԓAeaۀӗ1H P2ԓAfTa:Gӗ.H #P2ԓA:a#يTWԗ6H ¼P2ԓAa ԗ6H aP2ԓAal1Hԗ(H P2ԓAXbUҗ&H P2ԓA b7җ,H >P2ԓA2 :bFnӗ*H P2ԓAMSbnӗ)H |P2ԓARlbpnӗ5H P2ԓA?bZ}ӗ)H P2ԓAE3bnӗ)H ZP2ԓA[bՇ ӗ)H P2ԓAbbq ^җ+H P2ԓAnb-Gӗ&H 7P2ԓA0dc1ԗ+H P2ԓAOcȷ՗(H uP2ԓAm2cd5՗*H P2ԓAvuJc!̶֗&H P2ԓAac{ޅח%H RP2ԓAycdؗ&H P2ԓAcMXfٗ*H P2ԓAhc8MFڗ%H /P2ԓAaxc"҄Aڗ$H P2ԓAfc ;0ۗ%H nP2ԓA4cK/ۗ(H P2ԓAydܗ*H P2ԓAKdŃ~wݗ0H KP2ԓA0d~wݗ*H Q2ԓA8 Fd?qޗ(H Q2ԓA-/\dqޗ'H (Q2ԓA rdnݗ)H Q2ԓAldXvޗ,H f Q2ԓAdA3fޗ*H Q2ԓA d+ޗ*H Q2ԓAd%ߗ'H DQ2ԓAdiSߗ-H Q2ԓAdsHI-H Q2ԓAfe^A(H !Q2ԓAeG€G5,H Q2ԓAs,e0D\#H _ Q2ԓAq@e<5)H "Q2ԓATe2F'H %Q2ԓAPgey5'H <(Q2ԓA7zeb%(H *Q2ԓAeKQ%)H {-Q2ԓAye/.m*H 0Q2ԓAe~W)H 2Q2ԓANe~W'H X5Q2ԓAce~+H 7Q2ԓAe~ A(H 5=Q2ԓAٖ fP}t,H ?Q2ԓA ~f9}.H sBQ2ԓAC.f{}Q'H EQ2ԓA>f8}bw+H GQ2ԓAE'Of};*H QJQ2ԓAթ_f|(H LQ2ԓAofk|I.H OQ2ԓA_f|C*H .RQ2ԓAfM|=K*H TQ2ԓAKf?,|3,H lWQ2ԓA;f){+5(H ZQ2ԓAf{$.H \Q2ԓAef{+5+H I_Q2ԓA)fb{̌0H aQ2ԓAfqA{ .H dQ2ԓAf{V-H &gQ2ԓAJgZz -H iQ2ԓA)gDz+H elQ2ԓAgz@.H oQ2ԓA)g-xzg,H qQ2ԓA#K6gVz@*H BtQ2ԓAIBg5z@*H vQ2ԓA͈Ngz%H yQ2ԓARuZgyIP+He |Q2ԓA3egy̤_'He ~Q2ԓAqg_y̪*He ]Q2ԓAV|gky̪)He Q2ԓAfgJJy$$/He Q2ԓA|g(y̌,He ;Q2ԓA^g(y̌,He ڋQ2ԓAtgx̅-He yQ2ԓAHgx3,He Q2ԓA鷹gxo%He Q2ԓA'gx-He VQ2ԓAgxjD/He Q2ԓAg{_xgk.He Q2ԓAg=xo-He 3Q2ԓAzg=xX.*He ҠQ2ԓAgex],He rQ2ԓAkgwX.)He Q2ԓAgNwN/He Q2ԓAhNwN.He OQ2ԓA h·wQ|/He Q2ԓATh7wK+He Q2ԓA)}h7wN)He ,Q2ԓAAhtwH,He ˵Q2ԓA "h!SwK'He jQ2ԓA'h!SwH*He Q2ԓA,h1wB?'He Q2ԓA̜1h1w;(He HQ2ԓAL6h1w8.He Q2ԓAR>hv;+He %Q2ԓAAhv6/He Q2ԓA"Ehv8.He cQ2ԓAc&Hhv,P-He Q2ԓA]Khv0))He Q2ԓA>Mhv,P/He @Q2ԓA$Phiv6/He Q2ԓA@Uhiv,P/He Q2ԓA?Vhމv,P0He \Q2ԓAeXhމv,P+He Q2ԓAhXhމv,P.e Q2ԓA$Whމv3+e Q2ԓAUhމv,P*e TQ2ԓAThމv0)+e Q2ԓAIShމv6+e Q2ԓANhމv,P,e R2ԓAQrFhމv6+e R2ԓA+Chމv6,e M R2ԓA{?hމv8)e R2ԓA';hivB?,e R2ԓAI7hivB?)e *R2ԓAT/3hiv;*e R2ԓA1V.hv;(e iR2ԓA[)hv;+e R2ԓA`$hvK.e R2ԓAqhvK+e F!R2ԓA hvQ|,e #R2ԓAhvN*e &R2ԓAY h wN.e #)R2ԓAh wX./e +R2ԓAg1wTU+e a.R2ԓAag1w[,e 1R2ԓA[g SwX.,e 3R2ԓAg Swgk-e >6R2ԓAgtws.e 8R2ԓAɂgtw \)e };R2ԓARg7wm+e >R2ԓAgwo-e @R2ԓA gwy2e ZCR2ԓARgMw*e ER2ԓAogMwr*e HR2ԓAXgw,e 7KR2ԓAngdx*-e MR2ԓAmg=x**e uPR2ԓAЂg=x6:.e SR2ԓAKxgz_x̪)e UR2ԓAmgx̪+e SXR2ԓAagx̰/e ZR2ԓA]"VgxIP+e ]R2ԓAdWJgx. 0`R2ԓAj>gx@* bR2ԓA-1g2y@, neR2ԓA{%g(yg- hR2ԓA(gHJy/ jR2ԓAI gkys., KmR2ԓATyf^yy, oR2ԓA2fyy) rR2ԓAfty 1 )uR2ԓA2fym- wR2ԓA-fz) gzR2ԓANf5z* }R2ԓA{f,xz3( R2ԓA&fz& DR2ԓAbXfBz7% R2ԓAMfb{I) `R2ԓAyeM|~* R2ԓAweߐ|t) R2ԓAei|( XR2ԓAge|0* R2ԓAt=e8}%+ 5R2ԓA}e{}0+ ծR2ԓAu(ke7}(, tR2ԓAkXeN}(- R2ԓAKEe~5* R2ԓAk2eD~7( QR2ԓA(e{f~D\/ R2ԓAS e~D\& R2ԓAd~A( .R2ԓA1d3D\( R2ԓAhd/YKߗ, lR2ԓAfֻdrPߗ) R2ԓAed`%ߗ, R2ԓAӒdv%ߗ- JR2ԓA~dfޗ- R2ԓAIid_4ӗ%o 9YS2ԓAI@_w1ԗ$o [S2ԓA0Bd_i՗&o x^S2ԓA/I_,՗'o aS2ԓA.._bNԗ+o cS2ԓA_䥎ԗ$o UfS2ԓAt^AA՗)o hS2ԓA^, ԗ&o kS2ԓAD^'oTWԗ%o 2nS2ԓA^ӏ՗!o pS2ԓAr^ԗ$o psS2ԓAYSq^YTWԗ!o vS2ԓAU^ ՗&o xS2ԓA:^!<՗%o M{S2ԓAL^DNԗ$o }S2ԓAr^هNԗ&o S2ԓA]ʑHԗ(o +S2ԓA9]<՗!o ʅS2ԓAװ]r՗!o iS2ԓA11]i՗!o S2ԓAJHy]̻S֗&o S2ԓAd_]]v]̯֗$o FS2ԓAf3A]x$ؗ$ S2ԓA(%]-`\ٗ  S2ԓAk]DHAڗ% #S2ԓA5\[ٗ" ÚS2ԓA \Լڗ' bS2ԓABB\3Gڗ% S2ԓAz\)v ڗ* S2ԓA }\ڕ¦ۗ' ?S2ԓA`\)ܗ) ާS2ԓAbD\`Xۗ" }S2ԓAz(\Zٗ* S2ԓA \$ؗ" S2ԓA![;*ח& ZS2ԓA;[Qm̯֗$ S2ԓAS'[ї֗$ S2ԓAٜ[ /+֗( 8S2ԓAA[X/+֗- ׼S2ԓAc[#֗& vS2ԓAG[ח0 S2ԓA*[Bx$ؗ+ S2ԓAOk[ٗ, SS2ԓAZnڗ( S2ԓAZGO)ܗ( S2ԓATZ\Rݗ+ 0S2ԓAZݗ- S2ԓAy~Z:qޗ0 nS2ԓA8aZYKߗ1 S2ԓA$EZfޗ* S2ԓA)Z$xݗ' LS2ԓA Zg#hܗ, S2ԓA>Ynڗ%! S2ԓA?ջY%×! S2ԓAYYR̴ŗ! gS2ԓACYݕ̕kǗ! S2ԓAMdY~,ȗ! S2ԓAGY=,ȗ! DS2ԓA*Y}ȗ! S2ԓA+ YNR<ɗ! S2ԓAXc(ʗ! "S2ԓALX̺8˗ ! S2ԓA~WXП̡p̗ ! `S2ԓAǃX4 ̗! T2ԓA}Xw ̗! T2ԓA`X麠 ͗! =T2ԓADX͗ ! T2ԓA4'Xb͗$! { T2ԓAXCǡӗ)! T2ԓACSW+#֗+! T2ԓAHWn7җ&! YT2ԓA1W=З'! T2ԓAW̝ח,! T2ԓAȟwWYHԗ)! 6T2ԓA&\WT{˗! T2ԓAZi?WߣH̗ ! t T2ԓA"W #̧"̗! #T2ԓAW"f̳˗! %T2ԓA Vʤ ͗! Q(T2ԓAV !˗ {*T2ԓAVP̧"̗ {-T2ԓA/V:tʗ{/0T2ԓAtV̳˗{2T2ԓA#XV;4ʗ{m5T2ԓAP;V~ȗ{ 8T2ԓAZVv@&ʗ{:T2ԓA"V&ʗ{J=T2ԓAIU.Ɯʗ{?T2ԓAUDΧزɗ{BT2ԓAR!U[̃Uȗ{'ET2ԓA UuǗ{GT2ԓAypU(ŗ${eJT2ԓA35RU!˗({MT2ԓA?5U`˗*{OT2ԓA%)UlũY͗({CRT2ԓAYT2͗&{TT2ԓATK2͗${WT2ԓA3T:͗#"{ ZT2ԓAAbSs[0З"yT2ԓA^KES!Mї"4|T2ԓA4(S+ї"~T2ԓAJR⪯ї2"T2ԓARї<"T2ԓARRїBPT2ԓA–Rї#T2ԓAQyRذzϗ#T2ԓA\RΗ!-T2ԓAB?R͗-̓T2ԓA"Rñ̗%kT2ԓALŖ"̗% T2ԓA FQI-˗T2ԓAT/Qd4ʗ$HT2ԓAqծQzʗ@T2ԓAQ4R<ɗT2ԓAKtQ2zȗ&T2ԓAoWQHܳǗ!ŨT2ԓA'7:Q_Ǘ#dT2ԓAAQtb CǗ"T2ԓAPǴ,ȗ#T2ԓAMP, YƗAT2ԓAPBM(ŗT2ԓAP䱵(ŗ%T2ԓA4PІėT2ԓAnPYėT2ԓARP×-\T2ԓA4P߶×&-T2ԓAʷP"—%-T2ԓA/O̢Ɨ?-:T2ԓAO#NʗD-T2ԓAOP͗2-xT2ԓAEnOg)y֗(-T2ԓAcO|Sϗ--T2ԓA"hOė0-UT2ԓALO;D-T2ԓAP0O]̼-T2ԓAzO3̇0#-2T2ԓAfN:%-T2ԓASN`&̾ѣ"-qT2ԓA]NGZ"-T2ԓAܹNuC"H-=]f2ԓA+CNICH-_f2ԓADNgY"H-{bf2ԓA$OÞ› H-ef2ԓA~1O\ H-gf2ԓArRNO_H-Xjf2ԓA*O-˗&H-of2ԓAOdӗ,H-6rf2ԓAw'O8tSϗ;H-tf2ԓAO@&ʗ@H-twf2ԓAPǗ.H-zf2ԓAPSF×#H-|f2ԓAۀ>P×H-Qf2ԓA/*]P×H-f2ԓA{P94!ŗ"Hf2ԓAM[PX՚×"H.f2ԓAPAͭė"H͉f2ԓAP,O4!ŗHmf2ԓA3P̨Ɨ!H f2ԓAQ腙ƗHf2ԓA#3QB̜Ǘ+HJf2ԓAQQ1ޘ CǗ%Hf2ԓAV3pQǗHf2ԓA6Qy6̐ǗH'f2ԓAtdQїR<ɗHƞf2ԓA QR<ɗ!Hef2ԓA3Q *R<ɗ#Hf2ԓA R}ŖNʗHf2ԓAL(RgNʗHBf2ԓA1FR:tʗ#Hf2ԓAeRڕ˗Hf2ԓAHRvH̗ H f2ԓAR2͗"Hf2ԓARVΔϗ-H^f2ԓAR@BΗ1Hf2ԓAR& ͗3Hf2ԓAuS͗7H;f2ԓA@g2ԓAn*YTƜʗH! NAg2ԓAJY زɗH! Cg2ԓApHiYkɗH! Fg2ԓAwYTHǗH! +Ig2ԓA]dY̨ƗH! Kg2ԓAޓYė!H! iNg2ԓAzPY;/ۗ)H! Sg2ԓACZ[̄)ݗ)H FVg2ԓA` j A{DH j AzD6 \j AD nj ADF00 k4j AD>AA j AmD  jj AkDP22 +j A&NEJ jE)) `j AIE j ARE ףj A.E j AEE Nbj AUE(( Aj A_E--  j Am}Ez(( |j AktEo)) )\j AW'Fe Fsj A)F sj A F nsj AF(( rj AE(( rj A E)) !rj AE'' \rj AE!! nrj AE Mrj AE -rj AE shqj AE Gqj ACFW55 ˡj A;FO%% j A0FN%% A`j A,F- }?j A$F,, j AF(( j AF /j AiEb$$ X9j AlE\ j ATE1!! Ej A7E"" j AE Sj AE 33j AE nj AEr j AzE j ALE`%% }?Uj AE4 Uj AE Tj AE,, /Tj AyE** jTj ApE,, Tj AgE&& zTj AE^11 PǾj A=_ {~Zj A9M  l A G # oj A{Hg"" ^j A-fHq.. Q^j A;YHn00 ^j A-TH^ v^j Aa< &,j AU< %,j An<# ~k A@P O=6j A@> 3j A@X!! +El A@B"" ffEl A@. EEl A> ApRl A=// 8Ol A=  shOl A= GOl A= &Ol A= %Ol A=)) `Ol A=55 Ol A=// ףOl A= Ol A=v NbOl A=- -RMl A%H!! Gaj A2H## &aj A=H %aj AMH ``j AxHg Ҿj AEII +Fj A|H ECj ArH Cj AH ȶj AH% j A~H/ T㵹j AWH /ݴj AZH &j A I :l AH ~:l APH// l竈l AH Zdl AG.I Cl A*H "l A6H^ l AH l AZH Cl APH (l A;= {#l A^8 A`)j A1844  `)j A8?? `)j A833 ;_)j A@^8// rh&j A%_8 ?? G&j A%W833 &&j A @8$.. \B$j Af8 Nb0k Ar8 8k Aqq8 shk Aq_8++ Gk Ae8 &k A8 Mk A=8D k A8 ck A~877 Xk Ap8// 0k AV8 l k Ax8'' k A38 Ǻk A)81++ pk A>8("" Nbpk A7|8>> Apk A>w8;;  pk A?g8 pk AO8 k A7 gi Ay7u O@i A}7n i AQH!! l AD ij AD !ij AQBe Kj A B- +j A1_C lWj A"" Rj A?C5 vRj A E j AD ڬj AD j A D 5^j AD pj AD Oj AD /j AD Vj AD!! |oj AD  )\oj AD%% vnj AD Vnj AD: %j AD< `j AD: j AD/ ףj AD Nbj AtD.00 Qj AuDDAA Qj AjD>-- 7Qj Aod8!! $j Al8 9i A`:%% shj A\: 11 Gj A:(( J j A: j Al: tcj Az: Scj AD: \bj A,:!! nbj A: j A : rh!l Ao: %!l AD: ` l A: I l Adp: Ml Ac^: -l Aqa: I l AS!: l AI9 l A:@## Vl A9Y ҍl A9R -l ACt'' ij AC ZTgj AxC X9Tgj A5C Ȇj A'C!! 𧆝j AC +j AB Pj AB lj AB Kj AB hj AB$$ hj A|B :hj AB uhj AB"" rhj AB Qhj AB '1hj ABt%% gj A|B|'' gj AB ڕj AB ڕj AB## ~ڕj AB)) 5^ڕj AB(( q=ڕj AB!! ڕj AB5 1Lj ABE mKj AB. Kj A; pl A ; Ol A: vl Af:eAA YUj Ad:Y++ XUj Ap; Rj Ai: Rj Ai:;; CRj A: "Rj A2:  Rj A:f 5^Rj A:Z11 p=Rj A2;+ ?5>Pj AT:7yy -=Pj AJ:*NN h=Pj A:&& !l A4:B77 l A: Zk AM*DR Q8Kj AQDI## &18Kj AUD p=Hj A#CD Hj AC ^Hj A:CM** Hj AUCD! 1Fj AD  Fj AGC ~Fj A1C 5^Fj ACA Fj AC7 xFj AID VCj A=D Cj AC CCj A4C "Cj ArCl Cj Av8 D j An8 J .l Aft8 .l At_8g .l AVE_ Vdj ABE_ dj AXE >bj AKE v>bj A-E> l A\TDi Yj ALD{ $vj A.;D(( vj A11Dy%% Tuj AC W~j ACs W~j AC X{j AC {j A6> •i AY6 i AQ6 i A9`D SsUj A.[D 33sUj AWD nsUj A0D  Rj A D ERj ACW Rj AkC* UPj AC- A`UPj AC }?Mj A{C Mj A.=v33 .j A3w=m44 z.j ABg=g** Z.j A9a=[-- X9.j A/Z=L .j AFC CLj A-- 5^.j A]? Cl A7? Cl AC9 8j A6999 78j A(9## sh8j A9 G8j A79 S#6j A.9!! 33#6j A<a )\Jl A!3=b e;Jl Ar= A0Hl A< El Ag9 nB$j AX9 MB$j AP 9 -B$j A 8 n!j A8p M!j Al6% !Ai Ag69$$ q=*i A56n!! 䥛i A>6Y%% i A5N  i A5? Hi Aff9g x!j Ad_9] ȶ!j A-69)) [d j A?9-- C j AG9((   j Ai8&&  j AQ8++ # j A^8!! {j A^$9 k A[ 9 !k A6~ PGi A{6t lGi A9%% q= j A922  j AD;:q  l A09?,, l A9""  {l A9!! ~zl A;I shѧj AEI %ѧj A6I aЧj AH**  Чj A|H e;ϧj AzyH%% ϧj AmH Χj AEI22 oCj A2I# Bj A I* Bj AI55 !Bj AI?? ]Bj AI @@ nBj A HBB MBj AH?? -Bj A+HDD J Bj A5HJJ Aj A.H;; Aj A3H)) Aj AFH** 8Aj A:H%% shAj AH GAj AHw &Aj AH %Aj AH a@j AH~ @j AHt ף@j AH j AH nj A*uH Mj AH66 뱢j AgH55 ʱj AH// Z$j AH X9$j AH #j A|H  #j ArH F#j AI'' l AH* lgl AH Kgl AH,, +gl A I BB = gl A H)) yfl ALH## y֤l AvH ֤l AvH ֤l AIH "" uj AcuG#$$ fj AJ& uj AIJ ʡuj A8xI** sj AImI//  sj A[cI33 Esj AcXI66 sj AmOI// tsj AlIE ʡj A}8J `l ABJ ;_l A8J _l A J Фl AYH(!! Nl AQH## RNl A9H Ml A0H -Ml A-kH,, iMl A2 J5 lj AHJ: Kj AIi  l AJs - l A3J l AI ~l AI] l AZI w_l A@ $El A !L""  `j AK Bj AK Bj AK !Bj AL` &j AK/ A`%j AKM yj A{K_ Ȗj AqKY 淪j AmK: +j AdK5 ffj AJKU j A@KQ j A~K 6^jl AK q=jl AKN Vl AK6 l AK8 ̼l AK0 l AK! Dl A K jl AKL i-l AKB p-l AK4 O-l A = Χ3j A= 3j A4n= P3j AdR=!! l3j A&>= t1j A = +j AY= hl A9 Ti Aa>K +j A>I Zd+l AR>2 C+l AF>m I(l A9Q َHj AR9&& &Fj AS9B55 osCj Ad9)++ ]rCj Ag9(( @j AT9 t@j A8 A;j A8 A;j A8'' A;j A899 7A;j A844 shA;j A9 /Tl A9)) jTl A 9 }? l A8u;;  l A8n  l AC9 / l Ay9! +6 l A29 ff6 l AH9 E6 l AR9** $6 l A9Z9< Kl A-49# +l AfI tcj A Js## Scj A'Ix"" 33cj A&In ncj Aq1J8 ־j A>J"" վj A2J66 A`վj A,J }?վj AgI Ծj AI /Ծj AI jԾj A I Ծj A>J'' KGj A!J +Gj A&I%% ffFj A#I$$ EFj AQI $Fj AiI## Fj AI TEj AJ" tj AIC rj AI> Qj AI2$$ '1j AI### bj AI(&& ﷹj AI#** ηj A!I# j AQI1 Pj ANI& lj AII Kj AMI!! +j AW}I&& = j APuI y鶹j AIK ^)j AIP )j AI9 K7)j AI4.. 9(j AzI. t(j AxI r(j AG]I2 Q(j AWI b(j A5J \l AI 롱l AJd Gl A,7J_ &l AJC tl AI ol AI l A I{ J l A&Iu l A^II }?el A: i A: i Ay: vk AtId ( j AtGI ~j AJHI R~j AI?I ~j AoH h}j AiH p}j A41I  j AT"I j AK I j AUH |j AWH )\j AYH} ?5j A@H `j AoH ;_j A=I* Ӿj A1I' tӾj AH22 rhѾj AH// GѾj A&xH&& &Ѿj A1nH %Ѿj AH  Cj AH SCj AH!! 33Cj AH11 nCj AzH'' Bj ArH Bj AdH !Bj A@RH \Bj A\H nBj AHT ʡj AH  j AsH zj A7I El ABE ]j A=E rUj A&E rUj AD" Rj ArAR22 hj AeAR// pj A_AG Oj A}@L @5ހj A BD +_j A~:4 '6j A91 1j Ab8D V= j A( 8C - j Aq7S i j AT7h j A{7 7j AH7 `j A>7 Đj A]g8 "l A:>,, j A :;!! Nbj A:"" tj A:-- dj Aw:&& /dj A|:'' kdj A{:&& dj A: j An:!! +j A 9'' kj A9 j A1: ʡUk AZ: Uk A8: A`Uk A\: |?Uk Ah:! +k A]: k AU: +k AU: gfk A@: $k A@: k AeD ]j A_D ]j AED} p]j A;Ds O]j AC[ Zj ACKCC ҍZj AD Xj AC wWj A"~C Wj A{Ca VWj AC pUj AxCr oUj AGK Oj APK e;?j AAK ?j A L "Kl Ax(L5 l A/L'%% Dl AVAj Rj A2A ;߿Mj Ap: k AHI l AH"" l AI= wol AHB Nbl AH4 Al AHY %Ql AWH Pl AUH 

    c:u99 '1&j A+b:ePP b&j A3W:`-- &j AOC:` &j AY9:])) &j AP3:P)) O&j A$:?? J$j A6:EE ~J$j A6x:TT 5^J$j A@m:CC p=J$j AcV:'' J$j AGZ:'' I$j A0Z: "I$j Ag:"" ^I$j A_:.. I$j Az:` xI$j A{:O XI$j A:I tH$j A:)?? !j A:44 C!j A:33 ~j!j A{: /-j A_: V-j A: (,j AU9'++ -j Ag:A MRk A:9 -Rk A:2 I Rk A: tk AF{:1 ]k Ax: /4k A:** k4k A":AA 4k A,:FF z4k A4::: Z4k A>~:GG X94k AG}:HH 4k AMt:// 3k APf:z  3k A]k:o"" F3k AdS:N t3k AP: kk Ad : k A0$H bj A\?? wj A[?5 j AV?((( |j Ag? 8qj AY? shqj As? -R!l Au? J R!l AlG>(( %j AbG7(( `j AZG% j A{G پl A@;:.. o#j A84:FF "j A>(:// "j AD: !"j A:&& Tj A: ?? j A@z@ '' z]j ADo@AA Z]j ABe@  X9]j AT? ]j A.!@ %% Zj A8@?? /݄Zj AB@%% jZj A)@ Zj AO? X9Zj AQ?++ Zj AO?&& Zj AC?  ׃Zj A"? EZj A)? Zj A4? tZj A5?33 SZj A2?)) 33Zj A2?{(( nZj A?,, A`Wj A? }?Wj A5pF nj An<"" +j Av<q > j AK<$$ 6^jj A;  j A;  Hj A; j AdHx 33Ӿj A[Hj!! nӾj AgHg$$ Ҿj AIZ /Dj A H jDj AHa Dj AUHi  Cj A`HU tCj AwH 臨j AuH +j AHm j A%H A`j AAH }?j AS|H j AjnH j AH K'j AH +'j AH = 'j AHt x&j AlH +&j A:\H ff&j AqH j AYH Ηj AoH ^ j AiH  j A#=55 P7j A"=>> l7j A<j +6j A+= j A= xj A=  Xj Aa=  6^k AU= q=k AB= k A6=$$ k A.=.. #k A!=(( _k A< k AZ6IA// j AOI:: zj AY I;; Zj AUH ZTj AGH X9Tj APH_ j A(H5 +j AdHQ ffj A`H4 j ALzH)) Sj AUH :j A"}< +vCj Ad=0 z@l Au=  Z@l ABB shj Ap>, ;Zj A>* wZj AYD |ߕj A!PD!! )\ߕj ASDm ޕj AMCW Vޕj A\CX @5ޕj AR@D &Qj A#:D `Pj A6D++ Pj A3Dn NbPj A!Du%% APj AD""  Pj AD Pj AC] |Oj A3Cd!! )\Oj A^Cr d;Oj ANCb Oj A!D Mj A"D%% -j A)D++ J j A D%% j AC j AD j AC 7j AC shj AC Gj AC## &j A+C %j AdC `j ArC j AqC Nbj A-xC\ j AC o3j AC n2j AC M2j A>C -2j AKpC 1j A}C 1j A 98 wl AO9j l A;cD  j A\D Dj A. Dn j AUCp Cj A@LD vnj A*JD Vnj AFD @5nj A)8D## {nj A2/D++ mj A /D mj A@D -mj A4D imj A3Dm(( pmj Az/DZ?? Omj A#DUHH /mj ADVFF Vmj AD\22 lj ACd(( lj ACt(( lj ACe$$ Ilj AjvCU Zdkj AUD j APD <ߕj AGD wߕj AED ߕj AD ޕj A D Rޕj AC[)) -ݕj AC[)) iݕj ACY-- pݕj AtC Nj AnCq.. vNj AC ףj AC'' j ACf ףfl A_E .. vj AUE++ Vj ATE @5j A^E?  pj AKE woj ADE"" oj A8E |oj A%E )\oj AD Rnj AD nj AEEK shj AE( `j AE)(( j AE+)) ףj AD!!! j AD Nbj AD Aj AD  j AD% shQj ADC!! !j ADK @5l ADH {l AD. l Aj7N j A_YF7 $j A_E?;; qj AVE0.. qj AXE' qj A8;; " j Am8c33 5^ j As8Z q= j A8?? V}j A8-- |j Aw8 1|j Ao8 -i Ax8)) hi As8 pi Ar_8<< ^i A811 Zdk A8$$ Ck A8 jk A; Wk A< Wk AjlA :j AjcA~ j AYxA L X!j Ac= k A^= [dk AyZ9 Z&j AtS9LL X9&j AyI9}]] &j A{A9vYY &j A"9("" η!j A$922 !j A'977 O!j A~#9BB l!j A~900 K!j A8-\\ (j A8);; :(j A8>> P'j Av9b$$ 1k Aoe9O55 1k A|U9AA Тk A{9## !k At9u nk A79W33 Mk A79KAA -k A(911 Fk AS9&& k Aa9 tk Ax9# -Ck A9HH k A9 >> k A'9 6k A8 k A8 ~k A!9 ?Wk A8077 !rk A8")) \rk A8 J rk AE G00 ]2j AEG%% n2j AhF6 Fj A /ݤEl AMH'' uXj AG KWj AH!! ^ɐj Ak= 66j A= 3j A= Ԩ3j A =// b3j A = 3j A@` bj AWy;:: y.j AUq;KK Ȇ.j AQk;[[ 阮.j AKe;]] +.j A;QQ +j A;__ 9+j A;ff t+j A y;]] r+j Ap;WW Q+j Af;gg '1+j A^;pp b+j AU;ee +j AM;GG +j A97; +j A:>> I!j Au:E Gqk A6;S &qk A6; 43k Ax: k Ar:22 !k A @;n k AF;bGG k A<;PNN k A 0;@BB 8k A: == Sk A:''  Sk Aa;  Rk A*2;$$ X9k AQa; k A0FN Hzlj A*F-- Dij A%F(( jij A$F Iij AFt (ij AE? ij AEJ I\gj AjE(( pdj AbEg /dj A)Fn /ݴl AE 𧖃l A|E +l AE gfl AdEZ $l A: yj Ap; u8l A; r8l At^> j,j A\&@ jlj Ae@%% Ilj A?u@W Cl A"8Q X9j A8J }?uj Ak8 j A7 ^9 j A7!! j A7 Zj A7// Yj A o7** #Yj A$_7 ^Yj ACK7 Yj A*K7 xYj A7@7 XYj A700 (< j Al7 -2k A*7 J 2k AM7 1k A;Q = Cl A\M<S l@l AcH Cj AaH)) j A_ IO 1 j AI l j AnHD))  j AaH422  j AH11  j A&H " j A#HQ++ O}j A7H0 |j A4a;7 i APJ;4 i ALC;)  i AqA o{j A_A@@ {j AWA<< {j AOA## !{j AAA'' \{j A7<q |O j AS<n## )\O j A:D j A:> ˡj AJ,; :H j A#4; uH j AN:  j A:] rhA l A2;S GA l At.; #l Af: Zl A 9 ףj A9 j A 8 A`E6l A.}; rh!Kj A: >6l A: R>6l AI  Dl AgD x9Kj A.D X9Kj A@yD K79Kj AJiD 9Kj ArD ~Hj AiD 5^Hj AD- CFj AD! ~jFj AD IFj AkD (Fj AD #ۙl A 9 /ݔj A]Z9// +j Ap8 +wj Ao9%% +l A*>(( Cj A>## 0݄Cj A= @j A= B`@j A= l A= |l AbHu j A)&H> Qj ANHG &1j AGP xyj AG& yj A G/ xj AGG)) Hj AG> j AGR ~j AGM%% 6^j AGQ## q=j AGF j A7c ۷k A7W Zd۷k AKj j A7K Cj AL ^j AK v^j AK V^j AK ?5^j AK &l A"'L Լl AK jl AO9g'' ʱ!j A:=(( K3j AN= x1j Atn= |l A= C|l A1= l A<% @ l A8 /k A8"" .k Af?E ף@j AX?? @j Au? Nb@j Ak?!! A@j A=? <@j A%? w@j AD: 5^]j AJ7,, wj AX7 Pwj A47 Kwj A7 i A 7 i A%6FF bi A6MM i A.6!! 5^Zi A 6 q=Zi A6 Ci Av6 "i A:L zj AWL0 +&j ACL hl A)Hd l'j AIh Xj AHp** K7j AHt j AHj j AHk Ԙj AHn!! 9j AHc&& tj AHY'' rj AH[ Qj A7Hl '1j A`Hz bj AI   j AH  j AH 5^ j AH p= j AH%%  j AH  j A_H " j ABpH!! x j A$nH## X j A&fH|-- K7 j A4XHy,,  j AH {j AH {j AH {j AH Zd{j AH C{j AuH "{j A0\H  {j AgH  j ASH (j AHM ^j A UHD V^j AH x l AH  l AmH?? l A_Hu00 9l AUHd ul AHH zl A{H6 zl AhH zl AyH yl A qH #yl ADd)) ij AD-- *j AD++ *j AD ~*j AD)) )j AD! jj AD"'' Ij AD'' (j AD$$ 2j AD $$ mj AD$$ ƛj AD"" 䥛j A~D)) j AtD'' [dj AjD Cj ApD* 7j AjD## bj AX79  j AH: zdj A#:p Zdj Agl:z X9dj Aid:s dj AXa:d cj A3h:O  cj ALU:O-- Fcj A>R:@&& cj Ag: j A(: Ej Ana: Tj A:{ j A{:p B`j A^:w99 }?j AP:q33 j AX,:z j A :, X9j A?: gfF j A*:(( EF j A*: $F j Az: u j Aq: r j A<: Q j A 1: '1 j Ay:  *j AM: )j A9:99 x)j A0:88 X)j A.:-- L7)j A: /l A: jl A:V tl ATh: B`k Ap:!! }?k AyD6 "{j A@00 TWl A; 9#l Aj9r e)j AC?++ Rj A_D jTPj AzC$$ TPj AC zTPj A~C ZTPj AwCr## X9TPj ACk TPj AoD ffMj AmC EMj AgC $Mj AWC Mj AD TMj AC Mj A C = 7Kj AC x6Kj AD sj AD tsj A=DU KW~j A0DR## +W~j Ah=5 Jl A ;R l+6j A;J +6j A; ?53j A:-- 1j A}: ff&l A:< Ηl A&@?C ?5]j Ax>&& }Zj A>U-- Wj AS< GQ$j A^<r%% &Q$j Aa< n!j AR<00 !j A><)) !j A<h&& !j A<// = Wk Ao<$$ xVk Am<66 Vk Ao<KK Vk Ah<{LL *Vk A_<m== ffVk AO<\:: EVk A@<J<< $Vk A1<:55 Vk A< rk A< ck A<&& k A<(( k Av<%% k Af<%% Pk A <c yk As<e k A8V< 7k ATp< 7k AQK<f l7k A/<J K7k A=w j)j A=n33 ~j)j Ay=g?? 5^j)j A[=:>> "i)j Ag=QQ &j A_=11 &j AM=\'' "&j A?=V  &j Ai=** -M$j A.<o77 K$j A2= V!j A<77 -!j AD< h!j A=- = > Nb`j A\8'' A`j A169 !j A='9 \j Ad9 nj AT9"" -j A8P Aj AsT9u ok Al9k k Av9j(( 33Sk A9 k A#}955 ˡ5k Ai8 B`k AXB,++ A`Hj ATB" |?Hj A[!Hz rj AAHc Qj ARBH;!! ^ j Ab8H=  j A-H  j ATHY Hzj AHZ22 Ij AGI22 (j A GM 1j AG I\j A'qG0 (\j Am\GQ 1\j AF(H'' $Vl A7J## rj AJ{ Oj AIe +j ApxI j AnWIr j A{BJ-- p=Zj AI"" xYj AI XYj AI K7Yj A I Yj AI Xj AI&& Xj A0tI77 Wj A6kI11 OWj A:bI.. lWj A5YI77 KWj A/RI88 +Wj A#JI?? = Wj A=JU 1j A4JN&& lj A-JD99 j A$J7NN j AI  j AI  ~j AI 5^j AI j A I "j AI'' ^j AI)) j AwI'' xj AnI,, Xj AcI// K7j A** j AWI-- j AKI33 j AI"" ;j AI [d;j AuI C;j AcI" ";j A_I  ;j AXI++ H:j API33 :j AI=%% Vj AwI333 j AoI+DD ̬j AcI(SS  j AYI(WW Dj ALI(44 jj AR; O}Cj AS; /}Cj A?8r  j At84 `@ j An8@ @ j A_8;-- ף@ j AP7A @ j Atf8 Tj AL?s w1j AI?f 1j Ae? &qj AR?} %qj AE?v apj AF?f pj AH?W ףpj A7?P pj A>Y Nbpj A>S Apj A? -j A > J j A>'' j A> j A? l A9 k Ay?; S.j A{: n+j A:  l As9Z Mj Al9`DD pKj Ai9 j l Ao9  l Ag9(( 6 l Ap9 T5 l A~9 5 l Ab; z]j AT; Z]j AQ= j A=33 Ej AI= j A = ˡj AG> L70l A>(( .l A!w>00 #.l A%j>11 _.l A&Y>(( .l A"B>$$ x.l A!,>** X.l A>m77 L7.l A=ZCC .l A=HDD .l A"=733 .l A]># "+l A1>   +l A>'' H+l A='' +l A=44 +l A=11 ~+l A=,, 6^+l A$= q=+l A)= +l A=y +l A=h #ۉ+l A?=` ^+l Ag=\ +l An=I x+l Am="" (l A/8V ףpk A09a// O 1j AF9bHH / 1j AC9Y== V 1j A!9BCC  1j A:933 .j AL9TT ~.j A.9?? ~.j Aax9FF `+j A/&9 )\+j A$9x++ d;+j A.9W66 +j A09A +j A_>9&& a)j AK9EE rha)j A99BB Ga)j A39EE &a)j A/9LL %a)j A&966 ``)j A9W Mb`)j AH922 33&j AH9FF n&j A@9JJ &j A99WW &j A/9??  &j A09 \&j A9 &j Au8>KK `&j A8  C$j A.8 EC$j Ao 9% S!j AN9T -mk Aq9P(( hmk A 9K&& pmk Ao?9$  k Aq39 k A.9 vk AT9m88 @5k AFy9S {k AN9,, (\Ok A[9>> d;Ok A_E9l QNk Ae<9[ Nk A`"9 <߿k AW*91 81k Aa8 a0k Ac8 0k Ae7}$$ i AFE. Zj A;E# |Zj ADHAa /j AoACC |j AdALL )\j AXAKK d;j ALA>> j A%@A== j A15A;; j A:,A33 Rj A?!A22 j A9ABB vj A:Au>> Vj AHAt(( ?5j Ad@{22 {j Ah@m**  j AsA!! Dj A}oA Mbj AUA Vj AKAz j AtA pj A@u Rހj Az@e$$ ހj A@j&& vހj A@i!! Vހj Ay@ ˡeRl AKA eRl A`A +Ol A hA $Ol A SA11 Ol AQA:: TOl AHA{,, Ol A.QAo ˡOl AAA KGMl A/ A55 +FMl ABAAA gfFMl AK@h $FMl Al=$$ }?k AB] Ȧ_j ABN _j A[EY;; 8j A OEZ55 :8j AYEu 6^j ADU L7j ANE (j Ax#E /j A E 팝j AE ̌j AD Ƌj AD 䥋j A!D j A@|D Zdj AVnD Cj AGiD "j A{Dm j AjDX jj AD nj A kEl A .>) E@l A* $@l A = T@l AR=> @l A=>' =l A = =l A%> E=l A_7Y Vj ANg7 %j A7 \l A~C# 1j ArC  lj Az9JJ ZdMj A9 Rl A91  l A65<n%% hj A!7<`++ :hj A9<N uhj AR<  l AS<  l A/< ZD l A Y< X9D l A!B -j AB| R~j A5 DT"" vޕj ALCE {ޕj ASC@ ݕj A:CM Nj ALCO Nj ACP  j A.pCT ;߿j Ad[D j AdRD j A7bDF mj A$\D1$$ -mj A!SD% hmj A5HD) pmj AhD] vެj A`CN Vެj A^CE @5ެj AkC ܬj A,C] Oj ACE |Oj A?(( '1&j A? b&j AvC Zdj Ag?44 SWj Aj? BB 33Wj A? Wj Av9q %1i A$X9p a0i A_9A 0i Ab92 Nb0i A88 j AZ8 j AoA j AgA _vj AkA+ nj AXA= nj AA/ {nj A5@A mj A@N  P~j A@J P~j A=A 1_l A)9 |_)j A(9 "" )\_)j A49:: d;_)j A9A l A29 B`%l A&A9+ ffl A8J9 El AKSG I j A?MG'' j Af?G$$ j AgGy%% `j AZFh)) j AiFi## ףj AeHG 3j ATCG  3j Ab0G 3j A 1G t3j A+G-- S3j A$G.. 433j AG'' o3j AG.. 2j AgF J 2j ADFi"" 1j A\?GZ'' ˡj AZ8GQ j Ae-GN B`j Aj$GJ!! }?j AfG$&& kj ABF j AG zj A5F j AF j AF  ףj AFm Sj AF 43j AF{$$ oj AFn%% j AGE j AyG /nj AzG!! Fj AF j AF++ 8j AF** Тj AF'' j AF'' Aj AF Zj AF oj AF Gj AF \ j AF''  j AyFv)) Ѡj ApFn(( ej AFN /j AF: jj AF# j AF zj AF Zj AF X9j AF!! Sj AwF%% 33j AoF## oj AiF j AbF j AF] ffvj AFO!! Evj AFR&& $vj AFC%% vj AyF'' tj A|rF'' /tj AsaF&& tj AF\"" Kj A~FA"" +j AvF(!! yj AuF9** j AlF+$$ j A\F** ffj A= :8j A= u8j A= Ol A= ll A9PP [d+j A9SS C+j Ap9GG "+j A [9))  +j A?A9## H*j A:9 6^*j A49"" q=*j A9:LL )j A 93nn (j A/9 Ij A9 ƛj A!9"" 䥛j A"9"" j A9 [dj A8Q<< j A8X:: j A82!! _j Az9Q kk Au9: k A9 }k AQ9  sk A}29 Esk A,9 sk A59 tsk A9"" Ssk A~8k$$ 33sk A8])) nsk A8O00 rk A8=.. rk AQ9 Zk AU9%% X9k A 9 k A8  k A8A(( 33k A83 nk AT9 Uk A ?9 /Tk A8Y%% Sk ABY9 k AR_9'' ʡk ALF9 k A@H$$ j A9H$$ |j ABH$$ )\j AKH d;j AH j A}CI(( Ssj A8I++ 33sj A/I nsj A'I rj AH** rhqj AH** Gqj AH11 &qj AH-- $qj AH++ `pj AH22 pj A#xH44 ףpj A(nH-- pj A0eH!! Mbpj A>ZH Apj A?QH  pj AvHbb X9j AHjj j AH\\ j AH2 Sj AH2 33j AH/ nj AH'## j AH%% j AH&&  j AxH## \j ApH $$ nj AfH'' Mj A^H&& -j ATH&& I j AHH33 Tj AHS$$ /Tj AH2 jTj AH9 Tj ApH Tj A]H' Sj ATH#))  Sj A}jH4// j A[HF(( ʡj AHY jl AlH6 l AF0 أ0j AF 0j A}HI "j AJH Fsl AX9Y `j A39B j A9 SC j Az9{ oC j A@9e nB j A(9h MB j A 9m33 -B j A9d(( J B j A8 t j A 811 S j A86 ! j AXKH!! E&j Al?H $&j A24H j AbH Oj A ,H lj A6Hr-- Kj A"H!! +j A4H = j A:G x閴j A]G$$ Ȗj AdG'' Ej AhG} $j ApGx j A"H~ tj AHy rj AGX bj AGV j A6Gh xj A/Hg xl AOIH C;l AYEH ";l AS"H##  ;l AUHx!! G:l Am%Hl :l A$C;RR 3j A36;11 ʡ3j A,'; 73j A ;(( 1j A ;JJ 1j A:cc !1j A!:cc \1j A8:>> n1j AE: M1j A: -1j AD; k A:"" ;ok A;99 vok A#:DD ok A&:HH |ok A):yCC )\ok A(:h>> d;ok A,:UKK ok A5:FDD nk AC:9++ nk A";-44 shk A: Gk A5F7 zlj AE6 Zdij A:y $j A:K gf.l A4:L > +l A :9 y+l Ae7: ##l Aq6: ^#l Ac : #l A[9 x#l AN9~ L7#l AW9m #l A;j++ i A:`.. i A:_ {R3l A;Y aTR3l AWS> ~Z;j AVL> 5^Z;j A> l8j AoX>.. <6j AwL>$$ <6j A>> C<6j A.> j<6j A$>%% I<6j A>!! 1<6j A> l;6j Ay> ;6j Aw > ;6j A= C3j A1M;  j AT2; P j A\; IL!l AK; (L!l A0; K!l A;j  K!l A:P HJ!l A:5 J!l A?^; Il A\~; (l A;: ,l A_; ,l AO: ҝl A;r C8l A;a "8l AH  j AwHr  j A]H %#j A~WH Ӽ#j A3<$ +j A/< j A<T L7j A<E j A-< Ckj A<~ "kj A< XYk A<K rXk Au<; QXk A<<3## &1Xk A<R L7k A-.<K k A; ~:k A2 < 6^:k A7< q=:k A7; k Ac< Zdk AO;(( Hk AV;p"" k Ak;f k A9 NN3l Aq9 N3l AO9++ ¥0l A@9)) ˡ0l Ab9 0l AK8[.. &j Ab7// yj Am8H** %k A8B## `k Ag8 k A`833 Z4k Ak8.. X94k Ao7, A`k A>> |j AEOGG )\j AEHPP e;j AEB66 j AE5 j AE j A}E Rj AlE $$ j AE9%% Il AE.99 (l A+E!66 1l AVFTJJ l ApFM.. l AD6 Fj A; #l AdC plj AJC  plj A3C plj AdC ij A*B ij AC Rgj AaBD dj A+< 5^k Aqy9"" xj A@ Dij A@OO jij A@\\ Iij A@ (ij A<y)) G3j A<w33 3j A< +vk A< ffvk A~7 5^ j A4-7 Cj A6$ hj A6# pj AI8 Ki A88 +i A8f gfi A8^ Ei Ap7b88 +i Au7ZBB > i Ag8 lk At8 Kk A7r%% yk A7a## k A7R k A8 rk A*8 Qk A7 bk A7 k A7 ·k A7 k A7r Pk A7f lk A7 L7k A8 k A7 k A|7## I!j AFM9n y.j A988 ])j A9,, -])j A9= d;&j A9'II &j Ag9 &j AV9 v&j A*9 V&j A8]33 #ۙj An8? ~ j AOa8 /}j AW7^)) zj A*7E66 zj A*7=JJ ~zj An8 k A8b!! Tk A8 /k A"8t jk AUH8 ffk AS28 Ek AS75"" k A3< tl Ag^<^ Sl Ao7 }?Uk A8DI SӾj AHI Ej A';I Dj A0I zDj A6 I++ ZDj ABH"" X9Dj AFH Dj ApnH MBj A%IL ffj AI' Ej A#I $j A H µj A$I5 'j AI: 'j A I- P'j A^H l AbH T㵟l AH µl AX78 Oi AJ:y  j Agr:p ^ j AY2:y44 ~*j Ao:4 q=*j A9 |i A9 Xk A: k AL: k AL: :k A9 9k AA: X9k AK: L79k AyD 7oj AN9& Kj Ad9? Ej AP9N |Ej AJ9"%% d;Ej AE9,, Ej A8"(( woCj A9 nrl A k9B  Sl A|_@ Vnj A@8 ߀j AEK8p al A 7K al An; KG!l Ax; +G!l Af:E A`Uk A9L k AD ;Wj AmC** jl AC"" l AgC,"" &l AFIE '1(j AL@I 'j A3I) el A7!! k Av7 9k AC& j AC  j A~= oSMl A=I nRMl ACLL Q{j AC88 '1{j AC44 9yj AC #9yj ACJ Vtj Ac822 Qj AT8t j A0D8p +j A'_7h wk AH7g k AQ7V |k AG7W APk A`=!! J 2j AS= 1j A$=J  0j A/=1 0j AFp= 43j A= j A=z++ > 0l Ap=g++ y0l A/=[## Ȧ0l A<=%% .l A< (l A< l8j ADm "Zj AIHq  j AEH l{j A++ MR$j A]> -R$j AP= 3j A>=  3j A= ~(l AQ> Zdk&l A=_ j&l A ='' L!l A= DL!l AW= /l A8} $3j A8 P1j A8 l1j A8 zl AC tRj AC SRj AH8 O+j A=8/ $&j A;$$ k A;  k Aaq:@ l Arv:0 /ݴl AO9 %l AB&@ lw)j A= @ Kw)j AI% 휱l AI~## j AI"" ҭj AI$$ -j AI&& ij AI pj AI .j AI!! _j AI  j AI j AxI## hj AqI'' jj AmI## Bj AaIl!! j AJI ̬j A}vI - j AjI h j API p j ALI O j AOI / j A; (j Aa; 1j A: أpk A: shk AJA |OPj AAo )\OPj AAy d;OPj AK Q^j AtAj&& j AlAe j AAV }?Օj AAM"" Օj Ad@A## Fӕj Ab@7 ӕj AN@# tӕj AP@** Sӕj AY@FF 33ӕj A$?: '1X;j A3 ?5 bX;j A:"" ʡe)j A:u(( e)j A ;F ( l A;8 1 l A(; l A/; vl A-; Vl A;$$ ?5l A ;)) {l A%:t {l A>YBB *Kj A>S ZdHj A!>I;; ~Hj A?> ( Fj AF=  |Cj A=q D|Cj A=e++ j|Cj A=YCC I|Cj A=-- @j A={88 -@j A= =j A = =j A= EG=j A=7"" ?5N;j A= {N;j A> kRl A=d.. (Ol A=[55 1Ol A= LMl A=r&& LMl A=f.. DLMl A=[55 jLMl A=I++ ILMl A= -Jl A= iJl A= pJl A=  R.Hl A= .Hl AU8 Z$j A08 X9$j A#8 j Afd8 •j A8'' ˡj A833 j A28## zj A$8x,, Zj As8 j Af8&& j A~68 lwj A>9yII 8j A.9j<< P8j ANw9V"" = 8j A,9JJ x)6j A&9BB X)6j A!9DD L7)6j A#955 )6j AXz966 (6j A_h9-- 9(6j Av9| u(6j A6c9 r(6j A9:: 3j Ab-933 #ۙ3j A$8966 ^3j A 69-- 3j A#'9-- x3j Aa 9 X3j A89 L73j A9]77 3j A9d'' 3j Ac8{ Ԙ3j A?@9  l 1j Ac 9 C 1j A9  1j AU8 ~ 1j A8f!!  1j A194FF p}.j A.9$22 O}.j A9 C|.j A8g## C{.j A8q<< "{.j Au8 v_)j A8"88 _)j A8 _)j Ay87AA &j A:9P;; 5^l A9(( Ik A09BB k A99BB k AF9JJ Zdk AV966 Ck A 9D  k A`90!! Omk A~9) /mk A?9.. lk AP9++ lk A:922 lk A 9 Clk A8## jlk AGL9++ Ilk A(19.** k AD9 pk A+8 VNk A_8 !! zNk A@ '1Jl A<? Om&l A;m V#l A;O @5#l A#;- vN!l AY;w |l Ar;k )\l AA 43{j A|K> Z;j Ap8> q=Z;j Ax.> Z;j ADe Sj A~WE'' gfƧj AKE33 EƧj AE ŧj AE%% ˡŧj AE55 ŧj AD;; B`ŧj AD@@ }?ŧj AD{44 ŧj ADc(( 0ħj AD\ kħj ADl ħj ADe zħj AE P7j AE l7j AD gf6j ADo E6j AD^(( $6j AET Xj ADK j AD cj AD j AD++ Pj A}D lj AD( _j AD j ApDH Hኝj A!OEY## Rj A,DEVCC Rj A\E /Đj A[E kĐj ADE Đj A^E Ðj AE B`5j AD }?5j ADy 5j ADf 4j ADW /4j AD 𧦋j AD +j AD j AD j AD j AD lj AD-- Kj AD +j ATE\ C> Zdl A.:99 Cl A+:<< "l A19??  l A/9@@ Gl A-9II l A09uFF l A:9fDD ~l A9!! jk A*9'' (k A49(( 1k A,9>> lk A29II k AC9+'' Vmk ATD "Fj A:N #I6l AH l A9'' I$j A9++ H$j Az9%% H$j Ag9 9H$j AH9## OG$j A59 ^!j A.9(( !j A9 x!j AP8 r!j AI8 Q!j At$9.. *j A9CC *j A900 ~*j Am8 ʡ5k A`8 5k A%9 +k A>`.. `Uj A_+>;; Rj Ao>== Rj A > 7Rj Ak>T77 TMj Aa>I&& µMj Aa>, ʡMj A=M xHj A= +Hj A J l j AI  j A J -}j AI,, h}j AI"" O}j AI /}j AYI? ףЧj ATI()) Чj AQI&& NbЧj ArF yvj AvFK j AFW 9j AFU uj AFD rj AUD %!tj AgD-- ` tj AD qj AD]** Gqj ADR%% &qj A%E /l Al<@BB p=j)j AV<@%% j)j Ai;S xi)j Aq;M Xi)j Axx<PP 1&j A{n<~RR l&j A<@ G&j A<<&& hM$j A[; pM$j A;A K$j AA; ?5!j A; !j A;:: e;/j A;&& Ġj A;66 ףj AV=* e(k A+= B>(k A[>d $Cl A=[ l=l A=[ '18l AlI< nj As;p'' j A.S< …j A8D< ˡj A;b kj A;K j A,XF oj A}E## 9ij AsE uij AZF)) Vj APF~,, ?5j AGFv++ zj A UF A0j A LF%%  0j ABF** 0j A=F'' G"" Ej A:G $j A5G j A/Gv&& Tj A%Gr## j AG ˡj A%G j A'F A`j A%F!! }?j AF} j A Fi j AMG"'' rxj AFG)) Qxj A  ׳j AD H''' Ej A.H55 j A2H ,, tj A/ H Sj A4GO T㕴j A/GD •j A>  l A*= / l A?= j l AM9C i AP:I!! j Ap'I 44 j Af!I''  ׳j AgI Fj A{I j A{H%% tj A]H Sj ADH 43j AH oj AUH вj A$H !j A-I %j A&I $j AI /$j A6H## k$j A`H&& $j AH11 z$j A}H $j AH22 •j AR8I l A>I* El AH l ADC  ZHj A >"" X9Hj A?# Vl A= PW;j A= lW;j A= KW;j Ao=o rhl A^=.. B`k AaC ˡj A` C kj AvC j A?C yj AXB Pgj Aq k A; yk A(L< ,k AHl< gfk AWp<## Ek A2)<h $k A;A k AB j4Kj AA 4Kj A8$ ZdK!l A,8 _)j Ae48D(( :j A#8F uj A8 I j AdQ8(( V}j A>8(( |j A7%% Zd{j Aq7"" C{j Ap7 "{j Ac7s  {j Am7o++ Hzj A^8 xk A7## k A7 Ok A7 tk A700 rk A7 Qk A9q8 &1k AT8 bk ARz8 k AGFp Zd;j AP-F!! C;j A@F G:j AlF :j AVF(( pj AMF!! Oj ABF /j AAF Vj AF%% Rj A0F## j A F(( vj AF)) Vj AF ?5j AE {j AE j AE j ACE -j A`E$$ hj AEn j AE |j AE )\j AE!! d;j AE j AE j AE vj AE Vj AEt"" ?5j AE zj AeEU j A$E& Mbj AE!! Aj A4E$$  j A;yE&& j A$uE(( ;j ApE-- vj AjE'' j AtE |j AzoEz )\j AE! Mrj AEP"" I rj AEP!! qj AvEI qj A"mEG qj A+aEB!! 7qj A2S; PWj AP;55 lWj A A j A1>  j A,>  j AQ> wj Ay>  Vj A= @5j A=M!! j A=C |j A5_E,, ,j A>UE##  ,j AGLE D,j Af@E j,j Aj.E (,j A\E +j AUD [d+j A:D C+j AUD "+j AZE- vj A HE @5j AAE {j A#D ̜j A0D  j AKD Dj A_E- mj AVE)## j ALE!%% Șj ABE vqj AD j AD Grj A&EH Vj AE< ?5j AE. {j A!D; j AD+!! j AD j AxD jj AD Ij AD (j A{D 1j ADX ?5nj ADE%% {nj AD< mj An@[ P~j A@T sh{j Api9P ʡi A?c> |Cj A-_> |Cj A=O j@j A= K;j A= K;j AU9  @ j A(9x L7l Ai91 " l A&.9 5^ l A\59 # l AhJ&& vj AdJ55 Vj AwJ ?5j A:Jd apl A^Ke pl A.|J~ l ACJ^ 8l AJ shl AJ \Rl AsJ 33öl A.s8u C$j A;W8b$$ 33C$j A j AT7++ Ȗj A?722 j A 777 +j A<700 j A17;; :j A7788 uj A8)) Hk A8yFF k A8hOO k At8W66 Qkk A8 nrk Av8 Mrk At8 qk A8]'' 7k A+8V<< rhk A)D8N>> Gk AAZ8F22 &k A7 k A#7## tk AL8++ Sk AV8:: 33k A\ 800 nk AX744 4k AVC pMj AKC OMj A!CC /Mj AF7C VMj AX,C Lj A_$C'' Lj AdC** Lj AgC(( CLj ADC ?5j A6C {j A)B j AB ҽj A0B -j A=B hj AFB pj ARB Oj AXE// ffƾj APE'' Eƾj AyJE%% $ƾj AD /ľj AD## jľj ADy++ ľj ADs,, zľj ADh'' Zľj A:Dg##  þj AhD{&& Eþj A_EI t8j At)E'' P7j AE"" l7j AE!! K7j AD|## ff6j AD})) E6j AD{)) $6j ADu)) 6j ADw$$ T5j AD%% 5j A/D&& ʡ5j ABD!! 5j AIyD%% A`5j A2sD(( }?5j ApDh++ 5j AVEE j AKEH&& j A>EN44 #۩j A1ER// ^j A(EQ j A EC xj AE, Xj AE, K7j A E j AE  j AD Ԩj AD 9j AD tj AD rj AD'' Qj AD:: '1j AD44 bj AD 粒j A|D lj ADx Kj ADx"" +j ADt = j AuDu y馹j AjDw&& Ȧj AD]"" ~j ADM 5^j AD= p=j AD( ^j ADL j AD j ArpD%% tj AvgD'' rj AD\)) Cj AD`** "j A E Xi~l ADz Xj AA7 ~j A.7 6^j A7 [d+i A7 C+i AL:  ;k A&:l H:k A9H :k A9I Ck A6w ףi A6g i A[@_"" nj AW@O vnj AQ@ Aj AnW@^  j A@b e;߀j AJ`8;$$ Si A\8 }?Ei A]\8 i Au: j&j AN: &j AAI} C j AeI " j A]I## G j ArI''  j A=I|## |j A I C|j AI j|j AI I|j A`H (|j A`H 1|j AdH l{j ACI  j AH ij AH** pj AH22 Oj A(H'' /j AH (\_j AH4 &ѧj AH(( AЧj AYH Χj A7h Di Ak7 i Ad7 پi AX7 Ri A57 i A%7l$$ i A!7`$$ ҽi A 7 d;/i A7'' /i A7(( .i A7j00 R.i A6_55 .i A6W v.i A6  i A6 i A7B C۷k As70 "۷k As7#  ۷k A7 Hڷk A7U (Lk A%7J 1Lk A7 -k Ag7 hk A6 V.k A^= 4Hl AJ= El A/I= ˡCl A<  g;l AKT;* Aj AaB;(  j A:BMM ij A:>%% pj A:g j A:T Rj A:"" j A: Nbj A:22 !j A: \j A;| ?5^l Ak; | l Aa;  l A|:**  @ l A:|-- |? l A:lDD )\? l A:]EE d;? l A:OJJ ? l A:=KK > l A; Al A;!!  l A@1; l A; !l A'%;  7!l A/: l Ani<# Ej A<' uk Az;\$$ ~k A2<8 k AdD -vj AVYD Ovj AEUD /vj ASFD Vvj Ao3D## vj A|&D(( ̬vj AD$$ vj AZD66 tj AFD vtj A8D Vtj A*D @5tj A>D {tj ACs66 ptj AC\88 /tj A D e;qj AC99 qj AC77 qj ACd {qj AC )\nj ADH'' nrlj ACC++ Mrlj AC4 -rlj AC0 J rlj AkC? wj AMWCR j AC1 7j AB3 shj A{= ;߿8j Aq=** w8j At=o// 8j Ab=o44 |8j A R=lJJ )\8j AJ=a`` d;8j A=!! sh16j A l=22 G16j AL=hh `06j AE=[[ 06j A ==PP ף06j A/=11 06j AK=c Nb06j Av= 333j Aa=FF n3j AY=UU 3j A S=`` Т3j AG=PP !3j AA=8BB X91j Ai< S1j Az= ĠEl Ap= ףEl At= El Ap=// NbEl Ag='' AEl A\=o  El Ap=d'' El A=Z22 ;ߟEl A{=8>> \@l Aw='NN n@l AX8EH Sj A4 > j A>i  .l A<? m+l A5> Ƌ+l A7>v!! 䥋+l A3>e +l AE(?&& p(l AF? )) O(l AL? /(l Ar6? V(l A[`E$$ Χj AOZE## j AVOE Pj Aw=E lj AW E y馋j A^E Ȧj AuE uj AL E rj A* E Qj AUD '1j AuD bj AlD Pj AWD^ = j ADz j ADp j ADu Grj A`D Jj AzrD)) #j AjlD!! Pj ADmDq j AOD+'' cxj A\D('' wj AC j A5xC پj AC/++ j AG>Z99 Sclj AJn $j A}Je j AJe Tj AJr j AJf ʡj AoJ +wj AJ, "j ASJ 9j AcJ!## Zj AWJ .. Zj AMJ // ~Zj AEJ11 5^Zj AXJ GѤl Am9 vi Ax94 :k A8> mk AAH!! l7j A7H)) K7j A0H(( +7j A%H!! > 7j AH y6j AH 6j AH!! 6j AH|%% +6j AGn'' gf6j AGc(( E6j AGa"" $6j AGu 6j A3Gz$$ T5j A4Gq## 5j A,Gd ˡ5j A9Gb!! 5j AKH$$ Xj AAH)) L7j A7H(( j A.H%% j A$H Ԩj A{ H} '1j AG)) cj AG00 j AG,, Χj AG(( j AGt$$ Pj AGc!! lj AGb Kj AGl Ȧj AGp j AGq +j A,zGq gfj A5oGm'' Ej AFdGo** $j AQZGm)) j A:HH pΨj A4H8 j A.H$ j A$H yXj AH '1j AH!!  j AH!! j A H,, 0j AG'' ޓj AG'' lj AG'' 9Ej AG&& j AG++ j AG'' BϦj AG&& j AG## j AG&& KYj AG** 1j AG))  j AG)) Tj AG%% j AG j AwG ]mj AqG##  Fj ApGg j AuEHZ # j A(HF## x j AHN X j AH# j AG) j AG" 9j AG"" uj AG // rj AG44 Qj AG-- '1j AG.. bj AG22 j AG++ j AG## j AG!! Pj AG lj AG$$ Kj AzG$$ +j AoG&& = j AgG(( yj A`G$$ j A]G$$ j AXG%% +j A|GV++ ~zj AGQ44 5^zj AwGB)) q=zj A{G;&& zj AGB,, yj AG=.. #yj AG5'' ^yj AG2)) yj AG/00 xyj AG,77 Xyj AG(99 L7yj AG#33 yj A{G&& xj AqG xj AaG. 9xj AWG,## uxj AGF j AEH| $ƍl A:m Ġj A(_:## -j A_:AA J j AD:33 tj A7: Sj A4:22 /i A : zi A9(( $i A933 i AF:g vk A9  k AE:** ;k AT:88 vk A59 Vk A9 `k A%= j A,=y j AD=u j A<11 ?Pj A <%% |?Pj A`X< d;?Pj Af<22 n"Kj AU<'' M"Kj A7+9 µ!j A4#9 ʡ!j At8 T%j A8)) %j A8b Ol A8 k A#`Ce Cj A6Cr [d@j AJBm C@j AB Jvl AB Ivl A6NC #Ivl A: K'6j Ai9 y&6j Aw9 &6j A9 3j A36P $i A'9< k Am=E$$ @5N j Aa=:!! {N j A_=. M j A$!= | j Ay<r  j A]=m \l A<b 33l A}< ffF l Ax%J -j AI `j AI} ףj AIg"" j AI j AjI 7j AI< ej AI6 dj AI1 /dj AI0 jdj AI& dj AI"" zdj AJ l AID Zl AI( ~Zl AI 5^Zl AI p=Zl AZ= "+j A5= jl)j AI=?? &j A%= &j A_<++ /&j Aq< V&j A+= N$j A=)) N$j A=// QN$j A< ;߿!j A<"" v!j A~< 5^J!l A = q=J!l A< Zdl A= Cl Al;' ^k Ad@.. e;j Az@ shaj An@ Gaj Ab@!-- &aj A[@GG %aj AS@"" ``j Ais@11 oӕj AR@U22 ҕj AK@H== !ҕj A6@00 Mҕj ABk 5^Wj AAq CkUj A7 zi AdAT Rj A]AI!! j A:** j A; vl AT;T )\l A;;B d;l A;  l A; ף l A;'' A l A;&&  l An;r  l A=;X ;l AV:"" X9Tk Ai:33 Tk Ai4;k.. Rj Ak}; >Pj AW; vMj A%?;(( Mj A!8;77 |Mj A(.;BB )\Mj A.;/ &!Kj A %;*44 $!Kj A;(( ` Kj A;%%  Kj A:  Kj A;I.. \Hj A;F55 nHj A ;666 MHj A;%.. -Hj A; I Hj A:8$$ tFj A:;(( SFj Ab;~ C3l AQ; (0l AQ; 20l AD;(( m0l AC; ƛ0l A:X 䥛0l A'; V .l A%;%%  .l A ;  .l A#.; j .l A7=;-- I .l A:L V~+l A:B'' @5~+l A;9%% {~+l A;0 }+l A5@; i}+l A:2;:: p}+l AB+;-- O}+l A[: |+l Ag; |+l A :L R(l A&;E (l AE#;@ v(l AC ;) V(l AR ; @5(l Ah; {(l A3C>| EPj A29>p ʡEPj A=&& O'Kj AN=== = 'Kj A1=sTT x&Kj A= xHj A(=ff Hj A*=rr ԘHj A0=cc 9Hj A =>!! " Fj A=) G Fj A=  Fj A=&&  Fj A=>> ~ Fj A=FF 5^ Fj A=## p= Fj A=FGG (|Cj A=:;; 2|Cj Ai> #Tl A=\## L7Tl A=)) 6^jRl A=%% q=jRl A=// jRl A=55 iRl A=00 #iRl A=o22 ^iRl A=FMM mOl A=2LL Ol A=.33 Ol A=88 Ol A=== COl A=!! "Ol A7=  Ol A(= HOl A+= Ol A9&&  j Ab9 v~j AM9 V~j AS9!! @5~j AI9 {~j A9" aj AP9% j AZ9## Nbj Arl9(( Aj A9 j At855 j A8  `j A8'' `j A~8 Mj Aq+9 ˡk Am9-- k AD9$$ gfk AW9'' Ek As9 $k A8 ˡk A8{ k A#j9 B`k A>9b k A-C9V k Ae9Z /k A? Wl A>= $Tl A>% Tl A> Tl A}{@C {ހj An@F ݀j A? l A ?"" vl A? l AZD $j A5D}66 j A0DpEE Tj A6Dl88 j A=Ce ˡj ADX j AjCg _j AmwCW 4j AC j ApOE -j AfGE hj AXBE pj AS:E Oj Ai-E /j A^E d;j AOE** j A D pj ALD%% ;oj AUD$$ voj AUD oj A^D!! |oj AjD d;oj AeD oj AiDO j AD  j AD j A7D Nbj AD Aj AE0 tSj AD7 33Sj ADD"" nSj A D3 Rj AD Rj A=D6 \Rj ADY## Zħj ADR$$ X9ħj ADF!! ħj AD7 çj AD# B`5j AVE$ 梨j AGE( Χj A"D8 j A\Cm wj AC$$ Zj A C X9j ACR## j ABV++ Tㅝj ABU$$ …j A"':u77 .j A":kaa ;.j A&:faa w.j AF9a++ |.j A:: -+j A7:PP I +j A .:aa +j A $:nn +j A:gg +j A! :GG 7+j A: rh+j A 6:JJ c)j A.: FF  c)j A*:II Ec)j A$:.. c)j A:66 tc)j A :EE Sc)j A,9++ 33c)j A:5 &j A: z&j AL:d  l A<:S$$ ~ l A3:(( ; l A:| Zd; l A :g C; l A:V%% "; l A9A,,  ; l A$:2 pl A!:! Ol A]:" /l Ac:55 Vl AT:DD l A9:11 ̬l A: jl A7:>> Il A7:QQ (l A):OO 1l A:;; ll A :q,, ƫl A9R 㥫l A9K l A0:C55 Zdl AM:'\\ -l AG:XX hl A<:OO pl A.:LL Ol A:-- /l A:'' Vl A:)) l A: l A*9 Cl A:*## Vl A :.. ?5l A9 l A< #۩3j AK< ^3j A<22 gf6k A< 00 E6k A<55 $6k A<)) 6k A < T5k A;:S!! fi A/:K)) +fi A+:@ fffi A|e: Mi AvD: nk AR: k AW: Вk AG:  k AD:77 \k AB:?? nk A?:99 Mk A;:00 -k A9:{ I k A8:l k A#:\ ʑk A9! Gk A:,, &k AP: Ek AL: k AQ%: k AiHi ʐj AZHf ʐj APH[ ~ʐj ARH  l AKBf m绐j AYBS j AB7 ףj ANBL I al AA Gal A7"" (!j APt: &i AO,: 7i AO$: 7i A9 Qi AJc: M"k AAG: -"k A+: I "k A9 !k AA9q 7!k Ah:Z G!k AZ<!! =j Ao<'' =j A:Z// Zd8j A:TAA C8j A:IBB "8j A+:++ O-6j A*:00 /-6j A,:FF V-6j A.:]] ,6j A-|:qq ,6j A)n:`` C,6j A.c:FF j,6j A)4:Q00 +6j A2:>MM +6j AM:1;; 3j A:,, R3j A:!! 3j AVU: v3j AY:** 3j AG:22 ҝ3j AM: -3j Axe:Q h3j A:%% Nb1j A g:** A1j A\=:& 1j A*D:;; ;1j A/<:KK w1j A,4:AA 1j A#/:88 |1j A2:** )\1j A: 1j A:` ?51j A9z'' {1j A9x!!  1j AE:" rh.j AD: G.j A(: &.j A":#++ %.j A& :.. `.j AK9 A.j A9  .j A922 d;.j A: l A:m;; Il A}:W)) (l AR:=## 1l A:" Vk A: ?5k A: k A: -k A!:11 hk A2:MM Ok A1}:AA /k AJ:'' Vk A:b k A9M k A&!:N k A,:=## Ck AN:55 vnk A=m: Vnk A/C:"" ?5nk A5;:11 znk A<6:,, mk A4: mk A9 )\k A9 e;k AC R8j AC |?6j AGo sj A~Go  sj AAHM töl A;T …@l Ac: 8l A; 98l A?]'' Nb,j A?V## A,j A?M##  ,j A?D.. ,j A@ =l A@ =l A'J355 (j A$J77 (j AI: j AI Al A84J )\l A+Jc d;l AI 1l AbIo l AvIg ]ml AI Vl AI @5l AxI {l AmGC'' j AoG:++ j An G2** 0ݤj A+AI|88 xVj AM3I** Vj Ap$I&& Vj A,>I00 9j A:3I## tj AO'I rj AUI Qj A\I &1j Ab I!! bj A;I j AI j AQH j AMH%% Oj A>H%% lj APH Kj ABI,, :j A 4I// ~:j A +I44 6^:j A I** q=:j ABI%% :j ASI %% 9j A]H)) #9j AdH _9j A7H 9j AH!! x9j AAH"" X9j AoH** L79j AhH&& 8j A@H$$ :8j AQH'' u8j AAI*!! Ij A^Dj)) !¾j AHD;; M¾j A$:D2## -¾j A2DZ  3j AhCb 2j ACT jj ACJ j AC j AR877 3j AM8 T3j A8$$ 1j A833 91j A8>> t1j A8> ~z.j A8[ rl A8 l AzE \gj AB Zj ABa  j AyB| /T~j AI^Dz"" j A9VDf ~j A]Dg## (j ANDq'' 1j AADu-- lj A 9Dr,, j A/Dn(( j A(Dc j AbD)) znj AwaDv mj ADc Vmj A Dj lj A{0D$$ ߬j AD(( ެj AD!! ެj AD Rެj A D ެj ACm Nj AzC?** Zj A~C8** X9j A}C0"" j A~C& j AR8l {i A18X  i Ar8  i A 9y %l A8 33 l A5 zi A5 yi AJ? ij A}? ij Ar? ij A]? 9ij Aa?$$ uij A"?OZZ Idj A,?IEE (dj AD?M00 1dj A8\ q=j A9 "{l A933 Hzl A933 zl A9++ zl A9 5^zl AP9 q=zl Az9 Hl A8E 5^l A99- C\l A8 [l A>8f  [l AH8V HZl Au8 < l A;0 :(l A9:A Pg&l Am:G '1#l A:+ J!l AEGw l[j A4G [j A+G [j A$G{"" [j AGs&& Zd[j AGn)) C[j AGg)) "[j AG[((  [j A6G p;j A*G,, O;j A#G /;j A Gi## ̾j AGk## ̾j A1G  |?j A(G )) )\?j AG)) d;?j AG)) ?j A G'' >j AG$$ >j A-F R>j AF >j AF v>j AF&& V>j AF)) ?5>j AF)) {>j AF++ =j AF$$ =j AFp -=j AGL %j AG$ `尹j AF j AF""" Nbj AF1 Aj A F.  j AF j A F |j AF )\j AF00 j AsF ٮj AFP'' M"j AzF7 -"j AFF !j AFF !j AFA 7!j AF& rh!j AF G!j AF &!j AF  j AtF Mb j AFN?? 33j AvrF I j AfF 둴j A}eF>88 Ej A[F7@@ j AD2>q Nbj AF j AFm j AFo//  j A Fj'' Fj A%Fr// j A^F'' tj A?F Tuj AF-- uj AF>> ˡuj AF-- uj AF A`uj AF'' }?uj AbF## uj AbmF%% jtj ATF = j AqjF  +j AF< L7Yj AF ?? Yj AF&11 Xj A+FJ"" Xj A0FE$$ 9Xj AF## uXj AF$$ rXj AuF QXj AG^F. '1Xj AF)$$ ~ʾj AfF## ^ɾj A[FW ;j A%\D j A=SD j ABID&& Zdj A\VDR pmj A*PD& Omj ASDd'' j AJD\-- j A@DW** j A!5DQ## Rj AD9 ;Oj AC9 wOj ACN Oj AC |Oj AN>2 lRl AG 33sj AG rj AWYGo Fj AG= +Wj AH > Wj AXG Nbl AnG Al A-:GG p-6j A2:6aa ;ߟ3j A5:/WW w3j A:~ jl A2;' zk A0:DD pk AH:(?? Qnk AK:MM nk AY>n j AA>!! )\j A>>"" e;j Ay8R \bi Ax8 Fi A`8 TEi A]8 Ei A`8 ˡEi ACo L79yj AC pqj AgJ| V>j A_Jr @5>j AVJi {>j AqJz11 <߯j AWJ!! wj AJJ j AEJ"" |j AiJ j A!WJ |j AZJ; j AHJL Nbj ADJ5 Aj AbD ףpUj AiD pUj AFI ij A~F= ij AE SZj AP;5 lg&l AQ:" Kg&l Am:0 b#l AH Oj AH /j AIH l A+H Tl A)H zTl Ak"C zj A7C gfj A"CX'' j A CX$$ j A< R&j A<<"" İl A<, ףl A h<9 G!l Ak;(( <ߟj Au; J j A42;! A l A#;   l A:  l AG: @ l AZ: ף@ l Ad: @ l Af:(( Nb@ l Av:66 A@ l A?  p)j A?"" p)j A5E| ]j An4H Ll AglC +j At_C## > j Ai1F $j AZE> j AbE8 B`j AEQ)) KWj AE@,, +Wj A|F = Wj AgEO EVj A^E/!! SUj A\}E$(( Uj ApqE( ʡUj AdEi&& jTj AE@$$ ǧj AE.88 Pǧj AE%%% lǧj AyE) Kǧj AhET11 8j A8"" < j A<\ l A5J{ *j A> j AJLL Nbj AIMM Aj AI>>  j A(I:: j AI.. J ˡl A$J l AiI& +l A/I' ffl ADI El A^I $l A{I l AoI Tl A,nE -j AjE J j A;5 Tej A4;9 @l AHE |ϧj AbHP  @j Atj<=?? 8j AR3;$$ Kj ACI Vl Ak7I$$ hl A\I!! pl Al Iu66 Ol AIj77 /l AbH v.l AoH%% V.l At9## Ej Av9m $j Af8q!! Ej AO8_ $j AE8F Tj AY8(( Pwj A 8&& j AW81 "[j A-8  [j A\9 > l AA9 yl A8z ffl A$^9 'l A39 'l A':9 'l ALe9 P'l AHG9 l'l A~S=` cj A2<- j A@= ~j A*= 6^j Aw=U :j A<R uj A<E '1j A<? cj A<t)) _j A<u** j A<l$$ xj A<^ Xj A~= Dj At= jj A< j A< j A<)) j A<$$ Zdj A< Cj A< "j A< :k A< uk A< xYk A<k 9Xk A!<] tXk AM<'11 bXk A8 lk A^8 Ƌk AH8 Ck At|Dz)) þj AwsDs%% tþj AzjDl$$ Sþj AF9S @j A*: D;j A: /D;j A 9 zD;j AE9 ZD;j A!9: 臨8j AN9F +8j A:-- $8j A:C:: #l A:1'' #l A:% #l A:  7#l A: %#l A: `#l A:) -B!l Ah7 vj A<k r+l AH<c Q+l AC<T '1+l A|< L7(l A;C (l AEy< i&l A,B< #i&l A9?< ^i&l A,< i&l A";e xi&l A0;W Xi&l AQ<Q L7i&l AN<9(( i&l AA&< H#l A0; 5^#l AX7Y i AR7M Pi AP7E li A>77 Ki A>7. +i A8 "6j A}JDb oslj ADk  ij AD {j AD) V=yj AD0  l A:"FF R> l A:BB > l A:BB v> l A-:!! = l A6: = l AA: -= l Am?a77 ƻdj A? w]j A> ]j A> |]j As>m +Tl A8 jj A!8 Ij Au8| j A<87 j A[18 /]j A 8$$ I\j A 8 (\j Ah8+ )\j A 8 Vj A$MC G1j A19Cs %1j AS(C| `0j A_Cy 0j A `C 33j A WC oj AKBl Gj AeBq &j AmBm %j AuBg"" `堋j A=C j A 1C zj A&C## Zj A+C X9j AqB j A4B j AI=r 3j A!=F 3j A= 1j A r=y>> 1j Ad=tVV /1j A_=fYY j1j A[=Yjj 1j AR=Mee z1j AI=BYY Z1j AQ=0>> ^i)j AF=' i)j A=J22 !@l AV=!! X9=l At= JJ e;l Au=II d;l A q=FF /d;l A _=66 jd;l A"@= ˡ8l A2f?** /j ARL?88 Vj Ai7?55 j Aw&?(( ̌j A&? j A?x pj A?g Oj A?7 -(l A/?* i(l Ay3? GQ!l A: qCj A9 qCj A#9J X9@j A*9< @j AKIs A`j AWD  3j A&D F3j A)D++ 3j A:D%% t3j AHD S3j A|DH'' ¥j ADC55 ˡj AFD,, B`j AD88 }?j AD:: j AD)) j A6D /ݤj AD~ Zj AyD X9j AMDP yj AZDL j A}xDT(( j AsiD<## ffj AxD Ej ACw tj AC~ Sj AC 43j A" D6 Ej A D $j AC"" ˡj AC j AC B`j AC$$ }?j AyCm j AC lj AC > j AC y醝j AC Ej AC $j AC4 j Ae7n @5j AJ ;?j AJ `j AJ$$ M"j AJ -"j AJ I "j AvJ  j A}JU j ApJT A`j AyJ d;l A{HJ%  `l ABHH pj AG?H ;oj A j AG_ yj AziG)'' Фj A5 Eii A5 Ai A5 i Aj5 '1(i AU5! i AM5 xi A9D µ8j AC; rhQ$j A;n w-!k A;e %!k A;Z  k A;G  k A; wk A; Pwk A;{ vk A(:g  ]j AF:33 uZj A!:99 tZj A%:x^^ /tZj AX:OO jtZj A\:<< = Wj AN:@@ yWj AH:BB Wj A':WW Wj A!:ww +Wj A<:2 9XUj A:LL tXUj A: ff rXUj A:ii QXUj A:FF (l A:ff (l A#:dd (l A:K^^ /]&l A:<\\ V]&l A:/WW \&l A:\\ \&l A&: KK \&l A4:22 D\&l A?: j\&l AT: (\&l Ae:5'' p#l Aj:$$$ O#l A9: |j A9) D|j A_s: vk AF<:m +vk AeD "j A_D'' j AWD(( j AMD&& kj AI"" ־j AI +־j AI ff־j AI!! E־j AI $־j AeIq = Gj AXIo yFj AQIg Fj AII[!! Fj A< G3j A> Ԩj AX>% D#l A; ?Pj A3:,, j A39 ٞj AA9 Rj A:` /tk A":X jtk A:G tk A:7 ztk A9@ k AA:Y ʡUk AV:P Uk A0:^?? Rj A>:^CC Rj A:]] l;Pj AYv:"" ;Pj A:(( ҭMj A:11 -Mj A:! )\Kj Av: d;Kj A:++ #l A:;; @5#l A:ree {#l A:dYY #l A(:>> ?!l At:BB Nbl A`:AA Al A+g:""  l A7g: l A3K: ;߯l A@O: wl A_n: l A'Aq55 Zd+j An8Aq Vj A(Az 휋j Al@w==  j AOA +Jl AA'' > Jl A3A$$ yJl A8e!! !j A8S 7!j Ad8)) o#j Ag8 "j A;8E -"j Ag 8 Zj A<'8 Y9j A8^ Sj A8Y$$ 43j A:qUU ]j A:trr ]j A:lrr !]j A:[UU \]j A:WW tZj A~:qq ztZj Av:pp ZtZj Al:RR X9tZj Ac:)) tZj A}:]] EWj Ap:|| $Wj Ag:}} Wj Aa:bb TWj AZ:88 Wj AR:-- ˡWj AF:++ Wj A5: A`Wj At:$AA bXUj Ah:IOO WUj A]:Cdd WUj AU:6pp WUj AP:)TT PWUj AvT:(( lWUj AS9I VUj A: VUj A: D#l A:VV j#l A:uu I#l A:RR (#l A: ?? i=!l A:FF p=!l Al:Irr l Ag:6__ vl AT:!;; Vl A,:"" @5l As:  {l A:S )\l A:E d;l A 988 @5l A#9-- {l A99x -l A9*%% l A9 |l A900 )\l A-9 HH d;l A79KK l A?911 l AL9 َl AE9IRR Al AP97FF  l Ad9+55 l A J@ "kl A1J/  kl AU@J4 Hjl A]4J jl ARIP ۻl A:D:: ףj A:.. Sj A:XX 43j A:pp oj A:jj j A:__ Ђj A::: !j A:  j A~:)) Fj A:)) j A: fj A:# +j At: Ztk A:k sk A:\  sk A:I Esk A'; k A; ˡk A: k A:$$ k A:)) k A:&& 0k A:77 kk A:uPP k A:fLL zk A:U"" Zk A: Uk A@: Tk A3:l /Tk AH:. ZTk AZ;$$ QWj ALF; '1Wj AU; "[;l AR;; 8B3l A:A// 0l A:-55 Zd0l A:-- C0l A: "0l A=E 26j A=F 26j A:=w66 3j A[q9C''  b)j Adf9>LL \b)j AWD9^;;  &j A9 +F$j A{59C88 E!j A'9? $!j A 99 !j A.8-- 'j AT8$$ 'j Ad8++ l'j A8 j A8  2|j A8 {j AU9` `Pk A69L// Pk A+M9 Fk AU69(( ok Ae>999 k AV-9  Zk AR8& jk AH /l AH ˡUl A,? Jgj A&? Igj A? #Igj A? ^Igj A?| Igj A?e xIgj A8 G1i Az8 &1i AI8  -i A37## Gi A'7)) &i AL98$$ k AT58:: -k A\18>> hk A 9 /nC3l AM9 FC3l A9 C3l A7 ʡl AC j AKCO 8j AKuC; j AHnC1%% j AL`DG Vl AhD7 l AUEEj ƾj A4UE%% b8j A_FE(( 7j Ac=E 7j An3E 7j AME"" +7j AhD| Pj A2D K7j AnD j AZD xi~l A~822 '1+j Ap8:: b+j Ad8$$ +j AP8 +j Ag48 +j A855 Y)j A8++ "Y)j Ao8** ^Y)j A`8AA Y)j AT8CC xY)j A@8"" G&j A98 &j A58 &j Ab8J <$j A^8p8 w(l ADf8 (l A.*8 |(l AaD@ ZdHj AB<t uh;l Az<r rh;l AL +j ApK Ej A=rKU ~j A\cK^ 5^j A L  l AK xil A6L il A9<:Q99 Ը8j A>1:III 98j A`!:R88 u8j AE':FF 5^*6j A,':UU p=*6j A( :zRR *6j A?:zHH )6j A`922 #)6j A&;:$$ C3j A4/:-- j3j AX:++ I3j A\:-- (3j AP :11 13j A:;; - 1j A:// h 1j A: L7Yl A%4:JXX Wl A): ^ l A9++ x l A :11 X l A1:PP L7 l A!/:hh  l A+,:``  l A4%:JJ  l A:;33 G: l A':6MM : l A ,:'ff : l A):`` ~: l A!:GG 5^: l A':66 p=: l A.:22 : l A6:&& 9 l AH: #9 l A<:7CC Cl AI:*:: "l AR:00  l A[: Gl A\q? I R$j Ag=]++ 3j A<)44 +6k AQ:l)) Hi AH:a)) i A4: Ki A8: i A:u %i A:m ]i Av:e  i A: #9i A:!! _9i A|:n x9i Au:` X9i A}kH pMl A>s X9dlj A>| dlj A>?& uHgj A3?" rHgj A?X(( #۹dj A?V ^dj A?O dj A><11 xdj A>0,, Xdj A> dj A> Ըdj AB[ j AAo j AAx uj AA{ woj AA oj AgBs Mal AUB^ -al A~A] 2_l AAV 2_l A@Bf !2_l AA%% \l AIA zWl A_< 716j AQ@ lEl AK@ KEl A{@ +El A;:DD Kj A1:}mm Kj A(:vjj Kj A:oXX QKj A:w44 Kj A:_ VKj A9d ?5Kj A"9d22 zKj A09d,, Kj A89_.. Kj AC9]88 -Kj AN9YGG hKj AY: 7Hj AI: rhHj AF:++ GHj A=:<< &Hj A6:LL $Hj A+:aa `Hj A":mm ĐHj A:kk ףHj A :]] Hj A :PP MbHj A9:: AHj A9))  Hj A9++ Hj A!900 ;ߏHj A'9DD vHj A,9:: Hj AP9&& |Hj A`9** (\Hj A~:9 EFj Ay:, Fj A, :;?? \Fj A*:1LL nFj A!9$SS MFj A9PP -Fj A49AA I Fj A8966 Fj A,9:: Fj A.9GG Fj A49?? 7Fj AD988 rhFj AM9)) GFj A%9F@@ tsCj A$9=88 SsCj A:9?** 43sCj A1:}** osl A:  jl A:,, l A*:GG zl A!:22 l A9d tl A:,pp A`Ul A:`` }?Ul A : 99 Ul A9 Tl A9;; Tl A&9CC zTl A)9FF ZTl A39@@ X9Tl AG955 Tl AJ9q Sl A9< $ l A99''  l A(93DD T l A.9==  l A29>> ˡ l A=9GG  l AD988 A` l At? Pg;l AI jLl AI JY l A|IV  Fl AEXI ol A|9 ~Zj AA9 SC6l A!C9)) 33C6l A)<9{## nC6l AF zj AAF** Zj A]F'' X9j A5F uj A*F## ʡuj A F11 tj A FSS yj AFll j A#vF:: j ATbF ,j AhF55 gfj AFF Xj AF. 9Xj AF+## tXj AF++ rXj A}F  QXj A4[F# bXj A\F<< Wj A G p=:l A!CE mdj AR%E dj AE; -=bj AE. h=bj AnD {]j AD[ nCl ADD  ׳l AnD El ADw l AtE( A`%l Av E |?%l Ai<OSS 8j A2< -3j A.<<< J 3j A*> )\ j A> e; j A!>  j A.= R j A0=  j A =  j A= V+l A=)) +l Ar= (l AWL'' p= j AGL  j A;L  j A;L` l{j AL l A\L ZdKl ADL CKl AFL Il A?L (l Aga<&& kj AlX<{.. Zdkj A"`<K  kj A1<_ mj A9<N j A< RN j A@N< vN j A5J< VN j A;z R.j A;m .j A;l## &1xk A;^ bxk A; #ۉj A|;6//  j Ak;011 Hj Am;$33 j Av;M Ilj A|;<## (lj Av;4## 1lj AS;M@@ /j A|M;B?? Vj AA;;.. j A:;3)) j Ax6;' j AX;k p=k Am;` O=k A_;R /=k A; C |j AT> )\j Aj> j Ai>$$ a j A`>77  j A^>;; ף j A]>--  j A^>!! Nb j A}F)) ";j AF""  ;j AE :j ArEa 9j AEl #9j AE| ^9j AE 9j AEp x9j AvE Cj AE "j AE  j AE G᪹j AyE j AiE j AcE ~j ArE pj AE'' Oj AE.. /j AsE Vj AlE jj AcE$$ Ij AeE (j A;?8B?? Qi A3;88// )i AV8l$$ 1i AV7e 81i AF799 ti A?733 Si AC7-- 43i AM7 oi A7 i A7 i Al7- i A_7 z4k A 9!! th)j AI9$$ rh)j A9 X&j A9 K7&j A,F ";j AEm jj AE vl AE Vl A8fDo** ¾j AXD E3j AlD"" 3j A8xBB  {.j A8y!! Gz.j A8\33 z.j A8QCC z.j A8 +j A7 z&j A799 &j A7 &j A7 ?$j A7,, >$j A7&& >$j A8,, ?5Nk A0Y8 -Mk AT8 hMk A%]84 e;k A=r8, k AaDn** 罹j AXDg44 +j AADx,, Ej A2D,, $j A)D j A|]D Qj ABD '1j A$6D&& bj A/D## j A+D$$ j A#D j AD Pj AD lj A]D 5^j A_D p=j A8C bj A!C j ACn ·j A8sC| +j A%D< Zdj AD) Cj AD1 "j A D=((  j A"CC## Gj A8CF j AICI"" j AOCC&& ~j A9C, 5^j AC p=j AC j AC j AC "j AC ^j AC j AC Xj AC K7j Au5DH Omj A'DV /mj AC 1lj AC" lkj AC? kj A*CC kj A.C= kj AC' Zdkj AC Ckj AC "kj AC  kj AyCM {ެj AC[## ݬj AC[## ݬj ACY .ݬj AC_ iݬj AC  Wݬj A|C ܬj AC  ܬj AC\ Nj ACS QNj AyCD Nj A~C> vNj AC; VNj AtC< ?5Nj AnC# zNj A]9> xi AG9K 1l A8M ,l A%9A D,l AV:9; j,l A+9 l AM: w_j A#:l _j A8:9 Xl AP!:  l A79m Zd l ATG ףj ALG'' j AFG Rl AHC.. j AH@-- j A~HK$$ Rj A pHX j ATG -j ATGc$$ ʱj AHGa)) j A X)Kj A> "Hj A{AE Ol AX!>E qj AA%>7 qj A$B sj AB&& Lj ABp!! F%j A8  C l Ap8 l A*: A0i Ad:d ai AdDN PW~j ATDI lW~j AE;9, d;=l AS?9 =l A[39 =l A^HI j AvPH)  sl Ak}=  8j Acy= (( H8j A_s=;; 8j AZm=== 8j A3K j AK Sj AFJ J j AvWJ %j AJ zj AJ Zj AJ j A~J j AJ /j A|J jj AtE {j A~E {j AsEy -{j AhC j A&\C |j A3QC )\j ALDC! e;j AGS< ** +j AXE< ~+j Aj;44 x+j Af;** X+j Az; OM$j A; /M$j A; VM$j A;&& L$j AxQ<J O]l A-<Y!!  l A&<G  l Au6< ;? l A;  l A; Mb l AG< Gl AW<$$ &l Ah; Đl Aeb8! k AfP8 ףk A? lg;l A:OC"" ҽj A&KC,, -j AEFp &1Xj AFm Wj AFn OWj AFY lWj ASEU *Vj AE ȧj A+E :ȧj A>E uȧj A:E rȧj A=E$$ Qȧj ACE '1ȧj AYE} ǧj AoE` 9j AaE~ ~j A;l6=++ Ssj A662 i A'6s Ui A!6j ˡUi A5p11 +i A5s ffi AtE,, Y9j AbE%% j ApE j AXbEz  Sj A ,j A:M lK6l A? A@k A ? rh&j AN? G&j A%? &&j AR? &j AG  v޻l Am;H@ Ol A>;( O3l A: W}N3l A: VN3l Aj4; 0l Ac; /ݤ0l AA: k0l A/9C l&j A9E88 K&j A 9;CC +&j A90BB = &j A9N9l _k A,(9U(( k A">E u@l A =- =l AH77 ˡj AgH## j A*HV j AHHZ## /ݔj AyH +j AIH++ gfj AAH'' Ej A\H $j AH j A1H)) oSl A:Hq&& Rl ACHa"" Rl A/}Hq öl Ag=E ~j A =3 2j A=, mj A=# Ƌj A8U &j A 8L %j AN: II  1j AH:&&  1j A5:'' C 1j A%: j 1j A}: C!l A:44 tC!l A:88 SC!l A:** 33C!l A:!! oC!l A:(( B!l A:x33 B!l A:I nB!l Av:!55 kl Aw:KK l Aq:?? Zl Al:(( X9l Ae:!! l AU: l A p:j 33l Au:[** ol A%p:J l A7.. ;߯!j A7 ʑj A 7AA j A6 j A6MM j A6__ !j A6-- ]j A{6 nj A6// Mj Aj;+ 8j A; Aj A;  j A}< .l AX< +l Ay)<f E+l A;( u(l AM;(// h&l AO;// h&l AS;** :h&l Al;## uh&l A844 v>$j AdK** nj AK ߻l AwK |߻l AaK )\߻l A}{=== Rj A~q=VV |Rj Ag=DD )\Rj A|\=CC d;Rj AtW=77 Rj A< I "Kj AhB)) J rj A=7 L7=l A5= (L6l A= 1L6l AU< q=0l Av< 0l A,6 +i A!6 = i A 6 yi A6 i A25 tHi A6 Gi A6 Gi A6 xi A 6 Xi A6 K7i A^+; ~J j A?0;,, 5^J j AB&; q=J j A;Q L7I j A ;I I j A:B H j A ;- H j A A< lRj AA5 Rj Ag?99 '1ij A_?55 bij A+? Igj A`> Ggj AT>G gfTl An>< ETl A61 ˡi A}6" i A8M> '' AUl AHR>  Ul Aq|> Ul A*=/ &qRl A'="" %qRl A1= .. apRl AD= pRl AN= ףpRl Ah= pRl Az= NbpRl A=1>> Ol A,7W A j A~? ZWj A> rMj A> QMj A>  Tl A:=nkk &Kj A>{=e}} &Kj A>s=]xx +&Kj A:j=Pxx ff&Kj AB=RR tHj ALw=aa rHj AIn=gg QHj A?g=XX &1Hj A<_=CC bHj ADS=.. Hj A> {Cj As=, {Cj AAU=A)) {Cj AHI=9II [d{Cj ACA=-[[ C{Cj A:;=!MM "{Cj AC=!!  {Cj A<= HzCj AS="" zCj A(=H55 D@j A= ~jRl A+E j AE j A1DY %j AD; aj AqDG !§j Aq? Gqj AZ?( #l AyG?+ shQ!l A&=+ O@S3l A3=` 0l A< .l AYD{ Ԉj A?D :j A9D uj A.D '1j AHD cj A#D j ACl Xj A[D933 Dlj ASD111 jlj A>C** jj AC 5^jj A;C ij AC$$ #ij AC11 ^ij ACs!! ij AC)$$ Vݕj AC' ܕj AC ܕj AC$ jܕj AC;; Iܕj AC&& (ܕj ALd>** zij A|OJ## `j ADJ j AlV9 l'j Av5* ~ i A5% 6^ i AI= 1+j AH= Om)j Ai= /m)j A=j l)j AI= &j Ao= &j A= x(l A;9h D;j A9V!! T8j A1911 '13j A 9++ b3j A8 X 1j A811 L7 1j A99 {.j A4s<(( 5^1j A+o<33 p=1j Af<;; 1j Ab<'' #1j A[< ^1j AQ< 1j A.<m r1j A!<h Q1j A<g '11j A<g b1j A<S11 1j A<FGG 1j A< #ۉ.j A; 5k A4<.. B`5k Aa< }?5k A5<$$ k AW:w F j A: b j A:  j A:~ η j Av:K K j Ad|:  )j A6: #)j ACy: ^)j Au5:$$ )j A@C:** (j A.B:.. (j AE:++ 9(j AO:)) u(j AE:x** r(j A$:~** Q(j A(:x)) '1(j A:i&& b(j A:U%% 'j A:H 'j AH: j A_: ~j AP:%% 5^j A;:'' q=j An9!! j A= :&& j A:  j A9$ |j Arg: l A9` tl AbD8 shQj AUDI GQj AB Nbplj AB** Aplj AB ij AB## ij AB&& 7ij AB shij AF? -j A=? ij A5? j A? j A> Rj A> vj Ay?d T l Ap?U  l A>) ˡ l A >[ +l A>K = l AH>g 'l AC=  oj Aw='' ~J!l A/GY m˧j AGd ˧j AEG {>j AFc##  Ck&l AY> j#l A#: k A): !k A:7 A`+j AZ:C +j Ajo:U@@ f)j An^:GXX +f)j A:L f)j A*9b$$ Te)j A|T:,, Q&j A9m"" &1H$j A : "!j Ap: G!j A{9!! !j A9 !j A9 !j A9 "۹!j A9-- +j A9KK +j Alq:c 3k AfA::** S3k AO:T k A4:>  ףk Aw9 }?k A}9!! k A:: k AE: vk A9 Ztk AE:^^ ffWj A':dd '1XUj AEV:'' KWUj ADL: +WUj AN: = WUj AA: I\&l AR: 1\&l A]: m[&l A(:T** #l A?V33 ' j A+@4$$  lj Al)@ Dlj A Ad B`Օj A+A#11 "+j At&A66  +j AzA :: H*j As; @l Af; /݄@l AU; j@l A; A`=l A ; }?=l A9; =l Ae];v =l A_B;a** z=l AZ%;J## Z=l A98 lj A7|8v Kj A;p8m)) +j A?f8f > j AV8 yj AW8r Qxj A,>8x '1xj A8 Apk A7 %%  pk A: Rj A: ~Rj Am:<< #Rj A]:]] ^Rj AT:ss Rj AL:vv xRj AF:{bb XRj A;:r44 K7Rj A-:x Rj A,:] Rj AU: Rj AX:II ;Pj AM:gg ;Pj AF:ww Zd;Pj A<:qq C;Pj A7:XX ";Pj A8:66  ;Pj A/: G:Pj A: :Pj A: :Pj AU9.. ~:Pj Aa9@@ 5^:Pj Ad9%% p=:Pj AY:0 hMj AI:6PP pMj AA:0jj OMj A8:(ss /Mj A/:hh VMj A*:JJ Mj A: ̬Mj Ab9G CMj AR96// jMj A59++ IMj A9 88 (Mj A/9 EE 1Mj AO9@@ lMj A: |l A:** )\l Am: l Ag:c## ٮl Ak:VVV Rl Aq:  l A: Nb l A:  l Af:BB ;l A[:dd wl AS:QQ l AG:u// |l AB: 11 &l AK:dd %l AL:tt `l AO:XX Đl AY:'' ףl A59i// l A?9WII Nbl A9-- Mrl A9;; -rl A9@@ J rl A!9AA ql A)933 ql A7922 ql AE9<< 7ql AT944 shql A9N Sl A9C66 33l A&9:@@ nl A09(FF l A;9HH l AG9 << !l A[999 \l Aa9 Ml AU9L ESl Aa9=88 Sl Af5;* tj Ay;a j Av;T B`j Ac4;q }?j Aj;++ gfj A>:6 }?j Ad:' /j A8;"" chj A3;++ gj AH: gj AQ:%% gj AG:)) Pgj A8:## lgj A<:<< Kgj AA:PP +gj AK:NN > gj AR:}66 yfj AL:s22 fj A@:f,, fj A :N +fj A:; gffj A:6 Efj A:' $fj A:; xj A*: L7j AV: j Ae: j A:"" rj A: Qj A:<-- lj A:1)) Kj A: J j A: ^I j A:22 I j A:AA xI j A: XI j A; k A; k A;+ Tk A:00 :8k A:44 u8k A';$$ r8k A8 ; Q8k A::s '18k A?:a c8k A: k A,: xk AX:b :k A=P RN;j A=S(( VN;j A;=* M26j A'= -26j A=#)) t3j A= )) S3j A= 0Hl A=## * Cl A= Zal A<F yZl AcK5 = j A]K jl AfK ~jl A%}9q +G j A9[ > G j A8w77 #ۙj A8jMM ^j A}8]TT j Aw8RQQ xj A{8KLL Xj A8H:: L7j A8G99 j A8<99 j A8/66 Ԙj A822 C j A8$$   j Ao8 H j Al8s##  j Au8m55 ~ j A 9u tXk A8~ xk A8n Xk A8c K7k A8 :k AH9 :k A8 p=:k A8 :k A9 ƫk A8 k Ah8A44 shqj A7 j j Ay7 I j A_7 ( j A6! j A[CK Ssj ArCK33 43sj ACC+99 osj AC** bl A C00 l A69  =j A-9q =j AAF9 GA;j AcP9 t8j AdF922 S8j A|9? %6j AjD22 /ݕj AC"" ܕj AVD: RNj AC A0j AC  0j A;G ˡ@l A;K @l A; = =l A; y=l AG#:++ vHj A6: VHj A!8:. I j A#.:& #I j A5:77 i j AM:!! p j A 0:o "k A)L:i  k A*:U Gk A%&:G## k A.9  ?5k Ai?N 㥻dj AtQ?+ Cdj A\2? dj AZ?## dj A h?@(( V-bj A]?;AA ,bj A#P?8AA ,bj AF; O_j A{># _j A> 00 I_j AJ>E {]j AS?  33Sdl AN?%% nSdl A @? Rdl A&^?R!! al A:l?I%% al AT?=11  al A`~?, Eal AOI?  al Az}?  tal Ar-?0 Z4_l Av;C shQMl A<'' +j AO< 55 +j Am< EE +j As= bH!l A6:_ 33Fj A3:m ktCj A":s tCj A' :.. ztCj A-:JJ ZtCj A/9|\\ Y9tCj A9kcc tCj A9d]] sCj A-9cXX  sCj A-9YXX FsCj A+9QII sCj A+:55 @j A&:FF @j A":HH +@j A":<< gf@j A.9FF E@j A39TT $@j A.9UU @j A9VV T@j A 9[[ @j A9OO ˡ@j A9BB @j A9{%% B`@j A9m// }?@j A 9y77 @j A)9}// @j A_: :#=j A+:?XX C=j A':5hh =j A" :+yy ^=j A!:!ww L7=j A'9mm =j A+9ee =j A&9 gg U=j A9kk =j A9mm r=j A9ZZ ^K=j A9$$  $=j A9 g=j A"9-- =j A.:8&& = G;j A&9=ZZ $F;j A)95LL F;j A&9,HH TE;j A$9"OO E;j A9MM ˡE;j A: + l A9 y l A9!!  l A:55  l A :__ + l A:rdd ff l A :aAA E l A:: t8 l A9&& b8 l A9$$ 7 l A9 7 l A9HH 7 l A9ss P7 l A9]] l7 l A922 K7 l A)922 +7 l A29CC = 7 l A89rNN y6 l A<9\II 6 l A;9I-- 6 l A94DD l A9&CC l A :"DD Ԩl A!:MM 9l A':HH tl A&9KK rl A09RR Ql A:9UU '1l A:9<< bl A69'' l A+9ATT l A.9+WW xl A89HH Xl A19"" K7l A=I zXl Al 9 ak A89 uk A 9 "lk A7 J i A7 k A>x EMj A |>l%% $Mj At>]44 Mj A4F> K'Kj AM>22 +'Kj AO= Fj AM|L ~ j AgL"" 5^ j AfVL_ -j AgKLU hj AH ף`l AKLH"" Nb`l A:Hi A`l A H Ѥl Aa+H &Ѥl At6H'' %Ѥl AmH `Фl An4=""  S$j Aw< Z!j A<22 X9!j A<II  !j Al= Kk Av= +k At<$$ Wk A<++ OWk A<44 lWk A<11 KWk A<44 +Wk A< Qk A< '1k A:> @5+l AB>z {+l AA>m +l A= (l A= (l A^{L l Ak<5 ^yk A|:7 ¥k A; +k Aj; > k AJ; k Ap;} +k AO; k A0[; k A^; Rk AWF m[gj A%F [gj A+ F [gj A6E [gj AfE Zd[gj AyE C[gj AOEo "[gj AUEg  [gj ArEf HZgj AMF dj AAF dj AEE dj AE Ddj AE rhl AC jj AC~ ~jj AC Oݬj AC -Mj AT!?) -"j A;9?z j A;1?q!! j A;(?h11  דj A??^00 Fj A!a? $j A X? j A$M? Tj Ai>x j A\>k zj A?\ |k A?P )\k AE Χj AE j AD j AD  9j AXF} !j AKF \j ATF-- ztj AJF33 Ztj AAF// X9tj A##  ;j A7F0AA H:j A'F3JJ :j AF2TT :j AF*\\ ~:j AF(PP 6^:j AE#II q=:j AE,$$ :j A.E: 9j AE #9j AE## _9j AE)) 9j AE x9j A FR66 1j AFR<< m竢j AEH55 ƫj AE=33 䥫j AE4## j AEE Zdj AEL'' Cj AES "j AEJ  j AE= H᪢j AB<i 7k A A [C// "ەj AWKC!!  ەj AxB ٕj AZB #ٕj AjB ^ٕj AVB!! ̼j AkB j AZDs d;j AED Pj A 1 l AD> l l Aa>  l A= I|l A9dHH OKj A9[@@ /Kj Af9)) d;Hj A9// Hj Aq9++ Hj Am9!! $Fj A~9%% Fj Au9 ףFj Ap97,, !rCj Awq9)'' nrCj A]9;%% MrCj Aw9s'' z l A|9d-- Z l A9P++ X9 l A9 ˡ5 l A9,, 5 l A9$$ A`5 l Aso9 Ȧl A9'' 罹l A9 El Ai9 Kl ALG  j AE5 i A/5!! i AT5J i AF5C i A5 {i ANSG -;j AVIG| h;j AjNG ?j AE"G İj A:G ףj AG` ;߯j ARF d;j AfF j AEF I "j AbF !j A$F %!j AF ` j A4F  j A0F ף j ANF' nj AF j AMF Вj AjF  j AF \j AF"" nj AF Mj AF -j A4F' j AWvF2  j A{F3"" > j A{?O22 Q j As?C33 0* j Ah?I66  j A)7(++ pj A%766 Oj A"7FF /j A07BB Vj Ae7 j Ac7 -j Ak7// )\? j Am6BB ף j Au611  j A7 lk Ak7## xik A7 && Xik A07 ik Aa6* k A6$ ~k A7'// k A7-- k AB HJj AA (j AA'' ƻj AA## 㥻j AA j AmA Ol AA| B`Ol ArAV }?Ol AA ȶJl A A"" Jl A A +Jl A}8 mi Ac8  ƛi Ab8 `l A[8 Nb`l A:?? &j A": &A$j A): $A$j AO?; 8j AF?2 shj Ap?k  @k A_?[ @k A1; Jl A3;,, Jl A6p;33 پJl AM; RJl ASu; Jl A7/;s vJl ANC;j VJl AgR;[&& @5Jl A:= 0Hl A;5 Nb0Hl A:<;'' w/Hl Ao%; /Hl AlH&& Xj AbH'' Xj AXH** 9Xj AK!! j AJ Zj AJ X9j AJ j A-J)) j AJ%%  דj AJ Ej A/K` Pj AJX$$ xj AJC j ATJ&& $vj AEJ## vj AK? -l AJ ,l AJ ,l AJ ,l AJn D,l A(KW Vl AK9 @5l AJ /l AJ Vl AcJ  l AeJ i l AFJ ~l AWJ ~l A[JO wl A\J5 l AbJ# |l ApJ )\l A; Jl AIJs)) Nbj A~J] |j AOxJe$$ -l AyWJp.. bl AKE%$$ yoj APE oj Ag:E 3j A:  nc)j AM;5%% $F!l A9; "" F!l A8;)) TE!l A1;++ E!l A*G;&& ˡE!l AB[;"" E!l A=?; B`E!l AB3; }?E!l AM/; E!l AW/; D!l Af/; /D!l Abb;6 +l AdCl11 VNj AZCi44 @5Nj AMCf// {Nj AEC]22 Mj A:CX55 Mj A.C]22 -Mj A%CU22 iMj A>Cj |j AEC d;j AC j AC` j ACX پj ABq-- Rj ABx00 j A$Bs++ vj A%B[66 {j A|kC J 2j AC ף0j AB 0j ANB /j AhB$$ |/j AkB )\/j A/B} d;/j AMtB)) /j AC Mj AB -j AB J j AB 롋j AB ʡj AzBa Ġj AB `j A|B X9j ACp$$ rhQdl A!Cb,, GQdl ABk al ABh)) al AzBj ]2_l A-Bk n2_l AIBe M2_l ASBX -2_l A4@@4 +qj A? glj A? Pglj A?)) lglj A?I"" Jgj A? nal A-? o3_l AEp j ADs,, j ADp(( -j A`D hj A5E Nbpj A#E$$ Apj A%E((  pj A1 E** pj A+E++ ;oj AD%% woj ASE## \j AGE && nj A:E(( Mj A1E)) -j A'E"" J j A$E## j AE-- j AD Gj AD &j A8E9 Tj A,EB Sj AD_## SSj ADT** 33Sj ADK** nSj A&DL-- Rj A+DE// Rj A-D>.. !Rj AO Ev)j Ao>3 $v)j A&\>0 v)j A>  ;j A> H:j Ax> :j A=f :j A=Y 9j A= (j A=22 ƫj A=33 䥫j A=;; j A=EE [dj A=FF Cj A=y<< "j A= I El AG[>| TEl ARW>i ¥El A9>L ˡEl A)> yCl A'= Cl A>= Cl Ae%> +Cl Ap#>w ffCl Aw>f ECl A1= 9=l AZH 33#j AyH o#j AHJ j A I  l AH l A?3IM J l AH l AH  l AHn ףl AZHR !Rl AF:_(( v~.j A?:T00 V~.j A%:_ ?5~.j A:z {~.j A9x++ }.j A99~ }.j AW: ף+j Ao: +j A9(( v+j A29 +j A2:: E&j A9"" -&j A9 I &j A: E&l A{y: $&l Ax`:~&& &l AzP:k;; T%l AG:YKK %l A=:I33 ˡ%l A$:7 yl AE:1 xl A^:( xl AJ  l AifC = j A[MCp 阮j AT^C 9j AHWC tj A\MC## rj AAOC 5^jj A/C "ij AkB rhj AcB Qhj AVC "" (ܬj AGC'' 2ܬj A?C m۬j A@C ۬j A9C## ۬j A0C// ۬j A&C00 [d۬j AC,, C۬j AC "۬j AC  ۬j A{gC** Mj Az^C Mj A:CK hMj A0CA pMj A)C: OMj A C0'' /Mj AC$** UMj AC'' Lj A C"" Lj AC Lj AB (Lj AB 1Lj AB lKj A2C? j AC@ Rj AC: j A\8? j A8J// j< j A7D00 I< j A\811 )\ j AQ8// e; j AG8!!  j A78  j A7x  j Ae75  j A7 &j A7 %j A8D ~l Ak8 [l A=8 [l A8K C[l AC \Rgj AkK8: j AgD 7qj AnD shqj A= Fj AyA= ףj A5< -+l A4c;s -j A!c;e## J j A;z j A=: ˡej AD: ej A{"; B`ej A: }?ej Ap:  yj AxF; E#l AL;P !l A; l A@r; 33l A81;e Вl A.;N  l A:/ \l A: l A: zl A: Zl A: X9l A: l A2 ; l A> ;$$  l AZ(; El A:p l A@:Z Sl A$: |?uk AA: uk A0: tk AM: /tk AL: jtk AD: tk Af: ztk ArB Wj ArB lUj AmB lUj AaB ClUj ARB IlUj AAZ  kUj AB| Rj A6 33i Au6)) ni AS<\ !l A>l 5^*Kj A>`++ p=*Kj AI? Tl A$?m ~Tl A> kRl A> kRl A> ZdkRl A>u CkRl A>e "kRl A >V  kRl A2 =' ҍ+l AS;t%% i A=s99 i@j A=k p@j Ay=b(( O@j An=Z)) /@j A L=q++ V@j A?9=uPP @j A>0=k\\ @j A.+=ZRR  @j A75=hh `=j A8+=ii =j A.%=SS =j A+=99 io=j A*=t H=j AY=;; hM;j A+I=RR pM;j A+A=cc OM;j A$:=QQ /M;j Aa=11 VMMl A{=%% LMl A=' .Hl A= .Hl A= v.Hl AK= |El A.U=22 )\El A _E77 ]j AWE%% nj AUE shj AtD Gj A`D} &j AFE SSj AUD nRj AFD MRj A[ET $Ƨj AGEH Tŧj AtD  çj AD Fçj AD çj AAD tçj A.D!! Sçj A6D$$ 43çj A]wD// oçj AKrD"" §j AqDi §j A]E9 7j A ER y6j A?DX 6j ApDG 6j AD /4j AvD!! k4j AiD 4j A977 nCj A9 RnCj A=J K=l Al=5 +=l A>= Qh;l A}=z bh;l A<: g;l A8= x8l AS= X8l Ag= L78l A< 8l A= 8l AHa=3 b8l A = p=J6l A= J6l AP= I6l A= S3l A5=!! R3l A/P=-- XR3l A4D= R3l Ap=  r0l AC^ )\j ADT j AGM GQj AG# &Qj AG$ $Qj AGJ `Pj A@_ !]j Az@j Gl A9>I'' 33clj AS>  ij AI7 Zi AKJ7 (l Ad]7 (l AZ9 tC j AH ?j AH >j A_H j A7I KYl Ag$I9 l A}HL l A=\ Z4j A=S Y94j A=!! j A= '' Pj A \= lj A(E= Kj A<P kj A<7 j A< gfj Am1J Mj A/Jk ʁj A Js j A9 J 7j AEI shj A5Ip Gj A5Ig &j ACIe %j A5J  j A7J)) j AaJ33 tj AcI!! Sj AeI 33j AkI nj AkI j AiI!! j AZI !j A#I \j AI"" nj A4I"" Mj A5I~"" -j AKI J j AUI} j AdI| j A J A`ej AtI= }?ej AoI Zdj AIY y閚l AkJ. #l AT?H shl A?| Ml An?  l A>z l Aqd@b33 kDj AR@{ Dj AG@(( zDj A@@v?? ZDj A9@hCC X9Dj A1@^11 Dj A.@PP j A&@TT T㵐j A@.. µj A@ P'j A@ l'j A? K'j A?I99 y j AS@J '1x@l AL@7 bx@l AeG3 "Yj AF.. ʧj AF;; ʧj AF@@ ~ʧj AF// 6^ʧj A}; sh1k A : nk A/: k A/:F  1j A}:/++ }?+j Ag: /+j Ahj:;; j+j AU:BB +j At9, &j Au: ףPk Arl:** Pk A}:v MbPk A:m APk A:{ k A6: 2k Ah9 M2k A8 y1j A8y<< 1j A8wBB 1j A|8,, rx.j A8** Qx.j A8 '1x.j A 8 Zl ACL&& Mj AL ۻl A9L-- Zdۻl A7L$$ Cۻl AGL "ۻl AmIR shj A*J <߿l A#J 00 wl A-JHH l A7J@@ |l A8J A0l A;:JP %l A4J4%% `報l A: J !! Ġl A[,J ףl AW=K v.l A9## j A9 j AL9J j AN99 ףj A9s bj A$9 /D j Ao9 E j Ar8 }? j A8  'j An8YY y&j A8 ?? 9j A9 $vk A9 vk A9 Tuk A7g @5j A74&& -j A7, J j AB6 j A6 Nbj A6 qj A6 qj A7< shEl A:QEs(( ףpj A`DE%% pj A YE ZTj AXHE X9Tj AO=E] Tžj AZ3E[ žj Aq'Ea ˡžj A,E! A`žj A0pDs ¾j A*Eb(( = 7j A ER y6j AE9 6j AD 6j AeDe +6j Al811 V>$j Ap8 ?5>$j A:8T z!j A8U ҭ!j A 8V -!j A7Y Vj ACA>v00 r(bj AA9>lBB Q(bj A)>@@ ^_j A6>88 C ]j A&>$$ " ]j A>88  ]j A=EE  ]j A=== {Zj A>&!! VWj A-=W ?5Wj A8D:&& ^j A-D4%% j AnDW xj AjC :j AuC cj A]D {j AXD(( Zd{j ATD C{j ADz 1> vj A99 2j A:  <j Az: wj A: j A{: |j AG: vj A : {j AR9'' - j A9{GG i j A9lMM p j A9\?? O j A9 j A9&& |j A9// )\j A9 j A988 ~j A9@@ ~j A9 &j A9!! %j AC: l AQ:v 7l A:<## &l Ar: rk Av: rk A{:  rk A:99 \rk A:GG nrk A:(( Mrk A9? qk A94'' qk A3u:? rhqk A!9F,, Mk AeE:< J k A 9'' Sk A977 tSk A9@@ SSk AV9j Rk AO999 5k A> FMl A);- (l AQ: Vi AEo:  {i Ak: Ri A\:  i A$G j AG j A|?a22 mdj AD[? ٞ_j A#\? R_j AX? A]j AK?  ]j A@? ]j AF)? ;]j A> ScUj A > 33cUj Aa?c// X9al AB> Zl A;r$$ nRl A;i;t :x j A:-- j A:MM j A:++ j A: 8j AN: nj A9r Āj A9n44 ףj AE9 oj A29++ j A(900 j A9 Mj A9!! -j AQ:f## +k Av:_44 gfk AE: h k A>t: A k AI shl A>IId -l AC 㥋Zj A|C 5^Zj AtC|.. p=Zj AC## IWj A C (Wj ArC 1Wj A)H ILl AioLY il ALI l A^I Pl A~I '1hl Ap~I L7l A 5I"" zj A/I"" (~j A(I Vj A"Iz /j AIn 1j AI[ j ABI V j A6I  j A"I  j A'I  j A~(I D j AI j j AI I j AH]   j AHi H j A?Hx  j AqqH!! ~ j AhiHt 5^ j A$I v~j AI!! V~j AI%% ?5~j AI'' {~j AH&& }j AH$$ }j AH -}j AH d;j AH) j A\jH  {j Ai^H j AiVH j AZH pj AiH w_j ABSH- _j A!QH |_j ApF88 5^ʾj A`F22 p=ʾj A_F// ʾj Aa~F?? ɾj A`uF>> #ɾj AmDJ(( Hj Av< 8 CHj A>{$$ c\l Aj> L7Wl Ax= _Tl AI l AI ףl A!I)) l AZ1J l Aq5JW== !bl Ay+JBDD \bl AH? $fUj Aw? fUj Ap< {n)j A< sk AU;k mk&l Ab;^ k&l At;$ #l A^; #l A;  -#l A+; M!l AMFz ˧j A2Fe ˧j A+~FW [d˧j ASlFc C˧j AJJ lGj AJG Тl AfJ. !l A; |!k A;5 . k AS; lwk AT; +wk A"; = wk AG;; Evk A; '1k A$; bk A8; Pk A$;,, lk A;x Kk AUj; k A1? QHgj A>c++ bdj A>aEE dj Aj: lj A39| '1j AX:V 㥻l A 9% l A5EZ 6^j A6E7 q=j A)E: j AE<(( j AE3 #j AiD :j AWD&& uj A*D rj AD Qj AD cj A ,Hm ϧj A)Hi )\ϧj AEf tj AyEr Vj AEd ffVj AEt!! $Vj AVTF Đj ASKF!! ףj AUCF## j AG;F## Mbj A;F%% Aj A8F&&  j A*F55 j A# F?? ;ߏj AF** vj AfF j ApEo++ j A ZF;; nj A.IF88 Mj A7@F== -j A(:F %% I j A:F j A+F j A#F** j AF;; 7j A FAA rhj AF00 Gj A F55 &j AF>> $j AEzFF `j AEtAA j AEg&& ףj AGF Esj A&F1$$ sj AF"44 tsj A FKK Ssj AF>> 33sj A F:: nsj AF== rj AF99 rj AE==  rj AE55 \rj AE nrj AKFS ˡj AFS88 j A#F$$ j AEAA j AEMM zj AE44 Zj AE Fj AE"" j ApE:: !j AE A`Uj AE$$ |?Uj AE 22 Uj AE22 Tj AE '' /Tj AdE## Tj AaE// Sj AfE Ƨj A@D4 Ilj A4 D#!! (lj AD$$ 1lj A;8- Dj A}N8 ]j A;8 -]j A+8 i]j A/8 p]j A|8 V]j Ac8y Sk AY8d 43k At9 33C j A9]  j A9@ $j AC _j AC// ~_j ACA77 -Zj AC4 hZj A}t: E$j Au9K-- rCj A9J.. rCj Ag9)) k@j Ax9'' @j Ar9 p_=j Az9 8=j Ayw9(( =j AsX9 s=j AB9 $=j Azl9_ l Aq9S-- l AgX9 Xl Ark95$$ k Ab9 k AX9 k AH: Zdl AHG% l AyG- jll AG Ill AO<n tJl A?Z88 x j AZ?U55 j Ag?k(( ij A]?e!! xij A:y Mj A:u ٮMj At: G!Kj A:P %!l Asm7++ xyj AO7( Xyj Ain7 k A~7 zk AdB7 Zk Ash7 k A7 ʡk An7 k Ar7 k A6' = k A6 xk AA &1Hj A; 5^ZUj A: #YUj A:33 ^YUj A:** YUj A:99 xYUj A:ZZ XYUj A:KK Rj A|:^^ ZdRj A: GRj A: Rj At: >!l Aw:EE R>!l A:__ >!l A:!! d;l A: A l A:  l A29?## j A9#&& #j A9 _j A.? !j At> e;j A> &!j A|> %!j AKt lj AKv Kj A Kl&& +j AKd'' = j AeJh Ej AK xj AJw Qxj A J '1xj A)J bxj A"J wj A Jy wj A7J wj ALJ Owj ALJy$$ lwj A@Jh Kwj AJh xj A&J Xj AJ K7j AJ l[j AJ [j AJ [j AJ [j AJ Zd[j A J!! C[j AJ "[j AJ Vj AJ-!! j AJ" j AJ' j A:oJK Cj AGdJJ ~jj A>]J< Ij AnKJN (j ARJY =j AFJW =j AJ l A]J shl AJ Gl AJ &l A(J Al A1J{  l AGJ, Mbl AlJ, -bl AlJ J bl AeJ al AyJ al AJ al A@~J %al AMJ ``l Aw(K  j A3K (\j AwJ 1\j AK -j AJ!! hj A=J pj AK+33 ?j AJ((( |?j AJ v>j AJS ףj A{JJ 2Uj A|J& -j AJ Rl AK l AK vl AK @5l AJ"" w/l AJ '' /l AJ |/l AJ )\/l AJ%% e;/l AJ.. /l AJ++ .l AJ%% .l AJ4 l AJ9%% Nbl AJ# Al AJ  l AJ l AJ <ߟl A!J wl A8J"" l AGK |l AaJ@ &l AJT %l AJ< `l ATJ'' l AoJ// Nbl A5$$ Ri A5 i A6B'' v.j AA66 h-j A,A&& p-j ARA /-j AA11 d;j AA j AA j AA,, ٞj AA== Rj AABB j A"AII vj AAVV Vj AAJJ ?5j AA|AA {j AAm++ j AA ;j AA(( wj AyA44 j AA5 j AA ;Nj AA &j A}A'' j AzA j AyzA** j A{A Tl AA++ B`eRl AA00 }?eRl AA gfOl AA EOl A}= Wj AO=| vWj A}=u"" {Wj A>\77 ;_Uj A>= rhRj AP="" GRj A+E> ESdl AB;N!! gfF!l AT;F,, EF!l Ab;2 q= l AQCw j ApBr$$ bhj A C Zdەj ACJBB pMj ACEBB OMj A C8-- /Mj AMB!! Kj ABN'' j AB% ij AeBQ pj A CK &Qdl AC; $Qdl AB) `Pdl A C Pdl ABM"" al At9-- 9Rj At944 tRj A9// :Pj A9@@ 9Pj A{9BB "9Pj A{999 ^9Pj Ai9RR Mj Aj9-- Gql Az9,, &ql Az9u** %ql Ax9^-- `pl Aj9&& nl Af9// -l An9/(( tSl Ax9 SSl A900 33Sl A922 nSl AwJ 9Hj AJ tHj AKH pl AZJM Ql AG5* ~jk AM9L"" n"j A 9Q j A.8V tj AW8K oj A8R G.l A{> [B=j Ae>  =j AQ>n =j AM>a55 }=j AH=p 7l Av9 %A;j A[99 E1j AK"" Zdj A)J Cj AXJ "j A6J ,j AK ,j AJ;; ,j AJNN C,j AJ(( j,j AJ I,j AJ (,j A'J 1,j ABJ-- l+j A:J44 +j A(J.. +j A7J00 +j A:J;; Zd+j A.|J~DD C+j A1qJu** "+j ADdJv  +j AePJ{ G*j AJ33 pj AJ@@ Oj A JEE /j AIrJSS Vj ANhJQQ 휴j AN_J>> ̜j AIWJ j A@PJ Cj AWJ jj ANJ~ Ij AKJn (j AJ j AJ j AJ55 Qj AJ$$ j AuJ  j A4MJ> j A.EJ1 ;j ANJ "" vj AEJ>> j AK Gl AJ nRl AJ MRl AJ -Rl A'K J Rl AJ Ql AJ!! oöl AJ++ ¶l AJ## ¶l AJ !¶l AZJ \¶l ATJk n¶l AYJ((  3l AJ"" F3l AJ,, 3l AJ11 t3l AJ-- S3l AJ)) 333l AJ** o3l A'J-- 2l A+uJt.. 2l A?Jh## !2l AMJX \2l A]}J l AMFJ l AkbJ zl A[9v J j A_9d  j Ag9I ʱ j A[9A  j AK9=$$ 7 j A9( /$j A#9% k$j A9 $j Ae)9 F#j AG*9 #j AG9 S#j A?9++ 33#j A9V \"j A 9 X9j Az9A C l A(b9b%% 1|l A:k9T l{l A; #l A$y= .j A<s Vm)j A<S l)j A= %A l A< `@ l A<r &l A<_ %l A<L## `l A2900 Ā.j A)9 ף.j A99 2k AB9  2k A="" RMl A> RMl A=C MRMl A="" FJl A= Jl A=d oJl A= 4Hl A=%% z4Hl A= Z4Hl A= X94Hl A=. El A= B`El A=%% }?El A= El AQ= Cl AE<&& T&j A< #9j A< _9j A< Vk A<$$ ?5k A< {k A<a Ok A<Y /k AB; .l Ae < .l AZ?:G G+j Al0:F &+j A2:%% F$j A:JJ TE$j A: ʡE$j A: #yl A:K Xyl A:@ L7yl A:5 C l A:& j l A8 lwj Ai8!! yvj AD8 cj AU83 j AP8 l AD8 #l A86 "[l A6L " j A+L ^ j A/L[ {j A2L2$$ {j A/L// {j A$L!! Zd{j AIKC Gzj A[KE zj A0L\!! Oj A#L\ /j ALY Vj A LZ'' j AKZ j A5L%% jl AL 1l AL[ p-l ALR O-l AL?%% /-l AK% V-l AK ,l AK ,l AK ,l Abb8K j A{O8I j AQ=[ ȖHj A=;  =j A= 5=j A6)) \i A633 ni A6 Mi A|6 -i Ah6 J i AS\BV 1j A]=  =j A3K= CK;j Az:)) L78j A: n#l A: M#l A:l** -#l A:XAA J #l A:j11 !B!l A:Z(( \B!l A@L?c`` v]j AGB?_II V]j Aa>m"" Zj AY>_ ~Zj A&? %Wj A?00 `Wj A?}== Wj A?{II ףWj A>}?? Wj A>}(( NbWj A/>}** AWj A">k??  Wj A(? bUj A+?  bUj A> SRj A ;// 16j AC<022 d;l A+9 &A;j A27@@ '1j AK7 _yj AM766 yj AKN7 jk AM;7 Tk A?W:f## rRj A_G:m!! QRj A+=## -Wj A<|=<< hWj ANn=XX pWj Ae^=66 OWj AkT=@@ /Wj AmJ=ee VWj AjA=~~ Wj Ad/=|bb Wj Ac'=s;; CWj Au=r jWj ASb=// _Uj AWY=YY ^Uj A\M=tt ^Uj AYD= R^Uj AW;=rr ^Uj AH6=OO v^Uj A03=VV V^Uj A.)=pp ?5^Uj A:=II {^Uj AC=,, ]Uj AY`=T22 `Rj ARX=F\\ Rj ASN==ss ףRj ANF=1tt Rj A5C=II NbRj AH=%% Rj A@= ;Rj A<'' Rj A <cc Rj A<DD RRj A<c Rj A?=M66 I BPj A==5 APj A = 7APj A<}"" v?Pj A'D=s 0Zl APp=o!! kZl A7=33 EWl Ajm=KK …Wl Ap_=KK ˡWl A}`=88 Wl AOY=>jj +Tl AWT=/]] > Tl AbM=;; yTl AnO=  Tl A=D_ 6j AYD uj A8KES11 j A.DED++ j A9:EC## Zdj AA.E<44 Cj AJ#E8FF "j ATE5??  j AUE,44 Hj A]E(66 j ARD!! j A-EQMM jj A4DKRR Ij A:DE^^ (j AVV 1j A8D2(( m狝j AD ~j ADJ pj ADG Oj ADA /j A D; Vj A[DT++ j AemD766 Ij A>mD,, (j AyD"" 1j AyD mj Ap= +=l A?=  Kg;l A<11 +g;l A<<< = g;l A<// yf;l A= f;l A = f;l A{=E e;l A^[= 8l A|C&& 2j AtC'' 2j ACW j AC  ףj A5C Fj AU/:## a)j AM):55 7a)j Au: |?E$j A9E B`l A2H:Q }?l AJ\:G l Al: +&l A6): l A/:// Pl AI:CC ll AZ$:55 Kl Aa: +l A:9/ 9l A"9 ul A+9 rl AG9 Ql AJ9 '1l A|> rhaUj AU> GaUj Av= &aUj Ao>8 ZRj A)a>9 X9Rj A> 33Rj A > nRj A> Rj AF=&& I Rj A= Rj A#> jDPj A> DPj A=-- ECPj A.=DD CPj A=!** A`Mj A=// Mj A= Mj A= ·Wl A=%% Wl A=H%% Tl AL7c55 i A@7T::  i AAh7q i AJY7h zXi A]7g BM3l Am7W rM3l A9 B`E j A9 }?E j ABO9 D j A%J9{ kD j AQ9g.. D j AK9\$$ zD j A*'9Z00 X9D j AM9\QQ D j AO9TNN C j AQ8C33 FC j AG88 C j A4h9 + j A6_9 > j A5V9 y j A W9$$ ȶ j A X9::  j A O9"" + j Af8(( µ j A\8>> ˡ j AS8GG  j AZ8CC B` j AyX9 P'j AR8 K'j Ah8'' +'j Aj8LL > 'j Ak8\\ uj Ae8^^ rj A9 +7k A,9v Kk A+9h +k A8O > k AU<,++ Qj A@ <%% '1j A ;0 Xj A;$ L7j A; j A^;!! Cj AK;x  j A;` Hj A;U j A;Q j A; Ij A; /mj A; Vmj A;J %;ll AMj A@;}}  Mj A+j;;** n#Kj A"d;.ii "Kj A"\;% "Kj AT: Mb Kj AV:// A Kj A(; EHj A;  Hj A; 33Hj A; nHj A: J l A12; Gl A2; &l A:;88 %l AE;QQ `l AN;zQQ İl AN:g?? ףl Ag~:3%% |k AL:2 ;Ok A/: Ok A&=E"" vN$j A=888 VN$j A> !j A > G!j A=77 &!j A= ף!j A=;; !j A=NN Mb!j A=SS A!j A=11  !j A*=$AA 2j A1=.. !2j A=## ]2j A=DD n2j A=LL M2j A=22 -2j A=!! tj A= Sj A>z Q8l A=d 9H6l A=9"" rH6l A> R3l A=(( !AQ3l A=r55 Q3l A=^FF |P3l A=NGG *P3l A=<33 ףP3l A=# Q0l A>! '10l A=  c0l A= 0l A=** Χ0l A=>> 0l A=JJ P0l A=CC l0l A=22 K0l A=,, +0l A/=(11 :.l A4=>> u.l A7=// r.l A:= Q.l A8=!! '1.l A;=** c.l As= Ԉ+l A|= :+l A"8 R&j A8 |?$j A\: vbj AP: Vbj A:-cc &_j A:00 %_j At%J' l A} J -l AsI il A9 k AKS -l AKP J l A-98 Mi A7 ]rk A7 nrk A7 Mrk AbCn j AlCl!! Tj A-CS "j A%CF  j ACR$$ (lj A CM%% 1lj ACI'' mkj ACF## kj AC1 kj AC kj ACO ݕj ACMBB Oݕj An>E #Jj A^E j ASE Rj AGE j A?8E vj AND Dj A^Ed%% pj A_D (E :j A7E.. uj A`D(( Pj A^D>> lj AZD-- Kj AdD +j AD '1X~j A3@?= Ġl A&?& ףl AfY? l ApS?p l A:o%% A`e)j A:f }?e)j Ac8: E&j A_:i $&j AS:b &j A@:f99 T&j A9:\RR &j A':]&& ʡ&j A#:P'' &j A:H== A`&j A2:K22 }?&j A2W: QH$j A5<:(( G$j A=:GG G$j A#2:AA G$j A:' ~!j A:%% 5^!j Ar:00 p=!j Aa:'' !j A% :%% !j A!:22 !j A966 Ը!j A955 9!j A9.. *j A9 )j A!9 X)j A9#$$ mj A9 j A9 j A9 ~j A9 6^j A: )\l Ai:i ?5l AQ:877 l A: l A:$$ vl A: l AL:LL l AO:[[ l AG:sLL َl AN:e55 Rl A#O:Y l A+:A vl A:/22 $l A:!33 `l A):11 l A]:CC ףl A\:LL l AM:JJ Mbl AI:PP Al AW:II  l A#[:?? l A1:.. ;k A:** vk A: k A9i |k A9% 7qk A9 $qk A1&: `pk Aad: pk A3L Zj AL ʡ%j AL %j AK $j A+L hl AL 9hl AL uhl AL ^l A L l AK"" xl AK Xl A2< 6^0l Aq< H.l A~< .l A2; (l A\K@@ ɴj AhK)) 4j A>K j A>K.. j A9K??  j A1K"" Fj AiK tj APK jj AfK j AcyK%% X9j AimK$$ j AK2 +j A KEKK gj AK4'' gj ANK e;l AK l A%'' !=j AIB> AA =j Ac/>EE |=j Av >== *=j Ao>66 ؁=j Ab>55 Z=j AV>99 33=j Aw=11  =j A>=(( /Ol A]=## VOl AE=11 Ol Al? JPj A?$$ JPj A|cC## V~j AtRC U~j AnlCDD {j AfeC-- {j AiYC00 P{j A;%C!! r8yj A=C;; Q8yj A>CCC '18yj A- C c8yj A)C* #۩vj A C ^vj AB33 vj AB.. vj A CN Zdtj ABO Ctj AB 5^tj AB q=tj AB)) tj ABL 1qj AB Zdqj AB88 Cqj ABDD "qj A~B))  qj AJ tl AJd ol A|JU l As; 3j AVF@ Zj AOFx Xj AGFj TXj An>// 7nj Ap>WW shnj Ap>UU Gnj A1> clj A0>**  clj A6>== Fclj A6>JJ clj AE> tclj AX> oclj A]> blj A8?7CC $ij A>00 ij A >CC /ij A!> kij A>RJJ ηdj A>: dj A"X: \B j AB:g A j An9,, 33 j A9S \ j A`9? X9 j Ad9 Ηj Ak9 j Ao9 Pj ASF ;j A9F 7j A5F rhj A7F Gj Ay6F &j ASF4RR tj AHF.hh Sj A>F)__ 33j A3F&NN nj A)F>> j AF&'' j AE?$$ sj AE&&&  sj AE-$$ 0j AEB kj AdE, Uj A?$F ~:j AUF// 5^:j A`F** p=:j AGE ## j AgE'' j A#ET// َj A"EJ22 Rj A<'' q)j A<%% q)j A<z 7q)j AP< n&j Awi<&& ff!j An<t Yk A<o xYk A|<] XYk A< k A]<w k A};M k A< ;k Ad< Zd;k A; C;k A,~8; m{j AE85  j A/f8 e;_j AL8 <j An8 I.k A84 #k A>8 /k A V8 jk AP78Q Ek A\WC vj AMPC Vj A39. Sl A:#&& L7l A#:.. l A(:44 l A-:66 Ըl A0:.. 9l A5:%% ul A7: rl A3: Ql A>93   l Am9/ H l Agx9j +8j Ag_9P-- ȶ8j A?9G ff8j Ajl9@@ (6j AA900 Q(6j A29'' '1(6j Ahu9   3j AE9;; 5^3j AgD9AA p=3j A+933 3j A 9'//  1j A9+//  1j A 9$$  1j Ag9 Zd 1j Ah9~ "k Ahs9FF (lk Ak>9{'' kk AP9"" Wk A+9 Dk A(9 jk A(966 Mk A39 Mk A 9;KK پk A9.22 Rk A8 Vk A8 ҽk A9: )\/k Aj?  @j AY? @j AtFU)) Lj AG5 i A9 p}j A9&& A`i Az9%%  `i Ax9 `i AC9 _i A49"" |_i A)9 )\_i A,9 d;_i A~9 6^k A9 q=k A&\9 "k A1I9 Hk AgC^!! ?5Wj AeCN {Wj AJ/C |oUj AZC )\oUj ABC d;oUj A_G;BB j A%B;\99 uj A@;NII rj A8;DSS Qj A2;;VV '1j A ,;2QQ cj A(;'RR j ARC; jj A&P; jj Aa+;'' ~jj A :>** hj A;. k A-];H xk A#;/** 9xk A_; 5^k A_; k A]~; #k AI0;]<< xk AF;I&& Xk A: [k A;N; Zd[k AO]; C[k A_;55 ~Zk A1: (k A: 1k A= ?5n)j A@  "j A@$  j AQ; zj A0; Zj A/;88 X9j A-;xII j A(;mDD j A%;a88  j A!;S22 Fj A&;E j Ax%;' Sj A:%22 j A :(55 !j A#:'.. ]j A; Ȇj A;&& j Av;-- +j A^;%% gfj A@;AA Ej A5;XX $j A/;JJ j A1; Tj A;11 j A:y// j A:r /݄j A:j00 kj A:X66 j A:F zj A:[ Zj A:N>> X9j A:B** j A:4 j A:'  ׃j A#;MM j A;DD j A; 88 Pj A: .. lj A;88 Kj A;MM +j A:TT > j A:YY yj A:YY j A:KK j A:++ +j Ar:99 Ej Av:BB $j Az:|KK j A:w>> Tj A:m// j A}:d<< ˡj Aw:YAA j Au:P11 B`j A~; rhj A;66 Qhj Ax; '1hj A:O rk AK;\$$ Qk A/;G(( '1k A";8 ck A];!! ~k A8; 6^k A;u## k A:Q11 k A:A33 :k A:5++ uk AJ; S#k A8;33 ,#k A/;>> S#k A#;<< "k A ;// uxk A)&; rxk AAk j A~A, kdj A|~A"(( dj Ave? tMj AI? K7)Kj A?? )Kj A>| 'Kj APq@V99 /Dj A58> 7j A8> shj A7t \rj A7' (\!j A7% d;!j AM7>  j AG71  j A> w)j A> Pw)j A;0 jL!l A7;3 Vl AFJM ^j A:J= j A.J j A-J j AJV## pMl AkJ Ll AJY {l A8JV @5.l AGJE {.l ArJ --l AR5 {i A AF ,j AA I,j AA&& (,j AA7%% ҝj AA=11 -j A@A!! ZdRl A|A>== DPj A|7>44 /DPj Aa">** zDPj AQ> ZDPj AR> X9DPj Ar> DPj A= CPj Av=--  CPj AZ=} E\l A^=G :Wl A@8 F3yj A\ ;y uCj AD;\ }?uCj A@:P:: uCj A*; l@j A-;!! K@j A%;t&& 1F3l A;c00  F3l AFEY"" J j AdtE_77 j AE Sj AEd tSj AiE Đj Ay< 7j Au<'' shj Awx< Gj Aa< +F l AEX@Z$$ yqj AB @U Pnj A?W&& hlj Ae@ ij A?n))  Kgj A?a55 HJgj A&z@ z4_l AB" l AC Вl AdE== V.j AHFU(( aj AHE7 j ANE3 Nbj ANFF!! oj AKEe Hj AE`(( J rj A hEe `pj Ag5 c(i Ac6 ~i AN6 6^i A@6 q=i A86 i A;5 " i A"5   i A&> dj A+k> 9dj A>$$ *bj A{> ~*bj An>'' 5^*bj A_>GG q=*bj AV>bb *bj AK>gg )bj AB>TT #)bj AE>,-- ƛ_j AE>$$ 㥛_j Ai>E h ]j Ad>644 p ]j A\>+(( O ]j AQ>! / ]j A$>;; C ]j A>11 j ]j A> I ]j A>&& ( ]j A="" 1 ]j A=$$ l ]j A=@@  ]j A=77 Zd ]j A=   ]j A= H ]j A>C++ ?5~Zj A= p}Zj A>  }?Zl A8 pi A8## i AY9 shl AI9 Gl A)9 &l A9f `l AF9 nbl AX9 J bl A9 al A8J Gal A89 &al A8$$ n l AI l AI I,l AI (,l AI 1,l AI l+l AI +l AI\ Ol AIL /l AJF Vl AI( l AI ̜l A!I l AoID Тl AI= l AI6 Al A,I! Zl A5~Ia Cl AWG@ /݀j Aa<@## V݀j Ag3@)) ܀j A5^@B )\O~j A8U@; e;O~j ABI@6 O~j AAB@- N~j A2<@%% N~j A-5@.. RN~j A5*@  N~j A3!@ vN~j Adc>-- <6j Am<z k Ap<b Qk AP<P k AF<@ vk AL<6)) Vk AL<)"" ?5k A.Id l APH( (ll AH) 2ll A[H kl A]He ܻl A5mH Iܻl Ad9 1j Av9 bx.j A@PP jUj A@AA iUj A@00 #iUj A'i@ nRj A-`@ MRj A. @ nSPj A/@## RPj A%?% j|l AfJ ˡej AvJ ej A)6KE rؾj A6*KC-- Qؾj A/!K5 '1ؾj A1K- bؾj AD K- ׾j AOJ)%% ׾j ALJ44 ׾j ATJ** P׾j AcJ l׾j AdJ ## K׾j AJ Hj AJ rHj AJ bHj AJ? j AJ5 ~j ANyJE)) j ABtJ666 xj AHhJ/>> Xj AuTJ=33 K7j AEJ=99 j AaJ 5^*j AVJ p=*j Aa4K w߻l AvJF!! Ql AJE 8Ql A J+ l AFJ, l AzJ Gl A}J &l Aj{J %l APpJB n2l AYjJ0 M2l A{z? p)j A>_ Cl A>U TCl A]}7 ^ l A7  l A; j A;s Tj A: i A:| +i A; k A; 7k A; rhk A; Gk A; &k A; $k A;## `k A;v İk A8;: AO3l AG: Q(l AY: '1(l A2= !j A = z!j A=  T5j A<  5j A<  ˡ5j AC=] nl AA=O l AX<00 Wk Ad< )) Wk At899 lG$j A844 KG$j Au8<< +G$j A9n /ݤk A@9t k AM9k A`k A9k }?k Ax9 +k Am8** = k A9 $k A9 k A< p=k A< ;k A< ;k AJ9 _j A9/ ףj AyR9 j A?9 Nbj APCN RRj A: / l Al:; hl AM9 l Ai9 Rl A: ]j A:!! 33sZj Ak: }?Wj A:/ Wj A9: Wj A5: Rl A: vl A9 Vl A: ?5l Ay9$)) ;l A9"" wl A9 l A9 |l A~9K44 pl A9:,, ףpl A94 pl A9( Nbpl AOA qj AeA qj A:r  l Ad; %al Ak; ``l AZ:~ `l A@:g ף`l A79 +j AC 8j AE* T㕃l A%[DF(( _j AVD1>> 7j AJD+EE bj A.;D,(( j A:D kj A8D sj AED Kj A!DD uj AD;## B`uj AD*00 }?uj AD#FF uj ACNN Tj AC$$ j AC))) yV~j AC55 V~j ACJJ V~j AxC,, +V~j ArCA c{j A800 +j A8 Zd+j A[82 ?5&j A88 -&j A/899 h&j A8!99 Q>$j A7!BB >$j A7%(( v!j A7// !j A7 |!j A8 8 l Ac8 98 l A!8 ^l A7 l A:a7C sh1i A;Y7; G1i A5T71 &1i A2M7' %1i A4C7 `0i A=7L Mi A07D -i A&7: J i A71 i A7' ʡi A 7  i A7 7i AD 7  i AJ6 Fi A6H i A v= `3j As= Ġ3j A^g= 1Tl A5D=9 imRl AI< lRl A";T**  Hj A ;77 Fj A;vCC Fj A;]))  Fj A: +@j A: > @j A:$$ y@j A;## ~+l A ; R~+l A:** )\(l A:DD e;(l A:BB (l A:p.. (l A:[ (l A: %a&l A:** ``&l A:LL `&l A:OO ף`&l A:DD `&l A:00 Nb`&l A: A`&l AT:S e;_&l A:< MB!l A> 'Kj Ay; ףl Aj<E |l A/r<7!! )\l A; rhl A; Gl Am=E++ Fj AV=6 j Ad< j A#=1 (l A;<! M!l A,<  -M!l AMf7=44  j A\X7:## Hj AWD7m;; j\j AC7: 1\j A*379 m[j AY#799 j A=7~ ij A87s++ pj AG 7p Oj A\6)77 J "j AH6 ik A*C- tj AC+ tj AC& Dtj ACG qj ABD ҍqj ABC!! -qj AB= iqj A=00 tCPj Asm=## nCPj Aif= BPj ALd=33 BPj AE]=gg  BPj ADT= \BPj ADL= nBPj A@B=|mm MBPj A,==hRR -BPj A0}=66 /ݴMj A>n=__ jMj A@e={{ Mj A@[= zMj AAR=xx ZMj A  ]j Au2>  ]j A@= |Zj Af=,, |Zj Ar=XX |Zj Av=99 C|Zj A#+>O ;Wj A=v Wj A= Wj Aj%> Y9\l A;8 zj A9 < l A9 < l A8 C< l A 6 Yi A 6 xYi A6##  i A6<< Hi A 6== i A`6## i AG6 )i A6 x)i A{5## 'i A5 'i AY8v  j A9 ?$k A~R9 A#k A9 #k A@9[  h"k A_9T @"k A a9H e"k A9  yk A9 Qxk A9 '1xk A8  ^k A;-- Ԉj A=J )\j A=Jb e;j A/Jg j AJz j A!J ٮj AJr Rj AIe j AIc!! vj A9Ij'' Vj ALIk33 @5j AZIk++ {j A9J j A*J## ;߯j AJ'' 鷯j AJ j A&I Dij AII Aj ASI!! j AXI"" Mj A>I ˮj AI j AI V}j ADI Vj AhnIf$$ qj A?J"!!  j A;J j A2J ;j A J wj AJ j AJ |j A J )\j AJ d;j AI j AI j AI j AI Rj AI j A$I## vj A'I.. Vj A'IEE ?5j A,I77 {j A/I  j ASI  j AoIQ!! Nbj AlIF!! Aj AlI>  j A7I j AI ;j AI wj AI%% )\j AI:: d;j AI$$ j AjRI ~j AOI" EӾj AJk33 SӤl A'J /ݴl AJ l AI zl AI %l AI ˡ%l AI %l AI A`%l A%I }?%l A'I&& %l AIL Ȗl AI< 淪l AI# +l AI ffl A@eI l A=IQ ll A9I; Kl AtBd +]j AC> Zj AB GWj A{C0 6bj ACH jj AH X9j AhG 33j AZGh$$ nj A-H &j A!H T%j AH!! %j AH'' ʡ%j AG44 %j AGDD A`%j AGBB }?%j AG44 %j AG$$ $j A+G$$ /$j A3G;; j$j A2GNN $j ALG00 z$j AsGm E#j A}G** 淪j A}G11 +j AxG22 ffj AGt ʡj AwG j AlG(( A`j AhG| }?j A]G j AeG j AWG xj AJH 㥫l A-H l AHH ~jl AEH Il A Hz l AT@J,, Zj A9=J** Yj A55J## "Yj AG'J!! ^Yj AuJ&HH j A7!J&& Zdj A"J Cj AO J "j AtI44  j AfI.. Gj AaI j A=JM .=j A4JH!! i=j A&'JG p=j A:JJ O=j AT JO /=j AgJR%% V=j AoI2 D %j A> aj A=D j&l AOQ= ̼l AWI=v l AbK~ '1j AYKr%% bj AQKf j A?K~ l ANKr vl Am> =j A'? d=j A>> = W;j A> yV;j A> V;j A> 8j Ae; K7.j Ac; .j As;AA G+j Aj;FF +j AX;,, 5^+j AQ;44 p=+j Aj`; tk A=b)) "+j A='' O&j A/> $=l A"> ˡ=l A= =l A=,&& QH6l A= '1H6l A=)) bH6l A=?? G6l A79|-- 0@j AS9)) †=j AF|9// y=j A=v9++ &=j AMj9## Ԛ=j A(R9q =j A 9 E;j AX9! A`E;j AL9%% }?E;j A?9 E;j AZ9 D;j AN9!! C;j AA9  C;j A.x9?-- y8j A$R9)) E8j A9 8j A9// /ݴ8j A800 A`%6j A8l33 }?%6j A8[33 %6j A'9 Χl A)}9r## l A,p9b Pl A-Z9J ll AM9"" l AG9.. l AX9** l A8p9-- 9l A/O9 tl A49;.. p=l A!V9 l A8 l A8!! "ۉl A8 ^l A"8 xl A8. Gk A_^9@ k A:J *j AI *j AIq<< )j AI`"" ")j AJIj )j AJ## l直j AI** ƛj AI 㥛j AI j AI Zdj AIj  j AI\ j AIq!! j AIk22 ~j AId00 5^j AI V j AI""  j AI##  j AI  j AI C j AI I j AI ( j A}I 1 j A [I  j AjIe  j AXIo Zd j AI z~j AI'' }j A~I%% }j ALI |j AKI} |j AjI[%% B`el A+:I k AA:B k A:  k A: k AR:V |k AQ:H (\k A,9: k A9 !k A"DT }?UPj A"DJ UPj A5DF TPj AK j A E! /j AKE9 Vj ABDK Jj A-D3 #j A:D2 Pj A"D Ԙj ACz B`j AvC(( EV~j ApoC44 $V~j AovC == {j A8- /= j A-81 ҭ j A8^ El A@)?X Dj AB ?P jj Aq>O Ij AgP? j A*: j AI: j A:r j A:Y Pj Ak9( yF j An: #۹ j Ad9 X j A`9 L7 j A:z 5^*j A:3 Kk A9 #k Aa.? ~*Kj A> l Fj A>**  Fj A%; A`E$j A`< {NMl AEK uhj A{K rhj AzK"" Xپj AtKsDD L7پj AkKi?? پj AKY Apl AA3 c@j Ao<'// j A< j A-FI&& ¨l AH l APH6&& Nl A= j|Zj Ae= B`Wl AW=6 {nj Aq=2 mj APg:// \.j A8g:@@ n.j Aj:tCC M.j A'\:pHH -.j A$V:gFF I .j AIA:m?? .j AUa:;; z+j A'i:?? Z+j A3\:77 X9+j A7S:77 +j A1L:>> +j A3D:GG  +j AD:CC E+j A?_:$ff Ef)j AUN:#?? $f)j A': e)j A: d)j A<: /d)j A+:k zd)j A9 F$j As: pk A: &k A: %k A: ak Ak: k A_: أk A_:'' k Ab: Nbk AN:| Ak AU:f WW }Zj Aw|>jj -}Zj A{r>EE h}Zj A]4>U  `Uj A>L99 w_Uj AATGX j A'<8 0j A[<"" Тj AE< !j A~8<| Mj Ax<!00 B`j A<&& }?j Aj< j Ac<!! j A;{** oj A;P00 nj A;L Mj A{=V j A8= _j A{= vk A=:: E1j A=;; 1j A=OO vOl A=sOO VOl A=aOO @5Ol A=SNN {Ol A= wOMl AQ=; %1Hl ApI' j,l A^I I,l AMI (,l A?1)) d;_j A?!! _j A;NHu'' j A@DHo%% j A]3Hs 9j AbGH Gzj Ae=H&& zj A[7H'' zj AX/H%% ~zj AW%H 5^zj APH p=zj ACH%% zj AAH&& yj ADH "yj A$Hg ^yj AHW## yj ACH 2j A6H mj A$H j AH j AH## j A!G%% [dj AG!! Cj AGk'' "j AGW44  j ANH: ?5^j A-9HC z^j AH)HG ]j AG H> ]j A@H1 -]j A:H'## h]j A7 H"" p]j A H O]j AH /]j AH U]j AH \j AGw## I\j AGt'' (\j AGu## 1\j AGr l[j A+G [j AG## ͧj AG ͧj AG -ͧj AG Oͧj AG /ͧj AWG @5>j AIH ^yl A*H yl A+H xyl ASwD  ]j A.{D H]j ADY ~]j Aw<HH (&j As2<  Nb0j Af.< A0j Ak; j A; shj AE=$$ Fj Ai=// Fj Ai=s77 SFj Ah<hJJ Fj Ar<b.. ʡFj A;; ^i A/; L7i A{; -=i Av; i=i A.= Fj A/= OFj A`=) '1Zl AF= cZl A='' Zl ABV (qj AB ףij A: K7i)j A: i)j A: h)j A:## 9h)j Ah{; \Rk Ai/;' 4k A> I Wj A@A Mj ABDG  3j A9J bl A9 E l A9 A`E l A9 }?E l A9 E l A9 D l A: ʡl AJEf hl AoEO** Ǿj AM< V$j A1<| +V$j Azp< +!j A~< L79j A <h)) 7j A ;`## 7j A<222 K7j A <()) +7j A;( > 7j A;$$ y6j Ak<00  j Aa<:: Hj AL<99 j AM<%% 6^j AD<&& q=j A1<11 j A,<33 j A#< #۩j Az;>&& rj A2<++ j A2< j A3<44 [dj A,<.. Cj A< "j A<  j A< Hj A; j Ab<| q=j A; 䥋j Ap; j Aa; Zdj A`;&& "j Ab;X hk A< Rk A; k A; vk Ae<"" |k A|<-- )\k A,<## d;k Am7k!! %i ABI8 i A:7 ui A7W B`0l A@7N }?0l A!95 Oi AT9 w_i A T9 Ai AF9  i A9$$ %i A:[(( r3j A:^// Q3j AZ9: " 1j Ar(:   1j AwxH  j A[H q= j AQH  j ATH 1|j AoF {lj A2="" I1j A)9C 1 1j A8f66 V}.j A{x9 %+j Ago9AA +j A#8 +j A8 R+j A8 +j A8;; v+j A8)) V+j Ah\9666 nb)j AlR9/ Mb)j AwF9,** -b)j AkC922 I b)j Af9 Ok A9 Nk Ag,9H vNk A~9 Ak An`9""  k AjE9!! k A8C-- k AW9 ף0k A8 0k A8u 0k A8j<< AQ## ףj AA wj A@ j A@ |j A@  )\j A@ e;j A@. Gj A@ &j A@ %j A@ `j A@  j A@ Nbj A@ Aj A@  j A@## j A@''  7k A;66 y6k A;22 6k A: 6k AU;/ 5k A: k A: !! Χk A: k A: Pk A,; lk A:!-- rk A:00 Qk A: !! '1k A&: ck AS7P j AT7H -j Aw6< -"j A6b Kk A69 "Kk A ?#@@ d j A?KK p= j A?DD  j AF?,::  j A 8) Gj A49 > (l AE y6j AE 6j ANmE 溜j A)6k++ J j A6Q j A[t; Ђj An`;++ !j A@ k4_l A!@ 4_l A_=A Q~j Ai3A Q~j A@k  3yj A\: 8j A;:< V3j AUmEM j A9) v j A;94 j A(9/.. j A9, Rj A*8/ Cj ADw80** "j AVh8-33  j A 7F;; {j A7C** j A7-"" ij Alaspy-laspy-a32c7aa/tests/test_append_mode.py000066400000000000000000000121411463461040100214770ustar00rootroot00000000000000import io import os from pathlib import Path from typing import List, Tuple import pytest import laspy from laspy import LasData, LasHeader, ScaleAwarePointRecord from tests.conftest import NonSeekableStream from tests.test_common import simple_laz def test_append(file_path): """ Test appending """ if file_path.suffix == ".laz" and not laspy.LazBackend.Lazrs.is_available(): pytest.skip("Only Lazrs backed supports appending") append_self_and_check(file_path) def test_raises_for_laszip_backend(): with pytest.raises(laspy.LaspyException): with laspy.open(simple_laz, mode="a", laz_backend=laspy.LazBackend.Laszip): ... def test_append_las_with_evlrs(): las = append_self_and_check(os.path.dirname(__file__) + "/data/1_4_w_evlr.las") expected_evlr = laspy.VLR( user_id="pylastest", record_id=42, description="just a test evlr" ) expected_evlr.record_data = b"Test 1 2 ... 1 2" assert len(las.evlrs) == 1 evlr = las.evlrs[0] assert evlr.description == expected_evlr.description assert evlr.record_id == expected_evlr.record_id assert evlr.user_id == expected_evlr.user_id assert evlr.record_data == expected_evlr.record_data @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="Lazrs is not installed" ) def test_append_laz_with_evlrs(): las = append_self_and_check(os.path.dirname(__file__) + "/data/1_4_w_evlr.laz") expected_evlr = laspy.VLR( user_id="pylastest", record_id=42, description="just a test evlr" ) expected_evlr.record_data = b"Test 1 2 ... 1 2" assert len(las.evlrs) == 1 evlr = las.evlrs[0] assert evlr.description == expected_evlr.description assert evlr.record_id == expected_evlr.record_id assert evlr.user_id == expected_evlr.user_id assert evlr.record_data == expected_evlr.record_data def append_self_and_check(las_path_fixture): with open(las_path_fixture, mode="rb") as f: file = io.BytesIO(f.read()) las = laspy.read(las_path_fixture) with laspy.open(file, mode="a", closefd=False) as laz_file: laz_file.append_points(las.points) file.seek(0, io.SEEK_SET) rlas = laspy.read(file) assert rlas.header.point_count == 2 * las.header.point_count assert rlas.points[: rlas.header.point_count // 2] == las.points assert rlas.points[rlas.header.point_count // 2 :] == las.points return rlas def test_trying_to_append_in_non_seekable_raises(): with pytest.raises(TypeError): with open(simple_laz, mode="rb") as f: stream = NonSeekableStream(f) with laspy.open(stream, mode="a") as lasf: pass @pytest.mark.parametrize( "points_read_counts", [ [-1], [1, -1], [49_999, -1], [50_000, -1], [50_001, -1], ], ) @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="Lazrs is not installed" ) def test_write_then_append_produces_valid_cloud(points_read_counts: List[int]) -> None: """ In this test we read a LAZ file into chunks dictated by `points_read_counts`, then we reconstruct it by first writting the first chunk into a new file using write mode then we append the remaining chunks to that newly created file. At the end the input file and the one we patchworked must be the same """ def iter_points( points_list: List[ScaleAwarePointRecord], ) -> Tuple[ScaleAwarePointRecord, slice]: """ Returns a tuple that associates each point record in the input list with the slice to be used to recover the same chunk from the input file. """ offset: int = 0 for points in points_list: yield points, slice(offset, offset + len(points)) offset += len(points) def check_write_append_read( points_list: List[ScaleAwarePointRecord], header: LasHeader ) -> None: """ Implements the logic of first using write mode for the first chunk, then appending the remaining chunks. Checks result at the end """ with io.BytesIO() as tmp_output: with laspy.open( tmp_output, "w", header=header, closefd=False, do_compress=True ) as las_writer: las_writer.write_points(points_list[0]) for points in points_list[1:]: tmp_output.seek(0) if points: with laspy.open(tmp_output, "a", closefd=False) as las_appender: las_appender.append_points(points) tmp_output.seek(0) final_cloud: LasData = laspy.read(tmp_output) for points, selector in iter_points(points_list): assert final_cloud.points[selector] == points input_cloud_path = Path(__file__).parent / "data" / "autzen_trim.laz" with laspy.open(input_cloud_path) as las_reader: points_list: List[ScaleAwarePointRecord] = [ las_reader.read_points(points_read_count) for points_read_count in points_read_counts ] check_write_append_read(points_list, las_reader.header) laspy-laspy-a32c7aa/tests/test_chunk_read_write.py000066400000000000000000000074421463461040100225510ustar00rootroot00000000000000""" Tests related to the 'chunked' reading and writing """ import io import math import numpy as np import pytest import laspy def check_chunked_reading_gives_expected_points( groundtruth_las: laspy.LasData, reader: laspy.LasReader, iter_size: int ): """Checks that the points read by the reader are the same as groundtruth points.""" assert groundtruth_las.point_format == reader.header.point_format for i, points in enumerate(reader.chunk_iterator(iter_size)): expected_points = groundtruth_las.points[i * iter_size : (i + 1) * iter_size] for dim_name in points.array.dtype.names: assert np.allclose( expected_points[dim_name], points[dim_name] ), f"{dim_name} not equal" def test_chunked_las_reading_gives_expected_points(las_file_path): """ Test chunked LAS reading """ with laspy.open(las_file_path) as las_reader: with laspy.open(las_file_path) as reader: las = las_reader.read() check_chunked_reading_gives_expected_points(las, reader, iter_size=50) def test_chunked_laz_reading_gives_expected_points(laz_file_path, laz_backend): """ Test LAZ reading in chunked mode with different backends """ with laspy.open(laz_file_path) as las_reader: with laspy.open(laz_file_path, laz_backend=laz_backend) as laz_reader: expected_las = las_reader.read() check_chunked_reading_gives_expected_points( expected_las, laz_reader, iter_size=50 ) @pytest.mark.parametrize("backend", laspy.LazBackend.detect_available() + (None,)) def test_chunked_writing_gives_expected_points(file_path, backend): """ Write in chunked mode then test that the points are correct """ original_las = laspy.read(file_path) iter_size = 51 do_compress = True if backend is not None else False with io.BytesIO() as tmp_output: with laspy.open( tmp_output, mode="w", closefd=False, header=original_las.header, do_compress=do_compress, laz_backend=backend, ) as las: for i in range(int(math.ceil(len(original_las.points) / iter_size))): original_points = original_las.points[ i * iter_size : (i + 1) * iter_size ] las.write_points(original_points) tmp_output.seek(0) with laspy.open(tmp_output, closefd=False) as reader: check_chunked_reading_gives_expected_points(original_las, reader, iter_size) @pytest.mark.parametrize("backend", laspy.LazBackend.detect_available() + (None,)) def test_chunked_dimension_modification(file_path, backend): """ Test that when using chunked mode, if we modify the values in the chunks before writing them the values are actually modified. """ mem_dest = io.BytesIO() # Read of file in chunked mode modify some values before writing them # to a new file with laspy.open(file_path, laz_backend=backend) as reader: with laspy.open( mem_dest, mode="w", laz_backend=backend, header=reader.header, closefd=False ) as dest: for points in reader.chunk_iterator(50): # try a sub field points.classification += 1 # try a normal field points.user_data += 2 # try a scaled field points.x += 10.0 dest.write_points(points) mem_dest.seek(0) # Prepare out ground truth ground_truth_las = laspy.read(file_path) ground_truth_las.classification += 1 ground_truth_las.user_data += 2 ground_truth_las.x += 10.0 reader = laspy.open(mem_dest, laz_backend=backend) check_chunked_reading_gives_expected_points(ground_truth_las, reader, 42) laspy-laspy-a32c7aa/tests/test_common.py000066400000000000000000000303571463461040100205250ustar00rootroot00000000000000import io from pathlib import Path import numpy as np import pytest import laspy from laspy.lib import write_then_read_again from . import conftest simple_las = conftest.SIMPLE_LAS_FILE_PATH simple_laz = conftest.SIMPLE_LAZ_FILE_PATH vegetation1_3_las = conftest.VEGETATION1_3_LAS_FILE_PATH test1_4_las = conftest.TEST1_4_LAS_FILE_PATH extra_bytes_las = conftest.EXTRA_BYTES_LAS_FILE_PATH extra_bytes_laz = conftest.EXTRA_BYTES_LAZ_FILE_PATH plane_laz = conftest.PLANE_LAZ_FILE_PATH autzen_las = conftest.AUTZEN_FILE_PATH autzen_geo_proj_las = conftest.AUTZEN_GEO_PROJ_FILE_PATH skip_if_no_laz_backend = pytest.mark.skipif( len(laspy.LazBackend.detect_available()) == 0, reason="No Laz Backend installed" ) if not laspy.LazBackend.detect_available(): do_compression = [False] all_file_paths = [simple_las, vegetation1_3_las, test1_4_las, extra_bytes_las] else: do_compression = [False, True] all_file_paths = [ simple_las, simple_laz, vegetation1_3_las, test1_4_las, plane_laz, extra_bytes_laz, extra_bytes_las, ] @pytest.fixture(params=all_file_paths) def las(request): return laspy.read(request.param) @pytest.fixture(params=[simple_las, vegetation1_3_las]) def all_las_but_1_4(request): return laspy.read(request.param) @pytest.fixture(params=[simple_las, vegetation1_3_las, test1_4_las, extra_bytes_las]) def las_path_fixture(request): return request.param @pytest.fixture(params=[simple_laz, extra_bytes_laz, plane_laz]) def all_laz_path(request): return request.param def dim_does_not_exists(las, dim_name): try: _ = getattr(las, dim_name) except AttributeError: return True return False def dim_does_exists(las, dim_name): try: _ = getattr(las, dim_name) except AttributeError: return False return True def test_change_format(las): in_version = las.header.version las = laspy.convert(las, point_format_id=2) las = write_then_read_again(las) assert las.points.point_format.id == 2 assert las.header.point_format.id == 2 assert las.header.version == in_version assert dim_does_not_exists(las, "gps_time") las = laspy.convert(las, point_format_id=1) las = write_then_read_again(las) assert las.points.point_format.id == 1 assert las.header.point_format.id == 1 assert las.header.version == in_version assert dim_does_not_exists(las, "red") assert dim_does_not_exists(las, "green") assert dim_does_not_exists(las, "blue") las = laspy.convert(las, point_format_id=0) las = write_then_read_again(las) assert las.points.point_format.id == 0 assert las.header.point_format.id == 0 assert las.header.version == in_version assert dim_does_not_exists(las, "red") assert dim_does_not_exists(las, "green") assert dim_does_not_exists(las, "blue") assert dim_does_not_exists(las, "gps_time") las = laspy.convert(las, point_format_id=8) las = write_then_read_again(las) assert str(las.header.version) == "1.4" assert las.points.point_format.id == 8 assert las.header.point_format.id == 8 assert dim_does_exists(las, "red") assert dim_does_exists(las, "green") assert dim_does_exists(las, "blue") assert dim_does_exists(las, "nir") las = laspy.convert(las, point_format_id=7) las = write_then_read_again(las) assert str(las.header.version) == "1.4" assert las.points.point_format.id == 7 assert las.header.point_format.id == 7 assert dim_does_exists(las, "red") assert dim_does_exists(las, "green") assert dim_does_exists(las, "blue") assert dim_does_not_exists(las, "nir") las = laspy.convert(las, point_format_id=6) las = write_then_read_again(las) assert str(las.header.version) == "1.4" assert las.points.point_format.id == 6 assert las.header.point_format.id == 6 assert dim_does_not_exists(las, "red") assert dim_does_not_exists(las, "green") assert dim_does_not_exists(las, "blue") assert dim_does_not_exists(las, "nir") def test_rw_all_set_one(las): for dim_name in las.point_format.dimension_names: las[dim_name][:] = 1 for dim_name in las.point_format.dimension_names: assert np.all(las[dim_name] == 1), "{} not equal".format(dim_name) las2 = write_then_read_again(las) for dim_name in las.point_format.dimension_names: assert np.all(las[dim_name] == las2[dim_name]), "{} not equal".format(dim_name) def test_coords_do_not_break(las): xs, ys, zs = las.x, las.y, las.z las.x = xs las.y = ys las.z = zs assert np.allclose(xs, las.x) assert np.allclose(ys, las.y) assert np.allclose(zs, las.z) def test_coords_when_setting_offsets_and_scales(las): new_las = laspy.create() new_las.header.offsets = las.header.offsets new_las.header.scales = las.header.scales new_las.x = las.x new_las.y = las.y new_las.z = las.z assert np.allclose(las.x, new_las.x) assert np.allclose(las.y, new_las.y) assert np.allclose(las.z, new_las.z) def test_coords_when_using_create_from_header(las): new_las = laspy.LasData(las.header) new_las.x = las.x new_las.y = las.y new_las.z = las.z assert np.allclose(las.x, new_las.x) assert np.allclose(las.y, new_las.y) assert np.allclose(las.z, new_las.z) def test_slicing(las): las.points = las.points[len(las.points) // 2 :] @pytest.mark.parametrize("do_compress", do_compression) def test_can_write_then_re_read_files(las, do_compress): _las = write_then_read_again(las, do_compress=do_compress) def test_point_record_setitem_scaled_view(): las = laspy.read(simple_las) las.add_extra_dim( laspy.ExtraBytesParams( "lol", "uint64", scales=np.array([2.0]), offsets=np.array([0.0]) ) ) new_values = np.ones(len(las.points)) * 4 las.lol = new_values assert np.allclose(las.lol, new_values) def test_laspy_file_raises(): with pytest.raises(laspy.errors.LaspyException): laspy.file.File("some path") def test_lasdata_setitem_xyz_with_2d_array(): las = laspy.read(simple_las) xyz = np.ones(len(las), dtype="3f8") xyz[..., 1] = 2.0 xyz[..., 2] = 3.0 las[["x", "y", "z"]] = xyz assert np.all(las.x == xyz[..., 0]) assert np.all(las.y == xyz[..., 1]) assert np.all(las.z == xyz[..., 2]) def test_lasdata_setitem_xyz_with_structured_array(): las = laspy.read(simple_las) xyz = np.ones(len(las), dtype=[("x", "f8"), ("y", "f8"), ("z", "f8")]) xyz["y"] = 2.0 xyz["z"] = 3.0 las[["x", "y", "z"]] = xyz assert np.all(las.x == xyz["x"]) assert np.all(las.y == xyz["y"]) assert np.all(las.z == xyz["z"]) def test_lasdata_setitem_one_dimension(): las = laspy.read(simple_las) las[["x"]] = np.ones(len(las), "f8") * 17.0 assert np.all(las.x == 17.0) def test_lasdata_setitem_works_with_subfields(): las = laspy.read(simple_las) new_values = np.ones( len(las), dtype=[("classification", "u1"), ("return_number", "u1")] ) new_values["classification"] = 23 new_values["return_number"] = 2 las[["classification", "return_number"]] = new_values assert np.all(las.classification == 23) assert np.all(las.return_number == 2) def test_las_data_getitem_indices(): las = laspy.read(simple_las) las.classification[:] = 0 indices = np.array([1, 2, 3, 4]) sliced_las = las[indices] sliced_las.classification[:] = 1 assert np.all(sliced_las.classification == 1) # We expect sliced_las to give us a copy, # So original las is no modified assert np.all(las.classification == 0) def test_las_data_getitem_slice(): las = laspy.read(simple_las) las.classification[:] = 0 sliced_las = las[0:10] sliced_las.classification[:] = 1 assert np.all(sliced_las.classification == 1) # Slicing does not trigger, advanced indexing # so the underlying array is not a copy # https://numpy.org/doc/stable/reference/arrays.indexing.html assert np.all(las.classification[:10] == 1) assert np.all(las.classification[10:] == 0) def test_change_scaling(): """Check our change scaling method. We expect the scaled x,y,z not to change while the unscaled (integers) X,Y,Z should change. """ hdr = laspy.LasHeader() hdr.offsets = np.array([0.0, 0.0, 0.0]) hdr.scales = np.array([1.0, 1.0, 1.0]) las = laspy.LasData(hdr) las["x"] = np.array([1, 2, 3, 4]) las["y"] = np.array([1, 2, 3, 4]) las["z"] = np.array([1, 2, 3, 4]) assert np.all(las.x == [1, 2, 3, 4]) assert np.all(las.y == [1, 2, 3, 4]) assert np.all(las.z == [1, 2, 3, 4]) assert np.all(las.X == [1, 2, 3, 4]) assert np.all(las.Y == [1, 2, 3, 4]) assert np.all(las.Z == [1, 2, 3, 4]) saved_offsets = las.header.offsets.copy() las.change_scaling(scales=[0.5, 0.1, 0.01]) assert np.all(las.header.scales == [0.5, 0.1, 0.01]) assert np.all(las.header.offsets == saved_offsets) assert np.all(las.x == [1, 2, 3, 4]) assert np.all(las.y == [1, 2, 3, 4]) assert np.all(las.z == [1, 2, 3, 4]) assert np.all(las.X == [2, 4, 6, 8]) assert np.all(las.Y == [10, 20, 30, 40]) assert np.all(las.Z == [100, 200, 300, 400]) saved_scales = las.header.scales.copy() las.change_scaling(offsets=[1, 20, 30]) assert np.all(las.header.scales == saved_scales) assert np.all(las.header.offsets == [1, 20, 30]) assert np.all(las.x == [1, 2, 3, 4]) assert np.all(las.y == [1, 2, 3, 4]) assert np.all(las.z == [1, 2, 3, 4]) assert np.all(las.X == [0, 2, 4, 6]) assert np.all(las.Y == [-190, -180, -170, -160]) assert np.all(las.Z == [-2900, -2800, -2700, -2600]) def test_setting_x_y_z_on_las_data(): """ The goal of this test if to make sure that when setting the `x`,`y` and `z` attribute of a LasData object, the X,Y,Z version of the coordinates are properly set in the inner point record """ las = laspy.read(simple_las) new_las = laspy.create() new_las.x = las.x new_las.y = las.y new_las.z = las.z assert np.all(new_las.x == las.x) assert np.all(new_las.X == las.X) assert np.all(new_las.y == las.y) assert np.all(new_las.Y == las.Y) assert np.all(new_las.z == las.z) assert np.all(new_las.Z == las.Z) new_las = laspy.lib.write_then_read_again(new_las) assert np.all(new_las.x == las.x) assert np.all(new_las.X == las.X) assert np.all(new_las.y == las.y) assert np.all(new_las.Y == las.Y) assert np.all(new_las.z == las.z) assert np.all(new_las.Z == las.Z) def test_setting_xyz_on_las_data(): """ The goal of this test if to make sure that when setting the `xyz` attribute of a LasData object, the X,Y,Z version of the coordinates are properly set in the inner point record """ las = laspy.read(simple_las) new_las = laspy.create() new_las.xyz = las.xyz assert np.all(new_las.x == las.x) assert np.all(new_las.X == las.X) assert np.all(new_las.y == las.y) assert np.all(new_las.Y == las.Y) assert np.all(new_las.z == las.z) assert np.all(new_las.Z == las.Z) new_las = laspy.lib.write_then_read_again(new_las) assert np.all(new_las.x == las.x) assert np.all(new_las.X == las.X) assert np.all(new_las.y == las.y) assert np.all(new_las.Y == las.Y) assert np.all(new_las.z == las.z) assert np.all(new_las.Z == las.Z) def test_input_is_properly_closed_if_opening_fails(): data = io.BytesIO() assert data.closed is False # This failed because file is empty # so its the LasReader.__init__ that fails to read the header # We should still close the input in that case with pytest.raises(laspy.errors.LaspyException): _ = laspy.read(data) assert data.closed is True # Same but with closefd = False, meaning we should not close data = io.BytesIO() assert data.closed is False with pytest.raises(laspy.errors.LaspyException): _ = laspy.read(data, closefd=False) assert data.closed is False @pytest.mark.parametrize("backend", laspy.LazBackend.detect_available()) def test_create_and_write_compressed_wavepackets_formats(backend): for fmt in (4, 5, 9, 10): las = laspy.create(point_format=fmt) _ = write_then_read_again(las, do_compress=True, laz_backend=backend) laspy-laspy-a32c7aa/tests/test_constants.py000066400000000000000000000022231463461040100212400ustar00rootroot00000000000000import laspy from laspy import PointFormat def test_lost_dims(): assert set(laspy.point.format.lost_dimensions(3, 0)) == { "red", "green", "blue", "gps_time", } assert set(laspy.point.format.lost_dimensions(2, 0)) == {"red", "green", "blue"} assert set(laspy.point.format.lost_dimensions(1, 0)) == {"gps_time"} assert set(laspy.point.format.lost_dimensions(0, 0)) == set() assert set(laspy.point.format.lost_dimensions(0, 1)) == set() assert set(laspy.point.format.lost_dimensions(0, 2)) == set() assert set(laspy.point.format.lost_dimensions(0, 3)) == set() def test_has_waveform(): for i in (4, 5, 9, 10): assert PointFormat( i ).has_waveform_packet, "Point format {} should have waveform".format(i) for i in (0, 1, 2, 3, 6, 7, 8): assert not PointFormat( i ).has_waveform_packet, "Point format {} should not have waveform".format(i) def test_extra_bytes_struct_size(): assert laspy.vlrs.known.ExtraBytesStruct.size() == 192 def test_waveform_packet_struct_size(): assert laspy.vlrs.known.WaveformPacketStruct.size() == 26 laspy-laspy-a32c7aa/tests/test_conversion.py000066400000000000000000000015331463461040100214140ustar00rootroot00000000000000import numpy as np import pytest import laspy from laspy.lib import write_then_read_again @pytest.mark.parametrize("target_point_format_id", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) def test_point_format_conversion_copies_field_values(file_path, target_point_format_id): original = laspy.read(file_path) converted = laspy.convert(original, point_format_id=target_point_format_id) converted = write_then_read_again(converted) converted_dimension_names = set(converted.point_format.dimension_names) dimension_expected_to_be_kept = [ dim_name for dim_name in original.point_format.dimension_names if dim_name in converted_dimension_names ] for dim_name in dimension_expected_to_be_kept: assert np.allclose( converted[dim_name], original[dim_name] ), "{} not equal".format(dim_name) laspy-laspy-a32c7aa/tests/test_copc.py000066400000000000000000000157701463461040100201630ustar00rootroot00000000000000import io import subprocess import sys from pathlib import Path import numpy as np import pytest import laspy SIMPLE_COPC_FILE = Path(__file__).parent / "data" / "simple.copc.laz" try: import requests except ModuleNotFoundError: requests = None try: import RangeHTTPServer except ModuleNotFoundError: RangeHTTPServer = None @pytest.mark.parametrize( "backend", [ pytest.param( laspy.LazBackend.Laszip, marks=pytest.mark.skipif("not laspy.LazBackend.Laszip.is_available()"), ), pytest.param( laspy.LazBackend.Lazrs, marks=pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()"), ), pytest.param( laspy.LazBackend.LazrsParallel, marks=pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()"), ), ], ) def test_reading_copc_file_normal_laz_file(backend): # COPC files are LAZ files with data arranged # in a special way that is still compatible with # standard file. # So we must be able to read a copc file as if it was # a classical LAZ las = laspy.read(SIMPLE_COPC_FILE, laz_backend=backend) assert las.header.version == "1.4" assert las.header.point_format == laspy.PointFormat(7) assert len(las) == 1065 @pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file(): with laspy.CopcReader.open(SIMPLE_COPC_FILE) as copc_reader: assert copc_reader.header.version == "1.4" assert copc_reader.header.point_format == laspy.PointFormat(7) points = copc_reader.query(resolution=50) assert len(points) == 24 @pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file_with_page(): path = SIMPLE_COPC_FILE.with_name("simple_with_page.copc.laz") point_count = laspy.read(path).header.point_count with laspy.CopcReader.open(path) as copc_reader: points = copc_reader.query() assert point_count == 1065 == len(points) @pytest.mark.skipif("laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file_proper_error_if_no_lazrs(): with pytest.raises(laspy.errors.LazError): with laspy.CopcReader.open(SIMPLE_COPC_FILE) as _: pass @pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file_object(): with open(SIMPLE_COPC_FILE, "rb") as fh: with laspy.CopcReader.open(fh) as copc_reader: assert copc_reader.header.version == "1.4" assert copc_reader.header.point_format == laspy.PointFormat(7) points = copc_reader.query(resolution=50) assert len(points) == 24 @pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file_object_with_page(): path = SIMPLE_COPC_FILE.with_name("simple_with_page.copc.laz") point_count = laspy.read(path).header.point_count with open(path, "rb") as fh: with laspy.CopcReader.open(fh) as copc_reader: points = copc_reader.query() assert point_count == 1065 == len(points) @pytest.mark.skipif("laspy.LazBackend.Lazrs.is_available()") def test_querying_copc_local_file_object_proper_error_if_no_lazrs(): with pytest.raises(laspy.errors.LazError): with open(SIMPLE_COPC_FILE, "rb") as fh: with laspy.CopcReader.open(fh) as _: pass @pytest.mark.skipif( not ( laspy.LazBackend.Lazrs.is_available() and requests is not None and RangeHTTPServer is not None ), reason="neither lazrs, nor requests, nor RangeHTTPServer are installed", ) def test_copc_over_http(): server_proc = subprocess.Popen( [sys.executable, "-m", "RangeHTTPServer"], cwd=str(Path(__file__).parent) ) with laspy.CopcReader.open( "http://localhost:8000/data/simple.copc.laz" ) as copc_reader: assert copc_reader.header.version == "1.4" assert copc_reader.header.point_format == laspy.PointFormat(7) points = copc_reader.query(resolution=50) assert len(points) == 24 server_proc.terminate() @pytest.mark.parametrize( "exc_type,backend", [ pytest.param( laspy.LaspyException, laspy.LazBackend.Laszip, marks=pytest.mark.skipif("not laspy.LazBackend.Laszip.is_available()"), ), pytest.param( NotImplementedError, laspy.LazBackend.Lazrs, marks=pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()"), ), pytest.param( NotImplementedError, laspy.LazBackend.LazrsParallel, marks=pytest.mark.skipif("not laspy.LazBackend.Lazrs.is_available()"), ), ], ) def test_writing_copc_file_fails(exc_type, backend): las = laspy.read(SIMPLE_COPC_FILE, laz_backend=backend) with pytest.raises(exc_type): with io.BytesIO() as output: las.write(output, laz_backend=backend) @pytest.mark.parametrize( "backend", [ pytest.param( laspy.LazBackend.Lazrs, marks=pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="lazrs not installed" ), ), pytest.param( laspy.LazBackend.LazrsParallel, marks=pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="lazrs not installed" ), ), ], ) def test_copc_selective_decompression(backend): # We only decompress X,Y, return number, number of returns, classification selection = laspy.DecompressionSelection.base().decompress_classification() with laspy.CopcReader.open(SIMPLE_COPC_FILE) as copc_reader: fully_decompressed_points = copc_reader.query() with laspy.CopcReader.open( SIMPLE_COPC_FILE, decompression_selection=selection ) as copc_reader: partially_decompressed_points = copc_reader.query() print( np.sum( fully_decompressed_points.classification == partially_decompressed_points.classification ), len(fully_decompressed_points), ) assert np.all(fully_decompressed_points.X == partially_decompressed_points.X) assert np.all(fully_decompressed_points.Y == partially_decompressed_points.Y) assert np.all( fully_decompressed_points.return_number == partially_decompressed_points.return_number ) assert np.all( fully_decompressed_points.number_of_returns == partially_decompressed_points.number_of_returns ) # assert np.all( # fully_decompressed_points.classification == partially_decompressed_points.classification # ) # Since COPC uses variable chunk size its easier to test that # values are all not eq between fully and partially decompressed assert np.any( partially_decompressed_points.point_source_id != fully_decompressed_points.point_source_id ) assert np.any(partially_decompressed_points.Z != fully_decompressed_points.Z) laspy-laspy-a32c7aa/tests/test_creation.py000066400000000000000000000111141463461040100210270ustar00rootroot00000000000000import io import numpy as np import pytest import laspy from laspy import PointFormat from tests.test_common import simple_las, test1_4_las, write_then_read_again @pytest.fixture() def file1_4(): return laspy.read(test1_4_las) @pytest.fixture() def file(): return laspy.read(simple_las) def test_xyz(): las = laspy.create() shape = (150,) las.X = np.zeros(shape, dtype=np.int32) las.Y = np.ones(shape, dtype=np.int32) las.Z = np.zeros(shape, dtype=np.int32) las.Z[:] = -152 las = write_then_read_again(las) assert np.all(las.X == 0) assert np.all(las.Y == 1) assert np.all(las.Z == -152) def test_wrong_version(): for i in range(6, 8): with pytest.raises(laspy.errors.LaspyException): _ = laspy.create(point_format=i, file_version="1.2") def test_good_version_is_used(): for i in range(6, 8): las = laspy.create(point_format=i) assert las.header.version.major == 1 assert las.header.version.minor == 4 def test_create_fmt_0(): new = laspy.create(point_format=0) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) with pytest.raises(ValueError): new.gps_time = np.zeros(len(new.points), np.float64) def test_create_fmt_1(): new = laspy.create(point_format=1) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) with pytest.raises(ValueError): new.red = np.zeros(len(new.points), np.uint16) gps_time = np.random.uniform(0, 25641, len(new.points)) new.gps_time = gps_time assert np.allclose(new.gps_time, gps_time) new = write_then_read_again(new) assert np.allclose(new.gps_time, gps_time) def test_create_fmt_2(file): new = laspy.create(point_format=2) with pytest.raises(ValueError): new.gps_time = file.gps_time new.red = file.red new.green = file.green new.blue = file.blue assert np.allclose(new.red, file.red) assert np.allclose(new.green, file.green) assert np.allclose(new.blue, file.blue) new = write_then_read_again(new) assert np.allclose(new.red, file.red) assert np.allclose(new.green, file.green) assert np.allclose(new.blue, file.blue) def test_create_fmt_3(file): new = laspy.create(point_format=3) new.red = file.red new.green = file.green new.blue = file.blue new.gps_time = file.gps_time assert np.allclose(new.red, file.red) assert np.allclose(new.green, file.green) assert np.allclose(new.blue, file.blue) assert np.allclose(new.gps_time, file.gps_time) new = write_then_read_again(new) assert np.allclose(new.red, file.red) assert np.allclose(new.green, file.green) assert np.allclose(new.blue, file.blue) assert np.allclose(new.gps_time, file.gps_time) def test_create_fmt_6(file1_4): new = laspy.create(point_format=6) assert str(new.header.version) == "1.4" dim_names_fmt_6 = PointFormat(6).dtype().names for dim_name in dim_names_fmt_6: new[dim_name] = file1_4[dim_name] for dim_name in dim_names_fmt_6: assert np.allclose(new[dim_name], file1_4[dim_name]), "{} not equal".format( dim_name ) new = write_then_read_again(new) for dim_name in dim_names_fmt_6: assert np.allclose(new[dim_name], file1_4[dim_name]), "{} not equal".format( dim_name ) @pytest.mark.parametrize("laz_backend", (None,) + laspy.LazBackend.detect_available()) def test_writing_empty_file(laz_backend): las = laspy.create() with io.BytesIO() as out: if laz_backend is None: las.write(out) else: las.write(out, laz_backend=laz_backend) def test_changing_scales_offset_after_create(): las = laspy.create(point_format=8, file_version="1.4") las.header.x_scale = 0.0001 las.header.y_scale = 0.0001 las.header.z_scale = 0.0001 las.x = np.ones((10,)) * 11 las.y = np.ones((10,)) * 12 las.z = np.ones((10,)) * 13 las.x[0] = 1 las.y[0] = 2 las.z[0] = 3 las.update_header() assert np.all(las.header.mins == [1, 2, 3]) assert np.all(las.header.maxs == [11, 12, 13]) assert las.x.min() == 1 assert las.y.min() == 2 assert las.z.min() == 3 assert las.x.max() == 11 assert las.y.max() == 12 assert las.z.max() == 13 laspy-laspy-a32c7aa/tests/test_crs.py000066400000000000000000000147171463461040100200260ustar00rootroot00000000000000import json import os import subprocess from pathlib import Path from typing import Dict import pytest import laspy from laspy.vlrs.geotiff import GeographicTypeGeoKey, ProjectedCSTypeGeoKey from laspy.vlrs.known import GeoKeyDirectoryVlr from tests.test_common import autzen_geo_proj_las, autzen_las, test1_4_las try: import pyproj except ModuleNotFoundError: pyproj = None @pytest.fixture() def file_wkt(): return laspy.read(test1_4_las) @pytest.fixture() def file_geotiff(): return laspy.read(autzen_las) @pytest.fixture() def file_geotiff_geo_proj(): return laspy.read(autzen_geo_proj_las) @pytest.fixture() def file_with_both_wkt_and_geotiff_vlrs(): path = Path(__file__).parent / "data" / "file_with_both_wkt_and_geotiff_vlrs.las" return laspy.read(path) def has_pyproj() -> bool: return pyproj is not None @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_parse_crs_wkt(file_wkt): assert "Bound CRS" in file_wkt.header.parse_crs().type_name @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_parse_crs_geotiff(file_geotiff, file_geotiff_geo_proj): assert "Projected CRS" in file_geotiff.header.parse_crs().type_name assert ( file_geotiff.header.parse_crs().to_epsg() == file_geotiff_geo_proj.header.parse_crs().to_epsg() == 2994 ) geokeys1 = get_geokeys(file_geotiff.header) geokeys2 = get_geokeys(file_geotiff_geo_proj.header) assert ( geokeys1[ProjectedCSTypeGeoKey.id] == geokeys2[ProjectedCSTypeGeoKey.id] == 2994 ) assert GeographicTypeGeoKey.id not in geokeys1 assert geokeys2[GeographicTypeGeoKey.id] == 4152 def get_geokeys(header: laspy.LasHeader) -> Dict: geo_vlr = header.vlrs.get_by_id("LASF_Projection") for rec in geo_vlr: if isinstance(rec, GeoKeyDirectoryVlr): return {k.id: k.value_offset for k in rec.geo_keys} return {} @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_add_crs_wkt(): header = laspy.LasHeader(point_format=6, version="1.4") crs = pyproj.CRS.from_epsg(6432) header.add_crs(crs) lasf_proj = header.vlrs.get_by_id("LASF_Projection") assert len(lasf_proj) > 0 assert hasattr(lasf_proj[0], "string") assert lasf_proj[0].string == crs.to_wkt() assert header.global_encoding.wkt @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_handle_empty_crs_wkt_string(): header = laspy.LasHeader(point_format=6, version="1.4") empty_wkt_crs = laspy.vlrs.known.WktCoordinateSystemVlr(wkt_string="") header.vlrs.append(empty_wkt_crs) crs = header.parse_crs() assert crs is None @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_add_crs_geotiff(): """ Test adding geotiff crs seems ok """ header = laspy.LasHeader(point_format=3, version="1.2") crs = pyproj.CRS.from_epsg(6432) header.add_crs(crs) lasf_proj = header.vlrs.get_by_id("LASF_Projection") assert len(lasf_proj) > 0 assert hasattr(lasf_proj[0], "geo_keys") assert hasattr(lasf_proj[1], "strings") assert header.global_encoding.wkt == False las = laspy.LasData(header=header) las = laspy.lib.write_then_read_again(las) epsg = las.header.parse_crs().to_epsg() assert epsg == 6432, "epsg after read-write is not the same" @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_add_crs_compatibility(): header = laspy.LasHeader(point_format=3, version="1.4") crs = pyproj.CRS.from_epsg(6432) header.add_crs(crs, keep_compatibility=False) lasf_proj = header.vlrs.get_by_id("LASF_Projection") assert len(lasf_proj) > 0 assert hasattr(lasf_proj[0], "string") assert lasf_proj[0].string == crs.to_wkt() assert header.global_encoding.wkt def has_pdal(): try: subprocess.run(["pdal", "--version"], capture_output=True, check=True) except: return False else: return True def get_pdal_srs(filename): process = subprocess.run( ["pdal", "info", "--metadata", filename], capture_output=True, check=True ) json_output = json.loads(process.stdout.decode("utf-8"))["metadata"]["srs"] return json_output["wkt"], json_output["proj4"] def geotiff_crs_pdal_test(crs): header = laspy.LasHeader(point_format=3, version="1.2") header.add_crs(crs) tmp_filename = f"delete_me_pdal_test_cs_{crs.to_epsg()}.las" las = laspy.LasData(header=header) las.write(tmp_filename) try: pdal_wkt, _ = get_pdal_srs(tmp_filename) finally: os.remove(tmp_filename) # We don't use pdal's proj4 as its seems not complete enough # to be 100% equal, while the wkt seems ok assert pyproj.CRS.from_wkt(pdal_wkt) == crs @pytest.mark.skipif( not (has_pdal() and has_pyproj()), reason="PDAL and/or pyproj not found" ) def test_pdal_understands_our_geotiff_derived_projected_cs(): crs = pyproj.CRS.from_epsg(3945) geotiff_crs_pdal_test(crs) @pytest.mark.skipif( not (has_pdal() and has_pyproj()), reason="PDAL and/or pyproj not found" ) def test_pdal_understands_our_geotiff_geographic_cs(): crs = pyproj.CRS.from_epsg(4326) geotiff_crs_pdal_test(crs) @pytest.mark.skipif( not (has_pdal() and has_pyproj()), reason="PDAL and/or pyproj not found" ) def test_pdal_understands_our_geotiff_projected_cs(): crs = pyproj.CRS.from_epsg(6432) geotiff_crs_pdal_test(crs) @pytest.mark.skipif(not has_pyproj(), reason="pyproj not installed") def test_preference_option(file_with_both_wkt_and_geotiff_vlrs): header = file_with_both_wkt_and_geotiff_vlrs.header expected_wkt_crs = """PROJCS["NAD83_2011_Nebraska_ft",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD83_NATIONAL_SPATIAL_REFERENCE_SYSTEM_2011",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["scale_factor",1],PARAMETER["standard_parallel_1",40],PARAMETER["standard_parallel_2",43],PARAMETER["central_meridian",-100],PARAMETER["latitude_of_origin",39.83333333333334],PARAMETER["false_easting",1640416.666666667],PARAMETER["false_northing",0],UNIT["Foot_US",0.30480060960121924]]""" expected_geotiff_crs = "epsg:32104" crs = header.parse_crs() assert str(crs) == expected_wkt_crs crs = header.parse_crs(prefer_wkt=True) assert str(crs) == expected_wkt_crs crs = header.parse_crs(prefer_wkt=False) assert str(crs).lower() == expected_geotiff_crs laspy-laspy-a32c7aa/tests/test_extrabytes.py000066400000000000000000000300231463461040100214150ustar00rootroot00000000000000""" Tests related to extra bytes """ import numpy as np import pytest import laspy from laspy.lib import write_then_read_again from tests.conftest import ( EXTRA_BYTES_LAS_FILE_PATH, SIMPLE_LAS_FILE_PATH, UNREGISTERED_EXTRA_BYTES_LAS, ) def test_read_example_extra_bytes_las(las_file_path_with_extra_bytes): """ Test that we can read the files with extra bytes with have as examples """ las = laspy.read(las_file_path_with_extra_bytes) expected_names = [ "Colors", "Reserved", "Flags", "Intensity", "Time", ] assert expected_names == list(las.point_format.extra_dimension_names) def test_read_write_example_extra_bytes_file(las_file_path_with_extra_bytes): """ Test that we can write extra bytes without problem """ original = laspy.read(las_file_path_with_extra_bytes) las = write_then_read_again(original) for name in original.point_format.dimension_names: assert np.allclose(las[name], original[name]) def test_adding_extra_bytes_keeps_values_of_all_existing_fields( extra_bytes_params, simple_las_path ): """ Test that when extra bytes are added, the existing fields keep their values and then we don't somehow drop them """ las = laspy.read(simple_las_path) las.add_extra_dim(extra_bytes_params) original = laspy.read(simple_las_path) for name in original.point_format.dimension_names: assert np.allclose(las[name], original[name]) def test_creating_extra_bytes(extra_bytes_params, simple_las_path): """ Test that we can create extra byte dimensions for each data type. And they can be written then read. """ las = laspy.read(simple_las_path) las.add_extra_dim(extra_bytes_params) assert np.allclose(las[extra_bytes_params.name], 0) las[extra_bytes_params.name][:] = 42 assert np.allclose(las[extra_bytes_params.name], 42) las = write_then_read_again(las) assert np.allclose(las[extra_bytes_params.name], 42) def test_creating_scaled_extra_bytes(extra_bytes_params, simple_las_path): las = laspy.read(simple_las_path) if extra_bytes_params.type.ndim == 1: num_elements = extra_bytes_params.type.shape[0] else: num_elements = 1 params = laspy.ExtraBytesParams( extra_bytes_params.name, extra_bytes_params.type, offsets=np.array([2.0] * num_elements), scales=np.array([1.0] * num_elements), ) las.add_extra_dim(params) assert np.allclose(las[extra_bytes_params.name], 2.0) las[params.name][:] = 42.0 assert np.allclose(las[extra_bytes_params.name], 42.0) las = write_then_read_again(las) assert np.allclose(las[extra_bytes_params.name], 42.0) def test_scaled_extra_byte_array_type(simple_las_path): """ To make sure we handle scaled extra bytes """ las = laspy.read(simple_las_path) las.add_extra_dim( laspy.ExtraBytesParams( name="test_dim", type="3int32", scales=np.array([1.0, 2.0, 3.0], np.float64), offsets=np.array([10.0, 20.0, 30.0], np.float64), ) ) assert np.allclose(las.test_dim[..., 0], 10.0) assert np.allclose(las.test_dim[..., 1], 20.0) assert np.allclose(las.test_dim[..., 2], 30.0) las.test_dim[..., 0][:] = 42.0 las.test_dim[..., 1][:] = 82.0 las.test_dim[..., 2][:] = 123.0 assert np.allclose(las.test_dim[..., 0], 42.0) assert np.allclose(las.test_dim[..., 1], 82.0) assert np.allclose(las.test_dim[..., 2], 123.0) las = write_then_read_again(las) assert np.allclose(las.test_dim[..., 0], 42.0) assert np.allclose(las.test_dim[..., 1], 82.0) assert np.allclose(las.test_dim[..., 2], 123.0) def test_extra_bytes_description_is_ok(extra_bytes_params, simple_las_path): """ Test that the description in ok """ las = laspy.read(simple_las_path) las.add_extra_dim(extra_bytes_params) extra_dim_info = list(las.point_format.extra_dimensions) assert len(extra_dim_info) == 1 assert extra_dim_info[0].description == extra_bytes_params.description las = write_then_read_again(las) extra_dim_info = list(las.point_format.extra_dimensions) assert len(extra_dim_info) == 1 assert extra_dim_info[0].description == extra_bytes_params.description def test_extra_bytes_with_spaces_in_name(simple_las_path): """ Test that we can create extra bytes with spaces in their name and that they can be accessed using __getitem__ ( [] ) as de normal '.name' won't work """ las = laspy.read(simple_las_path) las.add_extra_dim(laspy.ExtraBytesParams(name="Name With Spaces", type="int32")) assert np.all(las["Name With Spaces"] == 0) las["Name With Spaces"][:] = 789_464 las = write_then_read_again(las) np.all(las["Name With Spaces"] == 789_464) def test_conversion_keeps_eb(las_file_path_with_extra_bytes): """ Test that converting point format does not lose extra bytes """ original = laspy.read(las_file_path_with_extra_bytes) converted_las = laspy.convert(original, point_format_id=0) assert len(list(original.point_format.extra_dimension_names)) == 5 assert list(converted_las.point_format.extra_dimension_names) == list( original.point_format.extra_dimension_names ) for name in converted_las.point_format.extra_dimension_names: assert np.allclose(converted_las[name], original[name]) converted_las = laspy.lib.write_then_read_again(converted_las) assert list(converted_las.point_format.extra_dimension_names) == list( original.point_format.extra_dimension_names ) for name in converted_las.point_format.extra_dimension_names: assert np.allclose(converted_las[name], original[name]) def test_creating_bytes_with_name_too_long(simple_las_path): """ Test error thrown when creating extra bytes with a name that is too long """ las = laspy.read(simple_las_path) with pytest.raises(ValueError) as error: las.add_extra_dim( laspy.ExtraBytesParams( name="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus", type="int32", ) ) assert str(error.value) == "bytes too long (70, maximum length 32)" def test_creating_bytes_with_description_too_long(simple_las_path): """ Test error thrown when creating extra bytes with a name that is too long """ las = laspy.read(simple_las_path) with pytest.raises(ValueError) as error: las.add_extra_dim( laspy.ExtraBytesParams( name="a fine name", type="int32", description="Lorem ipsum dolor sit amet, consectetur adipiscing elit." " Sed non risus", ) ) assert str(error.value) == "bytes too long (70, maximum length 32)" def test_creating_extra_byte_with_invalid_type(simple_las_path): """ Test the error message when creating extra bytes with invalid type """ las = laspy.read(simple_las_path) with pytest.raises(TypeError): las.add_extra_dim(laspy.ExtraBytesParams("just_a_test", "i16")) def test_cant_create_scaled_extra_bytes_without_both_offsets_and_scales(): las = laspy.create() with pytest.raises(ValueError): las.add_extra_dim( laspy.ExtraBytesParams("must fail", "int64", scales=np.array([0.1])) ) with pytest.raises(ValueError): las.add_extra_dim( laspy.ExtraBytesParams("must fail", "int64", offsets=np.array([0.1])) ) @pytest.mark.parametrize("num_elements", [1, 2, 3]) def test_cant_create_scaled_extra_bytes_with_offsets_array_smaller(num_elements): las = laspy.create() with pytest.raises(ValueError) as error: las.add_extra_dim( laspy.ExtraBytesParams( "must fail", f"{num_elements}int64", scales=np.array([0.1] * num_elements), offsets=np.array([0.0] * (num_elements - 1)), ) ) assert ( str(error.value) == f"len(offsets) ({num_elements - 1}) is not the same as the number of elements ({num_elements})" ) @pytest.mark.parametrize("num_elements", [1, 2, 3]) def test_cant_create_scaled_extra_bytes_with_scales_array_smaller(num_elements): las = laspy.create() with pytest.raises(ValueError) as error: las.add_extra_dim( laspy.ExtraBytesParams( "must fail", f"{num_elements}int64", scales=np.array([0.1] * (num_elements - 1)), offsets=np.array([0.0] * num_elements), ) ) assert ( str(error.value) == f"len(scales) ({num_elements - 1}) is not the same as the number of elements ({num_elements})" ) def test_handle_unregistered_extra_bytes(): # Test that if the point size in the header is bigger # than the expected point size of the point format # and no extra bytes vlr is present, we can still read and # write the file def check_file(las): assert las.point_format.id == 6 assert las.point_format.size == 34 assert las.point_format.num_extra_bytes == 4 assert np.all(las.x == np.array([1, 2, 3, 4])) assert np.all(las.y == np.array([1, 2, 3, 4])) assert np.all(las.z == np.array([1, 2, 3, 4])) assert list(las.point_format.extra_dimension_names) == ["ExtraBytes"] assert las.vlrs == [] las = laspy.read(UNREGISTERED_EXTRA_BYTES_LAS) check_file(las) las = laspy.lib.write_then_read_again(las) check_file(las) def test_remove_standard_dimension_fails(): """ Test we cannot remove non-extra dimension """ las = laspy.read(SIMPLE_LAS_FILE_PATH) for name in las.point_format.standard_dimension_names: with pytest.raises(laspy.LaspyException): las.remove_extra_dims(name) def test_remove_all_extra_dimensions(): """ Test that if we remove all extra bytes of a file, the values of standard fields are not altered This also test that writing files from which we deleted extra bytes works """ las = laspy.read(EXTRA_BYTES_LAS_FILE_PATH) extra_dimension_names = list(las.point_format.extra_dimension_names) assert len(extra_dimension_names) > 0, ( "If the input file has no extra dimension, " "this test is useless" ) copied_standard_values = [ (name, np.copy(las[name])) for name in las.point_format.standard_dimension_names ] las.remove_extra_dims(extra_dimension_names) for name, copied_value in copied_standard_values: assert np.all(las[name] == copied_value) new_las = laspy.lib.write_then_read_again(las) assert new_las.point_format == las.point_format for name, copied_value in copied_standard_values: assert np.all(new_las[name] == copied_value) def test_remove_some_extra_dimensions(): """ Test that if we remove some extra bytes of a file, the values of standard fields as well as kept extra bytes are not altered This also test that writing files from which we deleted extra bytes works """ las = laspy.read(EXTRA_BYTES_LAS_FILE_PATH) extra_dimension_names = list(las.point_format.extra_dimension_names) assert len(extra_dimension_names) > 0, ( "If the input file has no extra dimension, " "this test is useless" ) extra_dimensions_to_keep = ["Colors", "Time"] dims_to_copy = ( list(las.point_format.standard_dimension_names) + extra_dimensions_to_keep ) copied_standard_values = [(name, np.copy(las[name])) for name in dims_to_copy] extra_dims_to_remove = [ name for name in las.point_format.extra_dimension_names if name not in extra_dimensions_to_keep ] las.remove_extra_dims(extra_dims_to_remove) for name, copied_value in copied_standard_values: assert np.all(las[name] == copied_value) new_las = laspy.lib.write_then_read_again(las) assert new_las.point_format == las.point_format for name, copied_value in copied_standard_values: assert np.all(new_las[name] == copied_value) laspy-laspy-a32c7aa/tests/test_field_views.py000066400000000000000000000121151463461040100215250ustar00rootroot00000000000000import numpy as np import pytest import laspy from laspy.point.dims import ScaledArrayView, SubFieldView def test_sub_field_view_behaves_like_array(): """This function is used to test if the SubFieldView class works & has an API that is similar to np.ndarray """ array = np.zeros(10, np.uint8) field = SubFieldView(array, 0b0000_0010) assert len(field) == 10 assert np.all(field == 0) assert np.all(field[:] == 0) assert field.max() == 0 assert np.max(field) == 0 assert field.min() == 0 assert np.min(field) == 0 assert np.min(field) == field.min() assert np.max(field) == field.max() field[:] = 1 assert np.all(field == 1) assert np.all(field[:] == 1) assert field.max() == 1 assert np.max(field) == 1 assert field.min() == 1 assert np.min(field) == 1 assert np.all(field > 0) assert not np.all(field < 0) assert np.all(field >= 1) assert np.all(field <= 1) # check that the real array is properly modified assert np.all(array == 2) with pytest.raises(OverflowError): field[4] = 2 assert np.mean(field) == 1 def test_array_view_int_index_return_singular_elements(): a = np.array([1, 2, 3, 4], np.int32) s = SubFieldView(a, 0x00_00_00_FF) for i in range(len(s)): assert type(s[i]) in (np.int32, np.int64) assert a[i] == s[i] s = ScaledArrayView(a, scale=2.0, offset=0.0) for i in range(len(s)): assert type(s[i]) == np.float64 assert (a[i] * 2.0) == s[i] def test_scaled_array_view_ellipsis_indexing(simple_las_path): las = laspy.read(simple_las_path) las.add_extra_dim( laspy.ExtraBytesParams( name="test_dim", type="3int32", scales=np.array([1.0, 2.0, 3.0], np.float64), offsets=np.array([10.0, 20.0, 30.0], np.float64), ) ) # Query all the points in the 2nd dimension assert np.all(las.test_dim[..., 2] == 30.0) # Query the 10 nth point, we expect all its dimensions assert np.all(las.test_dim[10, ...] == [10.0, 20.0, 30.0]) def test_scaled_array_view_indexing_with_array_or_list(simple_las_path): las = laspy.read(simple_las_path) las.add_extra_dim( laspy.ExtraBytesParams( name="test_dim", type="3int32", scales=np.array([1.0, 2.0, 3.0], np.float64), offsets=np.array([10.0, 20.0, 30.0], np.float64), ) ) d = las.test_dim[[0, 1, 10, 12]] assert d.ndim == 2 assert d.shape == (4, 3) assert np.all(d[..., 0] == 10.0) assert np.all(d[..., 1] == 20.0) assert np.all(d[..., 2] == 30.0) d2 = las.test_dim[np.array([0, 1, 10, 12])] assert np.all(d == d2) def test_sub_field_view_with_self(simple_las_path): las = laspy.read(simple_las_path) rn = np.array(las.return_number) order = np.argsort(las.return_number)[::-1] las.return_number[:] = las.return_number[order] assert np.all(las.return_number == rn[order]) def test_can_use_array_func_with_list(simple_las_path): las = laspy.read(simple_las_path) np.concatenate([las.return_number, las.classification]) np.concatenate([las.x, las.y]) def test_sub_field_as_array(): array = np.zeros(10, np.uint8) field = SubFieldView(array, 0b0000_0010) cpy = np.array(field) cpy[:] = 1 assert np.all(cpy == 1) assert np.all(field != 1) cpy[:] = 17 with pytest.raises(OverflowError): field[:] = cpy[:] # Here we just test that this can run, # We had an error about with our __array__ signature cpy[:] = field[:] assert np.all(cpy == field) def test_scaled_array_view(): array = np.zeros(10, np.int32) x = ScaledArrayView(array, 0.01, 10) assert np.max(x) == 10.0 assert np.min(x) == 10.0 assert np.min(x) == x.min() assert np.max(x) == x.max() assert np.all(x > 0.0) assert np.all(x < 18.0) assert np.all(x == 10.0) assert np.all(x != 17.0) assert np.mean(x) == 10.0 x[:] = 155.0 x[9] = 42.0 assert np.all(x[2:5] == 155.0) assert x[9] == 42.0 with pytest.raises(OverflowError): x[8] = np.finfo(np.float64).max def test_array_views_on_empty_things(): """ Test that __setitem__ of the Array views do not fail when the value is an empty array / sequence, to match the behaviour of numpy array """ array = np.zeros(0, np.int32) x = ScaledArrayView(array, 0.01, 10) # This shall not fail x[:] = np.zeros(0) array = np.zeros(0, np.uint8) field = SubFieldView(array, 0b0000_0010) # This shall not fail field[:] = np.zeros(0) def test_scaled_point_record_set_x_y_z(): record = laspy.ScaleAwarePointRecord.zeros( 5, point_format=laspy.PointFormat(3), scales=[1.0] * 3, offsets=[0.0] * 3 ) assert np.all(record.x == 0.0) assert np.all(record.y == 0.0) assert np.all(record.z == 0.0) record.x = 17.0 record.y = 17.12 record.z = np.array([293090.812739] * len(record)) assert np.all(record.x == 17.0) assert np.all(record.y == 17.12) assert np.all(record.z == 293090.812739) laspy-laspy-a32c7aa/tests/test_header.py000066400000000000000000000253311463461040100204610ustar00rootroot00000000000000import copy import io from datetime import date import numpy as np import pytest import laspy from laspy import LasHeader from laspy.lib import write_then_read_again from tests import test_common all_las_but_1_4 = test_common.all_las_but_1_4 def test_number_of_points_return_is_updated(all_las_but_1_4): las = all_las_but_1_4 nb_points = len(las.points) nb_slice = 3 r = las.return_number for i in reversed(range(nb_slice)): r[i * (nb_points // nb_slice) : (i + 1) * (nb_points // nb_slice)] = i + 1 las = test_common.write_then_read_again(las) assert ( tuple(las.header.number_of_points_by_return[:nb_slice]) == (nb_points // nb_slice,) * nb_slice ) assert tuple(las.header.number_of_points_by_return[nb_slice:]) == (0,) * ( len(las.header.number_of_points_by_return) - nb_slice ) def test_nb_points_return_1_4(): las = laspy.read(test_common.test1_4_las) r = las.return_number for i in range(15): r[i] = i + 1 r[15:] = 15 las = test_common.write_then_read_again(las) assert tuple(las.header.number_of_points_by_return) == ((1,) * 14) + ( len(las.points) - 14, ) def test_header_copy(): las = laspy.read(test_common.simple_las) header_copy = copy.copy(las.header) assert header_copy.point_format.id == las.header.point_format.id assert header_copy.version == las.header.version header_copy.point_format_id = 0 assert header_copy.point_format_id != las.header.point_format.id assert header_copy.version == las.header.version def test_set_uuid(): import uuid las = laspy.read(test_common.simple_las) u = uuid.uuid4() las.header.uuid = u las = test_common.write_then_read_again(las) assert las.header.uuid == u def test_set_offsets(): header = laspy.header.LasHeader() header.offsets = [0.5, 0.6, 0.7] assert 0.5 == header.x_offset assert 0.6 == header.y_offset assert 0.7 == header.z_offset assert [0.5, 0.6, 0.7] == list(header.offsets) def test_set_scales(): header = laspy.header.LasHeader() header.scales = [0.001, 0.001, 0.01] assert 0.001 == header.x_scale assert 0.001 == header.y_scale assert 0.01 == header.z_scale assert [0.001, 0.001, 0.01] == list(header.scales) def test_set_maxs(): header = laspy.header.LasHeader() values = [42.0, 1337.42, 553.3] header.maxs = values assert values[0] == header.x_max assert values[1] == header.y_max assert values[2] == header.z_max assert values == list(header.maxs) def test_set_mins(): header = laspy.header.LasHeader() values = [42.0, 1337.42, 553.3] header.mins = values assert values[0] == header.x_min assert values[1] == header.y_min assert values[2] == header.z_min assert values == list(header.mins) def test_point_count_stays_synchronized(): las = laspy.read(test_common.simple_las) assert las.header.point_count == len(las.points) las.points = las.points[:120] assert 120 == las.header.point_count assert las.header.point_count == len(las.points) def test_header_date(): las = laspy.read(test_common.extra_bytes_las) with io.BytesIO() as out: las.header.write_to(out) out.seek(0) header_2 = LasHeader.read_from(out) expected_date = date(year=2015, month=2, day=22) assert las.header.creation_date == expected_date assert las.header.creation_date == header_2.creation_date def test_set_vlrs_header(): """ Test that when setting the vlrs of a header, if the given vlr list has an extra bytes vlr, the header does not take it, as this header is specific """ las = laspy.read(test_common.extra_bytes_las) # test that it exists _ = las.vlrs.index("ExtraBytesVlr") hdr = laspy.LasHeader() hdr.vlrs = las.vlrs # Now it should not be in the hdr vlrs with pytest.raises(ValueError): _ = hdr.vlrs.index("ExtraBytesVlr") # but still in the original list _ = las.vlrs.index("ExtraBytesVlr") def test_extra_header_bytes(): las = laspy.read(test_common.simple_las) extra_bytes = "Some extra bytes between header and VLRs".encode() las.header.extra_header_bytes = extra_bytes assert las.header.extra_header_bytes == extra_bytes las = write_then_read_again(las) assert las.header.extra_header_bytes == extra_bytes def test_extra_vlr_bytes(): las = laspy.read(test_common.simple_las) extra_bytes = "Some extra bytes between VLRs and start of points".encode() las.header.extra_vlr_bytes = extra_bytes assert las.header.extra_vlr_bytes == extra_bytes las = write_then_read_again(las) assert las.header.extra_vlr_bytes == extra_bytes def test_header_update_after_slicing(): """Test that after slicing a LasData and after its header was updated, its header's bound correctly reflect the new points. """ las = laspy.read(test_common.simple_las) def dim_min_max_from_header(header, dim_name): if dim_name == "x": return header.x_min, header.x_max if dim_name == "y": return header.y_min, header.y_max if dim_name == "z": return header.z_min, header.z_max raise RuntimeError(f"Bad dim name {dim_name}") for dim in ("x", "y", "z"): values = las[dim] old_min, old_max = dim_min_max_from_header(las.header, dim) size = old_max - old_min new_max = old_min + (size * 0.75) new_min = old_min + (size * 0.25) mask = (new_min < values) & (values < new_max) las.points = las.points[mask] values = las[dim] new_header_min, new_header_max = dim_min_max_from_header(las.header, dim) assert ( new_header_max == values.max() ), "Header max value does not correspond to actual max value" assert ( new_header_min == values.min() ), "Header min value does not correspond to actual min value" assert new_header_min > old_min assert new_header_max < old_max def test_header_update_setting_points_on_new_las(): """Internally, when updating the header, its mins and maxs will temporarily be set to f64::max_value and f64::min_value. This test is to make sure those value are truly temporary. Even when setting the points to an empty record """ las = laspy.read(test_common.simple_las) new_las = laspy.create( point_format=las.header.point_format, file_version=las.header.version ) assert np.all(new_las.header.mins == [0.0, 0.0, 0.0]) assert np.all(new_las.header.maxs == [0.0, 0.0, 0.0]) assert np.sum(new_las.header.number_of_points_by_return) == 0 new_las.points = laspy.PackedPointRecord.empty(new_las.point_format) assert np.all(new_las.header.mins == [0.0, 0.0, 0.0]) assert np.all(new_las.header.maxs == [0.0, 0.0, 0.0]) assert np.sum(new_las.header.number_of_points_by_return) == 0 new_las.points = las.points.copy() assert np.all(new_las.header.mins == las.header.mins) assert np.all(new_las.header.maxs == las.header.maxs) assert np.all( new_las.header.number_of_points_by_return == las.header.number_of_points_by_return ) def test_writing_does_not_reset_customly_set_data(): """If the user does set a data in a LasHeader, the writer should not change it to date.today """ DATE = date(year=1990, month=11, day=21) las = laspy.read(test_common.simple_las) assert las.header.creation_date != DATE new_header = laspy.LasHeader( version=las.header.version, point_format=las.header.point_format ) assert new_header.creation_date == date.today() new_header.creation_date = DATE assert new_header.creation_date == DATE new_las = laspy.LasData(header=new_header, points=las.points) read_new_las = write_then_read_again(new_las) assert read_new_las.header.date == DATE assert new_las.header.date == DATE def test_not_setting_date_in_new_header_resets_to_date_today(): las = laspy.read(test_common.simple_las) new_header = laspy.LasHeader( version=las.header.version, point_format=las.header.point_format ) assert new_header.creation_date == date.today() new_las = laspy.LasData(header=new_header, points=las.points) read_new_las = write_then_read_again(new_las) assert read_new_las.header.date == date.today() assert new_header.creation_date == date.today() def test_writing_when_creation_date_is_None(): las = laspy.read(test_common.simple_las) new_header = laspy.LasHeader( version=las.header.version, point_format=las.header.point_format ) assert new_header.creation_date == date.today() new_header.creation_date = None assert new_header.creation_date is None new_las = laspy.LasData(header=new_header, points=las.points) read_new_las = write_then_read_again(new_las) assert read_new_las.header.creation_date == date.today() assert new_header.creation_date is None def test_header_min_max_chunk_mode(): """Test that when writing a file using 'chunk mode' the header`s bounds are correct""" las = laspy.read(test_common.simple_las) header = laspy.LasHeader( point_format=las.header.point_format, version=las.header.version ) with io.BytesIO() as stream: with laspy.open(stream, mode="w", header=header, closefd=False) as writer: # We intenionally write the file in two write_points call writer.write_points(las.points[: len(las.points) // 2]) writer.write_points(las.points[len(las.points) // 2 :]) stream.seek(0) new_las = laspy.read(stream) assert np.all(new_las.header.maxs == las.header.maxs) assert np.all(new_las.header.mins == las.header.mins) def test_update_header_empty_las_data(): """Test updating the header on and empyt las, and writing an empyt las produces correct bounds values in header """ las = laspy.create() las.update_header() assert np.all(las.header.mins == [0.0, 0.0, 0.0]) assert np.all(las.header.maxs == [0.0, 0.0, 0.0]) assert np.sum(las.header.number_of_points_by_return) == 0 las = write_then_read_again(las) assert np.all(las.header.mins == [0.0, 0.0, 0.0]) assert np.all(las.header.maxs == [0.0, 0.0, 0.0]) assert np.sum(las.header.number_of_points_by_return) == 0 header = laspy.LasHeader() with io.BytesIO() as stream: with laspy.open(stream, mode="w", header=header, closefd=False) as writer: # We intenionally don't write points pass stream.seek(0) new_las = laspy.read(stream) assert np.all(new_las.header.mins == [0.0, 0.0, 0.0]) assert np.all(new_las.header.maxs == [0.0, 0.0, 0.0]) assert np.sum(new_las.header.number_of_points_by_return) == 0 laspy-laspy-a32c7aa/tests/test_las_1_1.py000066400000000000000000000006731463461040100204520ustar00rootroot00000000000000import io from pathlib import Path import laspy simple_1_1 = Path(__file__).parent / "data" / "simple1_1.las" def test_read_las_1_1(): las = laspy.read(simple_1_1) def test_create_las_1_1(): las = laspy.create(point_format=1, file_version="1.1") def write_las_1_1(): las = laspy.create(point_format=1, file_version="1.1") with io.BytesIO() as out: las.write(out) out.seek(0) las = las.read(out) laspy-laspy-a32c7aa/tests/test_laspy.py000066400000000000000000000615651463461040100203720ustar00rootroot00000000000000import os import time import unittest from uuid import UUID import numpy as np import pytest import laspy def flip_bit(x): return 1 * (x == 0) class LasReaderTestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple.las") tempfile = "junk.las" def setUp(self): self.FileObject = laspy.read(self.simple) LasFile = self.FileObject self.X = list(LasFile.X) self.Y = list(LasFile.Y) self.Z = list(LasFile.Z) self.intensity = list(LasFile.intensity) self.flag_byte = list(LasFile.flag_byte) self.return_num = list(LasFile.return_num) self.num_returns = list(LasFile.num_returns) self.scan_dir_flag = list(LasFile.scan_dir_flag) self.edge_flight_line = list(LasFile.edge_flight_line) self.raw_classification = list(LasFile.raw_classification) self.classification = list(LasFile.classification) self.synthetic = list(LasFile.synthetic) self.key_point = list(LasFile.key_point) self.withheld = list(LasFile.withheld) self.scan_angle_rank = list(LasFile.scan_angle_rank) self.user_data = list(LasFile.user_data) self.pt_src_id = list(LasFile.pt_src_id) ## The following conditional code is redundant for ## simple.las, which of course has only one pt. format. ## Perhaps find several other files? if LasFile.header.point_format.id in (1, 2, 3, 4, 5): self.gps_time = list(LasFile.gps_time) if LasFile.header.point_format.id in (2, 3, 5): self.red = list(LasFile.red) self.green = list(LasFile.green) self.blue = list(LasFile.blue) if LasFile.header.point_format.id in (4, 5): self.wave_form_packet_Desc_index = list(LasFile.wave_packet_desc_index) self.byte_offset_to_waveform = list(LasFile.byte_offset_to_waveform) self.waveform_packet_size = list(LasFile.waveform_packet_size) self.return_point_waveform_loc = list(LasFile.return_point_waveform_loc) self.x_t = list(LasFile.x_t) self.y_t = list(LasFile.y_t) self.z_t = list(LasFile.z_t) self.p1 = LasFile.points[100] self.p2 = LasFile.points[976] self.idx1 = 100 self.idx2 = 976 def test_x(self): """Fetch and test X dimension""" self.assertEqual(self.p1.X, 63666106, self.X[self.idx1]) self.assertEqual(self.p2.X, 63714022, self.X[self.idx2]) def test_y(self): """Fetch and test Y dimension""" self.assertEqual(self.p1.Y, 84985413, self.Y[self.idx1]) self.assertEqual(self.p2.Y, 85318232, self.Y[self.idx2]) def test_z(self): """Fetch and test Z dimension""" self.assertEqual(self.p1.Z, 42490, self.Z[self.idx1]) self.assertEqual(self.p2.Z, 42306, self.Z[self.idx2]) def test_intensity(self): """Fetch and test intensity dimension""" self.assertEqual(self.p1.intensity, 233, self.intensity[self.idx1]) self.assertEqual(self.p2.intensity, 1, self.intensity[self.idx2]) def test_bit_flags(self): """Fetch and test the binary flags associated with flag_byte dimension""" self.assertEqual(self.p1.flag_byte, self.flag_byte[self.idx1]) self.assertEqual(self.p2.flag_byte, self.flag_byte[self.idx2]) self.assertEqual(self.p1.return_num, self.return_num[self.idx1], 1) self.assertEqual(self.p2.return_num, self.return_num[self.idx2], 2) self.assertEqual(self.p1.num_returns, self.num_returns[self.idx1], 1) self.assertEqual(self.p2.num_returns, self.num_returns[self.idx2], 2) self.assertEqual(self.p1.scan_dir_flag, self.scan_dir_flag[self.idx1], 0) self.assertEqual(self.p2.scan_dir_flag, self.scan_dir_flag[self.idx2], 1) self.assertEqual(self.p1.edge_flight_line, self.edge_flight_line[self.idx1], 0) self.assertEqual(self.p2.edge_flight_line, self.edge_flight_line[self.idx2], 0) def test_scan_angle_rank(self): """Fetch and test scan_angle_rank dimension""" self.assertEqual(self.p1.scan_angle_rank, 2, self.scan_angle_rank[self.idx1]) self.assertEqual(self.p2.scan_angle_rank, 12, self.scan_angle_rank[self.idx2]) def test_raw_classification(self): """Fetch and test the dimension of raw_classification bytes""" self.assertEqual( self.p1.raw_classification, 1, self.raw_classification[self.idx1] ) self.assertEqual( self.p2.raw_classification, 2, self.raw_classification[self.idx2] ) def test_ptstrcid(self): """Fetch and test pt_src_id dimension""" self.assertEqual(self.p1.pt_src_id, 7328, self.pt_src_id[self.idx1]) self.assertEqual(self.p2.pt_src_id, 7334, self.pt_src_id[self.idx2]) def test_GPSTime(self): """Fetch and test gps_time dimension""" self.assertTrue( self.p1.gps_time - 2 * 246504.221932 + self.gps_time[self.idx1] < 0.00001 ) self.assertTrue( self.p2.gps_time - 2 * 249774.658254 + self.gps_time[self.idx2] < 0.00001 ) def test_red(self): """Fetch and test red dimension""" self.assertEqual(self.p1.red, 92, self.red[self.idx1]) self.assertEqual(self.p2.red, 94, self.red[self.idx2]) def test_green(self): """Fetch and test green dimension""" self.assertEqual(self.p1.green, 100, self.green[self.idx1]) self.assertEqual(self.p2.green, 84, self.green[self.idx2]) def test_blue(self): """Fetch and test blue dimension""" self.assertEqual(self.p1.blue, 110, self.blue[self.idx1]) self.assertEqual(self.p2.blue, 94, self.blue[self.idx2]) class LasWriterTestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple.las") tempfile = "writer.las" output_tempfile = "writer_output.las" def setUp(self): self.FileObject = laspy.read(self.simple) def test_x(self): """Writing and testing X dimenson""" X = self.FileObject.X + 1 self.FileObject.X = X X2 = self.FileObject.X self.assertTrue(np.all(X == X2)) scaled_x = self.FileObject.x self.FileObject.x = scaled_x self.assertTrue(np.all(scaled_x == self.FileObject.x)) def test_y(self): """Writing and testing Y dimension""" Y = self.FileObject.Y + 1 self.FileObject.Y = Y Y2 = self.FileObject.Y self.assertTrue(np.all(Y == Y2)) scaled_y = self.FileObject.y self.FileObject.y = scaled_y self.assertTrue(np.all(scaled_y == self.FileObject.y)) def test_z(self): """Writing and testing Z dimension""" Z = self.FileObject.Z + 1 self.FileObject.Z = Z Z2 = self.FileObject.Z self.assertTrue(np.all(Z == Z2)) scaled_z = self.FileObject.z self.FileObject.z = scaled_z self.assertTrue(np.all(scaled_z == self.FileObject.z)) def test_intensity(self): """Writing and testing intensity dimension""" i = self.FileObject.intensity + 1 self.FileObject.intensity = i i2 = self.FileObject.intensity self.assertTrue(np.all(i == i2)) def test_return_num(self): """Writing and testing return_num dimension""" rn = self.FileObject.return_num + 1 self.FileObject.return_num = rn rn2 = self.FileObject.return_num self.assertTrue(np.all(rn == rn2)) def test_overflow_return_num(self): """Testing overflow handling""" rn = np.array(self.FileObject.return_num, dtype=np.uint32) + 100000 with self.assertRaises(OverflowError): self.FileObject.return_num = rn def test_num_returns(self): """Writing and testing num_returns dimension""" nr = self.FileObject.num_returns + 1 self.FileObject.num_returns = nr nr2 = self.FileObject.num_returns self.assertTrue(np.all(nr == nr2)) def test_scan_dir_flag(self): """Writing and testing scan_dir_flag dimension""" sdf = np.array([flip_bit(x) for x in self.FileObject.scan_dir_flag]) self.FileObject.scan_dir_flag = sdf sdf2 = self.FileObject.scan_dir_flag self.assertTrue(np.all(sdf == sdf2)) def test_edge_flight_line(self): """Writing and testing edge_flight_line dimension""" efl = np.array([flip_bit(x) for x in self.FileObject.edge_flight_line]) self.FileObject.edge_flight_line = efl efl2 = self.FileObject.edge_flight_line self.assertTrue(np.all(efl == efl2)) def test_classification(self): """Writing and testing classification byte.""" c1 = self.FileObject.classification + 1 self.FileObject.classification = c1 c2 = self.FileObject.classification self.assertTrue(np.all(c1 == c2)) def test_synthetic(self): """Writing and testing synthetic""" s1 = flip_bit(self.FileObject.synthetic) self.FileObject.synthetic = s1 s2 = self.FileObject.synthetic self.assertTrue(np.all(s1 == s2)) def test_key_point(self): """Writing and testing key point""" k1 = flip_bit(self.FileObject.key_point) self.FileObject.key_point = k1 k2 = self.FileObject.key_point self.assertTrue(np.all(k1 == k2)) def test_withheld(self): """Writing and testing withheld""" w1 = flip_bit(self.FileObject.withheld) self.FileObject.withheld = w1 w2 = self.FileObject.withheld self.assertTrue(np.all(w1 == w2)) def test_scan_angle_rank(self): """Writing and testing scan angle rank""" ar1 = self.FileObject.scan_angle_rank ar1[ar1 >= 1] -= 1 self.FileObject.scan_angle_rank = ar1 ar2 = self.FileObject.scan_angle_rank self.assertTrue(np.all(ar1 == ar2)) def test_user_data(self): """Writing and testing user data""" ud1 = self.FileObject.user_data + 1 self.FileObject.user_data = ud1 ud2 = self.FileObject.user_data self.assertTrue(np.all(ud1 == ud2)) def test_pt_src_id(self): """Writing and testing point source id""" p1 = self.FileObject.user_data + 1 self.FileObject.user_data = p1 p2 = self.FileObject.user_data self.assertTrue(np.all(p1 == p2)) def test_gps_time(self): """Writing and testing gps time""" g1 = self.FileObject.gps_time + 1.0 self.FileObject.gps_time = g1 g2 = self.FileObject.gps_time self.assertTrue(np.all(g1 == g2)) def test_red(self): """Writing and testing red""" r1 = self.FileObject.red + 1 self.FileObject.red = r1 r2 = self.FileObject.red self.assertTrue(np.all(r1 == r2)) def test_green(self): """Writing and testing green""" g1 = self.FileObject.green + 1 self.FileObject.green = g1 g2 = self.FileObject.green self.assertTrue(np.all(g1 == g2)) def test_blue(self): """Writing and testing blue""" b1 = self.FileObject.blue + 1 self.FileObject.blue = b1 b2 = self.FileObject.blue self.assertTrue(np.all(b1 == b2)) # def test_vlr_defined_dimensions2(self): # """Testing VLR defined dimension API""" # File2 = File.File(self.output_tempfile, mode="w", header=self.FileObject.header) # File2.define_new_dimension("test_dimension", 5, "This is a test.") # File2.X = self.FileObject.X # self.assertTrue(File2.test_dimension[500] == 0) # File2.close(ignore_header_changes=True) def tearDown(self): self.FileObject.write(self.output_tempfile) really_remove(self.output_tempfile) class LasHeaderWriterTestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple.las") simple14 = os.path.join(os.path.dirname(__file__), "data", "simple1_4.las") tempfile = os.path.abspath("headerwriter.las") tempfile2 = os.path.abspath("headerwriter2.las") def setUp(self): self.las = laspy.read(self.simple) def test_file_src(self): """Testing file_src""" f1 = self.las.header.file_source_id + 1 self.las.header.file_source_id = f1 f2 = self.las.header.file_source_id assert f1 == f2 @pytest.mark.skip(reason="API changed") def test_uuid(self): """Testing uuid""" guid = self.las.header.guid guid2 = self.las.header.project_id self.assertEqual(guid, guid2) newGuid = UUID(bytes=b"1" * 16) self.las.header.guid = newGuid newGuid2 = self.las.header.get_guid() self.assertEqual(newGuid, newGuid2) def test_versions(self): """Testing Versions""" assert self.las.header.version.major == 1 with self.assertRaises(AttributeError): self.las.header.version.major = 2 def test_system_id(self): """Testing System ID""" sys1 = self.las.header.system_identifier sys1 = "1234567891" + sys1[10:] self.las.header.system_identifier = sys1 sys2 = self.las.header.system_identifier assert sys1 == sys2 def test_software_id(self): """ "Testing Software ID""" s1 = self.las.header.generating_software s1 = "1234567" + s1[7:] self.las.header.generating_software = s1 s2 = self.las.header.generating_software assert s1 == s2 # with self.assertRaises(laspy.LaspyException): # self.las.header.generating_software = "123" # with self.assertRaises(laspy.LaspyException): # self.las.header.generating_software = "1" * 100 def test_date(self): """Testing Date""" d1 = self.las.header.creation_date assert d1 is None from datetime import datetime d2 = datetime(2007, 12, 10) self.las.header.creation_date = d2 d3 = self.las.header.creation_date self.assertEqual(d2, d3) def test_point_recs_by_return(self): """Testing point records by return""" r1 = self.las.header.number_of_points_by_return + 1 self.las.header.number_of_points_by_return = r1 r2 = self.las.header.number_of_points_by_return assert np.all(r1 == r2) def test_min_max_update(self): """Testing the update min/max function""" x = self.las.X x[0] = max(x) + 1 y = self.las.Y y[0] = max(y) + 1 z = self.las.Z z[0] = max(z) + 1 self.las.X = x self.las.Y = y self.las.Z = z self.las.update_header() file_max = self.las.header.maxs assert np.all(file_max == [self.las.x[0], self.las.y[0], self.las.z[0]]) def test_histogram(self): """Testing the update_histogram functon""" h1 = self.las.header.number_of_points_by_return self.las.update_header() h2 = self.las.header.number_of_points_by_return assert np.all(h1 == h2) def test_offset(self): """Testing offset""" o1 = self.las.header.offsets o1[0] += 1 self.las.header.offsets = o1 o2 = self.las.header.offsets assert np.all(o1 == o2) def test_scale(self): """Testing Scale""" s1 = self.las.header.scales s1[0] += 1 self.las.header.scales = s1 s2 = self.las.header.scales assert np.all(s1 == s2) class LasWriteModeTestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple.las") tempfile = "write-mode.las" output_tempfile = "write-mode-output.las" def setUp(self): self.File1 = laspy.read(self.simple) def test_using_barebones_header(self): """Testing file creation using barebones header""" header = laspy.LasHeader() File2 = laspy.LasData(header) self.assertTrue(File2.header.version == "1.2") X = self.File1.X Y = self.File1.Y Z = self.File1.Z File2.X = X File2.Y = Y File2.Z = Z File2.write(self.output_tempfile) File2 = laspy.read(self.output_tempfile) self.assertTrue(np.all(X == File2.X)) self.assertTrue(np.all(Y == File2.Y)) self.assertTrue(np.all(Z == File2.Z)) def test_using_existing_header(self): """Test file creation using an existing header""" File2 = laspy.LasData(self.File1.header) X = self.File1.X Y = self.File1.Y Z = self.File1.Z File2.X = X File2.Y = Y File2.Z = Z File2.write(self.output_tempfile) File2 = laspy.read(self.output_tempfile) self.assertTrue(np.all(X == File2.X)) self.assertTrue(np.all(Y == File2.Y)) self.assertTrue(np.all(Z == File2.Z)) def tearDown(self): really_remove(self.output_tempfile) class LasV_13TestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple1_3.las") output_tempfile = "v13-output.las" def setUp(self): self.File1 = laspy.read(self.simple) def test_glob_encode(self): """Testing v1.3 Global Encoding""" old = self.File1.header.global_encoding.gps_time_type assert old == laspy.header.GpsTimeType.WEEK_TIME self.File1.header.global_encoding.gps_time_type = ( laspy.header.GpsTimeType.STANDARD ) assert ( self.File1.header.global_encoding.gps_time_type == laspy.header.GpsTimeType.STANDARD ) self.File1.header.global_encoding.gps_time_type = ( laspy.header.GpsTimeType.WEEK_TIME ) assert ( self.File1.header.global_encoding.gps_time_type == laspy.header.GpsTimeType.WEEK_TIME ) File2 = laspy.LasData(self.File1.header) File2.write(self.output_tempfile) File2 = laspy.read(self.output_tempfile) self.assertEqual( self.File1.header.global_encoding.waveform_data_packets_internal, File2.header.global_encoding.waveform_data_packets_internal, ) self.assertEqual( self.File1.header.global_encoding.waveform_data_packets_external, File2.header.global_encoding.waveform_data_packets_external, ) self.assertEqual( self.File1.header.global_encoding.synthetic_return_numbers, File2.header.global_encoding.synthetic_return_numbers, ) def test_wave_packet_desc_index(self): """Testing wave_packet_desc_index.""" test1 = self.File1.wave_packet_desc_index File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points assert np.all(test1 == File2.wave_packet_desc_index) def test_byte_offset_to_waveform_data(self): """Testing byte_offset_to_waveform_data""" test1 = self.File1.byte_offset_to_waveform_data File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points assert np.all(test1 == File2.byte_offset_to_waveform_data) def test_waveform_packet_size(self): """Testing waveform_packet_size""" test1 = self.File1.waveform_packet_size File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points.copy() assert np.all(test1 == File2.waveform_packet_size) def test_return_point_waveform_loc(self): """Testing return_point_waveform_loc""" test1 = self.File1.return_point_waveform_loc File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points.copy() assert np.all(test1 == File2.return_point_waveform_loc) File2.return_point_waveform_loc += 1 assert np.all(test1 != File2.return_point_waveform_loc) def test_x_t(self): """Testing x_t""" test1 = self.File1.x_t File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points.copy() assert np.all(test1 == File2.x_t) File2.x_t += 1 assert np.all(test1 != File2.x_t) def test_y_t(self): """Testing y_t""" test1 = self.File1.y_t File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points.copy() np.all(test1 == File2.y_t) File2.y_t += 1 assert np.all(test1 != File2.y_t) def test_z_t(self): """Testing z_t""" test1 = self.File1.z_t File2 = laspy.LasData(self.File1.header) File2.points = self.File1.points.copy() np.all(test1 == File2.z_t) File2.z_t += 1 np.all(test1 != File2.z_t) def tearDown(self): really_remove(self.output_tempfile) class LasV_14TestCase(unittest.TestCase): simple = os.path.join(os.path.dirname(__file__), "data", "simple1_4.las") tempfile = "v14.las" output_tempfile = "v14-output.las" def setUp(self): self.File1 = laspy.read(self.simple) def test_glob_encode(self): """Testing v1.4 Global Encoding""" old = self.File1.header.global_encoding.gps_time_type assert old == laspy.header.GpsTimeType.WEEK_TIME self.File1.header.global_encoding.gps_time_type = ( laspy.header.GpsTimeType.STANDARD ) assert ( self.File1.header.global_encoding.gps_time_type == laspy.header.GpsTimeType.STANDARD ) File2 = laspy.LasData(self.File1.header) self.assertEqual( self.File1.header.global_encoding.waveform_data_packets_internal, File2.header.global_encoding.waveform_data_packets_internal, ) self.assertEqual( self.File1.header.global_encoding.waveform_data_packets_external, File2.header.global_encoding.waveform_data_packets_external, ) self.assertEqual( self.File1.header.global_encoding.synthetic_return_numbers, File2.header.global_encoding.synthetic_return_numbers, ) def test_glob_encode_bits(self): b1 = self.File1.header.global_encoding.gps_time_type b2 = self.File1.header.global_encoding.waveform_data_packets_internal b3 = self.File1.header.global_encoding.waveform_data_packets_external b4 = self.File1.header.global_encoding.synthetic_return_numbers b5 = self.File1.header.global_encoding.wkt bf1 = 1 - int(b1) bf2 = 1 - int(b2) bf3 = 1 - int(b3) bf4 = 1 - int(b4) bf5 = 1 - int(b5) self.File1.header.global_encoding.gps_time_type = bf1 self.File1.header.global_encoding.waveform_data_packets_internal = bf2 self.File1.header.global_encoding.waveform_data_packets_external = bf3 self.File1.header.global_encoding.synthetic_return_numbers = bf4 self.File1.header.global_encoding.wkt = bf5 assert self.File1.header.global_encoding.gps_time_type == bf1 assert self.File1.header.global_encoding.waveform_data_packets_internal == bf2 assert self.File1.header.global_encoding.waveform_data_packets_external == bf3 assert self.File1.header.global_encoding.synthetic_return_numbers == bf4 assert self.File1.header.global_encoding.wkt == bf5 def test_classification_variables(self): """Testing v1.4 classification support""" classification = self.File1.classification classification_flags = self.File1.classification_flags scanner_channel = self.File1.scanner_channel scan_dir_flag = self.File1.scan_dir_flag edge_flight_line = self.File1.edge_flight_line return_num = self.File1.return_num num_returns = self.File1.num_returns File2 = laspy.LasData(self.File1.header) File2.classification = classification File2.classification_flags = classification_flags File2.scan_dir_flag = scan_dir_flag File2.scanner_channel = scanner_channel File2.edge_flight_line = edge_flight_line File2.return_num = return_num File2.num_returns = num_returns File2.write(self.output_tempfile) File2 = laspy.read(self.output_tempfile) assert np.all(num_returns == File2.num_returns) assert np.all(return_num == File2.return_num) assert np.all(edge_flight_line == File2.edge_flight_line) assert np.all(scan_dir_flag == File2.scan_dir_flag) assert np.all(classification_flags == File2.classification_flags) assert np.all(classification == File2.classification) assert np.all(scanner_channel == File2.scanner_channel) def tearDown(self): really_remove(self.output_tempfile) def really_remove(path, max_=1): """ Hack for Windows when quickly creating and deleting files. os.remove can return when Windows still thinks the file exists. When trying to re-create the file with the same name, a PermissionError occurs. :param path: path to remove :param max_: max seconds to wait """ wait = 0.01 while os.path.exists(path): try: os.remove(path) except WindowsError: time.sleep(wait) max_ -= wait if max_ <= 0: break laspy-laspy-a32c7aa/tests/test_mmap.py000066400000000000000000000004341463461040100201600ustar00rootroot00000000000000import numpy as np import laspy def test_mmap(mmapped_file_path): with laspy.mmap(mmapped_file_path) as las: las.classification[:] = 25 assert np.all(las.classification == 25) las = laspy.read(mmapped_file_path) assert np.all(las.classification == 25) laspy-laspy-a32c7aa/tests/test_modif_1_2.py000066400000000000000000000034661463461040100207750ustar00rootroot00000000000000import numpy as np import pytest import laspy from tests.test_common import ( do_compression, simple_las, simple_laz, write_then_read_again, ) @pytest.fixture( params=( [simple_las, simple_laz] if laspy.LazBackend.detect_available() else [simple_las] ) ) def las(request): return laspy.read(request.param) def test_classification_overflows(las): c = las.classification with pytest.raises(OverflowError): c[0] = 54 @pytest.mark.parametrize("do_compress", do_compression) def test_classification_change(las, do_compress): c = las.classification c[:] = 10 las.classification = c assert np.allclose(c, las.classification) las = write_then_read_again(las, do_compress=do_compress) assert np.allclose(c, las.classification) @pytest.mark.parametrize("do_compress", do_compression) def test_synthetic_change(las, do_compress): s = las.synthetic s[:] = False s[17] = True las.synthetic = s assert np.allclose(s, las.synthetic) las = write_then_read_again(las, do_compress=do_compress) assert np.allclose(s, las.synthetic) @pytest.mark.parametrize("do_compress", do_compression) def test_key_point_change(las, do_compress): kp = las.key_point kp[:] = False kp[25] = True las.key_point = kp assert np.allclose(kp, las.key_point) las = write_then_read_again(las, do_compress=do_compress) assert np.allclose(kp, las.key_point) @pytest.mark.parametrize("do_compress", do_compression) def test_withheld_changes(las, do_compress): withheld = las.withheld withheld[:] = False withheld[180] = True las.withheld = withheld assert np.allclose(withheld, las.withheld) las = write_then_read_again(las, do_compress=do_compress) assert np.allclose(withheld, las.withheld) laspy-laspy-a32c7aa/tests/test_modif_1_4.py000066400000000000000000000027531463461040100207750ustar00rootroot00000000000000import numpy as np import pytest import laspy from laspy import LazBackend from tests.test_common import test1_4_las, write_then_read_again @pytest.fixture(scope="session") def las(): return laspy.read(test1_4_las) @pytest.fixture(params=LazBackend.detect_available()) def laz_backend(request): return request.param def test_classification(las): las.classification[:] = 234 assert np.all(las.classification == 234) res = write_then_read_again(las) assert np.all(las.classification == res.classification) def test_intensity(las): las.intensity[:] = 89 assert np.all(las.intensity == 89) res = write_then_read_again(las) assert np.all(las.intensity == res.intensity) def test_writing_las_with_evlrs(): las = laspy.read(test1_4_las) assert las.evlrs == [] evlr = laspy.VLR( user_id="test", record_id=42, description="Just a test", record_data=b"And so he grinds his own hands", ) las.evlrs.append(evlr) las_1 = write_then_read_again(las, do_compress=False) assert las_1.evlrs == [evlr] def test_writing_laz_with_evlrs(laz_backend): las = laspy.read(test1_4_las) assert las.evlrs == [] evlr = laspy.VLR( user_id="test", record_id=42, description="Just a test", record_data=b"And so he grinds he own hands", ) las.evlrs.append(evlr) las_1 = write_then_read_again(las, do_compress=True, laz_backend=laz_backend) assert las_1.evlrs == [evlr] laspy-laspy-a32c7aa/tests/test_non_seekable.py000066400000000000000000000055131463461040100216560ustar00rootroot00000000000000import pytest import laspy from laspy import VLR from .conftest import ( LAS_1_4_WITH_EVLRS_FILE_PATH, LAZ_1_4_WITH_EVLRS_FILE_PATH, NonSeekableStream, las_file_path, laz_file_path, ) from .test_chunk_read_write import check_chunked_reading_gives_expected_points EXPECTED_EVLRS = [ VLR( user_id="pylastest", record_id=42, description="just a test evlr", record_data=b"Test 1 2 ... 1 2", ) ] @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="None seekable laz is only supported by lazrs", ) def test_laz_reading_non_seekable_stream(laz_file_path): with open(laz_file_path, mode="rb") as f: stream = NonSeekableStream(f) laspy.read(stream, closefd=False) def test_las_reading_non_seekable_stream(las_file_path): with open(las_file_path, mode="rb") as f: stream = NonSeekableStream(f) laspy.read(stream, closefd=False) @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="Non seekable laz is only supported by lazrs", ) def test_laz_selective_decompression_reading_non_seekable_stream(): with open(LAZ_1_4_WITH_EVLRS_FILE_PATH, mode="rb") as f: stream = NonSeekableStream(f) selection = laspy.DecompressionSelection.base() las = laspy.read(stream, closefd=False, decompression_selection=selection) assert las.evlrs == EXPECTED_EVLRS @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="Non seekable laz is only supported by lazrs", ) def test_laz_with_evlr_reading_non_seekable_stream(): with open(LAZ_1_4_WITH_EVLRS_FILE_PATH, mode="rb") as f: stream = NonSeekableStream(f) las = laspy.read(stream, closefd=False) assert las.evlrs == EXPECTED_EVLRS def test_las_with_evlr_reading_non_seekable_stream(las_file_path): with open(LAS_1_4_WITH_EVLRS_FILE_PATH, mode="rb") as f: stream = NonSeekableStream(f) las = laspy.read(stream, closefd=False) assert las.evlrs == EXPECTED_EVLRS def test_non_seekable_chunked_las_reading(las_file_path): ground_truth = laspy.read(las_file_path) with open(las_file_path, mode="rb") as raw_file: las_reader = laspy.open(NonSeekableStream(raw_file), closefd=False) check_chunked_reading_gives_expected_points( ground_truth, las_reader, iter_size=130 ) @pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="Non seekable laz is only supported by lazrs", ) def test_non_seekable_chunked_laz_reading(laz_file_path): ground_truth = laspy.read(laz_file_path) with open(laz_file_path, mode="rb") as raw_file: las_reader = laspy.open(NonSeekableStream(raw_file), closefd=False) check_chunked_reading_gives_expected_points( ground_truth, las_reader, iter_size=130 ) laspy-laspy-a32c7aa/tests/test_point_format.py000066400000000000000000000007461463461040100217350ustar00rootroot00000000000000import pytest import laspy from laspy import PointFormat from tests.test_common import extra_bytes_laz @pytest.mark.skipif( len(laspy.LazBackend.detect_available()) == 0, reason="No Laz Backend installed" ) def test_extra_dims_not_equal(): """Test to confirm that two point format with same id but not same extra dimension are not equal """ las = laspy.read(extra_bytes_laz) i = las.points.point_format.id assert las.points.point_format != PointFormat(i) laspy-laspy-a32c7aa/tests/test_reading_1_2.py000066400000000000000000000127761463461040100213140ustar00rootroot00000000000000import io import os import numpy as np import pytest import laspy from tests.test_common import simple_las, simple_laz, skip_if_no_laz_backend @pytest.fixture( params=( [simple_las, simple_laz] if laspy.LazBackend.detect_available() else [simple_las] ), scope="session", ) def read_simple(request): return laspy.read(request.param) @pytest.fixture() def open_simple(): return open(simple_las, mode="rb") @pytest.fixture() def read_uncompressed(): return laspy.read(simple_laz) @pytest.fixture() def get_header(): with laspy.open(simple_las) as fin: return fin.header def test_header(get_header): header = get_header assert header.file_source_id == 0 assert header.version.major == 1 assert header.version.minor == 2 assert header.system_identifier == "" assert header.generating_software == "TerraScan" assert header.creation_date is None assert header.offset_to_point_data == 227 assert len(header.vlrs) == 0 assert header.point_format.id == 3 assert header.point_format.size == 34 assert header.point_count == 1065 assert tuple(header.number_of_points_by_return[:5]) == (925, 114, 21, 5, 0) assert header.x_scale == 0.01 assert header.y_scale == 0.01 assert header.z_scale == 0.01 assert header.x_offset == 0 assert header.y_offset == 0 assert header.z_offset == 0 assert header.x_max == pytest.approx(638982.55) assert header.x_min == pytest.approx(635619.85) assert header.y_max == pytest.approx(853535.43) assert header.y_min == pytest.approx(848899.70) assert header.z_max == pytest.approx(586.38) assert header.z_min == pytest.approx(406.59) def test_no_vlr_for_simple(read_simple): f = read_simple assert f.vlrs == [] def test_every_byte_has_been_read(open_simple): fp = open_simple _ = laspy.read(fp, closefd=False) assert fp.tell() == os.path.getsize(simple_las) fp.close() def test_unscaled_x(read_simple): f = read_simple assert f.X.max() == 63898255 assert f.X.min() == 63561985 def test_unscaled_y(read_simple): f = read_simple assert f.Y.max() == 85353543 assert f.Y.min() == 84889970 def test_unscaled_z(read_simple): f = read_simple assert f.Z.max() == 58638 assert f.Z.min() == 40659 def test_intensity(read_simple): f = read_simple assert f.intensity.max() == 254 assert f.intensity.min() == 0 def test_return_number(read_simple): f = read_simple assert f.return_number.max() == 4 assert f.return_number.min() == 1 def test_number_of_returns(read_simple): f = read_simple assert f.number_of_returns.max() == 4 assert f.number_of_returns.min() == 1 def test_edge_of_flight_line(read_simple): f = read_simple assert f.edge_of_flight_line.max() == 0 assert f.edge_of_flight_line.min() == 0 def test_scan_direction_flag(read_simple): f = read_simple assert f.scan_direction_flag.max() == 1 assert f.scan_direction_flag.min() == 0 def test_scan_angle_rank(read_simple): f = read_simple assert f.scan_angle_rank.max() == 18 assert f.scan_angle_rank.min() == -19 def test_classification_max_min(read_simple): f = read_simple assert f.classification.max() == 2 assert f.classification.min() == 1 def test_classification_count(read_simple): f = read_simple uniques, counts = np.unique(f.classification, return_counts=True) assert np.all(uniques == [1, 2]) assert counts[0] == 789 # class code 1 assert counts[1] == 276 # class code 2 def test_user_data(read_simple): f = read_simple assert f.user_data.max() == 149 assert f.user_data.min() == 117 def test_point_source_id(read_simple): f = read_simple assert f.point_source_id.max() == 7334 assert f.point_source_id.min() == 7326 def test_gps_time(read_simple): f = read_simple assert f.gps_time.max() == pytest.approx(249783.162158) assert f.gps_time.min() == pytest.approx(245370.417075) def test_red(read_simple): f = read_simple assert f.red.max() == 249 assert f.red.min() == 39 def test_green(read_simple): f = read_simple assert f.green.max() == 239 assert f.green.min() == 57 def test_blue(read_simple): f = read_simple assert f.blue.max() == 249 assert f.blue.min() == 56 @skip_if_no_laz_backend def test_decompression_is_same_as_uncompressed(): u_las = laspy.read(simple_las) c_las = laspy.read(simple_laz) u_point_buffer = bytes(u_las.points.memoryview()) c_points_buffer = bytes(c_las.points.memoryview()) assert u_point_buffer == c_points_buffer def check_seeking_works(las_reader: laspy.LasReader): p1 = las_reader.read_points(10) idx = las_reader.seek(5) assert idx == 5 p2 = las_reader.read_points(5) assert p1[5:] == p2 idx = las_reader.seek(-5, io.SEEK_CUR) assert idx == 5 p2 = las_reader.read_points(5) assert p1[5:] == p2 rest = las_reader.read_points(-1) assert len(rest) == las_reader.header.point_count - 10 idx = las_reader.seek(-150, io.SEEK_END) assert idx == las_reader.header.point_count - 150 p2 = las_reader.read_points(-1) assert p2 == rest[-150:] def test_seek_las(las_file_path): with laspy.open(las_file_path) as reader: check_seeking_works(reader) @pytest.mark.parametrize("laz_backend", laspy.LazBackend.detect_available()) def test_seek_laz(laz_file_path, laz_backend): with laspy.open(laz_file_path, laz_backend=laz_backend) as reader: check_seeking_works(reader) laspy-laspy-a32c7aa/tests/test_reading_1_4.py000066400000000000000000000165461463461040100213150ustar00rootroot00000000000000import os from pathlib import Path import numpy as np import pytest import laspy from laspy import LazBackend from tests.test_common import test1_4_las @pytest.fixture() def file(): return laspy.read(test1_4_las) def test_unscaled_x(file): assert file.X.max() == 1751224820 assert file.X.min() == 1320803567 def test_unscaled_y(file): assert file.Y.max() == -860121188 assert file.Y.min() == -864646690 def test_unscaled_z(file): assert file.Z.max() == -1745638014 assert file.Z.min() == -1751937981 def test_intensity(file): assert file.intensity.max() == 68 assert file.intensity.min() == 2 def test_return_number(file): assert file.return_number.max() == 4 assert file.return_number.min() == 1 def test_number_of_returns(file): assert file.number_of_returns.max() == 4 assert file.number_of_returns.min() == 1 def test_edge_of_flight_line(file): assert file.edge_of_flight_line.max() == 1 assert file.edge_of_flight_line.min() == 0 def scan_direction_flag(file): assert file.scan_direction_flag.max() == 1 assert file.scan_direction_flag.min() == 0 def test_classification(file): assert file.classification.max() == 2 assert file.classification.min() == 2 def test_scan_angle_rank(file): assert file.scan_angle.max() == 3173 assert file.scan_angle.min() == 1837 def test_user_data(file): assert file.user_data.max() == 0 assert file.user_data.min() == 0 def test_point_source_id(file): assert file.point_source_id.max() == 202 assert file.point_source_id.min() == 202 def test_gps_time(file): assert file.gps_time.max() == pytest.approx(83177420.601045) assert file.gps_time.min() == pytest.approx(83177420.534005) def test_scanner_channel(file): assert file.scanner_channel.max() == 0 assert file.scanner_channel.min() == 0 def test_we_read_evlrs_when_simply_opening(): file_with_evlrs = os.path.dirname(__file__) + "/data/1_4_w_evlr.las" expected_evlrs = laspy.VLR( user_id="pylastest", record_id=42, description="just a test evlr", record_data=b"Test 1 2 ... 1 2", ) with laspy.open(file_with_evlrs) as reader: assert reader.evlrs == [expected_evlrs] def test_we_dont_read_evlrs_when_opening_if_user_does_not_want(): file_with_evlrs = os.path.dirname(__file__) + "/data/1_4_w_evlr.las" with laspy.open(file_with_evlrs, read_evlrs=False) as reader: assert reader.evlrs is None def test_reader_read_reads_evlrs_even_if_skipped_at_opening(): file_with_evlrs = os.path.dirname(__file__) + "/data/1_4_w_evlr.las" expected_evlrs = [ laspy.VLR( user_id="pylastest", record_id=42, description="just a test evlr", record_data=b"Test 1 2 ... 1 2", ) ] with laspy.open(file_with_evlrs, read_evlrs=False) as reader: assert reader.evlrs is None las = reader.read() assert las.evlrs == expected_evlrs assert reader.evlrs == expected_evlrs @pytest.mark.parametrize( "file,backend", [ ("/data/1_4_w_evlr.las", None), pytest.param( "/data/1_4_w_evlr.laz", LazBackend.Laszip, marks=pytest.mark.skipif( not LazBackend.Laszip.is_available(), reason="laszip is not installed" ), ), pytest.param( "/data/1_4_w_evlr.laz", LazBackend.Lazrs, marks=pytest.mark.skipif( not LazBackend.Lazrs.is_available(), reason="lazrs is not installed" ), ), pytest.param( "/data/1_4_w_evlr.laz", LazBackend.LazrsParallel, marks=pytest.mark.skipif( not LazBackend.LazrsParallel.is_available(), reason="lazrs is not installed", ), ), ], ) def test_manually_reading_evlrs(file, backend): # The goal is to test we can read evlrs # in between reading points, as reading evlrs # will require to seek to them, so this is to make sure # we correctly reseek to the previous position # and that we can continue to read points file_with_evlrs = os.path.dirname(__file__) + file expected_evlrs = [ laspy.VLR( user_id="pylastest", record_id=42, description="just a test evlr", record_data=b"Test 1 2 ... 1 2", ) ] expected_points = laspy.read(file_with_evlrs, laz_backend=backend).points with laspy.open(file_with_evlrs, read_evlrs=False, laz_backend=backend) as reader: points = laspy.ScaleAwarePointRecord.empty(header=reader.header) assert reader.evlrs is None chunk_size = 100 iter = reader.chunk_iterator(chunk_size) chunk1 = next(iter) assert np.all(chunk1 == expected_points[:chunk_size]) reader.read_evlrs() assert reader.evlrs == expected_evlrs for i, chunk in enumerate(iter): assert np.all( chunk == expected_points[(i + 1) * chunk_size : (i + 2) * chunk_size] ) @pytest.mark.parametrize( "backend", [ pytest.param( laspy.LazBackend.Laszip, marks=pytest.mark.skipif( not laspy.LazBackend.Laszip.is_available(), reason="Laszip not installed", ), ), pytest.param( laspy.LazBackend.Lazrs, marks=pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="lazrs not installed" ), ), pytest.param( laspy.LazBackend.LazrsParallel, marks=pytest.mark.skipif( not laspy.LazBackend.Lazrs.is_available(), reason="lazrs not installed" ), ), ], ) def test_selective_decompression(backend): # We only decompress X,Y, return number, number of returns, intensity selection = laspy.DecompressionSelection.base().decompress_intensity() simple1_4 = Path(__file__).parent / "data" / "1_4_w_evlr.laz" fully_decompressed_laz = laspy.read(simple1_4, laz_backend=backend) partially_decompressed_laz = laspy.read( simple1_4, laz_backend=backend, decompression_selection=selection ) assert fully_decompressed_laz.point_format.id >= 6 assert np.all(fully_decompressed_laz.X == partially_decompressed_laz.X) assert np.all(fully_decompressed_laz.Y == partially_decompressed_laz.Y) assert np.all( fully_decompressed_laz.return_number == partially_decompressed_laz.return_number ) assert np.all( fully_decompressed_laz.number_of_returns == partially_decompressed_laz.number_of_returns ) assert np.all( fully_decompressed_laz.intensity == partially_decompressed_laz.intensity ) # This is the chunk size of the chunks inside the .laz chunk_size = 50_000 # In selective decompression, the bytes which are not decompressed are set to the value # of the first point of the LAZ chunk for i in range((len(fully_decompressed_laz) // chunk_size) + 1): start, end = i, (i + 1) * chunk_size assert np.all( # 12 fully_decompressed_laz.classification[start] == partially_decompressed_laz.classification[start:end] ) assert np.all( fully_decompressed_laz.Z[start] == partially_decompressed_laz.Z[start:end] ) laspy-laspy-a32c7aa/tests/test_vlrs.py000066400000000000000000000044501463461040100202160ustar00rootroot00000000000000import io from pathlib import Path import pytest import laspy from tests import test_common def test_adding_classification_lookup(): simple = laspy.read(test_common.simple_las) classification_lookup = laspy.vlrs.known.ClassificationLookupVlr() assert len(classification_lookup.lookups) == 0 classification_lookup[20] = "computer" assert len(classification_lookup.lookups) == 1 classification_lookup[17] = "car" simple.vlrs.append(classification_lookup) simple = test_common.write_then_read_again(simple) classification_lookups = simple.vlrs.get("ClassificationLookupVlr")[0] assert classification_lookups[20] == "computer" assert classification_lookups[17] == "car" def test_lookup_out_of_range(): classification_lookup = laspy.vlrs.known.ClassificationLookupVlr() with pytest.raises(ValueError): classification_lookup[541] = "LiquidWater" with pytest.raises(ValueError): classification_lookup[-42] = "SolidWater" def test_adding_extra_bytes_vlr_by_hand(): """ Test that if someone adds an ExtraBytesVlr by himself without having matching extra bytes in the point record, the ExtraByteVlr is removed before writing """ simple = laspy.read(test_common.simple_las) ebvlr = laspy.vlrs.known.ExtraBytesVlr() ebs = laspy.vlrs.known.ExtraBytesStruct(data_type=3, name="Fake".encode()) ebvlr.extra_bytes_structs.append(ebs) simple.vlrs.append(ebvlr) assert len(simple.vlrs.get("ExtraBytesVlr")) == 1 las = laspy.lib.write_then_read_again(simple) assert simple.points.point_size == las.points.point_size assert len(las.vlrs.get("ExtraBytesVlr")) == 0 def test_geokey_parsing_does_not_require_optional_params(): las = laspy.read(str(Path(__file__).parent / "data/simple1_3.las")) geo_keys = laspy.vlrs.geotiff.parse_geo_tiff_keys_from_vlrs(las.vlrs) assert len(geo_keys) == 6 def test_cannot_write_vlrs_with_more_than_uint16_max_bytes(): las = laspy.read(test_common.simple_las) big_junk_vlr = laspy.VLR( user_id="LASPY_ID", record_id=0, description="A VLR full of junk data", record_data=b"1" * (65_535 + 1), ) las.vlrs.append(big_junk_vlr) with pytest.raises(ValueError): with io.BytesIO() as output: las.write(output)